AWS Validasi kebijakan CDK pada waktu sintesis - AWS Cloud Development Kit (AWS CDK) v2

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

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

AWS Validasi kebijakan CDK pada waktu sintesis

Validasi kebijakan pada waktu sintesis

Jika Anda atau organisasi Anda menggunakan alat validasi kebijakan apa pun, seperti AWS CloudFormation Guard atau OPA, untuk menentukan batasan pada AWS CloudFormation template Anda, Anda dapat mengintegrasikannya dengan CDK pada waktu sintesis. AWS Dengan menggunakan plugin validasi kebijakan yang sesuai, Anda dapat membuat aplikasi AWS CDK memeriksa AWS CloudFormation template yang dihasilkan terhadap kebijakan Anda segera setelah sintesis. Jika ada pelanggaran, sintesis akan gagal dan laporan akan dicetak ke konsol.

Validasi yang dilakukan oleh AWS CDK pada waktu sintesis memvalidasi kontrol pada satu titik dalam siklus hidup penerapan, tetapi tidak dapat memengaruhi tindakan yang terjadi di luar sintesis. Contohnya termasuk tindakan yang diambil langsung di konsol atau melalui layanan APIs. Mereka tidak tahan terhadap perubahan AWS CloudFormation template setelah sintesis. Beberapa mekanisme lain untuk memvalidasi aturan yang sama yang ditetapkan secara lebih otoritatif harus disiapkan secara independen, seperti AWS CloudFormation hook atau Config.AWS Namun demikian, kemampuan AWS CDK untuk mengevaluasi aturan yang ditetapkan selama pengembangan masih berguna karena akan meningkatkan kecepatan deteksi dan produktivitas pengembang.

Tujuan dari validasi kebijakan AWS CDK adalah untuk meminimalkan jumlah pengaturan yang diperlukan selama pengembangan, dan membuatnya semudah mungkin.

catatan

Fitur ini dianggap eksperimental, dan API plugin dan format laporan validasi dapat berubah di masa mendatang.

Untuk pengembang aplikasi

Untuk menggunakan satu atau beberapa plugin validasi dalam aplikasi Anda, gunakan policyValidationBeta1 properti: Stage

import { CfnGuardValidator } from '@cdklabs/cdk-validator-cfnguard'; const app = new App({ policyValidationBeta1: [ new CfnGuardValidator() ], }); // only apply to a particular stage const prodStage = new Stage(app, 'ProdStage', { policyValidationBeta1: [...], });

Segera setelah sintesis, semua plugin yang terdaftar dengan cara ini akan dipanggil untuk memvalidasi semua template yang dihasilkan dalam lingkup yang Anda tentukan. Secara khusus, jika Anda mendaftarkan templat di App objek, semua templat akan dikenakan validasi.

Awas

Selain memodifikasi perakitan cloud, plugin dapat melakukan apa saja yang dapat dilakukan oleh aplikasi AWS CDK Anda. Mereka dapat membaca data dari sistem file, mengakses jaringan, dll. Ini adalah tanggung jawab Anda sebagai konsumen plugin untuk memverifikasi bahwa itu aman untuk digunakan.

AWS CloudFormation Plugin penjaga

Menggunakan CfnGuardValidatorplugin memungkinkan Anda menggunakan AWS CloudFormation Guard untuk melakukan validasi kebijakan. CfnGuardValidatorPlugin ini dilengkapi dengan satu set kontrol proaktif AWS Control Tower yang terpasang di dalamnya. Seperangkat aturan saat ini dapat ditemukan dalam dokumentasi proyek. Seperti yang disebutkan dalam Validasi kebijakan pada waktu sintesis, kami menyarankan agar organisasi menyiapkan metode validasi yang lebih otoritatif menggunakan kait.AWS CloudFormation

Untuk pelanggan AWS Control Tower, kontrol proaktif yang sama ini dapat diterapkan di seluruh organisasi Anda. Saat Anda mengaktifkan AWS kontrol proaktif Control Tower di lingkungan AWS Control Tower Anda, kontrol dapat menghentikan penyebaran sumber daya yang tidak sesuai yang digunakan melalui. AWS CloudFormation Untuk informasi selengkapnya tentang kontrol proaktif terkelola dan cara kerjanya, lihat dokumentasi AWS Control Tower.

Kontrol yang dibundel AWS CDK dan kontrol proaktif AWS Control Tower terkelola ini paling baik digunakan bersama. Dalam skenario ini Anda dapat mengonfigurasi plugin validasi ini dengan kontrol proaktif yang sama yang aktif di lingkungan cloud AWS Control Tower Anda. Anda kemudian dapat dengan cepat mendapatkan keyakinan bahwa aplikasi AWS CDK Anda akan melewati AWS kontrol Control Tower dengan menjalankan secara cdk synth lokal.

Laporan Validasi

Saat Anda mensintesis aplikasi AWS CDK, plugin validator akan dipanggil dan hasilnya akan dicetak. Contoh laporan ditampilkan di bawah ini.

Validation Report (CfnGuardValidator) ------------------------------------- (Summary) ╔═══════════╤════════════════════════╗ ║ Status │ failure ║ ╟───────────┼────────────────────────╢ ║ Plugin │ CfnGuardValidator ║ ╚═══════════╧════════════════════════╝ (Violations) Ensure S3 Buckets are encrypted with a KMS CMK (1 occurrences) Severity: medium Occurrences: - Construct Path: MyStack/MyCustomL3Construct/Bucket - Stack Template Path: ./cdk.out/MyStack.template.json - Creation Stack: └── MyStack (MyStack) │ Library: aws-cdk-lib.Stack │ Library Version: 2.50.0 │ Location: Object.<anonymous> (/home/johndoe/tmp/cdk-tmp-app/src/main.ts:25:20) └── MyCustomL3Construct (MyStack/MyCustomL3Construct) │ Library: N/A - (Local Construct) │ Library Version: N/A │ Location: new MyStack (/home/johndoe/tmp/cdk-tmp-app/src/main.ts:15:20) └── Bucket (MyStack/MyCustomL3Construct/Bucket) │ Library: aws-cdk-lib/aws-s3.Bucket │ Library Version: 2.50.0 │ Location: new MyCustomL3Construct (/home/johndoe/tmp/cdk-tmp-app/src/main.ts:9:20) - Resource Name: amzn-s3-demo-bucket - Locations: > BucketEncryption/ServerSideEncryptionConfiguration/0/ServerSideEncryptionByDefault/SSEAlgorithm Recommendation: Missing value for key `SSEAlgorithm` - must specify `aws:kms` How to fix: > Add to construct properties for `cdk-app/MyStack/Bucket` `encryption: BucketEncryption.KMS` Validation failed. See above reports for details

Secara default, laporan akan dicetak dalam format yang dapat dibaca manusia. Jika Anda ingin laporan dalam format JSON, aktifkan menggunakan @aws-cdk/core:validationReportJson via CLI atau meneruskannya langsung ke aplikasi:

const app = new App({ context: { '@aws-cdk/core:validationReportJson': true }, });

Atau, Anda dapat mengatur pasangan nilai kunci konteks ini menggunakan cdk.context.json file cdk.json atau di direktori proyek Anda (lihat Nilai konteks dan AWS CDK).

Jika Anda memilih format JSON, AWS CDK akan mencetak laporan validasi kebijakan ke file yang dipanggil policy-validation-report.json di direktori perakitan cloud. Untuk format default yang dapat dibaca manusia, laporan akan dicetak ke output standar.

Untuk penulis plugin

Plugin

Kerangka inti AWS CDK bertanggung jawab untuk mendaftarkan dan memanggil plugin dan kemudian menampilkan laporan validasi yang diformat. Tanggung jawab plugin adalah bertindak sebagai lapisan terjemahan antara kerangka kerja AWS CDK dan alat validasi kebijakan. Plugin dapat dibuat dalam bahasa apa pun yang didukung oleh AWS CDK. Jika Anda membuat plugin yang mungkin dikonsumsi oleh beberapa bahasa maka disarankan agar Anda membuat plugin TypeScript sehingga Anda dapat menggunakan JSII untuk mempublikasikan plugin di setiap bahasa AWS CDK.

Membuat plugin

Protokol komunikasi antara modul inti AWS CDK dan alat kebijakan Anda ditentukan oleh IPolicyValidationPluginBeta1 antarmuka. Untuk membuat plugin baru, Anda harus menulis kelas yang mengimplementasikan antarmuka ini. Ada dua hal yang perlu Anda terapkan: nama plugin (dengan mengganti name properti), dan validate() metode.

Kerangka kerja akan memanggilvalidate(), melewati IValidationContextBeta1 objek. Lokasi template yang akan divalidasi diberikan olehtemplatePaths. Plugin harus mengembalikan instance dariValidationPluginReportBeta1. Objek ini mewakili laporan yang akan diterima pengguna pada akhir sintesis.

validate(context: IPolicyValidationContextBeta1): PolicyValidationReportBeta1 { // First read the templates using context.templatePaths... // ...then perform the validation, and then compose and return the report. // Using hard-coded values here for better clarity: return { success: false, violations: [{ ruleName: 'CKV_AWS_117', description: 'Ensure that AWS Lambda function is configured inside a VPC', fix: 'https://docs.bridgecrew.io/docs/ensure-that-aws-lambda-function-is-configured-inside-a-vpc-1', violatingResources: [{ resourceName: 'MyFunction3BAA72D1', templatePath: '/home/johndoe/myapp/cdk.out/MyService.template.json', locations: 'Properties/VpcConfig', }], }], }; }

Perhatikan bahwa plugin tidak diizinkan untuk memodifikasi apa pun di perakitan cloud. Setiap upaya untuk melakukannya akan mengakibatkan kegagalan sintesis.

Jika plugin Anda bergantung pada alat eksternal, perlu diingat bahwa beberapa pengembang mungkin belum menginstal alat itu di workstation mereka. Untuk meminimalkan gesekan, kami sangat menyarankan Anda menyediakan beberapa skrip instalasi bersama dengan paket plugin Anda, untuk mengotomatiskan seluruh proses. Lebih baik lagi, jalankan skrip itu sebagai bagian dari instalasi paket Anda. Dengannpm, misalnya, Anda dapat menambahkannya ke postinstall skrip dalam package.json file.

Penanganan Pengecualian

Jika organisasi Anda memiliki mekanisme untuk menangani pengecualian, itu dapat diimplementasikan sebagai bagian dari plugin validator.

Contoh skenario untuk mengilustrasikan mekanisme pengecualian yang mungkin:

  • Organisasi memiliki aturan bahwa bucket Amazon S3 publik tidak diizinkan, kecuali untuk skenario tertentu.

  • Pengembang membuat bucket Amazon S3 yang termasuk dalam salah satu skenario tersebut dan meminta pengecualian (buat tiket misalnya).

  • Perkakas keamanan tahu cara membaca dari sistem internal yang mendaftarkan pengecualian

Dalam skenario ini pengembang akan meminta pengecualian dalam sistem internal dan kemudian akan memerlukan beberapa cara untuk “mendaftarkan” pengecualian itu. Menambahkan ke contoh plugin penjaga, Anda dapat membuat plugin yang menangani pengecualian dengan memfilter pelanggaran yang memiliki pengecualian yang cocok dalam sistem tiket internal.

Lihat plugin yang ada misalnya implementasi.