Specificare i valori memorizzati in altri servizi con riferimenti dinamici - AWS CloudFormation

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à.

Specificare i valori memorizzati in altri servizi con riferimenti dinamici

I riferimenti dinamici offrono un modo pratico per specificare i valori esterni archiviati e gestiti in altri servizi e disaccoppiare le informazioni sensibili dai modelli. infrastructure-as-code CloudFormation recupera il valore del riferimento specificato quando necessario durante le operazioni di stack e change set.

È possibile specificare i seguenti tipi di riferimenti dinamici:

  • Valori in chiaro memorizzati in AWS Systems Manager Parameter Store.

  • Stringhe sicure memorizzate in AWS Systems Manager Parameter Store.

  • Interi segreti o valori segreti memorizzati in AWS Secrets Manager.

Considerazioni relative all'utilizzo di riferimenti dinamici

Di seguito sono riportate le considerazioni relative all'utilizzo di riferimenti dinamici:

Importante

Consigliamo vivamente di non includere riferimenti dinamici, o dati sensibili, nelle proprietà delle risorse che fanno parte dell'identificatore principale di una risorsa.

Quando un parametro di riferimento dinamico è incluso in una proprietà che costituisce un identificatore di risorsa principale, è CloudFormation possibile utilizzare il valore effettivo in chiaro nell'identificatore della risorsa principale. Questo ID risorsa può apparire in qualsiasi output o destinazione derivata.

Per determinare quali proprietà della risorsa comprendono l'identificatore principale di un tipo di risorsa, consultate la documentazione di riferimento della risorsa in. AWS riferimento ai tipi di risorse e proprietà Nella sezione Return values (Valori restituiti), il valore restituito della funzione Ref rappresenta le proprietà delle risorse che comprendono l'identificatore principale del tipo di risorsa.

  • È possibile includere fino a 60 riferimenti dinamici in un modello di stack.

  • Per le trasformazioni, come AWS::Include andAWS::Serverless, CloudFormation non risolve i riferimenti dinamici prima di richiamare qualsiasi trasformazione. Piuttosto, CloudFormation passa la stringa letterale del riferimento dinamico alla trasformazione. I riferimenti dinamici (inclusi quelli inseriti nel modello elaborato come risultato di una trasformazione) vengono risolti quando si esegue il set di modifiche utilizzando il modello.

  • I riferimenti dinamici per valori sicuri, come ssm-secure e secretsmanager, non sono attualmente supportati nelle risorse personalizzate.

Nota

Non create un riferimento dinamico che abbia una barra rovesciata (\) come valore finale. AWS CloudFormation non è in grado di risolvere tali riferimenti, il che comporta un errore di risorse.

Specifica di riferimenti dinamici in modelli di stack

I riferimenti dinamici sono conformi al seguente schema:

'{{resolve:service-name:reference-key}}' o '{{resolve:ssm:[a-zA-Z0-9_.\-/]+(:\d+)?}}'.

service-name

Specifica il servizio in cui il valore viene archiviato e gestito.

Obbligatorio.

Al momento, i valori validi includono:

  • ssm: parametro in testo normale di Archivio parametri Systems Manager.

  • ssm-secure: parametro di stringa sicura di Archivio parametri Systems Manager.

    Nota

    Attualmente, SecureString i parametri non sono supportati da Systems Manager nelle cn-northwest-1 regioni cn-north-1 and.

    Per ulteriori informazioni, consulta Archivio dei parametri AWS Systems Manager nella Guida per l'utente di AWS Systems Manager .

  • secretsmanager: segreto di Secrets Manager.

reference-key

La chiave di riferimento. A seconda del tipo di riferimento dinamico, la chiave di riferimento può essere costituita da più segmenti.

Obbligatorio.

Parametri di Systems Manager

Utilizza il riferimento dinamico ssm per includere nei modelli valori archiviati di tipo String o StringList presenti in Archivio parametri Systems Manager.

Schema di riferimento

Per Systems Manager Parameters, il reference-key segmento è composto dal nome del parametro e dal numero di versione. Utilizza lo schema seguente:

'{{resolve:ssm:parameter-name:version}}'

Il riferimento deve essere conforme allo schema di espressione regolare per parameter-name e version:

'{{resolve:ssm:[a-zA-Z0-9_.\-/]+(:\d+)?}}'

parameter-name

Il nome del parametro in Archivio parametri Systems Manager. Il nome di parametro prevede la distinzione tra lettere maiuscole e minuscole.

Obbligatorio.

versione

Un numero intero che specifica la versione del parametro da utilizzare. Se non specificate la versione esatta, CloudFormation utilizza la versione più recente del parametro ogni volta che create o aggiornate lo stack. Per ulteriori informazioni, consulta Utilizzo delle versioni dei parametri nella Guida per l'utente di AWS Systems Manager .

Facoltativo.

Esempio

L'esempio seguente utilizza un riferimento dinamico ssm per impostare il controllo degli accessi per un bucket S3 su un valore di parametro archiviato in Archivio parametri Systems Manager. Come specificato, CloudFormation utilizzerà la versione 2 del S3AccessControl parametro per le operazioni di stack e change set.

JSON

"MyS3Bucket": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "{{resolve:ssm:S3AccessControl:2}}" } }

YAML

MyS3Bucket: Type: 'AWS::S3::Bucket' Properties: AccessControl: '{{resolve:ssm:S3AccessControl:2}}'

Per specificare un parametro archiviato in Archivio parametri Systems Manager, devi disporre di un accesso che consente di chiamare GetParameters per il parametro specificato. Per ulteriori informazioni, consulta Controllo dell'accesso ai parametri Systems Manager nella Guida per l'utente di AWS Systems Manager .

Ulteriori considerazioni sull'utilizzo dello schema di riferimenti dinamici ssm:

  • Attualmente, CloudFormation non supporta l'accesso ai parametri di Systems Manager tra account.

  • Per le risorse personalizzate, CloudFormation risolve i riferimenti ssm dinamici prima di inviare la richiesta alla risorsa personalizzata. Per ulteriori informazioni, consulta Risorse personalizzate.

  • CloudFormation non supporta l'utilizzo di etichette di parametri o parametri pubblici nei riferimenti dinamici.

    Un'etichetta di parametro è un alias definito dall'utente che consente di semplificare la gestione delle diverse versioni di un parametro. Per ulteriori informazioni, consulta Etichettatura dei parametri nella Guida per l'utente di AWS Systems Manager .

    Un parametro pubblico è un parametro fornito da un AWS servizio per l'utilizzo con tale servizio e memorizzato in AWS Systems Manager Parameter Store. Per un esempio di parametri pubblici, consulta Recupero dei AMI metadati ECS ottimizzati per Amazon nella Amazon Elastic Container Service Developer Guide.

  • CloudFormation attualmente non supporta il rilevamento della deriva sui riferimenti dinamici. Per i riferimenti ssm dinamici in cui non è stata specificata la versione del parametro, si consiglia, se si aggiorna la versione del parametro in Systems Manager, di eseguire anche un'operazione di aggiornamento dello stack su tutti gli stack che includono il riferimento ssm dinamico, per recuperare la versione più recente dei parametri.

  • Per verificare quale versione di un riferimento dinamico ssm verrà utilizzata in un'operazione di stack, creare un set di modifiche per l'operazione dello stack. Quindi, esaminare il modello elaborato nella scheda Modello .

  • CloudFormation supporta l'uso di riferimenti dinamici per specificare i valori dei parametri nella Parameters sezione dei modelli. Se si utilizza il pattern di parametri ssm o ssm-secure dynamic per specificare i valori dei parametri nella Parameters sezione, è necessario specificare la versione del parametro Systems Manager CloudFormation da utilizzare. I parametri di Systems Manager senza una versione non sono supportati nella Parameters sezione. In alternativa, utilizzate i tipi di parametri di Systems Manager CloudFormation per consentire invece di recuperare la versione più recente. Per ulteriori informazioni, consulta Tipi di parametri di Systems Manager.

Parametri di stringa sicuri di Systems Manager

Utilizzate il modello di riferimento ssm-secure dinamico per specificare i parametri AWS Systems Manager SecureString di tipo nei modelli. Per i riferimenti ssm-secure dinamici, CloudFormation non memorizza mai il valore effettivo del parametro. CloudFormation accede al valore del parametro durante le operazioni di creazione e aggiornamento di pile e set di modifiche. Al momento, i parametri di stringa sicura possono essere utilizzati solo per proprietà di risorsa che supportano lo schema di riferimenti dinamici ssm-secure.

Un parametro di stringa sicura è costituito da dati sensibili che devono essere archiviati e a cui è necessario fare riferimento in modo sicuro. Ovvero, dati che gli utenti non devono modificare o a cui non devono fare riferimento in testo non crittografato, ad esempio password o chiavi di licenza. Per ulteriori informazioni sulle stringhe sicure, consulta l'argomento relativo all'utilizzo dei parametri di stringa sicura nella Guida per l'utente di AWS Systems Manager .

I valori dei parametri di Secure String non vengono memorizzati e non vengono restituiti nei risultati delle API chiamate. CloudFormation

Schema di riferimento

Per i riferimenti dinamici ssm-secure, il segmento reference-key è composto da nome di parametro e numero di versione. Utilizza lo schema seguente:

'{{resolve:ssm-secure:parameter-name:version}}'

Il riferimento deve essere conforme allo schema di espressione regolare per parameter-name e version:

'{{resolve:ssm-secure:[a-zA-Z0-9_.\-/]+(:\d+)?}}'

parameter-name

Il nome del parametro in Archivio parametri Systems Manager. Il nome di parametro prevede la distinzione tra lettere maiuscole e minuscole.

Obbligatorio.

versione

Un numero intero che specifica la versione del parametro da utilizzare. Se non specifichi la versione esatta, AWS CloudFormation utilizza la versione più recente del parametro ogni volta che crei o aggiorni lo stack. Per ulteriori informazioni, consulta Utilizzo delle versioni dei parametri nella Guida per l'utente di AWS Systems Manager .

Facoltativo.

Esempio

L'esempio seguente utilizza un riferimento ssm-secure dinamico per impostare la password di un IAM utente su una stringa sicura memorizzata in Systems Manager Parameter Store. Come specificato, CloudFormation utilizzerà la versione 10 del IAMUserPassword parametro per le operazioni di stack e change set.

JSON

"MyIAMUser": { "Type": "AWS::IAM::User", "Properties": { "UserName": "MyUserName", "LoginProfile": { "Password": "{{resolve:ssm-secure:IAMUserPassword:10}}" } } }

YAML

MyIAMUser: Type: AWS::IAM::User Properties: UserName: 'MyUserName' LoginProfile: Password: '{{resolve:ssm-secure:IAMUserPassword:10}}'

Ulteriori considerazioni sull'utilizzo dello schema di riferimenti dinamici ssm-secure:

  • CloudFormation non restituisce il valore effettivo del parametro per le stringhe sicure in nessuna API chiamata, ma restituisce piuttosto il riferimento dinamico letterale.

  • CloudFormation memorizza il riferimento dinamico letterale, che contiene il nome del parametro in testo semplice della stringa sicura.

  • Per i set di modifiche, CloudFormation confronta la stringa di riferimento dinamica letterale. Non risolve e non confronta i valori effettivi dei riferimenti ssm-secure.

  • I riferimenti dinamici per valori sicuri, come ssm-secure e secretsmanager, non sono attualmente supportati nelle risorse personalizzate.

  • Nei casi in cui è CloudFormation necessario eseguire il rollback di un aggiornamento dello stack, l'operazione di rollback di aggiornamento avrà esito negativo se la versione precedentemente specificata di un parametro di stringa sicura non è più disponibile. In tal caso, procedi in uno dei seguenti modi:

    • Utilizza CONTINUE_UPDATE_ROLLBACK per ignorare la risorsa.

    • Ricrea il parametro di stringa sicura in Archivio parametri Systems Manager e aggiornalo fino a che la versione del parametro è identica alla versione utilizzata nel modello. Utilizza quindi CONTINUE_UPDATE_ROLLBACK senza ignorare la risorsa.

  • Attualmente, CloudFormation non supporta l'accesso ai parametri di Systems Manager tra account.

  • CloudFormation non supporta l'utilizzo di etichette di parametri o parametri pubblici nei riferimenti dinamici.

    Un'etichetta di parametro è un alias definito dall'utente che consente di semplificare la gestione delle diverse versioni di un parametro. Per ulteriori informazioni, consulta Etichettatura dei parametri nella Guida per l'utente di AWS Systems Manager .

    Un parametro pubblico è un parametro fornito da un AWS servizio per l'utilizzo con tale servizio e memorizzato in AWS Systems Manager Parameter Store. Per un esempio di parametri pubblici, consulta Recupero dei AMI metadati ECS ottimizzati per Amazon nella Amazon Elastic Container Service Developer Guide.

Risorse che supportano schemi di parametri dinamici per stringhe sicure

Attualmente, le risorse che supportano lo schema di riferimenti dinamici ssm-secure sono:

Segreti di Secrets Manager

Utilizza il riferimento dinamico secretsmanager per recuperare interi segreti o valori di segreto archiviati in Secrets Manager per l'utilizzo nei modelli. I segreti possono essere credenziali del database, password, API chiavi di terze parti o testo arbitrario. Utilizzando Secrets Manager, è possibile archiviare e controllare l'accesso a questi segreti centralmente, in modo da poter sostituire le credenziali codificate nel codice (comprese le password) con una chiamata a API Secrets Manager per recuperare il segreto a livello di codice. Per ulteriori informazioni, consulta Cos'è? AWS Secrets Manager nella Guida AWS Secrets Manager per l'utente.

Considerazioni importanti sull'uso di riferimenti dinamici per i segreti di Secrets Manager

Quando utilizzi i riferimenti dinamici per specificare i segreti di Secrets Manager nei modelli di stack, devi tenere conto delle seguenti considerazioni importanti sulla sicurezza:

  • Il riferimento dinamico secretsmanager può essere utilizzato in tutte le proprietà di risorsa. L'utilizzo del riferimento secretsmanager dinamico indica che né Secrets Manager né CloudFormation i log devono mantenere alcun valore segreto risolto. Tuttavia, il valore di segreto può essere visualizzato nel servizio proprietario della risorsa in cui è utilizzato. Rivedi l'utilizzo per evitare perdite di dati segreti.

  • L'aggiornamento di un segreto in Secrets Manager non aggiorna automaticamente il segreto in CloudFormation. CloudFormation Per aggiornare un riferimento secretsmanager dinamico, è necessario eseguire un aggiornamento dello stack che aggiorni la risorsa contenente il riferimento dinamico, aggiornando la proprietà della risorsa che contiene il riferimento secretsmanager dinamico o aggiornando un'altra proprietà della risorsa.

    Supponiamo, ad esempio, che nel modello specifichi la proprietà MasterPassword di una risorsa AWS::RDS::DBInstance come riferimento dinamico secretsmanager, e poi crei uno stack dal modello. Successivamente puoi aggiornare il valore del segreto in Secrets Manager, ma non la risorsa AWS::RDS::DBInstance nel modello. In questo caso, anche se si esegue un aggiornamento dello stack, il valore segreto nella proprietà MasterPassword non viene aggiornato e rimane il valore segreto precedente.

    Inoltre, ti consigliamo di utilizzare Secrets Manager per ruotare automaticamente il segreto per un servizio o un database protetto. Per ulteriori informazioni, consulta Rotazione dei segreti AWS Secrets Manager.

  • I riferimenti dinamici per valori sicuri, come secretsmanager, non sono attualmente supportati nelle risorse personalizzate.

Autorizzazioni richieste

Per specificare un segreto archiviato in Secrets Manager, devi disporre dell'accesso alla chiamata per il segreto GetSecretValue.

Schema di riferimento

Per i segreti di Secrets Manager, il segmento reference-key è composto da vari segmenti, tra cui l'ID segreto, la chiave del valore di segreto, la fase della versione e l'ID versione. Utilizza lo schema seguente:

{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}

secret-id

Il nome o ARN del segreto.

Per accedere a un segreto nel tuo Account AWS, devi solo specificare il nome segreto. Per accedere a un segreto in un altro Account AWS, specifica la sua completezzaARN.

Obbligatorio.

secret-string

Attualmente, l'unico valore supportato è SecretString. Il valore predefinito è SecretString.

json-key

Il nome della chiave della coppia chiave-valore di cui intendi recuperare il valore. Se non specifichi ajson-key, CloudFormation recupera l'intero testo segreto.

Questo segmento può non includere il carattere di due punti (:).

version-stage

L'etichetta temporanea della versione del segreto da utilizzare. Secrets Manager utilizza le etichette temporanee per tenere traccia delle differenti versioni durante il processo di rotazione. Se utilizzi version-stage, non specificare version-id. Se non specifichi né version-stageversion-id, la versione di default sarà la AWSCURRENT.

Questo segmento può non includere il carattere di due punti (:).

version-id

L'identificatore univoco della versione del segreto da utilizzare. Se specifichi version-id, non è necessario specificare anche version-stage. Se non specifichi né version-stageversion-id, la versione di default sarà la AWSCURRENT.

Questo segmento può non includere il carattere di due punti (:).

Esempi

L'esempio seguente utilizza i json-key segmenti secret-name and per recuperare i valori del nome utente e della password memorizzati nel segreto M. yRDSSecret Per impostazione predefinita, la versione del segreto recuperata è la versione con il valore di fase di versione AWSCURRENT.

JSON

{ "MyRDSInstance": { "Type": "AWS::RDS::DBInstance", "Properties": { "DBName": "MyRDSInstance", "AllocatedStorage": "20", "DBInstanceClass": "db.t2.micro", "Engine": "mysql", "MasterUsername": "{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}", "MasterUserPassword": "{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}" } } }

YAML

MyRDSInstance: Type: 'AWS::RDS::DBInstance' Properties: DBName: MyRDSInstance AllocatedStorage: '20' DBInstanceClass: db.t2.micro Engine: mysql MasterUsername: '{{resolve:secretsmanager:MyRDSSecret:SecretString:username}}' MasterUserPassword: '{{resolve:secretsmanager:MyRDSSecret:SecretString:password}}'

Specificando i seguenti segmenti si recupererebbe il modulo. SecretString MySecret

'{{resolve:secretsmanager:MySecret}}' o '{{resolve:secretsmanager:MySecret::::}}'

Specificando i seguenti segmenti si recupererebbe il valore di. password MySecret

'{{resolve:secretsmanager:MySecret:SecretString:password}}'

Specificando i seguenti segmenti si recupererebbe il formato contenuto in un altro. SecretString MySecret Account AWSÈ necessario specificare il segreto completo ARN per accedere ai segreti di un altro. Account AWS

'{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3}}'

Specificando i seguenti segmenti si recupererebbe il password valore MySecret che si trova in un altro. Account AWSÈ necessario specificare il segreto completo ARN per accedere ai segreti di un altro. Account AWS

'{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3:SecretString:password}}'

Specificando i seguenti segmenti si recupererebbe il password valore per la AWSPREVIOUS versione di. MySecret

'{{resolve:secretsmanager:MySecret:SecretString:password:AWSPREVIOUS}}'