Esegui il deployment di AD FS in un dominio Microsoft AD gestito

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:

Architettura

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

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:

  1. Nella console Google Cloud, apri Cloud Shell.

    Attivare Cloud Shell

  2. Imposta l'ID progetto predefinito:

    gcloud config set project PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.

  3. 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.
  4. Crea un account di servizio:

    gcloud iam service-accounts create SA_NAME
    

    Sostituisci SA_NAME con il nome dell'account di servizio.

  5. 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:

    1. 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.

    2. Crea un nome utente e una password per l'istanza VM.

    3. Connettiti alla VM utilizzando Remote Desktop e accedi utilizzando il nome utente e la password creati nel passaggio precedente.

    4. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).

    5. Conferma la richiesta di elevazione facendo clic su .

    6. 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:

  1. Torna alla sessione Cloud Shell esistente.
  2. 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.

  3. Aggiungi l'istanza VM esistente al gruppo di istanze:

    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
    
  4. 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à.

  5. 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.

  6. 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.

  7. 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.
  8. 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.
  9. 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.

  10. Cerca l'indirizzo IP del bilanciatore del carico:

    gcloud compute addresses describe ADDRESS_NAME \
       --global \
       --format=value\(address\)
    
  11. 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:

  1. Connettiti all'istanza VM utilizzando Remote Desktop e accedi utilizzando le credenziali di amministratore delegate.
  2. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
  3. 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.
  4. 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
    
  5. Aggiungi l'utente al gruppo Amministratori locale:

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\USER"
    
  6. 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.

  7. 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
    
  8. 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:

  1. 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.

  2. 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.

  3. 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.

  4. 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'
    
  5. 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
    
  6. Inserisci di nuovo le credenziali dell'utente AD FS impostato in precedenza:

    $AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
    
  7. 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.

  8. 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:

  1. 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.

  2. 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.
  3. 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:

  1. Torna alla sessione di Cloud Shell.
  2. 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.

  3. 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 FS

    Verifica 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:

  1. Connettiti all'istanza VM o a un'altra VM associata al dominio utilizzando Remote Desktop e accedi utilizzando le credenziali del dominio.
  2. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell.
  3. 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.