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 operasi S3 API menurut jenis sumber daya S3, lihat. Izin yang diperlukan untuk operasi API Amazon 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 operasi S3 API menurut jenis sumber daya S3, lihat. Izin yang diperlukan untuk operasi API Amazon S3
Beberapa contoh kebijakan menunjukkan bagaimana Anda dapat menggunakan kunci kondisi operasi PUT Objek. Operasi PUT Objek memungkinkan header spesifik daftar kontrol akses (ACL) yang dapat Anda gunakan untuk memberikan izin berbasis ACL. Dengan menggunakan tombol kondisi ini, Anda dapat mengatur kondisi untuk memerlukan izin akses tertentu saat pengguna mengunggah objek. Anda juga dapat memberikan izin berbasis ACL dengan operasi tersebut. PutObjectAcl Untuk informasi lebih lanjut, lihat PutObjectAcl dalam Referensi API Layanan Penyimpanan Sederhana Amazon S3 Amazon. Untuk informasi lebih lanjut tentang ACLs, lihatGambaran umum daftar kontrol akses (ACL).
Topik
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 (SSE-S3). 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 perintah contoh ini, ganti
dengan informasi Anda sendiri. user input
placeholders
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyHappyFace.jpg
--bodyc:\HappyFace.jpg
--server-side-encryption "AES256
" --profileAccountAadmin
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). Oleh karena itu, pemilik bucket dapat memberikan izin kepada pengguna untuk menyalin objek dengan pembatasan pada sumber, 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
(misalnya,).public/
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 (
). Kebijakan ini memungkinkan dia untuk menyalin objek hanya dengan syarat permintaan menyertakan Dave
s3:x-amz-copy-source
header dan bahwa nilai header menentukan awalan nama /
kunci. Untuk menggunakan kebijakan contoh ini, ganti amzn-s3-demo-source-bucket
/public/*
dengan informasi Anda sendiri.user
input placeholders
{ "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:::/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::
amzn-s3-demo-source-bucket
123456789012
:user/Dave
" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
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 AWS CLI di Referensi API Amazon S3.
aws s3api copy-object --bucket
--key
amzn-s3-demo-source-bucket
HappyFace.jpg
--copy-source
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
--profileAccountADave
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 perintah contoh ini, ganti
dengan informasi Anda sendiri.user input
placeholders
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
" } }
Contoh 3: Memberikan akses ke versi objek tertentu
Misalkan Akun A memiliki bucket berkemampuan versi. Bucket tersebut memiliki beberapa versi objek
. Administrator Akun A sekarang ingin memberikan HappyFace.jpg
izin kepada pengguna untuk mendapatkan hanya versi objek tertentu. Administrator akun dapat melakukannya dengan memberikan Dave
s3:GetObjectVersion
izin kepada pengguna
secara kondisional, seperti yang ditunjukkan pada contoh berikut. Pasangan nilai kunci dalam pemblokiran Dave
Condition
menentukan kunci kondisi s3:VersionId
. Dalam hal ini, untuk mengambil objek dari bucket berkemampuan versi tertentu,
perlu mengetahui ID versi objek yang tepat. Untuk menggunakan kebijakan contoh ini, ganti Dave
dengan informasi Anda sendiri.user input
placeholders
Untuk informasi selengkapnya, lihat GetObject dalam Referensi API Amazon Simple Storage Service.
{ "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
file.OutputFile.jpg
aws s3api get-object --bucket
--key
amzn-s3-demo-bucket
HappyFace.jpg
OutputFile.jpg
--version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e
--profileAccountADave
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 kebijakan titik akhir IAM atau virtual private cloud (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 dalam VPC Anda agar tidak mengakses bucket yang tidak Anda miliki.
Namun, ketahuilah bahwa beberapa AWS layanan bergantung pada akses ke bucket yang AWS dikelola. Oleh karena itu, menggunakan kunci aws:ResourceAccount
atau s3:ResourceAccount
dalam kebijakan IAM Anda juga dapat memengaruhi akses ke sumber daya ini. Untuk informasi selengkapnya, lihat sumber daya berikut:
-
Batasi akses ke bucket dalam Akun AWS yang ditentukan dalam Panduan AWS PrivateLink
-
Batasi akses ke bucket yang digunakan Amazon ECR dalam Panduan Amazon ECR
-
Menyediakan akses yang diperlukan ke Systems Manager untuk bucket Amazon S3 AWS terkelola dalam Panduan AWS Systems Manager
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
Contoh 6: Membutuhkan versi TLS minimum
Anda dapat menggunakan tombol s3:TlsVersion
kondisi untuk menulis IAM, virtual private cloud endpoint (VPCE), atau kebijakan bucket yang membatasi akses pengguna atau aplikasi ke bucket Amazon S3 berdasarkan versi TLS yang digunakan oleh klien. Anda dapat menggunakan kunci syarat ini untuk tulis kebijakan yang memerlukan versi TLS minimum.
catatan
Ketika AWS layanan melakukan panggilan ke AWS layanan lain atas nama Anda (service-to-service panggilan), konteks otorisasi khusus jaringan tertentu dihapus, termasuks3:TlsVersion
,,, dan. aws:SecureTransport
aws:SourceIp
aws:VpcSourceIp
Jika kebijakan Anda menggunakan kunci kondisi ini dengan Deny
pernyataan, prinsip AWS layanan mungkin diblokir secara tidak sengaja. Untuk memungkinkan AWS layanan berfungsi dengan baik sambil mempertahankan persyaratan keamanan Anda, kecualikan prinsip layanan dari Deny
pernyataan Anda dengan menambahkan kunci aws:PrincipalIsAWSService
kondisi dengan nilai. false
Misalnya:
{ "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "Bool": { "aws:SecureTransport": "false", "aws:PrincipalIsAWSService": "false" } } }
Kebijakan ini menolak akses ke operasi S3 ketika HTTPS tidak aws:SecureTransport
digunakan (salah), tetapi hanya untuk prinsipal AWS non-layanan. Ini memastikan pembatasan bersyarat Anda berlaku untuk semua kepala sekolah kecuali kepala sekolah layanan. AWS
Contoh kebijakan bucket berikut menolak PutObject
permintaan klien yang memiliki versi TLS lebih awal dari 1.2, misalnya 1.1 atau 1.0. Untuk menggunakan kebijakan contoh ini, ganti
dengan informasi Anda sendiri.user input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }
amzn-s3-demo-bucket1
Contoh kebijakan bucket berikut memungkinkan PutObject
permintaan oleh klien yang memiliki versi TLS lebih lambat 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:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }
amzn-s3-demo-bucket1
Contoh 7: Mengecualikan prinsipal tertentu dari pernyataan Deny
Kebijakan bucket berikut menolak s3:GetObject
akses ke
, kecuali ke kepala sekolah dengan nomor rekening. amzn-s3-demo-bucket
Untuk menggunakan kebijakan contoh ini, ganti 123456789012
dengan informasi Anda sendiri.user input
placeholders
{ "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 8: Menegakkan klien untuk mengunggah objek secara kondisional berdasarkan nama kunci objek atau ETags
Dengan penulisan bersyarat, Anda dapat menambahkan header tambahan ke WRITE
permintaan Anda untuk menentukan prasyarat untuk operasi S3 Anda. Header ini menentukan kondisi yang, jika tidak terpenuhi, akan mengakibatkan operasi S3 gagal. Misalnya, Anda dapat mencegah penimpaan data yang ada dengan memvalidasi tidak ada objek dengan nama kunci yang sama yang sudah ada di bucket Anda selama pengunggahan objek. Anda juga dapat memeriksa tag entitas objek (ETag) di Amazon S3 sebelum menulis objek.
Untuk contoh kebijakan bucket yang menggunakan kondisi dalam kebijakan bucket guna menerapkan penulisan bersyarat, lihat. Menegakkan penulisan bersyarat di ember Amazon S3
Contoh: Kunci kondisi Amazon S3 untuk operasi bucket
Contoh kebijakan berikut menunjukkan cara Anda dapat menggunakan kunci kondisi khusus Amazon S3 untuk operasi bucket.
Topik
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,
), kecuali alamat IP adalah salah satu yang ingin Anda kecualikan (misalnya,192.0.2.*
). Di 192.0.2.188
Condition
blok, IpAddress
dan NotIpAddress
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
dengan informasi Anda sendiri.user input placeholders
catatan
Nilai IPAddress
dan NotIpAddress
kunci yang ditentukan dalam Condition
blok menggunakan notasi CIDR, seperti yang dijelaskan dalam RFC 4632. Untuk informasi lebih lanjut, lihat http://www.rfc-editor. org/rfc/rfc
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "
amzn-s3-demo-bucket
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 kondisi aws:SourceVpce
dan aws:SourceVpc
dalam kebijakan bucket untuk titik akhir VPC. Untuk contoh spesifik, lihatMegendalikan akses dari titik akhir VPC 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 operasi S3 API menurut jenis sumber daya S3, lihat. Izin yang diperlukan untuk operasi API Amazon S3
Contoh 2: Mendapatkan daftar objek di bucket dengan prefiks tertentu
Anda dapat menggunakan kunci s3:prefix
kondisi untuk membatasi respons operasi ListObjectsV2API 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 tersebut yang mendukung konsep folder; Amazon S3 API hanya mendukung bucket dan objek. Misalnya, jika Anda memiliki dua objek dengan nama kunci
danpublic/object1.jpg
, konsol menunjukkan objek di bawah public/object2.jpg
folder. Pada Amazon S3 API, objek-objek ini adalah objek dengan prefiks, bukan objek yang ada dalam folder. Untuk informasi lebih lanjut tentang bagaimana menggunakan prefiks dan pembatas untuk memfilter izin akses, lihat Mengontrol akses ke bucket dengan kebijakan pengguna. public
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 operasi ListObjectsV2
API, 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:ListBucketVersions
Izin 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.
Untuk menggunakan kebijakan contoh ini, ganti projects
dengan informasi Anda sendiri.user input placeholders
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::
", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
Condition
Pernyataan membatasi pengguna untuk mencantumkan hanya kunci objek yang memiliki
awalan. projects
Deny
Pernyataan 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 mengganti Allow
pernyataan, jika pengguna mencoba membuat daftar kunci selain yang memiliki
awalan, permintaan ditolak. projects
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
dengan informasi Anda sendiri.user input
placeholders
{ "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:::", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
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 AWS CLI di Referensi API Amazon S3.
aws s3api list-objects --bucket
--prefix
amzn-s3-demo-bucket
projects
--profileAccountA
Contoh 3: Mengatur jumlah kunci maksimum
Anda dapat menggunakan tombol s3:max-keys
kondisi untuk mengatur jumlah maksimum kunci yang dapat dikembalikan oleh pemohon dalam ListObjectVersionspermintaan ListObjectsV2atau permintaan. Secara default, operasi API 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 dalam Panduan Pengguna IAM.