はじめに
S3のバケットポリシーでAssumeロールのアクセス制御設定の方法をまとめる。
詳細
アカウントAでIAMユーザー hoge
からAssumeロールしアカウントBのS3バケットにアクセスする状況を想定。
S3バケットのバケットポリシーでは、そのAssumeロールでのみアクセス許可しその他のアクセスは拒否する設定を行う。
バケットポリシー設定方法は以下の2つ
1.アクセス制御にAssumeロール元のIAMユーザーarnを使用する
2.アクセス制御にAssumeロールのIAMロールIDを使用する
方法1
アクセス制御にAssumeロール前のIAMユーザーarnを使用する場合。
バケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<バケット名>/*",
"NotPrincipal": {
"AWS": [
"arn:aws:iam::<アカウントID>:role/<ロール名>",
"arn:aws:sts::<アカウントID>:assumed-role/<ロール名>/<元のIAMユーザー名>"
]
},
}
]
}
Principal
または NotPrincipal
ではワイルドカード *
を使用できないため、
会社等、複数のユーザーが同じAssumeロールを使用する場合、ユーザーごとに NotPrincipal
を書く必要があり、この方法は向かない。
方法2
アクセス制御にAssumeロールのIAMロールIDを使用する場合。
IAMロールIDはコンソール上では確認できず、AWS CLIでのみ確認可能。
以下のコマンドを実行し、IAMロールIDを確認する。
$ aws iam get-role --role-name <IAMロール名>
バケットポリシーに以下を記載する。
バケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "2",
"Effect": "Deny",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<バケット名>/*",
"Condition": {
"StringNotLike": {
"aws:userid": "<IAMロールID>:*"
}
}
}
]
}