2
1

More than 1 year has passed since last update.

S3から別アカウントのS3バケットへデータ移行(cp/mv/syncコマンドの違い)

Posted at

はじめに

S3バケットを別のAWSアカウントへデータ移行したので、
その時に学習した内容(移行方法・cp/mv/syncコマンドの違い)をまとめておきます。

データ移行方法

1.cpコマンド

データをsourceバケットに残したままにしておきたいならcpコマンド

2.mvコマンド

データを移動(sourceからデータが消える)したいならmvコマンド ※削除権限も付与する必要がある

3.syncコマンド

データを定期的にコピーしたいなら``sync`` ※ちなみに、自動でコピーし続けたいならレプリケート機能

【手順】データの移行 cp/mv/sync

  1. 【sourceアカウント】IAMカスタマーポリシーを作成し、IAMユーザーへアタッチ
  2. 【targetアカウント】targetバケットのオブジェクト所有者をバケット所有者が優先される設定か確認
  3. 【targetアカウント】targetバケットのバケットポリシーを変更
  4. 【AWS CLI】cp/mv/syncコマンド実行

1.【sourceアカウント】IAMカスタマーポリシーを作成し、IAMユーザーへアタッチ

1 source下記カスタム管理ポリシーを作成する。
* mv コマンドを使用する場合は削除権限も必要

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<souceバケット名>",
                "arn:aws:s3:::<souceバケット名>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::<targetバケット名>",
                "arn:aws:s3:::<targetバケット名>/*"
            ]
        }
    ]
}

2 上記カスタムポリシーをIAMユーザーにアタッチする。

2.【targetアカウント】targetバケットのオブジェクト所有者をバケット所有者が優先される設定か確認

ACLの設定:バケット所有者の強制を選択。
→コピー先のバケット所有者が優先されるようになってれば良い。

参考:S3 のオブジェクトの所有権を使用したアップロードされたオブジェクトの所有権の管理

3.【targetアカウント】targetバケットのバケットポリシーを変更

{
    "Version": "2012-10-17",
    "Id": "Policy1611277539797",
    "Statement": [
        {
            "Sid": "Stmt1611277535086",
            "Effect": "Allow",
            "Principal": {
                "AWS": "<IAM userのARN>"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::<targetバケット名>/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "Stmt1611277877767",
            "Effect": "Allow",
            "Principal": {
                "AWS": "<IAM userのARN>"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::<targetバケット名>"
        }
    ]
}

4.【AWS CLI】cp/mv/syncコマンド実行

# IAMユーザーでログイン(AWSCLI)
$ aws configure
AWS Access Key ID [None]: [アクセスキー]
AWS Secret Access Key [None]: [シークレットアクセスキー]
Default region name [None]: [使用リージョン]
Default output format [None]:

# ログインユーザーの確認
$ aws sts get-caller-identity


# copyコマンド(オブジェクトが全てコピーされる)
$ aws s3 cp s3://<souceバケット名>/ s3://<targetバケット名>/ --acl bucket-owner-full-control --recursive

# mvコマンド(オブジェクトが移動され、sourceのオブジェクトが削除される)
$ aws s3 mv s3://<souceバケット名>/ s3://<targetバケット名>/ --acl bucket-owner-full-control --recursive

# syncコマンド(差分がコピーされる)
$ aws s3 sync s3://<souceバケット名>/ s3://<targetバケット名>/ --acl bucket-owner-full-control

参考

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1