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.