Amazon S3 Block Public Access で S3 へのパブリック・アクセスを一切禁止する設定例。アカウント全体と各バケット毎の設定があるが、各バケット毎の設定はアカウント全体設定でオーバライドされる。つまり、アカウント全体の設定で禁止していると、バケット単位で許可しても許可されない。
すでにアカウントレベルで全パブリックアクセスを拒否しているため、実際には余分な設定ですが、バケットレベルで制御可能だということは覚えておいてください。バケットレベルでオプションを変更しても、アカウントレベルでの設定は上書きできません。
Amazon S3 Block Public Access – アカウントとバケットのさらなる保護 | Amazon Web Services ブログ
意味
新規のパブリック ACL と、パブリックオブジェクトのアップロードをブロックする (推奨)
- オブジェクトの「公開」もできない。
パブリック ACL を通じて付与されたパブリックアクセスを削除する (推奨)
新規のパブリックバケットポリシーをブロックする (推奨)
- パブリックバケットポリシー("Principal": "*")を設定できない。
- AWSアカウントIDを指定したクロスアカウントのアクセス許可は可能。
パブリックポリシーを持つバケットへのパブリックアクセスとクロスアカウントアクセスをブロックする (推奨)
- パブリックバケットポリシーが設定されても、
- パブリックアクセスは拒否される。
- パブリックバケットポリシーが設定されてもクロスアカウントアクセスは拒否される。
- s3 cp でクロスアカウントでバケット間コピーすると "An error occurred (AccessDenied) when calling the UploadPartCopy operation" と怒られる - ablog の通り、クロスアカウントでコピーする際にコピー元S3バケットにパブリックアクセスポリシーを設定して、コピー先のバケットで「パブリックポリシーを持つバケットへのパブリックアクセスとクロスアカウントアクセスをブロックする」が有効だと"Access Denied"で失敗する。
$ aws s3 cp s3://s3-public-block-acl-test/test.txt ./ fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
補足
DeleteAccountPublicAccessBlock、DeleteBucketPublicAccessBlock を許可する権限は何か?
- Put/Delete とも PutAccountPublicAccessBlock、PutBucketPublicAccessBlock の2つの権限があれば可能。逆に禁止する場合は、SCP でこの2つの権限を拒否すれば、Put/DeleteAccountPublicAccessBlock、Put/DeleteBucketPublicAccessBlock を禁止できる。
$ aws s3control delete-public-access-block --account-id 012345678901 An error occurred (AccessDenied) when calling the DeletePublicAccessBlock operation: Access Denied $ aws s3control put-public-access-block --account-id 012345678901 --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true" An error occurred (AccessDenied) when calling the PutPublicAccessBlock operation: Access Denied