アカウントレベルのブロックパブリックアクセスを有効化した場合、バケット毎にブロックパブリックアクセスを無効化することはできるのか教えてください
困っていた内容
セキュリティ設定のばらつきを防ぐため、アカウントレベルのブロックパブリックアクセスの有効化を検討しています。
一方で、特定の S3 バケットはパブリックに公開する必要があります。
アカウントレベルのブロックパブリックアクセスを有効化した状態で、バケットレベルで個別にブロックパブリックアクセスを無効化することはできるのか教えてください。
結論
結論から述べますと、"アカウントレベルのブロックパブリックアクセス"を有効化した状態で、"バケットレベルのブロックパブリックアクセス"を無効化することはできません。
バケットレベルでブロックパブリックアクセスを無効化した場合でも、アカウントレベルのブロックパブリックアクセスが優先されます。
S3 パブリックアクセスブロックが有効になった状態で AWS アカウントまたは S3 バケットにオブジェクトが書き込まれ、そのオブジェクトが ACL またはポリシーを介して任意のタイプのパブリックアクセス許可を指定する場合、それらのパブリックアクセス許可はブロックされます。
どう対応すればいいの?
代替案として、アカウントレベルのブロックパブリックアクセスの設定項目を絞る方法が考えられます。
"新規のバケットポリシーの書き換えによるパブリックアクセス設定"を許可する方法
一つ目は、アカウントレベルのブロックパブリックアクセスの設定の際に「新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする」をオフにして設定する方法です。
なお、この方法ではバケットポリシーの書き換えによるパブリックアクセスの許可を防ぐことができません。
手順
まず、アカウントレベルのブロックパブリックアクセスの設定の際に「新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする」をオフにして設定します。
次に、公開したいバケットのバケットポリシーをパブリックアクセス可能な設定に編集します。 以上です。
この方法のメリット・デメリットは以下となります。
メリット
・既存のバケットポリシーによるパブリックアクセス設定は無効化される。
・バケットポリシーの書き換えが可能。
デメリット
・バケットポリシーの書き換えによるパブリックアクセス設定を防ぐことができない。
"既存のバケットレベルのバケットポリシーによるパブリックアクセス設定"を許可する方法
二つ目は、アカウントレベルのブロックパブリックアクセスの設定の際に「任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする」をオフにして設定する方法です。
この方法では、既存のバケットポリシーによるパブリックアクセス設定は許可されます。
前提として、アカウントレベルのブロックパブリックアクセスを設定する前に、バケットポリシーでパブリックアクセスが許可されている必要があります。
手順
アカウントレベルのブロックパブリックアクセスの設定の際に「任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする」をオフにして設定する。
以上です。
この方法のメリット・デメリットは以下となります。
メリット
・既存のバケットポリシーによるパブリックアクセス設定は許可される。
・バケットポリシーの書き換えによるパブリックアクセス設定を防ぐことができる。
デメリット
・新たにバケットをパブリックアクセス可能にすることができない。
上記の手順のどちらとも、充分に検討した上での実施をおすすめします。
参考資料
Amazon S3 パブリックアクセスブロック - AWS
Amazon S3 ストレージへのパブリックアクセスのブロック - Amazon Simple Storage Service
S3で誤ったデータの公開を防ぐパブリックアクセス設定機能が追加されました | DevelopersIO