Contoh kebijakan bucket Amazon S3 - Amazon Simple Storage Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Contoh kebijakan bucket Amazon S3

Dengan kebijakan bucket Amazon S3, Anda dapat mengamankan akses ke objek di bucket, sehingga hanya pengguna dengan izin yang sesuai yang dapat mengaksesnya. Anda bahkan dapat mencegah pengguna yang diautentikasi tanpa izin yang sesuai untuk mengakses sumber daya Amazon S3 Anda.

Bagian ini menyajikan contoh kasus penggunaan umum untuk kebijakan bucket. Kebijakan sampel ini digunakan example-s3-bucket sebagai nilai sumber daya. Untuk menguji kebijakan ini, ganti user input placeholders dengan informasi Anda sendiri (seperti nama bucket Anda).

Untuk memberikan atau menolak izin ke satu set objek, Anda dapat menggunakan karakter wildcard (*) di Amazon Resource Names (ARN) dan nilai-nilai lainnya. Misalnya, Anda dapat mengontrol akses ke grup objek yang dimulai dengan awalan umum atau diakhiri dengan ekstensi tertentu, seperti.html.

Untuk informasi selengkapnya tentang bahasa kebijakan AWS Identity and Access Management (IAM), lihatKebijakan dan izin di Amazon S3.

catatan

Saat menguji izin dengan menggunakan konsol Amazon S3, Anda harus memberikan izin tambahan yang diperlukan konsol—s3:ListAllMyBuckets, s3:GetBucketLocation, dan. s3:ListBucket. Untuk panduan contoh yang memberikan izin kepada pengguna dan menguji izin tersebut dengan menggunakan konsol, lihat. Mengontrol akses ke bucket dengan kebijakan pengguna

Sumber daya tambahan untuk membuat kebijakan bucket meliputi:

Memberikan izin baca-saja kepada pengguna anonim publik

Anda dapat menggunakan setelan kebijakan untuk memberikan akses ke pengguna anonim publik yang berguna jika Anda mengonfigurasi bucket sebagai situs web statis. Ini mengharuskan Anda untuk menonaktifkan blokir akses publik untuk bucket Anda. Untuk informasi selengkapnya tentang cara melakukannya, dan kebijakan yang diperlukan, lihatMengatur izin untuk akses situs web. Untuk mempelajari cara menyiapkan kebijakan yang lebih ketat untuk tujuan yang sama, lihat Bagaimana cara memberikan akses baca publik ke beberapa objek di bucket Amazon S3 saya? di pusat AWS pengetahuan.

Secara default, Amazon S3 memblokir akses publik ke akun dan bucket Anda. Jika Anda ingin menggunakan bucket untuk menghosting situs web statis, Anda dapat menggunakan langkah-langkah ini untuk mengedit pengaturan blokir akses publik Anda.

Awas

Sebelum Anda menyelesaikan langkah ini, tinjau Melakukan blok akses publik ke penyimpanan Amazon S3 Anda untuk memastikan bahwa Anda telah memahami dan menerima risiko yang terkait dengan mengizinkan akses publik. Saat Anda mematikan pengaturan blokir akses publik untuk membuat bucket Anda menjadi publik, siapa pun di internet dapat mengakses bucket Anda. Kami sarankan agar Anda memblokir semua akses publik ke bucket Anda.

  1. Buka konsol Amazon S3 di https://console.aws.amazon.com/s3/.

  2. Pilih nama bucket yang telah Anda konfigurasikan sebagai situs web statis.

  3. Pilih Izin.

  4. Di bagian bawah Blokir akses publik (pengaturan bucket), pilih Edit.

  5. Kosongkan Blokir semua akses publik, lalu pilih Simpan perubahan.

    Awas

    Sebelum Anda menyelesaikan langkah ini, tinjau Melakukan blok akses publik ke penyimpanan Amazon S3 Anda untuk memastikan bahwa Anda telah memahami dan menerima risiko yang terkait dengan mengizinkan akses publik. Saat Anda mematikan pengaturan blokir akses publik untuk membuat bucket Anda menjadi publik, siapa pun di internet dapat mengakses bucket Anda. Kami sarankan agar Anda memblokir semua akses publik ke bucket Anda.

    Tangkapan layar yang menunjukkan Blokir pengaturan bucket akses publik.

    Amazon S3 menonaktifkan pengaturan Blokir Akses Publik untuk bucket Anda. Untuk membuat situs web publik statis, Anda mungkin harus mengedit pengaturan Blokir Akses Publik untuk akun Anda sebelum menambahkan kebijakan bucket. Jika pengaturan akun untuk Blokir Akses Publik saat ini diaktifkan, Anda akan melihat catatan di Blokir akses publik (pengaturan bucket).

Membutuhkan enkripsi

Membutuhkan SSE-KMS untuk semua objek yang ditulis ke bucket

Contoh kebijakan berikut mengharuskan setiap objek yang ditulis ke bucket dienkripsi dengan enkripsi sisi server menggunakan AWS Key Management Service (AWS KMS) keys (SSE-KMS). Jika objek tidak dienkripsi dengan SSE-KMS, permintaan ditolak.

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMS", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "true" } } }] }

Memerlukan SSE-KMS dengan spesifik AWS KMS key untuk semua objek yang ditulis ke bucket

Contoh kebijakan berikut menyangkal objek apa pun ditulis ke bucket jika tidak dienkripsi dengan SSE-KMS dengan menggunakan ID kunci KMS tertentu. Bahkan jika objek dienkripsi dengan SSE-KMS dengan menggunakan header per permintaan atau enkripsi default bucket, objek tidak dapat ditulis ke bucket jika belum dienkripsi dengan kunci KMS yang ditentukan. Pastikan untuk mengganti ARN kunci KMS yang digunakan dalam contoh ini dengan ARN kunci KMS Anda sendiri.

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "ArnNotEqualsIfExists": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-2:111122223333:key/01234567-89ab-cdef-0123-456789abcdef" } } }] }

Mengelola bucket menggunakan ACL terekam

memberikan izin ke beberapa akun untuk mengunggah objek atau mengatur ACL objek untuk akses publik

Contoh kebijakan berikut memberikan s3:PutObjectAcl izin s3:PutObject dan ke beberapa. Akun AWS Selain itu, kebijakan contoh mengharuskan setiap permintaan untuk operasi ini harus menyertakan daftar kontrol akses public-read kaleng (ACL). Untuk informasi selengkapnya, lihat Tindakan kebijakan untuk Amazon S3 dan Kunci kondisi kebijakan untuk Amazon S3.

Awas

ACL public-read terekam memungkinkan siapa pun di dunia untuk melihat objek di bucket Anda. Berhati-hatilah saat memberikan akses anonim ke bucket Amazon S3 Anda atau menonaktifkan pengaturan blokir akses publik. Saat Anda memberikan akses anonim, siapa pun di dunia dapat mengakses bucket Anda. Kami menyarankan Anda untuk tidak pernah memberikan akses anonim ke bucket Amazon S3 Anda kecuali jika Anda secara kustom memerlukannya, seperti hosting situs web statis. Jika Anda ingin mengaktifkan blokir pengaturan akses publik untuk hosting situs web statis, lihat Tutorial: Mengonfigurasi situs web statis di Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPublicReadCannedAcl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:root" ] }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": [ "public-read" ] } } } ] }

Berikan izin lintas akun untuk unggah objek sekaligus memastikan bahwa pemilik bucket memiliki kendali penuh

Contoh berikut menunjukkan cara mengizinkan orang lain Akun AWS mengunggah objek ke bucket sambil memastikan bahwa Anda memiliki kendali penuh atas objek yang diunggah. Kebijakan ini memberikan kemampuan spesifik Akun AWS (111122223333) untuk mengunggah objek hanya jika akun tersebut menyertakan ACL yang bucket-owner-full-control dikalengkan saat diunggah. StringEqualsKondisi dalam kebijakan tersebut menyebutkan kunci s3:x-amz-acl kondisi untuk mengekspresikan persyaratan ACL terekam. Untuk informasi selengkapnya, lihat Kunci kondisi kebijakan untuk Amazon S3.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"111122223333"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

Mengelola akses objek dengan penandaan objek

Mengizinkan pengguna untuk membaca objek yang memiliki kunci dan nilai tag spesifik

Kebijakan izin berikut membatasi pengguna agar hanya membaca objek yang memiliki kunci dan nilai tag environment: production. Kebijakan ini menggunakan kunci kondisi s3:ExistingObjectTag untuk menentukan kunci tag dan nilai.

{ "Version":"2012-10-17", "Statement":[ { "Principal":{ "AWS":"arn:aws:iam::111122223333:role/JohnDoe" }, "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringEquals":{ "s3:ExistingObjectTag/environment":"production" } } } ] }

Batasi kunci tag objek mana yang dapat ditambahkan pengguna

Kebijakan contoh berikut memberikan izin pengguna untuk melakukan s3:PutObjectTagging tindakan, yang memungkinkan pengguna menambahkan tag ke objek yang sudah ada. Kondisi ini menggunakan kunci kondisi s3:RequestObjectTagKeys untuk menentukan kunci tag yang diizinkan, seperti Owner atau CreationDate. Untuk informasi selengkapnya, lihat Membuat kondisi yang menguji beberapa nilai kunci dalam Panduan Pengguna IAM.

Kebijakan ini memastikan agar setiap kunci tag yang ditentukan dalam permintaan adalah kunci tag yang diotorisasi. Kualifikasi ForAnyValue dalam kondisi tersebut memastikan bahwa setidaknya ada satu kunci yang ditentukan dalam permintaan.

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:role/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

Memerlukan kunci dan nilai tag spesifik saat mengizinkan pengguna untuk menambahkan tag objek

Kebijakan contoh berikut memberikan izin pengguna untuk melakukan s3:PutObjectTagging tindakan, yang memungkinkan pengguna menambahkan tag ke objek yang sudah ada. Kondisi ini mengharuskan pengguna untuk menyertakan kunci tag tertentu (seperti Project) dengan set nilai ke X.

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X" } } } ] }

Mengizinkan pengguna untuk hanya menambahkan objek dengan kunci dan nilai tag objek tertentu

Kebijakan contoh berikut memberikan izin pengguna untuk melakukan s3:PutObject tindakan, sehingga pengguna dapat menambahkan tag ke objek yang sudah ada. Namun, Condition pernyataan membatasi kunci tag dan nilai yang diizinkan pada objek yang diunggah. Dalam contoh ini, pengguna hanya dapat menambahkan objek yang memiliki kunci tag tertentu (Department) dengan nilai yang disetel Finance ke bucket.

{ "Version": "2012-10-17", "Statement": [{ "Principal":{ "AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Department": "Finance" } } }] }

Mengelola akses objek dengan menggunakan kunci kondisi global

Kunci kondisi global adalah kunci konteks kondisi dengan aws awalan. Layanan AWS dapat mendukung kunci kondisi global atau kunci khusus layanan yang menyertakan awalan layanan. Anda dapat menggunakan Condition elemen kebijakan JSON untuk membandingkan kunci dalam permintaan dengan nilai kunci yang Anda tentukan dalam kebijakan Anda.

Batasi akses hanya ke pengiriman log akses server Amazon S3

Dalam contoh kebijakan bucket berikut, kunci kondisi aws:SourceArnglobal digunakan untuk membandingkan Amazon Resource Name (ARN) sumber daya, membuat service-to-service permintaan dengan ARN yang ditentukan dalam kebijakan. Kunci kondisi aws:SourceArn global digunakan untuk mencegah layanan Amazon S3 digunakan sebagai wakil yang bingung selama transaksi antar layanan. Hanya layanan Amazon S3 yang diizinkan untuk menambahkan objek ke bucket Amazon S3.

Contoh kebijakan bucket ini hanya memberikan s3:PutObject izin kepada pengguna utama layanan logging (logging.s3.amazonaws.com).

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjectS3ServerAccessLogsPolicy", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111111111111" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::EXAMPLE-SOURCE-BUCKET" } } }, { "Sid": "RestrictToS3ServerAccessLogs", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs/*", "Condition": { "ForAllValues:StringNotEquals": { "aws:PrincipalServiceNamesList": "logging.s3.amazonaws.com" } } } ] }

Izinkan akses hanya ke organisasi Anda

Jika Anda ingin meminta semua kepala sekolah IAM yang mengakses sumber daya berasal dari organisasi Anda (termasuk akun AWS Organizations manajemen), Anda dapat menggunakan kunci kondisi global. Akun AWS aws:PrincipalOrgID

Untuk memberikan atau membatasi jenis akses ini, tentukan aws:PrincipalOrgID kondisi dan tetapkan nilainya ke ID organisasi Anda dalam kebijakan bucket. ID organisasi digunakan untuk mengontrol akses ke bucket. Saat Anda menggunakan aws:PrincipalOrgID kondisi ini, izin dari kebijakan bucket juga diterapkan ke semua akun baru yang ditambahkan ke organisasi.

Berikut adalah contoh kebijakan bucket berbasis sumber daya yang dapat Anda gunakan untuk memberikan pengguna utama IAM tertentu di organisasi Anda akses langsung ke bucket Anda. Dengan menambahkan kunci kondisi aws:PrincipalOrgID global ke kebijakan bucket Anda, pengguna utama sekarang harus berada di organisasi Anda untuk mendapatkan akses ke sumber daya. Bahkan jika Anda secara tidak sengaja menentukan akun yang salah saat memberikan akses, kunci kondisi aws:PrincipalOrgID global bertindak sebagai perlindungan tambahan. Ketika kunci global ini digunakan dalam kebijakan, ini mencegah semua pengguna utama dari luar organisasi tertentu mengakses bucket S3. Hanya pengguna utama dari akun di organisasi yang terdaftar yang dapat memperoleh akses ke sumber daya.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowGetObject", "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": ["o-aa111bb222"] } } }] }

Mengelola akses berdasarkan alamat IP tertentu

Membatasi akses ke suatu Wilayah tertentu

Contoh berikut menolak semua pengguna melakukan operasi Amazon S3 pada objek dalam bucket tertentu kecuali permintaan tersebut berasal dari rentang alamat IP yang ditentukan.

catatan

Saat membatasi akses ke alamat IP tertentu, pastikan Anda juga menentukan titik akhir VPC, alamat IP sumber VPC, atau alamat IP eksternal yang dapat mengakses bucket S3. Jika tidak, Anda mungkin kehilangan akses ke bucket jika kebijakan Anda menolak semua pengguna melakukan operasi S3 apa pun pada objek di bucket Anda tanpa izin yang tepat.

ConditionPernyataan kebijakan ini mengidentifikasi 192.0.2.0/24sebagai rentang alamat IP Protokol Internet versi 4 (IPv4) yang diizinkan.

ConditionBlok menggunakan NotIpAddress kondisi dan kunci aws:SourceIp kondisi, yang merupakan kunci kondisi AWS lebar. Kunci kondisi aws:SourceIp hanya dapat digunakan untuk rentang alamat IP publik. Untuk informasi lebih lanjut tentang kunci kondisi ini, lihat Kunci kondisi kebijakan untuk Amazon S3. Nilai aws:SourceIp IPv4 menggunakan notasi CIDR standar. Untuk informasi lebih lanjut, lihat Referensi Elemen Kebijakan IAM JSON dalam Panduan Pengguna IAM.

Awas

Sebelum menggunakan kebijakan ini, ganti rentang alamat IP 192.0.2.0/24 dalam contoh ini dengan nilai yang sesuai untuk kasus penggunaan Anda. Jika tidak, Anda akan kehilangan kemampuan untuk mengakses bucket Anda.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "192.0.2.0/24" } } } ] }

Izinkan alamat IPv4 dan IPv6

Saat Anda mulai menggunakan alamat IPv6, kami rekomendasikan agar Anda memperbarui semua kebijakan organisasi dengan rentang alamat IPv6 Anda selain dari rentang alamat IPv4 Anda yang telah ada. Melakukan hal ini akan membantu memastikan bahwa kebijakan terus berfungsi saat Anda melakukan transisi ke IPv6.

Contoh kebijakan bucket berikut menunjukkan cara menggabungkan rentang alamat IPv4 dan IPv6 untuk mencakup semua alamat IP yang valid dalam organisasi Anda. Kebijakan contoh memungkinkan akses ke alamat IP contoh 192.0.2.1dan 2001:DB8:1234:5678::1dan menolak akses ke alamat 203.0.113.1dan 2001:DB8:1234:5678:ABCD::1.

Kunci kondisi aws:SourceIp hanya dapat digunakan untuk rentang alamat IP publik. Nilai IPv6 untuk aws:SourceIp harus dalam format standar CIDR. Untuk IPv6, kami support dengan menggunakan :: untuk mewakili rentang 0s (misalnya, 2001:DB8:1234:5678::/64). Untuk informasi lebih lanjut, lihat Operator Syarat Alamat IP dalam Panduan Pengguna IAM.

Awas

Ganti rentang alamat IP dalam contoh ini dengan nilai yang sesuai untuk kasus penggunaan Anda sebelum menggunakan kebijakan ini. Jika tidak, Anda mungkin kehilangan kemampuan untuk mengakses bucket Anda.

{ "Id": "PolicyId2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIPmix", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

Mengelola akses sesuai permintaan HTTP atau HTTPS

Batasi Akses Hanya ke Permintaan HTTPS

Jika Anda ingin mencegah penyerang potensial memanipulasi lalu lintas jaringan, Anda dapat menggunakan HTTPS (TLS) untuk hanya mengizinkan koneksi terenkripsi sambil membatasi permintaan HTTP mengakses bucket Anda. Untuk menentukan apakah permintaan tersebut HTTP atau HTTPS, gunakan kunci kondisi aws:SecureTransportglobal dalam kebijakan bucket S3 Anda. Kunci aws:SecureTransport kondisi memeriksa apakah permintaan dikirim dengan menggunakan HTTP.

Jika permintaan kembalitrue, maka permintaan dikirim melalui HTTPS. Jika permintaan kembalifalse, maka permintaan dikirim melalui HTTP. Anda kemudian dapat mengizinkan atau menolak akses ke bucket Anda berdasarkan skema permintaan yang diinginkan.

Dalam contoh berikut, kebijakan bucket secara eksplisit menolak permintaan HTTP.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" }] }

Membatasi akses ke suatu Wilayah tertentu

Misalkan Anda memiliki situs web dengan nama domain www.example.com atau example.com dengan tautan ke foto dan video yang disimpan di bucket Anda bernama example-s3-bucket. Secara default, semua sumber daya Amazon S3 bersifat pribadi, jadi hanya Akun AWS yang membuat sumber daya yang dapat mengaksesnya.

Untuk mengizinkan akses baca ke objek ini dari situs web Anda, Anda dapat menambahkan kebijakan bucket yang mengizinkan s3:GetObject izin dengan syarat GET permintaan harus berasal dari halaman web tertentu. Kebijakan berikut membatasi permintaan dengan menggunakan StringLike kondisi dengan kunci aws:Referer kondisi.

{ "Version":"2012-10-17", "Id":"HTTP referer policy example", "Statement":[ { "Sid":"Allow only GET requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::example-s3-bucket/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

Pastikan browser yang Anda gunakan menyertakan referer header HTTP dalam permintaan.

Awas

Sebaiknya Anda berhati-hati saat menggunakan tombol aws:Referer kondisi. Menyertakan nilai header perujuk HTTP yang diketahui publik sangat berbahaya. Pihak yang tidak berwenang dapat menggunakan browser yang diubah atau disesuaikan untuk menyediakan nilai aws:Referer yang mereka pilih. Oleh karena itu, jangan gunakan aws:Referer untuk mencegah pihak yang tidak berwenang membuat AWS permintaan langsung.

Kunci aws:Referer kondisi ditawarkan hanya untuk memungkinkan pelanggan melindungi konten digital mereka, seperti konten yang disimpan di Amazon S3, agar tidak dirujuk di situs pihak ketiga yang tidak sah. Untuk informasi lebih lanjut, lihat aws:Referer dalam Panduan Pengguna IAM.

Mengelola akses pengguna ke folder tertentu

memberikan pengguna akses ke folder tertentu

Misalkan Anda mencoba memberikan pengguna akses ke folder tertentu. Jika pengguna IAM dan bucket S3 milik yang sama Akun AWS, maka Anda dapat menggunakan kebijakan IAM untuk memberikan akses pengguna ke folder bucket tertentu. Dengan pendekatan ini, Anda tidak perlu memperbarui kebijakan bucket untuk memberikan akses. Anda dapat menambahkan kebijakan IAM ke peran IAM yang dapat dialihkan oleh beberapa pengguna.

Jika identitas IAM dan bucket S3 milik yang berbeda Akun AWS, Anda harus memberikan akses lintas akun baik dalam kebijakan IAM maupun kebijakan bucket. Untuk informasi selengkapnya tentang pemberian akses lintas akun, lihat Pemilik bucket yang memberikan izin bucket lintas akun.

Contoh kebijakan bucket berikut memberikan akses konsol JohnDoe penuh hanya ke foldernya (home/JohnDoe/). Dengan membuat home folder dan memberikan izin yang sesuai kepada pengguna, Anda dapat meminta beberapa pengguna berbagi satu bucket. Kebijakan ini terdiri dari tiga Allow pernyataan:

  • AllowRootAndHomeListingOfCompanyBucket: Memungkinkan user (JohnDoe) untuk daftar objek di tingkat root DOC-EXAMPLE-BUCKET bucket dan di home folder. Pernyataan ini juga memungkinkan pengguna untuk mencari pada prefiks home/ dengan menggunakan konsol.

  • AllowListingOfUserFolder: Memungkinkan user (JohnDoe) untuk daftar semua objek dalam home/JohnDoe/ folder dan subfolder apapun.

  • AllowAllS3ActionsInUserFolder: Memungkinkan pengguna untuk melakukan semua tindakan Amazon S3 dengan memberikan Read, Write, dan izin Delete. Izin terbatas pada folder beranda pemilik bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringEquals": { "s3:prefix": ["", "home/", "home/JohnDoe"], "s3:delimiter": ["/"] } } }, { "Sid": "AllowListingOfUserFolder", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringLike": { "s3:prefix": ["home/JohnDoe/*"] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:*"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/JohnDoe/*"] } ] }

Mengelola akses log akses

Berikan akses ke Penyeimbang Beban Aplikasi untuk mengaktifkan log akses

Saat Anda mengaktifkan pencatatan akses untuk Penyeimbang Beban Aplikasi, Anda harus menentukan nama bucket S3 tempat penyeimbang beban akan menyimpan log. Bucket harus memiliki kebijakan terlampir yang memberikan izin Elastic Load Balancing untuk menulis ke bucket.

Pada contoh berikut, kebijakan bucket memberikan izin Elastic Load Balancing (ELB) untuk menulis log akses ke bucket:

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::elb-account-id:root" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::example-s3-bucket/prefix/AWSLogs/111122223333/*" } ] }
catatan

Pastikan untuk mengganti elb-account-id dengan Akun AWS ID untuk Elastic Load Balancing untuk Anda. Wilayah AWS Untuk daftar Wilayah Elastic Load Balancing, lihat Melampirkan kebijakan ke bucket Amazon S3 Anda di Panduan Pengguna Elastic Load Balancing.

Jika Anda Wilayah AWS tidak muncul di daftar Wilayah Elastic Load Balancing yang didukung, gunakan kebijakan berikut, yang memberikan izin ke layanan pengiriman log yang ditentukan.

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::example-s3-bucket/prefix/AWSLogs/111122223333/*" } ] }

Kemudian, pastikan untuk mengonfigurasi log akses Elastic Load Balancing Anda dengan mengaktifkannya. Anda dapat memverifikasi izin bucket dengan membuat file pengujian.

Mengelola akses ke Amazon CloudFront OAI

Berikan izin ke Amazon CloudFront OAI

Contoh kebijakan bucket berikut memberikan izin identitas akses CloudFront asal (OAI) untuk mendapatkan (membaca) semua objek di bucket S3 Anda. Anda dapat menggunakan CloudFront OAI untuk memungkinkan pengguna mengakses objek di bucket Anda CloudFront tetapi tidak secara langsung melalui Amazon S3. Untuk informasi selengkapnya, lihat Membatasi akses ke konten Amazon S3 menggunakan Identitas Akses Asal di Panduan Pengembang CloudFront Amazon.

Kebijakan berikut menggunakan ID OAI sebagai Principal. Untuk informasi selengkapnya tentang menggunakan kebijakan bucket S3 guna memberikan akses ke CloudFront OAI, lihat Memigrasi dari identitas akses asal (OAI) ke kontrol akses asal (OAC) di Panduan Pengembang Amazon. CloudFront

Untuk menggunakan contoh ini:

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::example-s3-bucket/*" } ] }

Mengelola akses untuk Lensa Penyimpanan Amazon S3

Berikan Izin untuk Lensa Penyimpanan Amazon S3

Lensa Penyimpanan S3 menggabungkan metrik Anda dan menampilkan informasi di bagian Snapshot akun di halaman Bucket konsol Amazon S3. Lensa Penyimpanan S3 juga menyediakan dasbor interaktif yang dapat Anda gunakan untuk memvisualisasikan wawasan dan tren, menandai outlier, serta menerima rekomendasi untuk mengoptimalkan biaya penyimpanan dan menerapkan praktik terbaik perlindungan data. Dasbor Anda memiliki opsi perincian untuk menghasilkan dan memvisualisasikan wawasan di tingkat organisasi, akun, Wilayah AWS, kelas penyimpanan, bucket, prefiks, atau grup Lensa Penyimpanan. Anda juga dapat mengirimkan ekspor metrik harian dalam format CSV atau Parquet ke bucket S3.

Lensa Penyimpanan S3 dapat mengekspor metrik penggunaan penyimpanan gabungan Anda ke bucket Amazon S3 untuk analisis lebih lanjut. Bucket tempat Lensa Penyimpanan S3 menempatkan ekspor metrik nya dikenal sebagai bucket tujuan. Saat mengatur ekspor metrik Lensa Penyimpanan S3, Anda harus memiliki kebijakan bucket untuk bucket tujuan. Untuk informasi selengkapnya, lihat Menilai aktivitas penyimpanan dan penggunaan Anda dengan Amazon S3 Storage Lens.

Contoh kebijakan bucket berikut memberikan kepada Amazon S3 izin untuk tulis objek PUT (permintaan) ke bucket tujuan. Anda menggunakan kebijakan bucket seperti ini pada bucket tujuan saat membuat pengaturan ekspor metrik Lensa Penyimpanan S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": "storage-lens.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/111122223333/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:s3:region-code:111122223333:storage-lens/storage-lens-dashboard-configuration-id" } } } ] }

Saat Anda menyiapkan ekspor metrik tingkat organisasi Lensa Penyimpanan S3, gunakan modifikasi berikut pada pernyataan Resource kebijakan bucket sebelumnya.

"Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/your-organization-id/*",

Mengelola izin untuk laporan Inventaris S3, S3 analytics, dan Inventaris S3

Berikan izin untuk Inventaris S3 dan analitik S3

S3 Inventaris membuat daftar objek dalam bucket, dan ekspor Analisis Kelas Penyimpanan analitik S3 membuat file output dari data yang digunakan dalam analisis. Bucket tempat inventaris mencantumkan objek disebut bucket sumber. Bucket tempat file inventaris atau file ekspor analitik ditulis disebut bucket tujuan. Saat membuat inventaris atau ekspor analitik, Anda harus membuat kebijakan bucket untuk bucket tujuan. Untuk informasi selengkapnya, lihat Inventaris Amazon S3 dan Analitik Amazon S3–Analisis Kelas Penyimpanan.

Contoh kebijakan bucket berikut memberikan kepada Amazon S3 izin untuk menulis objek PUT (permintaan) dari akun untuk bucket sumber ke bucket tujuan. Anda menggunakan kebijakan bucket seperti ini pada bucket tujuan saat menyiapkan S3 Inventory, dan ekspor analitik S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InventoryAndAnalyticsExamplePolicy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" }, "StringEquals": { "aws:SourceAccount": "111122223333", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Kontrol pembuatan konfigurasi laporan Inventaris S3

Inventaris Amazon S3membuat daftar objek dalam bucket S3 dan metadata untuk setiap objek. s3:PutInventoryConfigurationIzin ini memungkinkan pengguna untuk membuat konfigurasi inventaris yang mencakup semua bidang metadata objek yang tersedia secara default dan menentukan bucket tujuan untuk menyimpan inventaris. Pengguna dengan akses baca ke objek di bucket tujuan dapat mengakses semua bidang metadata objek yang tersedia dalam laporan inventaris. Untuk informasi selengkapnya tentang bidang metadata yang tersedia di Inventaris S3, lihat. Daftar Inventaris Amazon S3

Untuk membatasi pengguna mengonfigurasi laporan Inventaris S3, hapus s3:PutInventoryConfiguration izin dari pengguna.

Beberapa bidang metadata objek dalam konfigurasi laporan Inventaris S3 bersifat opsional, artinya tersedia secara default tetapi dapat dibatasi saat Anda memberikan izin kepada pengguna. s3:PutInventoryConfiguration Anda dapat mengontrol apakah pengguna dapat menyertakan bidang metadata opsional ini dalam laporan mereka dengan menggunakan kunci s3:InventoryAccessibleOptionalFields kondisi. Untuk daftar bidang metadata opsional yang tersedia di S3 Inventory, lihat OptionalFieldsdi Referensi API Amazon Simple Storage Service.

Untuk memberikan izin kepada pengguna untuk membuat konfigurasi inventaris dengan bidang metadata opsional tertentu, gunakan kunci s3:InventoryAccessibleOptionalFields kondisi untuk menyempurnakan kondisi dalam kebijakan bucket Anda.

Contoh kebijakan berikut memberikan izin kepada pengguna (Ana) untuk membuat konfigurasi inventaris secara kondisional. ForAllValues:StringEqualsKondisi dalam kebijakan menggunakan kunci s3:InventoryAccessibleOptionalFields kondisi untuk menentukan dua bidang metadata opsional yang diizinkan, yaitu Size dan. StorageClass Jadi, saat Ana membuat konfigurasi inventaris, satu-satunya bidang metadata opsional yang dapat dia sertakan adalah Size dan. StorageClass

{ "Id": "InventoryConfigPolicy", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreationConditionally", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAllValues:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "Size", "StorageClass" ] } } } ] }

Untuk membatasi pengguna mengonfigurasi laporan Inventaris S3 yang menyertakan bidang metadata opsional tertentu, tambahkan Deny pernyataan eksplisit ke kebijakan bucket untuk bucket sumber. Contoh kebijakan bucket berikut menyangkal pengguna Ana membuat konfigurasi inventaris di bucket sumber DOC-EXAMPLE-SOURCE-BUCKET yang menyertakan bidang opsional ObjectAccessControlList atau ObjectOwner metadata. Pengguna masih Ana dapat membuat konfigurasi inventaris dengan bidang metadata opsional lainnya.

{ "Id": "InventoryConfigSomeFields", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", }, { "Sid": "DenyCertainInventoryFieldCreation", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAnyValue:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "ObjectOwner", "ObjectAccessControlList" ] } } } ] }
catatan

Penggunaan kunci s3:InventoryAccessibleOptionalFields kondisi dalam kebijakan bucket tidak memengaruhi pengiriman laporan inventaris berdasarkan konfigurasi inventaris yang ada.

penting

Kami menyarankan Anda menggunakan ForAllValues dengan Allow efek atau ForAnyValue Deny efek, seperti yang ditunjukkan pada contoh sebelumnya.

Jangan gunakan ForAllValues dengan Deny efek atau ForAnyValue Allow efek, karena kombinasi ini bisa terlalu membatasi dan memblokir penghapusan konfigurasi inventaris.

Untuk mempelajari selengkapnya tentang operator set ForAllValues dan ForAnyValue kondisi, lihat Kunci konteks Multivalued di Panduan Pengguna IAM.

Membutuhkan MFA

Amazon S3 mendukung akses API yang dilindungi MFA, sebuah fitur yang dapat memberlakukan autentikasi multi-faktor (MFA) untuk mengakses sumber daya Amazon S3. Otentikasi multi-faktor memberikan tingkat keamanan ekstra yang dapat Anda terapkan ke lingkungan Anda AWS . MFA adalah fitur keamanan yang mengharuskan pengguna membuktikan kepemilikan fisik perangkat MFA dengan menyediakan kode MFA yang valid. Untuk informasi selengkapnya, lihat Autentikasi Multi-Faktor AWS. Anda dapat mewajibkan MFA untuk setiap permintaan akses sumber daya Amazon S3.

Untuk memberlakukan persyaratan MFA, gunakan kunci kondisi aws:MultiFactorAuthAge dalam kebijakan bucket. Pengguna IAM dapat mengakses sumber daya Amazon S3 dengan menggunakan kredensyal sementara yang dikeluarkan oleh (). AWS Security Token Service AWS STS Anda memberikan kode MFA pada saat permintaan AWS STS .

Saat Amazon S3 menerima permintaan dengan autentikasi multi-faktor, kunci aws:MultiFactorAuthAge kondisi memberikan nilai numerik yang menunjukkan berapa lama (dalam detik) kredensial sementara dibuat. Jika kredensial sementara yang diberikan dalam permintaan tidak dibuat menggunakan perangkat MFA, maka nilai kunci ini akan kosong (tidak ada). Dalam kebijakan bucket, Anda dapat menambahkan sebuah kondisi untuk memeriksa nilai ini, seperti yang ditunjukkan dalam contoh berikut.

Contoh kebijakan ini menolak operasi Amazon S3 pada /taxdocumentsfolder dalam bucket jika permintaan tidak example-s3-bucket diautentikasi dengan menggunakan MFA. Untuk pelajari selengkapnya tentang otentikasi multifaktor (MFA), lihat Menggunakan Autentikasi Multi-Faktor (MFA) di AWS dalam Panduan Pengguna IAM.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::example-s3-bucket/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

NullKondisi di Condition blok mengevaluasi true apakah nilai kunci aws:MultiFactorAuthAge kondisi adalah nol, yang mana hal ini menunjukkan bahwa kredensial keamanan sementara dalam permintaan dibuat tanpa perangkat MFA.

Kebijakan bucket berikut merupakan perpanjangan dari kebijakan bucket sebelumnya. Kebijakan bucket berikut mencakup dua pernyataan kebijakan. Satu pernyataan memberikan izin s3:GetObject pada bucket (example-s3-bucket) kepada semua orang. Pernyataan lain membatasi lebih lanjut akses ke folder example-s3-bucket/taxdocuments yang ada dalam bucket dengan mewajibkan MFA.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::example-s3-bucket/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::example-s3-bucket/*" } ] }

Anda dapat menggunakan kondisi numerik secara opsional untuk membatasi durasi berlakunya aws:MultiFactorAuthAge kunci. Durasi yang Anda tentukan dengan aws:MultiFactorAuthAge kunci tidak bergantung pada usia pakai kredensial keamanan sementara yang digunakan untuk mengautentikasi permintaan.

Sebagai contoh, kebijakan bucket berikut, selain mewajibkan autentikasi MFA, juga memeriksa berapa lama lagi sesi sementara dibuat. Kebijakan tersebut menolak setiap operasi jika nilai kunci aws:MultiFactorAuthAge menunjukkan bahwa sesi sementara dibuat lebih dari satu jam yang lalu (3.600 detik).

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::example-s3-bucket/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::example-s3-bucket/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::example-s3-bucket/*" } ] }

Secara bawaan, pengguna tidak memiliki izin. Namun saat Anda membuat kebijakan, Anda mungkin memberikan izin kepada pengguna yang tidak ingin Anda berikan. Untuk menghindari celah izin tersebut, Anda dapat menulis kebijakan akses yang lebih ketat dengan menambahkan penolakan eksplisit.

Untuk secara eksplisit memblokir pengguna atau akun agar tidak menghapus objek, Anda harus menambahkan tindakan berikut ke kebijakan bucket:s3:DeleteObject,s3:DeleteObjectVersion, dan izin. s3:PutLifecycleConfiguration Ketiga tindakan tersebut diperlukan karena Anda dapat menghapus objek baik dengan memanggil DELETE Object API secara eksplisit atau dengan mengonfigurasi siklus hidupnya (lihat) Mengelola siklus hidup penyimpanan Anda sehingga Amazon S3 dapat menghapus objek saat masa pakainya berakhir.

Dalam contoh kebijakan berikut, Anda secara eksplisit menolak izin DELETE Object ke pengguna Dave. Penolakan eksplisit selalu menggantikan izin lain yang diberikan.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:GetObjectVersion", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::example-s3-bucket1", "arn:aws:s3:::example-s3-bucket1/*" ] }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": [ "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:PutLifecycleConfiguration" ], "Resource": [ "arn:aws:s3:::example-s3-bucket1", "arn:aws:s3:::example-s3-bucket1/*" ] } ] }