In diesem Leitfaden wird beschrieben, wie Sie Microsoft Active Directory Federation Services (AD FS) für Windows Server 2019 in einer Managed Microsoft AD-Domain bereitstellen.
Das folgende Diagramm veranschaulicht die Bereitstellung:
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.
Hinweis
Zum Durcharbeiten dieser Anleitung benötigen Sie Folgendes:
- Eine vorhandene Managed Microsoft AD-Domain.
- Delegierte Administratoranmeldedaten für die Managed Microsoft AD-Domain. Standardmäßig heißt das delegierte Administratorkonto
setupadmin
. - Eine öffentliche DNS-Zone. In dieser Zone erstellen Sie einen öffentlichen DNS-Namen für AD FS.
Machen Sie sich mit den Anforderungen für die Bereitstellung von AD FS vertraut.
Projekt und Netzwerk vorbereiten
Sie bereiten jetzt Ihr Google Cloud-Projekt und Ihre VPC für die Bereitstellung von AD FS vor.
VM-Instanz erstellen
Erstellen Sie ein Dienstkonto und eine VM-Instanz zum Ausführen von AD FS:
Öffnen Sie in der Google Cloud Console Cloud Shell.
Initialisieren Sie die folgenden Variablen:
VPC_NAME=VPC_NAME SUBNET_NAME=SUBNET_NAME
Dabei gilt:
- VPC_NAME ist der Name Ihrer VPC.
- SUBNET_NAME ist der Name des Subnetzes, in dem AD FS bereitgestellt werden soll.
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.Legen Sie Ihre Standardregion und -zone fest.
gcloud config set compute/region
REGION
gcloud config set compute/zoneZONE
Wobei:
REGION
ist die ID der Region, in der Sie die Bereitstellung vornehmen möchten.ZONE
ist die ID der Zone, in der Sie die Bereitstellung vornehmen möchten.
Erstellen Sie ein Dienstkonto:
gcloud iam service-accounts create ad-federation-services
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 adfs-1 \ --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 ad-federation-services@$(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"
Überwachen Sie den Initialisierungsprozess der VM. Rufen Sie dazu die Ausgabe des seriellen Ports auf:
gcloud compute instances tail-serial-port-output adfs-1
Warten Sie etwa drei Minuten, bis die Ausgabe
Instance setup finished
angezeigt wird, und drücken Sie dannCtrl+C
. Jetzt kann die VM-Instanz verwendet werden.Erstellen Sie einen Nutzernamen und ein Passwort für die VM-Instanz.
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.
Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie
Win+X
) und klicken Sie anschließend auf Windows PowerShell (Administrator).Bestätigen Sie die Eingabeaufforderung für erhöhte Rechte durch Klicken auf Ja.
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 erstellen jetzt einen Load-Balancer, mit dem Nutzer über eine einzelne virtuelle IP-Adresse auf AD FS zugreifen können.
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:
- Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
Erstellen Sie die nicht verwaltete Instanzgruppe:
gcloud compute instance-groups unmanaged create adfs && gcloud compute instance-groups set-named-ports adfs --named-ports=http:443
Fügen Sie der Instanzgruppe die vorhandene VM-Instanz hinzu:
gcloud compute instance-groups unmanaged add-instances adfs --instances adfs-1
Erstellen Sie eine Systemdiagnose, die den HTTPS-Port von AD FS prüft:
gcloud compute health-checks create tcp adfs-health-check --port 443
Erstellen Sie einen Back-End-Dienst für den Load-Balancer, der die HTTPS-Systemdiagnose und die Instanzgruppe verwendet, die zuvor erstellt wurde:
gcloud compute backend-services create adfs-backend \ --health-checks adfs-health-check \ --port-name http \ --protocol HTTPS \ --global && \ gcloud compute backend-services add-backend adfs-backend \ --instance-group adfs \ --global \ --instance-group-zone $(gcloud config get-value compute/zone)
Reservieren Sie eine statische externe IP-Adresse für den Load-Balancer:
gcloud compute addresses create adfs-external --global
Erstellen Sie ein verwaltetes SSL-Zertifikat für den Load-Balancer:
gcloud compute ssl-certificates create adfs-external \ --domains PUBLIC_FQDN \ --global
Dabei ist
PUBLIC_FQDN
der öffentliche, voll qualifizierte Domainname (FQDN), den Sie für AD FS verwenden möchten, z. B.login.example.com
.Erstellen Sie ein Front-End des Load-Balancers, das die externe IP-Adresse verwendet und den Traffic an den Back-End-Dienst weiterleitet:
gcloud compute url-maps create adfs \ --default-service adfs-backend && \ gcloud compute target-https-proxies create adfs-proxy \ --ssl-certificates adfs-external \ --url-map adfs && \ gcloud compute forwarding-rules create adfs \ --global \ --address adfs-external \ --target-https-proxy adfs-proxy \ --ports 443
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 allow-https-to-adfs \ --allow tcp:443 \ --network $VPC_NAME \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-service-accounts ad-federation-services@$(gcloud config get-value core/project).iam.gserviceaccount.com
Die Quellbereiche sind die IP-Bereiche für den internen Load-Balancer. Weitere Informationen finden Sie unter Firewallregel konfigurieren.
Suchen Sie die IP-Adresse des Load-Balancers:
gcloud compute addresses describe adfs-external \ --global \ --format=value\(address\)
Erstellen Sie einen DNS-
A
-Eintrag in Ihrer öffentlichen DNS-Zone, der auf die IP-Adresse des Load-Balancers verweist. Der voll qualifizierte Name des DNS-Eintrags muss mit dem Namen übereinstimmen, den Sie für das SSL-Zertifikat verwendet haben.
AD FS bereitstellen
Sie stellen jetzt die AD FS-Serverrolle auf der VM-Instanz adfs-1
bereit. Da Sie keine Domainadministratorrechte in einer verwalteten Microsoft AD-Domain haben, können Sie den Server-Manager nicht für die Installation verwenden. Sie müssen stattdessen PowerShell verwenden.
Dienstnutzer erstellen
Sie erstellen jetzt in Active Directory ein Nutzerkonto für den AD FS-Dienst:
- Stellen Sie mithilfe von Remote Desktop eine Verbindung zur VM-Instanz
adfs-1
her und melden Sie sich mit Ihren delegierten Administratoranmeldedaten an. - Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell (Administrator).
Legen Sie ein zufälliges Passwort für das AD FS-Dienstkonto fest:
$AdfsCredential = Get-Credential -UserName adfssvc -Message 'Enter password'
Erstellen Sie einen Active Directory-Nutzer
adfssvc
:$CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName $AdfsUser = New-ADuser ` -Name adfssvc ` -DisplayName 'AD FS service account' ` -AccountPassword $AdfsCredential.Password ` -Path "$CloudOuPath" ` -PasswordNeverExpires $True ` -PassThru | Enable-ADAccount -PassThru
Fügen Sie den Nutzer der lokalen Administratorgruppe hinzu:
Add-LocalGroupMember ` -Group "Administrators" ` -Member "$env:userdomain\adfssvc"
Weisen Sie einen Dienstprinzipalnamen zu:
setspn -a http/PUBLIC_FQDN adfssvc
Dabei ist
PUBLIC_FQDN
der öffentliche, voll qualifizierte Domainname von AD FS.Erstellen Sie einen leeren Container in Active Directory. Sie verwenden diesen Container später, wenn Sie AD FS installieren:
New-ADObject ` -Type Container ` -Name "ADFS Data" ` -Path $CloudOuPath
Gewähren Sie dem AD FS-Nutzer die vollständige Kontrolle über den Container:
dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\adfssvc:GA /I:T
AD FS installieren
Sie installieren jetzt AD FS auf adfs-1
:
Starten Sie eine PowerShell-Sitzung als AD FS-Nutzer:
runas /u:$env:userdomain\adfssvc powershell
Die neue PowerShell-Sitzung wird jetzt als AD FS-Nutzer ausgeführt, jedoch ohne erhöhte Berechtigungen.
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.
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
Dabei ist
PUBLIC_FQDN
der öffentliche, voll qualifizierte Domainname von AD FS.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'
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
Geben Sie die Anmeldedaten für den AD FS-Nutzer noch einmal ein, die Sie zuvor festgelegt haben:
$AdfsCredential = Get-Credential -UserName "$env:userdomain\adfssvc" -Message 'Enter password'
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}
Mit dem Befehl können folgende Warnmeldungen angezeigt werden:
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 und keine zertifikatbasierte Authentifizierung verwendet haben.
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.
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:
Rufen Sie in PowerShell die SSL-Serverzertifikatbindungen für AD FS auf:
netsh http show sslcert hostnameport=PUBLIC_FQDN:443
Dabei ist
PUBLIC_FQDN
der öffentliche, voll qualifizierte Domainname von AD FSKonfigurieren 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"
Wobei:
CERTIFICATE_HASH
ist der Zertifikat-Hash, der im vorherigen Befehl angezeigt wurde.APP_ID
ist die Anwendungs-ID, die im vorherigen Befehl angezeigt wurde, einschließlich geschweifte Klammern.
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 ist jetzt bereitgestellt. Sie müssen jedoch noch prüfen, ob auf den Dienst über den HTTPS-Load-Balancer zugegriffen werden kann:
- Kehren Sie zur Cloud Shell-Sitzung zurück.
Prüfen Sie, ob das SSL-Zertifikat den Status
ACTIVE
hat:gcloud compute ssl-certificates describe adfs-external \ --global \ --format="get(managed.status)"
Wenn sich das Zertifikat im Status
PROVISIONING
befindet, benötigt der DNS-Eintrag, den Sie für AD FS erstellt haben, möglicherweise zusätzliche Zeit, bis die Weitergabe wirksam wird. Weitere Informationen finden Sie unter Fehlerbehebung bei von Google verwalteten Zertifikaten.Ö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, voll qualifizierten Domainnamen von AD FSPrüfen Sie, ob die Meldung Sie haben sich erfolgreich abgemeldet angezeigt wird, was bedeutet, 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:
- Stellen Sie über Remote Desktop eine Verbindung zur VM-Instanz
adfs-1
oder zu einer anderen VM her, die Teil der Domain ist, und melden Sie sich mit Anmeldedaten für die Domain an. - Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell.
Verwenden Sie den Befehl
klist
, um ein Dienstticket 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 kann jetzt verwendet werden. Weitere Informationen zur Verwendung und Konfiguration des Dienstes finden Sie unter AD FS-Vorgänge.