S3 Bucket'ı Public Bırakmak
ACL 'public-read', varsayılan değil

Eski alışkanlık: bucket policy ile herkese GetObject, site açılsın. Yeni alışkanlık olması gereken: Block Public Access dört kapı, önde CloudFront. İkisini karıştırdım. Public duran bucket'a birinin 'geçici' yüklediği dosya da herkese açıldı.
Dört kapı
Block Public ACLs, Block Public Policy, Ignore Public ACLs, Restrict Public Buckets. Birini açık unutmak yetiyor. Terraform'da resource ayrı; bucket'ı yazıp block'u 'sonra' demek, Multi-AZ ile aynı cümle.
resource "aws_s3_bucket_public_access_block" "uploads" {
bucket = aws_s3_bucket.uploads.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
resource "aws_s3_bucket_policy" "uploads" {
bucket = aws_s3_bucket.uploads.id
policy = data.aws_iam_policy_document.uploads.json
}
Policy, CloudFront origin access control'e GetObject verir, AWS:SourceArn ile dağıtıma kilitler. Principal: * ile GetObject, 'statik site' diye savunuluyor hâlâ. Statik site için bile S3 website hosting yerine CloudFront; listeleme kapalı, hata sayfası sizin.
İçine ne konur
Public bucket, bir gün yüklenen her şeyi miras alır. Sözleşme PDF'i, bir döküm, yanlış prefix. Prefix güvenliği, public GetObject yanında zayıf. Ayrı bucket: gerçekten herkese açık olan (varsa) ve asla açık olmayan. İkisini aynı isimde tutmak, IAM yıldızının kova hali.
Bulmak
Access Analyzer, account'taki public bucket'ı listeler. Ben bunu apply sonrası değil, haftalık bakışta tutuyorum. Public kasıtlıysa kaydı var: hangi nesneler, neden, kim. Kayıt yoksa kapatıyorum. 'Zaten boş' cümlesi, içine bir nesne düşünce bitiyor.
Bu bir ihlal hikâyesi değil. Tek bir ACL'nin, sonra gelen dosyayı da açması. Kapı açıkken 'kimse bilmiyor' varsayımı, state'i git'e koymak kadar sıkıcı ve aynı derecede kalıcı.
Yorumlar
Yorumlar (0)
Yorumlar üyelere açık. Üye ol · Giriş yap