Récupérez les secrets de Secrets Manager via les variables d'ECSenvironnement Amazon - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Récupérez les secrets de Secrets Manager via les variables d'ECSenvironnement Amazon

Lorsque vous injectez un secret en tant que variable d'environnement, vous pouvez spécifier le contenu complet d'un secret, une JSON clé spécifique dans un secret ou une version spécifique d'un secret à injecter. Cela vous aide à contrôler les données sensibles exposées à votre conteneur. Pour de plus amples informations sur la gestion des versions de secrets, veuillez consulter Termes et concepts clés pour AWS Secrets Manager dans le Guide de l'utilisateur AWS Secrets Manager .

Les points suivants doivent être pris en compte lors de l'utilisation d'une variable d'environnement pour injecter un secret Secrets Manager dans un conteneur.

  • Les données sensibles sont injectées dans votre conteneur lors du démarrage initial du conteneur. Si le secret est ensuite mis à jour ou fait l'objet d'une rotation, le conteneur ne reçoit pas la valeur mise à jour automatiquement. Vous devez lancer une nouvelle tâche ou, si votre tâche fait partie d'un service, vous pouvez mettre à jour le service et utiliser l'option Force new deployment (Forcer un nouveau déploiement) pour forcer le service à lancer une nouvelle tâche.

  • Pour les ECS tâches Amazon sur AWS Fargate, tenez compte des points suivants :

    • Pour injecter le contenu complet d'un secret en tant que variable d'environnement ou dans une configuration de journal, vous devez utiliser la version 1.3.0 ou ultérieure de la plateforme. Pour plus d’informations, veuillez consulter Versions de la plateforme Fargate pour Amazon ECS.

    • Pour injecter une JSON clé ou une version spécifique d'un secret en tant que variable d'environnement ou dans une configuration de journal, vous devez utiliser une version de plate-forme 1.4.0 ou ultérieure (Linux) ou 1.0.0 (Windows). Pour plus d’informations, veuillez consulter Versions de la plateforme Fargate pour Amazon ECS.

  • Pour les ECS tâches Amazon surEC2, les points suivants doivent être pris en compte :

    • Pour injecter un secret à l'aide d'une JSON clé ou d'une version spécifique d'un secret, votre instance de conteneur doit disposer d'une version 1.37.0 ou d'une version ultérieure de l'agent de conteneur. Cependant, nous vous recommandons d'utiliser la dernière version de l'agent de conteneur. Pour plus d'informations sur la vérification de la version de votre agent et la mise à jour à la dernière version, consultez Mettre à jour l'agent de ECS conteneur Amazon.

      Pour injecter le contenu complet d'un secret en tant que variable d'environnement ou pour injecter un secret dans une configuration de journal, votre instance de conteneur doit avoir la version 1.22.0 ou ultérieure de l'agent de conteneur.

  • Utilisez les VPC points de terminaison de l'interface pour améliorer les contrôles de sécurité et connectez-vous à Secrets Manager via un sous-réseau privé. Vous devez créer les VPC points de terminaison de l'interface pour Secrets Manager. Pour plus d'informations sur le VPC point de terminaison, voir Création de VPC points de terminaison dans le guide de AWS Secrets Manager l'utilisateur. Pour plus d'informations sur l'utilisation de Secrets Manager et d'AmazonVPC, consultez Comment se connecter au service Secrets Manager au sein d'Amazon VPC.

  • Pour les tâches Windows configurées pour utiliser le pilote de journalisation awslogs, vous devez également définir la variable d'environnement ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE sur votre instance de conteneur. Utilisez la syntaxe suivante :

    <powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>
  • Votre définition de tâche doit utiliser un rôle d'exécution de tâche doté des autorisations supplémentaires pour Secrets Manager. Pour de plus amples informations, veuillez consulter IAMRôle d'exécution des ECS tâches Amazon.

Créez le secret AWS Secrets Manager .

Vous pouvez utiliser la console Secrets Manager afin de créer un secret pour vos données sensibles. Pour plus d'informations, voir Création d'un AWS Secrets Manager secret dans le guide de AWS Secrets Manager l'utilisateur.

Ajoutez la variable d'environnement à la définition du conteneur

Dans votre définition de conteneur, vous pouvez spécifier les éléments suivants :

  • Objet secrets contenant le nom de la variable d'environnement à définir dans le conteneur

  • Le nom de ressource Amazon (ARN) du secret Secrets Manager

  • Paramètres supplémentaires contenant les données sensibles à présenter au conteneur

L'exemple suivant montre la syntaxe complète qui doit être spécifiée pour le secret Secrets Manager.

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

La section suivante décrit les paramètres supplémentaires. Ces paramètres sont facultatifs, mais si vous ne les utilisez pas, vous devez inclure les deux-points : pour utiliser les valeurs par défaut. Des exemples sont donnés ci-dessous pour plus de contexte.

json-key

Spécifie le nom de la clé dans une paire clé-valeur avec la valeur que vous souhaitez définir comme valeur de variable d'environnement. Seules les valeurs au JSON format sont prises en charge. Si vous ne spécifiez pas de JSON clé, le contenu complet du secret est utilisé.

version-stage

Spécifie l'étiquette intermédiaire de la version d'un secret que vous souhaitez utiliser. Si une étiquette intermédiaire de version est spécifiée, vous ne pouvez pas spécifier d'ID de version. Si aucune étape de version n'est spécifiée, le comportement par défaut consiste à récupérer le secret avec l'étiquette AWSCURRENT intermédiaire.

Les étiquettes intermédiaires sont utilisées pour suivre les différentes versions d'un secret lorsqu'elles sont mises à jour ou font l'objet d'une rotation. Chaque version d'un secret a une ou plusieurs étiquettes intermédiaires et un ID. Pour plus d'informations, veuillez consulter la rubrique Concepts et termes clés pour AWS Secrets Manager dans le Guide de l'utilisateur AWS Secrets Manager .

version-id

Spécifie l'identifiant unique de la version du secret que vous souhaitez utiliser. Si un ID de version est spécifié, vous ne pouvez pas spécifier d'étiquette intermédiaire de version. Si aucun ID de version n'est spécifié, le comportement par défaut consiste à récupérer le secret avec l'étiquette AWSCURRENT intermédiaire.

IDsLes versions sont utilisées pour suivre les différentes versions d'un secret lors de leur mise à jour ou de leur rotation. Chaque version d'un secret a un ID. Pour plus d'informations, veuillez consulter la rubrique Concepts et termes clés pour AWS Secrets Manager dans le Guide de l'utilisateur AWS Secrets Manager .

Exemples de définitions de conteneur

Les exemples suivants montrent comment vous pouvez référencer des secrets Secrets Manager dans vos définitions de conteneur.

Exemple référencement d'un secret complet

Voici un extrait d'une définition de tâche montrant le format lorsque vous référencez le texte complet d'un secret Secrets Manager.

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

Pour accéder à la valeur de ce secret depuis le conteneur, vous devez appeler $environment_variable_name.

Exemple référencement d'une clé spécifique dans un secret

Voici un exemple de sortie d'une get-secret-valuecommande qui affiche le contenu d'un secret ainsi que le libellé de la version intermédiaire et l'ID de version qui lui sont associés.

{ "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 }

Faites référence à une clé spécifique de la sortie précédente dans une définition de conteneur en spécifiant le nom de la clé à la fin duARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }] }
Exemple référencement d'une version secrète spécifique

Voici un exemple de sortie d'une commande describe-secret qui affiche le contenu non chiffré d'un secret ainsi que les métadonnées de toutes les versions du secret.

{ "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" ] } }

Référencez une étiquette de préparation de version spécifique issue de la sortie précédente dans une définition de conteneur en spécifiant le nom de la clé à la fin duARN.

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

Référencez un ID de version spécifique issu de la sortie précédente dans une définition de conteneur en spécifiant le nom de la clé à la fin duARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }
Exemple référencement d'une clé spécifique et d'une étiquette intermédiaire de version d'un secret

Ce qui suit montre comment référencer à la fois une clé spécifique dans une étiquette secrète et une étiquette de mise en scène de version spécifique.

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

Pour spécifier une clé et un ID de version spécifiques, utilisez la syntaxe suivante.

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

Pour plus d'informations sur la création d'une définition de tâche avec le secret spécifié dans une variable d'environnement, consultezCréation d'une définition de ECS tâche Amazon à l'aide de la console.