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
Argomenti
Convalida delle politiche al momento della sintesi
Se tu o la tua organizzazione utilizzate uno strumento di convalida delle politiche, ad esempio AWS CloudFormation Guardo OPA
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 il servizio. APIs 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 il plug-in API 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'App
oggetto, 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 CfnGuardValidatorCfnGuardValidator
plugin è dotato di un set selezionato di controlli AWS Control Tower proattivi integrati. L'attuale set di regole è disponibile nella documentazione del progetto
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: 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
Per impostazione predefinita, il rapporto verrà stampato in un formato leggibile dall'uomo. Se desideri un report in JSON formato, abilitalo utilizzando il @aws-cdk/core:validationReportJson
tramite CLI o passandolo direttamente all'applicazione:
const app = new App({ context: { '@aws-cdk/core:validationReportJson': true }, });
In alternativa, è possibile impostare questa coppia chiave-valore di contesto utilizzando i cdk.context.json
file cdk.json
or nella directory del progetto (vedi). I valori di contesto e il AWS CDK
Se scegli il JSON formato, 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 poterlo 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'IPolicyValidationPluginBeta1
interfaccia. 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. Ad esempio, puoi aggiungerlo allo postinstall
scriptpackage.json
file. npm
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.