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.
Exporta el nombre de dominio del centro de administración como una variable, por ejemplo:
export ANTHOS_MANAGEMENT_CENTER=anthos.example.com
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
Descarga la imagen de Keycloak desde DockerHub:
actl images save \ --output keycloak-image \ jboss/keycloak:12.0.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.
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
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}')
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
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"
Sube el certificado y la clave privada al clúster:
kubectl create secret tls tls-config -n keycloak --cert=tls.crt \ --key=tls.key
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
- Coloca el cursor sobre Master en la esquina superior izquierda y haz clic en Add realm.
- Ingresa
anthos
como el nombre de tu dominio nuevo y haz clic en Create. - 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
- En la barra de navegación izquierda, haz clic en Users y, luego, en Add user.
- Establece la siguiente configuración para el cliente y, luego, haz clic en Guardar.
- Nombre de usuario:
anthos-platform-admin
- Correo electrónico:
anthos-platform-admin@example.com
- Usuario habilitado: ACTIVADO
- Correo electrónico verificado: ACTIVADO
- Nombre de usuario:
- 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
- En la barra de navegación izquierda, haz clic en Clientes y, luego, en Crear.
- 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.- ID de cliente: anthos
- Protocolo de cliente: openid-connect
- URL raíz: https://
ANTHOS_MANAGEMENT_CENTER
- Ve a la página de administración del cliente recién creado.
- En la pestaña Configuración de la página de administración del cliente, realiza los siguientes pasos:
- Configura el Tipo de acceso como
confidential
. - Agrega los siguientes URI a URI de redireccionamiento válidos.
- http://localhost:9879/callback
- https://
ANTHOS_MANAGEMENT_CENTER
/_gcp_anthos_oidc_callback
- Haz clic en Guardar.
- Configura el Tipo de acceso como
- En la pestaña Credenciales de la página de administración del cliente, selecciona ID y secreto de cliente como Autenticador del cliente.
- Anota el secreto en algún lugar.
Recomendado: Configura la membresía del grupo en Keycloak
- En la barra de navegación izquierda, haz clic en Grupos y, luego, en Nuevo.
- Ingresa el nombre de tu grupo:
anthos-platform-admin-group
. - Regresa a la pestaña User, que está en la izquierda, y haz clic en View all users.
- Haz clic en el usuario que acabas de crear (anthos-platform-admin) y, luego, en la pestaña Groups.
- En Grupos disponibles, selecciona el grupo que creaste,
anthos-platform-admin-group
, y haz clic en Unirse. - Regresa a la página de administración de clientes de Anthos.
- Haz clic en la pestaña Asignadores y, luego, en Crear:
- Ingresa el nombre para este asignador:
anthos-platform-admin-group-mapper
. - En la lista desplegable Mapper Type, selecciona Group Membership.
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 usargroups
en este campo. Recuerda que deberás modificar el campoGroupsClaim
de la configuración de OIDC con este valor si el nombre deToken Claim Name
no esgroups
.- Asegúrate de que la opción Full group path esté inhabilitada.
- Asegúrate de que las opciones Add to ID Token, Add to access token y Add to userinfo estén habilitadas.
- Haz clic en Guardar.
- Ingresa el nombre para este asignador:
Habilita la autenticación de OIDC
Obtén la URL del proveedor de OIDC para usarla en los siguientes pasos.
Ejecuta el siguiente comando:
export ISSUER_URL=https://${KEYCLOAK_SVC}/auth/realms/anthos echo "Issuer URL: ${ISSUER_URL}"
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}"
Enfoque recomendado mediante la consola del centro de administración
- En la consola del centro de administración, abre el menú Identidad y acceso.
- En la pestaña Identidad, haz clic en Configurar Anthos Identity Service (OIDC).
Para crear el perfil de Keycloak, completa los siguientes campos y, luego, haz clic en Enviar:
- Nombre del perfil:
keycloak
- URL del proveedor de OIDC: La URL del emisor de la sección Habilita la autenticación de OIDC.
- ID de cliente de OIDC:
anthos
- Secreto del cliente de OIDC: Es el secreto del cliente de la sección Crea un cliente.
- Reclamación del nombre de usuario:
email
- Prefijo del nombre de usuario:
keycloak-
- 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
. - Prefijo de grupo:
keycloak-
- Permisos:
email openid
- Parámetros adicionales:
access_type=offline
- Datos de la autoridad certificadora: Usa el certificado codificado en base64 de la sección Habilita la autenticación de OIDC.
- Nombre del perfil:
Haz clic en Apply profiles to clusters y, luego, en la pestaña Admin Cluster.
En Profiles, elige el perfil "keycloak" que acabas de crear.
En Nombre de dominio, ingresa
ANTHOS_MANAGEMENT_CENTER
.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
, ingresakeycloak-anthos-platform-admin@example.com
.Haz clic en Submit y espera un minuto para que se vuelvan a configurar los diversos componentes del sistema.
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 comoanthos-platform-admin
(después de configurar una contraseña permanente).
Enfoque alternativo mediante la aplicación de un archivo YAML
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
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
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
Reemplaza
YOUR_CLIENT_SECRET
por el secreto de cliente que se obtuvo en la pestaña Credenciales de Keycloak.Ejecuta el siguiente comando para configurar OIDC:
kubectl patch ClientConfig default -n kube-public --type=merge \ --patch "$(cat clientconfig-patch.yaml)"
Espera un minuto para que se vuelvan a configurar los diversos componentes del sistema.
Sigue las instrucciones que aparecen en Configura funciones de autorización para configurar la cuenta de administrador de plataforma inicial.
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 comoanthos-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.
- Accede a Google Cloud Console y selecciona un proyecto válido.
- Accede a la sección “API y servicios > Pantalla de consentimiento de OAuth”
- Crea una nueva pantalla de consentimiento de OAuth. Esta información se muestra a los usuarios.
- Establece la página principal de la aplicación en la URL del administrador.
- En la sección API y Servicios > Credenciales, haz lo siguiente:
- Haz clic en Crear credenciales.
- Crea un ID de cliente de OAuth nuevo.
- Configura el tipo de aplicación como aplicación web.
- Elige un nombre relevante
- Para los orígenes de JavaScript, configura
https://anthos.example.com
(que indica quehttps://anthos.example.com
es el nombre de tu dominio para el Centro de administración) - Para los URI de redireccionamiento autorizados, configura lo siguiente:
https://anthos.example.com/_gcp_anthos_oidc_callback
http://localhost:9879/callback
- Copia el ClientID y el secreto del cliente en la configuración de AdminUI
- Establece la URL del proveedor de OIDC en
https://accounts.google.com
- Establece
Username Claim
enemail
yScopes
enopenid email
. - 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. - Agrega una lista inicial de correos electrónicos de usuarios (separados por comas) para que se te otorguen permisos de administrador de la plataforma.
- Haz clic en Guardar.