Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tulis aturan Guard untuk mengevaluasi sumber daya untuk Guard Hooks
AWS CloudFormation Guard adalah bahasa khusus domain (DSL) sumber terbuka dan tujuan umum yang dapat Anda gunakan untuk membuat kebijakan sebagai kode. Topik ini menjelaskan cara menggunakan Guard untuk membuat contoh aturan yang dapat dijalankan di Guard Hook untuk mengevaluasi CloudFormation dan mengoperasikan secara AWS Cloud Control API otomatis. Ini juga akan fokus pada berbagai jenis input yang tersedia untuk aturan Guard Anda tergantung pada kapan Guard Hook Anda berjalan. Guard Hook dapat dikonfigurasi untuk berjalan selama jenis operasi berikut:
-
Operasi sumber daya
-
Operasi tumpukan
-
Ubah operasi set
Untuk informasi selengkapnya tentang penulisan aturan Guard, lihat A AWS CloudFormation Guard turan menulis
Topik
Operasi sumber daya Aturan penjaga
Setiap kali Anda membuat, memperbarui, atau menghapus sumber daya, itu dianggap sebagai operasi sumber daya. Sebagai contoh, jika Anda menjalankan pembaruan CloudFormation tumpukan yang membuat sumber daya baru, Anda telah menyelesaikan operasi sumber daya. Saat Anda membuat, memperbarui, atau menghapus sumber daya menggunakan Cloud Control API, itu juga dianggap sebagai operasi sumber daya. Anda dapat mengonfigurasi Guard Hook Anda untuk menar RESOURCE getkan dan CLOUD_CONTROL operasi dalam TargetOperations konfigurasi untuk Hook Anda. Saat Guard Hook mengevaluasi operasi sumber daya, mesin Guard mengevaluasi input sumber daya.
Topik
Sintaks input sumber daya jaga
Input sumber daya Penjaga adalah data yang tersedia untuk aturan Penjaga Anda untuk dievaluasi.
Berikut ini adalah contoh bentuk input sumber daya:
HookContext: AWSAccountID: String StackId: String HookTypeName: String HookTypeVersion: String InvocationPoint: [CREATE_PRE_PROVISION, UPDATE_PRE_PROVISION, DELETE_PRE_PROVISION] TargetName: String TargetType: RESOURCE TargetLogicalId: String ChangeSetId: String Resources: {ResourceLogicalID}: ResourceType: {ResourceType} ResourceProperties: {ResourceProperties} Previous: ResourceLogicalID: ResourceType: {ResourceType} ResourceProperties: {PreviousResourceProperties}
HookContext-
AWSAccountID-
ID yang Akun AWS berisi sumber daya yang sedang dievaluasi.
StackId-
ID tumpukan dari CloudFormation tumpukan yang merupakan bagian dari operasi sumber daya. Ini kosong jika pemanggil adalah Cloud Control API.
HookTypeName-
Nama Hook yang sedang berjalan.
HookTypeVersion-
Versi Hook yang sedang berjalan.
InvocationPoint-
Titik yang tepat dalam logika penyediaan tempat Hook berjalan.
Nilai yang valid: (
CREATE_PRE_PROVISION|UPDATE_PRE_PROVISION|DELETE_PRE_PROVISION) TargetName-
Jenis target yang dievaluasi, misalnya,
AWS::S3::Bucket. TargetType-
Jenis target yang dievaluasi, misalnya
AWS::S3::Bucket. Untuk sumber daya yang disediakan dengan Cloud Control API, nilai ini akan menjadiRESOURCE. TargetLogicalId-
Sumber
TargetLogicalIddaya yang dievaluasi. Jika asal dari Hook adalah CloudFormation, ini akan menjadi ID logis (juga dikenal sebagai nama logis) dari sumber daya. Jika asal dari Hook adalah Cloud Control API, ini akan menjadi nilai yang dibangun. ChangeSetId-
ID set perubahan yang dieksekusi untuk menyebabkan pemanggilan Hook. Nilai ini kosong jika perubahan sumber daya dimulai oleh Cloud Control API, atau
delete-stackoperasicreate-stackupdate-stack,, atau.
Resources-
ResourceLogicalID-
Ketika operasi dimulai oleh CloudFormation,
ResourceLogicalIDadalah ID logis dari sumber daya dalam CloudFormation template.Ketika operasi dimulai oleh Cloud Control API, itu
ResourceLogicalIDadalah kombinasi dari jenis sumber daya, nama, ID operasi, dan ID permintaan. ResourceType-
Nama tipe sumber daya (contoh:
AWS::S3::Bucket). ResourceProperties-
Properti yang diusulkan dari sumber daya sedang dimodifikasi. Ketika Guard Hook berjalan melawan perubahan CloudFormation sumber daya, fungsi, parameter, dan transformasi apa pun akan sepenuhnya diselesaikan. Jika sumber daya sedang dihapus, nilai ini akan kosong.
Previous-
ResourceLogicalID-
Ketika operasi dimulai oleh CloudFormation,
ResourceLogicalIDadalah ID logis dari sumber daya dalam CloudFormation template.Ketika operasi dimulai oleh Cloud Control API, itu
ResourceLogicalIDadalah kombinasi dari jenis sumber daya, nama, ID operasi, dan ID permintaan. ResourceType-
Nama tipe sumber daya (contoh:
AWS::S3::Bucket). ResourceProperties-
Properti saat ini terkait dengan sumber daya yang sedang dimodifikasi. Jika sumber daya sedang dihapus, nilai ini akan kosong.
Contoh Input operasi sumber daya Guard
Input contoh berikut menunjukkan Guard Hook yang akan menerima definisi AWS::S3::Bucket sumber daya untuk diperbarui. Ini adalah data yang tersedia untuk Guard untuk evaluasi.
HookContext: AwsAccountId: "123456789012" StackId: "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000" HookTypeName: org::s3policy::hook HookTypeVersion: "00001" InvocationPoint: UPDATE_PRE_PROVISION TargetName: AWS::S3::Bucket TargetType: RESOURCE TargetLogicalId: MyS3Bucket ChangeSetId: "" Resources: MyS3Bucket: Type: AWS::S3::Bucket Properties: BucketName:amzn-s3-demo-bucketObjectLockEnabled: true Previous: MyS3Bucket: Type: AWS::S3::Bucket Properties: BucketName:amzn-s3-demo-bucketObjectLockEnabled: false
Untuk melihat semua properti yang tersedia untuk jenis sumber daya, lihat AWS::S3::Bucket.
Aturan jaga untuk perubahan sumber daya
Ketika Guard Hook mengevaluasi perubahan sumber daya, itu dimulai dengan mengunduh semua aturan yang dikonfigurasi dengan Hook. Aturan-aturan ini kemudian dievaluasi terhadap input sumber daya. Hook akan gagal jika ada aturan yang gagal evaluasi mereka. Jika tidak ada kegagalan, Hook akan berlalu.
Contoh berikut adalah aturan Penjaga yang mengevaluasi apakah ObjectLockEnabled properti true untuk jenis AWS::S3::Bucket sumber daya apa pun.
let s3_buckets_default_lock_enabled = Resources.*[ Type == 'AWS::S3::Bucket'] rule S3_BUCKET_DEFAULT_LOCK_ENABLED when %s3_buckets_default_lock_enabled !empty { %s3_buckets_default_lock_enabled.Properties.ObjectLockEnabled exists %s3_buckets_default_lock_enabled.Properties.ObjectLockEnabled == true << Violation: S3 Bucket ObjectLockEnabled must be set to true. Fix: Set the S3 property ObjectLockEnabled parameter to true. >> }
Ketika aturan ini berjalan melawan input berikut, itu akan gagal karena ObjectLockEnabled properti tidak disetel ketrue.
Resources: MyS3Bucket: Type: AWS::S3::Bucket Properties: BucketName:amzn-s3-demo-bucketObjectLockEnabled: false
Ketika aturan ini berjalan melawan input berikut, itu akan berlalu karena ObjectLockEnabled diatur ketrue.
Resources: MyS3Bucket: Type: AWS::S3::Bucket Properties: BucketName:amzn-s3-demo-bucketObjectLockEnabled: true
Ketika Hook gagal, aturan yang gagal akan disebarkan kembali ke CloudFormation atau Cloud Control API. Jika bucket logging telah dikonfigurasi untuk Guard Hook, umpan balik aturan tambahan akan diberikan di sana. Umpan balik tambahan ini termasuk Violation dan Fix informasi.
Operasi tumpukan Aturan penjaga
Saat CloudFormation tumpukan dibuat, diperbarui, atau dihapus, Anda dapat mengonfigurasi Guard Hook untuk memulai dengan mengevaluasi template baru dan berpotensi memblokir operasi tumpukan agar tidak melanjutkan. Anda dapat mengonfigurasi Guard Hook Anda untuk menar STACK getkan operasi dalam TargetOperations konfigurasi untuk Hook Anda.
Topik
Sintaks input tumpukan pelindung
Masukan untuk operasi tumpukan Guard menyediakan seluruh CloudFormation template untuk evaluasi aturan Guard Anda.
Berikut ini adalah contoh bentuk input tumpukan:
HookContext: AWSAccountID: String StackId: String HookTypeName: String HookTypeVersion: String InvocationPoint: [CREATE_PRE_PROVISION, UPDATE_PRE_PROVISION, DELETE_PRE_PROVISION] TargetName: String TargetType:STACK ChangeSetId: String {Proposed CloudFormation Template} Previous: {CloudFormation Template}
HookContext-
AWSAccountID-
ID sumber daya Akun AWS yang berisi.
StackId-
ID tumpukan CloudFormation tumpukan yang merupakan bagian dari operasi tumpukan.
HookTypeName-
Nama Hook yang sedang berjalan.
HookTypeVersion-
Versi Hook yang sedang berjalan.
InvocationPoint-
Titik yang tepat dalam logika penyediaan tempat Hook berjalan.
Nilai yang valid: (
CREATE_PRE_PROVISION|UPDATE_PRE_PROVISION|DELETE_PRE_PROVISION) TargetName-
Nama tumpukan yang sedang dievaluasi.
TargetType-
Nilai ini akan terjadi
STACKsaat dijalankan sebagai Hook tingkat tumpukan. ChangeSetId-
ID set perubahan yang dieksekusi untuk menyebabkan pemanggilan Hook. Nilai ini kosong jika operasi tumpukan dimulai oleh
delete-stackoperasicreate-stackupdate-stack,, atau.
Proposed CloudFormation Template-
Nilai CloudFormation template lengkap yang diteruskan ke
update-stackoperasi CloudFormationcreate-stackatau. Ini termasuk hal-hal sepertiResources,Outputs, danProperties. Ini bisa berupa string JSON atau YAML tergantung pada apa yang disediakan. CloudFormationDalam
delete-stackoperasi, nilai ini akan kosong. Previous-
CloudFormation Template terakhir berhasil diterapkan. Nilai ini kosong jika tumpukan sedang dibuat atau dihapus.
Dalam
delete-stackoperasi, nilai ini akan kosong.
catatan
Template yang disediakan adalah apa yang diteruskan ke dalam create atau operasi update tumpukan. Saat menghapus tumpukan, tidak ada nilai template yang disediakan.
Contoh masukan operasi tumpukan penjaga
Input contoh berikut menunjukkan Guard Hook yang akan menerima template lengkap dan template yang digunakan sebelumnya. Template dalam contoh ini menggunakan format JSON.
HookContext: AwsAccountId: 123456789012 StackId: "arn:aws:cloudformation:us-west-2:123456789012:stack/MyStack/1a2345b6-0000-00a0-a123-00abc0abc000" HookTypeName: org::templatechecker::hook HookTypeVersion: "00001" InvocationPoint: UPDATE_PRE_PROVISION TargetName: MyStack TargetType: CHANGE_SET TargetLogicalId: arn:aws:cloudformation:us-west-2:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000 ChangeSetId: arn:aws:cloudformation:us-west-2:123456789012:changeSet/SampleChangeSet/1a2345b6-0000-00a0-a123-00abc0abc000 Resources: { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketEncryption": { "ServerSideEncryptionConfiguration": [ {"ServerSideEncryptionByDefault": {"SSEAlgorithm": "aws:kms", "KMSMasterKeyID": "KMS-KEY-ARN" }, "BucketKeyEnabled": true } ] } } } Previous: { "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": {} } } }
Aturan jaga untuk perubahan tumpukan
Ketika Guard Hook mengevaluasi perubahan tumpukan, itu dimulai dengan mengunduh semua aturan yang dikonfigurasi dengan Hook. Aturan-aturan ini kemudian dievaluasi terhadap input sumber daya. Hook akan gagal jika ada aturan yang gagal evaluasi mereka. Jika tidak ada kegagalan, Hook akan berlalu.
Contoh berikut adalah aturan Guard yang mengevaluasi apakah ada jenis AWS::S3::Bucket sumber daya yang berisi properti yang dipanggilBucketEncryption, dengan SSEAlgorithm set ke salah satu aws:kms atauAES256.
let s3_buckets_s3_default_encryption = Resources.*[ Type == 'AWS::S3::Bucket'] rule S3_DEFAULT_ENCRYPTION_KMS when %s3_buckets_s3_default_encryption !empty { %s3_buckets_s3_default_encryption.Properties.BucketEncryption exists %s3_buckets_s3_default_encryption.Properties.BucketEncryption.ServerSideEncryptionConfiguration[*].ServerSideEncryptionByDefault.SSEAlgorithm in ["aws:kms","AES256"] << Violation: S3 Bucket default encryption must be set. Fix: Set the S3 Bucket property BucketEncryption.ServerSideEncryptionConfiguration.ServerSideEncryptionByDefault.SSEAlgorithm to either "aws:kms" or "AES256" >> }
Ketika aturan berjalan melawan template berikut, itu akan terjadifail.
AWSTemplateFormatVersion: 2010-09-09 Description: S3 bucket without default encryption Resources: EncryptedS3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: !Sub 'encryptedbucket-${AWS::Region}-${AWS::AccountId}'
Ketika aturan berjalan melawan template berikut, itu akan terjadipass.
AWSTemplateFormatVersion: 2010-09-09 Description: S3 bucket with default encryption using SSE-KMS with an S3 Bucket Key Resources: EncryptedS3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: !Sub 'encryptedbucket-${AWS::Region}-${AWS::AccountId}' BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: 'aws:kms' KMSMasterKeyID: KMS-KEY-ARN BucketKeyEnabled: true
Ubah pengaturan operasi Aturan penjaga
Saat set CloudFormation perubahan dibuat, Anda dapat mengonfigurasi Guard Hook untuk mengevaluasi template dan perubahan yang diusulkan dalam set perubahan untuk memblokir eksekusi set perubahan.
Topik
Sintaks input set perubahan penjaga
Input set perubahan Guard adalah data yang tersedia untuk aturan Guard Anda untuk dievaluasi.
Berikut ini adalah contoh bentuk input set perubahan:
HookContext: AWSAccountID: String StackId: String HookTypeName: String HookTypeVersion: String InvocationPoint: [CREATE_PRE_PROVISION, UPDATE_PRE_PROVISION, DELETE_PRE_PROVISION] TargetName: CHANGE_SET TargetType:CHANGE_SET TargetLogicalId:ChangeSet ID ChangeSetId: String {Proposed CloudFormation Template} Previous: {CloudFormation Template} Changes: [{ResourceChange}]
Sintaks ResourceChange model adalah:
logis ResourceId: String resourceType: String tindakan: CREATE, UPDATE, DELETE Nomor garis: Number SebelumnyaKonteks: JSON String Sesudah Konteks: JSON String
HookContext-
AWSAccountID-
ID sumber daya Akun AWS yang berisi.
StackId-
ID tumpukan CloudFormation tumpukan yang merupakan bagian dari operasi tumpukan.
HookTypeName-
Nama Hook yang sedang berjalan.
HookTypeVersion-
Versi Hook yang sedang berjalan.
InvocationPoint-
Titik yang tepat dalam logika penyediaan tempat Hook berjalan.
Nilai yang valid: (
CREATE_PRE_PROVISION|UPDATE_PRE_PROVISION|DELETE_PRE_PROVISION) TargetName-
Nama tumpukan yang sedang dievaluasi.
TargetType-
Nilai ini akan terjadi
CHANGE_SETsaat dijalankan sebagai perubahan set-level Hook. TargetLogicalId-
Nilai ini akan menjadi ARN dari set perubahan.
ChangeSetId-
ID set perubahan yang dieksekusi untuk menyebabkan pemanggilan Hook. Nilai ini kosong jika operasi tumpukan dimulai oleh
delete-stackoperasicreate-stackupdate-stack,, atau.
Proposed CloudFormation Template-
CloudFormation Template lengkap yang disediakan untuk
create-change-setoperasi. Ini bisa berupa string JSON atau YAML tergantung pada apa yang disediakan. CloudFormation Previous-
CloudFormation Template terakhir berhasil diterapkan. Nilai ini kosong jika tumpukan sedang dibuat atau dihapus.
Changes-
ChangesModelnya. Ini mencantumkan perubahan sumber daya.
- Perubahan
-
- logis ResourceId
-
Nama sumber daya logis dari sumber daya yang diubah.
- resourceType
-
Jenis sumber daya yang akan diubah.
- tindakan
-
Jenis operasi yang dilakukan pada sumber daya.
Nilai yang valid: (
CREATE|UPDATE|DELETE) - Nomor garis
-
Nomor baris dalam template yang terkait dengan perubahan.
- SebelumnyaKonteks
-
String JSON properti sumber daya sebelum perubahan:
{"properties": {"property1": "value"}} - Sesudah Konteks
-
String JSON properti sumber daya setelah perubahan:
{"properties": {"property1": "new value"}}
Contoh input operasi set perubahan Guard
Input contoh berikut menunjukkan Guard Hook yang akan menerima template lengkap, template yang digunakan sebelumnya, dan daftar perubahan sumber daya. Template dalam contoh ini menggunakan format JSON.
HookContext: AwsAccountId: "00000000" StackId: MyStack HookTypeName: org::templatechecker::hook HookTypeVersion: "00001" InvocationPoint: UPDATE_PRE_PROVISION TargetName: my-example-stack TargetType:STACK TargetLogicalId: arn...:changeSet/change-set ChangeSetId: "" Resources: { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "amzn-s3-demo-bucket", "VersioningConfiguration":{ "Status": "Enabled" } } } Previous: { "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "S3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "BucketName": "amzn-s3-demo-bucket", "VersioningConfiguration":{ "Status": "Suspended" } } } } } Changes: [ { "logicalResourceId": "S3Bucket", "resourceType": "AWS::S3::Bucket", "action": "UPDATE", "lineNumber": 5, "beforeContext": "{\"Properties\":{\"VersioningConfiguration\":{\"Status\":\"Suspended\"}}}", "afterContext": "{\"Properties\":{\"VersioningConfiguration\":{\"Status\":\"Enabled\"}}}" } ]
Aturan jaga untuk operasi set perubahan
Contoh berikut adalah aturan Guard yang mengevaluasi perubahan pada bucket Amazon S3, dan memastikannya VersionConfiguration tidak dinonaktifkan.
let s3_buckets_changing = Changes[resourceType == 'AWS::S3::Bucket'] rule S3_VERSIONING_STAY_ENABLED when %s3_buckets_changing !empty { let afterContext = json_parse(%s3_buckets_changing.afterContext) when %afterContext.Properties.VersioningConfiguration.Status !empty { %afterContext.Properties.VersioningConfiguration.Status == 'Enabled' } }