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
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 CfnGuardValidator
CfnGuardValidator
Plugin ini dilengkapi dengan satu set kontrol proaktif AWS Control Tower yang terpasang di dalamnya. Seperangkat aturan saat ini dapat ditemukan dalam dokumentasi proyek
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
skrippackage.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.