Usar o Secrets Manager - Amazon ECS

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o Secrets Manager

Ao injetar um segredo como uma variável de ambiente, você pode especificar o conteúdo completo de um segredo, uma chave JSON específica em um segredo ou uma versão específica de um segredo a ser injetado. Isso ajuda você a controlar os dados sigilosos expostos ao seu contêiner. Para obter mais informações sobre o versionamento de segredos, consulte Termos e conceitos importantes do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.

Considerações

As informações a seguir devem ser consideradas ao usar uma variável de ambiente para injetar um segredo do Secrets Manager em um contêiner.

  • Os dados sigilosos são injetados no contêiner inicialmente quando o contêiner é iniciado. Se o segredo for posteriormente atualizado ou modificado, o contêiner não receberá o valor atualizado automaticamente. Você deve executar uma nova tarefa ou se a tarefa for parte de um serviço, você poderá atualizar o serviço e usar a opção Force new deployment (Forçar nova implantação) para forçar o serviço a iniciar uma nova tarefa.

  • Para tarefas do Amazon ECS no AWS Fargate, o seguinte deve ser considerado:

    • Para injetar o conteúdo completo de um segredo como uma variável de ambiente ou em uma configuração de log, você deve usar a versão 1.3.0 ou posterior da plataforma. Para ter mais informações, consulte Versões da plataforma do AWS Fargate.

    • Para injetar uma chave JSON ou uma versão específica de um segredo como uma variável de ambiente ou em uma configuração de log, você deve usar a versão 1.4.0 ou posterior (Linux) ou 1.0.0 (windows) da plataforma. Para ter mais informações, consulte Versões da plataforma do AWS Fargate.

  • Use os endpoints da VPC de interface para aprimorar os controles de segurança. É necessário criar endpoints da VPC de interface para o Secrets Manager. Para obter informações sobre o VPC endpoint, consulte Criar VPC endpoints no Guia do usuário. AWS Secrets Manager

Permissões do IAM

Para usar esse recurso, você deve ter a função de execução de tarefas do Amazon ECS e fazer referência a ela na definição de tarefa. Para obter mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.

Para fornecer acesso aos segredos do Secrets Manager criados por você, adicione manualmente as permissões a seguir à função de execução da tarefa como uma política em linha. Para obter mais informações, consulte Adicionar e remover políticas do IAM.

  • secretsmanager:GetSecretValue: obrigatório se você estiver fazendo referência a um segredo do Secrets Manager. Adiciona a permissão para recuperar o segredo do Secrets Manager.

  • kms:Decrypt: obrigatório somente se o segredo usar uma chave gerenciada pelo cliente e não a chave padrão. O ARN da chave gerenciada pelo cliente deve ser adicionado como um recurso. Adiciona a permissão para descriptografar a chave gerenciada pelo cliente.

O exemplo de política a seguir adiciona as permissões necessárias:

{ "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" ] } ] }

Criar o segredo do AWS Secrets Manager

Você pode usar o console do Secrets Manager para criar um segredo para seus dados sigilosos. Para obter mais informações, consulte Criar um segredo do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.

Adicionar a variável de ambiente à definição de contêiner

Na definição de contêiner, você pode especificar o seguinte:

  • O objeto secrets contendo o nome da variável de ambiente a ser definida no contêiner

  • O nome do recurso da Amazon (ARN) do segredo do Secrets Manager

  • Parâmetros adicionais que contêm os dados confidenciais a serem apresentados ao contêiner

O exemplo a seguir mostra a sintaxe completa que deve ser especificada para o segredo do Secrets Manager.

arn:aws:secretsmanager:region:aws_account_id:secret:secret-name

A seção a seguir descreve os parâmetros adicionais. Esses parâmetros são opcionais, mas, se não usá-los, você deverá incluir os dois-pontos : para usar os valores padrão. Abaixo, você encontra exemplos que fornecem mais contexto.

json-key

Especifica o nome da chave em um par de chave-valor com o valor que você deseja definir como o valor da variável de ambiente. Somente valores no formato JSON são compatíveis. Se você não especificar uma chave JSON, será usado o conteúdo completo do segredo.

version-stage

Especifica o rótulo de preparação da versão de um segredo que você deseja usar. Se um rótulo de preparação de versão for especificado, você não poderá especificar um ID de versão. Se nenhum estágio de versão for especificado, o comportamento padrão será recuperar o segredo com o rótulo de preparação AWSCURRENT.

Os rótulos de preparação são usados para manter o controle de diferentes versões de um segredo quando eles são atualizados ou modificados. Cada versão de um segredo tem um ou mais rótulos de preparação e um ID. Para obter mais informações, consulte Termos e conceitos principais do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.

version-id

Especifica o identificador exclusivo da versão do segredo que você deseja usar. Se um ID de versão for especificado, você não poderá especificar um rótulo de preparação de versão. Se nenhum ID de versão for especificado, o comportamento padrão será recuperar o segredo com o rótulo de preparação AWSCURRENT.

Os IDs de versão são usados para manter o controle de diferentes versões de um segredo quando eles são atualizados ou modificados. Cada versão de um segredo tem um ID. Para obter mais informações, consulte Termos e conceitos principais do AWS Secrets Manager no Guia do usuário do AWS Secrets Manager.

Exemplo de definições de contêiner

Os exemplos a seguir mostram maneiras como você pode fazer referência a segredos do Secrets Manager nas suas definições de contêiner.

exemplo fazer referência a um segredo completo

Veja a seguir um trecho de uma definição de tarefa mostrando o formato ao fazer referência ao texto completo de um segredo do Secrets Manager.

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

Para acessar o valor desse segredo diretamente do contêiner, você precisaria chamar $environment_variable_name.

exemplo fazer referência a uma chave específica dentro de um segredo

Veja a seguir um exemplo de saída de um get-secret-valuecomando que exibe o conteúdo de um segredo junto com o rótulo de preparação da versão e o ID da versão associado a ele.

{ "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf", "Name": "appauthexample", "VersionId": "871d9eca-18aa-46a9-8785-981ddEXAMPLE", "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}", "VersionStages": [ "AWSCURRENT" ], "CreatedDate": 1581968848.921 }

Faça referência a uma chave específica da saída anterior em uma definição de contêiner especificando o nome da chave no final do ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }] }
exemplo fazer referência a uma versão secreta específica

A seguir está um exemplo de saída de um comando describe-secret que exibe o conteúdo não criptografado de um segredo juntamente com os metadados de todas as versões do segredo.

{ "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf", "Name": "appauthexample", "Description": "Example of a secret containing application authorization data.", "RotationEnabled": false, "LastChangedDate": 1581968848.926, "LastAccessedDate": 1581897600.0, "Tags": [], "VersionIdsToStages": { "871d9eca-18aa-46a9-8785-981ddEXAMPLE": [ "AWSCURRENT" ], "9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE": [ "AWSPREVIOUS" ] } }

Faça referência a um rótulo de preparação de versão específico da saída anterior em uma definição de contêiner especificando o nome da chave no final do ARN.

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

Faça referência a um ID de versão específico da saída anterior em uma definição de contêiner especificando o nome da chave no final do ARN.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }

Criar uma definição de tarefa que faça referência a dados confidenciais

Você pode usar o console do Amazon ECS para criar uma definição de tarefa que faça referência a um segredo do Secrets Manager.

  1. Abra o console em https://console.aws.amazon.com/ecs/v2.

  2. No painel de navegação, escolha Task definitions (Definições de tarefas)

  3. Escolha Create new task definition (Criar nova definição de tarefa), Create new task definition (Criar nova definição de tarefa).

  4. Em Task definition family (Família de definição de tarefa), especifique um nome exclusivo para a definição de tarefa.

  5. Para cada contêiner ser definido em sua definição de tarefa, conclua as seguintes etapas.

    1. Em Name (Nome), insira um nome para o contêiner.

    2. Em Image URI (URI da imagem), especifique a imagem a ser usada para iniciar um contêiner. As imagens no registro da Galeria pública do Amazon ECR podem ser especificadas usando apenas o nome do registro do Amazon ECR Public. Por exemplo, se public.ecr.aws/ecs/amazon-ecs-agent:latest for especificado, o contêiner Amazon Linux hospedado na Amazon ECR Public Gallery será usado. Para todos os outros repositórios, especifique o repositório usando os formatos repository-url/image:tag ou repository-url/image@digest.

    3. Em Essential container (Contêiner essencial), se a definição da tarefa tiver dois ou mais contêineres definidos, você poderá especificar se o contêiner deve ser considerado essencial. Se um contêiner estiver marcado como essencial, caso esse contêiner pare, a tarefa será interrompida. Cada definição de tarefa deve conter pelo menos um contêiner essencial.

    4. Um mapeamento de porta permite que o contêiner acesse portas no host para enviar ou receber tráfego. Em Port mappings (Mapeamentos de porta), siga um destes procedimentos:

      • Quando você usar o modo de rede awsvpc, em Container port (Porta do contêiner) e Protocol (Protocolo), escolha o mapeamento de porta a ser usado para o contêiner.

      • Quando você usar o modo de rede bridge, em Container port (Porta do contêiner) e Protocol (Protocolo), especifique o mapeamento de porta a ser usado para o contêiner. Selecione o modo de rede bridge na próxima página. Depois de selecioná-lo, escolha Previous (Anterior), e depois, em Host port (Porta do host), especifique o número da porta na instância do contêiner a ser reservado para seu contêiner.

      Escolha Add more port mappings (Adicionar mais mapeamentos de portas) para especificar mapeamentos de porta de contêiner adicionais.

    5. Para dados confidenciais a serem injetados como variáveis de ambiente, em Environment (Ambiente), para Environment variables (Variáveis de ambiente), preencha os seguintes campos:

      1. Em Key (Chave), insira o nome da variável de ambiente a ser definida no contêiner. Isso corresponde ao campo name na seção secrets de definição de contêiner.

      2. Para Tipo de valor, escolha ValueFrom. Em Add value (Adicionar valor), insira o ARN do segredo do Secrets Manager que contém os dados a serem apresentados ao contêiner como uma variável de ambiente.

    6. (Opcional) Escolha Add more containers (Adicionar mais contêineres) para incluir contêineres adicionais à definição de tarefa. Selecione Next (Próximo) quando todos os contêineres tiverem sido definidos.

  6. Em Ambiente de aplicação, Tamanho da tarefa e Tamanho do contêiner, preencha os campos obrigatórios restantes e todos os campos opcionais.

  7. (Opcional) Expanda a seção Task roles, network mode (Funções de tarefa, modo de rede) para especificar o seguinte:

    1. Em Task role (Perfil da tarefa), escolha um perfil do IAM para atribuir à tarefa. Uma função do IAM de tarefa fornece permissões para os contêineres em uma tarefa para chamar APIs da AWS.

  8. (Opcional) A seção Storage (Armazenamento) é usada para expandir a quantidade de armazenamento temporário para tarefas hospedadas no Fargate, bem como adicionar uma configuração de volume de dados para a tarefa.

    1. Para expandir o armazenamento temporário disponível além do valor padrão de 20 GiB para as tarefas do Fargate, em Amount (Quantidade), insira um valor até 200 GiB.

  9. Para dados confidenciais com referência na configuração de log para um contêiner, em Usar coleta de logs, para Configuração de log, preencha a seguinte configuração:

    1. Selecione a opção de log e, em Chave, escolha Adicionar.

    2. Em Chave, insira o nome da opção de configuração de log a ser definida.

    3. Em Valor, insira o ARN completo do segredo do Secrets Manager que contém os dados a serem apresentados à sua configuração de log como uma opção de log.

    4. Para Tipo de valor, escolha ValueFrom.

  10. Escolha Next (Avançar) para revisar a definição de tarefa.

  11. Na página Review and create (Revisar e criar), revise cada seção de definição de tarefa. Escolha Edit (Editar) para fazer alterações. Quando a definição da tarefa estiver concluída, escolha Create (Criar) para registrar a definição de tarefa.