他の AWS アカウントがオブジェクトを自分の Amazon S3 バケットにアップロードしたとき、それらのアカウントがオブジェクトの所有権を付与してくれるように要求する方法を教えてください。

最終更新日: 2019 年 4 月 26 日

他の AWS アカウントのユーザーが自分の Amazon Simple Storage Service (Amazon S3) バケットにオブジェクトをアップロードできるようにしたいと考えています。ただし、そうしたユーザーが私にそれらのオブジェクトの完全なコントロールを許可するように要求したいと考えています。どうすればできますか? 

解決方法

お客様 (バケットの所有者) にオブジェクトのフルコントロールを許可した場合にのみ、オブジェクトをバケットに配置するアクセス許可をユーザーに付与するバケットポリシーを追加します。

たとえば、このバケットポリシーは、オブジェクトのアクセスコントロールリスト (ACL) が bucket-owner-full-control に設定されている場合にのみ、ExampleUser がオブジェクトを awsexamplebucket にアップロードできるように指定します。

{
    "Id": "Policy1541018284691",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1541018283275",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::awsexamplebucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            },
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111122223333:user/ExampleUser"
                ]
            }
        }
    ]
}

このバケットポリシーを追加した後、以下のように、アップロードリクエストの一部としてオブジェクトの ACL を bucket-owner-full-control に設定する必要があります。

aws s3 cp example.jpg s3://awsexamplebucket --acl bucket-owner-full-control

ユーザーがアップロードリクエストで ACL の要件を満たしていない場合は、「An error occurred (AccessDenied) when calling the PutObject operation: Access Denied」というエラーメッセージが表示されます。

他のアカウントが所有されているバケット内の既存のオブジェクトの場合、オブジェクト所有者は put-object-acl コマンドを実行してお客様にフルコントロールを付与することができます。

aws s3api put-object-acl --bucket awsexamplebucket --key example.jpg --acl bucket-owner-full-control