Questa è la AWS CDK v2 Developer Guide. Il vecchio CDK v1 è entrato 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 Validazione CDK al momento della sintesi
Validazione al momento della sintesi
L'applicazione AWS CDK genera una descrizione dell'infrastruttura al momento della sintesi sotto forma di CloudFormation modelli. Questi modelli vengono convalidati immediatamente dopo la sintesi. Il AWS CDK è dotato di un set integrato di regole di convalida, che è possibile estendere con altri strumenti di CDK-specific convalida come CDK Nag
Nota
Le Beta1 interfacce precedenti (ad esempio IPolicyValidationPluginBeta1PolicyValidationPluginReportBeta1, e la policyValidationBeta1 proprietà onStage) sono state convertite in equivalenti stabili e senza suffissi (ad esempio,). IPolicyValidationPlugin PolicyValidationPluginReport Le Beta1 interfacce sono obsolete ma continuano a funzionare. Il modo consigliato per registrare i plugin di convalida ora è tramite la classe anziché la Validations proprietà. policyValidationBeta1
Cos'è e cosa non è la convalida
La convalida eseguita dal AWS CDK al momento della sintesi è la migliore soluzione per migliorare l'esperienza degli sviluppatori; di per sé non è un meccanismo completo di conformità agli standard. Convalida i modelli generati normalmente da un'app CDK, ma non può influire sulle azioni che avvengono al di fuori della sintesi. Ad esempio, azioni eseguite direttamente nella console o tramite le API di servizio. Inoltre, poiché le app CDK sono scritte in un linguaggio di programmazione generico, gli sviluppatori determinati sono in grado di aggirare il meccanismo di convalida, se lo desiderano. Ecco perché la convalida CDK è un meccanismo shift-left per la convalida anticipata e dovrebbe essere utilizzata in combinazione con un altro meccanismo per convalidare i set di regole desiderati come hooks o Config.AWS CloudFormation AWS
Per gli sviluppatori di applicazioni
Aggiungere plugin di convalida
La convalida viene eseguita dai plugin di convalida. Un plug-in predefinito che utilizza un set di regole completo per le risorse AWS viene aggiunto automaticamente all'applicazione, in base a @ aws/cloudformation -validateValidations
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());
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
I plugin hanno pieno accesso al computer quando sono in esecuzione. È tua responsabilità, in qualità di consumatore di un plug-in, verificare che provenga da una fonte attendibile.
Rapporto di convalida
Quando sintetizzi l'app AWS CDK, verranno richiamati i plugin di convalida e i risultati verranno stampati. Di seguito è riportato un esempio di rapporto.
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' ...
Per impostazione predefinita, il rapporto verrà stampato in un formato leggibile dall'uomo. Se desideri un report in formato JSON, abilitalo @aws-cdk/core:validationReportJson utilizzando la 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 utilizzando cdk.context.json i file cdk.json o nella directory del tuo progetto (vedi Valori di contesto e CDK). AWS
Se scegli il formato JSON, il AWS CDK stamperà il rapporto di convalida delle politiche in un file chiamato policy-validation-report.json nella directory di assemblaggio cloud. Per il formato predefinito, leggibile dall'uomo, il report verrà stampato sullo standard output.
Riconoscere gli avvertimenti
Se hai valutato un avviso o un errore e lo ritieni non pertinente, puoi eliminarlo utilizzando il metodo. acknowledge La soppressione è basata sull'ambito e si applica a tutti i costrutti nell'ambito specificato.
import { Validations } from 'aws-cdk-lib'; Validations.of(myConstruct).acknowledge({ id: 'PluginName::MyWarningId', reason: 'This is acceptable for our use case', });
idUtilizza un :: delimitatore per separare il prefisso dell'origine di convalida dal nome della regola (ad esempio, o). Construct-Annotations:: AwsSolutions-S1::
AWS CloudFormation Plugin Guard
L'utilizzo del CfnGuardValidatorCfnGuardValidator plug-in viene fornito con un set selezionato di controlli proattivi AWS Control Tower integrati. L'attuale set di regole è disponibile nella documentazione del progetto
Per i clienti AWS Control Tower, questi stessi controlli proattivi possono essere implementati in tutta l'organizzazione. Quando abiliti i controlli proattivi AWS Control Tower nel tuo ambiente AWS Control Tower, i controlli possono interrompere l'implementazione di risorse non conformi distribuite tramite. AWS CloudFormation Per ulteriori informazioni sui controlli proattivi gestiti e sul loro funzionamento, consulta la documentazione AWS Control Tower.
Questi controlli in bundle AWS CDK e i controlli proattivi AWS Control Tower gestiti sono utilizzati al meglio insieme. In questo scenario puoi configurare questo plug-in di convalida con gli stessi controlli proattivi attivi nell'ambiente cloud AWS Control Tower. È quindi possibile acquisire rapidamente la certezza che l'applicazione AWS CDK supererà i controlli della AWS Control Tower eseguendo cdk synth localmente.
AWS Plugin CDK Nag
Puoi usare CDK Nag
Per gli autori delle costruzioni: aggiunta diretta di avvisi ed errori
La Validations classe fornisce anche metodi per aggiungere avvisi ed errori personalizzati direttamente ai costrutti. È possibile utilizzare questo meccanismo per segnalare configurazioni errate direttamente sul costrutto senza dover implementare un plug-in di convalida. Le convalide e gli errori aggiunti in questo modo verranno segnalati insieme alle violazioni rilevate dai plugin di convalida.
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');
Per gli autori di plugin
Il framework di base AWS CDK è responsabile della registrazione e dell'invocazione dei plugin e della successiva visualizzazione del rapporto di convalida formattato. La responsabilità del plug-in è quella di fungere da livello di traduzione tra il framework AWS CDK e uno strumento esterno di convalida delle politiche a cui il plug-in potrebbe, ad esempio, sborsare. 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 lingua CDK.
Creazione di plugin
Il protocollo di comunicazione tra il modulo principale AWS CDK e lo strumento di policy è definito dall'IPolicyValidationPlugininterfaccia. 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 IPolicyValidationContext oggetto. La posizione dei modelli da convalidare è data datemplatePaths. Il plugin dovrebbe restituire un'istanza di. PolicyValidationPluginReport Questo oggetto rappresenta il rapporto che l'utente riceverà alla fine della sintesi.
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', }], }], }; }
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 a cui devi ricorrere, tieni presente che alcuni sviluppatori potrebbero non aver ancora installato questo strumento nelle loro workstation. Per ridurre al minimo l'attrito, fornite uno script di installazione insieme al pacchetto del plugin per automatizzare il processo di installazione.
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.