s3クロスアカウント時の連携はcli側のpolicyも必要
小ネタですが少々。
全く表題の通りなんですが、AWS アカウントAからBへの s3 cp
等を実現するにはいくつか方法がありますが、
受け取り側Bのpolicyをいじって、アカウントAのIAM Userへのアクセスを許可する場合を考えてみます。
受け取り側アカウントBのバケットポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Sample",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<アカウントA>:user/<クロスアカウントput用 IAM User>"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::<受け取り側Bucket>/<アクセスコントロールするパス>/*"
}
]
}
受け取り側は基本的に以上のバケットポリシーを記述するだけで
アカウントAはアカウントBの s3://<受け取り側Bucket>/<アクセスコントロールするパス>/*
以下にアクセスできるのですが、ここで勘違いが一つ。
そのまま該当bucketにputしようとすると
aws s3 cp ./hoge.txt s3://<受け取り側Bucket>/<アクセスコントロールするパス>/ --profile put-user-b
upload failed: ./hoge.txt to s3://<受け取り側Bucket>/<アクセスコントロールするパス>/ hoge.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
となり、アクセス権不足となります。
put主体となるアカウントA側にも、少なくとも以下を満たすポリシーが必要です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<受け取り側Bucket>/<アクセスコントロールするパス>/*"
}
]
}