LoginSignup
8
3

More than 1 year has passed since last update.

【EC2/Amazon Linux2】 S3にアップロードした画像ファイルが削除できなくて調査したこと

Last updated at Posted at 2022-05-26

始めに

RailsアプリケーションのAction Textを使用した画像アップロード機能のテストを行なった際、
画像の削除処理がS3に反映されない現象が発生しました。

本記事は、調査に使用したコマンドと調査観点をメモしています。

インフラ構成

調査時点のインフラ構成図は下記となっています。
AppサーバーにIAMロールを付与しており、VPCエンドポイントを経由して、S3と通信を行う構成となっています。

スクリーンショット 2022-05-20 18.31.35.png

調査内容

対象のEC2インスタンスからS3を操作することが可能か確認

下記コマンドを実行して、 AccessDeniedが表示されていることを確認しました。

# 指定のバケットから一覧を取得できるか
aws s3 ls s3://指定バケット名

# 指定のファイルの確認することができるか
aws s3 ls s3://指定バケット名/ファイル名

# 指定のファイルを削除できるか
aws s3 rm s3://指定バケット名/ファイル名
# => delete failed: s3://指定バケット名/ファイル名 An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied

RailsのコンソールからS3にアクセスが可能か確認する場合

Railsのコンソールから確認する場合は下記コマンドとなります。

# 初期化
client = Aws::S3::Client.new(region: 'ap-northeast-1' )
# => #<Aws::S3::Client>

# オブジェクトの取得
client.get_object(:bucket => '指定バケット名', :key => 'key番号').body.read

# オブジェクトの削除
client.delete_object(:bucket => 'bucket_name', :key => 'sample.txt')

ポリシーの見直し

調査の結果から、権限周りの問題と考え下記設定値を見直しました。

  • EC2に追加されているIAMロール
  • バケットポリシー
  • VPC エンドポイントポリシー

今回の原因は VPC エンドポイントポリシーdeleteObjectの設定がなく削除ができなかったようです。
設定追加してあげて無事画像ファイルを削除することができました。

参考URL

8
3
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
8
3