Ce guide explique comment déployer Microsoft Active Directory Federation Services (AD FS) pour Windows Server 2019 dans un domaine du service géré pour Microsoft Active Directory.
Le schéma suivant illustre le déploiement :
Les utilisateurs communiquent avec un équilibreur de charge HTTPS qui utilise un certificat géré par Google pour mettre fin aux connexions SSL. L'équilibreur de charge transfère les connexions à une instance de VM qui exécute Microsoft AD FS pour Windows Server 2019 et qui est associée à un domaine Microsoft AD géré. La communication entre l'équilibreur de charge et l'instance de VM est sécurisée à l'aide d'un certificat SSL autosigné.
Le déploiement utilise une seule instance AD FS et la base de données interne Windows, ce qui la rend adaptée aux petits environnements. Pour les environnements présentant des exigences de fiabilité ou de sécurité accrues, envisagez de déployer plusieurs instances AD FS dans une configuration de ferme et de déployer des proxys de fédération.
Avant de commencer
- Créez un domaine Microsoft AD géré.
- Récupérez les identifiants du compte administrateur délégué du domaine Microsoft AD géré. Par défaut, le compte administrateur délégué est nommé
setupadmin
. - Créez une zone DNS publique. Cette zone vous permet de créer un nom DNS public pour AD FS.
- Assurez-vous de bien connaître les exigences relatives au déploiement d'AD FS.
Préparer le projet et le réseau
Vous devez préparer votre projet Google Cloud et votre réseau VPC pour le déploiement d'AD FS.
Créer une instance de VM
Créez un compte de service et une instance de VM pour exécuter AD FS :
Dans la console Google Cloud, ouvrez Cloud Shell.
Définissez votre ID de projet par défaut :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_ID
par l'ID de votre projet Google Cloud.Définissez votre région et votre zone par défaut :
gcloud config set compute/region REGION gcloud config set compute/zone ZONE
Remplacez les éléments suivants :
REGION
: ID de la région dans laquelle vous souhaitez effectuer le déploiement.ZONE
: ID de la zone dans laquelle vous souhaitez effectuer le déploiement.
Créez un compte de service :
gcloud iam service-accounts create SA_NAME
Remplacez
SA_NAME
par le nom du compte de service.Créez une instance de VM qui exécute Windows Server 2019 et utilise un script de spécialisation pour installer automatiquement le rôle serveur 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"
Remplacez les éléments suivants :
VM_NAME
: nom de l'instance de VM.SUBNET_NAME
: nom du sous-réseau dans lequel déployer AD FS.SA_NAME
: nom du compte de service.
Pour configurer et associer l'instance de VM à votre domaine Active Directory, procédez comme suit:
Surveillez le processus d'initialisation de la VM en consultant la sortie de son port série :
gcloud compute instances tail-serial-port-output VM_NAME
Attendez environ trois minutes avant que la sortie
Instance setup finished
s'affiche, puis appuyez sur Ctrl+C. À ce stade, l'instance de VM est prête à être utilisée.Créez un nom d'utilisateur et un mot de passe pour l'instance de VM.
Connectez-vous à la VM à l'aide du Bureau à distance en vous servant du nom d'utilisateur et du mot de passe créés à l'étape précédente.
Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
Rattachez l'ordinateur au domaine Active Directory, puis redémarrez-le :
Add-Computer -Domain DOMAIN -Restart
Remplacez
DOMAIN
par le nom DNS du domaine Active Directory.Attendez environ une minute la fin du redémarrage.
Créer un équilibreur de charge
Vous devez créer un équilibreur de charge qui permet aux utilisateurs d'accéder à AD FS à l'aide d'une seule adresse IP virtuelle.
Pour associer l'instance de VM qui exécute AD FS à l'équilibreur de charge, commencez par créer un groupe d'instances non géré, puis attribuez-le à l'équilibreur de charge :
- Revenez à la session Cloud Shell que vous avez précédemment ouverte.
Créez le groupe d'instances non géré :
gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME && gcloud compute instance-groups set-named-ports INSTANCE_GROUP_NAME --named-ports=http:443
Remplacez
INSTANCE_GROUP_NAME
par le nom du groupe que vous souhaitez créer.Ajoutez l'instance de VM existante au groupe d'instances :
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
Créez une vérification d'état qui teste le port HTTPS d'AD FS :
gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port 443
Remplacez
HEALTH_CHECK_NAME
par le nom de la vérification de l'état.Créez un service backend d'équilibreur de charge qui utilise la vérification d'état HTTP et le groupe d'instances géré que vous avez créé précédemment :
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)
Remplacez
BACKEND_SERVICE_NAME
par le nom du service de backend.Réservez une adresse IP externe statique pour l'équilibreur de charge :
gcloud compute addresses create ADDRESS_NAME --global
Remplacez
ADDRESS_NAME
par le nom que vous souhaitez associer à cette adresse.Créez un certificat SSL géré pour l'équilibreur de charge :
gcloud compute ssl-certificates create CERTIFICATE_NAME \ --domains PUBLIC_FQDN \ --global
Remplacez les éléments suivants :
CERTIFICATE_NAME
: nom du certificat SSL géré.PUBLIC_FQDN
: nom de domaine complet (FQDN) public que vous souhaitez utiliser pour AD FS. Exemple :login.example.com
Créez une interface d'équilibrage de charge qui utilise l'adresse IP externe et transfère le trafic vers le service de 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
Remplacez les éléments suivants :
URL_MAP_NAME
: nom du mappage d'URL de l'équilibreur de charge.PROXY_NAME
: nom du proxy cible de l'équilibreur de charge.FORWARDING_RULE_NAME
: nom de la règle de transfert de l'équilibreur de charge.
Créez une règle de pare-feu pour autoriser le trafic de l'équilibreur de charge vers l'instance de VM qui exécute 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
Remplacez les éléments suivants :
FIREWALL_RULE_NAME
: nom de la règle de pare-feu.VPC_NAME
: nom de votre réseau VPC.SA_NAME
: nom du compte de service.
Les plages sources sont les plages d'adresses IP de l'équilibreur de charge interne. Pour en savoir plus, consultez la page Configurer une règle de pare-feu.
Recherchez l'adresse IP de l'équilibreur de charge :
gcloud compute addresses describe ADDRESS_NAME \ --global \ --format=value\(address\)
Créez un enregistrement DNS
A
dans votre zone DNS publique qui pointe vers l'adresse IP de l'équilibreur de charge. Le nom complet de l'enregistrement DNS doit correspondre au nom que vous avez utilisé dans le certificat SSL.
Déployer AD FS
Vous devez déployer le rôle de serveur AD FS sur l'instance de VM. Comme vous ne disposez pas des droits Domain Admins
dans un domaine Microsoft AD géré, vous ne pouvez pas utiliser Server Manager pour effectuer l'installation. Vous devez plutôt utiliser PowerShell.
Créer un utilisateur du service
Vous devez créer un compte utilisateur dans Active Directory pour le service AD FS:
- Connectez-vous à l'instance de VM à l'aide du Bureau à distance, puis connectez-vous à l'aide de vos identifiants d'administrateur délégué.
- Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
Définissez un mot de passe aléatoire pour le compte de service AD FS:
$AdfsCredential = Get-Credential -UserName USER -Message 'PASSWORD'
Remplacez les éléments suivants :
USER
: nom d'un utilisateur Active Directory.PASSWORD
: mot de passe de l'utilisateur Active Directory.
Créez un utilisateur 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
Ajoutez l'utilisateur au groupe Administrateurs local :
Add-LocalGroupMember ` -Group "Administrators" ` -Member "$env:userdomain\USER"
Attribuez un nom au compte principal du service :
setspn -a http/PUBLIC_FQDN USER
Remplacez
PUBLIC_FQDN
par le nom de domaine public complet d'AD FS.Créer un conteneur vide dans Active Directory Vous devrez utiliser ce conteneur ultérieurement lorsque vous installerez AD FS:
New-ADObject ` -Type Container ` -Name "ADFS Data" ` -Path $CloudOuPath
Accordez à l'utilisateur AD FS un contrôle total sur le conteneur :
dsacls.exe "CN=ADFS Data,$CloudOuPath" /G $env:userdomain\USER:GA /I:T
Installer AD FS
Vous pouvez installer AD FS sur l'instance de VM:
Démarrez une session PowerShell en tant qu'utilisateur ADFS :
runas /u:$env:userdomain\USER powershell
La nouvelle session PowerShell s'exécute en tant qu'utilisateur AD FS, mais sans privilèges élevés.
Dans la nouvelle session PowerShell, démarrez une deuxième session PowerShell avec élévation de privilèges :
Start-Process PowerShell -Verb RunAs
Vous devez exécuter toutes les étapes suivantes dans cette nouvelle session PowerShell avec élévation de privilèges.
Créez un certificat SSL autosigné qui utilise une clé RSA de 2 048 bits et stockez-le dans le magasin de certificats de l'ordinateur :
$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
Remplacez
PUBLIC_FQDN
par le nom de domaine complet public d'AD FS.Créez un autre certificat RSA 2 048 bits qu'AD FS utilise comme certificat de signature de jetons :
$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'
Créez un conteneur de gestionnaire de clés distribué (DKM) :
$CloudOuPath = "OU=Cloud," + (Get-ADDomain).DistinguishedName $DkmContainer = New-ADObject ` -Name ((New-Guid).Guid) ` -Type Container ` -Path "CN=ADFS Data,$CloudOuPath" ` -PassThru
Saisissez à nouveau les identifiants de l'utilisateur AD FS que vous avez définis précédemment :
$AdfsCredential = Get-Credential -UserName "$env:userdomain\USER" -Message 'PASSWORD'
Installez AD FS à l'aide des certificats et du conteneur DKM que vous avez créés précédemment :
Install-ADFSFarm ` -CertificateThumbprint $Certificate.Thumbprint ` -SigningCertificateThumbprint $SigningCertificate.Thumbprint ` -DecryptionCertificateThumbprint $SigningCertificate.Thumbprint ` -FederationServiceName $DnsName ` -ServiceAccountCredential $AdfsCredential ` -OverwriteConfiguration ` -AdminConfiguration @{"DKMContainerDn"=$DkmContainer.DistinguishedName}
La commande peut afficher les messages d'avertissement suivants:
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.
Vous pouvez ignorer ces avertissements, car vous avez déjà défini le SPN et que vous n'utilisez pas l'authentification basée sur les certificats.
Si vous prévoyez d'utiliser l'authentification Windows intégrée (IWA) pour vous authentifier auprès d'AD FS, exécutez la commande suivante pour désactiver la liaison de jetons:
Set-ADFSProperties -ExtendedProtectionTokenCheck None Restart-Service -Name adfssrv
La désactivation de la liaison de jeton est nécessaire, car vous déployez AD FS derrière un équilibreur de charge, qui met fin aux connexions TLS.
Si vous rencontrez des problèmes d'autorisation avec ces étapes, contactez l' assistance Google Cloud.
Configurer TLS
Lorsque vous établissez des connexions aux backends, l'équilibreur de charge HTTPS n'utilise pas l'extension SNI (Server Name indication). Pour permettre à AD FS d'accepter une connexion sans SNI, vous devez configurer une solution de remplacement de certificat :
Dans PowerShell, affichez les liaisons de certificats du serveur SSL pour AD FS :
netsh http show sslcert hostnameport=PUBLIC_FQDN:443
Remplacez
PUBLIC_FQDN
par le nom de domaine public complet d'AD FS.Configurez un certificat de remplacement pour la liaison :
netsh http add sslcert ipport=0.0.0.0:443 certhash=CERTIFICATE_HASH "appid=APP_ID" "certstorename=MY"
Remplacez les éléments suivants :
CERTIFICATE_HASH
: hachage du certificat affiché dans la commande précédente.APP_ID
: ID de l'application affiché dans la commande précédente, y compris les accolades.
Redémarrez l'ordinateur pour terminer l'installation :
Restart-Computer
Attendez environ une minute la fin du redémarrage.
Tester AD FS
Le service AD FS est déployé, mais vous devez encore vérifier que le service est accessible à l'aide de l'équilibreur de charge HTTPS:
- Revenez à la session Cloud Shell.
Vérifiez que le certificat SSL est à l'état
ACTIVE
:gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(managed.status)"
Si l'état du certificat est
PROVISIONING
, la propagation de l'enregistrement DNS que vous avez créé pour AD FS peut prendre un certain temps. Pour en savoir plus, consultez la section Résoudre les problèmes liés aux certificats gérés par Google.Sur votre ordinateur local, ouvrez un navigateur et accédez à l'URL suivante:
https://PUBLIC_FQDN/adfs/ls?wa=wsignout1.0
Remplacez
PUBLIC_FQDN
par le nom de domaine public complet d'AD FS.Vérifiez que le message
You have successfully signed out
s'affiche, indiquant que AD FS a bien été déployé.
Si vous prévoyez d'utiliser l'authentification Windows intégrée (IWA), vérifiez que vous pouvez obtenir un ticket Kerberos pour AD FS:
- Connectez-vous à l'instance de VM ou à une autre VM associée au domaine à l'aide du Bureau à distance, puis connectez-vous à l'aide d'identifiants de domaine.
- Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell.
Utilisez la commande
klist
pour demander un ticket de service pour AD FS:klist get http/PUBLIC_FQDN
Vérifiez que la sortie inclut un ticket pour AD FS:
#1> Client: USER @ DOMAIN Server: http/PUBLIC_FQDN @ DOMAIN KerbTicket Encryption Type: ...
AD FS est prêt à être utilisé. Pour en savoir plus sur l'utilisation et la configuration du service, consultez la page Opérations AD FS.