こんにちは!
クラウドインテグレーション部(CI部)技術2課の反町です。
別アカウントに存在するS3からオブジェクトを取得する方法を知りたかったので、公式ドキュメントを参考にやってみました!!
構成

今回のゴール
- BアカウントのEC2インスタンスでAアカウントのS3からオブジェクトをダウンロード
- 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/*"
}
]
}

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/*"
]
}
]
}

オブジェクトのダウンロード
AアカウントのS3からオブジェクトをダウンロードして閲覧できるか確認してみます。
コマンドは以下です。
aws s3 cp s3://copybucket-sorimachi-20220124/testfile.txt /tmp
ダウンロード成功しました!!!

中身が見れるかも確認です。

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