【初心者向け】S3オブジェクトを別アカウントから取得してみた

記事タイトルとURLをコピーする

こんにちは!

クラウドインテグレーション部(CI部)技術2課の反町です。

別アカウントに存在するS3からオブジェクトを取得する方法を知りたかったので、公式ドキュメントを参考にやってみました!!

aws.amazon.com

構成

f:id:swx-miyu-sorimachi:20220202104348p:plain

今回のゴール

  1. BアカウントのEC2インスタンスでAアカウントのS3からオブジェクトをダウンロード
  2. EC2インスタンスからファイルの中身が見れる!

ここまでを今回の目標にします。

以下に示す必要なリソースは作成しておきました。

  • Aアカウント:S3バケット

  • Bアカウント:EC2

Bアカウントでやること

EC2インスタンスに権限付与

オブジェクトとコピー用EC2インスタンスに次の内容のポリシーを持ったインスタンスプロファイルを付与します。

内容はAアカウントS3バケットのバケット取得を許可する権限と、バケットにオブジェクトを置く権限を付与しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::AccountABucketName/*"

        }
    ]
}

f:id:swx-miyu-sorimachi:20220202105100p:plain

Aアカウントでやること

バケットポリシーを編集

AアカウントのS3バケットポリシーを次の内容に編集します。

内容はBアカウントのEC2インスタンスに付与したIAMロールにS3バケットへのオブジェクト取得とオブジェクト配置を許可しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::AccountB:user/AccountBUserName"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::AccountABucketName/*"
            ]
        }
    ]
}

f:id:swx-miyu-sorimachi:20220202104348p:plain

オブジェクトのダウンロード

AアカウントのS3からオブジェクトをダウンロードして閲覧できるか確認してみます。

コマンドは以下です。

aws s3 cp s3://copybucket-sorimachi-20220124/testfile.txt /tmp

ダウンロード成功しました!!! f:id:swx-miyu-sorimachi:20220202123830p:plain

中身が見れるかも確認です。 f:id:swx-miyu-sorimachi:20220202123807p:plain

テストファイルが存在し、中身も見れました~!

まとめ

同じようなシリーズで前回は他アカウントのオブジェクトをコピーしてEC2から見てみるということをやりましたが、今回はクロスアカウントアクセスを利用してEC2から直接別のアカウントにあるS3のオブジェクトを取得してみました。なんとなくこちらの方が作業量も少なくて簡単に感じました。ポリシー関係はややこしく感じてしまう部分だと思うので、どなたかの参考になれば幸いです!