Implantar o AD FS em um domínio do Microsoft AD gerenciado

Neste guia, descrevemos como implantar os Serviços de Federação do Microsoft Active Directory (AD FS, na sigla em inglês) para Windows Server 2019 em um domínio de Serviço gerenciado para Microsoft Active Directory.

O diagrama a seguir ilustra a implantação:

Arquitetura

Os usuários se comunicam com um balanceador de carga HTTPS que usa um certificado gerenciado pelo Google para encerrar conexões SSL. O balanceador de carga encaminha as conexões para uma instância de VM que executa o Microsoft AD FS para Windows Server 2019 e que está mesclado ao domínio do Microsoft AD gerenciado. A comunicação entre o balanceador de carga e a instância de VM é protegida usando um certificado SSL autoassinado.

A implantação usa uma única instância do AD FS e o Windows Internal Database, o que o torna adequado para ambientes pequenos. Para ambientes que precisam de mais confiabilidade ou demandas de segurança, implante várias instâncias do AD FS em uma configuração de fazenda e implante proxies de federação.

Antes de começar

Como preparar o projeto e a rede

Você precisa preparar seu projeto do Google Cloud e a rede VPC para a implantação do AD FS.

Crie uma instância de VM

Crie uma conta de serviço e uma instância de VM para executar o AD FS:

  1. No console do Google Cloud, abra o Cloud Shell.

    Ativar o Cloud Shell

  2. Defina o ID do projeto padrão:

    gcloud config set project PROJECT_ID
    

    Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

  3. Defina a região e a zona padrão:

    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    

    Substitua:

    • REGION: o ID da região em que você quer implantar.
    • ZONE: o ID da zona em que você quer implantar.
  4. Crie uma conta de serviço:

    gcloud iam service-accounts create SA_NAME
    

    Substitua SA_NAME pelo nome da conta de serviço.

  5. Crie uma instância de VM que execute o Windows Server 2019 e use um script especializado para instalar automaticamente o papel "Servidor do AD FS":

    gcloud compute instances create VM_NAME \
      --machine-type n2-standard-8 \
      --image-family windows-2019 \
      --image-project windows-cloud \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --subnet SUBNET_NAME \
      --service-account SA_NAME@$(gcloud config get-value core/project).iam.gserviceaccount.com \
      --metadata sysprep-specialize-script-ps1="Add-WindowsFeature ADFS-Federation -IncludeManagementTools;Add-WindowsFeature RSAT-AD-PowerShell;Add-WindowsFeature RSAT-ADDS-Tools"
    

    Substitua:

    • VM_NAME: o nome da instância de VM.
    • SUBNET_NAME: o nome da sub-rede em que o AD FS será implantado.
    • SA_NAME: o nome da conta de serviço.

    Para configurar e mesclar a instância de VM ao seu domínio do Active Directory, conclua as seguintes etapas:

    1. Monitore o processo de inicialização da VM visualizando a saída da porta serial:

      gcloud compute instances tail-serial-port-output VM_NAME
      

      Aguarde cerca de três minutos até ver a saída Instance setup finished e pressione Ctrl+C. Nesse momento, a instância de VM está pronta para ser usada.

    2. Crie um nome de usuário e uma senha para a instância de VM.

    3. Conecte-se à VM usando a Área de trabalho remota e faça login usando o nome de usuário e a senha criados na etapa anterior.

    4. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).

    5. Confirme a elevação do prompt clicando em Sim.

    6. Associe o computador ao seu domínio do Active Directory e reinicie:

      Add-Computer -Domain DOMAIN -Restart
      

      Substitua DOMAIN pelo nome DNS do seu domínio do Active Directory.

      Aguarde aproximadamente um minuto para que a reinicialização seja concluída.

criar um balanceador de carga

Você precisa criar um balanceador de carga que permita que os usuários acessem o AD FS usando um único endereço IP virtual.

Para associar a instância de VM que executa o AD FS ao balanceador de carga, primeiro crie um grupo de instâncias não gerenciadas e, em seguida, atribua esse grupo de instâncias ao balanceador de carga:

  1. Volte para a sessão atual do Cloud Shell.
  2. Crie o grupo de instâncias não gerenciadas:

    gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME &&
    gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME --named-ports=http:443
    

    Substitua INSTANCE_GROUP_NAME pelo nome do grupo que você quer criar.

  3. Adicione a instância de VM existente ao grupo de instâncias:

    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
    
  4. Crie uma verificação de integridade que sonde a porta HTTPS do AD FS:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port 443
    

    Substitua HEALTH_CHECK_NAME por um nome para a verificação de integridade.

  5. Crie um serviço de back-end do balanceador de carga que use a verificação de integridade HTTPS e o grupo de instâncias criados anteriormente:

    gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --health-checks HEALTH_CHECK_NAME \
      --port-name http \
      --protocol HTTPS \
      --global && \
    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group INSTANCE_GROUP_NAME \
      --global \
      --instance-group-zone $(gcloud config get-value compute/zone)
    

    Substitua BACKEND_SERVICE_NAME por um nome para o serviço de back-end.

  6. Reserve um endereço IP externo estático para o balanceador de carga.

    gcloud compute addresses create ADDRESS_NAME --global
    

    Substitua ADDRESS_NAME pelo nome que você quer associar a esse endereço.

  7. Crie um certificado SSL gerenciado para o balanceador de carga:

    gcloud compute ssl-certificates create CERTIFICATE_NAME \
      --domains PUBLIC_FQDN \
      --global
    

    Substitua:

    • CERTIFICATE_NAME: o nome do certificado SSL gerenciado.
    • PUBLIC_FQDN: o nome de domínio público e totalmente qualificado (FQDN, na sigla em inglês) que você quer usar para o AD FS. Por exemplo, login.example.com.
  8. Crie um front-end de balanceador de carga que use o endereço IP externo e encaminhe o tráfego para o serviço de back-end:

    gcloud compute url-maps create URL_MAP_NAME \
      --default-service BACKEND_SERVICE_NAME && \
    gcloud compute target-https-proxies create PROXY_NAME \
      --ssl-certificates CERTIFICATE_NAME \
      --url-map URL_MAP_NAME && \
    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
      --global \
      --address ADDRESS_NAME \
      --target-https-proxy PROXY_NAME \
      --ports 443
    

    Substitua:

    • URL_MAP_NAME: o nome do mapa de URL do balanceador de carga.
    • PROXY_NAME: o nome do proxy de destino do balanceador de carga.
    • FORWARDING_RULE_NAME: o nome da regra de encaminhamento do balanceador de carga.
  9. Crie uma regra de firewall para permitir o tráfego do balanceador de carga para a instância de VM que executa o AD FS:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
      --allow tcp:443 \
      --network VPC_NAME \
      --source-ranges 130.211.0.0/22,35.191.0.0/16 \
      --target-service-accounts SA_NAME@$(gcloud config get-value core/project).iam.gserviceaccount.com
    

    Substitua:

    • FIREWALL_RULE_NAME: o nome da regra de firewall.
    • VPC_NAME: o nome da sua rede VPC.
    • SA_NAME: o nome da conta de serviço.

    Os intervalos de origem são os intervalos de IP do balanceador de carga interno. Para mais informações, consulte Configurar uma regra de firewall.

  10. Procure o endereço IP do balanceador de carga:

    gcloud compute addresses describe ADDRESS_NAME \
       --global \
       --format=value\(address\)
    
  11. Crie um registro DNS A na zona de DNS pública que aponte para o endereço IP do balanceador de carga. O nome totalmente qualificado do registro DNS precisa corresponder ao nome usado no certificado SSL.

Como implantar o AD FS

Você precisa implantar o papel de servidor do AD FS na instância de VM. Como você não tem direitos Domain Admins em um domínio do Microsoft AD gerenciado, não é possível usar o Server Manager para executar a instalação e precisa usar o PowerShell.

Criar um usuário do serviço

É preciso criar uma conta de usuário no Active Directory para o serviço AD FS:

  1. Conecte-se à instância de VM usando a Área de trabalho remota e faça login usando suas credenciais de administrador delegadas.
  2. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
  3. Defina uma senha aleatória para a conta de serviço do AD FS:

    $AdfsCredential = Get-Credential -UserName USER -Message 'PASSWORD'
    

    Substitua:

    • USER: o nome de um usuário do Active Directory.
    • PASSWORD: a senha do usuário do Active Directory.
  4. Crie um usuário do Active Directory:

    $CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName
    $AdfsUser = New-ADuser `
      -Name USER `
      -DisplayName 'AD FS service account' `
      -AccountPassword $AdfsCredential.Password `
      -Path "$CloudOuPath" `
      -PasswordNeverExpires $True `
      -PassThru | Enable-ADAccount -PassThru
    
  5. Adicione o usuário ao grupo local "Administradores":

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\USER"
    
  6. Atribua um nome da principal de serviço:

    setspn -a http/PUBLIC_FQDN USER
    

    Substitua PUBLIC_FQDN pelo nome de domínio público e totalmente qualificado do AD FS.

  7. Crie um contêiner vazio no Active Directory. Você precisará usar esse contêiner mais tarde, quando instalar o AD FS:

    New-ADObject `
      -Type Container `
      -Name "ADFS Data" `
      -Path $CloudOuPath
    
  8. Conceda ao usuário do AD FS controle total sobre o contêiner:

    dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\USER:GA /I:T
    

Instalar o AD FS

É possível instalar o AD FS na instância de VM:

  1. Inicie uma sessão do PowerShell como usuário do ADFS:

    runas /u:$env:userdomain\USER powershell
    

    A nova sessão do PowerShell é executada como o usuário do AD FS, mas sem privilégios elevados.

  2. Na nova sessão do PowerShell, inicie uma segunda sessão elevada do PowerShell:

    Start-Process PowerShell -Verb RunAs
    

    É necessário executar todas as etapas subsequentes nesta nova sessão elevada do PowerShell.

  3. Crie um certificado SSL autoassinado que use uma chave RSA de 2048 bits e armazene-o no certificado do computador:

    $DnsName="PUBLIC_FQDN"
    $Certificate = New-SelfSignedCertificate `
      -Subject $DnsName `
      -KeyAlgorithm RSA `
      -KeyLength 2048 `
      -KeyExportPolicy NonExportable `
      -KeyUsage DigitalSignature, KeyEncipherment `
      -Provider 'Microsoft Platform Crypto Provider' `
      -NotAfter (Get-Date).AddDays(365) `
      -Type SSLServerAuthentication `
      -CertStoreLocation 'Cert:\LocalMachine\My' `
      -DnsName $DnsName
    

    Substitua PUBLIC_FQDN pelo nome de domínio público e totalmente qualificado do AD FS.

  4. Crie outro certificado RSA de 2048 bits que o AD FS use como certificado de assinatura de token:

    $SigningCertificate = New-SelfSignedCertificate `
      -Subject "ADFS Signing" `
      -KeyAlgorithm RSA `
      -KeyLength 2048 `
      -KeyExportPolicy NonExportable `
      -KeyUsage DigitalSignature, KeyEncipherment `
      -Provider 'Microsoft RSA SChannel Cryptographic Provider' `
      -NotAfter (Get-Date).AddDays(365) `
      -DnsName $DnsName `
      -CertStoreLocation 'Cert:\LocalMachine\My'
    
  5. Crie um contêiner do gerenciador de chaves distribuídas (DKM, na sigla em inglês):

    $CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName
    $DkmContainer = New-ADObject `
      -Name ((New-Guid).Guid) `
      -Type Container `
      -Path "CN=ADFS Data,$CloudOuPath" `
      -PassThru
    
  6. Insira novamente as credenciais do usuário do AD FS definido anteriormente:

    $AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
    
  7. Instale o AD FS usando os certificados e o contêiner DKM que você criou anteriormente:

    Install-ADFSFarm `
      -CertificateThumbprint $Certificate.Thumbprint `
      -SigningCertificateThumbprint $SigningCertificate.Thumbprint `
      -DecryptionCertificateThumbprint $SigningCertificate.Thumbprint `
      -FederationServiceName $DnsName `
      -ServiceAccountCredential $AdfsCredential `
      -OverwriteConfiguration `
      -AdminConfiguration @{"DKMContainerDn"=$DkmContainer.DistinguishedName}
    

    O comando pode mostrar as seguintes mensagens de aviso:

    WARNING: A machine restart is required to complete ADFS service configuration. For more information, see:
    https://go.microsoft.com/fwlink/?LinkId=798725
    
    WARNING: The SSL certificate subject alternative names do not support host name 'PUBLIC_FQDN'.
    Configuring certificate authentication binding on port '49443' and hostname 'PUBLIC_FQDN'.
    
    WARNING: An error occurred during an attempt to set the SPN for the specified service account. Set the SPN for the
    service account manually.  For more information about setting the SPN of the service account manually, see the AD FS
    Deployment Guide.  Error message: An error occurred during an attempt to set the SPN for the specified service account.
    You do not have sufficient privileges in the domain to set the SPN.
    
    WARNING: The SSL certificate does not contain all UPN suffix values that exist in the enterprise.  Users with UPN
    suffix values not represented in the certificate will not be able to Workplace-Join their devices.  For more
    information, see http://go.microsoft.com/fwlink/?LinkId=311954.
    

    Ignore esses avisos porque você já definiu o SPN e não está usando a autenticação baseada em certificado.

  8. Se você planeja usar a Autenticação Integrada do Windows (IWA, na sigla em inglês) para autenticar no AD FS, execute o seguinte comando para desativar a vinculação de tokens:

    Set-ADFSProperties -ExtendedProtectionTokenCheck None
    Restart-Service -Name adfssrv
    

    É necessário desativar a vinculação de token porque você está implantando o AD FS por trás de um balanceador de carga e ele encerra as conexões TLS.

Se você encontrar algum problema relacionado a permissões ao seguir essas etapas, entre em contato com o suporte do Google Cloud.

Configurar a TLS

Ao estabelecer conexões com back-ends, o balanceador de carga HTTPS não usa a extensão de indicação de nome do servidor (SNI, na sigla em inglês). Para permitir que o AD FS aceite a conexão sem a SNI, configure um substituto para o certificado:

  1. No PowerShell, veja as vinculações de certificado do servidor SSL para o AD FS:

    netsh http show sslcert hostnameport=PUBLIC_FQDN:443
    

    Substitua PUBLIC_FQDN pelo nome de domínio público e totalmente qualificado do AD FS.

  2. Configure um certificado substituto para a vinculação:

    netsh http add sslcert ipport=0.0.0.0:443 certhash=CERTIFICATE_HASH "appid=APP_ID" "certstorename=MY"
    

    Substitua:

    • CERTIFICATE_HASH: o hash do certificado mostrado no comando anterior.
    • APP_ID: o ID do aplicativo mostrado no comando anterior, incluindo chaves.
  3. Reinicie o computador para concluir a instalação:

    Restart-Computer
    

    Aguarde aproximadamente um minuto para que a reinicialização seja concluída.

Como testar o AD FS

O serviço AD FS é implantado, mas você ainda precisa verificar se o serviço pode ser acessado usando o balanceador de carga HTTPS:

  1. Volte para a sessão do Cloud Shell.
  2. Verifique se o certificado SSL está no estado ACTIVE:

    gcloud compute ssl-certificates describe CERTIFICATE_NAME \
        --global \
        --format="get(managed.status)"
    

    Se o certificado estiver no estado PROVISIONING, o registro DNS que você criou para o AD FS poderá precisar de mais tempo para ser propagado. Para mais detalhes, consulte Solução de problemas de certificados gerenciados pelo Google.

  3. No computador local, abra um navegador e acesse este URL:

    https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
    

    Substitua PUBLIC_FQDN pelo nome de domínio público totalmente qualificado do AD FS.

    Verifique se você vê uma mensagem You have successfully signed out, indicando que o AD FS foi implantado com sucesso.

Se você planeja usar a Autenticação Integrada do Windows (IWA, na sigla em inglês), verifique se é possível conseguir um tíquete do Kerberos para o AD FS:

  1. Conecte-se à instância de VM ou a uma VM diferente associada ao domínio usando a Área de trabalho remota e faça login usando credenciais de domínio.
  2. Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell.
  3. Use o comando klist para solicitar um tíquete de serviço para o AD FS:

    klist get http/PUBLIC_FQDN
    

    Verifique se a saída inclui um tíquete para o AD FS:

    #1>     Client: USER @ DOMAIN
            Server: http/PUBLIC_FQDN @ DOMAIN
            KerbTicket Encryption Type: ...
    

O AD FS está pronto para uso. Para detalhes sobre como usar e configurar o serviço, consulte Operações do AD FS.