Contas de serviço do Active Directory para contêineres do Windows

Os usuários e outros serviços podem precisar fazer conexões autenticadas para seus aplicativos e serviços, a fim de manter os dados seguros e evitar o uso não autorizado. Domínios do Active Directory (AD) do Windows oferecem suporte nativo tanto à autenticação de senha quanto de certificado. Quando você compila seu aplicativo ou serviço em um host ingressado em domínio do Windows, ele usa a identidade do host por padrão, se for executado como Sistema Local ou Serviço de rede. Caso contrário, você pode configurar outra conta do AD para autenticação.

Embora os contêineres do Windows não possam ser ingressados em domínio, eles também podem tirar proveito das identidades de domínio do Active Directory assim como quando um dispositivo é ingressado em realm. Com os controladores de domínio do Windows Server 2012 R2, apresentamos uma nova conta de domínio chamada de Conta de Serviço Gerenciado de grupo (gMSA), que foi projetada para ser compartilhada pelos serviços. Usando as Contas de Serviço Gerenciado de grupo (gMSA), os contêineres do Windows e os serviços que eles hospedam podem ser configurados para usar uma gMSA específica como sua identidade de domínio. Qualquer serviço executado como Sistema Local ou Serviço de rede usará a identidade do contêiner do Windows exatamente como atualmente usam a identidade do host ingressado em domínio. Não há nenhuma senha ou chave privada de certificado, armazenada na imagem de contêiner, que poderia ser exposta inadvertidamente e o contêiner pode ser reimplantado em ambientes de desenvolvimento, teste e produção sem ser recriado para alterar as senhas ou certificados armazenados.

Glossário e referências

  • O Active Directory é um serviço usado para descoberta, pesquisa e replicação de informações do usuário, computador e conta de serviço no Windows.
    • O Active Directory Domain Services fornece domínio(s) do Active Directory do Windows usado(s) para autenticar usuários e computadores.
    • Os dispositivos são ingressados em domínio quando eles são membros do domínio do Active Directory. Ingressado em domínio é um estado do dispositivo que não apenas fornece ao dispositivo uma identidade de computador de domínio, mas também acende vários serviços ingressados em domínio.
    • As Contas de serviço gerenciado de grupo, muitas vezes abreviada como gMSA, são um tipo de conta do Active Directory que torna mais fácil proteger serviços usando o Active Directory sem compartilhar uma senha. Vários computadores ou contêineres compartilham a mesma gMSA, conforme necessário, para autenticar conexões entre serviços.
  • Módulo CredentialSpec do PowerShell – Esse módulo é usado para configurar as Contas de serviço gerenciado de grupo a serem usadas com contêineres. O módulo de script e as etapas de exemplo estão disponíveis em windows-server-container-tools, veja ServiceAccount

Como funciona

Hoje, as Contas de serviço gerenciado de grupo são geralmente usadas para proteger conexões entre computadores ou serviços. As etapas gerais para usar uma conta são:

  1. Criar uma gMSA
  2. Configurar o serviço para ser executado como a gMSA
  3. Conceder ao host ingressado em domínio executando o serviço, acesso aos segredos da gMSA no Active Directory
  4. Permitir o acesso à gMSA no outro serviço, como um banco de dados ou Compartilhamentos de Arquivos

Quando o serviço for iniciado, o host ingressado em domínio automaticamente obtém os segredos da gMSA do Active Directory e executa o serviço usando essa conta. Como esse serviço está em execução como a gMSA, ele pode acessar todos os recursos aos quais a gMSA tem permissão.

Os contêineres do Windows seguem um processo semelhante:

  1. Crie uma gMSA. Por padrão, um administrador de domínio ou um operador de conta deve fazer isso. Caso contrário, eles podem delegar privilégios para criar e gerenciar gMSAs para administradores que gerenciam serviços que as utilizam. Consulte Introdução à gMSA
  2. Conceder acesso à gMSA ao host do contêiner ingressado em domínio
  3. Permitir o acesso à gMSA no outro serviço, como um banco de dados ou Compartilhamentos de Arquivos
  4. Usar o módulo CredentialSpec do PowerShell em windows-server-container-tools para armazenar as configurações necessárias para usar a gMSA
  5. Iniciar o contêiner com uma opção adicional --security-opt "credentialspec=..."

Quando o contêiner é iniciado, os serviços instalados em execução como Sistema Local ou Serviço de rede aparecerão para serem executados como gMSA. Isso é semelhante ao funcionamento dessas contas em um host ingressado em domínio, exceto pelo uso de uma gMSA em vez de uma conta de computador.

Diagrama – Contas de serviço

O exemplo usa

Cadeias de Conexão SQL

Quando um serviço é executado como Sistema Local ou Serviço de rede em um contêiner, pode usar a Autenticação Integrada do Windows para se conectar a um Microsoft SQL Server.

Exemplo:

Server=sql.contoso.com;Database=MusicStore;Integrated Security=True;MultipleActiveResultSets=True;Connect Timeout=30

No Microsoft SQL Server, crie um logon usando o nome de domínio e da gMSA, seguido por um $. Depois que o logon é criado, pode ser adicionado a um usuário em um banco de dados e as permissões de acesso apropriadas podem ser concedidas.

Exemplo:

CREATE LOGIN "DEMO\WebApplication1$"
    FROM WINDOWS
    WITH DEFAULT_DATABASE = "MusicStore"
GO

USE MusicStore
GO
CREATE USER WebApplication1 FOR LOGIN "DEMO\WebApplication1$"
GO

EXEC sp_addrolemember 'db_datareader', 'WebApplication1'
EXEC sp_addrolemember 'db_datawriter', 'WebApplication1'

Para ver isso na prática, confira a demonstração gravada do Microsoft Ignite 2016 disponível na seção "Walk the Path to Containerization - transforming workloads into containers".