Passer au contenu

Comment puis-je gérer les secrets et les clés d'accès pour les tâches et les services Amazon ECS ?

Lecture de 4 minute(s)
0

J'ai configuré Amazon Elastic Container Service (Amazon ECS) pour accéder à des informations sensibles, telles que les informations d'identification de base de données ou les clés d'API. Je souhaite gérer et récupérer en toute sécurité les secrets qui ne sont pas codés en dur.

Résolution

Pour gérer les secrets et les clés d'accès qui ne sont pas codés en dur, utilisez AWS Secrets Manager ou Parameter Store, une fonctionnalité d'AWS Systems Manager.

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'interface.

Créer un secret

Pour créer un secret, utilisez la console Secrets Manager ou l'AWS CLI. Pour utiliser Parameter Store afin de stocker le secret, exécutez la commande put-parameter suivante :

aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue

Remarque : Remplacez awsExampleParameter par votre paramètre awsExampleValue par votre secret.

Autoriser les tâches Amazon ECS à accéder à vos secrets

Amazon ECS utilise un rôle d'exécution de tâche Gestion des identités et des accès AWS (AWS IAM) pour obtenir des informations secrètes depuis Secrets Manager ou Parameter Store. Créez une politique IAM pour le rôle qui dispose des autorisations minimales requises. Si vous utilisez Secrets Manager, le rôle IAM doit disposer des autorisations secretsmanager:GetSecretValue. Si vous utilisez Parameter Store, le rôle IAM doit disposer des autorisations ssm:GetParameters et kms:Decrypt.

Exemple de stratégie Secrets Manager :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
    }
  ]
}

Remarque : Remplacez arn:aws:secretsmanager:region:account-id:secret:secret-name par votre ARN de secret.

Exemple de stratégie Parameter Store :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:GetParameters",
                "ssm:GetParameterHistory"
            ],
            "Resource": "arn:aws:ssm:region:account-id:parameter/parameter-name"
        },
        {
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:region:account-id:key/kms-key-id"
        }
    ]
}

Remarque : Remplacez arn:aws:ssm:region:account-id:parameter/parameter-name par l'ARN de votre paramètre et arn:aws:kms:region:account-id:key/kms-key-id par votre clé AWS Key Management Service (AWS KMS).

Associez la stratégie IAM au rôle d'exécution de tâche Amazon ECS.

Accéder à vos secrets de tâche Amazon ECS

Vous pouvez transmettre des données sensibles, telles que des clés d'API ou des informations d'identification, en tant que paramètres ou variables d'environnement. Tout d’abord, modifiez la définition de votre tâche Amazon ECS pour inclure vos variables d'environnement ou vos mappages secrets.

Exemple de mappage secret dans une définition de tâche :

{
  "name": "MY_SECRET",
  "valueFrom": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
}

Puis, transmettez les variables d'environnement au conteneur Amazon ECS.

Exemple de containerDefinitions dans la définition de tâche :

  - name: my-container
    environment:
      - name: Example_PASSWORD
        valueFrom: arn:aws:ssm:us-west-2:123456789012:parameter/my-app/example-password

Gérer vos secrets avec CI/CD

Utilisez des variables d'environnement pour transmettre des secrets de manière dynamique lors des déploiements d'intégration continue et de livraison continue (CI/CD). Obtenez des secrets depuis Secrets Manager ou Parameter Store dans les scripts de déploiement. Ne codez pas de secrets en dur dans les définitions de tâche. Utilisez plutôt des paramètres ou des espaces réservés. Pour plus d'informations et pour connaître les bonnes pratiques, consultez la section Renforcer le pipeline DevOps et protéger les données avec AWS Secrets Manager, AWS KMS et AWS Certificate Manager.

Par exemple, si vous utilisez AWS CodePipeline, configurez une étape de création qui utilise l'AWS CLI pour obtenir des secrets :

bashCopy codeaws secretsmanager get-secret-value --secret-id secret-name --query 'SecretString' --output text

Remarque : Remplacez secret-name par votre secret.

Résoudre les problèmes liés à la gestion des secrets

Si vous rencontrez des problèmes lorsque vous utilisez des secrets dans Amazon ECS, prenez les mesures suivantes :

  • Assurez-vous que le rôle IAM de la tâche Amazon ECS possède les autorisations secretsmanager:GetSecretValue ou ssm:GetParameter.

  • Si vous recevez des erreurs Refusé, assurez-vous que la stratégie IAM est associée au rôle d'exécution de tâche Amazon ECS correct. Assurez-vous également que l'ARN de secret de la stratégie IAM est exact.

  • Si Amazon ECS ne parvient pas à obtenir le secret, vérifiez que vous utilisez la région AWS et le secret appropriés. Pour tester le secret, exécutez la commande get-secret-value en dehors d'Amazon ECS :

    aws secretsmanager get-secret-value --secret-id secret-name --region region-code

    Remarque : Remplacez secret-name par votre secret et region-code par votre région.

AWS OFFICIELA mis à jour il y a 2 ans