LoginSignup
5
2

More than 1 year has passed since last update.

S3 バケットを異なるアカウント間で共有してみた その2

Posted at

はじめに

Amazon S3 を使っている中で、他の AWS アカウント上にある S3 バケットのデータを利用したくなるときがあります。この時は、主に以下の3つの方法が利用可能です。

  • S3 バケットのクロスアカウントレプリケーション
  • バケットポリシー
  • スイッチロール

今回は、「S3 バケットのクロスアカウントレプリケーション」について、設定手順の確認をしていきます。

前回の記事では、「S3 バケットのクロスアカウントレプリケーション」を取り上げました。今回の記事は「バケットポリシー」と「スイッチロール」の方法を確認していきましょう。

バケットポリシー

構成図

構成図はこんな感じです。S3 Bucket の共有元でバケットポリシーを設定し、共有先のユーザーに紐づく IAM Policy でアクセス許可を行う形です。

image-20220402153250377.png

アカウント1 : S3 Bucket の作成

クロスアカウントアクセス用の S3 Bucket を作成します。

image-20220402154333009.png

ファイルの中身はこんな感じです。

image-20220402161855217.png

アカウント1: バケットポリシーでクロスアカウントを許可

他のアカウントにアクセスさせたい S3 バケットを開いて、Bucket Policy の個所で Edit を押します。

image-20220402155133268.png

以下のポリシーを指定します。

  • アクセスを許可する、異なる AWS アカウントの IAM User ARN を指定
  • アクセス許可の操作種別を指定
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxxxxxxx:user/cliuser"
            },
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::s3-crossaccount-bucket01",
                "arn:aws:s3:::s3-crossaccount-bucket01/*"
            ]
        }
    ]
}

アカウント2 : IAM Policy について

アクセスを行う IAM User は、既に AdministratorAccess を付与しており、S3 Bucket へのアクセスが出来る状態になっています。

image-20220402160623000.png

アカウント2 : 動作確認

バケットポリシーをつかったクロスアカウントアクセスは、マネージメントコンソールからアクセスできません。AWS CLI や SDK を利用して API 経由でアクセスをします。今回は。AWS CLI を使っていきましょう。

まず、AWS CLI で利用しているユーザーを確認します。たしかに AWS アカウント2 側で、アクセス許可を設定したユーザーです。

> aws sts get-caller-identity --profile sub1
{
    "UserId": "AIDA4DSZG6OWJQFTUCNOH",
    "Account": "xxxxxxxxxx",
    "Arn": "arn:aws:iam::xxxxxxxxx:user/cliuser"
}

s3 ls コマンドで、異なるアカウントのバケットの中身を確認します。正常に実行ができましたね。

> aws s3 ls s3://s3-crossaccount-bucket01 --profile sub1
2022-04-02 15:42:55         18 crossaccount-file01.txt

実際にファイルをダウンロードしてみます

> aws s3 cp s3://s3-crossaccount-bucket01/crossaccount-file01.txt test.txt --profile sub1
download: s3://s3-crossaccount-bucket01/crossaccount-file01.txt to ./test.txt

ファイルの中身も確認できます

> cat test.txt
見えますか?

スイッチロール

構成図

構成図はこんな感じです。アクセスを共有したい AWS アカウント 1 の方で、スイッチロール用の IAM Role を準備します。スイッチロールは、AWS アカウント2 に限定が可能なので、セキュアに構成可能です。

image-20220402164217732.png

アカウント1 : IAM Role の作成

Create role で スイッチロール用の IAM Role を作成します。

image-20220402163459556.png

スイッチロールを許可させたい AWS アカウント2 側の Account ID を指定します。

image-20220402163547641.png

今回は、作業を簡単にするために、すべての S3 Bucket にアクセス可能な AmazonS3ReadOnlyAccess を指定します。実際の環境では、Resource の指定で具体的なバケットに限定したアクセスを設定するとよいでしょう。

image-20220402163752854.png

名前を指定します

image-20220402163929041.png

スイッチロール用の IAM Role が作成されました

image-20220402164041035.png

アカウント2 : スイッチロール

アカウント2 側でスイッチロールを行います。

image-20220402164859952.png

ロールの切り替えを選択します

image-20220402164945581.png

せってい

image-20220402165050551.png

スイッチロールが出来ました。このまま S3 のページに移動します。

image-20220402165203608.png

AWS アカウント1 側のバケットが参照できます。

image-20220402165312219.png

バケットの中のファイルも確認可能です

image-20220402165345676.png

正常にファイルの中身も確認できました。

image-20220402165419719.png

検証を通じてわかったこと

  • 「バケットポリシー」を使ったクロスアカウントアクセスの方法は、マネージメントコンソールのバケット一覧に表示されない。AWS CKI や SDK などで API を経由してアクセスする必要がある
  • 「スイッチロール」の場合はマネージメントコンソールから GUI アクセスが可能
5
2
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
5
2