はじめに
LaravelでS3にある画像データを処理する機能を実装しようとなった際につまづき、自力で解決しきれなかったので、特に圧倒的不足を感じたS3の知識を一通り確認
参考
AWS公式Doc(https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html)
機能
ストレージクラス
S3 Standard, S3 標準 – IA, S3 Glacier Instant Retrieval...などユースケースに応じていろんな機能がある
アクセス管理
S3ブロックパブリックアクセス
一般ネットワークからのアクセスを拒否。オブジェクトごとにURLが付与されるが、URL踏んでもアクセスできないようになる
アクセスコントロールリスト(ACL)
バケット・オブジェクトへの書き込み、読み込みの許可を管理
…などなど
データ処理
S3内のデータに変更があった時、イベントを発生させたり。
ストレージのログ記録とモニタリング
請求金額が上限行きそうなときのアラート発生させたり
分析とインサイト
保存されているデータの状況に応じて、コストの最適化をしてくれたり。
Amazon S3 の仕組み
これが一番知りたかった。
これなしではサーバーサイドでS3内のデータを操作するのは難しいと思う
Bucket
Object
Keys
- オブジェクトの固有の識別子
S3バージョニング
- 同じバケット内で同一のオブジェクト(複数のバリアント)を保持する時に使用
- 障害対応に有効
バージョンID
- バージョニング有効時にオブジェクトに付与されるID
バケットポリシー
- IAMごとに、バケットとそのオブジェクトへのアクセスを制限(認可)
アクセスコントロールリスト (ACL)
- 個々のバケットとオブジェクトへの読み取り・書き込みの制限ができる
- 直近はあまり使用がないらしい
- IAMで制御できちゃうからかな?
- サーバーサイド側でその制御(他のユーザーのマイページ内の画像にアクセス、など)ができてしまうからかな?
Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっており、オブジェクトごとに個別にアクセスを制御する必要がある特例を除き、ACL を無効にすることをお勧めします。
S3 アクセスポイント
arn:aws:s3:***
みたいなやつ- S3 オブジェクトのオペレーション (
GetObject
やPutObject
など) を実行するために使用