オブジェクトを、ある AWS アカウントが所有する S3 バケットから、別の AWS アカウントが所有するバケットにコピー (移動) しました。すると、宛先バケットの所有者はそのオブジェクトにアクセスすることができなくなりました。バケット所有者に、異なる AWS アカウントが所有する S3 バケット間でコピーや移動が行われるリソースへのアクセス権を持たせるにはどうすればいいですか。

この問題が発生するのは、オブジェクトがバケット間でコピーまたは移動が行われるときに、正しいアクセス許可がオブジェクトに適用されない場合です。ベストプラクティスとしては、コピーまたは移動の操作の最中にアクセス許可を適用することですが、操作が完了した後、適用することもできます。

コピーまたは移動の操作の最中にオブジェクトにアクセス許可を適用する

コピーまたは移動の操作の最中に、宛先バケットにコピーまたは移動しているオブジェクトに適切なアクセス許可を適用する方法は、2 つあります。

1.    宛先バケットの所有者に、送信元バケットの所有者に割り当てることができたロールをアタッチします。このロールは、送信元バケットの所有者に、宛先バケットに対する完全な制御権を与えることができます。また、このロールでは、宛先バケットの所有者に宛先バケットへのコピーまたは移動が行われるオブジェクトに対するすべてのアクセス許可を管理することを義務付けています。詳細については、「チュートリアル: IAM ロールを使用する AWS アカウント間でのアクセス権の委任」を参照してください。

または

2.    宛先バケットの所有者に宛先バケットへのコピーまたは移動が行われるオブジェクトに対する完全な制御権を管理させるポリシーを宛先バケットに適用します。このポリシーは、宛先バケットの所有者にオブジェクトの完全な制御権が与えられていない限り、指定したアカウントが宛先バケットにオブジェクトをコピーまたは移動するのを阻止します。ポリシーの例は、「オブジェクトのアップロードのために、バケット所有者の完全な制御権を保証しつつ、アカウント間アクセス許可を付与する」を参照してください。以下の例では、[Canned ACL (規定 ACL)] を使って、バケット所有者にバケットへのコピーまたは移動が行われるオブジェクトに対する完全な制御権を付与しています。

{
  "Statement":[
    {
      "Effect":"Allow",
      "Principal":{"AWS":"111111111111"},
      "Action":"s3:PutObject",
      "Resource":["arn:aws:s3:::examplebucket/*"]
    },
    {
      "Effect":"Deny",
      "Principal":{"AWS":"111111111111"},
      "Action":"s3:PutObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition": {
        "StringNotEquals": {"s3:x-amz-acl":"bucket-owner-full-control"}
      }
    }
  ]
}

AWS コマンドラインインターフェイス (AWS CLI) を使用する場合、宛先アカウントのロールが割り当てられたアカウントにプロファイルをセットアップします。これにより、ロールを割り当てるときに、各リクエストごとにトークンをエクスポートする必要がなくなります。Amazon Simple Storage Service (Amazon S3) アクセスポリシーの条件を指定するために利用できるキーに関する情報については、「利用可能な条件キー」を参照してください。PUT 操作に関する情報については、「オブジェクトの PUT」を参照してください。

操作の完了後にアクセス許可を付与する

コピーまたは移動の操作の最中にアクセス許可が適用されなかった場合、送信元バケットの所有者は以下のコマンドを実行して、宛先バケットの所有者にこれらのオブジェクトに対する完全な制御権を付与することができます。

aws s3api put-object-acl --bucket src-acct_bucket --key myobject --grant-full-control emailaddress=xyz@example.com

注: 宛先バケットの所有者のメールアドレスを使用して、バケットへのコピーまたは移動が行われるオブジェクトの ACL を更新します。

aws s3api put-object-acl --bucket src-acct_bucket --key myobject --grant-full-control id="mycanonicalid"

注: 宛先バケットの所有者の正規 ID を使用して、バケットへのコピーまたは移動が行われるオブジェクトの ACL を更新します。


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 2 月 26 日

更新: 2018 年 1 月 19 日