Avvia il tuo ambiente per utilizzarlo con AWS CDK - 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à.

Avvia il tuo ambiente per utilizzarlo con AWS CDK

Avvia il tuo AWS ambiente per prepararlo alle distribuzioni in AWS Cloud Development Kit (AWS CDK) stack.

Come avviare il proprio ambiente

È possibile utilizzare l'interfaccia a AWS CDK riga di comando (AWS CDK CLI) o lo strumento di AWS CloudFormation distribuzione preferito per avviare il proprio ambiente.

Usa il CDK CLI

È possibile utilizzare il CDK CLI cdk bootstrapcomando per avviare il tuo ambiente. Questo è il metodo che consigliamo se non hai bisogno di modifiche significative al bootstrap.

Bootstrap da qualsiasi directory di lavoro

Per eseguire il bootstrap da qualsiasi directory di lavoro, fornisci l'ambiente a bootstrap come argomento della riga di comando. Di seguito è riportato un esempio:

$ cdk bootstrap aws://123456789012/us-east-1
Suggerimento

Se non disponi del tuo numero di AWS account, puoi richiederlo da. AWS Management Console Puoi anche utilizzare il seguente AWS CLI comando per visualizzare le informazioni predefinite del tuo account, incluso il numero di account:

$ aws sts get-caller-identity

Se hai dei profili denominati nei tuoi credentials file AWS config and, utilizza l'--profileopzione per recuperare le informazioni sull'account per un profilo specifico. Di seguito è riportato un esempio:

$ aws sts get-caller-identity --profile prod

Per visualizzare la regione predefinita, usa il aws configure get comando:

$ aws configure get region $ aws configure get region --profile prod

Quando si fornisce un argomento, il aws:// prefisso è facoltativo. Quanto segue è valido:

$ cdk bootstrap 123456789012/us-east-1

Per avviare più ambienti contemporaneamente, fornisci più argomenti:

$ cdk bootstrap aws://123456789012/us-east-1 aws://123456789012/us-east-2
Bootstrap dalla directory principale di un progetto CDK

È possibile eseguire cdk bootstrap dalla directory principale di un CDK progetto contenente un cdk.json file. Se non fornite un ambiente come argomento, il CDK CLI otterrà informazioni sull'ambiente da fonti predefinite, come i credentials file config and o qualsiasi informazione sull'ambiente specificata per lo CDK stack.

Quando si esegue il bootstrap dalla directory principale di un CDK progetto, gli ambienti forniti dagli argomenti della riga di comando hanno la precedenza sulle altre fonti.

Per avviare un ambiente specificato nei tuoi credentials file config and, usa l'opzione: --profile

$ cdk bootstrap --profile prod

Per ulteriori informazioni sul cdk bootstrap comando e sulle opzioni supportate, consultacdk bootstrap.

Usa qualsiasi AWS CloudFormation strumento

Puoi copiare il modello di bootstrap da aws-cdk GitHub repository o ottieni il modello con il comando. cdk bootstrap --show-template Quindi, utilizza qualsiasi AWS CloudFormation strumento per distribuire il modello nel tuo ambiente.

Con questo metodo, puoi usare AWS CloudFormation StackSets o AWS Control Tower. Puoi anche usare la AWS CloudFormation console o il AWS Command Line Interface (AWS CLI). È possibile apportare modifiche al modello prima di distribuirlo. Questo metodo può essere più flessibile e adatto per implementazioni su larga scala.

Di seguito è riportato un esempio di utilizzo dell'--show-templateopzione per recuperare e salvare il modello di bootstrap sul computer locale:

macOS/Linux
$ cdk bootstrap --show-template > bootstrap-template.yaml
Windows

In Windows, PowerShell deve essere utilizzato per preservare la codifica del modello.

powershell "cdk bootstrap --show-template | Out-File -encoding utf8 bootstrap-template.yaml"

Per distribuire questo modello utilizzando il CDK CLI, è possibile eseguire quanto segue:

$ cdk bootstrap --template bootstrap-template.yaml

Di seguito è riportato un esempio di utilizzo di AWS CLI per distribuire il modello:

macOS/Linux
aws cloudformation create-stack \ --stack-name CDKToolkit \ --template-body file://path/to/bootstrap-template.yaml \ --capabilities CAPABILITY_NAMED_IAM \ --region us-west-1
Windows
aws cloudformation create-stack ^ --stack-name CDKToolkit ^ --template-body file://path/to/bootstrap-template.yaml ^ --capabilities CAPABILITY_NAMED_IAM ^ --region us-west-1

Per informazioni sull'utilizzo CloudFormation StackSets per avviare più ambienti, consulta Bootstrapping multiple Account AWS for AWS CDK use CloudFormation StackSets nel blog AWSCloud Operations & Migrations.

Quando avviare il proprio ambiente

È necessario avviare ogni AWS ambiente prima di distribuirlo nell'ambiente. Ti consigliamo di avviare in modo proattivo ogni ambiente che intendi utilizzare. Puoi farlo prima di pianificare l'effettiva distribuzione CDK delle app nell'ambiente. Avviando in modo proattivo i tuoi ambienti, previeni potenziali problemi futuri, come i conflitti tra i nomi dei bucket Amazon S3 o la distribuzione di CDK app in ambienti che non sono stati avviati.

È possibile avviare un ambiente più di una volta. Se un ambiente è già stato avviato, lo stack di bootstrap verrà aggiornato se necessario. Altrimenti non succederà nulla.

Se tenti di implementare uno CDK stack in un ambiente che non è stato avviato, vedrai un errore simile al seguente:

$ cdk deploy ✨ Synthesis time: 2.02s ❌ Deployment failed: Error: BootstrapExampleStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)

Aggiorna lo stack di bootstrap

Periodicamente, il CDK team aggiornerà il modello di bootstrap a una nuova versione. Quando ciò accade, ti consigliamo di aggiornare lo stack di bootstrap. Se non hai personalizzato il processo di bootstrap, puoi aggiornare lo stack di bootstrap seguendo gli stessi passaggi utilizzati originariamente per avviare il tuo ambiente. Per ulteriori informazioni, consulta Cronologia delle versioni del modello Bootstrap.

Risorse predefinite create durante il bootstrap

IAMruoli creati durante il bootstrap

Per impostazione predefinita, il bootstrap prevede i seguenti AWS Identity and Access Management (IAM) ruoli nell'ambiente:

  • CloudFormationExecutionRole

  • DeploymentActionRole

  • FilePublishingRole

  • ImagePublishingRole

  • LookupRole

CloudFormationExecutionRole

Questo IAM ruolo è un ruolo di CloudFormation servizio che concede l' CloudFormation autorizzazione a eseguire distribuzioni di stack per conto dell'utente. Questo ruolo consente di eseguire CloudFormation AWS API chiamate nel tuo account, inclusa la distribuzione di stack.

Utilizzando un ruolo di servizio, le autorizzazioni fornite per il ruolo di servizio determinano quali azioni possono essere eseguite sulle risorse. CloudFormation Senza questo ruolo di servizio, le credenziali di sicurezza fornite con il CDK CLI determinerebbe cosa CloudFormation è consentito fare.

DeploymentActionRole

Questo IAM ruolo concede l'autorizzazione a eseguire distribuzioni nell'ambiente dell'utente. È assunto dal CDK CLI durante le distribuzioni.

Utilizzando un ruolo per le distribuzioni, è possibile eseguire distribuzioni tra account poiché il ruolo può essere assunto dalle identità di un account diverso. AWS

FilePublishingRole

Questo IAM ruolo concede l'autorizzazione a eseguire azioni sul bucket Amazon Simple Storage Service (Amazon S3) avviato, incluso il caricamento e l'eliminazione di risorse. È assunto dal CDK CLI durante le distribuzioni.

ImagePublishingRole

Questo IAM ruolo concede l'autorizzazione a eseguire azioni sul repository Amazon Elastic Container Registry (ECRAmazon) avviato. È assunto dal CDK CLI durante le distribuzioni.

LookupRole

Questo IAM ruolo concede readOnly l'autorizzazione a cercare valori di contesto dall'ambiente. AWS È assunto dal CDK CLI quando si eseguono attività come la sintesi e l'implementazione di modelli.

Risorsa IDs creata durante il bootstrap

Quando si distribuisce il modello di bootstrap predefinito, le risorse fisiche IDs per bootstrap vengono create utilizzando la seguente struttura:. cdk-qualifier-description-account-ID-Region

  • Qualificatore: un valore di stringa univoco di nove caratteri di. hnb659fds Il valore effettivo non ha alcun significato.

  • Descrizione: una breve descrizione della risorsa. Ad esempio container-assets.

  • ID account: l' Account AWS ID dell'ambiente.

  • Regione: Regione AWS l'ambiente.

Di seguito è riportato un esempio di ID fisico del bucket di staging Amazon S3 creato durante il bootstrap:. cdk-hnb659fds-assets-012345678910-us-west-1

Autorizzazioni da utilizzare durante il bootstrap del proprio ambiente

Quando si avvia un AWS ambiente, l'IAMidentità che esegue il bootstrap deve disporre almeno delle seguenti autorizzazioni:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudformation:*", "ecr:*", "ssm:*", "s3:*", "iam:*" ], "Resource": "*" } ] }

Nel tempo, lo stack di bootstrap, incluse le risorse create e le autorizzazioni necessarie, potrebbe cambiare. Con le modifiche future, potrebbe essere necessario modificare le autorizzazioni necessarie per avviare un ambiente.

Personalizza il bootstrap

Se il modello di bootstrap predefinito non soddisfa le tue esigenze, puoi personalizzare l'avvio delle risorse nel tuo ambiente nei seguenti modi:

  • Usa le opzioni della riga di comando con il cdk bootstrap comando: questo metodo è ideale per apportare piccole modifiche specifiche supportate tramite le opzioni della riga di comando.

  • Modifica il modello di bootstrap predefinito e distribuiscilo: questo metodo è ideale per apportare modifiche complesse o se desideri il controllo completo sulla configurazione delle risorse fornite durante il bootstrap.

Per ulteriori informazioni sulla personalizzazione del bootstrap, consulta. Personalizza il AWS CDK bootstrap

Bootstrap con Pipeline CDK

Se utilizzi CDK Pipelines per la distribuzione nell'ambiente di un altro account e ricevi un messaggio simile al seguente:

Policy contains a statement with one or more invalid principals

Questo messaggio di errore indica che i IAM ruoli appropriati non esistono nell'altro ambiente. La causa più probabile è che l'ambiente non è stato avviato. Avvia l'ambiente e riprova.

Proteggere lo stack di bootstrap dall'eliminazione

Se uno stack di bootstrap viene eliminato, verranno eliminate anche le AWS risorse originariamente fornite nell'ambiente per supportare le CDK distribuzioni. Ciò causerà l'interruzione del funzionamento della pipeline. Se ciò accade, non esiste una soluzione generale per il ripristino.

Dopo aver avviato l'ambiente, non eliminate e ricreate lo stack di bootstrap dell'ambiente. Prova invece ad aggiornare lo stack di bootstrap a una nuova versione eseguendo nuovamente il comando. cdk bootstrap

Per evitare l'eliminazione accidentale dello stack di bootstrap, ti consigliamo di fornire l'--termination-protectionopzione con il cdk bootstrap comando per abilitare la protezione dalla terminazione. È possibile abilitare la protezione dalla terminazione su stack di bootstrap nuovi o esistenti. Per istruzioni su come abilitare la protezione dalla terminazione, consulta Abilitare la protezione dalla terminazione per lo stack di bootstrap.

Cronologia delle versioni del modello Bootstrap

Il modello bootstrap è dotato di versioni e si evolve nel tempo con se stesso. AWS CDK Se fornisci il tuo modello di bootstrap, tienilo aggiornato con il modello canonico predefinito. Vuoi assicurarti che il tuo modello continui a funzionare con tutte le funzionalità. CDK

Nota

Le versioni precedenti del modello di bootstrap ne creavano uno AWS KMS key in ogni ambiente bootstrap per impostazione predefinita. Per evitare addebiti per la KMS chiave, riavvia questi ambienti utilizzando. --no-bootstrap-customer-key L'impostazione predefinita attuale è no KMS key, il che aiuta a evitare questi addebiti.

Questa sezione contiene un elenco delle modifiche apportate in ogni versione.

Versione del modello AWS CDK versione Modifiche
1 1.40.0 Versione iniziale del modello con Bucket, Key, Repository e Roles.
2 1.45.0 Dividi il ruolo di pubblicazione delle risorse in ruoli separati per la pubblicazione di file e immagini.
3 1.46.0 Aggiungi FileAssetKeyArn l'esportazione per poter aggiungere autorizzazioni di decrittografia ai consumatori di risorse.
4 1.61.0 AWS KMS le autorizzazioni sono ora implicite tramite Amazon S3 e non sono più necessarie. FileAsetKeyArn Aggiungi il CdkBootstrapVersion SSM parametro in modo che la versione dello stack di bootstrap possa essere verificata senza conoscere il nome dello stack.
5 1.87.0 Il ruolo di distribuzione può leggere i parametriSSM.
6 1.108.0 Aggiungi il ruolo di ricerca separato dal ruolo di distribuzione.
6 1.109.0 Allega aws-cdk:bootstrap-role tag ai ruoli di distribuzione, pubblicazione di file e pubblicazione di immagini.
7 1.110.0 Il ruolo di distribuzione non può più leggere direttamente i Bucket nell'account di destinazione. (Tuttavia, questo ruolo è effettivamente un amministratore e può sempre utilizzare le sue AWS CloudFormation autorizzazioni per rendere comunque leggibile il bucket).
8 1.114.0 Il ruolo di ricerca dispone di autorizzazioni complete di sola lettura per l'ambiente di destinazione e dispone anche di un tag. aws-cdk:bootstrap-role
9 2.1.0 Risolve il rifiuto dei caricamenti di risorse di Amazon S3 mediante una crittografia di riferimento comune. SCP
10 2.4.0 Amazon ECR ScanOnPush è ora abilitato per impostazione predefinita.
11 2.18.0 Aggiunge una politica che consente a Lambda di estrarre dai ECR repository Amazon in modo che sopravviva al riavvio.
12 2.20.0 Aggiunge il supporto per la sperimentazionecdk import.
13 2.25.0 Rende immutabili le immagini dei contenitori nei repository Amazon ECR creati con bootstrap.
14 2.34.0 Per impostazione predefinita, disattiva la scansione delle ECR immagini di Amazon a livello di repository per consentire l'avvio delle regioni che non supportano la scansione delle immagini.
15 2,60,0 KMSle chiavi non possono essere etichettate.
16 2,69,0 Risolve la ricerca di Security Hub KMS.2.
17. 2,72,0 Risolve i risultati del Security Hub ECR.3.
18. 2,80,0 Sono state annullate le modifiche apportate alla versione 16 in quanto non funzionano in tutte le partizioni e non sono consigliate.
19. 2106,1 Sono state annullate le modifiche apportate alla versione 18 in cui la AccessControl proprietà è stata rimossa dal modello. (#27964)
20 2,119,0 Aggiungi ssm:GetParameters un'azione al ruolo di distribuzione. AWS CloudFormation IAM Per ulteriori informazioni, consulta #28336.
21 2,149,0 Aggiungi una condizione al ruolo di pubblicazione dei file.
22 2,160,0 Aggiungi sts:TagSession le autorizzazioni alla politica di fiducia dei ruoli bootstrap. IAM
23. 2,1161,0 Aggiungi cloudformation:RollbackStack e cloudformation:ContinueUpdateRollback autorizzazioni alla politica di fiducia del ruolo di distribuzione. IAM Ciò fornisce le autorizzazioni per il comando. cdk rollback

Esegui l'aggiornamento dal modello bootstrap precedente a quello moderno

La AWS CDK v1 supportava due modelli di bootstrap, legacy e moderni. CDKv2 supporta solo il modello moderno. Per riferimento, ecco le differenze di alto livello tra questi due modelli.

Funzionalità Legacy (solo v1) Moderno (v1 e v2)
Implementazioni tra account Non consentito Consentito
AWS CloudFormation Autorizzazioni Esegue la distribuzione utilizzando le autorizzazioni dell'utente corrente (determinate dal AWS profilo, dalle variabili di ambiente, ecc.) Esegue la distribuzione utilizzando le autorizzazioni specificate al momento del provisioning dello stack di bootstrap (ad esempio, utilizzando) --trust
Funzione Versioni multiple È disponibile solo una versione dello stack di bootstrap Lo stack Bootstrap ha una versione; nuove risorse possono essere aggiunte nelle versioni future e le AWS CDK app possono richiedere una versione minima
Risorse* Bucket Amazon S3 Bucket Amazon S3
AWS KMS key
IAMruoli
ECRArchivio Amazon
SSMparametro per il controllo delle versioni
Denominazione delle risorse Generato automaticamente Deterministico
Crittografia Bucket Chiave predefinita AWS chiave gestita per impostazione predefinita. È possibile personalizzare per utilizzare una chiave gestita dal cliente.

* Aggiungeremo risorse aggiuntive al modello di bootstrap secondo necessità.

Un ambiente che è stato avviato utilizzando il modello precedente deve essere aggiornato per utilizzare il modello moderno per la v2 mediante riavvio. CDK Ridistribuisci tutte le AWS CDK applicazioni nell'ambiente almeno una volta prima di eliminare il bucket legacy.

Indirizza i risultati del Security Hub

Se lo utilizzi AWS Security Hub, potresti vedere i risultati riportati su alcune delle risorse create dal processo di AWS CDK bootstrap. I risultati del Security Hub ti aiutano a trovare le configurazioni delle risorse che dovresti ricontrollare per verificarne l'accuratezza e la sicurezza. Abbiamo esaminato queste configurazioni specifiche delle risorse con AWS Security e siamo certi che non costituiscano un problema di sicurezza.

[KMS.2] IAM i principali non dovrebbero avere politiche in IAM linea che consentano azioni di decrittografia su tutte le chiavi KMS

Il deploy role (DeploymentActionRole) concede l'autorizzazione a leggere i dati crittografati, necessaria per le distribuzioni tra account con Pipelines. CDK Le politiche in questo ruolo non concedono l'autorizzazione a tutti i dati. Concede l'autorizzazione a leggere i dati crittografati da Amazon S3 AWS KMS e solo quando tali risorse lo consentono tramite la policy del bucket o della chiave.

Di seguito è riportato un frammento di queste due istruzioni nel ruolo di distribuzione tratte dal modello bootstrap:

DeploymentActionRole: Type: AWS::IAM::Role Properties: ... Policies: - PolicyDocument: Statement: ... - Sid: PipelineCrossAccountArtifactsBucket Effect: Allow Action: - s3:GetObject* - s3:GetBucket* - s3:List* - s3:Abort* - s3:DeleteObject* - s3:PutObject* Resource: "*" Condition: StringNotEquals: s3:ResourceAccount: Ref: AWS::AccountId - Sid: PipelineCrossAccountArtifactsKey Effect: Allow Action: - kms:Decrypt - kms:DescribeKey - kms:Encrypt - kms:ReEncrypt* - kms:GenerateDataKey* Resource: "*" Condition: StringEquals: kms:ViaService: Fn::Sub: s3.${AWS::Region}.amazonaws.com ...

Perché Security Hub lo segnala?

Le politiche contengono una clausola Resource: * combinata con una Condition clausola. Security Hub contrassegna il carattere * jolly. Questa jolly viene utilizzata perché al momento dell'avvio dell'account, la AWS KMS chiave creata da CDK Pipelines per il bucket degli CodePipeline artefatti non esiste ancora e quindi non può essere referenziata nel modello di bootstrap da. ARN Inoltre, Security Hub non prende in considerazione la Condition clausola quando alza questa bandiera. Ciò Condition si limita Resource: * alle richieste effettuate dalla stessa Account AWS chiave. AWS KMS Queste richieste devono provenire da Amazon S3 nella Regione AWS stessa chiave. AWS KMS

Devo correggere questo risultato?

Finché non hai modificato la AWS KMS chiave sul tuo modello di bootstrap per renderla eccessivamente permissiva, il ruolo deploy non consente più accessi del necessario. Pertanto, non è necessario correggere questo risultato.

E se volessi correggere questo risultato?

Il modo in cui correggi questo risultato dipende dal fatto che utilizzerai o meno CDK Pipelines per le distribuzioni tra account.

Per correggere la ricerca del Security Hub e utilizzare CDK Pipelines per le distribuzioni tra account
  1. Se non lo hai fatto, distribuisci lo stack di CDK bootstrap usando il comando. cdk bootstrap

  2. Se non l'hai ancora fatto, crea e distribuisci il tuo CDK PipelinePer istruzioni, consulta Integrazione e distribuzione continue (CI/CD) con CDK Pipelines.

  3. Procurati la AWS KMS chiave ARN del secchio degli CodePipeline artefatti. Questa risorsa viene creata durante la creazione della pipeline.

  4. Ottieni una copia del modello di CDK bootstrap per modificarlo. Di seguito è riportato un esempio, utilizzando il AWS CDK CLI:

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  5. Modificate il modello sostituendo Resource: * l'PipelineCrossAccountArtifactsKeyistruzione con il vostro ARN valore.

  6. Implementa il modello per aggiornare lo stack di bootstrap. Di seguito è riportato un esempio, utilizzando il CDK CLI:

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml
Per correggere il problema relativo al Security Hub se non utilizzi CDK Pipelines per distribuzioni tra account
  1. Procurati una copia del modello di CDK bootstrap per modificarlo. Di seguito è riportato un esempio, utilizzando il CDK CLI:

    $ cdk bootstrap --show-template > bootstrap-template.yaml
  2. Eliminare le PipelineCrossAccountArtifactsKey istruzioni PipelineCrossAccountArtifactsBucket and dal modello.

  3. Implementa il modello per aggiornare lo stack di bootstrap. Di seguito è riportato un esempio, utilizzando il CDK CLI:

    $ cdk bootstrap aws://account-id/region --template bootstrap-template.yaml

Considerazioni

Poiché si esegue il provisioning delle risorse nell'ambiente in uso, è possibile che vengano AWS addebitati costi quando tali risorse vengono utilizzate con. AWS CDK