AWS CDK convalida delle politiche al momento della sintesi - AWS Cloud Development Kit (AWS CDK) v2

Questa è la guida per sviluppatori AWS CDK v2. La versione precedente della CDK versione 1 è entrata in manutenzione il 1° giugno 2022 e ha terminato il supporto il 1° giugno 2023.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS CDK convalida delle politiche al momento della sintesi

Convalida delle politiche al momento della sintesi

Se tu o la tua organizzazione utilizzate uno strumento di convalida delle politiche, come AWS CloudFormation Guardl'OPA, per definire i vincoli sul AWS CloudFormation modello, potete integrarli con at synthesis. AWS CDK Utilizzando il plug-in di convalida delle politiche appropriato, potete fare in modo che l' AWS CDK applicazione verifichi il AWS CloudFormation modello generato rispetto alle vostre politiche subito dopo la sintesi. In caso di violazioni, la sintesi avrà esito negativo e un rapporto verrà stampato sulla console.

La convalida eseguita AWS CDK al momento della sintesi convalida i controlli a un certo punto del ciclo di vita dell'implementazione, ma non può influire sulle azioni che avvengono al di fuori della sintesi. Gli esempi includono le azioni intraprese direttamente nella console o tramite le API di servizio. Non resistono all'alterazione dei AWS CloudFormation modelli dopo la sintesi. Qualche altro meccanismo per convalidare lo stesso set di regole in modo più autorevole dovrebbe essere impostato indipendentemente, come hook o.AWS CloudFormationAWS Config Tuttavia, la capacità di valutare il set AWS CDK di regole durante lo sviluppo è ancora utile in quanto migliorerà la velocità di rilevamento e la produttività degli sviluppatori.

L'obiettivo della convalida delle AWS CDK policy è ridurre al minimo la quantità di configurazione necessaria durante lo sviluppo e renderlo il più semplice possibile.

Nota

Questa funzionalità è considerata sperimentale e sia l'API del plug-in che il formato del rapporto di convalida sono soggetti a modifiche in futuro.

Per gli sviluppatori di applicazioni

Per utilizzare uno o più plugin di convalida nell'applicazione, utilizzate la policyValidationBeta1 proprietà di: 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: [...], });

Immediatamente dopo la sintesi, tutti i plugin registrati in questo modo verranno richiamati per convalidare tutti i modelli generati nell'ambito definito. In particolare, se si registrano i modelli nell'Appoggetto, tutti i modelli saranno soggetti a convalida.

avvertimento

Oltre a modificare l'assembly cloud, i plugin possono fare tutto ciò che può fare l' AWS CDK applicazione. Possono leggere i dati dal filesystem, accedere alla rete ecc. È tua responsabilità, in qualità di consumatore di un plug-in, verificare che sia sicuro da usare.

AWS CloudFormation Guard plugin

L'utilizzo del CfnGuardValidatorplug-in consente di AWS CloudFormation Guardeseguire convalide delle politiche. Il CfnGuardValidator plugin è dotato di un set selezionato di controlli AWS Control Tower proattivi integrati. L'attuale set di regole è disponibile nella documentazione del progetto. Come accennato inConvalida delle politiche al momento della sintesi, raccomandiamo alle organizzazioni di impostare un metodo di convalida più autorevole utilizzando gli hook.AWS CloudFormation

Per AWS Control Toweri clienti, questi stessi controlli proattivi possono essere implementati in tutta l'organizzazione. Quando abiliti i controlli AWS Control Tower proattivi nel tuo AWS Control Tower ambiente, i controlli possono impedire l'implementazione di risorse non conformi distribuite tramite. AWS CloudFormationPer ulteriori informazioni sui controlli proattivi gestiti e su come funzionano, consulta la documentazione.AWS Control Tower

Questi controlli AWS CDK raggruppati e i controlli AWS Control Tower proattivi gestiti vengono utilizzati al meglio insieme. In questo scenario puoi configurare questo plug-in di convalida con gli stessi controlli proattivi attivi nel tuo ambiente cloud. AWS Control Tower Potrai quindi acquisire rapidamente la certezza che la tua AWS CDK applicazione supererà i AWS Control Tower controlli cdk synth eseguendo localmente.

Rapporto di convalida

Quando sintetizzi l' AWS CDK app, verranno richiamati i plugin di convalida e i risultati verranno stampati. Di seguito è riportato un esempio di rapporto.

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

Per impostazione predefinita, il rapporto verrà stampato in un formato leggibile dall'uomo. Se desideri un report in formato JSON, abilitalo utilizzando la @aws-cdk/core:validationReportJson CLI o passandolo direttamente all'applicazione:

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

In alternativa, puoi impostare questa coppia chiave-valore di contesto usando cdk.context.json i file cdk.json o nella directory del tuo progetto (vedi). I valori di contesto e il AWS CDK

Se scegli il formato JSON, AWS CDK stamperà il rapporto di convalida delle politiche in un file chiamato policy-validation-report.json nella directory di cloud assembly. Per il formato predefinito, leggibile dall'uomo, il report verrà stampato sullo standard output.

Per gli autori di plugin

Plug-in

Il framework AWS CDK principale è responsabile della registrazione e dell'invocazione dei plugin e della successiva visualizzazione del rapporto di convalida formattato. La responsabilità del plugin è quella di fungere da livello di traduzione tra il AWS CDK framework e lo strumento di convalida delle politiche. Un plugin può essere creato in qualsiasi lingua supportata da AWS CDK. Se stai creando un plug-in che potrebbe essere utilizzato da più lingue, ti consigliamo di crearlo in TypeScript modo da poter utilizzare JSII per pubblicare il plug-in in ogni AWS CDK lingua.

Creazione di plugin

Il protocollo di comunicazione tra il modulo AWS CDK principale e lo strumento di policy è definito dall'IPolicyValidationPluginBeta1interfaccia. Per creare un nuovo plugin è necessario scrivere una classe che implementi questa interfaccia. Ci sono due cose che devi implementare: il nome del plugin (sovrascrivendo la name proprietà) e il validate() metodo.

Il framework chiameràvalidate(), passando un IValidationContextBeta1 oggetto. La posizione dei modelli da convalidare è data datemplatePaths. Il plugin dovrebbe restituire un'istanza di. ValidationPluginReportBeta1 Questo oggetto rappresenta il rapporto che l'utente riceverà alla fine della sintesi.

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

Nota che i plugin non sono autorizzati a modificare nulla nell'assembly cloud. Qualsiasi tentativo in tal senso comporterà un errore di sintesi.

Se il tuo plugin dipende da uno strumento esterno, tieni presente che alcuni sviluppatori potrebbero non avere ancora installato questo strumento nelle loro workstation. Per ridurre al minimo l'attrito, ti consigliamo vivamente di fornire uno script di installazione insieme al pacchetto del plugin, per automatizzare l'intero processo. Meglio ancora, esegui lo script come parte dell'installazione del pacchetto. Connpm, ad esempio, puoi aggiungerlo allo postinstall script nel package.json file.

Gestione delle esenzioni

Se l'organizzazione dispone di un meccanismo per la gestione delle esenzioni, può essere implementato come parte del plugin di convalida.

Uno scenario di esempio per illustrare un possibile meccanismo di esenzione:

  • Un'organizzazione ha una regola secondo cui i bucket Amazon S3 pubblici non sono consentiti, tranne in determinati scenari.

  • Uno sviluppatore sta creando un bucket Amazon S3 che rientra in uno di questi scenari e richiede un'esenzione (ad esempio, crea un ticket).

  • Gli strumenti di sicurezza sanno leggere dal sistema interno che registra le esenzioni

In questo scenario lo sviluppatore richiederebbe un'eccezione nel sistema interno e quindi avrà bisogno di un modo per «registrare» tale eccezione. Oltre all'esempio del plugin guard, potresti creare un plug-in che gestisca le esenzioni filtrando le violazioni che hanno un'esenzione corrispondente in un sistema di ticketing interno.

Vedi i plugin esistenti per esempio per le implementazioni.