Este guia descreve como implantar os serviços de federação do Microsoft Active Directory (AD FS, na sigla em inglês) para o Windows Server 2019 em um domínio do Serviço Gerenciado para Microsoft Active Directory.
O diagrama a seguir ilustra a implantação:
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
- Crie um domínio do Managed Microsoft AD.
- Extraia as credenciais da conta de administrador delegada
do domínio do Microsoft AD gerenciado. Por padrão, a conta de administrador
delegada é nomeada
setupadmin
. - Crie uma zona de DNS pública. Use essa zona para criar um nome de DNS público para o AD FS.
- Recomendamos que você conheça os requisitos de implantação do AD FS.
Como preparar o projeto e a rede
Você precisa preparar o 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:
No console do Google Cloud, abra o Cloud Shell.
Defina o ID do projeto padrão:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo ID do projeto do Google Cloud.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.
Crie uma conta de serviço:
gcloud iam service-accounts create SA_NAME
Substitua
SA_NAME
pelo nome da conta de serviço.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 associar a instância de VM ao seu domínio do Active Directory, siga estas etapas:
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é conferir a saída
Instance setup finished
e pressione Ctrl + C. Nesse momento, a instância de VM está pronta para ser usada.Crie um nome de usuário e uma senha para a instância de VM.
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.
Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
Confirme a elevação do prompt clicando em Sim.
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:
- Volte para a sessão atual do Cloud Shell.
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.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
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.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.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.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
.
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.
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 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.
Procure o endereço IP do balanceador de carga:
gcloud compute addresses describe ADDRESS_NAME \ --global \ --format=value\(address\)
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
É necessário implantar o papel de servidor do AD FS na instância de VM. Como
você não tem direitos de Domain Admins
em um domínio do Microsoft AD gerenciado, não é possível usar o Gerenciador de servidor para realizar a instalação. Use
o PowerShell.
Criar um usuário do serviço
Crie uma conta de usuário no Active Directory para o serviço AD FS:
- Conecte-se à instância da VM usando a Área de trabalho remota e faça login usando suas credenciais de administrador delegadas.
- Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell (administrador).
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.
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
Adicione o usuário ao grupo local "Administradores":
Add-LocalGroupMember ` -Group "Administrators" ` -Member "$env:userdomain\USER"
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.Crie um contêiner vazio no Active Directory. Você vai precisar usar esse contêiner mais tarde ao instalar o AD FS:
New-ADObject ` -Type Container ` -Name "ADFS Data" ` -Path $CloudOuPath
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:
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 usuário do AD FS, mas sem privilégios elevados.
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.
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.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'
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
Insira novamente as credenciais do usuário do AD FS definido anteriormente:
$AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
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 essas mensagens porque você já definiu o SPN e não está usando a autenticação baseada em certificado.
Se você planeja usar a Autenticação Integrada do Windows (IWA) para autenticação no AD FS, execute o comando abaixo para desativar a vinculação de token:
Set-ADFSProperties -ExtendedProtectionTokenCheck None Restart-Service -Name adfssrv
A desativação da vinculação de token é necessária porque você está implantando o AD FS atrás de um balanceador de carga, que encerra as conexões TLS.
Se você encontrar algum problema relacionado a permissões com 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:
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.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.
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 do AD FS foi implantado, mas você ainda precisa verificar se o serviço pode ser acessado usando o balanceador de carga HTTPS:
- Volte para a sessão do Cloud Shell.
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 criado para o AD FS poderá levar mais tempo para ser propagado. Para mais detalhes, consulte Solução de problemas de certificados gerenciados pelo Google.No computador local, abra um navegador e acesse o seguinte URL:
https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
Substitua
PUBLIC_FQDN
pelo nome de domínio público e totalmente qualificado do AD FS.Verifique se você vê a 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), verifique se é possível receber um tíquete do Kerberos para o AD FS:
- Conecte-se à instância da VM ou a uma VM vinculada a um domínio diferente usando a Área de trabalho remota e faça login usando as credenciais do domínio.
- Clique com o botão direito do mouse no botão Iniciar (ou pressione Win+X) e clique em Windows PowerShell.
Use o comando
klist
para solicitar um ticket 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.