別のアカウントの AWS ID およびアクセス管理 (IAM) ユーザーに、自分の Amazon シンプルストレージサービス (Amazon S3) バケットへのアクセスを許可したいと考えています。また、ユーザーが Amazon S3 バケットにオブジェクトをアップロードできるように、クロスアカウントアクセスを許可したいと考えています。
解決策
アカウント A の IAM ユーザーに、アカウント B の S3 バケットにオブジェクトをアップロードするアクセス権限を付与するには、次の手順に従います。
-
アカウント A から、IAM ユーザーにポリシーをアタッチします。ポリシーでは、ユーザーがアカウント B のバケットで s3: PutObject アクションと s3: PutObjectAcl アクションを実行することを許可する必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
**注:**アップロード用のオブジェクトアクセス制御リスト (ACL) を指定する前に、s3:PutObjectAcl 権限が必要です。この権限がないと、バケット所有者フルコントロール ACL などの ACL を含むオブジェクトをアップロードするときに、アクセス拒否エラーが発生します。
-
アカウント A から、IAM ユーザーの Amazon リソースネーム (ARN) を取得します。
-
アカウント B から、アカウント A の IAM ユーザーに s3: PutObject と s3: PutObjectAcl アクションを実行する権限を付与するバケットポリシーをアタッチします。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DelegateS3Access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::999999999999:user/UploadData"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
**重要:**Principal の値については、アカウント A の IAM ユーザーの ARN を必ず入力してください。
これで IAM ユーザーは Amazon S3 にオブジェクトをアップロードできます。
関連情報
例 2: バケット所有者がクロスアカウントのバケットのアクセス権限を付与する