AWS S3のアカウント間コピー時のバケットポリシーの設定

目次

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

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

送信元バケットポリシーの修正
(アカウントAのbucket)
送信先バケットポリシーの修正
(アカウントBのbucket)
アカウントAのユーザがアカウントBのS3にコピー 不要(同一アカウントなのでIAMだけで可) ①必要(B側がAの主体を許可)
アカウントBのユーザがアカウントAのS3から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の外側(リージョンサービス)にあるため)

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

上記表の①

例: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・・・コピー先にオブジェクトを書き込む

 

上記表の②

例: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・・・複数オブジェクトをコピーする場合

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のファイルの一覧/コピー/移動)

△上に戻る