Kontrol Akses S3: Kebijakan Bucket dan ACL
Tulis kebijakan bucket, bandingkan dengan ACL, dan konfigurasikan pengaturan pemblokiran akses publik untuk hosting yang aman.
Kontrol Akses S3: Kebijakan Bucket dan ACL adalah pelajaran AWS Solutions Architect gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AWS Solutions Architect, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AWS Solutions Architect mencakup 4 pelajaran total.
Gambaran Umum Kontrol Akses S3
S3 menawarkan beberapa mekanisme kontrol akses yang saling tumpang tindih: kebijakan IAM (berbasis identitas, mengontrol tindakan yang dapat dilakukan principal), kebijakan bucket (kebijakan JSON berbasis sumber daya pada bucket), Access Control Lists (ACL) (izin lama per objek/bucket), dan S3 Block Public Access (penggantian tingkat akun atau bucket yang memblokir setiap akses publik terlepas dari kebijakan lain). Untuk sebagian besar kasus penggunaan saat ini, kebijakan bucket bersama Block Public Access adalah pendekatan yang direkomendasikan—ACL dianggap lama.
Kebijakan Bucket: JSON Berbasis Resource
Kebijakan bucket adalah dokumen JSON yang dilampirkan langsung ke bucket S3. Dokumen ini menentukan principal mana (pengguna IAM, peran, akun AWS, layanan, atau publik) yang dapat menjalankan action tertentu pada resource tertentu (bucket dan/atau awalan kunci tertentu). Kebijakan bucket mendukung akses lintas akun tanpa memerlukan peran IAM: Anda dapat memberikan akses baca kepada peran IAM dari akun AWS lain untuk objek tertentu secara langsung melalui kebijakan bucket. Setiap bucket hanya dapat memiliki satu kebijakan, dengan ukuran maksimum 20 KB.
# Allow a specific IAM role from another account to read objects
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::999999999999:role/PartnerReadRole'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/partner-data/*'
}]
}Membuat Objek Dapat Dibaca Publik
Untuk menyajikan konten publik (misalnya aset situs web statis atau himpunan data publik), Anda dapat membuat objek dapat dibaca publik melalui kebijakan bucket. Pertama, nonaktifkan Block Public Access pada tingkat bucket, lalu tambahkan pernyataan kebijakan bucket dengan Principal: '*' dan Action: s3:GetObject. Kombinasi antara menonaktifkan pengaturan Block Public Access dan Allow pada kebijakan bucket diperlukan—mengaktifkan salah satunya tanpa yang lain tidak akan berhasil. Selalu batasi Resource ke awalan tertentu, bukan seluruh bucket, kecuali Anda memang sengaja ingin semua objek tersedia untuk publik.
# Public read policy for static website assets
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': '*',
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-website-bucket/public/*'
}]
}Pengaturan S3 Block Public Access
S3 Block Public Access adalah perlindungan dengan empat pengaturan yang mengesampingkan kebijakan bucket dan ACL: BlockPublicAcls (menolak permintaan untuk menetapkan ACL publik), IgnorePublicAcls (mengabaikan ACL publik yang sudah ada), BlockPublicPolicy (menolak kebijakan bucket yang memberikan akses publik), dan RestrictPublicBuckets (membatasi akses berdasarkan kebijakan publik). Keempat pengaturan ini diaktifkan secara default. Anda juga dapat mengaktifkan Block Public Access pada tingkat akun, sehingga memblokirnya untuk semua bucket terlepas dari pengaturan masing-masing bucket—ideal untuk mencegah paparan publik yang tidak disengaja.
# Enable all Block Public Access settings on a bucket
aws s3api put-public-access-block \
--bucket my-private-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=trueAccess Control Lists (ACLs): Teknologi Lama
ACL S3 adalah mekanisme kontrol akses awal yang sudah ada sebelum IAM. ACL memberikan izin yang telah ditentukan (READ, WRITE, FULL_CONTROL) kepada akun AWS atau grup yang telah ditentukan (semua pengguna, pengguna AWS terautentikasi, dan pengiriman log). ACL dapat diterapkan pada tingkat bucket atau tingkat objek individual. AWS kini merekomendasikan menonaktifkan ACL (pengaturan S3 'Bucket Owner Enforced' menjadikan pemilik bucket sebagai pemilik semua objek dan menonaktifkan ACL) serta menggunakan kebijakan bucket dan IAM. ACL masih diujikan dalam ujian SAA-C03 sebagai konsep lama.
# Disable ACLs by setting ownership to BucketOwnerEnforced
aws s3api put-bucket-ownership-controls \
--bucket my-bucket \
--ownership-controls '{"Rules":[{"ObjectOwnership":"BucketOwnerEnforced"}]}'Origin Access Control untuk CloudFront
Saat menyajikan konten S3 melalui CloudFront, Anda ingin bucket tetap privat, tetapi CloudFront dapat mengambil objek. Gunakan Origin Access Control (OAC)—pengganti modern untuk Origin Access Identity (OAI). OAC membuat identitas CloudFront yang Anda beri izin s3:GetObject dalam kebijakan bucket, sambil tetap mengaktifkan Block Public Access. Dengan demikian, pengguna harus melalui CloudFront (untuk penyimpanan tembolok, WAF, dan HTTPS) serta tidak dapat mengakses bucket secara langsung—pola arsitektur aman yang umum diujikan dalam ujian SAA-C03.
# Bucket policy granting CloudFront OAC access
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'Service': 'cloudfront.amazonaws.com'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/*',
'Condition': {
'StringEquals': {
'AWS:SourceArn': 'arn:aws:cloudfront::123456789012:distribution/EDFDVBD6EXAMPLE'
}
}
}]
}Akses S3 Lintas Akun
Ada dua cara untuk memberikan akses akun AWS lain ke bucket S3 Anda. Opsi 1 — Kebijakan bucket: tambahkan pernyataan dengan ARN akun eksternal sebagai Principal dan action S3 yang diinginkan. Pengguna/peran IAM dari akun eksternal tersebut tetap memerlukan izin IAM untuk memanggil S3, dan kebijakan bucket juga harus memberikan Allow kepada mereka. Opsi 2 — Peran IAM dengan kebijakan kepercayaan: buat peran di akun Anda yang memercayai akun eksternal; identitas dari akun eksternal tersebut mengambil peran itu dan memperoleh izin bucket Anda. Kebijakan bucket lebih sederhana untuk skenario hanya-baca; peran lebih baik untuk akses operasional.
Konfigurasi CORS untuk Aplikasi Web
Cross-Origin Resource Sharing (CORS) memungkinkan aplikasi web yang di-hosting pada satu domain melakukan permintaan pengambilan JavaScript ke bucket S3 pada domain yang berbeda. Tanpa konfigurasi CORS, peramban memblokir permintaan ini demi keamanan. Anda menambahkan konfigurasi CORS ke bucket untuk menentukan asal yang diizinkan, metode HTTP, dan header. CORS umumnya diperlukan saat SPA React yang di-hosting di example.com mengambil gambar atau file langsung dari URL bucket S3.
# Apply a CORS configuration
aws s3api put-bucket-cors \
--bucket my-website-bucket \
--cors-configuration '{"CORSRules":[{"AllowedOrigins":["https://example.com"],"AllowedMethods":["GET"],"AllowedHeaders":["*"],"MaxAgeSeconds":3600}]}'URL Bertanda Tangan Awal untuk Akses Sementara
URL bertanda tangan awal memberikan akses terbatas waktu ke objek S3 privat (untuk GET atau PUT) tanpa mengubah izin bucket atau objek apa pun. URL tersebut menyematkan kredensial dan waktu kedaluwarsa Anda—siapa pun yang memiliki URL itu dapat mengakses objek sampai URL tersebut kedaluwarsa. Gunakan URL bertanda tangan awal untuk: memungkinkan pengguna terautentikasi dalam aplikasi mengunduh file privat, memungkinkan klien mengunggah langsung ke S3 tanpa melalui backend Anda, atau membagikan laporan untuk sementara. Masa berlaku dapat berkisar dari 1 detik hingga 7 hari (saat menggunakan kredensial sementara STS, maksimumnya adalah 12 jam).
# Generate a pre-signed GET URL valid for 24 hours
aws s3 presign s3://my-private-bucket/reports/invoice.pdf \
--expires-in 86400
# Generate a pre-signed PUT URL (for client uploads)
aws s3 presign s3://my-private-bucket/uploads/new-file.pdf \
--expires-in 3600 \
--method PUTKondisi Kebijakan Bucket untuk Keamanan
Gunakan kondisi kebijakan bucket untuk menambahkan keamanan berbasis konteks. Pola umum: aws:SourceIp membatasi akses ke rentang IP tertentu (misalnya titik akhir VPC atau jaringan perusahaan); aws:SecureTransport: true memaksa penggunaan HTTPS dengan menolak permintaan melalui HTTP (praktik terbaik untuk semua bucket yang menyimpan data sensitif); s3:x-amz-server-side-encryption memastikan objek harus diunggah dengan enkripsi sisi server; dan aws:PrincipalOrgID membatasi akses ke principal dalam Organisasi AWS Anda, sehingga mencegah eksfiltrasi data ke akun eksternal.
# Deny non-HTTPS access to the bucket
{
'Effect': 'Deny',
'Principal': '*',
'Action': 's3:*',
'Resource': [
'arn:aws:s3:::my-secure-bucket',
'arn:aws:s3:::my-secure-bucket/*'
],
'Condition': {
'Bool': {'aws:SecureTransport': 'false'}
}
}Titik Akhir S3 VPC untuk Akses Privat
Secara default, instans EC2 di subnet privat mengakses S3 melalui internet (melalui gateway NAT), sehingga menimbulkan biaya NAT dan mengekspos lalu lintas ke internet publik. S3 Gateway Endpoints menyediakan konektivitas privat ke S3 dari dalam VPC tanpa gateway NAT dan tanpa biaya tambahan. Anda menambahkan Gateway Endpoint ke tabel perutean; lalu lintas ke S3 secara otomatis dirutekan melalui jaringan privat AWS. Anda juga dapat menambahkan kondisi kebijakan bucket menggunakan aws:SourceVpce untuk membatasi akses hanya pada permintaan yang datang melalui titik akhir tersebut.
# Create an S3 gateway endpoint and associate with route tables
aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--service-name com.amazonaws.us-east-1.s3 \
--route-table-ids rtb-12345678Pemeriksaan Singkat
Uji pemahaman Anda tentang konsep AWS Solutions Architect (SAA-C03) dari pelajaran ini.
Rangkuman Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: kebijakan bucket adalah dokumen JSON berbasis resource yang mengendalikan akses lintas akun dan akses layanan ke S3, S3 Block Public Access adalah pengesampingan keamanan yang mencegah paparan publik yang tidak disengaja, dan URL bertanda tangan awal, titik akhir VPC, serta konfigurasi CORS menangani pola akses tertentu dengan aman. Selanjutnya kita akan membahas pembuatan versi S3, MFA Delete, dan replikasi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kontrol Akses S3: Kebijakan Bucket dan ACL” gratis?
Ya — teks lengkap “Kontrol Akses S3: Kebijakan Bucket dan ACL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AWS Solutions Architect, upgrade ke CoddyKit PRO. Kursus AWS Solutions Architect mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Kontrol Akses S3: Kebijakan Bucket dan ACL”?
Tulis kebijakan bucket, bandingkan dengan ACL, dan konfigurasikan pengaturan pemblokiran akses publik untuk hosting yang aman. Kamu berlatih AWS Solutions Architect dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai AWS Solutions Architect?
Tidak diperlukan pengalaman sebelumnya. AWS Solutions Architect di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Kontrol Akses S3: Kebijakan Bucket dan ACL” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran AWS Solutions Architect ini?
Ya. Setiap pelajaran AWS Solutions Architect menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Bucket, Objek, dan Region
- Kontrol Akses S3: Kebijakan Bucket dan ACL
- Penerapan Versi, Penghapusan dengan MFA, dan Replikasi
- Kelas Penyimpanan dan Kebijakan Siklus Hidup