Semua artikel
// Artikel

Review Keamanan AWS S3: Akses Publik hingga Bukti

Dipublikasikan 16 Juli 2026

Review S3 dimulai dari hasil akses, bukan sintaks bucket policy. Akses objek dapat dipengaruhi identity policy, bucket policy, access-point policy, ACL, Object Ownership, dan Block Public Access (BPA). Setiap GetObject atau PutObject yang berhasil harus dapat dijelaskan melalui principal bernama, prefix objek tujuan, dan bukti tercatat.

Pasang guardrail account dan bucket

Aktifkan empat pengaturan BPA pada level account kecuali ada kebutuhan terdokumentasi dan teruji: BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, serta RestrictPublicBuckets. AWS menerapkan kombinasi paling ketat dari level organisasi, account, bucket, dan access point. BPA tidak menulis ulang policy atau ACL lama; saat dinonaktifkan, policy/ACL publik lama dapat aktif lagi. Periksa konfigurasi account dan bucket, lalu telusuri setiap pengecualian.

Untuk workload biasa gunakan Object Ownership BucketOwnerEnforced. Ini default bucket baru, menonaktifkan ACL, dan menjadikan pemilik bucket sebagai pemilik seluruh objek. Upload tanpa ACL atau dengan bucket-owner-full-control tetap diterima; upload dengan ACL lain dapat gagal. Sebelum mengubah bucket lama, inventaris ketergantungan ACL objek dan kondisi policy. Jangan mempertahankan ACL hanya karena sudah lama digunakan.

Uji seluruh jalur policy

Bucket policy harus menyebut principal, aksi, resource, dan condition yang tetap. Access point dapat mempersempit akses aplikasi atau jaringan, tetapi access point punya policy dan evaluasi BPA sendiri. Review policy access point dan bucket di bawahnya. Principal: "*" tidak menjadi aman hanya karena asumsi jaringan.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "TenantAReadOnly",
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::111122223333:role/tenant-a-app"},
    "Action": ["s3:GetObject"],
    "Resource": "arn:aws:s3:::example-private/tenant-a/*"
  }]
}

Uji read yang diizinkan, read ke prefix saudara yang harus gagal, perilaku list, principal lintas account, dan percobaan pembaruan policy. Untuk upload, periksa encryption dan prefix tujuan secara terpisah. CloudTrail management events merekam perubahan konfigurasi bucket, tetapi operasi objek S3 adalah data events dan tidak dicatat secara default. Aktifkan selector untuk bucket/prefix penting; scope harus disengaja karena volume serta biaya dapat meningkat.

Perlakukan presigned URL sebagai akses bearer

Presigned URL memakai kredensial pembuat untuk memberi akses terbatas waktu pada operasi S3 tertentu. Siapa pun yang memegang URL dapat memakainya sampai kedaluwarsa. Jangan masukkan URL ke ticket, log, atau telemetry publik. Buat di server untuk satu objek dan satu operasi, gunakan masa berlaku sesingkat yang praktis, lalu pastikan signer tidak punya akses luas yang tidak dimaksudkan.

Untuk presigned PUT, bentuk object key di server, terapkan constraint konten saat didukung proses signing, dan catat issuer, bucket/key tujuan, operasi, expiry, request ID, serta correlation ID tanpa menyimpan query URL penuh. Uji URL kedaluwarsa, key berubah, method berubah, dan pemanggil tidak berwenang. Saat containment mendesak, cabut kredensial dasar atau ubah otorisasi; expiry saja bukan rencana insiden. Tetapkan batas ukuran dan jenis file di lapisan aplikasi, lakukan pemindaian sebelum objek dipublikasikan, dan jangan menganggap presigned URL sebagai validasi isi. URL membatasi otorisasi request, bukan keamanan file yang diunggah.

Sertakan hasil IAM Access Analyzer untuk bucket publik atau shared dalam artefak review. Temuan yang diarsipkan harus menyimpan alasan, owner, serta tanggal peninjauan ulang; pengarsipan tidak mengubah policy yang mendasarinya.

Artefak selesai dan keputusan

KontrolField buktiOwnerPass/failPengecualianPerbaikan
BPA accountaccount ID, empat setting, waktu captureowner platform cloudpass/failworkload publik, expiryaktifkan setting yang hilang
Object Ownershipbucket, mode, inventaris ACLowner storagepass/faildependensi migrasipindahkan grant ACL ke policy
Resource policyversi policy, output uji principal/prefixowner layananpass/failkontrak lintas accounthapus wildcard/persempit condition
Data eventsselector trail, bucket/prefix, sample eventowner keamananpass/failgap biaya disetujuitambah selector terfokus

Website hosting, replication, dan upload partner dapat valid. Masing-masing perlu owner, bucket/prefix, kontrol kompensasi, expiry, dan retest. “Aplikasi perlu publik” bukan catatan pengecualian. Saat exception berakhir, hapus policy atau access point terkait lalu verifikasi dari account eksternal bahwa objek tidak lagi dapat dibaca atau ditulis. Pengujian infrastruktur dapat mereview kontrol S3 yang disetujui.

Kasus kerja: upload intake presigned

Terbitkan satu URL PUT berumur singkat untuk objek uji dengan key yang dibuat server. Tandatangani header content type dan checksum yang wajib, lalu upload fixture benar. Output yang diharapkan adalah objek berada di key yang ditetapkan serta catatan intake berstatus menunggu inspeksi, bukan disetujui untuk pemakaian lanjutan. Ulangi dengan content type berbeda, header bertanda tangan diubah, fixture terlalu besar, URL kedaluwarsa, dan URL dipakai ulang; setiap kasus harus ditolak atau tetap tidak tersedia sesuai alur intake terdokumentasi. URL bertanda tangan adalah akses bearer yang dibatasi izin signer serta masa hidupnya; validasi, kebijakan ukuran, validasi tipe, dan pemindaian malware tetap kontrol aplikasi di sekitar upload.

Jalankan review Access Analyzer untuk bucket policy dan access point, lalu selidiki setiap temuan eksternal terhadap principal yang dimaksud. Untuk pengecualian eksternal disetujui, catat owner, cakupan tepat, masa berlaku, serta verifier independen. Saat kedaluwarsa, verifier memastikan akses tidak lagi bekerja dari principal uji eksternal dan melampirkan hasil pada catatan pengecualian. Bukti penutupan berisi revisi policy, output analyzer, matriks uji upload, status scanner, dan hasil kedaluwarsa eksternal. Jangan menyimpulkan aman dari enkripsi atau label console nonpublik.

Sources

Punya sistem yang perlu diuji?