Help us understand the problem. What is going on with this article?

異なるAWSアカウント間のS3内データを移動する方法

はじめに

以下のように、Bucket_A(以下copy-from-bucketとする)にあるデータを異なるAWSアカウントにあるBucket_B(以下copy-to-bucketとする)にコピーするための設定方法について説明します。

Untitled Diagram (1).png

こうした設定を使う状況としては、異なるアカウントのデータを移動させるのに、大容量すぎて一度ローカルに落としてから再度別アカウントバケットへ移動などという操作が困難なときなどが考えられるでしょう。

手順

1.コピー先となるアカウントに、コピー専用ユーザーを作成する

異なるアカウントのデータをいじるのは、オペミスで大事なデータを消去してしまったりする危険性もあるので、権限を最小限にしたコピー専用ユーザーを作成したほうがいいです。ここでは新規に専用ユーザーを作る前提で話を進めます。
※ここからの作業はコピー先アカウント内での操作となります。

コピー専用ユーザー新規作成

コピーに必要な権限を持たせるため、以下のポリシーを記載したJSONファイルを作成してください。
※「copy-from-bucket」はコピー元バケット名に、「copy-to-bucket」はコピー先バケット名に置き換えること。

copy_only_user_policy.json
{
  "Statement": [
    {
      "Action": ["s3:ListBucket", "s3:GetObject"],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::copy-from-bucket",
        "arn:aws:s3:::copy-from-bucket/*"
      ]
    },
    {
      "Action": ["s3:ListBucket", "s3:PutObject", "s3:PutObjectAcl"],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::copy-to-bucket",
        "arn:aws:s3:::copy-to-bucket/*"
      ]
    }
  ],
 "Version": "2012-10-17"
}

次にユーザーを新規作成します。
※AWSコンソールからやってもOKです。

create_user.sh
# ユーザー作成
$ aws iam create-user --user-name copy_only_user 

# 作成したユーザーを任意のグループに追加【必須ではない】
$ aws iam add-user-to-group \
 --group-name HOGEGROUP \
 --user-name copy_only_user

ユーザー設定

コピー専用ユーザーと、普段の作業をするユーザーは異なりますね。
AWS CLIで任意でユーザーを切り替えられるような設定をしておきましょう。
アクセスキーとシークレットアクセスキーを発行し、設定します。
(アクセスキー=ユーザーアカウントID、シークレットアクセスキー=パスワードのようなものです)

create_access_key.sh
# アクセスキーとシークレットアクセスキーを発行する。
$ aws iam create-access-key --user-name copy_only_user

出力結果

以下のSecretAccessKey(????????????の部分)とAccessKeyId(!!!!!!!!!!!!の部分)をどこかに保存しておきましょう。

{
    "AccessKey": {
        "UserName": "ユーザー名", 
        "Status": "Active", 
        "CreateDate": "2015-04-03T04:10:43.927Z", 
        "SecretAccessKey": "????????????", 
        "AccessKeyId": "!!!!!!!!!!!!"
    }
}

次にAWS CLIのユーザー設定をします。
一行目のコマンドを押すと以下四つの情報を聞かれるので、それぞれ入力していきます。

set_copy_only_user_info.sh
$ aws configure --profile copy_only_user
AWS Access Key ID [None]: !!!!!!!!!!!!
AWS Secret Access Key [None]: ????????????
Default region name [None]: ap-northeast-1
Default output format [None]: text

コピー専用ユーザーにポリシーを付与します。

$ aws iam create-policy --policy-name \
    copy_user_policy --policy-document \
    file://copy_only_user_policy.json

# 123456789012のところは現在作業中のAWSアカウントIDに読み替えてください。
$ aws iam attach-user-policy --user-name copy_only_user \
    --policy-arn arn:aws:iam::123456789012:policy/copy_user_policy

これでいつでもprofileオプションをセットすることでこのユーザーとしてコマンドが打てます。

ls_s3_as_copy_only_user.sh
$ aws s3 ls s3://copy-to-bucket/ --profile copy_only_user

【補足】各ユーザーとアクセスキー/シークレットアクセスキーは以下の場所をみると確認できます。

Chk_user_credentials.sh
$ cat ~/.aws/credentials

次にコピー元バケットに以上のポリシーを設定します。

2.コピー元バケットのバケットポリシー設定

コピー元のバケットに、異なるアカウントからのアクセス許可の設定を付与します。まずは以下のJSONファイルを作成します。
※ここからの作業はコピー元アカウント内での操作となります。

copy_from_bucket_policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ReadAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "325045486985"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::copy-from-bucket/*",
                "arn:aws:s3:::copy-from-bucket"
            ]
        }
    ]
}

このバケットポリシーを設定しましょう。

put-bucket-policy.sh
$ aws s3api put-bucket-policy --bucket copy-from-bucket --policy file://copy_from_bucket_policy.json

最後に以下のコマンドでデータが移動できたら成功です。

copy_data.sh
$ aws s3 sync s3://copy-from-bucket/ s3://copy-to-bucket/ --profile copy_only_user

おしまい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした