パブリックアクセスブロックの4つの設定
terraformでAWS S3バケット作成するときに aws_s3_bucket_public_access_block
を設定する。
resource "aws_s3_bucket_public_access_block" "example" { bucket = aws_s3_bucket.example.id block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true }
BlockPublicAcls
目的
S3バケットやオブジェクトに対してパブリックアクセスを設定できないようにする。 新しいファイルをアップロードする際に、うっかり一般公開設定にしてしまうことを防ぐことができる。
挙動
この設定を有効にすると以下の操作が自動的にブロックされる
- バケット全体を一般公開しようとする操作
- 個別のファイルを一般公開しようとする操作
- アップロード時に一般公開設定を含めようとする操作
例えばアップロード時にacl: 'public-read'
をつけてアップロードしようとしても「AccessControlListNotSupported: The bucket does not allow ACLs」
エラーとなり、アップロードできない。
# s3_client.put_object( bucket: "mybucket.example.com", key: "hoge.txt", body: "hello!", acl: 'public-read' )
BlockPublicPolicy
目的
バケットポリシーを使ってS3バケットやオブジェクトにパブリックアクセス許可を設定できないようにする。 うっかりバケットポリシーで一般公開設定にしてしまうことを防ぐことができる。
挙動
この設定を有効にすると、バケットポリシーでバケットやオブジェクトへのアクセスを許可する際に、Principal
に *
(ワイルドカード)を使用できなくなる。
*
は「誰でも」を意味するので、これを禁止することで、特定のユーザーまたはアカウントに対してのみアクセスを許可するように強制する。
例えば、この設定が有効な状態で、以下のようなバケットポリシーを設定しようとするとエラーになる。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPublicRead", "Effect": "Allow", "Principal": "*", // ここがエラーになる "Action": "s3:GetObject", "Resource": "arn:aws:s3:::mybucket.example.com/*" } ] }
IgnorePublicAcls
目的
アクセス制御リスト(ACL) を使用して付与されたパブリックアクセス許可を無視する。 過去に ACL を使って誤って公開設定にしてしまった場合でも、この設定を有効にすることで強制的に非公開にすることができる。
挙動
この設定を有効にすると、たとえオブジェクトにパブリック読み取り許可を与える ACL が設定されていても、そのオブジェクトへのパブリックアクセスはブロックされる。
例えば、hoge.txt
というオブジェクトの ACL が public-read
に設定されていても、 IgnorePublicAcls
が有効になっている場合は、hoge.txt
は一般公開されない。
RestrictPublicBuckets
目的
パブリックアクセスブロック設定が正しく設定されていないバケットへのアクセスを制限する。 誤って公開設定になっているバケットへのアクセスを防ぐことができる。
挙動
この設定を有効にすると、以下のいずれかの条件を満たすバケットに対して、アクセスが制限される。
BlockPublicAcls
、BlockPublicPolicy
、IgnorePublicAcls
のいずれかの設定が無効になっている- バケットポリシーでパブリックアクセスが許可されている
具体的には、これらのバケットに対して以下の操作が制限される。
この設定を有効にすることで、パブリックアクセスブロック設定が不十分なバケットへのアクセスを防止し、セキュリティリスクを軽減することができる。