20. OI Active Directory Federation Services

Tiempo estimado para completarse: 18 horas

Propietario del componente operable: OIC

Cómo configurar una conexión OIDC

Las conexiones OIDC se gestionan mediante la configuración del estado deseado (DSC). Aunque se pueden crear manualmente, DSC es el método preferido.

  1. Inicia sesión en 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'
    

    Una matriz llamada AdfsAppGrp contiene tablas hash de conexiones OIDC. Copia toda la tabla hash de Example-OIDC y pégala después de la tabla hash Example-OIDC. Ejemplo:

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

  5. Abre una ventana de PowerShell como administrador y actualiza la configuración del servidor ADFS1. Sustituye [Site] 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 iniciando sesión en la máquina virtual ADFS1, abriendo la MMC Gestión de AD FS y, a continuación, haciendo clic en Grupos de aplicaciones.

  7. Mientras tengas la sesión iniciada en la máquina virtual 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. Elimina este archivo una vez que hayas registrado los valores del identificador y del secreto.

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

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

    1. URIs de redirección: 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 OIDC.

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

    1. Inicia sesión en una estación de trabajo de OIC.
    2. Abre Chrome y ve a la URL de la consola de infraestructura, por ejemplo, https://infra-console.example.domain.local.
    3. Cuando se te pida, introduce tu nombre de usuario y tu contraseña. Si las credenciales son válidas, se te redirigirá a la interfaz gráfica de usuario de la consola de infraestructura.

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

Configuración de DNS de GDC para ADFS

  1. Inicia sesión en el controlador del sistema o en el Bootstrapper.

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

    export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig
    
  3. Configura el OCIT_DOMAIN mediante una zona directa. Sustituye OCIT_DOMAIN por el nombre de dominio de OCIT y los endpoints 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
    

    La salida tiene este aspecto:

    dnszone.network.private.gdc.goog/ocit-domain created
    
  4. Si los cambios no se aplican, 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 archivo kubeconfig del administrador raíz, comprueba que la resolución del dominio OCIT funciona correctamente:

    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 del clúster de administrador de la organización:

    export KUBECONFIG=/root/release/org-admin/org-admin-kubeconfig
    
  7. Aplica el archivo kubeconfig de administrador de la organización y comprueba que la resolución de dominio de OCIT funciona correctamente:

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

Configuración de GDC AIS para la consola

  1. Inicia sesión en ADFS1 y abre la MMC de gestión de AD FS.

  2. Haz clic en Servicio > Certificados.

  3. Haz doble clic en el certificado de comunicaciones de servicio.

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

  5. Selecciona el certificado de la parte superior con la etiqueta "Raíz".

  6. Haz clic en Ver certificado.

  7. Selecciona la pestaña Detalles y, a continuación, haz clic en Copiar en archivo...

    1. Guardar en formato Base-64 (.CER)
  8. Copia la CA raíz de ADFS en el controlador del sistema o en el Bootstrapper como adfs.cer.

  9. Inicia sesión en el controlador del sistema o en el programa de arranque y, a continuación, exporta la CA raíz de ADFS a una variable de shell con codificación 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. Ve al repositorio iac y añade la estructura de directorios de la organización global:

    cd iac; mkdir -p infrastructure/global/orgs/root/
    
  12. Añade el archivo ioauthmethod.yaml de 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
    

    Sustituye las siguientes variables:

    VariableDefinición
    ADFS_CERT_BASE64

    El valor de $BASE64_CERT que has creado en un paso anterior.

    GKE Identity Service necesita este certificado codificado en PEM y en Base64 que ADFS usa para autofirmarse para establecer una conexión segura con una instancia interna de ADFS.

    ADFS_CLIENT_ID El ID de OpenID Connect del cliente de la organización en ADFS.
    ADFS_CLIENT_SECRET El secreto de OpenID Connect del cliente de la organización registrado en ADFS.
    OCIT_DOMAIN El nombre de dominio de OCIT. Para obtener más información, consulta Configuración de DNS de GDC para ADFS.
  13. Añade el archivo kustomization.yaml a la carpeta global iac:

    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. Añade 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 a que se revise el código y se combine.

  17. Verifica que el IdP recién añadido exista en ClientConfig:

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

Configurar la autenticación multifactor de ADFS

Requisitos

  1. Las YubiKeys se han aprovisionado a los usuarios según la sección 5.16 Aplicaciones de protección y políticas.
  2. Se ha confirmado que todos los pasos anteriores de AD FS funcionan correctamente, lo que significa que los usuarios pueden acceder a los endpoints de GDC mediante la autenticación con nombre de usuario y contraseña con AD FS.

Instrucciones

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

Habilitar la autenticación con certificado de ADFS de forma global

Sigue estos pasos en el host de 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. Define PrimaryIntranetAuthenticationProvider para incluir CertificateAuthentication. Además, elimina 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}
    
Probar la autenticación con certificado de ADFS

Sigue estos pasos en una estación de trabajo de TI de OC.

  1. Inicia sesión en 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 Sign in using a certificate (Iniciar sesión con un certificado) que aparece debajo del botón Sign in (Iniciar sesión).

    OC-IT
image

  4. En la ventana de diálogo, selecciona el certificado de usuario sin privilegios y haz clic en Aceptar.

    OC-IT
image

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

    OC-IT
image

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

  7. Cierra sesión en la consola de infraestructura con el botón Cerrar sesión y, a continuación, cierra todas las ventanas de Chrome. Esta acción elimina las credenciales almacenadas en caché y te permite probar cada endpoint de GDC.

    OC-IT
image

  8. Repite los pasos de esta sección para cada endpoint de GDC. Recuerda cerrar sesión y cerrar Chrome cada vez para asegurarte de que se te muestren las peticiones de autenticación de AD FS:

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

Aplicar estrictamente la autenticación multifactor de ADFS de forma global

Sigue estos pasos en el host de ADFS1.

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

Volver a probar cada endpoint de GDC

Sigue estos pasos desde una estación de trabajo de TI de OC.

  1. Inicia sesión en 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 pide inmediatamente un certificado o una YubiKey. Ya no deberían aparecer los campos de nombre de usuario o contraseña.

    OC-IT
image

  4. Después de seleccionar el certificado, introduce el PIN de tu YubiKey, que debe ser el mismo que has usado en las pruebas anteriores.

    OC-IT
image

La configuración se ha completado.