説明
public-read ACL は、所有者の権限に加え、匿名リクエストを含むすべての利用者に READ を付与します。バケットの READ はバケット内のオブジェクト一覧取得を、オブジェクトの READ はその内容とメタデータの読み取りを許可します。バケット ACL だけで、すべてのオブジェクトの内容まで読めるわけではありません。
実際の権限には、Object Ownership、Block Public Access、ポリシーも影響します。BucketOwnerEnforced で ACL が無効になっている場合、ACL は権限の評価に使われず、ACL を設定するリクエストが拒否されることもあります。
想定される影響
- 公開読み取りが実際に許可されると、公開する予定のないオブジェクト名や内容を外部の利用者が確認できる可能性があります。
public-read-writeはバケットへの新しいオブジェクトの書き込みも許可します。既存オブジェクトの上書き・削除にはバケットとオブジェクトの所有者に関する制限がありますが、不要なアップロードだけでも費用や運用上の問題が生じます。
対処方法
- 公開する必要のないバケットとオブジェクトから公開 ACL の権限を削除し、必要なアカウントやロールだけをポリシーで許可してください。
- 必要な ACL 権限をポリシーに移したうえで、可能であれば ACL を無効にし、Block Public Access を適用してください。正当な利用を止めないよう、既存のアクセス経路を先に確認してください。
- 実際のバケットとオブジェクトの ACL・ポリシーを確認し、必要なアクセスが維持され、不要なアクセスが拒否されることを検証してください。バケット ACL の変更だけでは、オブジェクト ACL や別のポリシーによる権限は削除されません。
例
現在のバケット管理モジュールを使用する例です。bucket_name には管理対象のバケットを指定してください。いずれも ACL が有効な既存バケットを前提とし、公開 ACL は Block Public Access の設定によって拒否または無視される場合があります。最初の例を適用するために既存の保護を弱めないでください。
変更前
yaml
- name: Set a bucket ACL
amazon.aws.s3_bucket:
name: "{{ bucket_name }}"
state: present
acl: public-read
この ACL が有効に適用されると、匿名の利用者もバケット内のオブジェクト一覧を取得できます。個々のオブジェクトの読み取り権限は別途確認してください。
変更後
yaml
- name: Set a bucket ACL
amazon.aws.s3_bucket:
name: "{{ bucket_name }}"
state: present
acl: private
公開 ACL の権限を削除し、ACL の権限を所有者だけに付与します。別のポリシーによるアクセスは残る場合があるため、権限全体も確認してください。すでに ACL が無効なバケットでは、ACL の更新は不要です。