Templat kebijakan - AWS Identity and Access Management

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

Templat kebijakan

Templat kebijakan adalah konstruksi IAM baru yang dirancang untuk menentukan izin sementara yang diminta mitra di akun pelanggan. Seperti kebijakan IAM biasa, mereka mendefinisikan izin menggunakan pernyataan dengan elemen Effect, Action, Resource, dan Condition. Perbedaan utamanya adalah templat kebijakan menyertakan parameter (seperti @ {bucketName}) yang diganti dengan nilai aktual saat Anda membuat permintaan delegasi.

Bagaimana Template Kebijakan Bekerja

Sebagai bagian dari proses orientasi, Anda mendaftarkan templat kebijakan Anda. AWS AWS menetapkan setiap template ARN unik yang Anda referensikan saat membuat permintaan delegasi.

Saat Anda membuat permintaan delegasi, Anda menentukan:

  • Templat kebijakan ARN

  • Nilai parameter untuk diganti ke dalam template

AWS menggabungkan template dengan nilai parameter Anda untuk menghasilkan kebijakan IAM standar. Pelanggan meninjau kebijakan akhir yang diberikan ini saat menyetujui permintaan delegasi Anda, melihat dengan tepat izin apa yang akan diberikan.

catatan

Kebijakan akhir yang diberikan memiliki batas ukuran maksimum 2048 karakter.

Berikut adalah contoh sederhana yang menunjukkan cara kerja substitusi template.

Templat Kebijakan:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::@{bucketName}/*" } ] }

Parameter Disediakan dalam Permintaan Delegasi:

{ "Name": "bucketName", "Values": ["customer-data-bucket"], "Type": "String" }

Kebijakan akhir yang diberikan (apa yang dilihat pelanggan):

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::customer-data-bucket/*" } ] }

Sintaks Template

Template kebijakan menggunakan dua fitur utama untuk memberikan fleksibilitas: substitusi parameter dan pernyataan bersyarat. Substitusi parameter memungkinkan Anda untuk menentukan placeholder dalam template Anda yang diganti dengan nilai aktual saat membuat permintaan delegasi. Pernyataan bersyarat memungkinkan Anda untuk menyertakan atau mengecualikan seluruh pernyataan kebijakan berdasarkan nilai parameter.

Substitusi Parameter dan Jenis

Gunakan sintaks @ {parameterName} untuk menentukan parameter dalam templat kebijakan Anda. Saat membuat permintaan delegasi, Anda harus menentukan jenis untuk setiap parameter.

String

Nilai tunggal yang diganti langsung ke template.

Templat:

"Resource": "arn:aws:s3:::@{bucketName}/*"

Parameter:

{ "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }

Hasil yang dirender:

"Resource": "arn:aws:s3:::my-bucket/*"

StringList

Beberapa nilai yang menghasilkan beberapa entri sumber daya. Ketika StringList parameter digunakan dalam ARN sumber daya, ia memperluas untuk membuat entri sumber daya terpisah untuk setiap nilai.

Templat:

"Resource": "arn:aws:s3:::@{bucketNames}/*"

Parameter:

{ "Name": "bucketNames", "Values": ["bucket-1", "bucket-2"], "Type": "StringList" }

Hasil yang dirender:

"Resource": [ "arn:aws:s3:::bucket-1/*", "arn:aws:s3:::bucket-2/*" ]

Perilaku Lintas Produk

Ketika beberapa parameter digunakan dalam ARN sumber daya yang sama, StringList parameter membuat produk silang dari semua kombinasi.

Templat:

"Resource": "arn:aws:s3:::@{bucketNames}/@{prefix}/*"

Parameter:

[ { "Name": "bucketNames", "Values": ["bucket-1", "bucket-2"], "Type": "StringList" }, { "Name": "prefix", "Values": ["data"], "Type": "String" } ]

Hasil yang dirender:

"Resource": [ "arn:aws:s3:::bucket-1/data/*", "arn:aws:s3:::bucket-2/data/*" ]

Pernyataan Bersyarat

Gunakan direktif @Enabled untuk menyertakan atau mengecualikan seluruh pernyataan secara kondisional berdasarkan nilai parameter.

Sintaksis:

  • @Enabled: “ParameterName” - Sertakan pernyataan ketika nilai parameter “Benar”

  • @Enabled: “! ParameterName” - Sertakan pernyataan ketika nilai parameter TIDAK “Benar” (negasi)

Templat:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }, { "@Enabled": "ENABLE_S3_WRITE", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::@{bucketName}/*" } ] }

Parameter (ketika ENABLE_S3_WRITE adalah “True”):

[ { "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }, { "Name": "ENABLE_S3_WRITE", "Values": ["True"], "Type": "String" } ]

Hasil yang dirender:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" }, { "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::my-bucket/*" } ] }

Parameter (ketika ENABLE_S3_WRITE adalah “False”):

[ { "Name": "bucketName", "Values": ["my-bucket"], "Type": "String" }, { "Name": "ENABLE_S3_WRITE", "Values": ["False"], "Type": "String" } ]

Hasil yang dirender:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "*" } ] }

Ketika ENABLE_S3_WRITE diatur ke “True”, pernyataan bersyarat disertakan. Ketika disetel ke “Salah”, pernyataan tersebut dikecualikan dari kebijakan yang diberikan.

Contoh Tambahan

Contoh berikut menunjukkan pola umum untuk menggunakan templat kebijakan dalam delegasi sementara. Mereka fokus pada pembuatan peran IAM dengan batas izin untuk akses jangka panjang dan menunjukkan strategi berbeda untuk melingkupi izin ke sumber daya tertentu. Contoh-contoh ini menggambarkan bagaimana menyeimbangkan fleksibilitas dengan keamanan dengan menggunakan teknik seperti awalan ARN, penandaan sumber daya, dan pembaruan batas izin.

Contoh 1: Memberikan Akses Jangka Panjang ke Sumber Daya Tertentu

Batas izin berikut diajukan sebagai "SQSAccessorBatas” untuk “partner.com”:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }
catatan

Ini termasuk kondisi akun yang sama untuk menghindari pemberian akses ke antrian di akun lain dengan kebijakan sumber daya terbuka. Referensi langsung ke ID akun pelanggan tidak dapat disertakan karena batas dibagi di semua pelanggan dan tidak dapat di-template.

Karena ini adalah versi pertama dari kebijakan ini, ARN-nya adalah arn:aws:iam: :partner: _2025_01_15 policy/permissions-boundary/partner.com/SQSAccessorBoundary

Templat kebijakan berikut dikirimkan untuk izin akses sementara:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:ListQueues" ], "Resource": "arn:aws:sqs:*:*:*" }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15" } } } ] }

Contoh 2: Menggunakan Awalan ARN

Batas izin dapat menentukan awalan ARN sumber daya untuk membatasi akses:

"Resource": "arn:aws:sqs:*:@{AccountId}:PartnerPrefix*"

Ini membatasi akses hanya ke sumber daya dengan awalan itu, mengurangi ruang lingkup sumber daya yang dapat diakses.

Contoh 3: Menggunakan Tag untuk Kontrol Akses Sumber Daya

Anda dapat menandai sumber daya selama akses yang didelegasikan sementara dan mengandalkan tag tersebut untuk kontrol akses jangka panjang.

Batas izin yang memungkinkan akses ke sumber daya yang ditandai:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "Null": { "aws:ResourceTag/ManagedByPartnerDotCom": "false" }, "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }

Templat kebijakan untuk menandai antrian baru saat pembuatan:

{ "Effect": "Allow", "Action": [ "sqs:CreateQueue", "sqs:TagQueue" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "Null": { "aws:RequestTag/ManagedByPartnerDotCom": "false" } } }

Templat kebijakan untuk menandai antrian yang sudah ada sebelumnya dan membuat peran:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sqs:TagQueue" ], "Resource": "arn:aws:sqs:*:@{AccountId}:@{QueueName}", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": "ManagedByPartnerDotCom" } } }, { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePermissionsBoundary", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_15" } } } ] }

Pendekatan ini memungkinkan pelanggan untuk secara eksplisit mengkonfirmasi sumber daya spesifik mana yang dapat diakses dalam jangka panjang.

Contoh 4: Memperbarui Batas Izin

Untuk memperbarui batas izin, daftarkan versi baru dengan akhiran tanggal baru dan minta izin untuk menggantinya.

Batas izin yang diperbarui dengan izin tambahan:

{ "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:PurgeQueue", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Resource": "arn:aws:sqs:*:*:*", "Condition": { "StringEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }

Sebagai versi kedua, kebijakan ini memiliki ARN: arn:aws:iam: :partner: _2025_01_20 policy/permissions-boundary/partner.com/SQSAccessorBoundary

Templat kebijakan untuk memperbarui batas izin pada peran yang ada:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PutRolePermissionsBoundary" ], "Resource": "arn:aws:iam::@{AccountId}:role/partner.com/SQSAccessor", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::partner:policy/permissions-boundary/partner.com/SQSAccessorBoundary_2025_01_20" } } } ] }

Pelanggan harus menyetujui permintaan delegasi ini untuk memperbarui batas izin pada peran yang ada.