Contoh kebijakan berbasis identitas untuk 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 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.

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 Carlos dalam nilaiResource.

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 AllUsers, yang berisi semua pengguna IAM yang dimiliki oleh Akun AWS. Anda kemudian melampirkan kebijakan yang memberikan grup akses ke 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 AnyCompany 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.

Anda kemudian melampirkan kebijakan yang memberikan PutObject akses kepada grup ke folder berikut dalam bucket:

DOC-EXAMPLE-BUCKET1/uploads/anycompany

Anda ingin mencegah AnyCompany grup melakukan hal lain dengan bucket, sehingga Anda menambahkan pernyataan yang secara jelas menolak izin untuk tindakan Amazon S3 kecuali pada sumber daya 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 222222222222. Untuk mencegah prinsipal IAM dalam mengakses objek Amazon S3 di luar akun, lampirkan kebijakan IAM berikut: Akun AWS

{ "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 222222222222 di polis dengan ID Anda sendiri Akun AWS. Untuk menerapkan kebijakan ke beberapa akun sambil tetap mempertahankan batasan ini, ganti ID akun dengan kunci 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 adalahou-acroot-exampleou. Pastikan untuk mengganti nilai ini dalam kebijakan Anda sendiri dengan ID OU Anda sendiri.

{ "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 ou-acroot-exampleou organisasi Anda. Kondisi kebijakan IAM mengharuskanaws: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.

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"}