AD FS in einer verwalteten Microsoft AD-Domain bereitstellen

In diesem Leitfaden wird beschrieben, wie Sie Microsoft Active Directory Federation Services (AD FS) für Windows Server 2019 in einer Managed Service for Microsoft Active Directory-Domain bereitstellen.

Das folgende Diagramm veranschaulicht die Bereitstellung:

Architektur

Nutzer kommunizieren mit einem HTTPS-Load-Balancer, der ein von Google verwaltetes Zertifikat verwendet, um SSL-Verbindungen zu beenden. Der Load-Balancer leitet Verbindungen an eine VM-Instanz weiter, auf der Microsoft AD FS für Windows Server 2019 ausgeführt wird und die mit der Managed Microsoft AD-Domain verknüpft ist. Die Kommunikation zwischen dem Load-Balancer und der VM-Instanz wird mithilfe eines selbst signierten SSL-Zertifikats gesichert.

Die Bereitstellung verwendet eine einzelne AD FS-Instanz und die interne Windows-Datenbank, was sie für kleine Umgebungen geeignet macht. Bei Umgebungen mit erhöhter Zuverlässigkeits- oder Sicherheitsanforderungen sollten Sie mehrere AD FS-Instanzen in einer Farmkonfiguration und Föderations-Proxys bereitstellen.

Hinweise

Projekt und Netzwerk vorbereiten

Sie müssen Ihr Google Cloud-Projekt und VPC-Netzwerk auf die Bereitstellung von AD FS vorbereiten.

VM-Instanz erstellen

Erstellen Sie ein Dienstkonto und eine VM-Instanz zum Ausführen von AD FS:

  1. Öffnen Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

  2. Legen Sie Ihre standardmäßige Projekt-ID fest:

    gcloud config set project PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

  3. Legen Sie Ihre Standardregion und -zone fest.

    gcloud config set compute/region REGION
    gcloud config set compute/zone ZONE
    

    Ersetzen Sie Folgendes:

    • REGION: Die ID der Region, in der Sie die Bereitstellung vornehmen möchten.
    • ZONE: Die ID der Zone, in der Sie die Bereitstellung vornehmen möchten.
  4. Erstellen Sie ein Dienstkonto:

    gcloud iam service-accounts create SA_NAME
    

    SA_NAME durch den Namen des Dienstkontos.

  5. Erstellen Sie eine VM-Instanz, die Windows Server 2019 ausführt, und die verwendet ein Spezialisierungsskript, um die AD FS-Serverrolle automatisch zu installieren:

    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"
    

    Ersetzen Sie Folgendes:

    • VM_NAME: Der Name der VM-Instanz.
    • SUBNET_NAME: Der Name des Subnetzes, in dem AD FS bereitgestellt werden soll.
    • SA_NAME: der Name des Dienstkontos

    Führen Sie die folgenden Schritte aus, um die VM-Instanz zu konfigurieren und Ihrer Active Directory-Domain hinzuzufügen:

    1. Überwachen Sie den Initialisierungsprozess der VM. Rufen Sie dazu die Ausgabe des seriellen Ports auf:

      gcloud compute instances tail-serial-port-output VM_NAME
      

      Warten Sie etwa drei Minuten, bis die Ausgabe Instance setup finished angezeigt wird, und drücken Sie dann Strg + C. Jetzt kann die VM-Instanz verwendet werden.

    2. Erstellen Sie einen Nutzernamen und ein Passwort für die VM-Instanz.

    3. Stellen Sie mithilfe von Remote Desktop eine Verbindung zur VM her und melden Sie sich mit dem Nutzernamen und dem Passwort an, den bzw. das Sie im vorherigen Schritt erstellt haben.

    4. Klicken Sie mit der rechten Maustaste auf die Schaltfläche Start (oder drücken Sie Win + X) und klicken Sie dann auf Windows PowerShell (Administrator).

    5. Bestätigen Sie die Eingabeaufforderung für erhöhte Rechte durch Klicken auf Ja.

    6. Verbinden Sie den Computer mit Ihrer Active Directory-Domain und starten Sie ihn neu:

      Add-Computer -Domain DOMAIN -Restart
      

      Ersetzen Sie DOMAIN durch den DNS-Namen Ihrer Active Directory-Domain.

      Warten Sie etwa eine Minute, bis der Neustart abgeschlossen ist.

Load-Balancer erstellen

Sie müssen einen Load-Balancer erstellen, der Nutzern über eine einzelne virtuelle IP-Adresse den Zugriff auf AD FS ermöglicht.

Erstellen Sie zuerst eine nicht verwaltete Instanzgruppe und weisen Sie diese dann dem Load-Balancer zu, um die VM-Instanz, die AD FS ausführt, zu verknüpfen mit dem Load-Balancer:

  1. Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
  2. Erstellen Sie die nicht verwaltete Instanzgruppe:

    gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME &&
    gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME --named-ports=http:443
    

    Ersetzen Sie INSTANCE_GROUP_NAME durch den Namen der Gruppe, die Sie erstellen möchten.

  3. Fügen Sie der Instanzgruppe die vorhandene VM-Instanz hinzu:

    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
    
  4. Erstellen Sie eine Systemdiagnose, die den HTTPS-Port von AD FS prüft:

    gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port 443
    

    Ersetzen Sie HEALTH_CHECK_NAME durch einen Namen für die Systemdiagnose.

  5. Erstellen Sie einen Backend-Dienst für den Load-Balancer, der die HTTPS-Systemdiagnose und die Instanzgruppe verwendet, die zuvor erstellt wurde:

    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)
    

    Ersetzen Sie BACKEND_SERVICE_NAME durch einen Namen für den Backend-Dienst.

  6. Reservieren Sie eine statische externe IP-Adresse für den Load-Balancer:

    gcloud compute addresses create ADDRESS_NAME --global
    

    Ersetzen Sie ADDRESS_NAME durch den Namen, den Sie mit dieser Adresse verknüpfen möchten.

  7. Erstellen Sie ein verwaltetes SSL-Zertifikat für den Load-Balancer:

    gcloud compute ssl-certificates create CERTIFICATE_NAME \
      --domains PUBLIC_FQDN \
      --global
    

    Ersetzen Sie Folgendes:

    • CERTIFICATE_NAME: Der Name des verwalteten SSL-Zertifikats.
    • PUBLIC_FQDN: Der öffentliche, voll qualifizierte Domainname (FQDN), den Sie für AD FS verwenden möchten. Beispiel: login.example.com.
  8. Erstellen Sie ein Frontend des Load-Balancers, das die externe IP-Adresse verwendet und den Traffic an den Backend-Dienst weiterleitet:

    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
    

    Ersetzen Sie Folgendes:

    • URL_MAP_NAME: Der Name der URL-Zuordnung für den Load-Balancer.
    • PROXY_NAME: Der Name des Zielproxys für den Load-Balancer.
    • FORWARDING_RULE_NAME: Der Name der Weiterleitungsregel für den Load-Balancer.
  9. Erstellen Sie eine Firewallregel, um Traffic vom Load-Balancer zur VM-Instanz zuzulassen, auf der AD FS ausgeführt wird:

    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
    

    Ersetzen Sie Folgendes:

    • FIREWALL_RULE_NAME: Der Name der Firewallregel.
    • VPC_NAME: Der Name Ihres VPC-Netzwerk.
    • SA_NAME: der Name des Dienstkontos

    Die Quellbereiche sind die IP-Bereiche für den internen Load-Balancer. Weitere Informationen finden Sie unter Firewallregel konfigurieren.

  10. Suchen Sie die IP-Adresse des Load-Balancers:

    gcloud compute addresses describe ADDRESS_NAME \
       --global \
       --format=value\(address\)
    
  11. Erstellen Sie einen DNS-A-Eintrag in Ihrer öffentlichen DNS-Zone, der auf die IP-Adresse des Load-Balancers verweist. Der vollständig qualifizierte Name des DNS-Eintrags muss mit dem Namen übereinstimmen, den Sie für das SSL-Zertifikat verwendet haben.

AD FS bereitstellen

Sie müssen die AD FS-Serverrolle auf der VM-Instanz bereitstellen. Da Sie keine Domain Admins-Rechte in einer Managed Microsoft AD-Domain haben, können Sie die Installation nicht mit Server Manager ausführen und müssen stattdessen PowerShell verwenden.

Dienstnutzer erstellen

Sie müssen in Active Directory ein Nutzerkonto für den AD FS-Dienst erstellen:

  1. Stellen Sie mit Remote Desktop eine Verbindung zur VM-Instanz her und melden Sie sich mit den Anmeldedaten des delegierten Administrators an.
  2. Klicken Sie mit der rechten Maustaste auf die Schaltfläche Start (oder drücken Sie Win + X) und klicken Sie dann auf Windows PowerShell (Administrator).
  3. Legen Sie ein zufälliges Passwort für das AD FS-Dienstkonto fest:

    $AdfsCredential = Get-Credential -UserName USER -Message 'PASSWORD'
    

    Ersetzen Sie Folgendes:

    • USER: Der Name eines Active Directory-Nutzers.
    • PASSWORD: Passwort des Active Directory-Nutzers.
  4. Erstellen Sie einen Active Directory-Nutzer:

    $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. Fügen Sie den Nutzer der lokalen Administratorgruppe hinzu:

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\USER"
    
  6. Weisen Sie einen Dienstprinzipalnamen zu:

    setspn -a http/PUBLIC_FQDN USER
    

    Ersetzen Sie PUBLIC_FQDN durch den öffentlichen, voll qualifizierten Domainnamen von AD FS.

  7. Erstellen Sie einen leeren Container in Active Directory. Sie müssen diesen Container später verwenden, wenn Sie AD FS installieren:

    New-ADObject `
      -Type Container `
      -Name "ADFS Data" `
      -Path $CloudOuPath
    
  8. Gewähren Sie dem AD FS-Nutzer die vollständige Kontrolle über den Container:

    dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\USER:GA /I:T
    

AD FS installieren

Sie können AD FS auf der VM-Instanz installieren:

  1. Starten Sie eine PowerShell-Sitzung als AD FS-Nutzer:

    runas /u:$env:userdomain\USER powershell
    

    Die neue PowerShell-Sitzung wird als AD FS-Nutzer ausgeführt, jedoch ohne erhöhte Berechtigungen.

  2. Starten Sie in der neuen PowerShell-Sitzung eine zweite, erhöhte PowerShell-Sitzung:

    Start-Process PowerShell -Verb RunAs
    

    Sie müssen alle nachfolgenden Schritte in dieser neuen, erhöhten PowerShell-Sitzung ausführen.

  3. Erstellen Sie ein selbst signiertes SSL-Zertifikat, das einen RSA-2048-Bit-Schlüssel verwendet und speichern Sie ihn im Computerzertifikatspeicher:

    $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
    

    Ersetzen Sie PUBLIC_FQDN durch den öffentlichen, voll qualifizierten Domainnamen von AD FS.

  4. Erstellen Sie ein weiteres RSA 2048-Bit-Zertifikat, das AD FS als Tokensignaturzertifikat verwendet:

    $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. Erstellen Sie einen DKM-Container (Distributed Key Manager):

    $CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName
    $DkmContainer = New-ADObject `
      -Name ((New-Guid).Guid) `
      -Type Container `
      -Path "CN=ADFS Data,$CloudOuPath" `
      -PassThru
    
  6. Geben Sie die Anmeldedaten für den AD FS-Nutzer noch einmal ein, die Sie zuvor festgelegt haben:

    $AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
    
  7. Installieren Sie AD FS mithilfe der zuvor erstellten Zertifikate und des DKM-Containers:

    Install-ADFSFarm `
      -CertificateThumbprint $Certificate.Thumbprint `
      -SigningCertificateThumbprint $SigningCertificate.Thumbprint `
      -DecryptionCertificateThumbprint $SigningCertificate.Thumbprint `
      -FederationServiceName $DnsName `
      -ServiceAccountCredential $AdfsCredential `
      -OverwriteConfiguration `
      -AdminConfiguration @{"DKMContainerDn"=$DkmContainer.DistinguishedName}
    

    Der Befehl zeigt möglicherweise die folgenden Warnmeldungen an:

    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.
    

    Sie können diese Warnungen ignorieren, da Sie den SPN bereits festgelegt haben und keine zertifikatbasierte Authentifizierung verwenden.

  8. Wenn Sie die integrierte Windows-Authentifizierung (IWA) zur Authentifizierung bei AD FS verwenden möchten, führen Sie den folgenden Befehl aus, um die Tokenbindung zu deaktivieren:

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

    Das Deaktivieren der Tokenbindung ist erforderlich, da Sie AD FS hinter einem Load-Balancer bereitstellen und der Load-Balancer TLS-Verbindungen beendet.

Wenn bei diesen Schritten Probleme im Zusammenhang mit Berechtigungen auftreten, wenden Sie sich an den Google Cloud-Support.

TLS konfigurieren

Beim Herstellen von Verbindungen zu Back-Ends verwendet der HTTPS-Load-Balancer nicht die Erweiterung "Server Name Indication" (SNI). Damit AD FS die Verbindung ohne SNI akzeptieren kann, müssen Sie ein Zertifikat-Fallback konfigurieren:

  1. Rufen Sie in PowerShell die SSL-Serverzertifikatbindungen für AD FS auf:

    netsh http show sslcert hostnameport=PUBLIC_FQDN:443
    

    Ersetzen Sie PUBLIC_FQDN durch den öffentlichen, voll qualifizierten Domainnamen von AD FS.

  2. Konfigurieren Sie ein Fallback-Zertifikat für die Bindung:

    netsh http add sslcert ipport=0.0.0.0:443 certhash=CERTIFICATE_HASH "appid=APP_ID" "certstorename=MY"
    

    Ersetzen Sie Folgendes:

    • CERTIFICATE_HASH: Der im vorherigen Befehl angezeigte Zertifikats-Hash.
    • APP_ID: Die im vorherigen Befehl angezeigte Anwendungs-ID, einschließlich geschweifter Klammern.
  3. Starten Sie den Computer neu, um die Installation abzuschließen:

    Restart-Computer
    

    Warten Sie etwa eine Minute, bis der Neustart abgeschlossen ist.

AD FS testen

Der AD FS-Dienst wird bereitgestellt. Sie müssen aber noch prüfen, ob über den HTTPS-Load-Balancer auf den Dienst zugegriffen werden kann:

  1. Kehren Sie zur Cloud Shell-Sitzung zurück.
  2. Prüfen Sie, ob das SSL-Zertifikat den Status ACTIVE hat:

    gcloud compute ssl-certificates describe CERTIFICATE_NAME \
        --global \
        --format="get(managed.status)"
    

    Wenn das Zertifikat den Status PROVISIONING hat, kann es etwas länger dauern, bis der DNS-Eintrag, den Sie für AD FS erstellt haben, weitergegeben wird. Weitere Informationen finden Sie unter Fehlerbehebung bei von Google verwalteten Zertifikaten.

  3. Öffnen Sie auf Ihrem lokalen Computer einen Browser und rufen Sie die folgende URL auf:

    https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
    

    Ersetzen Sie PUBLIC_FQDN durch den öffentlichen, vollständig qualifizierten Domainnamen von AD FS.

    Prüfen Sie, ob die Meldung You have successfully signed out angezeigt wird, die darauf hinweist, dass AD FS erfolgreich bereitgestellt wurde.

Wenn Sie die integrierte Windows-Authentifizierung (IWA) verwenden möchten, prüfen Sie, ob Sie ein Kerberos-Ticket für AD FS erhalten können:

  1. Stellen Sie mithilfe von Remote Desktop eine Verbindung zur VM-Instanz oder einer anderen in die Domain eingebundenen VM her und melden Sie sich mit den Domainanmeldedaten an.
  2. Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie dann auf Windows PowerShell.
  3. Verwenden Sie den Befehl klist, um ein Dienst-Ticket für AD FS anzufordern:

    klist get http/PUBLIC_FQDN
    

    Prüfen Sie, ob die Ausgabe ein Ticket für AD FS enthält:

    #1>     Client: USER @ DOMAIN
            Server: http/PUBLIC_FQDN @ DOMAIN
            KerbTicket Encryption Type: ...
    

AD FS ist einsatzbereit. Weitere Informationen zur Verwendung und Konfiguration des Dienstes finden Sie unter AD FS-Vorgänge.