はじめに
AWSの基本サービスのS3ですが、アクセス管理がややこしいので整理するために書きました。ざっくりです。間違ってたら教えてください。
S3とは
Simple Storage Service
AWSのストレージサービス。容量無制限(従量課金)で安価、障害時の耐久性に優れている。データの保存・バックアップの用途のほか、静的ファイルをアップロードしてWebページとして公開することもできる。
用語
オブジェクト・・・S3に保存するファイル
バケット・・・オブジェクトの置き場所。フォルダみたいなもの。
キー・・・オブジェクトを指定するための一意の文字列。(オブジェクトの名前)
S3でのアクセス管理
デフォルトでは全てプライベート(バケット、オブジェクトを作成したAWSアカウントのみがアクセスできる)。
アクセスポリシーによって許可・拒否を定義する。
アクセス許可の流れ
S3はリクエストを受け取るとアクセス権があるかどうかのアクセスポリシーを確認し、許可するかを決める。
アクセスポリシーの種類は以下
・ユーザーポリシー
・バケットポリシー
・ACL
・バケットACL
・オブジェクトACL
ユーザーポリシー
=IAMでのアクセス管理
「このユーザーは何ができるか」を定義する。
バケットポリシー
「このバケットには誰がアクセスできるか」を定義する。
IPアドレスでの制限やMFA(多要素認証)制限、CloudFrontからのアクセスのみ許可する・・・など。
ACL
アクセスコントロールリスト
ユーザーポリシー、バケットポリシーより優先順位は低い。通常はユーザーポリシー、バケットポリシーで制御し、さらに細かい制御が必要な場合にACLを用いる。
バケットACL
バケットACLに関しては公式に以下の記述があります。
バケット ACL の使用が推奨される唯一のケースは、Amazon S3 のログ配信グループに、バケットへのアクセスログオブジェクトの書き込みアクセス許可を付与する場合です。
アクセスポリシーのオプションを使用するためのガイドライン より
オブジェクトACL
バケットポリシー、バケットACLがバケット単位であるのに対し、オブジェクトACLはオブジェクト単位でのアクセス管理。特定のオブジェクトに対しての制御が必要な場合に用いる。
バケット所有者が他のAWSアカウントにオブジェクトのアップロードを許可する場合は、オブジェクトACLでアクセス許可する必要がある。
その他
他に、ブロックパブリックアクセス設定というものもあり、リソースへのパブリックアクセス(公開)を制限できる。
参考
Amazon S3とは
Amazon S3 リソースへのアクセス許可の管理の概要
20190220 AWS Black Belt Online Seminar Amazon S3 / Glacier
さいごに
アクセス管理の細かい制御や関係については公式や他に良い記事がたくさんあるのでそちらを見ていただければと思います。
以上、どなたかのお役に立てば幸いです。