Configurei o Amazon Elastic Container Service (Amazon ECS) para acessar informações sensíveis, como credenciais de banco de dados ou chaves de API. Quero gerenciar e recuperar com segurança segredos que não estão codificados.
Resolução
Para gerenciar segredos e chaves de acesso que não estão codificados, use o AWS Secrets Manager ou o Parameter Store, um recurso do AWS Systems Manager.
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Crie um segredo
Para criar um segredo, use o console do Secrets Manager ou a AWS CLI. Para usar o Parameter Store para armazenar o segredo, execute o seguinte comando put-parameter:
aws ssm put-parameter --type SecureString --name awsExampleParameter --value awsExampleValue
Observação: Substitua awsExampleParameter pelo seu parâmetro e awsExampleValue pelo seu segredo.
Permita que as tarefas do Amazon ECS acessem seus segredos
O Amazon ECS usa um perfil de execução de tarefas do AWS Identity and Access Management (AWS IAM) para obter informações secretas do Secrets Manager ou do Parameter Store. Crie uma política do IAM para o perfil que tenha as permissões mínimas necessárias. Se você usa o Secrets Manager, o perfil do IAM deve ter permissões secretsmanager:GetSecretValue. Se você usa o Parameter Store, o perfil do IAM deve ter permissões ssm:GetParameters e kms:Decrypt.
Exemplo de política do Secrets Manager:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
}
]
}
Observação: Substitua arn:aws:secretsmanager:region:account-id:secret:secret-name pelo seu ARN secreto.
Exemplo de política do 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"
}
]
}
Observação: Substitua arn:aws:ssm:region:account-id:parameter/parameter-name pelo ARN do seu parâmetro e arn:aws:kms:region:account-id:key/kms-key-id pela sua chave do AWS Key Management Service (AWS KMS).
Anexe a política do IAM ao perfil de execução de tarefas do Amazon ECS.
Acesse seus segredos de tarefa do Amazon ECS
É possível transferir dados sensíveis, como chaves ou credenciais de API, como parâmetros ou variáveis de ambiente. Primeiro, modifique sua definição de tarefa do Amazon ECS para incluir suas variáveis de ambiente ou mapeamentos secretos.
Exemplo de mapeamento secreto em uma definição de tarefa:
{
"name": "MY_SECRET",
"valueFrom": "arn:aws:secretsmanager:region:account-id:secret:secret-name"
}
Em seguida, transfira as variáveis de ambiente para um contêiner do Amazon ECS.
Exemplo de containerDefinitions na definição da tarefa:
- name: my-container
environment:
- name: Example_PASSWORD
valueFrom: arn:aws:ssm:us-west-2:123456789012:parameter/my-app/example-password
Gerencie seus segredos com CI/CD
Use variáveis de ambiente para transferir segredos dinamicamente durante implantações de integração contínua e entrega contínua (CI/CD). Obtenha segredos do Secrets Manager ou do Parameter Store em scripts de implantação. Não codifique segredos nas definições de tarefa. Em vez disso, use parâmetros ou espaços reservados. Para obter mais informações e práticas recomendadas, consulte Strengthen the DevOps pipeline and protect data with AWS Secrets Manager, AWS KMS, and AWS Certificate Manager (Fortalecer o pipeline de DevOps e proteger os dados com o AWS Secrets Manager, o AWS KMS e o AWS Certificate Manager).
Por exemplo, se você usa o AWS CodePipeline, configure uma etapa de criação que usa a AWS CLI para obter segredos:
bashCopy codeaws secretsmanager get-secret-value --secret-id secret-name --query 'SecretString' --output text
Observação: Substitua o secret-name pelo seu segredo.
Solucionar problemas com o gerenciamento de segredos
Se você encontrar problemas ao usar segredos no Amazon ECS, execute as seguintes ações:
-
Certifique-se de que o perfil do IAM da tarefa do Amazon ECS tenha as permissões corretas de secretsmanager:GetSecretValue ou ssm:GetParameter.
-
Se você receber erros Denied, certifique-se de que a política do IAM esteja anexada ao perfil correto de execução de tarefas do Amazon ECS. Além disso, certifique-se de que o ARN secreto da política do IAM esteja correto.
-
Se o Amazon ECS não conseguir obter o segredo, verifique se você está usando a Região e o segredo corretos da AWS. Para testar o segredo, execute o seguinte comando get-secret-value fora do Amazon ECS:
aws secretsmanager get-secret-value --secret-id secret-name --region region-code
Observação: Substitua secret-name pelo seu segredo e region-code pela sua região.