目次
1.はじめに
2.やりたい事のイメージ
3.実施内容
1.コピー作業用のIAMユーザの作成及びポリシーのアタッチ
2.コピー元バケットのポリシー設定
3.AWS CLIの設定
4.同期の実行
4.最後に
1. はじめに
AWS初学者向けに別アカウントS3の同期方法を記しておきます。
自身もまた初学者のため間違いがありましたら指摘頂けると幸いです。
2. やりたい事のイメージ
アカウントAのS3からアカウントBのS3へファイルの同期(コピー)を行いたい。
同アカウントであればさほど難しくないのだがアカウント跨ぎが発生すると権限付与をしっかりやる必要がある。
3. 実施内容
1. コピー作業用のIAMユーザの作成及びポリシーのアタッチ
まずはIAMユーザーの作成から始める。
今回はコピー先アカウントBでユーザーを作成する。
また、アクセスキーとシークレットアクセスキーを持っている既存ユーザーがあればそれを使用することも可能である。
次にポリシーの作成を行う。
ポリシー作成は下記画像のようにコードをコピペで張り付ける。
コードサンプル
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<コピー元のS3バケット名>",
"arn:aws:s3:::<コピー元のS3バケット名>/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::<コピー先のS3バケット名>",
"arn:aws:s3:::<コピー先のS3バケット名>/*"
]
}
]
}
コピー元バケットからファイルをコピーしてくる権限とコピー先バケットへファイルを置く権限を記載しています。
以下に変更箇所の記載例を載せておきます。
"arn:aws:s3:::<コピー元のS3バケット名>" → 例:"arn:aws:s3:::bucket_moto/"
"arn:aws:s3:::<コピー先のS3バケット名>" → 例:"arn:aws:s3:::bucket_saki/"
初学者が陥りやすいミスとして<>を残したままバケット名を書いてしまうことがあるので注意
この後はユーザー作成まで完了させ、最後に作成されるアクセスキーとシークレットアクセスキーが記載されているCSVファイルをダウンロードしておく。
2. コピー元バケットのポリシー設定
アクセス許可のタブからブロックパブリックアクセスを編集する。
下2つのチェックを外して変更の保存を行います。
次にすぐ下にあるバケットポリシーの編集を押します。
コードサンプル <バケットポリシー>
{
"Version": "2012-10-17",
"Id": "test",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "<IAMユーザ or IAMロールのARN>"
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<コピー元のS3バケット名>/*",
"arn:aws:s3:::<コピー元のS3バケット名>"
]
}
]
}
ここについてはIAMロールのARNを記載した場合の例を示す。
"AWS":"< IAMユーザ or IAMロールのARN >" → 例:"AWS": "arn:aws:iam::257*********:user/test1"
再度の注意にはなるが<>を残したままARN名を書かないように注意
IAMロールのARNの確認は以下のようにIAM画面から確認可能
問題なくバケットポリシーの記入ができたら変更の保存を押す。
ここまででバケットポリシーの設定が完了
3. AWS CLIの設定
AWS CLIのインストールに関しては、こちらからダウンロードし指示に従ってインストールを実行
https://awscli.amazonaws.com/AWSCLIV2.msi
完了後はインストールできたかを確かめるために下記コマンドを実行する。
#aws --version
aws-cli/2.1.29 Python/3.7.4 Windows/10 botocore/2.0.0
問題なければversionが表示されるためインストールが完了
このパスC:\Users\<ユーザー名>\.aws
にあるcredentials
をテキストエディタで開く。
#既存のアクセスキー
[default]
aws_access_key_id = b7**********
aws_secret_access_key = la****************
#今回新しく追加するアクセスキー
[test1] #任意のユーザー名
aws_access_key_id = <アクセスキー>
aws_secret_access_key = <シークレットアクセスキー>
1.コピー作業用のIAMユーザの作成及びポリシーのアタッチ
で作成したIAMユーザーのアクセスキーとシークレットアクセスキー(ダウンロードしたCSVファイルに記載)を上記に記載して保存します。
保存が完了したら、ついに別アカウントのS3同期ができます!!
4. 同期の実行
コマンドプロンプトに下記コマンドを実行
aws s3 sync s3://<コピー元のS3バケット名> s3://<コピー先のS3バケット名> --profile test1
ここまでの設定が上手くいっているとこのように大量のファイルも一度に同期可能
次回実行時はコピー先バケットにないファイルのみ参照してコピーしてくれるため実行速度も速いです。
4. 最後に
今回は、別アカウントのS3を同期する方法 をご紹介しました。
初学者向けに手順書をイメージして書いていきましたが初めての執筆ということもあり、分かりにくい記事になっているかもしれません。
しかし、私のような初学者だからこそ必要なポイントを書けたのではないかと思いますので、この記事が誰かの助けになれれば幸いです。