View a markdown version of this page

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

Template kebijakan adalah konstruksi IAM baru yang dirancang untuk menentukan izin sementara yang diminta mitra di akun pelanggan. Seperti kebijakan IAM biasa, mereka menentukan izin menggunakan pernyataan dengan elemen Efek, Tindakan, Sumber Daya, dan Kondisi. Perbedaan utamanya adalah template kebijakan menyertakan parameter (seperti @ {bucketName}) yang diganti dengan nilai aktual saat Anda membuat permintaan delegasi.

Cara Kerja Template Kebijakan

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

Saat membuat permintaan delegasi, Anda menentukan:

  • Template kebijakan ARN

  • Nilai parameter untuk diganti ke dalam template

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

catatan

Kebijakan render akhir 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 yang Disediakan dalam Permintaan Delegasi:

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

Kebijakan yang diberikan akhir (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 di 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 dan Jenis Parameter

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

String

Nilai tunggal yang diganti langsung ke dalam template.

Template:

"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 sumber daya ARN, itu diperluas untuk membuat entri sumber daya terpisah untuk setiap nilai.

Template:

"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/*" ]

Cross-Product Perilaku

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

Template:

"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 memasukkan atau mengecualikan seluruh pernyataan secara kondisional berdasarkan nilai parameter.

Sintaksis:

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

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

Template:

{ "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 “Benar”):

[ { "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 “Salah”):

[ { "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 kondisional disertakan. Saat disetel ke “Salah”, pernyataan 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 yang berbeda untuk cakupan 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 Long-Term Akses ke Sumber Daya Tertentu

Batas izin berikut dikirimkan sebagai "SQSAccessorBoundary" 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 dibagikan di semua pelanggan dan tidak dapat diberi templat.

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

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

Template kebijakan untuk menandai antrian baru saat pembuatan:

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

Template 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.

Diperbarui batas izin 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: -. policy/permissions boundary/partner com/SQSAccessorBoundary_2025_01_20

Template 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.