Amazon S3 バケットに対し、オブジェクトを アップロードするアクセス権を、別の AWS アカウントのユーザーに与えるにはどうすれば良いですか?

最終更新日: 2020 年 11 月 2 日

別の AWS アカウントの AWS Identity and Access Management (IAM) ユーザーが、自分の Amazon Simple Storage Service (Amazon S3) バケットへオブジェクトをアップロードできるようにしたいと思います。このクロスアカウントのアクセスを許可するにはどうすれば良いですか?

解決方法

以下の手順に従って、あるアカウント (アカウント A) の IAM ユーザーに、別のアカウント (アカウント B) の S3 バケットにオブジェクトをアップロードする権限を付与します。

1.    アカウント 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/*"
            ]
        }
    ]
}

注: s3:PutObjectAcl のアクセス許可では、ユーザーがアップロード中に、オブジェクトのアクセスコントロールリスト(ACL)を指定することが必要になります。このアクセス許可がない場合、(bucket-owner-full control ACL、public-read ACL などの)ACL を使用してオブジェクトをアップロードしようとしたユーザーには、アクセス拒否エラーが返されます。 

2.    アカウント A から、IAM ユーザーの Amazon リソースネーム (ARN) を取得します。

3.    アカウント B から、アカウント A の IAM ユーザーにバケットポリシーをアタッチし、S3:PutObject および s3:PutObjectAcl アクションを実行する権限を与えるには、次のよう定義します。

重要: [プリンシパル] の値には、アカウント A の IAM ユーザーの ARN を必ず入力します。

{
    "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/*"
            ]
        }
    ]
}

アカウント A で IAM ユーザーポリシーを設定し、アカウント B でバケットポリシーを設定した後、対象の IAM ユーザーはバケットにオブジェクトをアップロードできるようになります。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?