別の AWS アカウントから S3 オブジェクトをコピーするにはどうすればよいですか。

所要時間2分
0

Amazon Simple Storage Service (Amazon S3) オブジェクトを AWS アカウント間でコピーしたいです。次に、コピーしたオブジェクトを送信先のアカウントで所有していることを確認したいと思います。

解決方法

**重要:**S3 内のオブジェクトは、アップロードした AWS アカウントによって常に自動的に所有されるわけではありません。オブジェクトの所有権を変更する場合は、[Bucket owner enforced] 設定を使用することがベストプラクティスです。ただし、このオプションでは、すべてのバケット ACL と、バケット内のすべてのオブジェクトの ACL が無効になります。

S3 Object Ownerships で [Bucket owner enforced] が適用された設定により、Amazon S3 バケット内のすべてのオブジェクトをバケット所有者が所有できるようになりました。[Bucket owner enforced] 機能では、すべてのアクセス制御リスト (ACL) もオフになります。これにより、Amazon S3 に保存されているデータのアクセス管理が簡単になります。ただし、既存のバケットの場合、ACL を明示的に無効にしない限り、S3 オブジェクトはアップロードした AWS アカウントが引き続き所有します。

既存のオブジェクト共有方法が ACL の使用に依存している場合は、ACL を使用してオブジェクトにアクセスするプリンシパルを特定します。ACL を無効にする前にアクセス許可を確認する方法の詳細については、「ACL を無効にするための前提条件」を参照してください。

ACL を無効にできない場合は、バケットポリシーを調整できるようになるまで、以下のステップに従ってオブジェクトの所有権を取得します。

1。ソースアカウントで、AWS Identity and Access Management (IAM) カスタマー管理ポリシーを作成します。このポリシーは、IAM ID (ユーザーまたはロール) に適切なアクセス許可を付与します。IAM ユーザーは、ソースバケットからオブジェクトを取得し、コピー先バケットにオブジェクトを戻すためのアクセス権が必要です。次の例のような IAM ポリシーを使用できます。

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:GetObject"
      \],
      "Resource": \[
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::source-DOC-EXAMPLE-BUCKET/\*"
      \]
    },
    {
      "Effect": "Allow",
      "Action": \[
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      \],
      "Resource": \[
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*"
      \]
    }
  \]
}

**メモ:**この IAM ポリシーの例には、オブジェクトを一覧表示したり、異なるアカウントのバケット間でオブジェクトをコピーしたりするのに最低限必要なアクセス許可のみが含まれています。ユースケースに応じて、許可された S3 アクションをカスタマイズする必要があります。たとえば、ユーザーがオブジェクトタグのあるオブジェクトをコピーする必要がある場合は、s3: GetObjectTagging の権限も付与する必要があります。エラーが発生した場合は、管理者ユーザーとして次の手順を実行してください。

2。ソースアカウントで、コピー先バケットへのオブジェクトのコピーに使用する IAM ID にカスタマー管理ポリシーをアタッチします。

3。宛先アカウントで、宛先バケットの S3オブジェクト所有権をバケット所有者優先に設定しますS3 オブジェクトの所有権を設定すると、アクセスコントロールリスト (ACL) が bucket-owner-full-control に設定されている状態でアップロードされた新しいオブジェクトは、バケットのアカウントによって自動的に所有されます。

4。コピー先アカウントで、コピー先バケットのバケットポリシーを変更し、ソースアカウントにオブジェクトをアップロードするためのアクセス許可を付与します。さらに、バケットポリシーにオブジェクトのアップロードを必要とする条件を含め、ACL を bucket-owner-full-control に設定します。次の例のようなステートメントを使用できます。

**メモ:**destination-DOC-EXAMPLE-BUCKET をコピー先バケットの名前に置き換えます。次に、arn:aws:iam::222222222222:user/Jane を、ソースアカウントの IAM ID の Amazon リソースネーム (ARN) に置き換えます。

{
  "Version": "2012-10-17",
  "Id": "Policy1611277539797",
  "Statement": \[
    {
      "Sid": "Stmt1611277535086",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET/\*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "Stmt1611277877767",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::222222222222:user/Jane"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::destination-DOC-EXAMPLE-BUCKET"
    }
  \]
}

このバケットポリシーの例には、必要な ACL を持つオブジェクトをアップロードするために最低限必要なアクセス許可のみが含まれています。](https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations.html)使用事例に応じて、[許可される S3 アクションをカスタマイズする必要があります。たとえば、ユーザーがオブジェクトタグのあるオブジェクトをコピーする必要がある場合は、s3: GetObjectTaggingの権限も付与する必要があります

5。IAM ポリシーとバケットポリシーを設定した後、ソースアカウントの IAM ID は、オブジェクトをコピー先バケットにアップロードする必要があります。ACL が bucket-owner-full-control に設定されていることを確認します。例えば、ソース IAM ID は、--acl オプションを指定して cp AWS CLI コマンドを実行する必要があります。

aws s3 cp s3://source-DOC-EXAMPLE-BUCKET/object.txt s3://destination-DOC-EXAMPLE-BUCKET/object.txt --acl bucket-owner-full-control

**メモ:**AWS CLI コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください

S3 オブジェクトの所有権をバケット所有者優先に設定すると、bucket-owner-full-control を使用してアップロードしたオブジェクトは、宛先バケットのアカウントによって所有されます。

**重要:**S3 バケットで AWS Key Management Service (AWS KMS) を有効にしたデフォルトの暗号化がある場合は、AWS KMS キーのアクセス許可も変更する必要があります。手順については、「Amazon S3 バケットにカスタム AWS KMS キーを使用したデフォルトの暗号化があります」を参照してください。ユーザーがそのバケットでダウンロードやアップロードを行えるようにするにはどうすればいいですか?」を参照してください。

関連情報

バケット所有者がクロスアカウントのバケットのアクセス許可を付与する

他の AWS アカウントによってオブジェクトがアップロードされたときに、Amazon S3 バケットのオブジェクトの所有権を変更するにはどうすればよいですか?

リソースベースのポリシーを使用して他のアカウントの Amazon S3 バケットにアクセス権を委任する

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ