Transferência de dados confidenciais para um contêiner do Amazon ECS - Amazon Elastic Container Service

Transferência de dados confidenciais para um contêiner do Amazon ECS

É possível transmitir dados confidenciais (p. ex., credenciais de um banco de dados) para seu contêiner com segurança.

Os segredos, como as chaves de API e as credenciais de banco de dados, são frequentemente usados por aplicações para obter acesso a outros sistemas. Eles geralmente consistem em um nome de usuário e senha, um certificado ou uma chave de API. O acesso a esses segredos deve ser restrito a entidades principais específicas do IAM que estejam usando o IAM, e injetados em contêineres no runtime.

Os segredos podem ser injetados perfeitamente nos contêineres a partir do AWS Secrets Manager e do Systems Manager Parameter Store do Amazon ECS. Esses segredos podem ser referenciados em sua tarefa como qualquer um dos seguintes.

  1. Eles são referenciadas como variáveis de ambiente que usam o parâmetro de definição de contêiner secrets.

  2. Eles são referenciados como secretOptions se sua plataforma de registro em log exigir autenticação. Para obter mais informações, consulte opções de configuração de logs.

  3. Eles são referenciados como segredos extraídos por imagens que usam o parâmetro de definição do contêiner repositoryCredentials se o registro de onde o contêiner está sendo retirado exigir autenticação. Use esse método ao extrair imagens da Galeria Pública do Amazon ECR. Para obter mais informações, consulte Autenticação de registro privado para tarefas.

Recomendamos fazer o seguinte ao configurar o gerenciamento de segredos.

Usar o AWS Secrets Manager ou o AWS Systems Manager Parameter Store para armazenar materiais secretos

Você deve armazenar com segurança chaves de API, credenciais de banco de dados e outros materiais secretos no Secrets Manager ou como um parâmetro criptografado no Systems Manager Parameter Store. Esses serviços são semelhantes porque ambos são armazenamentos gerenciados de chave-valor que usam AWS KMS para criptografar dados sigilosos. O Secrets Manager, entretanto, também inclui a capacidade de alternar segredos automaticamente, gerar segredos aleatórios e compartilhar segredos entre contas. Se você considerar esses recursos importantes, use o Secrets Manager, caso contrário, use parâmetros criptografados.

Importante

Se seu segredo mudar, você deverá forçar uma nova implantação ou iniciar uma nova tarefa para recuperar o valor secreto mais recente. Para obter mais informações, consulte os tópicos a seguir.

Recuperação de dados de um bucket criptografado do Amazon S3

Você deve armazenar os segredos em um bucket criptografado do Amazon S3 e usar perfis de tarefa para restringir o acesso a esses segredos. Isso evita que os valores das variáveis de ambiente vazem inadvertidamente nos logs e sejam revelados durante a execução do docker inspect. Ao fazer isso, sua aplicação deve ser gravada para ler o segredo do bucket do Amazon S3. Para obter instruções, consulte Definição do comportamento padrão da criptografia do lado do servidor para buckets do Amazon S3.

Monte o segredo em um volume usando um contêiner auxiliar

Como há um risco elevado de vazamento de dados com variáveis de ambiente, você deve usar um contêiner auxiliar que leia seus segredos do AWS Secrets Manager e os grave em um volume compartilhado. Esse contêiner pode ser executado e sair antes do contêiner da aplicação usando o pedido de contêineres do Amazon ECS. Quando você faz isso, o contêiner da aplicação monta posteriormente o volume em que o segredo foi gravado. Assim como o método de bucket do Amazon S3, sua aplicação deve ser gravada para ler o segredo do volume compartilhado. Como o volume tem como escopo a tarefa, o volume será excluído automaticamente após a interrupção da tarefa. Para ver um exemplo de contêiner auxiliar, consulte o projeto aws-secret-sidecar-injector.

No Amazon EC2, o volume no qual o segredo é gravado pode ser criptografado com uma chave gerenciada pelo cliente AWS KMS. No AWS Fargate, o armazenamento em volume é criptografado automaticamente usando uma chave gerenciada pelo serviço.