Questa guida descrive come eseguire il deployment di Microsoft Active Directory Federation Services (AD FS) per Windows Server 2019 in un dominio Managed Service for Microsoft Active Directory.
Il seguente diagramma illustra il deployment:
Gli utenti comunicano con un bilanciatore del carico HTTPS che utilizza un certificato gestito da Google per terminare le connessioni SSL. Il bilanciatore del carico inoltra le connessioni a un'istanza VM che esegue Microsoft AD FS per Windows Server 2019 e che è unita al dominio Microsoft AD gestito. La comunicazione tra il bilanciatore del carico e l'istanza VM è protetta utilizzando un certificato SSL autofirmato.
Il deployment utilizza una singola istanza AD FS e il database interno di Windows, il che lo rende adatto a piccoli ambienti. Per gli ambienti con maggiori esigenze di affidabilità o sicurezza, ti consigliamo di implementare più istanze AD FS in una configurazione di farm e di implementare i proxy di federazione.
Prima di iniziare
- Crea un dominio Microsoft AD gestito.
- Recupera le credenziali dell'account amministratore con delega del dominio Microsoft AD gestito. Per impostazione predefinita, l'account amministratore con delega è denominato
setupadmin
. - Crea una zona DNS pubblica. Utilizza questa zona per creare un nome DNS pubblico per AD FS.
- Assicurati di conoscere i requisiti per il deployment di AD FS.
Preparazione del progetto e della rete
Devi preparare il progetto Google Cloud e la rete VPC per il deployment di AD FS.
Crea un'istanza VM
Crea un account di servizio e un'istanza VM per eseguire AD FS:
Nella console Google Cloud, apri Cloud Shell.
Imposta l'ID progetto predefinito:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID del tuo progetto Google Cloud.Imposta la regione e la zona predefinite:
gcloud config set compute/region REGION gcloud config set compute/zone ZONE
Sostituisci quanto segue:
REGION
: l'ID della regione in cui vuoi eseguire il deployment.ZONE
: l'ID della zona in cui vuoi eseguire il deployment.
Crea un account di servizio:
gcloud iam service-accounts create SA_NAME
Sostituisci
SA_NAME
con il nome dell'account di servizio.Crea un'istanza VM che esegue Windows Server 2019 e utilizza uno script di specializzazione per installare automaticamente il ruolo del server 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"
Sostituisci quanto segue:
VM_NAME
: il nome dell'istanza VM.SUBNET_NAME
: il nome della subnet in cui eseguire il deployment di AD FS.SA_NAME
: il nome dell'account di servizio.
Per configurare e unire l'istanza VM al tuo dominio Active Directory, completa i seguenti passaggi:
Monitora il processo di inizializzazione della VM visualizzando l'output della porta seriale:
gcloud compute instances tail-serial-port-output VM_NAME
Attendi circa 3 minuti finché non viene visualizzato l'output
Instance setup finished
, quindi premi Ctrl+C. A questo punto, l'istanza VM è pronta per essere utilizzata.Crea un nome utente e una password per l'istanza VM.
Connettiti alla VM utilizzando Remote Desktop e accedi utilizzando il nome utente e la password creati nel passaggio precedente.
Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
Conferma la richiesta di elevazione facendo clic su Sì.
Collega il computer al dominio Active Directory e riavvialo:
Add-Computer -Domain DOMAIN -Restart
Sostituisci
DOMAIN
con il nome DNS del tuo dominio Active Directory.Attendi circa 1 minuto per il completamento del riavvio.
Crea un bilanciatore del carico
Devi creare un bilanciatore del carico che consenta agli utenti di accedere ad AD FS utilizzando un singolo indirizzo IP virtuale.
Per associare l'istanza VM che esegue AD FS al bilanciatore del carico, crea prima un gruppo di istanze non gestite e poi assegna questo gruppo di istanze al bilanciatore del carico:
- Torna alla sessione Cloud Shell esistente.
Crea il gruppo di istanze non gestite:
gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME && gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME --named-ports=http:443
Sostituisci
INSTANCE_GROUP_NAME
con il nome del gruppo che vuoi creare.Aggiungi l'istanza VM esistente al gruppo di istanze:
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
Crea un controllo di integrità che esamini la porta HTTPS di AD FS:
gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port 443
Sostituisci
HEALTH_CHECK_NAME
con un nome per il controllo di integrità.Crea un servizio di backend del bilanciatore del carico che utilizzi il controllo di integrità HTTPS e il gruppo di istanze che hai creato in precedenza:
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)
Sostituisci
BACKEND_SERVICE_NAME
con un nome per il servizio di backend.Prenota un indirizzo IP esterno statico per il bilanciatore del carico:
gcloud compute addresses create ADDRESS_NAME --global
Sostituisci
ADDRESS_NAME
con il nome da associare a questo indirizzo.Crea un certificato SSL gestito per il bilanciatore del carico:
gcloud compute ssl-certificates create CERTIFICATE_NAME \ --domains PUBLIC_FQDN \ --global
Sostituisci quanto segue:
CERTIFICATE_NAME
: il nome del certificato SSL gestito.PUBLIC_FQDN
: il nome di dominio completo (FQDN) pubblico che vuoi utilizzare per AD FS. Ad esempio,login.example.com
.
Crea un frontend del bilanciatore del carico che utilizzi l'indirizzo IP esterno e inoltri il traffico al servizio di backend:
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
Sostituisci quanto segue:
URL_MAP_NAME
: il nome della mappa di URL per il bilanciamento del carico.PROXY_NAME
: il nome del proxy target per il bilanciatore del carico.FORWARDING_RULE_NAME
: il nome della regola di forwarding per il bilanciatore del carico.
Crea una regola firewall per consentire il traffico dal bilanciatore del carico all'istanza VM che esegue 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
Sostituisci quanto segue:
FIREWALL_RULE_NAME
: il nome della regola firewall.VPC_NAME
: il nome della rete VPC.SA_NAME
: il nome dell'account di servizio.
Gli intervalli di origine sono gli intervalli IP per il bilanciatore del carico interno. Per ulteriori informazioni, consulta Configurare una regola firewall.
Cerca l'indirizzo IP del bilanciatore del carico:
gcloud compute addresses describe ADDRESS_NAME \ --global \ --format=value\(address\)
Crea un record DNS
A
nella zona DNS pubblica che rimandi all'indirizzo IP del bilanciatore del carico. Il nome completo del record DNS deve corrispondere al nome utilizzato per il certificato SSL.
Deployment di AD FS
Devi eseguire il deployment del ruolo del server AD FS sull'istanza VM. Poiché
non disponi dei diritti Domain Admins
in un dominio Microsoft AD gestito, non puoi utilizzare Server Manager per eseguire l'installazione e devi utilizzare
piuttosto PowerShell.
Crea un utente di servizio
Devi creare un account utente in Active Directory per il servizio AD FS:
- Connettiti all'istanza VM utilizzando Remote Desktop e accedi utilizzando le credenziali di amministratore delegate.
- Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
Imposta una password casuale per l'account di servizio AD FS:
$AdfsCredential = Get-Credential -UserName USER -Message 'PASSWORD'
Sostituisci quanto segue:
USER
: il nome di un utente Active Directory.PASSWORD
: la password dell'utente Active Directory.
Crea un utente 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
Aggiungi l'utente al gruppo Amministratori locale:
Add-LocalGroupMember ` -Group "Administrators" ` -Member "$env:userdomain\USER"
Assegna un nome dell'entità servizio:
setspn -a http/PUBLIC_FQDN USER
Sostituisci
PUBLIC_FQDN
con il nome di dominio pubblico completo di AD FS.Crea un contenitore vuoto in Active Directory. Dovrai utilizzare questo contenitore più tardi quando installi AD FS:
New-ADObject ` -Type Container ` -Name "ADFS Data" ` -Path $CloudOuPath
Concedi all'utente AD FS il controllo completo sul contenitore:
dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\USER:GA /I:T
Installa AD FS
Puoi installare AD FS sull'istanza VM:
Avvia una sessione di PowerShell come utente ADFS:
runas /u:$env:userdomain\USER powershell
La nuova sessione PowerShell viene eseguita come utente AD FS, ma senza privilegi elevati.
Nella nuova sessione di PowerShell, avvia una seconda sessione di PowerShell con privilegi elevati:
Start-Process PowerShell -Verb RunAs
Devi eseguire tutti i passaggi successivi in questa nuova sessione PowerShell con privilegi elevati.
Crea un certificato SSL autofirmato che utilizzi una chiave RSA a 2048 bit e archivialo nel magazzino dei certificati del computer:
$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
Sostituisci
PUBLIC_FQDN
con il nome di dominio pubblico completo di AD FS.Crea un altro certificato RSA a 2048 bit che AD FS utilizza come certificato di firma del 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'
Crea un contenitore Distributed Key Manager (DKM):
$CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName $DkmContainer = New-ADObject ` -Name ((New-Guid).Guid) ` -Type Container ` -Path "CN=ADFS Data,$CloudOuPath" ` -PassThru
Inserisci di nuovo le credenziali dell'utente AD FS impostato in precedenza:
$AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
Installa AD FS utilizzando i certificati e il contenitore DKM che hai creato in precedenza:
Install-ADFSFarm ` -CertificateThumbprint $Certificate.Thumbprint ` -SigningCertificateThumbprint $SigningCertificate.Thumbprint ` -DecryptionCertificateThumbprint $SigningCertificate.Thumbprint ` -FederationServiceName $DnsName ` -ServiceAccountCredential $AdfsCredential ` -OverwriteConfiguration ` -AdminConfiguration @{"DKMContainerDn"=$DkmContainer.DistinguishedName}
Il comando potrebbe mostrare i seguenti messaggi di avviso:
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.
Puoi ignorare questi avvisi perché hai già impostato l'SPN e non utilizzi l'autenticazione basata su certificato.
Se prevedi di utilizzare l'autenticazione Windows integrata (IWA) per autenticarti ad AD FS, esegui il seguente comando per disattivare il binding dei token:
Set-ADFSProperties -ExtendedProtectionTokenCheck None Restart-Service -Name adfssrv
La disattivazione dell'associazione dei token è necessaria perché stai implementando AD FS dietro un bilanciatore del carico e il bilanciatore del carico termina le connessioni TLS.
Se riscontri problemi relativi alle autorizzazioni durante questi passaggi, contatta l' assistenza Google Cloud.
Configura TLS
Quando stabilisce connessioni ai backend, il bilanciatore del carico HTTPS non utilizza l'estensione SNI (Server Name Indication). Per consentire ad AD FS di accettare la connessione senza SNI, devi configurare un fallback del certificato:
In PowerShell, visualizza le associazioni del certificato server SSL per AD FS:
netsh http show sslcert hostnameport=PUBLIC_FQDN:443
Sostituisci
PUBLIC_FQDN
con il nome di dominio pubblico e completo di AD FS.Configura un certificato di riserva per il binding:
netsh http add sslcert ipport=0.0.0.0:443 certhash=CERTIFICATE_HASH "appid=APP_ID" "certstorename=MY"
Sostituisci quanto segue:
CERTIFICATE_HASH
: l'hash del certificato mostrato nel comando precedente.APP_ID
: l'ID applicazione mostrato nel comando precedente, incluse le parentesi graffe.
Riavvia il computer per completare l'installazione:
Restart-Computer
Attendi circa 1 minuto per il completamento del riavvio.
Test di AD FS
Il servizio AD FS è dipiegato, ma devi comunque verificare che sia possibile accedere al servizio utilizzando il bilanciatore del carico HTTPS:
- Torna alla sessione di Cloud Shell.
Verifica che il certificato SSL sia in stato
ACTIVE
:gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(managed.status)"
Se il certificato è in stato
PROVISIONING
, la propagazione del record DNS creato per AD FS potrebbe richiedere più tempo. Per ulteriori dettagli, consulta la sezione Risolvere i problemi relativi ai certificati gestiti da Google.Sul computer locale, apri un browser e vai al seguente URL:
https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
Sostituisci
PUBLIC_FQDN
con il nome di dominio pubblico e completamente qualificato di AD FSVerifica di visualizzare un messaggio
You have successfully signed out
che indica che AD FS è stato implementato correttamente.
Se prevedi di utilizzare l'autenticazione integrata di Windows (IWA), verifica di poter ottenere un ticket Kerberos per AD FS:
- Connettiti all'istanza VM o a un'altra VM associata al dominio utilizzando Remote Desktop e accedi utilizzando le credenziali del dominio.
- Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell.
Utilizza il comando
klist
per richiedere un ticket di servizio per AD FS:klist get http/PUBLIC_FQDN
Verifica che l'output includa un ticket per AD FS:
#1> Client: USER @ DOMAIN Server: http/PUBLIC_FQDN @ DOMAIN KerbTicket Encryption Type: ...
AD FS è pronto per essere utilizzato. Per informazioni dettagliate sull'utilizzo e sulla configurazione del servizio, consulta Operazioni AD FS.