20. OI Active Directory Federation Services

Tiempo estimado para completar la actividad: 18 horas

Propietario del componente operable: OIC

Cómo configurar una conexión de OIDC

Las conexiones de OIDC se administran con la configuración de estado deseado (DSC). Si bien se pueden crear manualmente, el DSC es el método preferido.

  1. Accede a la VM CONFIG1 como usuario Marvin.

  2. Abre c:\config\config.ps1 con VSCode o el editor que prefieras.

  3. Busca -ADFS1 para encontrar el nodo de configuración del servidor ADFS.

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

    Un array llamado AdfsAppGrp contiene tablas hash de conexiones de OIDC. Copia toda la tabla hash de Example-OIDC y pégala después de la tabla hash de Example-OIDC existente. Ejemplo:

    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    @{
                         Name        = 'Example-OIDC'
                         AdfsSrvApp  = @{
            
    }
    
  4. Actualiza los parámetros Name y RedirectURI a los valores asociados con tu nueva conexión de OIDC. Guarda el archivo config.ps1.

  5. Abre una ventana de PowerShell como administrador y actualiza la configuración del servidor ADFS1. Reemplaza [Sitio] por el código de tu sitio.

    $Cred = Get-Credential -Message "Enter Admin Credentials for ADFS1"
    c:\dsc\Update-RemoteHost.ps1 -ComputerName [Site]-ADFS1 -Credential $Cred -NoThirdParty
    
  6. Valida la configuración de OIDC. Para ello, accede a la VM de ADFS1, abre el MMC de AD FS Management y, luego, haz clic en Application Groups.

  7. Mientras accedes a la VM de ADFS1, abre C:\config y busca un archivo llamado <Your Connector Name> Srv App.txt. Guarda los valores Identifier y ClientSecret que se encuentran en este archivo para usarlos más adelante con tu aplicación. Borra este archivo una vez que se registren los valores del identificador y el secreto.

Configuración de OIDC para la consola de infraestructura de GDC

  1. Recopila información del conector de OIDC para la implementación de GDC.

    1. URIs de redireccionamiento: https://ais-core.<GDC_name>.<DNS_domain>/finish-login, por ejemplo, https://ais-core.example.domain.local/finish-login.
    2. URL de la consola de servicios de GDC: https://infra-console.<GDC_name>.<DNS_domain>, por ejemplo, https://infra-console.example.domain.local.
  2. Sigue los pasos anteriores para crear la conexión de OIDC.

  3. Una vez que se configure Anthos Identity Service (AIS) en la celda de GDC, prueba la configuración de OIDC con la URL de la consola de GDC.

    1. Accede a una estación de trabajo de OIC.
    2. Abre Chrome y navega a la URL de la consola de infraestructura, por ejemplo, https://infra-console.example.domain.local.
    3. Cuando se te solicite, ingresa tu nombre de usuario y contraseña. Si las credenciales son válidas, se te redireccionará a la GUI de la consola de infraestructura.

    Repite este paso según sea necesario para cada celda de GDC administrada por este servidor de ADFS.

Configuración de DNS de GDC para ADFS

  1. Accede al controlador del sistema o al programa de arranque.

  2. Exporta kubeconfig para el clúster de administrador raíz:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. Configura OCIT_DOMAIN con una zona de reenvío. Reemplaza OCIT_DOMAIN por el nombre de tu dominio de OCIT y los extremos por las direcciones IP de DNS de 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
    

    El resultado se ve como en el siguiente ejemplo:

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. Si no se aplican los cambios, reinicia la implementación:

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

    Este cambio de DNS se propaga a todos los clústeres de GDC.

  5. Con el kubeconfig del administrador raíz, valida que la resolución del dominio de OCIT funcione según lo previsto:

    NAMESERVER=$(kubectl -n dns-system get service gpc-coredns-forwarder-udp | \
      awk '/[0-9]\./ {print $4}')
    dig +short @${NAMESERVER} fs.OCIT_DOMAIN
    
  6. Exporta kubeconfig para el clúster de administrador de la organización:

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. Aplica el kubeconfig del administrador de la organización y valida que la resolución del dominio de OCIT funcione según lo previsto:

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

Configuración del AIS de GDC para la consola

  1. Accede a ADFS1 y, luego, abre la MMC de administración de AD FS.

  2. Haz clic en Servicio > Certificados.

  3. Haz doble clic en el certificado de Service Communications.

  4. Haz clic en la pestaña Ruta de certificación.

  5. Selecciona el certificado superior etiquetado como raíz.

  6. Haz clic en Ver certificado.

  7. Selecciona la pestaña Detalles y, luego, haz clic en Copiar a archivo…

    1. Cómo guardar en formato Base-64 (.CER)
  8. Copia la CA raíz de ADFS en el controlador del sistema o el programa de arranque como adfs.cer.

  9. Accede al controlador del sistema o al programa de arranque y, luego, exporta la CA raíz de ADFS a una variable de shell con codificación en base64. El siguiente comando codifica el certificado, incluidos los encabezados, en base64 como una sola línea (sin caracteres de nueva línea):

        export BASE64_CERT=$(base64 adfs.cer | tr -d "\n\r")
    
  10. Exporta el clúster de administrador raíz kubeconfig:

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  11. Navega al repositorio iac y agrega la estructura de directorios para la organización global:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Agrega el archivo ioauthmethod.yaml para la organización:

    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
    

    Reemplaza las siguientes variables:

    VariableDefinición
    ADFS_CERT_BASE64

    Es el valor de $BASE64_CERT que creaste en un paso anterior.

    GKE Identity Service requiere este certificado con codificación PEM y codificación base64 que ADFS usa para autofirmar con el fin de establecer una conexión segura con una instancia interna de ADFS.

    ADFS_CLIENT_ID Es el ID de OpenID Connect para el cliente de la organización en ADFS.
    ADFS_CLIENT_SECRET El secreto de OpenID Connect para el cliente de la organización registrado en ADFS.
    OCIT_DOMAIN Es el nombre de dominio de OCIT. Para obtener más información, consulta Configuración de DNS de GDC para ADFS.
  13. Agrega el archivo kustomization.yaml a la carpeta 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. Agrega y confirma el archivo YAML de la organización y los archivos de Kustomize:

    git add "infrastructure/global"
    git add "infrastructure/zonal"
    git commit
    
  15. Envía la actualización a GitLab:

    git -c http.sslVerify=false push
    
  16. Espera la revisión de código y la combinación.

  17. Verifica que el IdP agregado recientemente exista en ClientConfig:

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

Configura la autenticación de varios factores de ADFS

Requisitos

  1. Las YubiKeys se aprovisionaron para los usuarios según la sección 5.16 Aplicaciones de políticas y refuerzo de la seguridad.
  2. Se confirmó que todos los pasos anteriores para AD FS funcionan según lo esperado, lo que significa que los usuarios pueden acceder a los extremos de GDC con la autenticación de nombre de usuario y contraseña con AD FS.

Instrucciones

Sigue estos pasos para configurar la autenticación de varios factores de ADFS.

Habilita la autenticación de certificados de ADFS de forma global

Ejecuta los siguientes pasos en el host ADFS1.

  1. Conéctate por RDP al host ADFS1 con tu cuenta -sa, por ejemplo, nombredeusuario-sa.
  2. Ejecuta una ventana de PowerShell como Administrator.
  3. Comprueba si CertificateAuthentication ya está habilitado en tu entorno:

    # 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. Configura PrimaryIntranetAuthenticationProvider para incluir CertificateAuthentication. Además, quita un método de autenticación no utilizado en 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}
    
Prueba la autenticación de certificados de ADFS

Completa los siguientes pasos en una estación de trabajo de TI de OC.

  1. Accede a una estación de trabajo de TI de OC con tu cuenta sin privilegios.
  2. Abre el navegador Chrome y accede a infra-console.CELL_NAME.DOMAIN como lo harías normalmente, por ejemplo, https://infra-console.example.domain.local.
  3. Haz clic en la opción Acceder con un certificado que aparece debajo del botón Acceder.

    Imagen de OC-IT

  4. Selecciona tu certificado de usuario sin privilegios en la ventana de diálogo y haz clic en Aceptar.

    Imagen de OC-IT

  5. Cuando se te solicite, ingresa el PIN de tu YubiKey y haz clic en Aceptar.

    Imagen de OC-IT

  6. Si la autenticación de ADFS funciona correctamente, deberías ver la GUI de infra-console como si hubieras ingresado tu nombre de usuario y contraseña.

  7. Sal de la consola de infraestructura con el botón Salir y, luego, cierra todas las ventanas de Chrome. Esta acción quita las credenciales almacenadas en caché y te permite probar cada extremo de GDC.

    Imagen de OC-IT

  8. Repite los pasos de esta sección para cada extremo de GDC. Recuerda cerrar sesión y cerrar Chrome cada vez para asegurarte de que se te presenten los mensajes de autenticación de AD FS:

    • Console.gdchservices (organización de gdchservices)
    • GitLab
    • ServiceNow
    • Otras organizaciones

Aplicar de forma estricta la autenticación con MFA de ADFS a nivel global

Ejecuta los siguientes pasos en el host ADFS1.

  1. Conéctate por RDP al host ADFS1 como tu cuenta -sa, por ejemplo, alexb-sa.
  2. Ejecuta una ventana de PowerShell como administrador.
  3. Establece PrimaryIntranetAuthenticationProvider para que incluya 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}
    

Vuelve a probar cada extremo de GDC

Ejecuta los siguientes pasos desde una estación de trabajo de TI de OC.

  1. Accede a una estación de trabajo de TI de OC con tu cuenta sin privilegios.
  2. Abre el navegador Chrome y accede a infra-console.CELL_NAME.DOMAIN como lo harías normalmente, por ejemplo, https://infra-console.example.domain.local.
  3. El portal de AD FS solicita de inmediato un certificado o una YubiKey. Ya no deberías ver campos para un nombre de usuario o una contraseña.

    Imagen de OC-IT

  4. Después de seleccionar tu certificado, ingresa el PIN de la llave YubiKey, que debe ser idéntico al que usaste en las pruebas anteriores.

    Imagen de OC-IT

Se completó la configuración.