クマのブログ

つまづいたところ、学びを書いていきます

S3基本概念の理解

はじめに

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

  • オブジェクト(保存するデータ)のコンテナ(集合体)
    • RDBでいうテーブル
  • 全オブジェクトはバケット内に保存される
  • バケットをどのリージョンに置くか設定できる

Object

  • 基本エンティティ
    • 要は保存されるデータ(.pngとか.pdfとか.txt)
    • RDBでいうレコード
  • オブジェクトデータとメタデータで構成
    • メタデータContent-Typeなどの標準HTTPメタデータも含まれる
      • だから、ダウンロードの時もContent-Typeを指定してあげればダウンロードできたりWEBサーバーに保存できたりするのか
  • キーとバージョンIDによって一意に特定
    • バケット、オブジェクトキー、およびオプションでバージョン IDの組み合わせで一意に特定

Keys

  • オブジェクトの固有の識別子

S3バージョニング

  • 同じバケット内で同一のオブジェクト(複数のバリアント)を保持する時に使用
  • 障害対応に有効

バージョンID

  • バージョニング有効時にオブジェクトに付与されるID

バケットポリシー

  • IAMごとに、バケットとそのオブジェクトへのアクセスを制限(認可)

アクセスコントロールリスト (ACL)

  • 個々のバケットとオブジェクトへの読み取り・書き込みの制限ができる
  • 直近はあまり使用がないらしい
    • IAMで制御できちゃうからかな?
    • サーバーサイド側でその制御(他のユーザーのマイページ内の画像にアクセス、など)ができてしまうからかな?

Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっており、オブジェクトごとに個別にアクセスを制御する必要がある特例を除き、ACL を無効にすることをお勧めします。

S3 アクセスポイント

  • arn:aws:s3:***みたいなやつ
  • S3 オブジェクトのオペレーション (GetObject や PutObject など) を実行するために使用