すべての AWS アカウントに読み取りを許可する S3 ACL

authenticated-read ACL は所有者のアカウントだけにアクセスを限定しません。すべての AWS アカウントへの読み取り許可が必要か確認してください。

説明

authenticated-read ACL は所有者にすべての ACL 権限を与え、AuthenticatedUsers グループに READ を与えます。このグループは署名付きリクエストを送るすべての AWS アカウントを表し、所有者のアカウントや組織内の利用者には限定されません。public-read による匿名アクセスとは異なりますが、内部利用者だけを許可する設定ではありません。

バケットの READ はバケット内のオブジェクト一覧取得を、オブジェクトの READ はその内容とメタデータの読み取りを許可します。実際の権限には Object Ownership、Block Public Access、ポリシーも影響します。ACL が無効なバケットでは、ACL によってアクセスが許可されることはありません。

想定される影響

  • バケット ACL が実際に適用されると、一覧を必要としない別の AWS アカウントにもオブジェクト名や一覧情報が共有される可能性があります。
  • オブジェクト ACL が実際に適用されると、その内容とメタデータが意図したアカウント以外にも共有される可能性があります。認証済みリクエストであることだけで、信頼できる利用者とは判断できません。

対処方法

  • すべての AWS アカウントへの読み取り許可が不要なバケットとオブジェクトから、authenticated-read の権限を削除してください。必要なアカウントやロールはポリシーで明示的に許可してください。
  • ACL に依存する正当なアクセスをポリシーに移したうえで、可能であれば ACL を無効にし、Block Public Access を適用してください。
  • 実際のバケットとオブジェクトの ACL・ポリシーを確認し、必要なアクセスが維持され、不要なアカウントのアクセスが拒否されることを検証してください。バケット ACL の変更だけでは、オブジェクト ACL や別のポリシーによる権限は削除されません。

例

現在のバケット管理モジュールを使用します。bucket_name には管理対象のバケットを指定してください。ACL が有効な既存バケットを前提とし、最初の ACL は Block Public Access によって拒否または無視される場合があります。例を適用するために保護を弱めないでください。

すべての AWS アカウントに一覧取得を許可

yaml
- name: Set a bucket ACL
  amazon.aws.s3_bucket:
    name: "{{ bucket_name }}"
    state: present
    acl: authenticated-read

この ACL が有効に適用されると、署名付きリクエストを送るすべての AWS アカウントがバケット内のオブジェクト一覧を取得できます。バケット ACL によって、すべてのオブジェクトの内容まで読めるわけではありません。

所有者のみの ACL

yaml
- name: Set a bucket ACL
  amazon.aws.s3_bucket:
    name: "{{ bucket_name }}"
    state: present
    acl: private

ACL の権限を所有者だけに付与します。ポリシーによるアクセスは残る場合があります。すでに ACL が無効なら、ACL を再設定せずにポリシーと実際のアクセス権限を管理してください。

参考資料