Trasmetti i segreti di Secrets Manager tramite le variabili di ambiente Amazon ECS - Amazon Elastic Container Service

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

Trasmetti i segreti di Secrets Manager tramite le variabili di ambiente Amazon ECS

Quando si inserisce un segreto come variabile di ambiente, è possibile specificare l'intero contenuto di un segreto, una chiave JSON specifica all'interno di un segreto. Questo processo consente di controllare i dati sensibili esposti al container. Per ulteriori informazioni sul controllo delle versioni segrete, vedi Cosa c'è in un segreto di Secrets Manager? nella Guida per l'AWS Secrets Manager utente.

Quando si utilizza una variabile di ambiente per iniettare un segreto di Secrets Manager in un contenitore, è necessario considerare quanto segue.

  • I dati sensibili vengono inseriti nel container quando viene inizialmente avviato. Se il segreto o parametro viene in seguito aggiornato o ruotato, il container non riceverà automaticamente il valore aggiornato. È necessario avviare una nuova attività o se l'attività è parte di un servizio, è possibile aggiornare il servizio e utilizzare la nuova opzione Force new deployment (Forza nuova implementazione) per forzare il servizio ad avviare una nuova attività.

  • Le applicazioni eseguite sul contenitore, i registri del contenitore e gli strumenti di debug hanno accesso alle variabili di ambiente.

  • Per le attività di Amazon ECS su AWS Fargate, considera quanto segue:

    • Per inserire il contenuto completo di un segreto come variabile di ambiente o in una configurazione di log, è necessario utilizzare la versione della piattaforma 11.3.0 o successiva. Per informazioni, consultare Versioni della piattaforma Fargate per Amazon ECS.

    • Per inserire una chiave JSON specifica o la versione di un segreto come variabile di ambiente o in una configurazione di log, è necessario utilizzare la versione della piattaforma 1.4.0 o successiva (Linux) o 1.0.0 (Windows). Per informazioni, consultare Versioni della piattaforma Fargate per Amazon ECS.

  • Per le attività di Amazon ECS su EC2, è necessario considerare quanto segue:

    • Per inserire un segreto utilizzando una chiave JSON specifica o una versione di un segreto, l'istanza di container deve avere la versione 1.37.0 o successiva dell'agente del container. Tuttavia, ti consigliamo di utilizzare la versione più recente dell'agente container. Per informazioni sulla verifica della versione dell'agente e sull'aggiornamento alla versione più recente, consulta Aggiornamento dell'agente del container Amazon ECS.

      Per inserire il contenuto completo di un segreto come variabile di ambiente o per inserire un segreto in una configurazione di log, l'istanza del container deve avere la versione 1.22.0 o successiva dell'agente del container.

  • Usa gli endpoint VPC dell'interfaccia per migliorare i controlli di sicurezza e connettiti a Secrets Manager tramite una sottorete privata. È necessario creare gli endpoint VPC di interfaccia per Gestione dei segreti. Per informazioni sull'endpoint VPC, consulta Creazione di endpoint VPC nella Guida per l'utente di AWS Secrets Manager . Per ulteriori informazioni sull'utilizzo di Secrets Manager e Amazon VPC, consulta Come connettersi al servizio Secrets Manager all'interno di un Amazon VPC.

  • Per le attività di Windows configurate per utilizzare il driver di registrazione awslogs, è necessario impostare anche la variabile di ambiente ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE nell'istanza di container. Utilizzare la seguente sintassi:

    <powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>
  • La definizione dell'attività deve utilizzare un ruolo di esecuzione dell'attività con autorizzazioni aggiuntive per Secrets Manager. Per ulteriori informazioni, consulta Ruolo IAM di esecuzione di attività Amazon ECS.

Creazione del segreto di AWS Secrets Manager

Puoi utilizzare la console Secrets Manager per creare un segreto per i dati sensibili. Per ulteriori informazioni, consulta Creare un AWS Secrets Manager segreto nella Guida per l'AWS Secrets Manager utente.

Aggiunta della variabile di ambiente alla definizione di container

All'interno della definizione del container, è possibile specificare quanto segue:

  • L'oggetto secrets contenente il nome della variabile di ambiente da impostare nel container

  • L'Amazon Resource Name (ARN) del segreto di Secrets Manager

  • Parametri aggiuntivi che contengono i dati sensibili da presentare al container

Nell'esempio seguente viene illustrata la sintassi completa che deve essere specificata per il segreto di Secrets Manager.

arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id

Nella sezione seguente vengono descritti i parametri aggiuntivi. Questi parametri sono facoltativi, ma se non li si utilizza, è necessario includere i due punti : per utilizzare i valori predefiniti. Esempi sono forniti di seguito per un maggiore contesto.

json-key

Specificare il nome della chiave in una coppia chiave-valore con il valore che si desidera impostare come valore della variabile di ambiente. Sono supportati solo i valori in formato JSON. Se non si specifica una chiave JSON, viene utilizzato il contenuto completo del segreto.

version-stage

Specificare l'etichetta di gestione temporanea della versione di un segreto che si desidera utilizzare. Se viene specificata un'etichetta di gestione temporanea della versione, non è possibile specificare un ID versione. Se non viene specificata alcuna fase di versione, il comportamento predefinito consiste nel recuperare il segreto con l'etichetta AWSCURRENT di gestione temporanea.

Le etichette di gestione temporanea vengono utilizzate per tenere traccia di diverse versioni di un segreto quando vengono aggiornate o ruotate. Ogni versione di un segreto ha una o più etichette di gestione temporanea e un ID.

version-id

Specifica l'identificatore univoco della versione del segreto che intendi utilizzare. Se viene specificato un ID versione, non è possibile specificare un'etichetta di gestione temporanea della versione. Se non viene specificato alcun ID versione, il comportamento predefinito consiste nel recuperare il segreto con l'etichetta AWSCURRENT di gestione temporanea.

IDs Le versioni vengono utilizzate per tenere traccia delle diverse versioni di un segreto quando vengono aggiornate o ruotate. Ogni versione di un segreto ha un ID. Per ulteriori informazioni, consulta Termini e concetti chiave di AWS Secrets Manager nella Guida per l'utente di AWS Secrets Manager .

Esempio di definizioni del container

Negli esempi seguenti vengono illustrati i modi in cui è possibile fare riferimento ai segreti di Secrets Manager nelle definizioni del container.

Esempio riferimento a un segreto completo

Di seguito è riportato un frammento di una definizione di processo che mostra il formato quando si fa riferimento a un segreto di Secrets Manager.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }

Per accedere al valore di questo segreto dall'interno del container, è necessario effettuare la chiamata a $environment_variable_name.

Esempio facendo riferimento a segreti completi

Di seguito è riportato un frammento di una definizione di attività che mostra il formato quando si fa riferimento al testo completo di più segreti di Secrets Manager.

{ "containerDefinitions": [{ "secrets": [ { "name": "environment_variable_name1", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }, { "name": "environment_variable_name2", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-abcdef" }, { "name": "environment_variable_name3", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-ABCDEF" } ] }] }

Per accedere al valore di questo segreto dall'interno del contenitore è necessario chiamare$environment_variable_name1, $environment_variable_name2 e. $environment_variable_name3

Esempio fare riferimento a una chiave specifica all'interno di un segreto

Di seguito viene illustrato un esempio di output di un get-secret-valuecomando che visualizza il contenuto di un segreto insieme all'etichetta di staging della versione e all'ID di versione ad esso associati.

{ "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf", "Name": "appauthexample", "VersionId": "871d9eca-18aa-46a9-8785-981ddEXAMPLE", "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}", "VersionStages": [ "AWSCURRENT" ], "CreatedDate": 1581968848.921 }

Fare riferimento a una chiave specifica dell'output precedente in una definizione di container specificando il nome della chiave alla fine dell'ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }] }
Esempio riferimento a una versione segreta specifica

Di seguito viene illustrato un output di esempio da un comando describe-secret che visualizza il contenuto non crittografato di un segreto insieme ai metadati per tutte le versioni del segreto.

{ "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf", "Name": "appauthexample", "Description": "Example of a secret containing application authorization data.", "RotationEnabled": false, "LastChangedDate": 1581968848.926, "LastAccessedDate": 1581897600.0, "Tags": [], "VersionIdsToStages": { "871d9eca-18aa-46a9-8785-981ddEXAMPLE": [ "AWSCURRENT" ], "9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE": [ "AWSPREVIOUS" ] } }

Fare riferimento a un'etichetta di gestione temporanea della versione specifica dall'output precedente in una definizione di container specificando il nome della chiave alla fine dell'ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:" }] }] }

Fare riferimento a un ID di versione specifico dall'output precedente in una definizione di container specificando il nome della chiave alla fine dell'ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }
Esempio riferimento a una chiave specifica e un'etichetta di gestione temporanea della versione di un segreto

Di seguito viene illustrato come fare riferimento sia a una chiave specifica all'interno di un segreto che a una specifica etichetta di gestione temporanea della versione.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:" }] }] }

Per specificare una chiave e un ID di versione specifici, utilizzare la seguente sintassi.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }

Per informazioni su come creare una definizione di attività con il segreto specificato in una variabile di ambiente, vedereCreazione di una definizione di attività Amazon ECS utilizzando la console.