Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Comment transmettre des secrets ou des informations sensibles en toute sécurité à des conteneurs dans une tâche Amazon ECS ?
Je souhaite transmettre en toute sécurité des secrets ou des informations sensibles à des conteneurs dans le cadre d'une tâche pour Amazon Elastic Container Service (Amazon ECS).
Brève description
Si vous transmettez des données sensibles en texte brut, cela peut entraîner des problèmes de sécurité. Les données peuvent être détectées dans la console de gestion AWS ou via l'API AWS DescribeTaskDefinition.
En tant que bonne pratique de sécurité, transmettez des informations sensibles aux conteneurs en tant que variables d'environnement. Pour injecter des données en toute sécurité dans des conteneurs, référencez les valeurs stockées dans Parameter Store, une fonctionnalité d'AWS Systems Manager. Vous pouvez également utiliser AWS Secrets Manager dans une définition de tâche Amazon ECS. Vous pouvez ensuite exposer vos informations sensibles sous forme de variables d'environnement ou dans la configuration du journal d'un conteneur.
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Prérequis :
- Vos tâches doivent utiliser la version 1.3.0 ou ultérieure de la plateforme AWS Fargate avec le type de lancement AWS Fargate.
- Vos instances de conteneur doivent utiliser la version 1.22.0 ou ultérieure d’amazon-ecs-agent avec le type de lancement Amazon Elastic Compute Cloud (Amazon EC2). Pour plus d’informations, consultez la page Changelog sur le site Web de GitHub.
- Votre plateforme Fargate doit disposer de la version 1.4.0 ou ultérieure pour Linux ou de la version 1.0.0 pour Windows pour injecter une clé JSON.
- Pour utiliser des clés JSON ou des versions de secret spécifiques, l'agent de conteneur ECS de votre instance de conteneur doit exécuter la version 1.37.0 ou ultérieure pour l'injection des secrets.
- L'agent de conteneur ECS de votre instance de conteneur doit exécuter la version 1.22.0 ou ultérieure pour injecter le contenu complet des secrets dans les configurations de journal ou les variables d'environnement.
Créer le rôle et les politiques IAM
Procédez comme suit :
-
Stockez vos informations sensibles dans Parameter Store ou Secrets Manager.
Pour Parameter Store, exécutez la commande put-parameter de l’AWS CLI suivante :
aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValueRemarque : Remplacez awsExampleParameter par vos propres paramètres. Remplacez awsExampleValue par la valeur de votre secret.
Pour Secrets Manager, exécutez la commande create-secret de l’AWS CLI suivante :
aws secretsmanager create-secret --name awsExampleParameter --secret-string awsExampleValueRemarque : Remplacez awsExampleParameter par vos propres paramètres. Remplacez awsExampleValue par la valeur de votre secret. L'agent de conteneur ECS utilise un rôle d'exécution de tâche pour récupérer les informations depuis le Parameter Store ou Secrets Manager. Le rôle d'exécution de tâche doit accorder des autorisations aux actions ssm:GetParameters, secretsmanager:GetSecretValue et kms:Decrypt.
-
Ouvrez la console Gestion des identités et des accès AWS (AWS IAM).
-
Créez un rôle avec une relation d’approbation pour ecs-tasks.amazonaws.com.
Exemple de politique d’approbation d’un rôle :{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
Choisissez Rôles, puis sélectionnez le rôle que vous avez créé.
-
Dans l'onglet Autorisations, choisissez la liste déroulante Ajouter des autorisations.
-
Sélectionnez Créer une politique en ligne, puis choisissez l’onglet JSON.
-
Saisissez la politique suivante :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter", "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter*" ] } ] }Remarque : Remplacez us-east-1 et awsExampleAccountID par la région AWS et le compte dans lesquels vous avez enregistré vos paramètres. Remplacez awsExampleParameter par le nom des paramètres que vous avez créés. Vous pouvez utiliser une clé gérée par le client AWS Key Management Service (AWS KMS) pour chiffrer les données dans Parameter Store ou Secrets Manager. Pour utiliser la clé gérée par le client, obtenez les autorisations pour kms:Decrypt.
-
(Facultatif) Attachez la politique gérée AmazonECSTaskExecutionRolePolicy au rôle que vous avez créé.
Important : Les tâches qui envoient des journaux à Amazon CloudWatch ou qui utilisent des images stockées dans Amazon Elastic Container Registry (Amazon ECR) doivent disposer d'une politique gérée.
Référencer les informations sensibles dans la définition de tâche ECS
Utilisez la console Amazon ECS ou l'interface de ligne de commande AWS pour référencer des informations sensibles dans la définition de tâche ECS.
Utiliser la console Amazon ECS
Procédez comme suit :
- Ouvrez la console Amazon ECS.
- Dans le volet de navigation, sélectionnez Définitions de tâches, puis Créer une nouvelle définition de tâche.
Dans Famille de définition de tâche, saisissez un nom.
Dans Type de lancement, choisissez les instances AWS Fargate ou Amazon EC2 comme type de lancement. - Dans Rôle d'exécution de tâche, choisissez le rôle IAM d'exécution de tâche que vous avez créé.
- Dans la section Définitions des conteneurs, dans la section Variables d’environnement, choisissez Ajouter une variable d'environnement.
- Dans le champ Clé, saisissez une clé pour votre variable d'environnement.
- Dans la liste déroulante ValueType, choisissez ValueFrom.
- Dans la zone de texte de la clé, saisissez l’Amazon Resource Name (ARN) de votre ressource Parameter Store ou Secrets Manager.
Remarque : Vous pouvez également spécifier des secrets dans la configuration du pilote de journal.
Utiliser l’interface de ligne de commande AWS
Utilisez la section secrets pour référencer les ressources Parameter Store ou Secrets Manager dans la définition de tâche en tant que variables d'environnement. Vous pouvez également utiliser la section secretOptions pour faire référence à Parameter Store ou à Secrets Manager comme options de configuration de journaux.
Exemple de définition de tâche :
{ "requiresCompatibilities": [ "EC2" ], "family": "Web", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "web", "image": "httpd", "memory": 128, "essential": true, "portMappings": [ { "containerPort": 80, "protocol": "tcp" } ], "logConfiguration": { "logDriver": "splunk", "options": { "splunk-url": "https://sample.splunk.com:8080" }, "secretOptions": [ { "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:us-east-1:awsExampleAccountID:secret:awsExampleParameter" } ] }, "secrets": [ { "name": "DATABASE_PASSWORD", "valueFrom": "arn:aws:ssm:us-east-1:awsExampleAccountID:parameter/awsExampleParameter" } ] } ], "executionRoleArn": "arn:aws:iam::awsExampleAccountID:role/awsExampleRoleName" }
Remarque : Remplacez us-east-1 et awsExampleAccountID par votre région et votre ID de compte. Remplacez awsExampleParameter par le paramètre que vous avez créé. Remplacez awsExampleRoleName par le rôle que vous avez créé.
Puis, exécutez la commande register-task-definition de l’AWS CLI suivante pour enregistrer la définition de tâche :
aws ecs register-task-definition --family-name yourTaskDefinitionFamily --cli-input-json file://pathToYourJsonFile
Remarque : Remplacez yourTaskDefinitionFamily par le nom de votre famille de définitions de tâche.
Lorsque vous lancez une tâche avec cette définition, l'agent de conteneur ECS résout automatiquement les secrets. Ensuite, l'agent de conteneur injecte les valeurs sous forme de variables d'environnement dans le conteneur.
Mettre à jour les secrets et déployer les modifications
Lorsque vous démarrez le conteneur ECS, celui-ci y injecte des données sensibles. Si vous mettez à jour ou alternez le paramètre du secret ou Parameter Store, le conteneur ne reçoit pas automatiquement la valeur mise à jour. Vous devez lancer une nouvelle tâche. Si votre tâche fait partie d'un service, mettez ce dernier à jour. Pour forcer le service à lancer une nouvelle tâche, utilisez l'option Forcer un nouveau déploiement.
Pour forcer un nouveau déploiement, procédez comme suit :
- Ouvrez la console Amazon ECS.
- Choisissez Clusters, puis sélectionnez le cluster contenant votre service.
- Sélectionnez Forcer un nouveau déploiement dans la liste déroulante Mettre à jour.
Remarque : Pour forcer un nouveau déploiement depuis l'AWS CLI, exécutez la commande update-service avec l'indicateur --force-new-deployment.
Informations connexes
- Sujets
- Containers
- Langue
- Français
Vidéos associées


Contenus pertinents
- demandé il y a 6 mois
- demandé il y a 8 mois
- demandé il y a 7 mois
- Réponse acceptéedemandé il y a un an
AWS OFFICIELA mis à jour il y a 3 ans