[S3]クロスアカウント時のアップロード時の権限エラー[はまった]

AWS利用料業界最安値に挑戦します!

コンニチハ、千葉です。

S3のクロスアカウント環境を構築したのですが、クロスアカウント上でアップロードしたファイルをダウンロードしたとろこと権限エラー(Access Denied)になってはまったので記しておきます。

事象

環境

クロスアカウントで S3 sync するための権限設定を参考に、IAMロールベースでクロスアカウントのアクセス設定をしました。

環境は以下となります。

これで、アカウントAのEC2からアカウントBのS3バケットを操作できるようになります。 具体的には、アカウントAのEC2からaws cp [ローカルファイル] s3://[アカウントBのS3バケット名]でファイルをアップロードしました。

権限が足りないエラー発生

アカウントBにファイルをアップロードできましたが、アカウントBにログインしS3にアップロードされたファイルを操作すると、

  • ファイル削除ができる
  • それ以外の操作(ファイルのダウンロードなど)ができない

という状況になってしまいました。

調査

アップロード後の権限がどうなっているか調査しました。

まずはクロスアカウントでない環境(アカウントAからアカウントAにアップロード)の場合aws cp [ローカルファイル] s3://[アカウントAのS3バケット名]

アカウントAの権限が追加されています。

次にクロスアカウント環境(アカウントAからアカウントBにアップロード)の場合aws cp [ローカルファイル] s3://[アカウントBのS3バケット名]

権限が1つもついていません(;゚Д゚)エエー.

解決方法

クロスアカウントの場合は権限を意識する必要がありました。

アップロード時のcpコマンドのオプションに--acl bucket-owner-full-control付与します。

aws s3 cp --acl bucket-owner-full-control [ローカルファイル] s3://[アカウントBのS3バケット名

これで、アカウントBでログインしてファイルダウンロードなどの操作ができるようになりました。

権限がどうなったかみてみましょう。

ちゃんとアカウントAとアカウントBの権限が付与されていました!!

最後に

クロスアカウントでファイルをアップロードするときは、権限を意識する必要がありました。ハマりやすいポイントだと思うので頭の片隅に入れてもらえれば!

AWS利用料業界最安値に挑戦します!