Recuperação de segredos do Secrets Manager por meio de variáveis ​​de ambiente do Amazon ECS - Amazon Elastic Container Service

Recuperação de segredos do Secrets Manager por meio de variáveis ​​de ambiente do Amazon ECS

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 versionamento de segredos, consulte ‭Qual é o conteúdo de um segredo do Secrets Manager?‭‬ no Guia do usuário‭ do AWS Secrets Manager.

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, será possível 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, considere o seguinte:

    • 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 Fargate para o Amazon ECS.

    • 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 Fargate para o Amazon ECS.

  • Para tarefas do Amazon ECS no EC2, é necessário considerar o seguinte:

    • Para injetar um segredo usando uma chave JSON ou uma versão específica de um segredo, sua instância de contêiner deve ter a versão 1.37.0 ou posterior do agente de contêiner. No entanto, recomendamos usar a versão mais recente do agente de contêiner. Para obter informações sobre como verificar a versão do agente e atualizar para a versão mais recente, consulte Atualizar o agente de contêiner do Amazon ECS.

      Para injetar o conteúdo completo de um segredo como uma variável de ambiente ou injetar um segredo em uma configuração de log, sua instância de contêiner deve ter a versão 1.22.0 ou posterior do agente de contêiner.

  • Use os endpoints da VPC de interface para aprimorar os controles de segurança e se conectar ao Secrets Manager por meio de uma sub-rede privada. É necessário criar endpoints da VPC de interface para o Secrets Manager. Para obter informações o endpoint da VPC, consulte Criar endpoints da VPC no Guia do usuário do AWS Secrets Manager. Para obter mais informações sobre como usar o Secrets Manager e a Amazon VPC, consulte How to connect to Secrets Manager service within a Amazon VPC.

  • Para tarefas do Windows configuradas para usar o driver de log awslogs, também é necessário definir a variável de ambiente ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE na instância de contêiner. Use a seguinte sintaxe:

    <powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>
  • A definição de tarefa deve usar um perfil de execução de tarefa com as permissões adicionais para o Secrets Manager. Para ter mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.

Criar o segredo do AWS Secrets Manager

É possível 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:json-key:version-stage:version-id

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, exemplos provendo mais contexto.

json-key

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

version-stage

Especifique o rótulo de preparação da versão do segredo que 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.

Rótulos de preparação são usados para monitoramento de diferentes versões de um segredo quando eles forem atualizados ou alternados. Cada versão de um segredo tem um ou mais rótulos de preparação e uma 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 nenhuma ID de versão for especificada, o comportamento padrão será recuperar o segredo com o rótulo de preparação AWSCURRENT.

IDs da versão são usadas para monitoramento de diferentes versões de um segredo quando atualizados ou alternados. Cada versão de um segredo tem uma 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 Referenciando um segredo completo

O seguinte é um trecho de definição de tarefa mostrando formato, ao fazer referência ao texto completo de um segredo 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 Referenciando uma chave específica dentro de um segredo

O seguinte é um exemplo de saída de comando get-secret-value exibe o conteúdo de um segredo junto ao rótulo de estágio da versão e ID da versão associada 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 de saída anterior em uma definição de contêiner especificando o nome da chave no fim do ARN.

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

O seguinte é um exemplo de saída de comando describe-secret exibindo o conteúdo não criptografado de um segredo junto aos 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 específico de preparação de versão de saída anterior em uma definição de contêiner especificando o nome da chave no fim 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 uma ID da versão 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:::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE" }] }] }
exemplo Referenciando uma chave específica e um rótulo de estágio de versão de um segredo

O seguinte é um exemplo de como fazer referência a uma chave específica dentro de um segredo e rótulo de estágio de versão específico.

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

Para uma chave específica e ID da versão, use a sintaxe a seguir.

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

Para obter informações sobre como criar uma definição de tarefa com o segredo especificado em uma variável de ambiente, consulte Criar uma definição de tarefa do Amazon ECS usando o console.