View a markdown version of this page

Tulis aturan Guard untuk mengevaluasi sumber daya untuk Guard Hooks - CloudFormation

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

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.

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, misalnyaAWS::S3::Bucket. Untuk sumber daya yang disediakan dengan Cloud Control API, nilai ini akan menjadiRESOURCE.

TargetLogicalId

Sumber TargetLogicalId daya 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-stack operasi create-stackupdate-stack,, atau.

Resources
ResourceLogicalID

Ketika operasi dimulai oleh CloudFormation, ResourceLogicalID adalah ID logis dari sumber daya dalam CloudFormation template.

Ketika operasi dimulai oleh Cloud Control API, itu ResourceLogicalID adalah 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, ResourceLogicalID adalah ID logis dari sumber daya dalam CloudFormation template.

Ketika operasi dimulai oleh Cloud Control API, itu ResourceLogicalID adalah 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-bucket ObjectLockEnabled: true Previous: MyS3Bucket: Type: AWS::S3::Bucket Properties: BucketName: amzn-s3-demo-bucket ObjectLockEnabled: 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-bucket ObjectLockEnabled: 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-bucket ObjectLockEnabled: 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.

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 STACK saat dijalankan sebagai Hook tingkat tumpukan.

ChangeSetId

ID set perubahan yang dieksekusi untuk menyebabkan pemanggilan Hook. Nilai ini kosong jika operasi tumpukan dimulai oleh delete-stack operasi create-stackupdate-stack,, atau.

Proposed CloudFormation Template

Nilai CloudFormation template lengkap yang diteruskan ke update-stack operasi CloudFormation create-stack atau. Ini termasuk hal-hal sepertiResources,Outputs, danProperties. Ini bisa berupa string JSON atau YAML tergantung pada apa yang disediakan. CloudFormation

Dalam delete-stack operasi, nilai ini akan kosong.

Previous

CloudFormation Template terakhir berhasil diterapkan. Nilai ini kosong jika tumpukan sedang dibuat atau dihapus.

Dalam delete-stack operasi, 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.

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_SET saat 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-stack operasi create-stackupdate-stack,, atau.

Proposed CloudFormation Template

CloudFormation Template lengkap yang disediakan untuk create-change-set operasi. 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' } }