Usar o Systems Manager Parameter Store para proteger dados confidenciais - Serviço Amazon Elastic Container

Usar o Systems Manager Parameter Store para proteger dados confidenciais

Você pode usar o Amazon ECS para injetar dados sigilosos nos seus contêineres, armazenando seus dados sigilosos nos parâmetros AWS Systems Manager do Parameter Store e fazendo referência a eles na definição do contêiner.

Considerações para especificar dados sigilosos usando o Systems Manager Parameter Store

Considere o seguinte ao especificar dados sigilosos para contêineres usando parâmetros do Systems Manager Parameter Store.

  • O parâmetro Systems Manager Parameter Store deve existir na mesma conta em que as tarefas são executadas.

  • Para tarefas hospedadas no Fargate, esse recurso requer que sua tarefa use a versão 1.3.0 ou posterior (Linux) ou 1.0.0 ou posterior (Windows) da plataforma. Para obter mais informações, consulte Versões da plataforma AWS Fargate.

  • Para tarefas hospedadas em instâncias do EC2, sesse recurso requer que sua instância de contêiner tenha a versão 1.22.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.

  • Os dados sigilosos são injetados no contêiner inicialmente quando o contêiner é iniciado. Se o segredo ou o parâmetro Parameter Store 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 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. Você pode fazer isso com os dados do usuário usando a seguinte sintaxe:

    <powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>

Permissões obrigatórias do IAM para segredos do Amazon ECS

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. Isso permite que o agente de contêiner obtenha os recursos necessários do AWS Systems Manager. Para mais informações, consulte Função do IAM de execução de tarefas do Amazon ECS.

Importante

Para tarefas que usam o tipo de inicialização do EC2, você deve usar a variável de configuração do agente do ECS ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true para usar esse recurso. Você pode adicioná-lo ao arquivo ./etc/ecs/ecs.config para uma instância de contêiner nova ou existente. Se adicioná-lo a uma instância de contêiner existente, não deixe de reiniciar o agente ECS em seguida. Para mais informações, consulte Configuração do agente de contêiner do Amazon ECS.

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

  • ssm:GetParameters: obrigatório se você estiver fazendo referência a um parâmetro do Systems Manager Parameter Store em uma definição de tarefa.

  • secretsmanager:GetSecretValue: obrigatório se você estiver fazendo referência a um segredo do Secrets Manager diretamente ou se o parâmetro do Systems Manager Parameter Store estiver fazendo referência a um segredo do Secrets Manager em uma definição de tarefa.

  • kms:Decrypt: obrigatório somente se o segredo usar uma chave personalizada do KMS e não a chave padrão. O ARN da chave personalizada deve ser adicionado como um recurso.

O exemplo de política em linha 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>" ] } ] }

Injetar dados sigilosos como uma variável de ambiente

Na sua definição de contêiner, especifique secrets com o nome da variável de ambiente a ser definida no contêiner e o nome do recurso da Amazon (ARN) completo do parâmetro do Systems Manager Parameter Store que contém os dados sigilosos a serem apresentados ao contêiner.

Veja a seguir um trecho de uma definição de tarefa que mostra o formato usado ao fazer referência a um parâmetro do Systems Manager Parameter Store. Se o parâmetro do Systems Manager Parameter Store existir na mesma região da tarefa que está sendo iniciada, você poderá usar o ARN completo ou o nome do parâmetro. Se o parâmetro existir em uma região diferente, o ARN completo deverá ser especificado.

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }] }

Injetar dados sigilosos em uma configuração de log

Em sua definição de contêiner, ao especificar logConfiguration, você poderá especificar secretOptions com o nome da opção de driver de log a ser definida no contêiner e o nome do recurso da Amazon (ARN) completo do parâmetro do Systems Manager Parameter Store que contém os dados sigilosos a serem apresentados ao contêiner.

Importante

Se o parâmetro do Systems Manager Parameter Store existir na mesma Região da AWS da tarefa que está sendo iniciada, você poderá usar o ARN completo ou o nome do parâmetro. Se o parâmetro existir em uma região diferente, o ARN completo deverá ser especificado.

Veja a seguir um trecho de uma definição de tarefa mostrando o formato ao fazer referência a um parâmetro do Systems Manager Parameter Store.

{ "containerDefinitions": [{ "logConfiguration": [{ "logDriver": "fluentd", "options": { "tag": "fluentd demo" }, "secretOptions": [{ "name": "fluentd-address", "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name" }] }] }] }

Criação de um parâmetro do Parameter Store do AWS Systems Manager

Você pode usar o console do AWS Systems Manager para criar um parâmetro do Systems Manager Parameter Store para seus dados sigilosos. Para obter mais informações, consulte Demonstração: Criar e usar um parâmetro em um comando (console) no Guia do usuário do AWS Systems Manager.

Para criar um parâmetro do Parameter Store

  1. Abra o console do AWS Systems Manager em https://console.aws.amazon.com/systems-manager/.

  2. No painel de navegação, escolha Parameter Store, Create parameter (Criar parâmetro).

  3. Em Name (Nome), insira uma hierarquia e um nome de parâmetro (por exemplo, /test/database_password).

  4. Em Description (Descrição), digite uma descrição opcional.

  5. Para Type, escolha String, StringList ou SecureString.

    nota
    • Se você escolher SecureString, o campo KMS Key ID (ID da chave do KMS) será exibido. Se você não fornecer o ID da chave do KMS, o ARN da chave do KMS, um nome de alias ou um ARN de alias, o sistema usará alias/aws/ssm. Essa é a chave do KMS padrão para o Systems Manager. Para evitar o uso dessa chave, escolha uma chave personalizada. Para obter mais informações, consulte Usar parâmetros de strings seguras no Guia do usuário do AWS Systems Manager.

    • Ao criar um parâmetro de string segura no console usando o parâmetro key-id com um nome de alias personalizado da chave do KMS ou um ARN de alias, você deve especificar o prefixo alias/ antes do alias. Veja um exemplo de ARN a seguir.

      arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

      Veja a seguir um exemplo de nome de alias.

      alias/MyAliasName
  6. Em Value (Valor), digite um valor. Por exemplo, MyFirstParameter. Se você escolheu SecureString, o valor será mascarado conforme você digitar.

  7. Escolha Create parameter (Criar parâmetro).

Criação de uma definição de tarefa no console clássico que faça referência a dados sigilosos

Você pode usar o console do Amazon ECS para criar uma definição de tarefa que faça referência a um parâmetro do Systems Manager Parameter Store.

Para criar uma definição de tarefa que especifica um segredo

  1. Abra o console do Amazon ECS em https://console.aws.amazon.com/ecs/.

  2. No painel de navegação, escolha task definitions (definições de tarefa), Create New Task Definition (Criar nova definição de tarefa).

  3. Na página Select launch type compatibility (Selecionar compatibilidade do tipo de inicialização), escolha o tipo de inicialização das tarefas e escolha Next step (Próxima tarefa).

    nota

    Esta etapa aplica-se apenas a regiões que oferecem suporte ao Amazon ECS usando o AWS Fargate. Para mais informações, consulte Amazon ECS no AWS Fargate.

  4. Em Task Definition Name (Nome de definição de tarefa), digite um nome para sua definição de tarefa. São permitidos até 255 letras (caixa alta e baixa), números, hífens e sublinhados.

  5. Em Task execution role (Função de execução da tarefa), selecione a função de execução da tarefa existente ou selecione Create new role (Criar outra função). A função criada autoriza o Amazon ECS a extrair imagens privadas da sua tarefa. Para mais informações, consulte Permissões do IAM necessárias para a autenticação de registro privado.

    Importante

    Se o campo Task execution role (Função de execução de tarefas) não aparecer, escolha Configure via JSON (Configurar via JSON) e adicione o campo executionRoleArn para especificar a função de execução da tarefa. O código a seguir mostra a sintaxe.

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  6. Para cada contêiner a ser criado em sua definição de tarefa, conclua as seguintes etapas:

    1. Em Container Definitions (Definições de contêiner), selecione Add container (Adicionar contêiner).

    2. Em Container name (nome do contêiner), digite um nome para o contêiner. São permitidos até 255 letras (caixa alta e baixa), números, hífens e sublinhados.

    3. Em Image (Imagem), digite o nome ou o caminho da imagem privada. São permitidos até 255 letras (caixa alta e baixa), números, hífens e sublinhados.

    4. Expanda Advanced container configuration (Configuração de contêiner avançada).

    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. Em Value (Valor), escolha ValueFrom. Em Add value (Adicionar valor), insira o nome do recurso da Amazon (ARN) completo do parâmetro do repositório de parâmetros do AWS Systems Manager que contém os dados a serem apresentados ao seu contêiner como uma variável de ambiente.

        nota

        Se o parâmetro do Systems Manager Parameter Store existir na mesma Região da AWS da tarefa que você está iniciando, você poderá usar o ARN completo ou o nome do segredo. Se o parâmetro existir em uma região diferente, o ARN completo deverá ser especificado.

    6. Para segredos referenciados na configuração de log para um contêiner, em Storage and Logging (Armazenamento e registro em log), em Log configuration (Configuração de log), preencha os seguintes campos:

      1. Desmarque a opção Auto-configure CloudWatch Logs (Configurar automaticamente o CloudWatch Logs).

      2. Em Log options (Opções de log), em Key (Chave), insira o nome da opção de configuração de log a ser definida.

      3. Em Value (Valor), escolha ValueFrom. Em Add value (Adicionar valor), insira o nome ou o ARN completo do parâmetro do repositório de parâmetros do AWS Systems Manager que contém os dados a serem apresentados à configuração de log como uma opção de log.

        nota

        Se o parâmetro do Systems Manager Parameter Store existir na mesma Região da AWS da tarefa que você está iniciando, você poderá usar o ARN completo ou o nome do segredo. Se o parâmetro existir em uma região diferente, o ARN completo deverá ser especificado.

    7. Preencha os demais campos obrigatórios e qualquer campo opcional a ser usado em suas definições de contêiner. Mais parâmetros de definição de contêiner estão disponíveis no menu Advanced container configuration (Configuração avançada de contêineres). Para mais informações, consulte Parâmetros de definição de tarefa.

    8. Escolha Add (Adicionar).

  7. Quando seus contêineres forem adicionados, selecione Create (Criar).