Uso de gMSAs para contêineres do Windows no Amazon EC2 no Amazon ECS - Amazon Elastic Container Service

Uso de gMSAs para contêineres do Windows no Amazon EC2 no Amazon ECS

O Amazon ECS é compatível com a autenticação do Active Directory para contêineres do Windows por meio de um tipo especial de conta de serviço denominado Conta de serviço gerenciada pelo grupo (gMSA).

Aplicativos de rede baseados no Windows, como os aplicativos.NET, geralmente usam o Active Directory para facilitar o gerenciamento de autenticação e autorização entre usuários e serviços. Os desenvolvedores geralmente projetam seus aplicativos para se integrarem ao Active Directory e serem executados em servidores associados ao domínio para essa finalidade. Como os contêineres do Windows não podem ser associados ao domínio, os contêineres do Windows devem ser configurados para ser executado com o gMSA.

Um contêiner do Windows em execução com a gMSA depende da instância do Amazon EC2 do host para recuperar as credenciais da gMSA do controlador de domínio do Active Directory e fornecê-las à instância de contêiner. Para obter mais informações, consulte Criar gMSAs para contêineres do Windows.

nota

Não há suporte para esse recurso nos contêineres do Windows no Fargate.

Considerações

Ao usar gMSAs para contêineres do Windows, deve-se levar em consideração o seguinte:

  • Ao usar a AMI do Windows Server 2016 Full otimizada para Amazon ECS para as instâncias de contêiner, o nome do host do contêiner deve ser o mesmo que o nome da conta gMSA definido no arquivo de especificação de credenciais. Para especificar um nome de host para um contêiner, use o parâmetro de definição de contêiner hostname. Para ter mais informações, consulte Configurações de rede.

  • Você escolhe entre gMSA sem domínio e associar cada instância a um único domínio. Ao usar gMSA sem domínio, a instância de contêiner não será associada ao domínio, outras aplicações na instância não podem usar as credenciais para acessar o domínio e as tarefas que associam domínios diferentes podem ser executadas na mesma instância.

    Em seguida, escolha o armazenamento de dados para o CredSpec e, opcionalmente, para as credenciais de usuário do Active Directory para o gMSA sem domínio.

    O Amazon ECS usa um arquivo de especificação de credenciais do Active Directory (CredSpec). Esse arquivo contém os metadados de gMSA usados para propagar o contexto da conta de gMSA para o contêiner. Você gera o arquivo CredSpec e o armazena em uma das opções de armazenamento do CredSpec na tabela a seguir, específica para o sistema operacional das instâncias de contêiner. Para usar o método sem domínio, uma seção opcional no arquivo CredSpec pode especificar credenciais em uma das opções de armazenamento de domainless user credentials na tabela a seguir, específica para o sistema operacional das instâncias de contêiner.

    Opções de armazenamento de dados de gMSA por sistema operacional
    Local de armazenamento Linux Windows
    Amazon Simple Storage Service CredSpec CredSpec
    AWS Secrets Manager credenciais do usuário sem domínio credenciais do usuário sem domínio
    Armazenamento de parâmetros do Amazon EC2 Systems Manager CredSpec CredSpec, credenciais do usuário sem domínio
    Arquivo local N/D CredSpec

Pré-requisitos

Antes de usar o recurso gMSA para contêineres do Windows com o Amazon ECS, verifique se você concluiu o seguinte:

  • Você configurou um domínio do Active Directory com os recursos que deseja que seus contêineres acessem. O Amazon ECS oferece suporte às configurações a seguir:

    • Um Active Directory AWS Directory Service. O AWS Directory Service é um Active Directory gerenciado pela AWS e hospedado no Amazon EC2. Para obter mais informações, consulte Conceitos básicos do Microsoft AD gerenciado pela AWS no Guia de administração do AWS Directory Service.

    • Um Active Directory on-premises. Você deve garantir que a instância de contêiner Linux do Amazon ECS possa se associar ao domínio. Para ter mais informações, consulte AWS Direct Connect.

  • Você tem uma conta de gMSA existente no Active Directory. Para obter mais informações, consulte Criar gMSAs para contêineres do Windows.

  • Você escolheu usar o gMSA sem domínio ou a instância de contêiner do Windows do Amazon ECS que hospeda a tarefa do Amazon ECS deve ser um domínio associado ao Active Directory e fazer parte do grupo de segurança do Active Directory que tem acesso à conta gMSA.

    Ao usar gMSA sem domínio, a instância de contêiner não será associada ao domínio, outras aplicações na instância não podem usar as credenciais para acessar o domínio e as tarefas que associam domínios diferentes podem ser executadas na mesma instância.

  • Você adicionou as permissões necessárias do IAM. As permissões necessárias dependem dos métodos escolhidos para as credenciais iniciais e para armazenar a especificação da credencial:

    • Se você usa o gMSA sem domínio para as credenciais iniciais, as permissões do IAM para o AWS Secrets Manager são necessárias no perfil da instância do Amazon EC2.

    • Se você armazenar a especificação da credencial no SSM Parameter Store, as permissões do IAM para o Amazon EC2 Systems Manager Parameter Store serão necessárias no perfil de execução da tarefa.

    • Se você armazenar a especificação da credencial no Amazon S3, as permissões do IAM para o Amazon Simple Storage Service serão necessárias no perfil de execução da tarefa.

Configuração do gMSA para contêineres do Windows no Amazon ECS

Para configurar o gMSA para contêineres de Windows no Amazon ECS, siga o tutorial completo que inclui a configuração dos pré-requisitos Uso de contêineres do Windows com gMSA sem domínio na AWS CLI.

As seções a seguir abordam a configuração do CredSpec em detalhes.

Exemplo CredSpec

O Amazon ECS usa um arquivo de especificação de credenciais que contém os metadados de gMSA usados para propagar o contexto da conta gMSA para o contêiner do Windows. É possível gerar o arquivo de especificação de credenciais e mencioná-lo no campo credentialSpec em sua definição de tarefa. O arquivo de especificação de credenciais não contém nenhum segredo.

Veja a seguir um exemplo de arquivo de especificação de credenciais:

{ "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-2554468230-2647958158-2204241789", "MachineAccountName": "WebApp01", "Guid": "8665abd4-e947-4dd0-9a51-f8254943c90b", "DnsTreeName": "contoso.com", "DnsName": "contoso.com", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso.com" } ] } }

Configuração de gMSA sem domínio

Recomendamos a utilização de gMSA sem domínio em vez de associar as instâncias do contêiner a um único domínio. Ao usar gMSA sem domínio, a instância de contêiner não será associada ao domínio, outras aplicações na instância não podem usar as credenciais para acessar o domínio e as tarefas que associam domínios diferentes podem ser executadas na mesma instância.

  1. Antes de fazer o upload de CredSpec para uma das opções de armazenamento, adicione informações ao CredSpec com o ARN do segredo no Secrets Manager ou no SSM Parameter Store. Para obter mais informações, consulte Configuração adicional de especificações de credenciais para o caso de uso de host de contêiner não associado a domínio no site do Microsoft Learn.

    Formato de credencial de gMSA sem domínio

    A seguir está o formato JSON para as credenciais de gMSA sem domínio do seu Active Directory. Armazene as credenciais no Secrets Manager ou no SSM Parameter Store.

    { "username":"WebApp01", "password":"Test123!", "domainName":"contoso.com" }
  2. Adicione as informações a seguir ao arquivo CredSpec dentro do ActiveDirectoryConfig. Substitua o ARN pelo segredo no Secrets Manager ou no SSM Parameter Store.

    Observe que o valor PluginGUID deve corresponder ao GUID no trecho de exemplo a seguir, e é obrigatório.

    "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" }

    Você também pode usar um segredo no SSM Parameter Store usando o ARN neste formato: \"arn:aws:ssm:aws-region:111122223333:parameter/gmsa-plugin-input\".

  3. Depois de modificar o arquivo CredSpec, ele será semelhante à saída do exemplo a seguir:

    { "CmsPlugins": [ "ActiveDirectory" ], "DomainJoinConfig": { "Sid": "S-1-5-21-4066351383-705263209-1606769140", "MachineAccountName": "WebApp01", "Guid": "ac822f13-583e-49f7-aa7b-284f9a8c97b6", "DnsTreeName": "contoso", "DnsName": "contoso", "NetBiosName": "contoso" }, "ActiveDirectoryConfig": { "GroupManagedServiceAccounts": [ { "Name": "WebApp01", "Scope": "contoso" }, { "Name": "WebApp01", "Scope": "contoso" } ], "HostAccountConfig": { "PortableCcgVersion": "1", "PluginGUID": "{859E1386-BDB4-49E8-85C7-3070B13920E1}", "PluginInput": "{\"credentialArn\": \"arn:aws:secretsmanager:aws-region:111122223333:secret:gmsa-plugin-input\"}" } } }

Referência a um arquivo de especificações de credenciais em uma definição de tarefa

O Amazon ECS é compatível com as seguintes maneiras de referenciar o caminho do arquivo no campo credentialSpecs de definição da tarefa. Para cada uma dessas opções, é possível fornecer credentialspec: ou domainlesscredentialspec:, dependendo se você estiver associando as instâncias de contêiner a um domínio único ou usando gMSA sem domínio, respectivamente.

Bucket do Amazon S3

Adicione a especificação de credencial a um bucket do Amazon S3 e, em seguida, referencie o nome do recurso da Amazon (ARN) do bucket do Amazon S3 no campo credentialSpecs da definição de tarefa.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:s3:::${BucketName}/${ObjectName}" ], ... } ], ... }

Você também deve adicionar as seguintes permissões como uma política alinhada com a função do IAM de execução de tarefas do Amazon ECS para que suas tarefas tenham acesso ao bucket do Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::{bucket_name}", "arn:aws:s3:::{bucket_name}/{object}" ] } ] }

Parâmetro do Parameter Store do SSM

Adicione a especificação de credencial a um parâmetro do Parameter Store do SSM e, em seguida, referencie o nome do recurso da Amazon (ARN) do parâmetro do Parameter Store do SSM no campo credentialSpecs da definição de tarefa.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspecdomainless:arn:aws:ssm:region:111122223333:parameter/parameter_name" ], ... } ], ... }

Você também deve adicionar as seguintes permissões como uma política alinhada com a função do IAM de execução de tarefas do Amazon ECS para que suas tarefas tenham acesso ao parâmetro do Parameter Store do SSM.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": [ "arn:aws:ssm:region:111122223333:parameter/parameter_name" ] } ] }

Arquivo local

Com os detalhes da especificação de credenciais em um arquivo local, faça referência ao caminho do arquivo no campo credentialSpecs da definição da tarefa. O caminho do arquivo referenciado deve ser relativo ao diretório C:\ProgramData\Docker\CredentialSpecs e usar a barra invertida ('\') como separador do caminho do arquivo.

{ "family": "", "executionRoleArn": "", "containerDefinitions": [ { "name": "", ... "credentialSpecs": [ "credentialspec:file://CredentialSpecDir\CredentialSpecFile.json" ], ... } ], ... }