説明
バケットポリシーでPrincipal: "*"にPut操作を許可すると、意図しない相手がオブジェクトを書き込んだり、設定を変更したりするおそれがあります。実際に許可される操作は、指定した操作名とリソース、条件、明示的な拒否、Block Public Accessの設定によって決まります。
Put操作がすべてオブジェクトのアップロードを行うわけではありません。s3:PutObjectはオブジェクトを書き込みますが、ほかの操作では別の設定が変更されることがあるため、操作ごとに必要な権限を確認してください。
想定される影響
- オブジェクトの書き込み権限が不要なアクセス主体に、実際には
s3:PutObjectが許可されている場合、新しいオブジェクトを作成したり、同じキーのオブジェクトの内容を書き換えたりできます。バージョニングや条件付きリクエストなどの設定によっても結果は変わります。 - アプリケーションが使うオブジェクトの変更は、配信内容や処理結果に影響する可能性があります。他のPut操作については、変更の対象となるリソースや設定に応じて影響を判断する必要があります。
- 不要なアップロードが許可されると、ストレージやリクエストの費用が増える可能性があります。Put操作の権限だけで読み取りや削除まで許可されるわけではありません。
対処方法
- 必要な操作名を確認し、書き込みや設定変更の権限を必要なアクセス主体とリソースARNに限定してください。
- 条件、明示的な拒否、Block Public Accessを含め、ポリシー全体から実際の権限を確認してください。
- オブジェクトのアップロードが必要な場合は、アップロードされたデータを使うサービスでの検証と、保存費用の管理も確認してください。
例
以下の過去の例は、そのままではデプロイできません。Version: "2020-10-07"は未対応のポリシー言語バージョンで、PutObjectにはサービスの接頭辞がなく、Resourceもありません。実際のポリシーには、対応するバージョン、s3:PutObjectなどの正確な操作名、適切な対象ARNを指定してください。
変更前
yaml
- name: Bucket
amazon.aws.s3_bucket:
name: mys3bucket
state: present
policy:
Version: "2020-10-07"
Statement:
- Effect: Allow
Action: PutObject
Principal: "*"
変更後
yaml
- name: Bucket
amazon.aws.s3_bucket:
name: mys3bucket
state: present
policy:
Version: "2020-10-07"
Statement:
- Effect: Allow
Action: PutObject
Principal:
AWS: "arn:aws:iam::123456789012:role/upload-service-role"
説明:
- 最初の例:
Principal: "*"では、オブジェクトを書き込む主体を限定していません。ポリシーの形式を修正する際に、権限を与える主体とオブジェクトの範囲も制限してください。 - 次の例: アップロードを担当するロールを指定しています。ポリシーの形式を修正し、実際のロールと対象オブジェクトのARNを使って、必要なアップロードが許可され、不要な書き込みが拒否されることを確認してください。