タイトル長すぎ!
IAM ロールを使用したクロスアカウント API アクセスのウォークスルー - AWS Identity and Access Management を読んでみたんだけど、やたら面倒だったり、若干やりたいこととずれてたりしたので、bucket policy でなんとかしてみた。
+--AWS Account A------+ +---AWS Account B----+
| EC2 Instance --+------------+----> S3 Bucket |
| (IAM Role) | | (Bucket Policy) |
+---------------------+ +-------------------+
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/SomeRole"
},
"Action": "s3:ListBucket",
"Resource": [
"arn:aws:s3:::bucket-name"
]
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/SomeRole"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::bucket-name/*"
]
}
]
}
Principal には、アクセスする側(アクセスを許可される側、AWS Account A)の Role の ARN を指定する。
アクセスする側の Role に対しては、S3 へのアクセスを許可する Policy を書いてあげる。おおざっぱに書くならこんな感じ。バケット指定さぼってます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket", "s3:GetObject"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
これで別アカウントの EC2 インスタンスから aws s3 コマンドでもにょもにょできた。
参考: