1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

異なるアカウントにおけるS3の同期方法

Last updated at Posted at 2022-04-25

目次

1.はじめに
2.やりたい事のイメージ
3.実施内容
 1.コピー作業用のIAMユーザの作成及びポリシーのアタッチ
 2.コピー元バケットのポリシー設定
 3.AWS CLIの設定
 4.同期の実行
4.最後に

1. はじめに

AWS初学者向けに別アカウントS3の同期方法を記しておきます。
自身もまた初学者のため間違いがありましたら指摘頂けると幸いです。

2. やりたい事のイメージ

image1.png
アカウントAのS3からアカウントBのS3へファイルの同期(コピー)を行いたい。
同アカウントであればさほど難しくないのだがアカウント跨ぎが発生すると権限付与をしっかりやる必要がある。

3. 実施内容

1. コピー作業用のIAMユーザの作成及びポリシーのアタッチ

 まずはIAMユーザーの作成から始める。
 今回はコピー先アカウントBでユーザーを作成する。
 また、アクセスキーとシークレットアクセスキーを持っている既存ユーザーがあればそれを使用することも可能である。
image.png

次にポリシーの作成を行う。

image.png

ポリシー作成は下記画像のようにコードをコピペで張り付ける。

image.png

コードサンプル

{
    "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/"

初学者が陥りやすいミスとして<>を残したままバケット名を書いてしまうことがあるので注意

作成をしたらポリシーをユーザーへアタッチします。
image.png

この後はユーザー作成まで完了させ、最後に作成されるアクセスキーとシークレットアクセスキーが記載されているCSVファイルをダウンロードしておく。

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

image.png
アクセス許可のタブからブロックパブリックアクセスを編集する。

image.png

下2つのチェックを外して変更の保存を行います。

image.png

次にすぐ下にあるバケットポリシーの編集を押します。

image.png

コードサンプル <バケットポリシー>

{
    "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画面から確認可能

image.png

問題なくバケットポリシーの記入ができたら変更の保存を押す。
ここまででバケットポリシーの設定が完了

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が表示されるためインストールが完了

次に、アクセスキーとシークレットアクセスキーの設定を行う。
image.png

このパス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

ここまでの設定が上手くいっているとこのように大量のファイルも一度に同期可能
image.png

次回実行時はコピー先バケットにないファイルのみ参照してコピーしてくれるため実行速度も速いです。

4. 最後に

今回は、別アカウントのS3を同期する方法 をご紹介しました。
初学者向けに手順書をイメージして書いていきましたが初めての執筆ということもあり、分かりにくい記事になっているかもしれません。
しかし、私のような初学者だからこそ必要なポイントを書けたのではないかと思いますので、この記事が誰かの助けになれれば幸いです。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?