20. OI Active Directory Federation Services

Tempo stimato per il completamento: 18 ore

Proprietario del componente operabile: OIC

Come configurare una connessione OIDC

Le connessioni OIDC sono gestite da Desired State Configuration (DSC). Anche se possono essere creati manualmente, il DSC è il metodo preferito.

  1. Accedi alla VM CONFIG1 come utente Marvin.

  2. Apri c:\config\config.ps1 utilizzando VSCode o l'editor che preferisci.

  3. Cerca -ADFS1 per trovare il nodo di configurazione del server ADFS.

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

    Un array denominato AdfsAppGrp contiene tabelle hash di connessioni OIDC. Copia l'intera tabella hash di Example-OIDC e incollala dopo la tabella hash Example-OIDC esistente. Esempio:

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Aggiorna i parametri Name e RedirectURI ai valori associati alla nuova connessione OIDC. Salva il file config.ps1.

  5. Apri una finestra di PowerShell come amministratore e aggiorna la configurazione del server ADFS1. Sostituisci [Site] con il codice del tuo sito.

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. Convalida la configurazione OIDC accedendo alla VM ADFS1, aprendo la MMC AD FS Management e facendo clic su Application Groups (Gruppi di applicazioni).

  7. Dopo aver eseguito l'accesso alla VM ADFS1, apri C:\config e cerca un file denominato <Your Connector Name> Srv App.txt. Salva i valori Identifier e ClientSecret trovati in questo file per utilizzarli in un secondo momento con la tua applicazione. Elimina questo file una volta registrati i valori dell'identificatore e del secret.

Configurazione OIDC per la console di infrastruttura GDC

  1. Raccogli le informazioni sul connettore OIDC per il deployment di GDC.

    1. URI di reindirizzamento: https://ais-core.<GDC_name>.<DNS_domain>/finish-login, ad esempio https://ais-core.example.domain.local/finish-login.
    2. URL della console di servizio GDC: https://infra-console.<GDC_name>.<DNS_domain>, ad esempio https://infra-console.example.domain.local.
  2. Segui i passaggi precedenti per creare la connessione OIDC.

  3. Una volta configurato Anthos Identity Service (AIS) nella cella GDC, testa la configurazione OIDC con l'URL della console GDC.

    1. Accedi a una workstation OIC.
    2. Apri Chrome e vai all'URL della console dell'infrastruttura, ad esempio https://infra-console.example.domain.local.
    3. Quando richiesto, inserisci il tuo nome utente e la password. Se le credenziali sono valide, il sistema ti reindirizzerà alla GUI della console dell'infrastruttura.

    Ripeti questo passaggio, se necessario, per ogni cella GDC gestita da questo server ADFS.

Configurazione DNS GDC per ADFS

  1. Accedi al controller di sistema o al bootstrapper.

  2. Esporta kubeconfig per il cluster di amministrazione root:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. Configura OCIT_DOMAIN utilizzando una zona di inoltro. Sostituisci OCIT_DOMAIN con il nome di dominio OCIT e gli endpoint con gli indirizzi 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
    

    L'output è simile a questo esempio:

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. Se le modifiche non vengono applicate, riavvia il deployment:

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

    Questa modifica del DNS viene propagata a tutti i cluster in GDC.

  5. Con il file kubeconfig dell'amministratore root, verifica che la risoluzione del dominio OCIT funzioni come previsto:

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. Esporta kubeconfig per il cluster di amministrazione dell'organizzazione:

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. Applica il file kubeconfig dell'amministratore dell'organizzazione e verifica che la risoluzione del dominio OCIT funzioni come previsto:

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

Configurazione di GDC AIS per la console

  1. Accedi ad ADFS1 e apri MMC di gestione AD FS

  2. Fai clic su Servizio > Certificati.

  3. Fai doppio clic sul certificato per le comunicazioni tra servizi.

  4. Fai clic sulla scheda Percorso di certificazione.

  5. Seleziona il certificato in alto etichettato come Root

  6. Fai clic su Visualizza certificato.

  7. Seleziona la scheda Dettagli, quindi fai clic su Copia nel file…

    1. Salva in formato Base-64 (.CER)
  8. Copia la CA principale di ADFS nel controller di sistema o nel bootstrapper come adfs.cer.

  9. Accedi al controller di sistema o al bootstrapper, quindi esporta la CA radice ADFS in una variabile shell con codifica Base64. Il seguente comando codifica il certificato, incluse le intestazioni, in base64 come singola riga (senza caratteri di nuova riga):

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. Esporta il cluster di amministrazione radice kubeconfig:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. Vai al repository iac e aggiungi la struttura di directory per l'organizzazione globale:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Aggiungi il file ioauthmethod.yaml per l'organizzazione:

    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
    

    Sostituisci le seguenti variabili:

    VariabileDefinizione
    ADFS_CERT_BASE64

    Il valore di $BASE64_CERT che hai creato in un passaggio precedente.

    Questo certificato con codifica PEM base64 che ADFS utilizza per l'autofirma è richiesto da GKE Identity Service per stabilire una connessione sicura con un'istanza ADFS interna.

    ADFS_CLIENT_ID L'ID OpenID Connect per il client dell'organizzazione in ADFS.
    ADFS_CLIENT_SECRET Il segreto OpenID Connect per il client dell'organizzazione registrato in ADFS.
    OCIT_DOMAIN Il nome di dominio OCIT. Per ulteriori informazioni, vedi Configurazione DNS GDC per ADFS.
  13. Aggiungi il file kustomization.yaml alla cartella iac globale:

    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. Esegui lo staging e il commit del file YAML dell'organizzazione e dei file Kustomize:

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. Esegui il push dell'aggiornamento su GitLab:

    git -c http.sslVerify=false push
    
  16. Attendi la revisione del codice e l'unione.

  17. Verifica che l'IdP appena aggiunto esista in ClientConfig:

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

Configurare l'autenticazione a più fattori ADFS

Requisiti

  1. Le YubiKey sono state fornite agli utenti in base alla sezione 5.16 Applicazioni di hardening e delle norme.
  2. È stato confermato che tutti i passaggi precedenti per AD FS funzionano come previsto, il che significa che gli utenti possono accedere agli endpoint GDC utilizzando l'autenticazione con nome utente e password con AD FS.

Istruzioni

Segui questi passaggi per configurare l'autenticazione a più fattori ADFS.

Abilitare l'autenticazione dei certificati ADFS a livello globale

Esegui i seguenti passaggi sull'host ADFS1.

  1. Connettiti all'host ADFS1 tramite RDP utilizzando l'account -sa, ad esempio username-sa.
  2. Esegui una finestra di PowerShell come Administrator.
  3. Controlla se CertificateAuthentication è già abilitato nel tuo ambiente:

    # 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. Imposta PrimaryIntranetAuthenticationProvider in modo da includere CertificateAuthentication. Inoltre, rimuovi un metodo di autenticazione non utilizzato in 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}
    
Testare l'autenticazione del certificato ADFS

Completa i seguenti passaggi su una workstation IT OC.

  1. Accedi a una workstation OC IT come account non privilegiato.
  2. Apri il browser Chrome e accedi a infra-console.CELL_NAME.DOMAIN come faresti normalmente, ad esempio https://infra-console.example.domain.local.
  3. Fai clic sull'opzione Accedi utilizzando un certificato visualizzata sotto il pulsante Accedi.

    OC-IT
image

  4. Seleziona il certificato utente non privilegiato dalla finestra di dialogo e fai clic su OK.

    OC-IT
image

  5. Quando richiesto, inserisci il PIN di YubiKey e fai clic su Ok.

    OC-IT
image

  6. Se l'autenticazione ADFS funziona correttamente, dovresti visualizzare la GUI della console dell'infrastruttura come se avessi inserito il nome utente e la password.

  7. Esci dalla console dell'infrastruttura utilizzando il pulsante Esci, quindi chiudi tutte le finestre di Chrome. Questa azione rimuove le credenziali memorizzate nella cache e ti consente di testare ogni altro endpoint GDC.

    OC-IT
image

  8. Ripeti i passaggi di questa sezione per ogni endpoint GDC, ricordandoti di disconnetterti e chiudere Chrome ogni volta per assicurarti di visualizzare le richieste di autenticazione AD FS:

    • Console.gdchservices (organizzazione gdchservices)
    • GitLab
    • ServiceNow
    • Altre organizzazioni

Applica rigorosamente l'autenticazione MFA di ADFS a livello globale

Esegui i seguenti passaggi sull'host ADFS1.

  1. RDP all'host ADFS1 come account -sa, ad esempio alexb-sa.
  2. Esegui una finestra PowerShell come amministratore.
  3. Imposta PrimaryIntranetAuthenticationProvider in modo che includa SOLO CertificateAuthentication.

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

Esegui nuovamente il test di ogni endpoint GDC

Esegui i seguenti passaggi da una workstation IT di OC.

  1. Accedi a una workstation OC IT come account non privilegiato.
  2. Apri il browser Chrome e accedi a infra-console.CELL_NAME.DOMAIN come faresti normalmente, ad esempio https://infra-console.example.domain.local.
  3. Il portale AD FS chiede immediatamente un certificato o una YubiKey. Non devi più visualizzare i campi per un nome utente o una password.

    OC-IT
image

  4. Dopo aver selezionato il certificato, inserisci il PIN della YubiKey, identico a quello dei test precedenti.

    OC-IT
image

La configurazione è stata completata.