S3 バケットのライフサイクル設定による確認・追加・削除アクションを拒否するときの対処方法について

2024.04.08

困っていること

ユーザーに対して、S3 のオブジェクト削除などができないようにs3:DeleteBuckets3:DeleteObjects3:DeleteObjectVersion明示的に拒否(Deny)してポリシーを適用しています。
しかしながら、S3 バケットのライフサイクル設定によるオブジェクトの削除処理は実行されてしまいます。併せて S3 バケットのライフサイクルに関連する操作、閲覧権限についても拒否したいです。
どうすれば良いか教えてください。

どう対応すればいいの?

S3 バケットのライフサイクル設定によるアクションは、アタッチするポリシーが異なります。
そのため明示的な拒否(Deny)を行ってもポリシーによる影響を受けず、ライフサイクル設定によるオブジェクトの削除処理が実行されています。

以下のポリシーを明示的に拒否してアタッチします。

  • S3バケットに設定されたライフサイクル設定情報を返すアクセス許可を付与
    s3:GetLifecycleConfiguration

  • バケットの新しいライフサイクル設定を作成する、又は既存のライフサイクル設定を置き換えるアクセス許可を付与(追加・削除するアクション)
    s3:PutLifecycleConfiguration

You can also explicitly deny permissions. An explicit deny also supersedes any other permissions. If you want to block users or accounts from removing or deleting objects from your bucket, you must deny them permissions for the following actions:

・s3:DeleteObject
・s3:DeleteObjectVersion
・s3:PutLifecycleConfiguration

s3:DeleteBuckets3:DeleteObjects3:DeleteObjectVersion でライフサイクル設定を管理出来てしまうのではと、認識しやすいので注意してください。 S3 には指定可能なアクションが多い ので、一度確認することをお勧めします。

補足

ドキュメント記載の通り、S3 ライフサイクルアクションは、AWS CloudTrail オブジェクトレベルのログ記録ではキャプチャされないことに注意してください。

Amazon S3 ライフサイクルアクションは、AWS CloudTrail オブジェクトレベルのログ記録ではキャプチャされません。CloudTrail は外部の Amazon S3 エンドポイントに対して行われた API リクエストをキャプチャしますが、S3 ライフサイクルアクションは内部の Amazon S3 エンドポイントを使用して実行されます。

参考資料