Ce guide explique comment déployer Microsoft Active Directory Federation Services (AD FS) pour Windows Server 2019 dans un domaine Microsoft AD géré.
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
Pour suivre ce guide, vous aurez besoin des éléments suivants :
- Un domaine Microsoft AD géré existant.
- Des Identifiants d'administrateur délégué pour le domaine Microsoft AD géré. Par défaut, le compte administrateur délégué est nommé
setupadmin
. - 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 allez maintenant préparer votre projet Google Cloud et votre VPC pour le déploiement d'AD FS.
Créez une instance de VM
Créez un compte de service et une instance de VM pour exécuter AD FS :
Dans Google Cloud Console, ouvrez Cloud Shell.
Initialisez les variables suivantes :
VPC_NAME=VPC_NAME SUBNET_NAME=SUBNET_NAME
Où :
- VPC_NAME est le nom de votre VPC.
- SUBNET_NAME est le nom du sous-réseau dans lequel déployer AD FS.
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/zoneZONE
Où :
REGION
est l'ID de la région dans laquelle vous souhaitez effectuer le déploiement.ZONE
est l'ID de la zone dans laquelle vous souhaitez effectuer le déploiement.
Créez un compte de service :
gcloud iam service-accounts create ad-federation-services
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 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"
Surveillez le processus d'initialisation de la VM en consultant la sortie de son port série :
gcloud compute instances tail-serial-port-output adfs-1
Attendez environ trois minutes avant que la sortie
Instance setup finished
s'affiche, puis appuyez surCtrl+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
), puis 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 allez maintenant 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 adfs && gcloud compute instance-groups set-named-ports adfs --named-ports=http:443
Ajoutez l'instance de VM existante au groupe d'instances :
gcloud compute instance-groups unmanaged add-instances adfs --instances adfs-1
Créez une vérification d'état qui teste le port HTTPS d'AD FS :
gcloud compute health-checks create tcp adfs-health-check --port 443
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 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)
Réservez une adresse IP externe statique pour l'équilibreur de charge :
gcloud compute addresses create adfs-external --global
Créez un certificat SSL géré pour l'équilibreur de charge :
gcloud compute ssl-certificates create adfs-external \ --domains PUBLIC_FQDN \ --global
où
PUBLIC_FQDN
est le nom de domaine complet (FQDN) public que vous souhaitez utiliser pour AD FS, par exemplelogin.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 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
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 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
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 adfs-external \ --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é pour le certificat SSL.
Déployer AD FS
Vous allez maintenant déployer le rôle de serveur AD FS sur l'instance de VM adfs-1
. Comme vous ne disposez pas des droits d'administrateur de domaine 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 allez maintenant créer un compte utilisateur dans Active Directory pour le service AD FS :
- Connectez-vous à l'instance de VM
adfs-1
à l'aide du Bureau à distance, en utilisant 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 adfssvc -Message 'Enter password'
Créez un utilisateur Active Directory
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
Ajoutez l'utilisateur au groupe Administrateurs local :
Add-LocalGroupMember ` -Group "Administrators" ` -Member "$env:userdomain\adfssvc"
Attribuez un nom au compte principal du service :
setspn -a http/PUBLIC_FQDN adfssvc
où
PUBLIC_FQDN
est le nom de domaine complet et public d'AD FS.Créer un conteneur vide dans Active Directory Vous utiliserez 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\adfssvc:GA /I:T
Installer AD FS
Vous allez maintenant installer AD FS sur adfs-1
:
Démarrez une session PowerShell en tant qu'utilisateur ADFS :
runas /u:$env:userdomain\adfssvc powershell
La nouvelle session PowerShell s'exécute désormais 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
où
PUBLIC_FQDN
est le nom de domaine complet et 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\adfssvc" -Message 'Enter 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 n'utilisez pas l'authentification basée sur un certificat.
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 jetons est nécessaire, car vous déployez AD FS derrière un équilibreur de charge qui met fin aux connexions TLS.
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
où
PUBLIC_FQDN
est le nom de domaine complet et public d'AD FSConfigurez 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"
Où :
CERTIFICATE_HASH
correspond au hachage de certificat affiché dans la commande précédente.APP_ID
est l'ID 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 maintenant déployé, mais vous devez encore vérifier que le service est accessible via 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 adfs-external \ --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 complet et public d'AD FS.Vérifiez que le message Vous êtes bien déconnecté 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
adfs-1
ou à une autre VM jointe à un domaine à l'aide du Bureau à distance, puis connectez-vous à l'aide des identifiants du 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 le résultat inclut une demande d'assistance pour AD FS:
#1> Client: USER @ DOMAIN Server: http/PUBLIC_FQDN @ DOMAIN KerbTicket Encryption Type: ...
AD FS est maintenant prêt à être utilisé. Pour en savoir plus sur l'utilisation et la configuration du service, consultez la page Opérations AD FS.