IAM入門 — ユーザーとポリシーでAWSの権限を管理する
はじめに
IAM(Identity and Access Management)はAWSのアクセス管理サービスです。
「誰が(ユーザー・ロール)」「何に(AWSサービス)」「どんな操作を(アクション)」できるかを制御します。
AWSのセキュリティの基本であり、EC2やS3を安全に運用するうえで必ず理解が必要です。
主な概念
| 用語 | 説明 |
|---|---|
| ユーザー | AWSにアクセスする人 |
| グループ | ユーザーをまとめてポリシーを適用する単位 |
| ロール | サービスやEC2インスタンスに付与する権限 |
| ポリシー | 何にどんな操作を許可するかを定義したJSONドキュメント |
ルートユーザーを使わない
AWSアカウント作成時のメールアドレスでログインする「ルートユーザー」は、すべての操作が可能な最強の権限を持ちます。
日常的な作業には必ずIAMユーザーを作って使うのが基本です。
IAMユーザーの作成
- AWSコンソールでIAMを開く
- 「ユーザー」→「ユーザーを作成」
- ユーザー名を入力
- 「コンソールへのアクセスを許可」にチェック
- 必要なポリシーをアタッチ(例:
AdministratorAccess) - 作成完了
ポリシーの基本
ポリシーはJSON形式で記述します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
| 項目 | 説明 |
|---|---|
| Effect |
Allow(許可)または Deny(拒否) |
| Action | 許可/拒否するAWSの操作(例: s3:GetObject) |
| Resource | 対象のリソース(ARNで指定) |
AWSには事前定義されたマネージドポリシーが多数あるため、AmazonS3ReadOnlyAccessなどを使い回せます。
IAMロール — EC2からS3にアクセスする場合
EC2上のアプリからS3にアクセスするとき、アクセスキーをコードに埋め込むのはNGです。代わりにIAMロールを使います。
- IAMロールを作成(ユースケース: EC2を選択)
- ポリシーをアタッチ(例:
AmazonS3FullAccess) - EC2インスタンスにロールをアタッチ
EC2にロールをアタッチすると、そのインスタンス上のアプリは自動的にS3への権限を持ちます。
// ロールがあればアクセスキー不要でSDKが動く
S3Client s3 = S3Client.builder()
.region(Region.AP_NORTHEAST_1)
.build(); // 認証情報はIAMロールから自動取得
最小権限の原則
IAMの設計で重要なのは最小権限の原則です。
「必要な操作だけを許可する」のが基本で、AdministratorAccessを安易に全員に付与するのはセキュリティリスクになります。
まとめ
| やること | 方法 |
|---|---|
| 日常作業 | IAMユーザーを使う(ルートユーザーは使わない) |
| 権限設定 | マネージドポリシーをアタッチ |
| EC2→S3のアクセス | IAMロールをEC2にアタッチ(アクセスキー不要) |
| 設計方針 | 最小権限の原則を守る |
JavaのSpring SecurityでURL単位の権限制御をするのと考え方は同じです。「誰に何を許可するか」を明示的に定義するのがIAMの本質です。