Deployment AD FS su un dominio Microsoft AD gestito

Questa guida descrive come eseguire il deployment di Microsoft Active Directory Federation Services (ADFS) 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 tramite un certificato SSL autofirmato.

Il deployment utilizza una singola istanza AD FS e il database interno di Windows, il che lo rende adatto ad ambienti di piccole dimensioni. Per gli ambienti con maggiori esigenze di affidabilità o sicurezza, valuta la possibilità di eseguire il deployment di più istanze AD FS in una configurazione agricolo e di eseguire il deployment dei proxy della 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 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 dominio Active Directory, completa questi 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 con 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 fai clic su Windows PowerShell (amministratore).

    5. Conferma la richiesta di elevazione facendo clic su .

    6. Connetti il computer al dominio Active Directory e riavvia:

      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 con il bilanciatore del carico, devi prima creare un gruppo di istanze non gestite, quindi assegnare questo gruppo di istanze al bilanciatore del carico:

  1. Torna alla sessione di 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 esegua il probe della 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 utilizza 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 che vuoi 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 utilizza l'indirizzo IP esterno e inoltra 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 URL per il bilanciatore del carico.
    • PROXY_NAME: il nome del proxy di destinazione 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 tua rete VPC.
    • SA_NAME: il nome dell'account di servizio.

    Gli intervalli di origine sono quelli 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 A DNS nella zona DNS pubblica che punta all'indirizzo IP del bilanciatore del carico. Il nome completo del record DNS deve corrispondere al nome che hai utilizzato per il certificato SSL.

Deployment di AD FS

Devi eseguire il deployment del ruolo server AD FS nell'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 PowerShell.

Crea un utente del 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 tue credenziali di amministratore delegato.
  2. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e fai clic 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 di Active Directory.
    • PASSWORD: la password dell'utente di Active Directory.
  4. Crea un utente di 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 di amministratori locali:

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\USER"
    
  6. Assegna un nome all'entità di servizio:

    setspn -a http/PUBLIC_FQDN USER
    

    Sostituisci PUBLIC_FQDN con il nome di dominio completo e pubblico di AD FS.

  7. Crea un contenitore vuoto in Active Directory. Dovrai utilizzare questo container in un secondo momento durante l'installazione di 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 di PowerShell viene eseguita come utente AD FS, ma senza privilegi elevati.

  2. Nella nuova sessione di PowerShell, avvia una seconda sessione di PowerShell elevata:

    Start-Process PowerShell -Verb RunAs
    

    Devi eseguire tutti i passaggi successivi in questa nuova sessione di PowerShell elevata.

  3. Crea un certificato SSL autofirmato che utilizza una chiave RSA a 2048 bit e archivialo nell'archivio 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 completo e pubblico 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 container 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 per l'utente AD FS che hai impostato in precedenza:

    $AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
    
  7. Installa AD FS utilizzando i certificati e il container 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 stai utilizzando l'autenticazione basata su certificati.

  8. Se prevedi di utilizzare l'autenticazione integrata di Windows (IWA) per eseguire l'autenticazione in AD FS, esegui questo comando per disabilitare l'associazione di token:

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

    La disabilitazione dell'associazione di token è necessaria perché esegui il deployment di AD FS dietro un bilanciatore del carico, che termina le connessioni TLS.

Se riscontri problemi relativi alle autorizzazioni con questa procedura, contatta l' assistenza Google Cloud.

Configura TLS

Quando si stabiliscono 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 certificato di riserva:

  1. In PowerShell, visualizza le associazioni di certificati del server SSL per AD FS:

    netsh http show sslcert hostnameport=PUBLIC_FQDN:443
    

    Sostituisci PUBLIC_FQDN con il nome di dominio pubblico completo di AD FS.

  2. Configura un certificato di riserva per l'associazione:

    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

È stato eseguito il deployment del servizio AD FS, 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 che hai creato per AD FS potrebbe richiedere più tempo. Per ulteriori dettagli, consulta l'argomento Risoluzione dei 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 completo di AD FS

    Verifica che venga visualizzato il messaggio You have successfully signed out, che indica che il deployment di AD FS è stato eseguito 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 una VM aggiunta a un dominio diversa utilizzando Remote Desktop e accedi utilizzando le credenziali del dominio.
  2. Fai clic con il pulsante destro del mouse sul pulsante Start (o premi Win+X) e fai clic 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 l'uso. Per maggiori dettagli sull'utilizzo e sulla configurazione del servizio, vedi Operazioni di AD FS.