Déployer Active Directory Federation Services

Ce guide explique comment déployer des services de fédération Microsoft Active Directory (AD FS) pour Windows Server 2019 dans un domaine Microsoft AD géré.

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 interrompre les 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 au 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 :

Assurez-vous de connaître les conditions requises pour déployer 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:

  1. Dans Cloud Console, ouvrez Cloud Shell.

    Activer Cloud Shell

  2. Initialisez les variables suivantes :

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Où :

    • VPC_NAME est le nom de votre VPC.
    • SUBNET_NAME correspond au nom du sous-réseau dans lequel déployer AD FS.
  3. 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.

  4. Définissez la région et la zone par défaut:

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

    Où :

    • REGION est l'ID de la région dans laquelle vous souhaitez effectuer le déploiement.
    • ZONE correspond à l'ID de la zone dans laquelle vous souhaitez effectuer le déploiement.
  5. Créez un compte de service :

    gcloud iam service-accounts create ad-federation-services
    
  6. 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"
    
    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 adfs-1
      

      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 Démarrer (ou appuyez sur Win+X), puis 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 allez maintenant créer un équilibreur de charge permettant 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 avec l'équilibreur de charge, vous devez d'abord créer un groupe d'instances non géré, puis l'attribuer à 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 adfs &&
    gcloud compute instance-groups set-named-ports adfs --named-ports=http:443
    
  3. Ajoutez l'instance de VM existante au groupe d'instances:

    gcloud compute instance-groups unmanaged add-instances adfs --instances adfs-1
    
  4. Créez une vérification d'état qui sonde le port HTTPS d'AD FS:

    gcloud compute health-checks create tcp adfs-health-check --port 443
    
  5. Créez un service de backend d'équilibreur de charge utilisant la vérification de l'état HTTPS et le groupe d'instances 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)
    
  6. Réservez une adresse IP externe statique pour l'équilibreur de charge:

    gcloud compute addresses create adfs-external --global
    
  7. Créez un certificat SSL géré pour l'équilibreur de charge:

    gcloud compute ssl-certificates create adfs-external \
      --domains DNS_DOMAIN \
      --global
    

    DNS_DOMAIN est le nom DNS externe que vous souhaitez utiliser pour AD FS. Ce nom de domaine peut être différent des noms de domaine utilisés par Active Directory.

  8. Créez une interface d'équilibreur 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
    
  9. Créez une règle de pare-feu pour autoriser le trafic provenant 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 section Configurer une règle de pare-feu.

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

    gcloud compute addresses describe adfs-external \
       --global \
       --format=value\(address\)
    
  11. Dans votre zone DNS publique, créez un enregistrement DNS A 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 allez maintenant déployer le rôle du serveur AD FS sur l'instance de VM adfs-1. Étant donné que vous ne disposez pas de 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 utiliser PowerShell.

Créer un utilisateur de service

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

  1. Connectez-vous à l'instance de VM adfs-1 à l'aide du Bureau à distance, puis à l'aide de vos identifiants d'administrateur délégué.
  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 pour le compte de service AD FS:

    $AdfsCredential = Get-Credential -UserName adfssvc -Message 'Enter password'
    
  4. 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
    
  5. Ajoutez l'utilisateur au groupe Administrateurs local:

    Add-LocalGroupMember `
     -Group "Administrators" `
     -Member "$env:userdomain\adfssvc"
    
  6. Attribuez un nom de service principal:

    setspn -a http/$env:userdomain adfssvc
    
  7. Créez 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
    
  8. Accordez à l'utilisateur AD FS le 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:

  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.

  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 2048 bits et stockez-le dans le magasin de certificats de l'ordinateur:

    $DnsName="DNS_DOMAIN"
    $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
    

    DNS_DOMAIN est le nom DNS externe que vous souhaitez utiliser pour AD FS. Ce nom de domaine peut être différent des noms de domaine utilisés par Active Directory.

  4. Créez un autre certificat RSA 2048 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\adfssvc" -Message 'Enter 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}
    

Configurer TLS

Lors de la connexion à des 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 un certificat de remplacement:

  1. Dans PowerShell, affichez les liaisons de certificats du serveur SSL pour AD FS:

    netsh http show sslcert hostnameport=DNS_DOMAIN:443
    

    DNS_DOMAIN est le nom DNS externe 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"
    

    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.
  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 maintenant déployé, mais vous devez toujours vérifier que le service est accessible via l'équilibreur de charge HTTPS:

  1. Revenez à la session Cloud Shell.
  2. 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, l'enregistrement DNS que vous avez créé pour AD FS peut nécessiter un temps supplémentaire. Pour en savoir plus, consultez 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 à https://DNS_DOMAIN/adfs/ls?wa=wsignout1.0, où DNS_DOMAIN correspond au nom DNS externe que vous avez configuré pour AD FS.

    Vérifiez que le message Vous avez bien été déconnecté s'affiche, indiquant qu'AD FS a bien été déployé.

AD FS est maintenant prêt à être utilisé. Pour plus d'informations sur l'utilisation et la configuration du service, consultez la page Opérations AD FS.