AWS CDK Richtlinienvalidierung zur Synthetisierungszeit - AWS Cloud Development Kit (AWS CDK) v2

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 in die Wartung aufgenommen und der Support wurde am 1. Juni 2023 eingestellt.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS CDK Richtlinienvalidierung zur Synthetisierungszeit

Richtlinienvalidierung zur Synthetisierungszeit

Wenn Sie oder Ihre Organisation ein Richtlinienvalidierungstool wie AWS CloudFormation Guard oder OPA verwenden, um Einschränkungen für Ihre AWS CloudFormation Vorlage zu definieren, können Sie diese AWS CDK zur Generierungszeit in die integrieren. Durch die Verwendung des entsprechenden Richtlinienvalidierungs-Plugins können Sie die AWS CDK Anwendung veranlassen, die generierte AWS CloudFormation Vorlage unmittelbar nach der Generierung anhand Ihrer Richtlinien zu überprüfen. Wenn Verstöße vorliegen, schlägt die Synthetisierung fehl und ein Bericht wird in die Konsole gedruckt.

Die Validierung, die von AWS CDK der zur Generierungszeit durchgeführt wird, validiert die Kontrollen an einem Punkt im Bereitstellungszyklus, kann sich jedoch nicht auf Aktionen auswirken, die außerhalb der Generierung auftreten. Beispiele hierfür sind Aktionen, die direkt in der Konsole oder über Service-APIs durchgeführt werden. Sie sind nicht widerstandsfähig gegenüber Änderungen von AWS CloudFormation Vorlagen nach der Synthetisierung. Ein anderer Mechanismus zur Validierung desselben Regelsatzes sollte unabhängig voneinander eingerichtet werden, z. B. AWS CloudFormation Hooks oder AWS Config. Die Fähigkeit des , den Regelsatz während der Entwicklung AWS CDK auszuwerten, ist jedoch weiterhin nützlich, da dies die Erkennungsgeschwindigkeit und die Produktivität der Entwickler verbessert.

Ziel der AWS CDK Richtlinienvalidierung ist es, den Einrichtungsaufwand für die Entwicklung zu minimieren und ihn so einfach wie möglich zu machen.

Anmerkung

Diese Funktion gilt als experimentell, und sowohl die Plugin-API als auch das Format des Validierungsberichts können sich in Zukunft ändern.

Für Anwendungsentwickler

Um ein oder mehrere Validierungs-Plugins in Ihrer Anwendung zu verwenden, verwenden Sie die -policyValidationBeta1Eigenschaft von 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: [...], });

Unmittelbar nach der Synthetisierung werden alle auf diese Weise registrierten Plugins aufgerufen, um alle Vorlagen zu validieren, die in dem von Ihnen definierten Bereich generiert wurden. Insbesondere wenn Sie die Vorlagen im App Objekt registrieren, werden alle Vorlagen validiert.

Warnung

Plugins können nicht nur die Cloud-Baugruppe ändern, sondern alles tun, was Ihre AWS CDK Anwendung kann. Sie können Daten aus dem Dateisystem lesen, auf das Netzwerk zugreifen usw. Es liegt in Ihrer Verantwortung als Konsument eines Plugins zu überprüfen, ob es sicher ist.

AWS CloudFormation Guard -Plugin

Mit dem CfnGuardValidator Plugin können Sie verwenden, AWS CloudFormation Guard um Richtlinienvalidierungen durchzuführen. Das CfnGuardValidator Plugin verfügt über eine Reihe von integrierten AWS Control Tower proaktiven Kontrollen. Der aktuelle Regelsatz finden Sie in der Projektdokumentation . Wie in erwähntRichtlinienvalidierung zur Synthetisierungszeit, empfehlen wir Organisationen, eine autoritativere Validierungsmethode mit AWS CloudFormation Hooks einzurichten.

FürAWS Control Tower Kunden können dieselben proaktiven Kontrollen in Ihrer gesamten Organisation eingesetzt werden. Wenn Sie AWS Control Tower proaktive Kontrollen in Ihrer AWS Control Tower Umgebung aktivieren, können diese die Bereitstellung nicht konformer Ressourcen, die über bereitgestellt werden, stoppen AWS CloudFormation. Weitere Informationen zu verwalteten proaktiven Kontrollen und deren Funktionsweise finden Sie in der AWS Control Tower -Dokumentation.

Diese AWS CDK gebündelten Kontrollen und verwalteten AWS Control Tower proaktiven Kontrollen werden am besten zusammen verwendet. In diesem Szenario können Sie dieses Validierungs-Plugin mit denselben proaktiven Kontrollen konfigurieren, die in Ihrer AWS Control Tower Cloud-Umgebung aktiv sind. Sie können sich dann schnell darauf verlassen, dass Ihre AWS CDK Anwendung die AWS Control Tower Kontrollen durch cdk synth lokales Ausführen übergibt.

Validierungsbericht

Wenn Sie die AWS CDK App synthetisieren, werden die Validator-Plugins aufgerufen und die Ergebnisse werden gedruckt. Ein Beispielbericht wird unten angezeigt.

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: my-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

Standardmäßig wird der Bericht in einem für Menschen lesbaren Format gedruckt. Wenn Sie einen Bericht im JSON-Format erstellen möchten, aktivieren Sie ihn über @aws-cdk/core:validationReportJsondie CLI oder übergeben Sie ihn direkt an die Anwendung:

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

Alternativ können Sie dieses Kontext-Schlüssel-Wert-Paar mithilfe der cdk.context.json Dateien cdk.json oder in Ihrem Projektverzeichnis festlegen (siehe Laufzeitkontext).

Wenn Sie das JSON-Format wählen, AWS CDK druckt die den Richtlinienvalidierungsbericht in einer Datei namens policy-validation-report.json im Cloud-Assembly-Verzeichnis. Für das lesbare Standardformat wird der Bericht in die Standardausgabe gedruckt.

Für Plugin-Autoren

Plug-ins

Das AWS CDK Kern-Framework ist für die Registrierung und den Aufruf von Plugins und die anschließende Anzeige des formatierten Validierungsberichts verantwortlich. Die Verantwortung des Plugins besteht darin, als Übersetzungsebene zwischen dem AWS CDK Framework und dem Richtlinienvalidierungstool zu fungieren. Ein Plugin kann in jeder von unterstützten Sprache erstellt werden AWS CDK. Wenn Sie ein Plugin erstellen, das möglicherweise von mehreren Sprachen verwendet wird, wird empfohlen, das Plugin in zu erstellen, TypeScript damit Sie JSII verwenden können, um das Plugin in jeder AWS CDK Sprache zu veröffentlichen.

Erstellen von Plugins

Das Kommunikationsprotokoll zwischen dem AWS CDK Kernmodul und Ihrem Richtlinientool wird durch die -IPolicyValidationPluginBeta1Schnittstelle definiert. Um ein neues Plugin zu erstellen, müssen Sie eine Klasse schreiben, die diese Schnittstelle implementiert. Es gibt zwei Dinge, die Sie implementieren müssen: den Plugin-Namen (durch Überschreiben der name Eigenschaft) und die validate() Methode.

Das Framework ruft auf validate()und übergibt ein IValidationContextBeta1 Objekt. Der Speicherort der zu validierenden Vorlagen wird von angegebentemplatePaths. Das Plugin sollte eine Instance von zurückgebenValidationPluginReportBeta1. Dieses Objekt stellt den Bericht dar, den der Benutzer am Ende der Generierung erhält.

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', }], }], }; }

Beachten Sie, dass Plugins nichts an der Cloud-Baugruppe ändern dürfen. Jeder Versuch, dies zu tun, führt zu einem Generierungsfehler.

Wenn Ihr Plugin von einem externen Tool abhängt, denken Sie daran, dass einige Entwickler dieses Tool möglicherweise noch nicht auf ihren Workstations installiert haben. Um die Reibung zu minimieren, empfehlen wir dringend, dass Sie ein Installationsskript zusammen mit Ihrem Plugin-Paket bereitstellen, um den gesamten Prozess zu automatisieren. Führen Sie dieses Skript noch besser als Teil der Installation Ihres Pakets aus. Mit können Sie es npmbeispielsweise dem postinstallSkript in der -package.jsonDatei hinzufügen.

Umgang mit Ausnahmen

Wenn Ihre Organisation über einen Mechanismus für den Umgang mit Ausnahmen verfügt, kann dieser als Teil des Validator-Plugins implementiert werden.

Ein Beispielszenario zur Veranschaulichung eines möglichen Befreiungsmechanismus:

  • Eine Organisation hat die Regel, dass öffentliche Amazon S3-Buckets nicht zulässig sind, mit Ausnahme von in bestimmten Szenarien.

  • Ein Entwickler erstellt einen Amazon S3-Bucket, der unter eines dieser Szenarien fällt, und fordert eine Befreiung an (z. B. ein Ticket erstellen).

  • Sicherheitstools wissen, wie aus dem internen System gelesen wird, das Ausnahmen registriert

In diesem Szenario würde der Entwickler eine Ausnahme im internen System anfordern und dann eine Möglichkeit benötigen, diese Ausnahme zu „registrieren“. Wenn Sie zum Beispiel des Guard-Plugins hinzufügen, können Sie ein Plugin erstellen, das Ausnahmen behandelt, indem Sie die Verstöße herausfiltern, für die eine entsprechende Befreiung in einem internen Ticketing-System gilt.

Beispiele für Implementierungen finden Sie in den vorhandenen Plugins.