📌
AWS IAMのシンプルな理解
IAMとはAWSのアクセスを管理するもの
基礎知識
- AWSアカウントは12桁のIDで1つのアカウント
1つのアカウントの中に、rootユーザー(特権)とIAMユーザーが居る
┌──────── AWSアカウント(例: 123456789012)─────────┐
│ │
│ ┌───── rootユーザー(最高権限)────────┐ │
│ │ └── S3バケット作成可能 │ │
│ └───────────────────────────────────┘ │
│ │
│ ┌─────── IAMユーザー(個別権限)───────┐ │
│ │ └── Lambda関数作成可能(適切な権限付与時) │
│ └───────────────────────────────────┘ │
└───────────────────────────────────────────────┘
- arnはAWS内のリソースのユニークID
arn:partition:service:region:account-id:resource
例:arn:aws:lambda:ap-northeast-1:123456789012:function:my-function
構造
| IAM用語 | 役割 | 具体例 |
|---|---|---|
| ポリシー | 権限のルールセット | 「S3を読み取れる」というルール |
| ロール | 権限(ポリシー)をまとめた集合体 | 「S3読み取り+CloudWatchログ書き込み」のロール |
| IAMユーザーまたはAWSサービス | ロールを使ってAWSを操作する | Lambdaが「ロール」を使いS3にアクセス |
重要なポイント
- IAMは操作する側の権限 (操作される側で許可を出すものではない)
IAMの具体例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow", // 許可するか拒否するか
"Action": "lambda:InvokeFunction", // 何の操作を許可するか
"Resource": "arn:aws:lambda:region:account-id:function:function-name" // 対象となるリソース(操作する側)
}
]
}
操作する側 (lambda)に権限を付ける
同じAWSアカウント内であればIAMで許可すればアクセス可能(異なるAWSアカウントに対しては、IAMの許可に加え、バケットポリシーで明示的に許可が必要)
- 操作される側は、バケットポリシーというIAMとは違う管理があるが単一アカウントを使うなら気にしなくていい
| 条件 | バケットポリシーの変更 |
|---|---|
| 同一AWSアカウント(rootユーザー, IAMユーザー関係なし) | ❌ 不要 |
| 他のAWSアカウント(他人のAWSアカウント) | ✅ 必要(明示的な許可が必要) |
- 誰がlambdaなどを作成したかでポリシーは決まらずlambdaが持つロールに対してポリシーを許可しないといけない。(作成したユーザーの権限を引き継がない)
Tips
- glueの許可はcatalog, dbとtable両方に必要
"arn:aws:glue:ap-northeast-1:xxxx:catalog",
"arn:aws:glue:ap-northeast-1:xxxx:database/hoge/*",
"arn:aws:glue:ap-northeast-1:xxxx:table/hoge*/*"
Discussion