S3のクロスアカウントコピーやってみる

## はじめに
S3のオブジェクトを、どうすれば安全にほかのAWSアカウントのs3バケットにコピーできるのか、考えたことがある人もいると思います。
できるだけ、セキュアな方法で安全にコピーするにはどうすればよいか。
今回は、コンソール上からのコピー方法をこちらの記事を参考に試してみたいと思います。

https://blog.serverworks.co.jp/s3copy_by_console

## クロスアカウントコピーのやり方
今回は以下の2通りの方法を試していきたいと思います。
- S3のACLによるクロスアカウントコピー
- IAMユーザーとバケットポリシーの設定によるS3のクロスアカウントコピー
ACLの設定が一番簡単ですが、IP制限など詳細なアクセス制御をしたい場合はIAMユーザーとバケットポリシーによる設定が良いと思います。

## S3のACLによるクロスアカウントコピー
AWS的にはACLを有効にするのは非推奨みたいですが、今回はACLを使ってクロスアカウントコピーをやってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/c0b9ef72-f4ee-337b-ded3-3b4601b99818.png)

### コピー元のIAMユーザーのポリシー
S3FullAccess権限つけてます。（本当は参考にした記事のように細かく権限を指定したほうが良いと思いますが、今回はこちらでいかせていただきます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/b241541a-3990-357a-be02-0d6038e09ef4.png)

### コピー先のバケットのアクセス許可
アクセス許可のオブジェクト所有者の編集をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/5531ff91-4170-2c2b-dfe5-124ddd9f84a4.png)

ACL有効にし、「私は、ACL が復元されることを了承します。」をチェックします。
そして、変更の保存をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/c427b130-c44c-1dad-fa75-b7405661ec4d.png)

アクセス許可のオブジェクト所有者の下にあるアクセスコントロールリスト(ACL)の編集をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/e927646f-5a67-b419-8cf7-58592e8befe6.png)

被付与者の追加をクリックします。オブジェクトのリスト、書き込みにチェックをいれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/fbe67962-a31d-005d-86d4-6e9326ab229e.png)

IDの部分はコピー元のバケットのアクセス許可→アクセスコントロールリスト(ACL)のバケット所有者 (AWS アカウント)のIDを貼り付けて変更の保存をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/5a182458-c864-acd5-d1ac-22b4ceb938f7.png)

### コピー元バケットからオブジェクトをコピー
オブジェクトを選択し、アクションのコピーするをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/2c6f8c86-54f1-0e7e-a6ae-5b0d4d9028e2.png)

送信先を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/6c2d6b74-dd11-10a6-ba08-a542d0832fc2.png)

「コピーする」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/ef9666f6-49d8-101e-4b87-3a421a15666c.png)

成功するとこのような表示がでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/9d8e1509-6ed7-53c1-55aa-9701cce2c9df.png)

## IAMユーザーとバケットポリシーの設定によるS3のクロスアカウントコピー
S3のクロスアカウントコピーを実現するためには、コピー元のIAMユーザーにS3の許可ポリシーをアタッチし、コピー先のバケットにアクセス許可のポリシーを設定する必要があります。

### コピー元のIAMユーザーのポリシー
S3FullAccess権限つけてます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/b241541a-3990-357a-be02-0d6038e09ef4.png)

### コピー先バケットにバケットポリシーを設定
コピー先のバケットにコピー元のIAMユーザーがオブジェクトをアップロードできるようにする許可を追加します。
```
{
	"Version": "2012-10-17",
	"Id": "test",
	"Statement": [
		{
			"Sid": "Statement1",
			"Effect": "Allow",
			"Principal": {
                "AWS": "コピー元のIAMユーザーのARN"
            },
			"Action": [
				"s3:PutObject"
			],
			"Resource": [
				"arn:aws:s3:::コピー先のバケット名",
				"arn:aws:s3:::コピー先のバケット名/*"
			]
		}
	]
}
```

### コピー元バケットからオブジェクトをコピー
オブジェクトを選択し、アクションのコピーするをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/2c6f8c86-54f1-0e7e-a6ae-5b0d4d9028e2.png)

送信先を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/6c2d6b74-dd11-10a6-ba08-a542d0832fc2.png)

「コピーする」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/ef9666f6-49d8-101e-4b87-3a421a15666c.png)

成功するとこのような表示がでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1328154/9d8e1509-6ed7-53c1-55aa-9701cce2c9df.png)

## 終わりに
今回はACLとバケットポリシーによる2通りのクロスアカウントコピーをやってみました。
ACLは非推奨らしいので、バケットポリシーで設定するのが良いと思います。
もっと、セキュリティに考慮したやり方があるので勉強していきたいと思います。