20. OI Active Directory Federation Services

Durée estimée : 18 heures

Propriétaire du composant exploitable : OIC

Configurer une connexion OIDC

Les connexions OIDC sont gérées par la configuration de l'état souhaité (DSC, Desired State Configuration). Bien qu'elles puissent être créées manuellement, la méthode DSC est préférable.

  1. Connectez-vous à la VM CONFIG1 en tant qu'utilisateur Marvin.

  2. Ouvrez c:\config\config.ps1 à l'aide de VSCode ou de l'éditeur de votre choix.

  3. Recherchez -ADFS1 pour trouver le nœud de configuration du serveur ADFS.

    # Example ADFS server noe in config.ps1
    NodeName           = "$Site1Code-ADFS1"
    HyperVHost         = 'AA-OC-BM01'
    Role               = 'adfs'
    IPv4Addr           = '172.21.0.23'
    

    Un tableau nommé AdfsAppGrp contient des tables de hachage des connexions OIDC. Copiez l'intégralité de la table de hachage Example-OIDC et collez-la après la table de hachage Example-OIDC existante. Exemple :

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Mettez à jour les paramètres Name et RedirectURI avec les valeurs associées à votre nouvelle connexion OIDC. Enregistrez le fichier config.ps1.

  5. Ouvrez une fenêtre PowerShell en tant qu'administrateur et mettez à jour la configuration du serveur ADFS1. Remplacez [Site] par le code de votre site.

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. Validez la configuration OIDC en vous connectant à la VM ADFS1, en ouvrant la MMC Gestion AD FS, puis en cliquant sur Groupes d'applications.

  7. Une fois connecté à la VM ADFS1, ouvrez C:\config et recherchez un fichier nommé <Your Connector Name> Srv App.txt. Enregistrez les valeurs Identifier et ClientSecret trouvées dans ce fichier pour les utiliser ultérieurement avec votre application. Supprimez ce fichier une fois que vous avez enregistré l'identifiant et les valeurs secrètes.

Configuration OIDC pour la console d'infrastructure GDC

  1. Collectez les informations du connecteur OIDC pour le déploiement GDC.

    1. URI de redirection : https://ais-core.<GDC_name>.<DNS_domain>/finish-login, par exemple https://ais-core.example.domain.local/finish-login.
    2. URL de la console de service GDC : https://infra-console.<GDC_name>.<DNS_domain>, par exemple https://infra-console.example.domain.local.
  2. Suivez les étapes précédentes pour créer la connexion OIDC.

  3. Une fois Anthos Identity Service (AIS) configuré sur la cellule GDC, testez la configuration OIDC avec l'URL de la console GDC.

    1. Connectez-vous à un poste de travail OIC.
    2. Ouvrez Chrome et accédez à l'URL de la console d'infrastructure, par exemple https://infra-console.example.domain.local.
    3. Lorsque vous y êtes invité, saisissez votre nom d'utilisateur et votre mot de passe. Si les identifiants sont valides, vous serez redirigé vers l'interface utilisateur graphique de la console d'infrastructure.

    Répétez cette étape si nécessaire pour chaque cellule GDC gérée par ce serveur ADFS.

Configuration DNS GDC pour ADFS

  1. Connectez-vous au contrôleur système ou au programme d'amorçage.

  2. Exportez kubeconfig pour le cluster d'administrateur racine :

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. Configurez OCIT_DOMAIN à l'aide d'une zone de transfert. Remplacez OCIT_DOMAIN par votre nom de domaine OCIT et les points de terminaison par les adresses IP DNS OC :

    kubectl apply -f - <<EOF
    apiVersion: network.private.gdc.goog/v1alpha1
    kind: DNSZone
    metadata:
      namespace: dns-system
      name: ocit-domain
    spec:
      domainName: OCIT_DOMAIN
      forwardingConfig:
        # Set to OC DNS IPs (the AD domain controllers)
        endpoints:
          - 192.0.2.0
          - 192.0.2.1
        replicateToTenantOrg: true
    EOF
    

    Le résultat ressemble à cet exemple :

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. Si les modifications ne sont pas appliquées, redémarrez le déploiement :

    kubectl rollout restart deployment -n dns-system gpc-coredns-forwarder
    

    Cette modification du DNS se propage à tous les clusters du GDC.

  5. Avec le fichier kubeconfig de l'administrateur racine, vérifiez que la résolution du domaine OCIT fonctionne comme prévu :

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. Exportez kubeconfig pour le cluster d'administrateur de l'organisation :

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. Appliquez le fichier kubeconfig de l'administrateur de l'organisation et vérifiez que la résolution du domaine OCIT fonctionne comme prévu :

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-infra-forwarder | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    

Configuration GDC AIS pour la console

  1. Connectez-vous à ADFS1, puis ouvrez la MMC de gestion AD FS.

  2. Cliquez sur Service > Certificats.

  3. Double-cliquez sur le certificat pour les communications de service.

  4. Cliquez sur l'onglet "Chemin de certification".

  5. Sélectionnez le certificat tout en haut, intitulé "Racine".

  6. Cliquez sur "Afficher le certificat".

  7. Sélectionnez l'onglet "Détails", puis cliquez sur "Copier dans un fichier".

    1. Enregistrer au format Base-64 (.CER)
  8. Copiez la CA racine ADFS sur le contrôleur système ou le programme d'amorçage sous le nom adfs.cer.

  9. Connectez-vous au contrôleur système ou au programme d'amorçage, puis exportez l'autorité de certification racine ADFS vers une variable shell avec encodage base64. La commande suivante encode le certificat, y compris les en-têtes, en base64 sur une seule ligne (sans caractères de nouvelle ligne) :

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. Exportez le cluster d'administrateur racine kubeconfig :

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. Accédez au dépôt iac et ajoutez la structure de répertoire pour l'organisation mondiale :

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Ajoutez le fichier ioauthmethod.yaml pour l'organisation :

    cat > infrastructure/global/orgs/root/ioauthmethod.yaml << EOF
    apiVersion: iam.global.private.gdc.goog/v1alpha1
    kind: IOAuthMethod
    metadata:
      name: adfs-oidc
      namespace: gpc-system
    spec:
      oidc:
        certificateAuthorityData: ADFS_CERT_BASE64
        clientID: ADFS_CLIENT_ID
        clientSecret: ADFS_CLIENT_SECRET
        groupPrefix: gdch-infra-operator-
        groupsClaim: groups
        issuerURI: https://fs.OCIT_DOMAIN/adfs
        scopes: openid email offline_access
        userClaim: email
        userPrefix: gdch-infra-operator-
        cloudConsoleRedirectURI: http://cloud.console.not.enabled
        kubectlRedirectURI: http://localhost:9879/callback
    EOF
    

    Remplacez les variables suivantes :

    VariableDéfinition
    ADFS_CERT_BASE64

    La valeur de $BASE64_CERT que vous avez créée lors d'une étape précédente.

    Ce certificat encodé au format PEM et en base64 qu'AD FS utilise pour s'auto-signer est requis par GKE Identity Service pour établir une connexion sécurisée avec une instance AD FS interne.

    ADFS_CLIENT_ID ID OpenID Connect du client de l'organisation dans ADFS.
    ADFS_CLIENT_SECRET Code secret OpenID Connect pour le client de l'organisation enregistré dans AD FS.
    OCIT_DOMAIN Nom de domaine OCIT. Pour en savoir plus, consultez Configuration DNS GDC pour ADFS.
  13. Ajoutez le fichier kustomization.yaml au dossier iac global :

    cat > infrastructure/global/orgs/root/kustomization.yaml << EOF
    apiVersion: kustomize.config.k8s.io/v1beta1
    kind: Kustomization
    metadata:
      name: ioauthmethod-kustomization
    resources:
    - ioauthmethod.yaml
    EOF
    
  14. Organisez et validez le fichier YAML de l'organisation et les fichiers Kustomize :

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. Transférez la mise à jour vers GitLab :

    git -c http.sslVerify=false push
    
  16. Attendez que le code soit examiné et fusionné.

  17. Vérifiez que le FId nouvellement ajouté existe dans ClientConfig :

      kubectl get ClientConfig default -n kube-public -o yaml
    

Configurer l'authentification multifacteur ADFS

Conditions requises

  1. Les YubiKeys ont été provisionnées pour les utilisateurs conformément à la section 5.16 Renforcement et application des règles.
  2. Toutes les étapes précédentes pour AD FS ont été confirmées comme fonctionnant comme prévu, ce qui signifie que les utilisateurs peuvent accéder aux points de terminaison GDC à l'aide de l'authentification par nom d'utilisateur et mot de passe avec AD FS.

Instructions

Suivez les étapes ci-dessous pour configurer l'authentification multi-facteurs ADFS.

Activer l'authentification par certificat ADFS à l'échelle mondiale

Exécutez les étapes suivantes sur l'hôte ADFS1.

  1. Utilisez le protocole RDP pour vous connecter à l'hôte ADFS1 à l'aide de votre compte -sa, par exemple nom_utilisateur-sa.
  2. Exécutez une fenêtre PowerShell en tant que Administrator.
  3. Vérifiez si CertificateAuthentication est déjà activé dans votre environnement :

    # Checking current Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider
    Get-AdfsGlobalAuthenticationPolicy | Select-Object `
        -Property PrimaryIntranetAuthenticationProvider
    
    # Example output, note it is missing CertificateAuthentication
    PrimaryIntranetAuthenticationProvider  : {FormsAuthentication,
        WindowsAuthentication, MicrosoftPassportAuthentication}
    
  4. Définissez PrimaryIntranetAuthenticationProvider pour inclure CertificateAuthentication. De plus, supprimez une méthode d'authentification inutilisée dans OC IT, MicrosoftPassportAuthentication.

    # Setting the Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider to include CertificateAuthentication
    Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider `
        @('FormsAuthentication', 'WindowsAuthentication', 'CertificateAuthentication')
    
    # Validating the update to Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider
    Get-AdfsGlobalAuthenticationPolicy | Select-Object `
        -Property PrimaryIntranetAuthenticationProvider
    
    # Desired output
    PrimaryIntranetAuthenticationProvider  : {CertificateAuthentication,
        FormsAuthentication, WindowsAuthentication}
    
Tester l'authentification par certificat ADFS

Procédez comme suit sur un poste de travail OC IT.

  1. Connectez-vous à un poste de travail OC IT avec votre compte non privilégié.
  2. Ouvrez le navigateur Chrome et accédez à infra-console.CELL_NAME.DOMAIN comme vous le feriez normalement, par exemple https://infra-console.example.domain.local.
  3. Cliquez sur l'option Se connecter à l'aide d'un certificat qui s'affiche sous le bouton Se connecter.

    OC-IT
image

  4. Sélectionnez votre certificat utilisateur non privilégié dans la fenêtre de dialogue, puis cliquez sur OK.

    OC-IT
image

  5. Lorsque vous y êtes invité, saisissez le code de votre YubiKey, puis cliquez sur OK.

    OC-IT
image

  6. Si l'authentification ADFS fonctionne correctement, l'interface utilisateur graphique de la console d'infrastructure devrait s'afficher comme si vous aviez saisi votre nom d'utilisateur et votre mot de passe.

  7. Déconnectez-vous de la console d'infrastructure à l'aide du bouton Se déconnecter, puis fermez toutes les fenêtres Chrome. Cette action supprime les identifiants mis en cache et vous permet de tester chaque point de terminaison GDC.

    OC-IT
image

  8. Répétez les étapes de cette section pour chaque point de terminaison GDC, en veillant à vous déconnecter et à fermer Chrome à chaque fois pour vous assurer que les invites d'authentification AD FS s'affichent :

    • Console.gdchservices (organisation gdchservices)
    • GitLab
    • ServiceNow
    • Autres entreprises

Appliquer strictement l'authentification MFA ADFS à l'échelle mondiale

Exécutez les étapes suivantes sur l'hôte ADFS1.

  1. Connectez-vous en RDP à l'hôte ADFS1 avec votre compte -sa, par exemple alexb-sa.
  2. Exécutez une fenêtre PowerShell en tant qu'administrateur.
  3. Définissez PrimaryIntranetAuthenticationProvider pour inclure CertificateAuthentication UNIQUEMENT.

    # Setting the Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider to include CertificateAuthentication
    Set-AdfsGlobalAuthenticationPolicy -PrimaryIntranetAuthenticationProvider `
      @('CertificateAuthentication')
    
    # Validating the update to Global Authentication Policy for
    # PrimaryIntranetAuthenticationProvider
    Get-AdfsGlobalAuthenticationPolicy | Select-Object `
    -Property PrimaryIntranetAuthenticationProvider
    
    # Desired output
    PrimaryIntranetAuthenticationProvider  : {CertificateAuthentication}
    

Retester chaque point de terminaison GDC

Exécutez les étapes suivantes à partir d'un poste de travail OC IT.

  1. Connectez-vous à un poste de travail OC IT avec votre compte non privilégié.
  2. Ouvrez le navigateur Chrome et accédez à infra-console.CELL_NAME.DOMAIN comme vous le feriez normalement, par exemple https://infra-console.example.domain.local.
  3. Le portail AD FS demande immédiatement un certificat ou une YubiKey. Vous ne devriez plus voir de champs pour un nom d'utilisateur ou un mot de passe.

    OC-IT
image

  4. Après avoir sélectionné votre certificat, saisissez le code PIN de votre YubiKey, identique à celui utilisé lors des tests précédents.

    OC-IT
image

La configuration est terminée.