S3クロスアカウントレプリケーションでs3バケットを移行した

# まえがき

弊社、全ての部署で1つのAWSアカウントを共有しており、どのリソースをどの部署が管理しているのか誰も全容を把握しておりません

今更ながらそれ不味いだろうという事で、自分の部署のリソースを別アカウントに移行する事を決意
S3の移行を任されたため、まずレプリケーションでオブジェクトを移動します
今後のために手順をメモとして残します

# 移行元／移行先s3バケット作成

## 移行元s3バケットを作成
- 移行先s3バケットと同じリージョンに作成する必要あり（東京だとap-northeast-1）
- バージョニングが有効化されている必要あり

## 移行元s3に必要なバケットポリシー

なし

```json
{}
```

## 移行先s3バケットを作成

- 移行元s3バケットと同じリージョンに作成する必要あり（東京だとap-northeast-1）
- バージョニングが有効化されている必要あり


## 移行先s3に必要なバケットポリシー

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[移行先バケット名]/*"
        },
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:ReplicateObject",
                "s3:ReplicateDelete"
            ],
            "Resource": "arn:aws:s3:::[移行先バケット名]/*"
        },
        {
            "Sid": "Permissions on bucket",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:List*",
                "s3:GetBucketVersioning",
                "s3:PutBucketVersioning"
            ],
            "Resource": "arn:aws:s3:::[移行先バケット名]"
        }
    ]
}
```

# レプリケーションルールの設定

移行元バケット → 管理 → レプリケーションルール → レプリケーションルールを作成


## レプリケーションルールの設定

### レプリケーションルール名

適当でOK。「移行先バケット名_replication」とか

### ステータス

有効

![rule.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/acd9babf-1fa4-43b7-21bf-abef926aecc1.png)


## ソースバケット

### ルールスコープを選択

バケット内のすべてのオブジェクトに適用


![sourcebucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/3442691b-25a8-ed9f-ab0b-b224ef1d6174.png)


## 送信先

### 送信先

別のアカウントのバケットを指定する

### アカウント ID

移行先AWSアカウントid 12桁の数字

### バケット名

移行先s3バケット名

![sendaddress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/e00b0c31-b4b1-6304-c404-da511beb05d4.png)


## IAM ロール

既存の IAM ロールから選択

### IAM ロール

新しいロールの作成


![iamrole.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/2392806e-bec9-e808-465b-0dba01758587.png)


## 暗号化

### AWS Key Management Service (AWS KMS)で暗号化されたオブジェクトをレプリケーション

バケットが暗号化されていればチェック

![angouka.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/3e055992-2cb9-7022-1957-605be51c4b5e.png)



## 送信先ストレージクラス

### レプリケートされたオブジェクト用のストレージクラスを変更

必要であれば変更

![storageclass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/8a5fbf44-8cb2-df53-717d-17ae72d3b3c1.png)


## 追加のレプリケーションオプション

必要であればチェックして保存ボタン

![tuika.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/9f2b0fe8-cf52-6069-cade-6bf8c4fdf0a1.png)


## 既存のオブジェクトをレプリケートしますか？のモーダル

移行元に既に入っているオブジェクトも必要であれば「はい」にして送信

![kizon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/3f14c637-51dc-5863-30c6-0844b3778570.png)


## バッチオペレーションジョブを作成します

### ジョブ設定

準備ができたらジョブを自動的に実行します

![operationjob.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/8af833dc-e80f-f8b1-f8c5-a9707e39ee1a.png)

## 完了レポート

### 完了レポートの生成

失敗したタスクのみ。成功したのは不要。

### 完了レポートの送信先へのパス

レポートの保存先を指定。

### アクセス許可

既存の IAM ロールから選択 - 新しいロールの作成

![report.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/c36b27bf-8136-c789-165f-6996ac23caa5.png)


# バッチオペレーションでレプリケーション進捗を確認する

バッチオペレーション（東京リージョン）
https://s3.console.aws.amazon.com/s3/jobs?region=ap-northeast-1

ステータスが「完了済み」になったらOK

失敗した合計が 0% でなければ、ログを確認する

![batchoperation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/9361b51e-a39e-0bd3-9c75-02a17563d25f.png)




# 参考

https://dev.classmethod.jp/articles/try-s3-cross-account-replication/