別の AWS アカウントによって私の Amazon S3 バケットへアップロードされたオブジェクトにアクセスする方法を教えてください。
最終更新日: 2020 年 11 月 10 日
別の AWS アカウントの AWS Identity and Access Management (IAM) ユーザーが、私の Amazon Simple Storage Service (Amazon S3) バケットへオブジェクトをアップロードしました。そのオブジェクトにアクセスしようとすると、403 アクセス拒否エラーが表示されます。どうすれば解決できますか?
簡単な説明
デフォルトでは、S3 オブジェクトの所有者はそれをアップロードした AWS アカウントになります。これは、バケット所有者が他のアカウントである場合にも当てはまります。オブジェクトへのアクセス権を取得するには、オブジェクト所有者が明示的にあなた (バケット所有者) にアクセス権を付与する必要があります。
オブジェクト所有者は、オブジェクトのアクセスコントロールリスト (ACL) を更新することによって、バケット所有者にオブジェクトのフルコントロールを付与できます。オブジェクト所有者は、put 操作または copy 操作中、またはオブジェクトがバケットに追加された後に ACL を更新できます。
解決方法
put または copy 操作中にアクセスを許可する
put または copy 操作中、オブジェクト所有者は、オブジェクトの ACL がバケット所有者にフルコントロールを与えるように指定できます。
入力オペレーションの場合、オブジェクト所有者は、次のコマンドを実行して許可を付与できます。
aws s3api put-object --bucket destination_DOC-EXAMPLE-BUCKET --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control
注: AWS コマンドラインインターフェイス (AWS CLI) のコマンド実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用するようにしてください。
単一のオブジェクトのコピーオペレーションの場合、オブジェクト所有者は、以下のコマンドのいずれかを実行して許可を付与できます。
aws s3api copy-object --bucket destination_DOC-EXAMPLE-BUCKET --key source_DOC-EXAMPLE-BUCKET/myobject --acl bucket-owner-full-control
– または –
aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/myobject s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control
複数のオブジェクトのコピーオペレーションの場合、オブジェクト所有者は、以下のコマンドを実行して許可を付与できます。
aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/ s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control --recursive
オブジェクトがバケットに追加された後にアクセスを許可する
オブジェクトがすでに別のアカウントのバケットに入っている場合、オブジェクト所有者は put-object-acl コマンドでバケット所有者にアクセス権を付与できます。
aws s3api put-object-acl --bucket destination_DOC-EXAMPLE-BUCKET --key keyname --acl bucket-owner-full-control
オブジェクトがバケット所有者にフルコントロールを付与することを要求する
バケットポリシーを使用して、別のアカウントによってバケットにアップロードされたすべてのオブジェクトで、ACL を「bucket-owner-full-control」に設定するよう指定することができます。例については、他の AWS アカウントがオブジェクトを自分の Amazon S3 バケットにアップロードしたとき、それらのアカウントがオブジェクトの所有権を付与してくれるように要求する方法を教えてくださいを参照してください。