S3の一覧権限はオブジェクト権限と別ARNで検証する
AWS
セキュリティ
S3
IAM
知識
判断
運用
S3でプレフィックス配下を一括削除する処理は、オブジェクトの取得・削除権限だけでは完結しない。事前の一覧取得はバケット操作であり、オブジェクトARNを対象にした権限では許可されない。オブジェクト操作が成功するポリシーでも、cleanupやデータ削除の一覧取得だけがAccessDeniedになるため見落としやすい。
権限設計では、実装が呼ぶ操作を「バケット操作」と「オブジェクト操作」に分解する。オブジェクト操作はオブジェクトARN、一覧取得はバケットARNを対象にし、意図が異なるためstatementも分離する。高レベルな「ファイル削除」という業務名だけで権限を棚卸しせず、内部で一覧取得してから削除しているかまで確認する。
複数バケットを走査するcleanupでは、処理側の対象バケット一覧とIAM側のバケットARN一覧を突き合わせる。新しいバケットを削除対象へ追加したときは、オブジェクト権限だけでなく一覧権限にも同じ追加が必要かを確認する。
検証では、ポリシー上で一覧アクションのresourceがバケットARNになっていること、オブジェクト操作のresourceがオブジェクトARNになっていることを静的に確認する。可能なら本番同等ロールで一覧取得から一括削除まで通し、一覧取得段階のAccessDeniedを検出する。