20. OI Active Directory Federation Services

Geschätzte Dauer: 18 Stunden

Eigentümer der bedienbaren Komponente: OIC

OIDC-Verbindung konfigurieren

OIDC-Verbindungen werden von der Desired State Configuration (DSC) verwaltet. Sie können zwar manuell erstellt werden, DSC ist jedoch die bevorzugte Methode.

  1. Melden Sie sich als Nutzer Marvin bei der VM CONFIG1 an.

  2. Öffnen Sie c:\config\config.ps1 mit VSCode oder einem anderen Editor Ihrer Wahl.

  3. Suchen Sie nach -ADFS1, um den Konfigurationsknoten des ADFS-Servers zu finden.

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

    Ein Array namens AdfsAppGrp enthält Hashtables mit OIDC-Verbindungen. Kopieren Sie die gesamte Hashtabelle von Example-OIDC und fügen Sie sie nach der vorhandenen Example-OIDC-Hashtabelle ein. Beispiel:

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Aktualisieren Sie die Parameter Name und RedirectURI mit den Werten, die mit Ihrer neuen OIDC-Verbindung verknüpft sind. Speichern Sie die Datei „config.ps1“.

  5. Öffnen Sie ein PowerShell-Fenster als Administrator und aktualisieren Sie die Konfiguration des ADFS1-Servers. Ersetzen Sie [Site] durch Ihren Websitecode.

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. Prüfen Sie die OIDC-Konfiguration, indem Sie sich auf der ADFS1-VM anmelden, die AD FS Management MMC öffnen und dann auf Application Groups (Anwendungsgruppen) klicken.

  7. Öffnen Sie auf der ADFS1-VM C:\config und suchen Sie nach einer Datei mit dem Namen <Your Connector Name> Srv App.txt. Speichern Sie die in dieser Datei gefundenen Werte Identifier und ClientSecret für die spätere Verwendung mit Ihrer Anwendung. Löschen Sie diese Datei, sobald die Kennzeichnungs- und Secret-Werte aufgezeichnet wurden.

OIDC-Konfiguration für die GDC-Infrastrukturkonsole

  1. OIDC-Connectorinformationen für die GDC-Bereitstellung erfassen.

    1. Weiterleitungs-URIs: https://ais-core.<GDC_name>.<DNS_domain>/finish-login, z. B. https://ais-core.example.domain.local/finish-login.
    2. GDC Service Console-URL: https://infra-console.<GDC_name>.<DNS_domain>, z. B. https://infra-console.example.domain.local.
  2. Führen Sie die vorherigen Schritte aus, um die OIDC-Verbindung zu erstellen.

  3. Nachdem Anthos Identity Service (AIS) in der GDC-Zelle konfiguriert wurde, testen Sie die OIDC-Konfiguration mit der URL für die GDC-Konsole.

    1. Melden Sie sich an einer OIC-Workstation an.
    2. Öffnen Sie Chrome und rufen Sie die Infra-Console-URL auf, z. B. https://infra-console.example.domain.local.
    3. Geben Sie Ihren Nutzernamen und Ihr Passwort ein, wenn Sie dazu aufgefordert werden. Wenn die Anmeldedaten gültig sind, werden Sie zur GUI der Infrastrukturkonsole weitergeleitet.

    Wiederholen Sie diesen Schritt nach Bedarf für jede GDC-Zelle, die von diesem ADFS-Server verwaltet wird.

GDC-DNS-Konfiguration für ADFS

  1. Melden Sie sich im System Controller oder Bootstrapper an.

  2. Exportieren Sie kubeconfig für den Root-Administratorcluster:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. Konfigurieren Sie OCIT_DOMAIN mithilfe einer Forward-Zone. Ersetzen Sie OCIT_DOMAIN durch Ihren OCIT-Domainnamen und die Endpunkte durch die OC-DNS-IP-Adressen:

    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
    

    Die Ausgabe sieht so aus:

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. Wenn die Änderungen nicht übernommen werden, starten Sie das Deployment neu:

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

    Diese DNS-Änderung wird auf alle Cluster in GDC übertragen.

  5. Prüfen Sie mit der Stammadministrator-kubeconfig-Datei, ob die OCIT-Domainauflösung wie vorgesehen funktioniert:

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. Exportieren Sie kubeconfig für den Administratorcluster der Organisation:

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. Wenden Sie die kubeconfig-Datei des Organisationsadministrators an und prüfen Sie, ob die OCIT-Domainauflösung wie vorgesehen funktioniert:

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

GDC AIS-Konfiguration für die Console

  1. Melden Sie sich bei ADFS1 an und öffnen Sie die AD FS-Verwaltungs-MMC.

  2. Klicken Sie auf „Dienst“ > „Zertifikate“.

  3. Doppelklicken Sie auf das Zertifikat für die Dienstkommunikation.

  4. Klicken Sie auf den Tab „Zertifizierungspfad“.

  5. Wählen Sie das oberste Zertifikat mit dem Label „Root“ aus.

  6. Klicken Sie auf „Zertifikat ansehen“.

  7. Wählen Sie den Tab „Details“ aus und klicken Sie dann auf „In Datei kopieren…“.

    1. Im Base64-Format (.CER) speichern
  8. Kopieren Sie die ADFS-Stammzertifizierungsstelle als adfs.cer auf den Systemcontroller oder Bootstrapper.

  9. Melden Sie sich beim Systemcontroller oder Bootstrapper an und exportieren Sie die ADFS-Stammzertifizierungsstelle in eine Shell-Variable mit Base64-Codierung. Mit dem folgenden Befehl wird das Zertifikat einschließlich der Header als einzelne Zeile (ohne Zeilenumbruchzeichen) in Base64 codiert:

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. Exportieren Sie den Root-Administratorcluster kubeconfig:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. Wechseln Sie zum Repository iac und fügen Sie die Verzeichnisstruktur für die globale Organisation hinzu:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Fügen Sie die Datei ioauthmethod.yaml für die Organisation hinzu:

    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
    

    Ersetzen Sie die folgenden Variablen:

    VariableDefinition
    ADFS_CERT_BASE64

    Der Wert von $BASE64_CERT, den Sie in einem vorherigen Schritt erstellt haben.

    Dieses base64- und PEM-codierte Zertifikat, das ADFS zum Selbstsignieren verwendet, ist für GKE Identity Service erforderlich, um eine sichere Verbindung mit einer internen ADFS-Instanz herzustellen.

    ADFS_CLIENT_ID Die OpenID Connect-ID für den Client der Organisation in ADFS.
    ADFS_CLIENT_SECRET Der OpenID Connect-Schlüssel für den Client der Organisation, der in ADFS registriert ist.
    OCIT_DOMAIN Der OCIT-Domainname. Weitere Informationen finden Sie unter GDC-DNS-Konfiguration für ADFS.
  13. Fügen Sie die Datei kustomization.yaml dem globalen Ordner iac hinzu:

    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. Stellen Sie die YAML-Datei der Organisation und die Kustomize-Dateien bereit und committen Sie sie:

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. Übertragen Sie die Aktualisierung per Push an GitLab:

    git -c http.sslVerify=false push
    
  16. Warten Sie auf die Codeüberprüfung und das Zusammenführen.

  17. Prüfen Sie, ob der neu hinzugefügte IdP in ClientConfig vorhanden ist:

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

ADFS-Multi-Faktor-Authentifizierung einrichten

Voraussetzungen

  1. YubiKeys wurden Nutzern gemäß Abschnitt 5.16 Härten und Anwenden von Richtlinien bereitgestellt.
  2. Alle vorherigen Schritte für AD FS haben wie erwartet funktioniert. Nutzer können also mit der Nutzername- und Passwortauthentifizierung über AD FS auf GDC-Endpunkte zugreifen.

Anleitung

Führen Sie die folgenden Schritte aus, um die ADFS-Multi-Faktor-Authentifizierung einzurichten.

ADFS-Zertifikatsauthentifizierung global aktivieren

Führen Sie die folgenden Schritte auf dem ADFS1-Host aus.

  1. Stellen Sie mit Ihrem -sa-Konto, z. B. username-sa, eine RDP-Verbindung zum ADFS1-Host her.
  2. Führen Sie ein PowerShell-Fenster als Administrator aus.
  3. Prüfen Sie, ob CertificateAuthentication in Ihrer Umgebung bereits aktiviert ist:

    # 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. Legen Sie PrimaryIntranetAuthenticationProvider so fest, dass CertificateAuthentication enthalten ist. Entfernen Sie außerdem die nicht verwendete Authentifizierungsmethode MicrosoftPassportAuthentication in OC IT.

    # 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}
    
ADFS-Zertifikatsauthentifizierung testen

Führen Sie die folgenden Schritte auf einer OC IT-Workstation aus.

  1. Melden Sie sich mit Ihrem Konto ohne Administratorrechte an einer OC IT-Workstation an.
  2. Öffnen Sie den Chrome-Browser und rufen Sie infra-console.CELL_NAME.DOMAIN wie gewohnt auf, z. B. https://infra-console.example.domain.local.
  3. Klicken Sie unter der Schaltfläche Anmelden auf die Option Mit einem Zertifikat anmelden.

    OC-IT
Bild

  4. Wählen Sie im Dialogfenster das Zertifikat des nicht privilegierten Nutzers aus und klicken Sie auf OK.

    OC-IT
Bild

  5. Geben Sie bei Aufforderung Ihre YubiKey-PIN ein und klicken Sie auf OK.

    OC-IT
Bild

  6. Wenn die ADFS-Authentifizierung ordnungsgemäß funktioniert, sollte die GUI der Infrastrukturkonsole so angezeigt werden, als hätten Sie Ihren Nutzernamen und Ihr Passwort eingegeben.

  7. Melden Sie sich über die Schaltfläche Abmelden von der Infrastrukturkonsole ab und schließen Sie dann alle Chrome-Fenster. Mit dieser Aktion werden zwischengespeicherte Anmeldedaten entfernt und Sie können jeden anderen GDC-Endpunkt testen.

    OC-IT
Bild

  8. Wiederholen Sie die Schritte in diesem Abschnitt für jeden GDC-Endpunkt. Denken Sie daran, sich jedes Mal abzumelden und Chrome zu schließen, damit Sie die Aufforderungen zur AD FS-Authentifizierung sehen:

    • Console.gdchservices (gdchservices org)
    • GitLab
    • ServiceNow
    • Andere Organisationen

ADFS-MFA-Authentifizierung global erzwingen

Führen Sie die folgenden Schritte auf dem ADFS1-Host aus.

  1. Stellen Sie mit Ihrem -sa-Konto, z. B. alexb-sa, eine RDP-Verbindung zum ADFS1-Host her.
  2. Führen Sie ein PowerShell-Fenster als Administrator aus.
  3. Legen Sie für PrimaryIntranetAuthenticationProvider NUR CertificateAuthentication fest.

    # 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}
    

Jeden GDC-Endpunkt noch einmal testen

Führen Sie die folgenden Schritte auf einer OC IT-Workstation aus.

  1. Melden Sie sich mit Ihrem Konto ohne Administratorrechte an einer OC IT-Workstation an.
  2. Öffnen Sie den Chrome-Browser und rufen Sie infra-console.CELL_NAME.DOMAIN wie gewohnt auf, z. B. https://infra-console.example.domain.local.
  3. Im AD FS-Portal wird sofort nach einem Zertifikat oder YubiKey gefragt. Sie sollten keine Felder für einen Nutzernamen oder ein Passwort mehr sehen.

    OC-IT
Bild

  4. Geben Sie nach der Auswahl Ihres Zertifikats Ihre YubiKey-PIN ein, die mit der PIN aus früheren Tests identisch ist.

    OC-IT
Bild

Die Einrichtung ist abgeschlossen.