削除操作のPrincipalが「*」のS3バケットポリシー

S3の削除権限を必要な主体に限定し、バージョニングと保持ポリシーも見直してデータ喪失のリスクを減らします。

説明

S3の削除権限は、削除を必要とする主体だけに付与してください。バケットポリシーでPrincipal: "*"に削除操作を許可すると、匿名のリクエストを含む意図しないアクセスまで許可するおそれがあります。実際に削除できるかどうかは、許可する操作とリソース、条件、明示的な拒否、Block Public Accessの設定によって決まります。

想定される影響

  • 削除権限が不要なアクセス主体に、実際にはオブジェクトの削除が許可されている場合、データの喪失やサービス停止につながる可能性があります。
  • ログやバックアップを削除できる権限は、調査や復旧に影響します。削除権限だけでオブジェクトの読み取り権限まで付与されるわけではありません。
  • バージョニングが有効な汎用S3バケットでは、通常の削除によって削除マーカーが追加されます。特定のバージョンを完全に削除するには別の権限が必要です。影響はバージョニングの状態と実際に許可された操作によって異なります。

対処方法

  • 必要な削除操作とアクセス主体を確認し、その主体とリソースARNに権限を限定してください。
  • 条件、明示的な拒否、Block Public Accessを併せて確認し、実際のアクセス範囲を把握してください。
  • バージョンの削除権限と保持ポリシーを個別に見直し、復旧手順を試してください。バージョニングだけですべての削除を防げるわけではありません。

例

以下の過去の例は、そのままではデプロイできません。Version: "2020-10-07"はサポートされるポリシー言語のバージョンではなく、DeleteObjectにはサービスの接頭辞がなく、Resourceもありません。実際のポリシーには、対応するバージョン、s3:DeleteObjectなどの正確な操作名、対象リソースを指定してください。

変更前

yaml
- name: Bucket
  amazon.aws.s3_bucket:
    name: mys3bucket
    state: present
    policy:
      Version: "2020-10-07"
      Statement:
        - Effect: Allow
          Action: DeleteObject
          Principal: "*"

変更後

yaml
- name: Bucket
  amazon.aws.s3_bucket:
    name: mys3bucket
    state: present
    policy:
      Version: "2020-10-07"
      Statement:
        - Effect: Allow
          Action: DeleteObject
          Principal:
            AWS: "arn:aws:iam::123456789012:role/ops-bucket-admin"

説明:

  • 最初の例: Principal: "*"で削除操作の主体を限定していません。上記の形式上の問題を修正した場合も、この広い範囲が必要か確認してください。
  • 次の例: 削除操作の主体に特定のロールを指定しています。ポリシーの形式を修正し、ロールのARNを実際の値に置き換えて、削除権限が必要なオブジェクトだけに適用されることを確認してください。

参考資料