Amazon S3 は AWS の代表的なオブジェクトストレージサービスです。
シンプルな構造ながら強力なアクセス制御機能を持っており、正しく理解することが重要です。
本記事では、S3のアクセス制御について基本的な部分を整理します。
目次
バケットとオブジェクト
Amazon S3 はオブジェクトストレージであり、以下のような構造になっています。
- バケット:オブジェクト(ファイル)を格納する入れ物
- オブジェクト:実際に保存されるファイル
👉 バケットの中にオブジェクトが格納される、シンプルな構成です。
バケットとオブジェクトの所有権
S3では、バケットとオブジェクトそれぞれに「所有者」が存在します。
- 所有者とは、各リソース(バケット・オブジェクト)を作成したAWSアカウント
- IAMユーザーやロールでアップロードした場合でも、
→ 所属するAWSアカウントが所有者となる
例
IAMユーザーやロールを使用してオブジェクトをアップロードした場合、
そのオブジェクトの所有者は「そのIAMが属するAWSアカウント」になります。
所有権のポイント
- バケット所有者は、別のAWSアカウントに対して
オブジェクトアップロードのクロスアカウント許可を設定できる - バケット所有者は、他アカウントが所有するオブジェクトに対して
自動的なアクセス権限は持たない
ただしバケット所有者ができること
所有権に関係なく、以下の操作は可能です。
- オブジェクトへのアクセス拒否
- オブジェクト削除
- オブジェクトのアーカイブおよび復元
👉
完全なアクセス権がなくても、コントロールは可能という点が重要です。
アクセスの制御方式
S3のアクセス制御は大きく以下の2つに分類されます。
アクセス制御方式の一覧
| カテゴリ | 制御方式 | 概要 | 設定内容 | 設定オプション | 対象 |
|---|---|---|---|---|---|
| リソースベースのポリシー | バケットポリシー | バケットに対してアクセス制御を設定 | 許可 / 拒否 | IP制御、VPCエンドポイント、クロスアカウント | バケット |
| リソースベースのポリシー | ACL(アクセスコントロールリスト) | バケット・オブジェクトのアクセス許可を設定 | 許可のみ | クロスアカウント | バケット・オブジェクト |
| ユーザーポリシー | IAMポリシー | IAMユーザー・ロールに対してアクセス制御を設定 | 許可 / 拒否 | IP制御、VPCエンドポイント、クロスアカウント | バケット・オブジェクト |
ポイントまとめ
- バケットポリシー → リソース側からアクセスを制御
- IAMポリシー → ユーザー側からアクセスを制御
- ACL → シンプルなアクセス許可(現在は非推奨傾向)
👉
最終的なアクセス可否は、これらの組み合わせで決まります。
引用
- バケットの概要(AWS公式)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingBucket.html - Amazon S3 オブジェクトの概要(AWS公式)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/UsingObjects.html - アクセス管理の概要(AWS公式)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-control-overview.html - アクセスポリシーのガイドライン(AWS公式)
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/access-policy-alternatives-guidelines.html
