Amazon S3 のオブジェクト所有権を別の AWS アカウントに移行したいです。どのようにすればよいですか?

AWS サポートは Amazon S3 オブジェクトをコピーしたり、AWS アカウントのいかなる設定についても操作したりすることはできません。AWS アカウントを Amazon.com アカウントから分離したり、異なる AWS アカウント間でリソースを移動したりすることもできません。しかし、Resource-based ポリシーを適用し、IAM ユーザー (または、グループ) ポリシーによって AWS アカウント間でリソースへアクセスする権限を委譲することで、手動で Amazon S3 のリソースを新しい AWS アカウントに移行することは可能です。

S3 コピー機能を使うことで Amazon S3 オブジェクトを別のアカウントへコピーすることが可能です。Amazon S3 の アクセスコントロールリスト(ACL ) または バケットポリシー を使用して、元 のAWS アカウントに、対象 AWS アカウントへのアクセスを与える必要があります。例えば、ソースのAWSアカウントが、他のAWSアカウントが1つまたはそれ以上のAmazon S3リソースへアクセスするバケットポリシーを作成できるようにするにはどうしたらよいか、以下の手順で説明しています。他のAWSアカウントに対して、ソースからのコピーを許可することで実現します。

注:ソースAWSアカウントで作成された次のバケットポリシーは、指定された各S3リソースの宛先AWSアカウントにListBucketおよびGetObject権限を付与します。本番環境では、最小限のアクセス特権をもつという原則に従うアクションパラメーターを指定することが、最善の手法とされます。アクションパラメーターを設定した後、目的のAWSアカウントに権限を与えるべきリソースを、Resouceセクションに追加します。複数のリソースを記載する場合には、リソースの後にコンマを入れて次のリソースを記載してください。

まず、権限を付与する対象アカウントの 12 文字のアカウント ID を取得します。アカウント番号の確認方法の一例:

  1. 対象のアカウントにAWS マネジメントコンソールでサインインします。
  2. ナビゲーションバーで、[サポート]、[サポートセンター] の順にクリックします。アカウント番号(例: 222222222222)がサポートセンターの右上に表示されます。

元のアカウントに戻り、コピーしたいバケットに次のバケットポリシーを貼り付けます。手順の詳細については、バケット許可の編集 を参照してください。

#Bucket policy set up in the source AWS account.
{
    "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 ユーザーがそのグループに含まれていることを確認してください。

#New AWS account IAM user policy set up on destination AWS account.
{
    "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/*"
            ]
        }
    ]
}

上記の手順が完了したら、 コマンドラインインターフェイス(CLI)cp、または sync コマンドを使用してオブジェクトをコピーできます。たとえば、次の aws s3 sync コマンドは元アカウントのバケットから別アカウントのバケットへコンテンツをコピーするために使用できます。

注:このコマンドを実行するためには、権限付与先のアカウントのユーザーに対して AWS CLI が適切に設定されており、かつ権限の付与元と付与先のバケットが同じ リージョンにある必要があります。(別リージョンで実行するためには、 command-line オプションがあります。) AWS CLI の設定に関する情報は、AWS コマンドラインインターフェイスの設定 を参照してください。権限付与先のアカウントが 、s3://destinationbucket のファイルをコピーするためには、適切に許可されている必要があります。

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

別のアカウントのバケットに対するアクセス許可に関する詳細については、例: リソースベースのポリシーを使用して他のアカウントの Amazon S3 バケットへのアクセス権を委任する を参照してください。

ロールを使用して他の AWS アカウントのリソースへのアクセス権を委任する方法に関する詳細については、チュートリアル: IAM ロールを使用して AWS アカウント間のリソースへのアクセス権を委任する を参照してください。

クロスアカウントのバケットのアクセス許可を付与する方法の詳しいチュートリアルについては、例 2: バケット所有者がクロスアカウントのバケットのアクセス許可を付与 を参照してください。


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

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

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

公開日: 2015 年 2 月 26 日

更新: 2017 年 08 月 07 日