公開ACLを指定した旧aws_s3タスク

S3の公開ACLは、意図しない利用者によるオブジェクト一覧の取得、内容の読み取り、アップロードを許可する場合があります。実際の権限に応じて公開アクセスを制限してください。

説明

public-readやpublic-read-writeなどの公開ACLは、匿名の利用者を含む不特定の相手にS3へのアクセスを許可する場合があります。公開する必要がないデータには使用しないでください。

公開ACLが指定されていても、バケット内の全オブジェクトが公開されているとは限りません。バケットACLのREADはオブジェクトの一覧取得を、オブジェクトACLのREADはそのオブジェクトの内容の読み取りを許可します。Block Public Accessによって公開ACLが拒否または無視される場合があります。また、Object OwnershipがBucket owner enforcedの場合、ACLによる権限付与は無効になります。

想定される影響

  • 公開読み取りACLが実際に有効な場合、対象に応じてオブジェクト一覧やオブジェクトの内容が、意図しない利用者に公開される可能性があります。
  • バケットの公開WRITE権限が有効な場合、外部の利用者による新しいオブジェクトのアップロードで、ストレージやリクエストの費用が増える可能性があります。この権限だけでは、バケットと既存オブジェクトのどちらも所有していない利用者が、そのオブジェクトを上書きまたは削除することはできません。

対処方法

  • 不要な公開ACLを削除してください。必要な既存のアクセスをポリシーで設定してから、ACLを無効にしてください。ACLを継続して使用する必要がある場合は、必要なアカウントだけに権限を付与してください。
  • Block Public Access、Object Ownership、バケットポリシー、オブジェクトACLを併せて確認し、実際のアクセス範囲を判断してください。データを意図的に公開する場合も、必要なリソースへの読み取りアクセスだけを許可してください。
  • 現在のAnsibleコレクションでは、バケットの管理にamazon.aws.s3_bucketを使用してください。変更後は実際のACLとポリシーを確認し、必要なアクセスが維持され、不要なアクセスが拒否されることを検証してください。

例

以下は、旧amazon.aws.aws_s3モジュールを使用した例です。現在のドキュメントはamazon.aws.s3_objectに転送されます。このモジュールのバケット作成・削除機能は、コレクションのバージョン6.0.0で削除されました。以下のmode: createを、現在のコレクションでバケットを作成する方法として使用しないでください。

変更前

yaml
- name: Create an empty bucket
  amazon.aws.aws_s3:
    bucket: mybucket
    mode: create
    permission: public-read

- name: Create an empty bucket
  amazon.aws.aws_s3:
    bucket: mybucket-logs
    mode: create
    permission: public-read-write

変更後

yaml
- name: Create an empty bucket
  amazon.aws.aws_s3:
    bucket: mybucket
    mode: create
    permission: private

説明:

  • 最初の例: バケットに適用されるpublic-readはオブジェクト一覧の取得を、public-read-writeはそれに加えて新しいオブジェクトのアップロードも許可する場合があります。実際の権限は、ACLが有効かどうかと、ほかのアクセス制御設定によって異なります。
  • 次の例: private ACLは公開権限を付与しません。ただし、バケットポリシーやオブジェクトACLが別途許可するアクセスも確認してください。既存のバケットに必要な変更が実際に反映されたことも検証してください。

参考資料