Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh kebijakan berbasis identitas untuk Amazon S3
Bagian ini menunjukkan beberapa contoh kebijakan berbasis identitas AWS Identity and Access Management (IAM) untuk mengontrol akses ke Amazon S3. Misalnya kebijakan bucket (kebijakan berbasis sumber daya), lihat. Kebijakan bucket untuk Amazon S3 Untuk informasi lebih lanjut tentang bahasa kebijakan IAM, lihatKebijakan dan izin di Amazon S3.
Contoh kebijakan berikut akan berfungsi jika Anda menggunakannya secara terprogram. Tetapi, untuk menggunakannya dengan konsol Amazon S3, Anda harus memberikan izin tambahan yang diperlukan oleh konsol. Untuk informasi tentang menggunakan kebijakan seperti ini dengan konsol Amazon S3, lihat Mengontrol akses ke bucket dengan kebijakan pengguna.
Topik
- Mengizinkan akses pengguna IAM ke salah satu bucket Anda
- Mengizinkan setiap akses pengguna IAM ke folder dalam bucket
- Mengizinkan grup memiliki folder bersama di Amazon S3
- Mengizinkan semua pengguna Anda membaca objek di sebagian bucket
- Mengizinkan mitra untuk menempatkan file ke dalam bagian tertentu bucket
- Membatasi akses ke bucket Amazon S3 dalam bucket tertentu Akun AWS
- Membatasi akses ke bucket Amazon S3 dalam unit organisasi Anda
- Membatasi akses ke bucket Amazon S3 di organisasi Anda
- Memberikan izin untuk mengambil PublicAccessBlock konfigurasi untuk Akun AWS
- Membatasi pembuatan bucket ke satu Wilayah
Mengizinkan akses pengguna IAM ke salah satu bucket Anda
Dalam contoh ini, Anda ingin memberikan pengguna IAM dalam Akun AWS akses ke salah satu bucket Anda, DOC-EXAMPLE-BUCKET1, dan mengizinkan pengguna untuk menambahkan, memperbarui, dan menghapus objek.
Selain memberikan izin s3:PutObject
, s3:GetObject
, dan s3:DeleteObject
bagi pengguna, kebijakan tersebut juga memberikan izin s3:ListAllMyBuckets
, s3:GetBucketLocation
, dan s3:ListBucket
. Izin-izin tersebut adalah izin tambahan yang diperlukan oleh konsol tersebut. Selain itu, tindakan s3:PutObjectAcl
dan s3:GetObjectAcl
diperlukan untuk dapat menyalin, memotong, dan menempel objek di konsol. Untuk panduan contoh yang memberikan izin kepada pengguna dan mengujinya dengan menggunakan konsol, lihat Mengontrol akses ke bucket dengan kebijakan pengguna.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" } ] }
Mengizinkan setiap akses pengguna IAM ke folder dalam bucket
Dalam contoh ini, Anda ingin dua pengguna IAM, Mary dan Carlos, memiliki akses ke bucket Anda, DOC-EXAMPLE-BUCKET1, sehingga mereka dapat menambahkan, memperbarui, dan menghapus objek. Namun, Anda ingin membatasi setiap akses pengguna ke satu prefiks (folder) dalam bucket. Anda dapat membuat folder dengan nama yang cocok dengan nama pengguna mereka.
DOC-EXAMPLE-BUCKET1
Mary
/Carlos
/
Untuk memberikan setiap pengguna akses hanya ke foldernya saja, Anda dapat menulis kebijakan untuk setiap pengguna dan melampirkannya secara sendiri-sendiri. Misalnya, Anda dapat melampirkan kebijakan berikut ke pengguna Mary untuk mengizinkan izin Amazon S3 tertentu pada folder DOC-EXAMPLE-BUCKET1/
.Mary
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/
Mary
/*" } ] }
Anda kemudian dapat melampirkan kebijakan serupa ke pengguna Carlos, menentukan folder
dalam nilaiCarlos
Resource
.
Alih-alih melampirkan kebijakan kepada masing-masing pengguna, Anda dapat menulis satu kebijakan yang menggunakan variabel kebijakan dan melampirkan kebijakan tersebut ke grup. Pertama, Anda harus membuat grup dan menambahkan Mary dan Carlos ke grup. Kebijakan contoh berikut memungkinkan serangkaian izin Amazon S3 pada folder DOC-EXAMPLE-BUCKET1/${aws:username}
. Ketika kebijakan dievaluasi, variabel ${aws:username}
kebijakan diganti dengan nama pengguna pemohon. Misalnya, jika Mary mengirim permintaan untuk menempatkan objek, maka operasi hanya diperbolehkan jika Mary mengunggah objek tersebut ke DOC-EXAMPLE-BUCKET1/Mary
folder.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
catatan
Saat menggunakan variabel kebijakan, Anda harus secara jelas menyebutkan versi 2012-10-17
dalam kebijakan tersebut. Versi bawaan bahasa kebijakan IAM, yaitu 2008-10-17, tidak mendukung variabel kebijakan ini.
Jika Anda ingin menguji kebijakan sebelumnya di konsol Amazon S3, maka konsol tersebut memerlukan izin tambahan, seperti yang ditunjukkan dalam kebijakan berikut. Untuk informasi tentang bagaimana konsol menggunakan izin ini, lihat Mengontrol akses ke bucket dengan kebijakan pengguna.
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowRootLevelListingOfTheBucket", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
catatan
Dalam versi kebijakan 2012-10-17, variabel kebijakan dimulai dengan $
. Perubahan sintaks ini berpotensi membuat konflik jika kunci objek Anda (nama objek) termasuk $
.
Untuk menghindari konflik ini, tentukan $
karakter dengan menggunakan${$}
. Misalnya, untuk menyertakan kunci objek my$file
dalam kebijakan, tentukan sebagaimy${$}file
.
Meskipun nama pengguna IAM adalah pengidentifikasi yang dapat dibaca manusia dan mudah dikenali, tetapi nama-nama tersebut tidak harus bersifat unik secara global. Misalnya, jika pengguna Carlos meninggalkan organisasi dan Carlos lainnya bergabung, maka Carlos baru dapat mengakses informasi Carlos lama.
Alih-alih menggunakan nama pengguna, Anda dapat membuat folder berdasarkan ID pengguna IAM. Setiap ID pengguna IAM adalah unik. Dalam hal ini, Anda harus mengubah kebijakan sebelumnya untuk menggunakan variabel kebijakan${aws:userid}
. Untuk informasi lebih lanjut tentang pengidentifikasi pengguna, lihat Pengidentifikasi IAM dalam Panduan Pengguna IAM.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/home/${aws:userid}/*" } ] }
Mengizinkan pengguna non-IAM (pengguna aplikasi seluler) mengakses folder di dalam bucket
Misalkan Anda ingin mengembangkan sebuah aplikasi seluler, sebuah permainan yang menyimpan data pengguna dalam bucket S3. Untuk setiap pengguna aplikasi, Anda ingin membuat folder dalam bucket Anda. Anda juga ingin membatasi akses setiap pengguna ke folder mereka sendiri. Tetapi Anda tidak dapat membuat folder sebelum seseorang mengunduh aplikasi Anda dan mulai memainkan game, karena Anda tidak memiliki ID pengguna mereka.
Dalam hal ini, Anda dapat meminta pengguna untuk masuk ke aplikasi Anda dengan menggunakan penyedia identitas publik seperti Login dengan Amazon, Facebook, atau Google. Setelah pengguna masuk ke aplikasi Anda melalui salah satu penyedia layanan ini, mereka memiliki ID pengguna yang dapat Anda gunakan untuk membuat folder kustom pengguna saat runtime.
Anda kemudian dapat menggunakan federasi identitas web AWS Security Token Service untuk mengintegrasikan informasi dari penyedia identitas dengan aplikasi Anda dan untuk mendapatkan kredensyal keamanan sementara untuk setiap pengguna. Anda kemudian dapat membuat kebijakan IAM yang memungkinkan aplikasi mengakses bucket Anda dan melakukan operasi seperti membuat folder kustom pengguna dan mengunggah data. Untuk informasi lebih lanjut tentang federasi identitas web, lihat Tentang Federasi Identitas Web dalam Panduan Pengguna IAM.
Mengizinkan grup memiliki folder bersama di Amazon S3
Melampirkan kebijakan berikut ke grup akan memberikan kepada semua orang di grup akses ke folder berikut di Amazon S3: DOC-EXAMPLE-BUCKET1/share/marketing
. Anggota grup diizinkan untuk hanya mengakses izin Amazon S3 tertentu saja yang ditampilkan dalam kebijakan dan hanya untuk objek di folder tertentu saja.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/share/marketing/*" } ] }
Mengizinkan semua pengguna Anda membaca objek di sebagian bucket
Dalam contoh ini, Anda membuat grup dengan nama
, yang berisi semua pengguna IAM yang dimiliki oleh Akun AWS. Anda kemudian melampirkan kebijakan yang memberikan grup akses ke AllUsers
GetObject
dan GetObjectVersion
, tetapi hanya untuk objek yang ada di folder DOC-EXAMPLE-BUCKET1/readonly
saja.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/readonly/*" } ] }
Mengizinkan mitra untuk menempatkan file ke dalam bagian tertentu bucket
Dalam contoh ini, Anda membuat grup yang disebut
yang mewakili perusahaan mitra. Anda membuat pengguna IAM untuk orang atau aplikasi tertentu di perusahaan mitra yang memerlukan akses, lalu Anda menempatkan pengguna tersebut dalam grup. AnyCompany
Anda kemudian melampirkan kebijakan yang memberikan PutObject
akses kepada grup ke folder berikut dalam bucket:
DOC-EXAMPLE-BUCKET1/uploads/anycompany
Anda ingin mencegah
grup melakukan hal lain dengan bucket, sehingga Anda menambahkan pernyataan yang secara jelas menolak izin untuk tindakan Amazon S3 kecuali pada sumber daya AnyCompany
PutObject
Amazon S3 di. Akun AWS
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/
anycompany
/*" }, { "Effect":"Deny", "Action":"s3:*", "NotResource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany
/*" } ] }
Membatasi akses ke bucket Amazon S3 dalam bucket tertentu Akun AWS
Jika Anda ingin memastikan bahwa kepala sekolah Amazon S3 Anda hanya mengakses sumber daya yang ada di dalam tepercaya Akun AWS, Anda dapat membatasi akses. Misalnya, kebijakan IAM berbasis identitas ini menggunakan Deny
efek untuk memblokir akses ke tindakan Amazon S3, kecuali sumber daya Amazon S3 yang sedang diakses ada di akun
. Untuk mencegah prinsipal IAM dalam mengakses objek Amazon S3 di luar akun, lampirkan kebijakan IAM berikut: Akun AWS 222222222222
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "
222222222222
" ] } } } ] }
catatan
Kebijakan ini tidak menggantikan kontrol akses IAM Anda yang ada, karena tidak memberikan akses apa pun. Sebagai gantinya, kebijakan ini bertindak sebagai pagar pembatas tambahan untuk izin IAM Anda yang lain, terlepas dari izin yang diberikan melalui kebijakan IAM lainnya.
Pastikan untuk mengganti ID akun
di polis dengan ID Anda sendiri Akun AWS. Untuk menerapkan kebijakan ke beberapa akun sambil tetap mempertahankan batasan ini, ganti ID akun dengan kunci 222222222222
aws:PrincipalAccount
kondisi. Kondisi ini mensyaratkan bahwa pengguna utama dan sumber daya harus berada dalam akun yang sama.
Membatasi akses ke bucket Amazon S3 dalam unit organisasi Anda
Jika Anda memiliki unit organisasi (OU) yang disiapkan AWS Organizations, Anda mungkin ingin membatasi akses bucket Amazon S3 ke bagian tertentu dari organisasi Anda. Dalam contoh ini, kami akan menggunakan aws:ResourceOrgPaths
kunci untuk membatasi akses bucket Amazon S3 ke OU di organisasi Anda. Untuk contoh ini, ID OU adalah
. Pastikan untuk mengganti nilai ini dalam kebijakan Anda sendiri dengan ID OU Anda sendiri.ou-acroot-exampleou
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3AccessOutsideMyBoundary", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "
o-acorg/r-acroot/ou-acroot-exampleou/
" ] } } } ] }
catatan
Kebijakan ini tidak memberikan akses apa pun. Sebagai gantinya, kebijakan ini bertindak sebagai penghalang untuk izin IAM Anda yang lain, mencegah pengguna utama mengakses objek Amazon S3 di luar batas yang ditentukan OU.
Kebijakan ini menolak akses ke tindakan Amazon S3 kecuali objek Amazon S3 yang sedang diakses ada di OU di
organisasi Anda. Kondisi kebijakan IAM mengharuskanou-acroot-exampleou
aws:ResourceOrgPaths
, kunci kondisi multivalued, untuk memuat salah satu jalur OU yang terdaftar. Kebijakan ini menggunakan ForAllValues:StringNotLike
operator untuk membandingkan nilai OU yang terdaftar tanpa aws:ResourceOrgPaths
pencocokan peka huruf besar/kecil.
Membatasi akses ke bucket Amazon S3 di organisasi Anda
Untuk membatasi akses ke objek Amazon S3 dalam organisasi Anda, lampirkan kebijakan IAM ke root organisasi, terapkan ke semua akun di organisasi Anda. Untuk mewajibkan pengguna utama IAM Anda mengikuti aturan ini, gunakan kebijakan kontrol layanan (SCP). Jika Anda memilih untuk menggunakan SCP, pastikan untuk menguji SCP secara menyeluruh sebelum melampirkan kebijakan ke root organisasi.
Dalam contoh kebijakan berikut, akses ditolak ke tindakan Amazon S3 kecuali objek Amazon S3 yang diakses berada di organisasi yang sama dengan pengguna utama IAM yang mengaksesnya:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::*/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } ] }
catatan
Kebijakan ini tidak memberikan akses apa pun. Sebagai gantinya, kebijakan ini bertindak sebagai penghalang untuk izin IAM Anda yang lain, mencegah pengguna utama mengakses objek Amazon S3 apa pun di luar organisasi Anda. Kebijakan ini juga berlaku untuk sumber daya Amazon S3 yang dibuat setelah kebijakan diberlakukan.
Kondisi kebijakan IAM dalam contoh ini mengharuskan aws:ResourceOrgID
dan aws:PrincipalOrgID
agar sama satu dengan yang lainnya. Dengan persyaratan ini, pengguna utama yang membuat permintaan dan sumber daya yang diakses harus berada di organisasi yang sama.
Memberikan izin untuk mengambil PublicAccessBlock konfigurasi untuk Akun AWS
Contoh kebijakan berbasis identitas berikut memberikan s3:GetAccountPublicAccessBlock
izin kepada pengguna. Untuk izin ini, Anda mengatur nilai Resource
ke "*"
. Untuk informasi tentang ARN sumber daya, lihatSumber daya kebijakan untuk Amazon S3.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action":[ "s3:GetAccountPublicAccessBlock" ], "Resource":[ "*" ] } ] }
Membatasi pembuatan bucket ke satu Wilayah
Misalkan Akun AWS administrator ingin memberikan izin kepada penggunanya (Dave) untuk membuat ember di Wilayah Amerika Selatan (São Paulo) saja. Administrator akun dapat melampirkan kebijakan pengguna berikut ini yang memberikan izin s3:CreateBucket
dengan syarat seperti yang ditunjukkan. Pasangan nilai kunci dalam pemblokiran Condition
menentukan kunci s3:LocationConstraint
dan Wilayah sa-east-1
sebagai nilainya.
catatan
Dalam contoh ini, pemilik bucket memberikan izin kepada salah satu penggunanya, sehingga kebijakan bucket atau kebijakan pengguna dapat digunakan. Contoh ini menunjukkan kebijakan pengguna.
Untuk daftar Wilayah Amazon S3, lihat Wilayah dan Titik Akhir di Referensi Umum AWS.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }
Menambahkan penolakan eksplisit
Kebijakan sebelumnya membatasi pengguna untuk membuat bucket di Wilayah lain kecuali sa-east-1
. Namun, beberapa kebijakan lain mungkin memberikan izin kepada pengguna ini untuk membuat bucket di Wilayah lain. Misalnya, jika pengguna merupakan bagian dari sebuah kelompok, dan kelompok tersebut mungkin memiliki kebijakan yang melekat padanya yang memberikan izin kepada semua pengguna dalam kelompok tersebut untuk membuat bucket di Wilayah lain. Untuk memastikan bahwa pengguna tidak mendapatkan izin untuk membuat bucket di Wilayah lain, Anda dapat menambahkan pernyataan penolakan eksplisit dalam kebijakan di atas.
Pernyataan Deny
menggunakan kondisi StringNotLike
. Artinya, permintaan buat bucket ditolak jika kendala lokasi tidak sa-east-1
. Penolakan eksplisit tidak memungkinkan pengguna membuat bucket di Wilayah lain mana pun, apa pun izin lain yang didapat pengguna. Kebijakan berikut mencakup pernyataan penolakan eksplisit.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }
Uji kebijakan dengan AWS CLI
Anda dapat menguji kebijakan menggunakan create-bucket
AWS CLI perintah berikut. Contoh ini menggunakan file bucketconfig.txt
untuk menentukan batasan lokasi. Perhatikan jalur Windows file. Anda perlu memperbarui nama bucket dan alurnya sesuai kebutuhan. Anda harus memberikan kredensial pengguna dengan menggunakan parameter --profile
. Untuk informasi selengkapnya tentang pengaturan dan penggunaan AWS CLI, lihatMengembangkan dengan Amazon S3 menggunakan AWS CLI.
aws s3api create-bucket --bucket
examplebucket
--profile AccountADave --create-bucket-configuration file://c:/Users/someUser/bucketconfig.txt
File bucketconfig.txt
menentukan konfigurasi sebagai berikut.
{"LocationConstraint": "sa-east-1"}