Especificando dados sigilosos usando segredos do Secrets Manager - AWS Batch

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á.

Especificando dados sigilosos usando segredos do Secrets Manager

Com AWS Batch, você pode injetar dados confidenciais em seus trabalhos armazenando seus dados confidenciais em AWS Secrets Manager segredos e, em seguida, referenciando-os na definição de seu trabalho. Os dados sigilosos armazenados em segredos do Secrets Manager podem ser expostos a um trabalho como variáveis de ambiente, ou como parte da configuração do log.

Ao injetar um segredo como uma variável de ambiente, você pode especificar uma chave JSON ou versão de um segredo a ser injetado. Esse processo ajuda a controlar os dados sigilosos expostos a sua tarefa. Para mais informações sobre versionamento de segredos, consulte Termos e Conceitos Importantes para AWS Secrets Manager no AWS Secrets Manager Guia do Usuário.

Considerações para especificar dados sigilosos usando Secrets Manager

As informações a seguir devem ser consideradas quando o Secrets Manager for usado para especificar dados sigilosos para tarefas.

  • Para injetar um segredo usando uma chave JSON específica ou versão de um segredo, sua instância de contêiner no ambiente de computação do atendente de contêiner do Amazon ECS instalado deve ser 1.37.0 ou superior. Recomendamos usar a versão mais recente do atendente de contêiner. Para mais informações sobre como verificar a versão do agente e atualizá-la para a versão mais recente, consulte Atualizando Atendente de Contêiner Amazon ECS no Guia do Desenvolvedor Amazon Elastic Container Service.

    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.23.0 ou posterior do agente de contêiner.

  • Somente segredos que armazenam dados de texto, que são segredos criados com o SecretString parâmetro da CreateSecretAPI, são suportados. Segredos que armazenam dados binários, que são segredos criados com o SecretBinary parâmetro da CreateSecretAPI, não são compatíveis.

  • Ao usar uma definição de trabalho que faça referência a segredos Secrets Manager para recuperar dados confidenciais para suas tarefas, caso também esteja usando VPC endpoint de interface, você deverá criar endpoints de VPC de interface para Secrets Manager. Para mais informações, consulte Usando Secrets Manager com endpoints VPC no AWS Secrets Manager Guia de Usuário.

  • Os dados sigilosos são injetados na tarefa quando a mesma é iniciada. Caso o segredo seja subsequentemente atualizado ou alternado, a tarefa não receberá o valor atualizado automaticamente. Você deve iniciar uma nova tarefa para forçar o serviço a iniciá-la com o valor do segredo atualizado.

Permissões do IAM necessárias para AWS Batch segredos

Para este atributo, você precisa possuir a função de execução e referenciá-la em sua definição de trabalho. Isso permite que o atendente de contêiner puxe os recursos Secrets Manager necessários. Para mais informações, consulte AWS Batch IAMfunção de execução.

Para prover acesso aos segredos Secrets Manager criados por você, adicione manualmente as permissões a seguir como política em linha ao papel de execução. Para mais informações, consulte Adicionando e Removendo Políticas do IAM no Guia de Usuário do IAM.

  • secretsmanager:GetSecretValue–- obrigatório caso faça referência a um segredo Secrets Manager.

  • kms:Decrypt–- obrigatório apenas se o seu segredo usar uma chave KMS personalizada, não a chave padrão. O ARN da sua chave personalizada deve ser adicionado como recurso.

O exemplo de política em linha a seguir adiciona as permissões obrigatórias.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ] }

Injetando dados sigilosos como uma variável de ambiente

Na definição do seu trabalho, você pode especificar os seguintes itens:

  • Objeto secrets contendo o nome da variável de ambiente a ser definido no campo

  • Nome de recurso da Amazon (ARN) do segredo Secrets Manager

  • Parâmetros adicionais contendo dados sigilosos a serem apresentados a tarefa

O exemplo a seguir mostra a sintaxe completa a ser especificada para o segredo 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. No entanto, caso opte por não utilizá-los, você precisará incluir dois pontos : para 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. Caso não especifique uma chave JSON, o conteúdo completo do segredo será utilizado.

version-stage

Especifique o rótulo de preparação da versão do segredo que deseja usar. Caso um rótulo de preparação de versão seja especificado, você não poderá especificar um ID da 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 Key Terms and AWS Concepts for Secrets Manager no Guia AWS Secrets Manager do Usuário.

version-id

Especifica o identificador exclusivo da versão do segredo que você deseja usar. Se uma ID da versão for especificada, você não poderá especificar um rótulo de preparação da 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 Key Terms and AWS Concepts for Secrets Manager no Guia AWS Secrets Manager do Usuário.

Exemplo de definições de contêiner

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

exemplo Referenciando um segredo completo

A seguir, um trecho de definição de tarefa mostrando formato, ao fazer referência ao texto completo de um segredo Secrets Manager.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }
exemplo Referenciando 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-981dd39ab30c",
    "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.

{ "containerProperties": [{ "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

A seguir, 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-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "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.

{ "containerProperties": [{ "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.

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }
exemplo Referenciando uma chave específica e um rótulo de estágio de versão de um segredo

A seguir, 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.

{ "containerProperties": [{ "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.

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

Injetando dados sigilosos em uma configuração de registro em log

Em sua definição de trabalho, ao especificar uma logConfiguration, você poderá fazê-lo secretOptions com o nome da opção de registro de log a ser definido no contêiner e ARN completo do segredo Secrets Manager contendo os dados sigilosos a serem apresentados ao contêiner.

A seguir, trecho de uma definição de trabalho mostrando formato, ao referenciar um segredo Secrets Manager.

{ "containerProperties": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

Criando um AWS Secrets Manager segredo

Você pode usar o console Secrets Manager para criar um segredo para seus dados sigilosos. Para mais informações, consulte Criando um Segredo Básico no AWS Secrets Manager Guia do Usuário.

Para criar um segredo básico

Use Secrets Manager para criar um segredo para seus dados sigilosos.

  1. Abra o console Secrets Manager em https://console.aws.amazon.com/secretsmanager/.

  2. Escolha Armazenar Novo Segredo.

  3. Em Selecionar Tipo de Segredo, selecione Outro Tipo de Segredo.

  4. Especifique os detalhes do seu segredo personalizado como pares de Chave e Valor. Por exemplo, você pode especificar uma chave de UserName e, em seguida, fornecer o nome do usuário apropriado como valor. Adicione uma segunda chave com o nome de Password e texto da senha como valor. Você também pode adicionar entradas para nome de banco de dados, endereço de servidor ou porta TCP. Adicione quantos pares quiser para armazenar as informações obrigatórias.

    Como alternativa, você pode escolher a guia Texto Simples e inserir o valor do segredo como desejar.

  5. Escolha a chave de AWS KMS criptografia que você deseja usar para criptografar o texto protegido no segredo. Caso não escolha uma opção, o Secrets Manager verificará a existência de uma chave padrão para a conta e a utilizará, caso exista. Caso não exista uma chave padrão, o Secrets Manager criará uma automaticamente. Você também pode escolher Adicionar Nova Chave para criar uma chave personalizada KMS específica para esse segredo. Para criar sua própria chave do KMS, você deve ter permissões para criar chaves do KMS na sua conta.

  6. Escolha Próximo.

  7. Em Nome do Segredo, digite nome e caminho opcionais, como production/MyAwesomeAppSecret ou development/TestSecret, e, em seguida, escolha Avançar. Você pode adicionar opcionalmente uma descrição para ajudá-lo a lembrar o objetivo desse segredo mais tarde.

    O nome do segredo deve ter apenas letras ASCII, dígitos, ou qualquer um dos seguintes caracteres: /_+=.@-

  8. (Opcional) Nesse momento, você poderá configurar a rotação para o seu segredo. Para esse procedimento, deixe em Desabilitar Rotação Automática e escolha Avançar.

    Para obter informações sobre como configurar a rotação em segredos novos ou existentes, consulte Como girar seus AWS Secrets Manager segredos.

  9. Analise suas configurações e, em seguida, escolha Armazenar Segredo para salvar tudo que inseriu como novo segredo no Secrets Manager.