Contoh kebijakan bucket menggunakan tombol kondisi - 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 menggunakan tombol kondisi

Anda dapat menggunakan bahasa kebijakan akses untuk menentukan syarat-syarat saat memberikan izin. Anda dapat menggunakan Condition elemen opsional, atau Condition memblokir, untuk menentukan kondisi kapan kebijakan diberlakukan.

Untuk kebijakan yang menggunakan kunci syarat Amazon S3 untuk operasi objek dan bucket, lihat contoh berikut. Untuk informasi lebih lanjut tentang kunci syarat ini, lihat Kunci kondisi kebijakan untuk Amazon S3. Untuk daftar lengkap tindakan Amazon S3, kunci kondisi, dan sumber daya yang dapat Anda tentukan dalam kebijakan, lihat Tindakan, sumber daya, dan kunci kondisi untuk Amazon S3 di Referensi Otorisasi Layanan.

Untuk informasi selengkapnya tentang izin API operasi S3 menurut jenis sumber daya S3, lihat. Izin yang diperlukan untuk operasi Amazon API S3

Contoh: Kunci kondisi Amazon S3 untuk operasi objek

Contoh berikut menunjukkan bagaimana Anda dapat menggunakan kunci kondisi khusus Amazon S3 untuk operasi objek. Untuk daftar lengkap tindakan Amazon S3, kunci kondisi, dan sumber daya yang dapat Anda tentukan dalam kebijakan, lihat Tindakan, sumber daya, dan kunci kondisi untuk Amazon S3 di Referensi Otorisasi Layanan.

Untuk informasi selengkapnya tentang izin API operasi S3 menurut jenis sumber daya S3, lihat. Izin yang diperlukan untuk operasi Amazon API S3

Beberapa contoh kebijakan menunjukkan bagaimana Anda dapat menggunakan kunci kondisi dengan operasi PUTObject. PUTOperasi objek memungkinkan daftar kontrol akses (ACL) —header spesifik yang dapat Anda gunakan untuk memberikan izin ACL berbasis. Dengan menggunakan tombol kondisi ini, Anda dapat mengatur kondisi untuk memerlukan izin akses tertentu saat pengguna mengunggah objek. Anda juga dapat memberikan izin ACL berbasis —dengan operasi. PutObjectAcl Untuk informasi selengkapnya, lihat PutObjectAcldi Referensi Layanan API Penyimpanan Sederhana Amazon S3 Amazon. Untuk informasi lebih lanjut tentangACLs, lihatDaftar kontrol akses (ACL) ikhtisar.

Contoh 1: Memberikan s3:PutObject izin yang mengharuskan objek disimpan menggunakan enkripsi sisi server

Misalkan ketika Akun A memiliki bucket. Administrator akun ingin memberi Jane, pengguna di Akun A, izin untuk mengunggah objek dengan syarat Jane selalu meminta enkripsi sisi server dengan kunci terkelola Amazon S3 (-S3). SSE Administrator Akun A dapat menentukan persyaratan ini dengan menggunakan kunci s3:x-amz-server-side-encryption kondisi seperti yang ditunjukkan. Pasangan kunci-nilai di Condition blok berikut menentukan kunci s3:x-amz-server-side-encryption kondisi dan SSE -S3 (AES256) sebagai jenis enkripsi:

"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}

Saat menguji izin ini dengan menggunakan AWS CLI, Anda harus menambahkan enkripsi yang diperlukan dengan menggunakan --server-side-encryption parameter, seperti yang ditunjukkan pada contoh berikut. Untuk menggunakan contoh perintah ini, ganti user input placeholders dengan informasi Anda sendiri.

aws s3api put-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountAadmin

Contoh 2: Memberikan s3:PutObject izin untuk menyalin objek dengan batasan pada sumber salinan

Dalam permintaan PUT objek, ketika Anda menentukan objek sumber, permintaan adalah operasi salinan (lihat CopyObject). Dengan demikian, pemilik bucket dapat memberikan izin kepada pengguna untuk menyalin objek dengan batasan pada sumbernya, misalnya:

  • Izinkan menyalin objek hanya dari bucket sumber yang ditentukan (misalnya,amzn-s3-demo-source-bucket).

  • Izinkan menyalin objek dari bucket sumber yang ditentukan dan hanya objek yang awalan nama kuncinya dimulai dengan awalan tertentu, seperti publik/ (misalnya,amzn-s3-demo-source-bucket/public/*).

  • Izinkan menyalin hanya objek tertentu dari bucket sumber (misalnya,amzn-s3-demo-source-bucket/example.jpg).

Kebijakan bucket berikut memberikan s3:PutObject izin kepada pengguna (Dave). Kebijakan ini memungkinkan dia untuk menyalin objek hanya dengan syarat permintaan menyertakan s3:x-amz-copy-source header dan bahwa nilai header menentukan awalan nama /amzn-s3-demo-source-bucket/public/* kunci. Untuk menggunakan kebijakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/*" } } } ] }
Uji kebijakan dengan AWS CLI

Anda dapat menguji izin menggunakan AWS CLI copy-object perintah. Anda menentukan sumber dengan menambahkan parameter --copy-source; prefiks nama kunci harus cocok dengan prefiks yang diperbolehkan dalam kebijakan. Anda perlu memberikan kredensial Dave kepada pengguna dengan menggunakan parameter --profile. Untuk informasi selengkapnya tentang pengaturan AWS CLI, lihat Mengembangkan dengan Amazon S3 menggunakan Referensi Amazon API S3 AWS CLI di dalam.

aws s3api copy-object --bucket amzn-s3-demo-source-bucket --key HappyFace.jpg --copy-source amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg --profile AccountADave
Berikan izin untuk menyalin objek tertentu

Kebijakan sebelumnya menggunakan kondisi StringNotLike. Untuk memberikan izin untuk menyalin hanya objek tertentu, Anda harus mengubah kondisi dari StringNotLike ke StringNotEquals dan kemudian menentukan kunci objek yang tepat, seperti yang ditunjukkan pada contoh berikut. Untuk menggunakan contoh perintah ini, ganti user input placeholders dengan informasi Anda sendiri.

"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg" } }

Contoh 3: Memberikan akses ke versi tertentu dari suatu objek

Misalkan Akun A memiliki bucket berkemampuan versi. Bucket tersebut memiliki beberapa versi objek HappyFace.jpg. Administrator Akun A sekarang ingin memberikan Dave izin kepada pengguna untuk mendapatkan hanya versi objek tertentu. Administrator akun dapat melakukannya dengan memberikan s3:GetObjectVersion izin kepada pengguna Dave secara kondisional, seperti yang ditunjukkan pada contoh berikut. Pasangan nilai kunci dalam pemblokiran Condition menentukan kunci kondisi s3:VersionId. Dalam hal ini, untuk mengambil objek dari bucket berkemampuan versi tertentu, Dave perlu mengetahui ID versi objek yang tepat. Untuk menggunakan kebijakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

Untuk informasi selengkapnya, silakan lihat GetObjectdi APIReferensi Layanan Penyimpanan Sederhana Amazon.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e" } } } ] }
Uji kebijakan dengan AWS CLI

Anda dapat menguji izin dalam kebijakan ini dengan menggunakan AWS CLI get-object perintah dengan --version-id parameter untuk mengidentifikasi versi objek tertentu yang akan diambil. Perintah mengambil versi objek yang ditentukan dan menyimpannya ke OutputFile.jpg file.

aws s3api get-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave

Contoh 4: Memberikan izin berdasarkan tag objek

Untuk contoh cara menggunakan kunci kondisi penandaan objek dengan operasi Amazon S3, lihat. Kebijakan pemberian tag dan kontrol akses

Contoh 5: Membatasi akses oleh Akun AWS ID pemilik bucket

Anda dapat menggunakan kunci aws:ResourceAccount atau s3:ResourceAccount kondisi untuk menulis IAM atau kebijakan titik akhir cloud pribadi virtual (VPC) yang membatasi akses pengguna, peran, atau aplikasi ke bucket Amazon S3 yang dimiliki oleh ID tertentu. Akun AWS Anda dapat menggunakan kunci kondisi ini untuk membatasi klien di dalam Anda VPC mengakses bucket yang tidak Anda miliki.

Namun, ketahuilah bahwa beberapa AWS layanan bergantung pada akses ke bucket yang AWS dikelola. Oleh karena itu, menggunakan aws:ResourceAccount atau s3:ResourceAccount kunci dalam IAM kebijakan Anda juga dapat memengaruhi akses ke sumber daya ini. Untuk informasi selengkapnya, lihat sumber daya berikut:

Untuk informasi selengkapnya tentang kunci s3:ResourceAccount kondisi aws:ResourceAccount dan contoh yang menunjukkan cara menggunakannya, lihat Membatasi akses ke bucket Amazon S3 yang dimiliki oleh spesifik Akun AWS di Blog Penyimpanan.AWS

Contoh 6: Membutuhkan TLS versi minimum

Anda dapat menggunakan kunci s3:TlsVersion kondisi untuk menulisIAM, virtual private cloud endpoint (VPCE), atau kebijakan bucket yang membatasi akses pengguna atau aplikasi ke bucket Amazon S3 berdasarkan TLS versi yang digunakan oleh klien. Anda dapat menggunakan kunci kondisi ini untuk menulis kebijakan yang memerlukan TLS versi minimum.

Contoh kebijakan bucket berikut menolak PutObject permintaan klien yang memiliki TLS versi lebih awal dari 1.2, misalnya 1.1 atau 1.0. Untuk menggunakan kebijakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

Contoh kebijakan bucket berikut memungkinkan PutObject permintaan oleh klien yang memiliki TLS versi lebih lambat dari 1.1, misalnya, 1.2, 1.3, atau yang lebih baru:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

Contoh 7: Mengecualikan prinsipal tertentu dari pernyataan Deny

Kebijakan bucket berikut menolak s3:GetObject akses keamzn-s3-demo-bucket, kecuali ke kepala sekolah dengan nomor rekening 123456789012. Untuk menggunakan contoh kebijakan ini, ganti user input placeholders dengan informasi Anda sendiri.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "123456789012" ] } } } ] }

Contoh: Kunci kondisi Amazon S3 untuk operasi bucket

Contoh kebijakan berikut menunjukkan cara Anda dapat menggunakan kunci kondisi khusus Amazon S3 untuk operasi bucket.

Contoh 1: Memberikan s3:GetObject izin dengan syarat pada alamat IP

Anda dapat memberikan izin kepada pengguna yang diautentikasi untuk menggunakan s3:GetObject tindakan jika permintaan berasal dari rentang alamat IP tertentu (misalnya,192.0.2.*), kecuali alamat IP adalah salah satu yang ingin Anda kecualikan (misalnya,192.0.2.188). Di Condition blok, IpAddress dan NotIpAddress merupakan kondisi, dan setiap kondisi disediakan pasangan kunci-nilai untuk evaluasi. Kedua pasangan kunci-nilai dalam contoh ini menggunakan kunci aws:SourceIp AWS lebar. Untuk menggunakan kebijakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

catatan

Nilai IPAddress dan NotIpAddress kunci yang ditentukan dalam Condition blok menggunakan CIDR notasi, seperti yang dijelaskan dalam RFC 4632. Untuk informasi lebih lanjut, lihat http://www.rfc-editor. org/rfc/rfc4632.txt.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }

Anda juga dapat menggunakan kunci kondisi AWS-wide lainnya dalam kebijakan Amazon S3. Misalnya, Anda dapat menentukan kunci aws:SourceVpce dan aws:SourceVpc kondisi dalam kebijakan bucket untuk VPC titik akhir. Untuk contoh spesifik, lihatMengontrol akses dari VPC titik akhir dengan kebijakan bucket.

catatan

Untuk beberapa kunci kondisi AWS global, hanya jenis sumber daya tertentu yang didukung. Oleh karena itu, periksa apakah Amazon S3 mendukung kunci kondisi global dan jenis sumber daya yang ingin Anda gunakan, atau apakah Anda perlu menggunakan kunci kondisi khusus Amazon S3. Untuk daftar lengkap jenis sumber daya dan kunci kondisi yang didukung untuk Amazon S3, lihat Tindakan, sumber daya, dan kunci kondisi untuk Amazon S3 di Referensi Otorisasi Layanan.

Untuk informasi selengkapnya tentang izin API operasi S3 menurut jenis sumber daya S3, lihat. Izin yang diperlukan untuk operasi Amazon API S3

Contoh 2: Mendapatkan daftar objek di bucket dengan prefiks tertentu

Anda dapat menggunakan tombol s3:prefix kondisi untuk membatasi respons ListObjectsV2APIoperasi ke nama kunci dengan awalan tertentu. Jika Anda adalah pemilik bucket, Anda dapat menggunakan kunci kondisi ini untuk membatasi pengguna agar mencantumkan konten awalan tertentu di bucket. Kunci s3:prefix kondisi berguna jika objek dalam bucket diatur oleh awalan nama kunci.

Konsol Amazon S3 menggunakan prefiks nama kunci untuk menampilkan konsep folder. Hanya konsol yang mendukung konsep folder; Amazon S3 hanya API mendukung ember dan objek. Misalnya, jika Anda memiliki dua objek dengan nama kunci public/object1.jpg and public/object2.jpg, konsol menunjukkan objek di bawah publik folder. Di Amazon S3API, ini adalah objek dengan awalan, bukan objek dalam folder. Untuk informasi lebih lanjut tentang bagaimana menggunakan prefiks dan pembatas untuk memfilter izin akses, lihat Mengontrol akses ke bucket dengan kebijakan pengguna.

Dalam skenario berikut, pemilik bucket dan akun induk yang dimiliki pengguna adalah sama. Jadi pemilik bucket dapat menggunakan kebijakan bucket atau kebijakan pengguna untuk memberikan akses. Untuk informasi selengkapnya tentang kunci kondisi lain yang dapat Anda gunakan dengan ListObjectsV2 API operasi, lihat ListObjectsV2.

catatan

Jika bucket diaktifkan versi, untuk mencantumkan objek di bucket, Anda harus memberikan s3:ListBucketVersions izin dalam kebijakan berikut, bukan izin. s3:ListBucket s3:ListBucketVersionsIzin juga mendukung kunci s3:prefix kondisi.

Kebijakan pengguna

Kebijakan pengguna berikut memberikan s3:ListBucket izin (lihat ListObjectsV2) dengan Condition pernyataan yang mengharuskan pengguna untuk menentukan awalan dalam permintaan dengan nilai. projects Untuk menggunakan kebijakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }

ConditionPernyataan membatasi pengguna untuk mencantumkan hanya kunci objek yang memiliki projects awalan. DenyPernyataan eksplisit yang ditambahkan menyangkal pengguna dari mencantumkan kunci dengan awalan lain, apa pun izin lain yang mungkin dimiliki pengguna. Misalnya, pengguna dapat memperoleh izin untuk membuat daftar kunci objek tanpa batasan apa pun, baik melalui pembaruan pada kebijakan pengguna sebelumnya atau melalui kebijakan bucket. Karena Deny pernyataan eksplisit selalu mengesampingkan Allow pernyataan, jika pengguna mencoba membuat daftar kunci selain yang memiliki projects awalan, permintaan ditolak.

Kebijakan bucket

Jika Anda menambahkan Principal elemen ke kebijakan pengguna di atas, mengidentifikasi pengguna, Anda sekarang memiliki kebijakan bucket, seperti yang ditunjukkan pada contoh berikut. Untuk menggunakan kebijakan contoh ini, ganti user input placeholders dengan informasi Anda sendiri.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }
Uji kebijakan dengan AWS CLI

Anda dapat menguji kebijakan menggunakan list-object AWS CLI perintah berikut. Dalam perintah ini, Anda memberikan kredensial pengguna dengan menggunakan parameter --profile. Untuk informasi selengkapnya tentang pengaturan dan penggunaan AWS CLI, lihat Mengembangkan dengan Amazon S3 menggunakan Referensi Amazon API S3 AWS CLI di dalam.

aws s3api list-objects --bucket amzn-s3-demo-bucket --prefix projects --profile AccountA

Contoh 3: Mengatur jumlah kunci maksimum

Anda dapat menggunakan tombol s3:max-keys kondisi untuk mengatur jumlah maksimum kunci yang dapat dikembalikan oleh pemohon ListObjectsV2 atau ListObjectVersionspermintaan. Secara default, API operasi ini mengembalikan hingga 1.000 kunci. Untuk daftar operator kondisi numerik yang dapat Anda gunakan dengan s3:max-keys dan contoh yang menyertainya, lihat Operator Kondisi Numerik di Panduan Pengguna. IAM