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-Validierung zum Zeitpunkt der Synthese
Validierung zum Zeitpunkt der Synthese
Ihre AWS CDK-Anwendung generiert bei der Synthese eine Infrastrukturbeschreibung in Form von CloudFormation Vorlagen. Diese Vorlagen werden unmittelbar nach der Synthese validiert. Das AWS CDK verfügt über einen integrierten Satz von Validierungsregeln, den Sie mit anderen CDK-specific Validierungstools wie CDK Nag
Anmerkung
Die vorherigen Beta1 Schnittstellen (wie IPolicyValidationPluginBeta1PolicyValidationPluginReportBeta1, und die policyValidationBeta1 Eigenschaft onStage) wurden auf stabile Äquivalente ohne Suffix (z. B.,) herabgestuft. IPolicyValidationPlugin PolicyValidationPluginReport Die Beta1 Schnittstellen sind veraltet, funktionieren aber weiterhin. Die empfohlene Methode zur Registrierung von Validierungs-Plugins erfolgt jetzt über die Validations Klasse und nicht mehr über die policyValidationBeta1 Eigenschaft.
Was Validierung ist und was nicht
Die Validierung, die das AWS CDK zum Zeitpunkt der Synthese durchführt, ist eine nach besten Kräften durchgeführte Validierung, um die Erfahrung der Entwickler zu verbessern. Sie ist für sich genommen kein vollständiger Mechanismus zur Einhaltung von Standards. Sie validiert Vorlagen, die normalerweise von einer CDK-App generiert werden, hat jedoch keinen Einfluss auf Aktionen, die außerhalb der Synthese stattfinden. Zum Beispiel Aktionen, die direkt in der Konsole oder über Service-APIs ausgeführt werden. Da CDK-Apps in einer Allzweck-Programmiersprache geschrieben sind, sind entschlossene Entwickler außerdem in der Lage, den Validierungsmechanismus zu umgehen, wenn sie wollen. Aus diesem Grund ist die CDK-Validierung ein Shift-Left-Mechanismus zur frühzeitigen Validierung und sollte in Kombination mit einem anderen Mechanismus verwendet werden, um die gewünschten Regelsätze wie AWS CloudFormation Hooks oder Config zu validieren.AWS
Für Anwendungsentwickler
Hinzufügen von Validierungs-Plugins
Die Validierung erfolgt durch Validierungs-Plugins. Ein Standard-Plugin, das einen umfassenden Regelsatz für AWS-Ressourcen verwendet, wird Ihrer Anwendung automatisch hinzugefügt, basierend auf @ aws/cloudformation -validateValidations Klasse:
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());
Unmittelbar nach der Synthese werden alle auf diese Weise registrierten Plugins aufgerufen, um alle in dem von Ihnen definierten Bereich generierten Vorlagen zu validieren. Insbesondere wenn Sie die Vorlagen im App Objekt registrieren, werden alle Vorlagen einer Validierung unterzogen.
Warnung
Plugins haben vollen Zugriff auf Ihren Computer, wenn sie ausgeführt werden. Es liegt in Ihrer Verantwortung als Nutzer eines Plugins, zu überprüfen, ob es aus einer vertrauenswürdigen Quelle stammt.
Validierungsbericht
Wenn Sie die AWS CDK-App synthetisieren, werden die Validator-Plugins aufgerufen und die Ergebnisse werden gedruckt. Ein Beispielbericht wird unten angezeigt.
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' ...
Standardmäßig wird der Bericht in einem für Menschen lesbaren Format gedruckt. Wenn Sie einen Bericht im JSON-Format wünschen, aktivieren Sie ihn @aws-cdk/core:validationReportJson über die 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.json cdk.context.json Oder-Dateien in Ihrem Projektverzeichnis festlegen (siehe Kontextwerte und AWS CDK).
Wenn Sie das JSON-Format wählen, druckt das AWS CDK den Richtlinienvalidierungsbericht in einer Datei aus, die policy-validation-report.json im Cloud-Assembly-Verzeichnis aufgerufen wird. Für das menschenlesbare Standardformat wird der Bericht in der Standardausgabe gedruckt.
Bestätigen von Warnungen
Wenn Sie eine Warnung oder einen Fehler bewertet haben und zu dem Schluss gekommen sind, dass er nicht auf Sie zutrifft, können Sie ihn mithilfe der acknowledge Methode unterdrücken. Die Unterdrückung ist bereichsabhängig und gilt für alle Konstrukte innerhalb des angegebenen Bereichs.
import { Validations } from 'aws-cdk-lib'; Validations.of(myConstruct).acknowledge({ id: 'PluginName::MyWarningId', reason: 'This is acceptable for our use case', });
Der id verwendet ein :: Trennzeichen, um das Präfix der Validierungsquelle vom Regelnamen zu trennen (z. B. oder). Construct-Annotations:: AwsSolutions-S1::
AWS CloudFormation Guard-Plugin
Mit dem CfnGuardValidatorCfnGuardValidator Plugin verfügt über einen ausgewählten Satz von integrierten proaktiven AWS Control Tower Tower-Steuerungen. Das aktuelle Regelwerk finden Sie in der Projektdokumentation
Für AWS Control Tower Tower-Kunden können dieselben proaktiven Kontrollen in Ihrem gesamten Unternehmen eingesetzt werden. Wenn Sie die proaktiven AWS Control Tower Tower-Steuerungen in Ihrer AWS Control Tower Tower-Umgebung aktivieren, können die Kontrollen den Einsatz von nicht konformen Ressourcen verhindern, die über AWS CloudFormation bereitgestellt werden. Weitere Informationen zu verwalteten proaktiven Kontrollen und deren Funktionsweise finden Sie in der AWS Control Tower Tower-Dokumentation.
Diese im AWS CDK-Paket enthaltenen Steuerungen und die proaktiven Managed AWS Control Tower Tower-Kontrollen lassen sich am besten zusammen verwenden. In diesem Szenario können Sie dieses Validierungs-Plugin mit denselben proaktiven Kontrollen konfigurieren, die in Ihrer AWS Control Tower Tower-Cloud-Umgebung aktiv sind. Sie können sich dann schnell darauf verlassen, dass Ihre AWS CDK-Anwendung die AWS Control Tower-Kontrollen besteht, indem sie cdk synth lokal ausgeführt wird.
AWS CDK Nag-Plugin
Sie können CDK Nag
Für Konstruktautoren: Direktes Hinzufügen von Warnungen und Fehlern
Die Validations Klasse bietet auch Methoden, um benutzerdefinierte Warnungen und Fehler direkt zu Ihren Konstrukten hinzuzufügen. Sie können diesen Mechanismus verwenden, um Fehlkonfigurationen direkt in Ihrem Konstrukt zu melden, ohne ein Validierungs-Plugin implementieren zu müssen. Die Validierungen und Fehler, die Sie auf diese Weise hinzufügen, werden zusammen mit den von den Validierungs-Plugins festgestellten Verletzungen gemeldet.
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');
Für Plugin-Autoren
Das AWS CDK-Kernframework ist dafür verantwortlich, Plugins zu registrieren und aufzurufen und dann den formatierten Validierungsbericht anzuzeigen. Die Verantwortung des Plugins besteht darin, als Übersetzungsebene zwischen dem AWS CDK-Framework und einem externen Tool zur Überprüfung von Richtlinien zu fungieren, auf das Ihr Plugin beispielsweise zugreifen kann. Ein Plugin kann in jeder Sprache erstellt werden, die von AWS CDK unterstützt wird. Wenn Sie ein Plugin erstellen, das möglicherweise in mehreren Sprachen verwendet wird, wird empfohlen, das Plugin in zu erstellen, TypeScript sodass Sie JSII verwenden können, um das Plugin in jeder AWS CDK-Sprache zu veröffentlichen.
Plugins erstellen
Das Kommunikationsprotokoll zwischen dem AWS CDK-Kernmodul und Ihrem Policy-Tool wird durch die IPolicyValidationPlugin Schnittstelle definiert. Um ein neues Plugin zu erstellen, müssen Sie eine Klasse schreiben, die diese Schnittstelle implementiert. Es gibt zwei Dinge, die du implementieren musst: den Namen des Plugins (indem du die name Eigenschaft überschreibst) und die validate() Methode.
Das Framework ruft auf validate() und übergibt ein IPolicyValidationContext Objekt. Der Speicherort der zu validierenden Vorlagen ist gegeben durchtemplatePaths. Das Plugin sollte eine Instanz von zurückgebenPolicyValidationPluginReport. Dieses Objekt stellt den Bericht dar, den der Benutzer am Ende der Synthese erhält.
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', }], }], }; }
Beachten Sie, dass Plugins nichts in der Cloud-Assembly ändern dürfen. Jeder Versuch, dies zu tun, führt zu einem Synthesefehler.
Wenn Ihr Plugin von einem externen Tool abhängt, für das Sie sich entscheiden, denken Sie daran, dass einige Entwickler dieses Tool möglicherweise noch nicht auf ihren Workstations installiert haben. Um Reibungsverluste zu minimieren, stellen Sie Ihrem Plugin-Paket ein Installationsskript zur Verfügung, um den Installationsvorgang zu automatisieren.
Umgang mit Ausnahmen
Wenn Ihre Organisation über einen Mechanismus zur Behandlung von Ausnahmen verfügt, kann dieser als Teil des Validator-Plug-ins implementiert werden.
Ein Beispielszenario zur Veranschaulichung eines möglichen Ausnahmemechanismus:
-
In einer Organisation gilt die Regel, dass öffentliche Amazon S3 S3-Buckets nicht erlaubt sind, außer in bestimmten Szenarien.
-
Ein Entwickler erstellt einen Amazon S3 S3-Bucket, der unter eines dieser Szenarien fällt, und beantragt eine Ausnahme (z. B. ein Ticket erstellen).
-
Sicherheitstools können aus dem internen System, das Ausnahmen registriert, lesen
In diesem Szenario würde der Entwickler eine Ausnahme im internen System beantragen und dann eine Möglichkeit benötigen, diese Ausnahme zu „registrieren“. Als Ergänzung zum Beispiel für das Guard-Plugin könnten Sie ein Plugin erstellen, das Ausnahmen behandelt, indem es die Verstöße herausfiltert, für die es eine entsprechende Ausnahme in einem internen Ticketsystem gibt.
Beispiele für Implementierungen finden Sie in den vorhandenen Plugins.