はじめに
IAMポリシー、IAMロールを作成する際に毎回Principal、Resource、Conditionって何指定するんだっけ?ってことがあったので、まとめておきます。
Principal要素
IAMロールの信頼ポリシーまたは、リソースベースのポリシー(S3バケットポリシーなど)で指定するもので、アクションを実行する人、ユーザ、アプリケーションを指す。
つまり、誰がこの権限を用いて実行してもいいのか、どのサービスがこの権限を用いて実行していいのかを記載する要素です。
書き方としては以下になります。
※大文字小文字も区別され、「*」は使用できません。
- "Principal": { "AWS": "arn:aws:iam::123456789012:root" }
- "Principal": { "AWS": "arn:aws:iam::123456789012:user/role/ロール名" }
- "Principal": { "AWS": "arn:aws:iam::123456789012:user/ユーザー名" }
- "Principal": { "Service": "lambda.amazonaws.com(どのAWSサービスで利用するか)" }
Resource要素
どのAWSリソースに対してアクション内容を許可・拒否するのかを記述する。
例えば、S3の特定のバケットの特定オブジェクトに対する操作を行う場合、
Resource要素には、S3の特定のバケットの特定オブジェクトを指定する。
例:
"Resource": "arn:aws:s3:::${bucketName}"
Condition要素
ポリシーを適用する際の条件を記載する。
条件演算子はこの記事を参考にしてください。
// ユーザー名のPrefixが"Hoge"だった場合のみ適用させたい
Condition: {
"ArnEqals": {
"aws:PrincipalArn": "arn:aws:iam::account-id:user/Hoge*"
}
}
以上になります。