Amazon Elastic Container Service
Manuel du développeur (Version de l'API 2014-11-13)

Spécification des données sensibles

Amazon ECS vous permet d'injecter des données sensibles dans vos conteneurs en stockant celles-ci dans des secrets AWS Secrets Manager ou des paramètres du Stockage de paramètres AWS Systems Manager, puis en les référençant dans votre définition de conteneur. Cette fonction est prise en charge par les tâches utilisant les types de lancement EC2 et Fargate.

Les secrets peuvent être exposés à un conteneur de la manière suivante :

  • Pour injecter des données sensibles dans vos conteneurs en tant que variables d'environnement, utilisez le paramètre de définition de conteneur secrets.

  • Pour référencer les informations sensibles dans la configuration de journal d'un conteneur, utilisez le paramètre de définition de conteneur secretOptions.

Considérations relatives à la spécification des données sensibles

Les informations suivantes doivent être prises en compte lors de la spécification de données sensibles pour les conteneurs :

  • Pour les tâches utilisant le type de lancement Fargate, cette fonction nécessite la version 1.3.0 ou ultérieure de la plate-forme. Pour plus d'informations, consultez Versions de la plateforme AWS Fargate.

  • Cette fonction exige que votre instance de conteneur ait la version 1.22.0 ou ultérieure de l'agent de conteneur pour les tâches qui utilisent le type de lancement EC2. 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 Mise à jour de l'agent de conteneur Amazon ECS.

  • Les données sensibles sont injectées dans votre conteneur lors du démarrage initial du conteneur. Si le paramètre secret ou Parameter Store 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.

  • Cette fonction n'est pas disponible dans la région GovCloud (USA Est).

Injection de données sensibles sous la forme d'une variable d'environnement

Dans votre définition de conteneur, spécifiez secrets avec le nom de la variable d'environnement à définir dans le conteneur et l'ARN complet du secret Secrets Manager ou du paramètre du Stockage de paramètres Systems Manager contenant les données sensibles à présenter au conteneur. Le paramètre que vous référencez doit provenir du même compte, mais peut provenir d'une région différente de celle du conteneur qui l'utilise.

Important

Si le paramètre du Stockage de paramètres Systems Manager existe dans la même région que la tâche que vous lancez, vous pouvez utiliser le nom ou l'ARN complet du paramètre. Si le paramètre existe dans une autre région, l'ARN complet doit être spécifié.

Pour obtenir un didacticiel complet sur la création d'un secret Secrets Manager et l’injection de ce dernier dans un conteneur comme une variable d'environnement, consultez Didacticiel  spécification de données sensibles à l'aide de secrets Secrets Manager.

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

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

Voici un extrait d'une définition de tâche montrant le format lorsque vous référencez un paramètre du Stockage de paramètres Systems Manager.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }] }

Injection de données sensibles dans une configuration de journal

Dans votre définition de conteneur, lorsque vous spécifiez logConfiguration, vous pouvez spécifier secretOptions avec le nom de l’option du pilote de journal à définir dans le conteneur et l'ARN complet du secret Secrets Managerou du paramètre Systems Manager Stockage de paramètres contenant les données sensibles à présenter au conteneur. Le paramètre que vous référencez peut provenir du même compte, mais peut provenir d’une région différente de celle du conteneur qui l'utilise.

Important

Si le paramètre du Stockage de paramètres Systems Manager existe dans la même région que la tâche que vous lancez, vous pouvez utiliser le nom ou l'ARN complet du paramètre. Si le paramètre existe dans une autre région, l'ARN complet doit être spécifié.

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

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

Voici un extrait d'une définition de tâche montrant le format lorsque vous référencez un paramètre du Stockage de paramètres Systems Manager.

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter:parameter_name" }] }] }] }

Autorisations IAM requises pour les secrets Amazon ECS

Pour utiliser cette fonction, vous devez disposer du rôle d'exécution de tâche Amazon ECS et le référencer dans votre définition de tâche. Cela permet à l'agent de conteneur d'extraire les ressources AWS Systems Manager ou Secrets Manager nécessaires. Pour plus d'informations, consultez Rôle IAM d'exécution de tâche Amazon ECS.

Pour fournir l'accès aux paramètres Parameters Store AWS Systems Managerque vous créez, ajoutez manuellement les autorisations suivantes en tant que stratégie en ligne au rôle d'exécution de tâche. Pour plus d'informations, consultez Ajout et suppression de stratégies IAM.

  • ssm:GetParameters — Obligatoire lorsque vous référencez un paramètre du Stockage de paramètres Systems Manager dans une définition de tâche.

  • secretsmanager:GetSecretValue — Obligatoire si vous référencez directement un secret Secrets Manager ou si votre paramètre du Stockage de paramètres Systems Manager référence un secret Secrets Managerdans une définition de tâche.

  • kms:Decrypt — Obligatoire uniquement si votre secret utilise une clé KMS personnalisée et non la clé par défaut. L'ARN de votre clé personnalisée doit être ajouté en tant que ressource.

L'exemple suivant de stratégie en ligne ajoute les autorisations requises :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:ssm:<region>:<aws_account_id>:parameter/parameter_name", "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }

Création d'un 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, consultez Création d'un secret basique dans le Guide de l'utilisateur AWS Secrets Manager.

Pour créer un secret basique

Utilisez Secrets Manager afin de créer un secret pour vos données sensibles.

  1. Ouvrez la console Secrets Manager à l'adresse https://console.aws.amazon.com/secretsmanager/.

  2. Choisissez Stocker un nouveau secret.

  3. Pour Sélectionner un type de secret, choisissez Autre type de secrets.

  4. Précisez les détails de votre secret personnalisé sous forme de paires de Key (Clé) et Value (Valeur). Par exemple, vous pouvez spécifier la clé UserName (Nom d'utilisateur), puis fournir le nom d'utilisateur approprié comme valeur. Ajoutez une deuxième clé avec le nom Password (Mot de passe) et le texte du mot de passe comme valeur. Vous pouvez également ajouter des entrées pour le nom de base de données, l'adresse du serveur, le port TCP, etc. Vous pouvez ajouter autant de paires que nécessaire pour stocker les informations dont vous avez besoin.

    Vous pouvez également choisir l'onglet Plaintext (Texte brut) et saisir la valeur du secret comme vous le souhaitez.

  5. Choisissez la clé de chiffrement AWS KMS à utiliser pour chiffrer le texte protégé du secret. Si vous ne choisissez aucune clé, Secrets Manager vérifie s'il existe une clé par défaut pour le compte et l'utilise si c'est le cas. S'il n'existe aucune clé par défaut, Secrets Manager en crée une automatiquement. Vous pouvez également choisir Add new key (Ajouter une clé) pour créer une clé CMK personnalisée spécifiquement pour ce secret. Pour créer votre propre clé CMK AWS KMS, vous devez être autorisé à créer des clés CMK dans votre compte.

  6. Choisissez Suivant.

  7. Pour Nom du secret, saisissez un chemin facultatif et un nom, comme production/MyAwesomeAppSecret ou development/TestSecret, puis choisissez Suivant. Vous pouvez éventuellement ajouter une description pour vous aider à vous souvenir de la finalité de ce secret ultérieurement.

    Le nom du secret doit contenir uniquement des lettres ASCII, des chiffres ou les caractères suivants : /_+=.@-

  8. (Facultatif) À ce stade, vous pouvez configurer la rotation de votre secret. Pour cette procédure, gardez l'option Désactiver la rotation automatique et choisissez Suivant.

    Pour plus d'informations sur la configuration de la rotation sur des secrets nouveaux ou existants, consultez Rotation de vos secrets AWS Secrets Manager.

  9. Vérifiez vos paramètres, puis choisissez Store secret (Stocker le secret) pour enregistrer tous les éléments que vous avez saisis en tant que nouveau secret dans Secrets Manager.

Création d'un paramètre Parameter Store AWS Systems Manager

Vous pouvez utiliser la console AWS Systems Manager pour créer un paramètre Parameter Store Systems Manager pour vos données sensibles. Pour plus d'informations, consultez Procédure : Créer et utiliser un paramètre dans une commande (console) dans le Guide de l'utilisateur AWS Systems Manager.

Pour créer un paramètre Parameter Store

  1. Ouvrez la console AWS Systems Manager à l'adresse https://console.aws.amazon.com/systems-manager/.

  2. Dans le panneau de navigation, choisissez Parameter Store, Create Parameter (Créer un paramètre).

  3. Dans le champ Nom, saisissez une hiérarchie et un nom de paramètre. Par exemple, saisissez test/database_password.

  4. Pour Description, entrez une description facultative.

  5. Pour le Type, choisissez String, StringList ou SecureString.

    Note

    • Si vous choisissez SecureString, le champ KMS Key ID apparaît. Si vous ne fournissez pas d'ID de clé CMK KMS, un ARN CMK KMS, un nom d'alias ou un ARN d'alias, le système utilise alias/aws/ssm, qui est la clé CMK KMS par défaut pour Systems Manager. Pour éviter d'utiliser cette clé, choisissez une clé personnalisée. Pour plus d'informations, consultez Utiliser les paramètres Secure String dans le Guide de l'utilisateur AWS Systems Manager.

    • Lorsque vous créez un paramètre Secure String dans la console à l'aide du paramètre key-id avec un nom d'alias de clé principale KMS CMK personnalisée ou un ARN d'alias, vous devez spécifier le préfixe alias/ avant l'alias. Voici un exemple d'ARN :

      arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

      Voici un exemple de nom d'alias :

      alias/MyAliasName
  6. Pour Valeur, tapez une valeur. Par exemple, MyFirstParameter. Si vous choisissez SecureString, la valeur est masquée au fur et à mesure de la saisie.

  7. Choisissez Create parameter.

Création d'une définition de tâche référence un secret

Vous pouvez utiliser la console Amazon ECS pour créer une définition de tâche qui fait référence à un secret Secrets Manager ou à un paramètre du Stockage de paramètres Systems Manager.

Pour créer une définition de tâche qui spécifie un secret

  1. Ouvrez la console Amazon ECS à l'adresse https://console.aws.amazon.com/ecs/.

  2. Dans le panneau de navigation, choisissez Définition de tâche, puis Créer une définition de tâche.

  3. Sur la page Select launch type compatibility (Sélectionner la compatibilité du type de lancement), choisissez le type de lancement de votre tâche, puis choisissez Next step (Étape suivante).

    Note

    Cette étape s'applique uniquement aux régions qui prennent actuellement en charge Amazon ECS à l'aide d'AWS Fargate. Pour plus d'informations, consultez AWS Fargate sur Amazon ECS.

  4. Pour Task Definition Name (Nom de définition de tâche), saisissez le nom de votre définition de tâche. Il peut comporter jusqu'à 255 lettres (majuscules et minuscules), des chiffres, des tirets ou des traits de soulignement.

  5. Pour Task execution role (Rôle d'exécution de tâche), sélectionnez votre rôle d'exécution de tâche existant ou choisissez Create new role (Créer un nouveau rôle) pour qu'il soit créé automatiquement. Ce rôle autorise Amazon ECS à extraire des images privées pour votre tâche. Pour plus d'informations, consultez Autorisations IAM requises pour l'authentification de registre privé.

    Important

    Si le champ Task execution role (Rôle d'exécution de tâche) n'apparaît pas, choisissez Configure via JSON (Configurer via JSON) et ajoutez manuellement le champ executionRoleArn pour spécifier votre rôle d'exécution de tâche. L'exemple de code suivant montre la syntaxe :

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  6. Pour chaque conteneur devant être créé dans votre définition de tâche, effectuez les opérations suivantes :

    1. Sous Container Definitions (Définitions de conteneur), choisissez Add container (Ajouter un conteneur).

    2. Pour Container name (Nom du conteneur), saisissez le nom de votre conteneur. Il peut comporter jusqu'à 255 lettres (majuscules et minuscules), des chiffres, des tirets ou des traits de soulignement.

    3. Pour Image, saisissez le nom de l'image ou le chemin d'accès à votre image privée. Il peut comporter jusqu'à 255 lettres (majuscules et minuscules), des chiffres, des tirets ou des traits de soulignement.

    4. Développez Advanced container configuration (Configuration de conteneur avancée).

    5. Pour les secrets de conteneur référencés en tant que variables d'environnement, sous Environment (Environnement), pour Environment variables (Variables d’environnement), complétez les champs suivants :

      1. Pour Clé, saisissez le nom de la variable d'environnement à définir dans le conteneur. Cela correspond au champ name de la section secrets d'une définition de conteneur.

      2. Pour Valeur, choisissez ValueFrom. Pour Ajouter une valeur, saisissez l'ARN complet du secret Secrets Manager, ou le nom ou l'ARN complet du paramètre AWS Systems Manager Parameter Store qui contient les données à présenter à votre conteneur comme variable d'environnement.

        Note

        Si le paramètre Parameter Store Systems Manager existe dans la même région que la tâche que vous lancez, vous pouvez utiliser le nom ou l'ARN complet du secret. Si le paramètre existe dans une autre région, l'ARN complet doit être spécifié.

    6. Pour les secrets référencés dans la configuration de journal pour un conteneur, sous Storage and Logging (Stockage et journalisation), pour Log configuration (Configuration de journal), complétez les champs suivants :

      1. Désélectionnez l'option Auto-configure CloudWatch Logs (Configurer CloudWatch Logs automatiquement).

      2. Sous Log options (Options de journal), pour Key (Clé), saisissez le nom de l'option de configuration de journaux à définir.

      3. Pour Valeur, choisissez ValueFrom. Pour Add value (Ajouter une valeur), saisissez l'ARN complet du secret Secrets Manager, ou le nom ou l'ARN complet du paramètre AWS Systems Manager Parameter Store qui contient les données à présenter à votre conteneur comme option de journal.

        Note

        Si le paramètre Systems Manager Parameter Store existe dans la même région que la tâche que vous lancez, vous pouvez utiliser le nom ou l'ARN complet du secret. Si le paramètre existe dans une autre région, l'ARN complet doit être spécifié.

    7. Remplissez les champs obligatoires restants et tous les champs facultatifs à utiliser dans vos définitions de conteneur. D'autres paramètres de définition de conteneur sont disponibles dans le menu Advanced container configuration (Configuration de conteneur avancée). Pour plus d'informations, consultez Paramètres de définition de tâche.

    8. Choisissez Add (Ajouter).

  7. Lorsque vos conteneurs sont ajoutés, choisissez Create (Créer).