AWS S3のアカウント間のファイルコピーのバケットポリシー

目次

バケットポリシーの修正の要否

アカウントAのS3バケットからアカウントBのS3バケットにコピーする時の
バケットポリシーの修正の要否の表です。

送信元バケットポリシー
(A-bucket)
送信先バケットポリシー
(B-bucket)
Aが実行して
Bにコピー
不要(同一アカウントなのでIAMだけで可) 必要(B側がAの主体を許可)
Bが実行して
AからPull(A→B)
必要(A側がBの主体を許可) 不要(同一アカウントなのでIAMだけで可)

同一アカウント側はバケットポリシー不要(通常 IAM だけで可)。

A→Bの時で、BのACLが有効の場合、Bにx-amz-acl: bucket-owner-full-control を付けると、Bが管理できます。

アカウント間コピーの可否はVPC間接続(VPCPeering/TransitGatewayなど)とは無関係です。
(S3は各アカウントのVPCの外側(リージョンサービス)にあるため)

バケットポリシーのイメージ

例:Aアカウントのバケットポリシー(コピー元許可)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::<BアカウントID>:role/CopyRole" },
      "Action": ["s3:GetObject", "s3:ListBucket"],
      "Resource": [
        "arn:aws:s3:::source-bucket",
        "arn:aws:s3:::source-bucket/*"
      ]
    }
  ]
}

s3:GetObject・・・コピー元オブジェクトを読み取る

s3:ListBucket・・・複数オブジェクトをコピーする場合

 

例:Bアカウントのバケットポリシー(コピー先許可)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::<AアカウントID>:role/CopyRole" },
      "Action": ["s3:PutObject"],
      "Resource": "arn:aws:s3:::destination-bucket/*"
    }
  ]
}

s3:PutObject・・・コピー先にオブジェクトを書き込む

 

AWS CLIのコピーコマンドの例

aws s3 cp s3://source-bucket/data.csv s3://destination-bucket/data.csv \
  --source-region ap-northeast-1 \
  --region ap-northeast-1

関連の記事

AWS S3のアクセス制御(IAMポリシーとバケットポリシー)
AWS CLIのコマンド (S3のファイルの一覧/コピー/移動)

△上に戻る