S3 オブジェクト読み取りポリシーのワイルドカードプリンシパル

すべての主体にS3のGet系操作を許可すると、操作、対象リソース、実際のアクセス制御によっては、オブジェクトの内容や設定情報が公開される可能性があります。

説明

バケットポリシーでPrincipal: "*"にGet系の操作を許可すると、匿名ユーザーを含む不特定の利用者が情報を読み取れる可能性があります。実際のアクセス範囲は、操作、対象リソース、ポリシーの条件、明示的な拒否、Block Public Accessの設定によって決まります。

想定される影響

s3:GetObjectはオブジェクトの内容を読み取る権限です。ほかのGet系操作ではバケットやオブジェクトの設定が返される場合があるため、公開される情報は許可した操作に応じて確認する必要があります。

対処方法

必要な読み取り操作とリソースARNだけを許可し、Principalを特定のロールなど信頼できる主体に限定してください。公開アクセスが不要な場合は、Block Public Accessも有効にしてください。

例

次の例は、オブジェクトを読み取る権限を一つのロールに限定するポリシーの変更です。バケット名とロールARNは実際の環境の値に置き換えてください。公開ポリシーを適用できるかどうかは、Block Public Accessの設定にも左右されます。

変更前

yaml
- name: Bucket
  amazon.aws.s3_bucket:
    name: mys3bucket
    state: present
    policy:
      Version: "2012-10-17"
      Statement:
        - Effect: Allow
          Action: s3:GetObject
          Resource: "arn:aws:s3:::mys3bucket/*"
          Principal: "*"

変更後

yaml
- name: Bucket
  amazon.aws.s3_bucket:
    name: mys3bucket
    state: present
    policy:
      Version: "2012-10-17"
      Statement:
        - Effect: Allow
          Action: s3:GetObject
          Resource: "arn:aws:s3:::mys3bucket/*"
          Principal:
            AWS: "arn:aws:iam::123456789012:role/S3Reader"

参考資料