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 CDK pada waktu sintesis
Validasi pada waktu sintesis
Aplikasi AWS CDK Anda menghasilkan deskripsi infrastruktur pada waktu sintesis dalam bentuk CloudFormation templat. Template tersebut divalidasi segera setelah sintesis. AWS CDK dilengkapi dengan seperangkat aturan validasi bawaan, yang dapat Anda perluas dengan alat CDK-specific validasi lain seperti CDK Nag
catatan
Beta1Antarmuka sebelumnya (sepertiIPolicyValidationPluginBeta1,PolicyValidationPluginReportBeta1, dan policyValidationBeta1 properti aktifStage) telah dinaikkan ke ekuivalen stabil tanpa akhiran (misalnya,,). IPolicyValidationPlugin PolicyValidationPluginReport Beta1Antarmuka tidak digunakan lagi tetapi terus berfungsi. Cara yang disarankan untuk mendaftarkan plugin validasi sekarang melalui Validations kelas daripada properti. policyValidationBeta1
Apa validasi itu dan tidak
Validasi yang dilakukan oleh AWS CDK pada waktu sintesis adalah validasi upaya terbaik untuk meningkatkan pengalaman pengembang; itu bukan mekanisme kepatuhan standar penuh dengan sendirinya. Ini memvalidasi template yang dihasilkan secara normal oleh aplikasi CDK, tetapi tidak dapat memengaruhi tindakan yang terjadi di luar sintesis. Misalnya, tindakan yang diambil langsung di konsol atau melalui API layanan. Selain itu, karena aplikasi CDK ditulis dalam bahasa pemrograman tujuan umum, pengembang yang ditentukan dapat melewati mekanisme validasi jika mereka mau. Itulah sebabnya validasi CDK adalah mekanisme shift-left untuk memvalidasi lebih awal, dan harus digunakan dalam kombinasi dengan mekanisme lain untuk memvalidasi kumpulan aturan yang diinginkan seperti hook atau Config.AWS CloudFormation AWS
Untuk pengembang aplikasi
Menambahkan plugin validasi
Validasi dilakukan oleh plugin validasi. Plugin default yang menggunakan aturan komprehensif yang ditetapkan untuk sumber daya AWS secara otomatis ditambahkan ke aplikasi Anda, berdasarkan @ aws/cloudformation -validateValidations kelas:
import { Validations } from 'aws-cdk-lib'; import { CfnGuardValidator } from '@cdklabs/cdk-validator-cfnguard'; const app = new App(); // Add a validation plugin to the entire app Validations.of(app).addPlugins(new CfnGuardValidator()); // Or add to a particular stage const prodStage = new Stage(app, 'ProdStage'); Validations.of(prodStage).addPlugins(new CfnGuardValidator());
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
Plugin memiliki akses penuh ke mesin Anda saat sedang berjalan. Adalah tanggung jawab Anda sebagai konsumen plugin untuk memverifikasi bahwa itu berasal dari sumber tepercaya.
Laporan Validasi
Saat Anda mensintesis aplikasi AWS CDK, plugin validator akan dipanggil dan hasilnya akan dicetak. Contoh laporan ditampilkan di bawah ini.
lib/my-custom-l3-construct.ts:10:5 ERROR [CT.S3.PR.1]: Require an Amazon S3 bucket to have block public access settings configured (cdk-validator-cfnguard) MyStack/MyCustomL3Construct/Bucket/Resource (MyCustomL3ConstructBucket8C61BCA7) constructs.Construct Suggested fix: [FIX]: The parameters 'BlockPublicAcls', 'BlockPublicPolicy', 'IgnorePublicAcls', 'RestrictPublicBuckets' must be set to true under the bucket-level 'PublicAccessBlockConfiguration'. Acknowledge with 'cdk-validator-cfnguard::s3_bucket_level_public_access_prohibited_check' lib/my-custom-l3-construct.ts:10:5 ERROR [CT.S3.PR.10]: Require an Amazon S3 bucket to have server-side encryption configured using an AWS KMS key (cdk-validator-cfnguard) MyStack/MyCustomL3Construct/Bucket/Resource (MyCustomL3ConstructBucket8C61BCA7) constructs.Construct Suggested fix: [FIX]: Set an encryption rule in 'BucketEncryption.ServerSideEncryptionConfiguration' with a 'ServerSideEncryptionByDefault.SSEAlgorithm' configuration of 'aws:kms' or 'aws:kms:dsse' Acknowledge with 'cdk-validator-cfnguard::s3_bucket_default_encryption_kms_check' ...
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.
Mengakui peringatan
Jika Anda telah mengevaluasi peringatan atau kesalahan dan menganggapnya tidak berlaku untuk Anda, Anda dapat menekannya menggunakan metode ini. acknowledge Penindasan berbasis cakupan, dan berlaku untuk semua konstruksi di bawah lingkup yang diberikan.
import { Validations } from 'aws-cdk-lib'; Validations.of(myConstruct).acknowledge({ id: 'PluginName::MyWarningId', reason: 'This is acceptable for our use case', });
idMenggunakan :: pembatas untuk memisahkan awalan sumber validasi dari nama aturan (misalnya, atau). Construct-Annotations:: AwsSolutions-S1::
AWS CloudFormation Plugin penjaga
Menggunakan CfnGuardValidatorCfnGuardValidatorPlugin 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.
AWS Plugin CDK Nag
Anda dapat menggunakan CDK Nag
Untuk penulis konstruksi: menambahkan peringatan dan kesalahan secara langsung
ValidationsKelas ini juga menyediakan metode untuk menambahkan peringatan dan kesalahan khusus ke konstruksi Anda secara langsung. Anda dapat menggunakan mekanisme ini untuk melaporkan kesalahan konfigurasi secara langsung pada konstruksi Anda tanpa harus mengimplementasikan plugin validasi. Validasi dan kesalahan yang Anda tambahkan dengan cara ini akan dilaporkan bersama dengan pelanggaran yang ditemukan oleh plugin validasi.
import { Validations } from 'aws-cdk-lib'; const bucket = new s3.Bucket(this, 'MyBucket'); // Add a warning Validations.of(bucket).addWarning('MyWarningId', 'This bucket does not have versioning enabled'); // Add an error (will cause synthesis to fail) Validations.of(bucket).addError('MyErrorId', 'This bucket must have encryption enabled');
Untuk penulis 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 eksternal yang mungkin dikeluarkan oleh plugin Anda misalnya. 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 IPolicyValidationPlugin 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 IPolicyValidationContext objek. Lokasi template yang akan divalidasi diberikan olehtemplatePaths. Plugin harus mengembalikan instance dariPolicyValidationPluginReport. Objek ini mewakili laporan yang akan diterima pengguna pada akhir sintesis.
validate(context: IPolicyValidationContext): PolicyValidationPluginReport { // 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 yang Anda gunakan, perlu diingat bahwa beberapa pengembang mungkin belum menginstal alat itu di workstation mereka. Untuk meminimalkan gesekan, berikan beberapa skrip instalasi bersama dengan paket plugin Anda untuk mengotomatiskan proses instalasi.
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.