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 che esegue Microsoft AD FS per Windows Server 2019 e che è aggiunta al dominio Microsoft Active Directory gestito. 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 per ambienti di piccole dimensioni. Per ambienti con maggiori di affidabilità e sicurezza, valuta la possibilità di eseguire il deployment di più istanze AD FS in una configurazione farm ed 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 un specializza il copione 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 aggiungere 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. Creare 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 (Admin).

    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 con il bilanciatore del carico, devi prima creare un gruppo di istanze non gestite, e 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 pubblico (FQDN) da 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 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 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 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 di Domain Admins diritti su un dominio Microsoft AD gestito, non può utilizzare Server Manager per eseguire l'installazione e deve utilizzare e 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 tue credenziali di amministratore delegato.
  2. Fai clic con il pulsante 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 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 locali:

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

    setspn -a http/PUBLIC_FQDN USER
    

    Sostituisci PUBLIC_FQDN con il nome di dominio completo pubblico 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 di AD FS il controllo completo sul container:

    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 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 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 di PowerShell avanzata.

  3. Crea un certificato SSL autofirmato che utilizzi una chiave RSA a 2048 bit e archivia 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 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 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 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 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 pubblico completo il nome di dominio 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 in il comando precedente.
    • APP_ID: l'ID applicazione mostrato in del 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, il record DNS creato per AD FS potrebbe richiedere più tempo per la propagazione. Per ulteriori dettagli, consulta l'articolo 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 pubblico, completamente nome di dominio qualificato di AD FS

    Verifica che sia visualizzato il messaggio You have successfully signed out che indica che il deployment di AD FS sia 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 un'altra VM aggiunta a un 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 la 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 maggiori dettagli sull'utilizzo e sulla configurazione vedi Operazioni AD FS.