Demostración: Autentica con Keycloak o el SSO de Google

Esta página está destinada a los administradores de la plataforma.

Puedes intentar autenticarte con Keycloak o el inicio de sesión único (SSO) de Google solo con fines de demostración o prueba.

Autentica con Keycloak

Keycloak es un producto de software de administración de identidades y accesos de código abierto. Puedes configurarlo como un proveedor de OIDC para una demostración rápida.

Antes de comenzar

Para instalar y habilitar Keycloak, debes tener un clúster de Kubernetes que tenga una dirección de Ingress a la que se pueda acceder desde la implementación del modo privado de Anthos. Un clúster de administrador del modo privado de Anthos se usa como ejemplo en esta página.

También debes haber creado un nombre de dominio personalizado para el centro de administración del modo privado de Anthos. Consulta Configura el nombre de dominio para acceder al centro de administración.

  1. Exporta el nombre de dominio del centro de administración como una variable, por ejemplo:

    export ANTHOS_MANAGEMENT_CENTER=anthos.example.com
    
  2. Exporta un registro privado como una variable, por ejemplo:

    export PRIVATE_REGISTRY=10.200.0.2/library
    

Descarga la imagen de Keycloak y envíala al registro privado

  1. Descarga la imagen de Keycloak desde DockerHub:

    actl images save \
      --output keycloak-image \
      jboss/keycloak:12.0.2
    
  2. Envía la imagen de Keycloak al registro privado:

    actl images push \
      --images keycloak-image \
      --private-registry=${PRIVATE_REGISTRY}
    

Implementa Keycloak

Actualiza tu configuración de DNS y genera un certificado para implementar Keycloak.

  1. Crea el servicio de Keycloak a fin de exponer la IP para Keycloak:

    kubectl create -f - <<EOF
    apiVersion: v1
    kind: Namespace
    metadata:
      name: keycloak
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: keycloak-svc
      namespace: keycloak
      labels:
        app: keycloak
    spec:
      ports:
      - name: http
        port: 80
        targetPort: 8080
      - name: https
        port: 443
        targetPort: 8443
      selector:
        app: keycloak
      type: LoadBalancer
    EOF
    
  2. Después de que se asigne una IP mediante LoadBalancer, exporta la IP a una variable, por ejemplo:

    export KEYCLOAK_SVC_IP=$(kubectl get services -n keycloak \
        -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
    
  3. Agrega un “Registro A” a la configuración de tu dominio DNS y configúrala como ${KEYCLOAK_SVC_IP}:

    export KEYCLOAK_SVC=keycloak.example.com
    
  4. Genera un certificado autofirmado a fin de que Keycloak lo use para TLS.

    openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -subj \
        "/CN=${KEYCLOAK_SVC}" \
        -addext "subjectAltName = DNS:localhost,DNS:${KEYCLOAK_SVC},IP:${KEYCLOAK_SVC_IP}" \
        -out "tls.crt" -keyout "tls.key"
    
  5. Sube el certificado y la clave privada al clúster:

    kubectl create secret tls tls-config -n keycloak --cert=tls.crt \
        --key=tls.key
    
  6. Ejecuta el siguiente comando para implementar Keycloak:

    kubectl create -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: keycloak
      namespace: keycloak
      labels:
        app: keycloak
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: keycloak
      template:
        metadata:
          labels:
            app: keycloak
        spec:
          volumes:
          - name: tls-config-volume
            secret:
              secretName: tls-config
              items:
              - key: tls.crt
                path: tls.crt
              - key: tls.key
                path: tls.key
          containers:
          - name: keycloak
            # Set the image as original path but the actual image will be pulled from the registry mirror,
            # which was configured by 'actl push' command.
            image: jboss/keycloak:12.0.2
            # Keycloak uses certificates stored in /etc/x509/https to set up TLS.
            # https://github.com/keycloak/keycloak-containers/blob/master/server/README.md#setting-up-tlsssl
            volumeMounts:
            - name: tls-config-volume
              mountPath: "/etc/x509/https"
            env:
            - name: KEYCLOAK_USER
              value: "admin"
            - name: KEYCLOAK_PASSWORD
              value: "admin"
            - name: PROXY_ADDRESS_FORWARDING
              value: "true"
            ports:
            - name: http
              containerPort: 8080
            - name: https
              containerPort: 8443
            readinessProbe:
              httpGet:
                path: /auth/realms/master
                port: 8080
    EOF
    

Configura el usuario y el cliente de Keycloak

Abre la consola de Keycloak en la estación de trabajo del administrador y accede con KEYCLOAK_USER y KEYCLOAK_PASSWORD en el archivo keycloak.yaml. De forma predeterminada, estos valores son KEYCLOAK_USER=admin y KEYCLOAK_PASSWORD=admin. Si es necesario, acepta el certificado autofirmado en tu navegador. Si se te presenta en Chrome una advertencia sobre un certificado que no es de confianza, ingresa thisisunsafe en el cuadro de diálogo.

echo "Keycloak console: https://${KEYCLOAK_SVC}"

Crea un dominio

  1. Coloca el cursor sobre Master en la esquina superior izquierda y haz clic en Add realm.
  2. Ingresa anthos como el nombre de tu dominio nuevo y haz clic en Create.
  3. En Realm settings > Tokens, cambia la Access Token Lifespan a 1 Hour para evitar que el token venza demasiado pronto y haz clic en Save.

Crea un usuario

  1. En la barra de navegación izquierda, haz clic en Users y, luego, en Add user.
  2. Establece la siguiente configuración para el cliente y, luego, haz clic en Guardar.
    1. Nombre de usuario: anthos-platform-admin
    2. Correo electrónico: anthos-platform-admin@example.com
    3. Usuario habilitado: ACTIVADO
    4. Correo electrónico verificado: ACTIVADO
  3. En la pestaña Credentials, completa los campos Password y Password Confirmation. Haz clic en Password Confirmation y haz la validación cuando se te solicite.

Crea un cliente

  1. En la barra de navegación izquierda, haz clic en Clientes y, luego, en Crear.
  2. Establece la siguiente configuración para el cliente y, luego, haz clic en Guardar. ANTHOS_MANAGEMENT_CENTER es el nombre de dominio personalizado que usas para el centro de administración.
    1. ID de cliente: anthos
    2. Protocolo de cliente: openid-connect
    3. URL raíz: https://ANTHOS_MANAGEMENT_CENTER
  3. Ve a la página de administración del cliente recién creado.
  4. En la pestaña Configuración de la página de administración del cliente, realiza los siguientes pasos:
    1. Configura el Tipo de acceso como confidential.
    2. Agrega los siguientes URI a URI de redireccionamiento válidos.
      • http://localhost:9879/callback
      • https://ANTHOS_MANAGEMENT_CENTER/_gcp_anthos_oidc_callback
    3. Haz clic en Guardar.
  5. En la pestaña Credenciales de la página de administración del cliente, selecciona ID y secreto de cliente como Autenticador del cliente.
  6. Anota el secreto en algún lugar.
    1. En la barra de navegación izquierda, haz clic en Grupos y, luego, en Nuevo.
    2. Ingresa el nombre de tu grupo: anthos-platform-admin-group.
    3. Regresa a la pestaña User, que está en la izquierda, y haz clic en View all users.
    4. Haz clic en el usuario que acabas de crear (anthos-platform-admin) y, luego, en la pestaña Groups.
    5. En Grupos disponibles, selecciona el grupo que creaste, anthos-platform-admin-group, y haz clic en Unirse.
    6. Regresa a la página de administración de clientes de Anthos.
    7. Haz clic en la pestaña Asignadores y, luego, en Crear:
      1. Ingresa el nombre para este asignador: anthos-platform-admin-group-mapper.
      2. En la lista desplegable Mapper Type, selecciona Group Membership.
      3. Token Claim Name es el valor del atributo que se muestra en el token de autenticación. El valor predeterminado en el modo privado de Anthos es “groups”, por lo que puedes usar groups en este campo. Recuerda que deberás modificar el campo GroupsClaim de la configuración de OIDC con este valor si el nombre de Token Claim Name no es groups.
      4. Asegúrate de que la opción Full group path esté inhabilitada.
      5. Asegúrate de que las opciones Add to ID Token, Add to access token y Add to userinfo estén habilitadas.
      6. Haz clic en Guardar.

Habilita la autenticación de OIDC

Obtén la URL del proveedor de OIDC para usarla en los siguientes pasos.

  1. Ejecuta el siguiente comando:

    export ISSUER_URL=https://${KEYCLOAK_SVC}/auth/realms/anthos
    echo "Issuer URL: ${ISSUER_URL}"
    
  2. Con la tls.crt anterior, genera el certificado codificado en Base64.

    export BASE64_CERT=$(openssl base64 -A -in tls.crt)
    echo "Use the following string as the base64-encoded certificate for the OIDC provider: ${BASE64_CERT}"
    
  1. En la consola del centro de administración, abre el menú Identidad y acceso.
  2. En la pestaña Identidad, haz clic en Configurar Anthos Identity Service (OIDC).
  3. Para crear el perfil de Keycloak, completa los siguientes campos y, luego, haz clic en Enviar:

    1. Nombre del perfil: keycloak
    2. URL del proveedor de OIDC: La URL del emisor de la sección Habilita la autenticación de OIDC.
    3. ID de cliente de OIDC: anthos
    4. Secreto del cliente de OIDC: Es el secreto del cliente de la sección Crea un cliente.
    5. Reclamación del nombre de usuario: email
    6. Prefijo del nombre de usuario: keycloak-
    7. Reclamación de grupos: La reclamación de grupos de la sección Configura la pertenencia a un grupo. Si dejas este campo vacío, el valor será groups.
    8. Prefijo de grupo: keycloak-
    9. Permisos: email openid
    10. Parámetros adicionales: access_type=offline
    11. Datos de la autoridad certificadora: Usa el certificado codificado en base64 de la sección Habilita la autenticación de OIDC.
  4. Haz clic en Apply profiles to clusters y, luego, en la pestaña Admin Cluster.

  5. En Profiles, elige el perfil "keycloak" que acabas de crear.

  6. En Nombre de dominio, ingresa ANTHOS_MANAGEMENT_CENTER.

  7. En Administrador de la plataforma inicial, siempre agrega el prefijo del usuario antes de tu nombre de usuario. Por ejemplo, si agregas anthos-platform-admin@example.com, ingresa keycloak-anthos-platform-admin@example.com.

  8. Haz clic en Submit y espera un minuto para que se vuelvan a configurar los diversos componentes del sistema.

  9. En una ventana de incógnito, navega a https://ANTHOS_MANAGEMENT_CENTER. Se te redireccionará a una página de acceso de Keycloak y podrás acceder como anthos-platform-admin (después de configurar una contraseña permanente).

Enfoque alternativo mediante la aplicación de un archivo YAML

  1. Establece el proveedor de IdP para el dominio. Si el DomainConfig ya se creó para el dominio, aplica un parche al objeto a fin de configurar el nombre del método de autenticación que se usará para el dominio mediante este comando:

    kubectl patch domainconfig anthos.example.com --type=json -p='[{"op": "replace", "path":
    "/spec/authMethodName", "value":"keycloak"}]'
    

    Si DomainConfig no se crea para el dominio, créalo mediante este comando:

    kubectl create -f - <<EOF
    apiVersion: managementcenter.anthos.cloud.google.com/v1
    kind: DomainConfig
    metadata:
      name: anthos.example.com
    spec:
      authMethodName: keycloak
    EOF
    
  2. Crea clientconfig-patch.yaml con el siguiente contenido:

    # Use this to set the OIDC configuration of Keycloak:
    # kubectl patch ClientConfig default -n kube-public --type=merge --patch $(cat clientconfig-patch.yaml)
    spec:
      authentication:
      # The name of the OIDC configuration to create.
      - name: keycloak
        oidc:
          # ID for the client application that makes authentication requests to the OpenID provider.
          clientID: anthos
          # ID for the client application that makes authentication requests to the OpenID provider.
          clientSecret: YOUR_CLIENT_SECRET
          # The URI to redirect users going through the OAuth flow using cloud console.
          # This is not supported by Anthos private mode.
          cloudConsoleRedirectURI: http://cloud.console.not.enabled
          # Additional key-value parameters (comma-separated) to send to the OpenID provider.
          extraParams: access_type=offline
          # URL where authorization requests are sent to your OpenID.
          issuerURI: YOUR_ISSUER_URI
          # The redirect URL that kubectl uses for authorization.
          kubectlRedirectURI: http://localhost:9879/callback
          # Additional scopes to send to the OpenID provider.
          scopes: openid email
          # JWT claim to use as the username. You can choose other claims, such as email or name,
          # depending on the OpenID provider. However, claims other than email are prefixed
          # with the issuer URL to prevent naming clashes.
          userClaim: email
          # A base64-encoded PEM-encoded certificate for the OIDC provider. To create the string,
          # encode the certificate, including headers, into base64. Include the resulting string
          # in certificateAuthorityData as a single line.
          certificateAuthorityData: YOUR_CERTIFICATE
    
  3. Edita clientconfig-patch.yaml con la configuración de Keycloak.

    sed -i "s|YOUR_ISSUER_URI|${ISSUER_URL}|g" clientconfig-patch.yaml
    sed -i "s|YOUR_CERTIFICATE|${BASE64_CERT}|g" clientconfig-patch.yaml
    
  4. Reemplaza YOUR_CLIENT_SECRET por el secreto de cliente que se obtuvo en la pestaña Credenciales de Keycloak.

  5. Ejecuta el siguiente comando para configurar OIDC:

    kubectl patch ClientConfig default -n kube-public --type=merge \
        --patch "$(cat clientconfig-patch.yaml)"
    
  6. Espera un minuto para que se vuelvan a configurar los diversos componentes del sistema.

  7. Sigue las instrucciones que aparecen en Configura funciones de autorización para configurar la cuenta de administrador de plataforma inicial.

  8. En una ventana de incógnito, navega a https://ANTHOS_MANAGEMENT_CENTER. Se te redireccionará a una página de acceso de Keycloak y podrás acceder como anthos-platform-admin (después de configurar una contraseña permanente).

Borra Keycloak

Una vez que termines de usar la demostración de Keycloak, borra la instalación de Keycloak.

kubectl delete ns keycloak

Autentica con el SSO de Google

El SSO de Google no está disponible en el modo privado de Anthos. Si quieres usar el SSO de Google, tanto el clúster como los navegadores deben poder comunicarse con los servidores de SSO de Google. Los servidores de SSO de Google no necesitan comunicarse con los clústeres de usuarios.

  1. Accede a Google Cloud Console y selecciona un proyecto válido.
  2. Accede a la sección “API y servicios > Pantalla de consentimiento de OAuth”
  3. Crea una nueva pantalla de consentimiento de OAuth. Esta información se muestra a los usuarios.
    1. Establece la página principal de la aplicación en la URL del administrador.
  4. En la sección API y Servicios > Credenciales, haz lo siguiente:
    1. Haz clic en Crear credenciales.
    2. Crea un ID de cliente de OAuth nuevo.
    3. Configura el tipo de aplicación como aplicación web.
    4. Elige un nombre relevante
    5. Para los orígenes de JavaScript, configura https://anthos.example.com (que indica que https://anthos.example.com es el nombre de tu dominio para el Centro de administración)
    6. Para los URI de redireccionamiento autorizados, configura lo siguiente:
      • https://anthos.example.com/_gcp_anthos_oidc_callback
      • http://localhost:9879/callback
  5. Copia el ClientID y el secreto del cliente en la configuración de AdminUI
  6. Establece la URL del proveedor de OIDC en https://accounts.google.com
  7. Establece Username Claim en email y Scopes en openid email.
  8. Establece parámetros adicionales en prompt=consent,access_type=offline. De lo contrario, no podrás acceder con el servidor de la API de Kubernetes.
  9. Agrega una lista inicial de correos electrónicos de usuarios (separados por comas) para que se te otorguen permisos de administrador de la plataforma.
  10. Haga clic en Save.

SSO de Google

¿Qué sigue?