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

最終更新日: 2019 年 9 月 9 日

Amazon Simple Storage Service (Amazon S3) オブジェクトを別の AWS アカウントのバケットにコピーしたいです。次に、コピーしたオブジェクトを送信先のアカウントで所有していることを確認したいと思います。その方法を教えてください。 

解決方法

送信先アカウントがコピーしたオブジェクトを所有していることを確認するには、送信先アカウントがソースバケットから送信先バケットへのオブジェクトのコピーを実行できるようにします。以下の手順を実行してください。

ソースバケットにポリシーをアタッチする

1.    送信先アカウントの AWS アカウント ID 番号を取得します。

2.    次のように、送信先アカウントがソースアカウントからオブジェクトを取得できるようにするポリシーをソースバケットにアタッチします。
重要: Principal の値には、送信先アカウントの AWS アカウント ID 番号を入力してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {"AWS": "222222222222"},
            "Action": ["s3:ListBucket","s3:GetObject"],
            "Resource": [
                "arn:aws:s3:::sourcebucket/*",
                "arn:aws:s3:::sourcebucket"
            ]
        }
    ]
}

送信先アカウントのユーザーまたはグループにポリシーをアタッチする

送信先アカウントの IAM ユーザーまたはグループにアタッチできる新しい AWS Identity and Access Management (IAM) カスタマー管理ポリシーを作成します。カスタマー管理ポリシーにより、ユーザーはソースバケットから送信先バケットにオブジェクトをコピーできます。カスタマー管理ポリシーは、次の例のようになります。 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::sourcebucket",
                "arn:aws:s3:::sourcebucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::destinationbucket",
                "arn:aws:s3:::destinationbucket/*"
            ]
        }
    ]
}

ソースバケットから送信先バケットにオブジェクトをコピーする

ソースバケットと送信先アカウントにポリシーを設定した後、送信先アカウントはソースバケットから送信先バケットにオブジェクトをコピーできます。次に、送信先アカウントは、送信先バケットでコピーしたオブジェクトを所有します。

ソースバケットのすべてのコンテンツを送信先バケットに同期するには、S3 sync コマンドを実行します。 

aws s3 sync s3://sourcebucket s3://destinationbucket