<前提>
Bアカウントのバケットのバケットポリシーは特定のuser・roleのみアクセスできるようにするため、Denyポリシーを利用している。
<登場人物>
Aアカウント
- インスタンス用ロール
- インスタンス
Bアカウント
- アクセス対象バケット
<ロール・バケットポリシー>
Aアカウント
- Bアカウントのバケットへアクセスできるポリシーを追加
Bアカウント
- 下記のようにバケットポリシーを設定する。
バケットポリシー.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allowaaccountaccess",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::<アカウントID>:role/<ロール名>",
"arn:aws:iam::<アカウントID>:user/<ユーザー名>"
]
},
"Action": [
"s3:Put*",
"s3:List*"
],
"Resource": [
"arn:aws:s3:::<Bアカウントバケット名>",
"arn:aws:s3:::<Bアカウントバケット名>/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control" ← ここは必須ではない ※ただ、付いている場合オプションを付けないと弾かれます。(--acl bucket-owner-full-control)
}
}
},
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::<Bアカウントバケット名>/aa/11/*",
"Condition": {
"StringNotLike": {
"aws:userid": [
"<ロールID>:<インスタンスID>",
"<ロールID>:<インスタンスID>"
]
},
"StringNotEquals": {
"aws:username": [
"<user名>",
"<user名>"
]
}
}
}
]
}