Déployer AD FS sur un domaine Microsoft AD géré

Ce guide explique comment déployer Microsoft Active Directory Federation Services (AD FS) pour Windows Server 2019 dans un domaine de service géré pour Microsoft Active Directory.

Le schéma suivant illustre le déploiement :

Architecture

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

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 :

  1. Dans la console Google Cloud, ouvrez Cloud Shell.

    Activer Cloud Shell

  2. 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.

  3. 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.
  4. Créez un compte de service :

    gcloud iam service-accounts create SA_NAME
    

    Remplacez SA_NAME par le nom du compte de service.

  5. 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 l'instance de VM et l'associer à votre domaine Active Directory, procédez comme suit:

    1. 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.

    2. Créez un nom d'utilisateur et un mot de passe pour l'instance de VM.

    3. 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.

    4. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).

    5. Confirmez l'invite d'élévation en cliquant sur Yes (Oui).

    6. 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 :

  1. Revenez à la session Cloud Shell que vous avez précédemment ouverte.
  2. 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.

  3. Ajoutez l'instance de VM existante au groupe d'instances :

    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME --instances VM_NAME
    
  4. 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.

  5. 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.

  6. 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.

  7. 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 public que vous souhaitez utiliser pour AD FS. Exemple :login.example.com
  8. 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 pour l'équilibreur de charge.
    • PROXY_NAME: nom du proxy cible pour l'équilibreur de charge.
    • FORWARDING_RULE_NAME: nom de la règle de transfert pour l'équilibreur de charge.
  9. 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.

  10. Recherchez l'adresse IP de l'équilibreur de charge :

    gcloud compute addresses describe ADDRESS_NAME \
       --global \
       --format=value\(address\)
    
  11. 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. Étant donné que vous ne disposez pas des droits Domain Admins sur un domaine Microsoft AD géré, vous ne pouvez pas utiliser Server Manager pour effectuer l'installation. Vous devez utiliser PowerShell à la place.

Créer un utilisateur du service

Vous devez créer un compte utilisateur dans Active Directory pour le service AD FS:

  1. Connectez-vous à l'instance de VM à l'aide du Bureau à distance, puis connectez-vous à l'aide de vos identifiants d'administrateur délégués.
  2. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
  3. 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.
  4. 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
    
  5. Ajoutez l'utilisateur au groupe Administrateurs local :

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\USER"
    
  6. Attribuez un nom au compte principal du service :

    setspn -a http/PUBLIC_FQDN USER
    

    Remplacez PUBLIC_FQDN par le nom de domaine complet public d'AD FS.

  7. 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
    
  8. 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:

  1. 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.

  2. 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.

  3. 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.

  4. 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'
    
  5. 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
    
  6. 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'
    
  7. 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 les certificats.

  8. Si vous envisagez 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 interrompt les connexions TLS.

Si vous rencontrez des problèmes liés aux autorisations lors de 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 :

  1. 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 complet public d'AD FS.

  2. 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 de certificat affiché dans la commande précédente.
    • APP_ID: ID application affiché dans la commande précédente, y compris les accolades.
  3. 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 qu'il est accessible à l'aide de l'équilibreur de charge HTTPS:

  1. Revenez à la session Cloud Shell.
  2. Vérifiez que l'état du certificat SSL est ACTIVE:

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

    Si le certificat est à l'état PROVISIONING, la propagation de l'enregistrement DNS que vous avez créé pour AD FS peut prendre plus de temps. Pour en savoir plus, consultez la section Résoudre les problèmes liés aux certificats gérés par Google.

  3. 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 et complet d'AD FS.

    Vérifiez que le message You have successfully signed out s'affiche pour indiquer que AD FS a bien été déployé.

Si vous envisagez d'utiliser l'authentification Windows intégrée (IWA), vérifiez que vous pouvez obtenir un ticket Kerberos pour AD FS:

  1. Connectez-vous à l'instance de VM ou à une VM différente associée à un domaine à l'aide du Bureau à distance, puis à l'aide des identifiants du domaine.
  2. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell.
  3. Exécutez 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 plus d'informations sur l'utilisation et la configuration de ce service, consultez la page Opérations AD FS.