Aprenda a configurar GKE en AWS para usar OpenID Connect (OIDC) para la autenticación en clústeres de usuarios. Este tema explica el proceso para configurar GKE en AWS con cualquier proveedor de OpenID.
Para actualizar un clúster que usa autenticación OIDC a Kubernetes 1.21, consulte Actualizar a 1.21 .
Para obtener una descripción general del flujo de autenticación de GKE en AWS, consulte Autenticación .
Descripción general
GKE en AWS admite OIDC como uno de los mecanismos de autenticación para interactuar con el servidor de API de Kubernetes de un clúster de usuarios. Con OIDC, puede administrar el acceso a los clústeres de Kubernetes mediante los procedimientos estándar de su organización para crear, habilitar y deshabilitar cuentas de usuario.
Antes de empezar
Este tema asume que está familiarizado con los siguientes conceptos de autenticación y OpenID:
La CLI de Google Cloud debe estar instalada en la máquina local de cada desarrollador.
Los sistemas sin interfaz gráfica no son compatibles. Para autenticarse, debe abrir un navegador en el equipo local que ejecuta la CLI de gcloud. El navegador le solicitará que autorice su cuenta de usuario.
Para autenticarse a través de la Google Cloud consola, cada clúster que desee configurar para la autenticación OIDC debe estar registrado con Google Cloud .
Personas
Este tema se refiere a tres personajes:
Administrador de la organización : esta persona elige un proveedor de OpenID y registra las aplicaciones cliente con el proveedor.
Administrador de clúster : esta persona crea uno o más clústeres de usuarios y crea archivos de configuración de autenticación para los desarrolladores que utilizan los clústeres.
Desarrollador : esta persona ejecuta cargas de trabajo en uno o más clústeres y utiliza OIDC para autenticarse.
Elija un proveedor de OpenID
Esta sección es para administradores de la organización .
Puede usar cualquier proveedor de OpenID que prefiera. Para ver una lista de proveedores certificados, consulte Certificación OpenID .
Crear URL de redireccionamiento
Esta sección es para administradores de la organización .
El proveedor de OpenID utiliza URL de redirección para devolver tokens de ID. Debe crear URL de redirección tanto para la CLI de gcloud como paraGoogle Cloud consola.
Establecer la URL de redirección de la CLI de gcloud
Cuando configure su proveedor OpenID, especifique su URL de redireccionamiento CLI como http://localhost: PORT /callback
Reemplace PORT con su número de puerto mayor a 1024.
Establezca el Google Cloud URL de redirección de la consola
La URL de redireccionamiento para el Google Cloud La consola es:
https://console.cloud.google.com/kubernetes/oidc
Cuando configure su proveedor OIDC, especifique https://console.cloud.google.com/kubernetes/oidc
como una de sus URL de redireccionamiento.
Registre sus aplicaciones cliente con el proveedor OpenID
Esta sección es para administradores de la organización .
Antes de que sus desarrolladores puedan usar la CLI de Google Cloud o la Google Cloud Para conectar la consola con su proveedor de OpenID, debe registrar esos dos clientes con dicho proveedor. El registro incluye los siguientes pasos:
Conozca la URI del emisor de su proveedor. La CLI de gcloud oGoogle Cloud La consola envía solicitudes de autenticación a esta URI.
Configure su proveedor con la URL de redireccionamiento, incluido su número de puerto, para la CLI de gcloud.
Configure su proveedor con la URL de redireccionamiento para el Google Cloud consola,
https://console.cloud.google.com/kubernetes/oidc
.Cree un único ID de cliente que su proveedor utilice para identificar tanto la CLI de Google Cloud como laGoogle Cloud consola.
Cree un único secreto de cliente que la CLI de gcloud y el Google Cloud Utilice la consola para autenticarse en el proveedor OpenID.
Cree un ámbito personalizado que la CLI de gcloud o Google Cloud La consola se puede utilizar para solicitar los grupos de seguridad del usuario.
Crea un nombre de reclamo personalizado que el proveedor utiliza para devolver los grupos de seguridad del usuario.
Configurar su clúster
Esta sección es para administradores de clúster .
Para configurar la autenticación OIDC, debe configurar el recurso AWSCluster de su clúster de usuarios con los detalles de autenticación para un clúster. Los detalles de AWSCluster se utilizan para configurar OIDC tanto para el Google Cloud Consola y el complemento de autenticación para GKE Enterprise. La configuración incluye la siguiente información de OIDC:
authentication: awsIAM: adminIdentityARNs: - AWS_IAM_ARN oidc: - certificateAuthorityData: CERTIFICATE_STRING clientID: CLIENT_ID clientSecret: CLIENT_SECRET extraParams: EXTRA_PARAMS groupsClaim: GROUPS_CLAIM groupPrefix: GROUP_PREFIX issuerURI: ISSUER_URI kubectlRedirectURI: KUBECTL_REDIRECT_URI scopes: SCOPES userClaim: USER_CLAIM userPrefix: USER_PREFIX
Campos de autenticación
La siguiente tabla describe los campos del objeto authentication.awsIAM.adminIdentityARNs
.
Campo | Requerido | Descripción | Formato |
---|---|---|---|
ARN de identidad de administrador | Sí, si se configura OIDC. | Nombre de recurso de Amazon (ARN) de las identidades de AWS IAM (usuarios o roles) a las que GKE les ha otorgado acceso de administrador de clúster en AWS. Ejemplo: arn:aws:iam::123456789012:group/Developers | Cadena |
Campo | Requerido | Descripción | Formato |
---|---|---|---|
Datos de la autoridad del certificado | No | Un certificado codificado en base64 y con codificación PEM para el proveedor OIDC. Para crear la cadena, codifique el certificado, incluidos los encabezados, en base64. Incluya la cadena resultante en certificateAuthorityData como una sola línea. Ejemplo: certificateAuthorityData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT== | Cadena |
ID de cliente | Sí | ID de la aplicación cliente que realiza solicitudes de autenticación al proveedor de OpenID. | Cadena |
clienteSecreto | No | Secreto compartido entre la aplicación cliente OIDC y el proveedor OIDC. | Cadena |
parámetros adicionales | No | Parámetros clave-valor adicionales para enviar al proveedor de OpenID. Si autoriza un grupo, pase resource=token-groups-claim . Si su servidor de autorización solicita el consentimiento, para la autenticación con Microsoft Azure y Okta, configure | Lista delimitada por comas |
gruposReclamación | No | Reclamo JWT que el proveedor utiliza para devolver sus grupos de seguridad. | Cadena |
prefijo de grupo | No | Se añade un prefijo a las notificaciones de grupo para evitar conflictos con nombres existentes. Por ejemplo, si tiene dos grupos llamados foobar , añada el prefijo gid- ; el grupo resultante será gid-foobar . | Cadena |
emisorURI | Sí | URL donde se envían las solicitudes de autorización a tu OpenID, como https://example.com/adfs . El servidor de la API de Kubernetes utiliza esta URL para descubrir claves públicas y verificar tokens. La URI debe usar HTTPS. | Cadena de URL |
URI de redireccionamiento de kubectl | Sí | La URL de redireccionamiento que `kubectl` utiliza para la autorización. | Cadena de URL |
alcances | Sí | Ámbitos adicionales para enviar al proveedor de OpenID. Microsoft Azure y Okta requieren el ámbito offline_access . | Lista delimitada por comas |
Reclamación del usuario | No | Reclamo JWT para usar como nombre de usuario. Puede elegir otros reclamos, como correo electrónico o nombre, según el proveedor de OpenID. Sin embargo, los reclamos que no sean de correo electrónico se prefijan con la URL del emisor para evitar conflictos de nombres. | Cadena |
prefijo de usuario | No | Prefijo añadido a las reclamaciones de nombre de usuario para evitar conflictos con nombres existentes. | Cadena |
Ejemplo: Autorización de usuarios y grupos
Muchos proveedores codifican propiedades de identificación del usuario, como el correo electrónico y los ID de usuario, en un token. Sin embargo, estas propiedades conllevan riesgos implícitos para las políticas de autenticación:
- Los identificadores de usuario pueden dificultar la lectura y auditoría de las políticas.
- El uso de direcciones de correo electrónico puede crear un riesgo de disponibilidad (si un usuario cambia su correo electrónico principal) y un riesgo de seguridad (si se puede reasignar un correo electrónico).
En lugar de asignar identificadores de usuario, recomendamos políticas de grupo, que pueden ser persistentes y más fáciles de auditar.
Supongamos que su proveedor crea tokens de identidad que incluyen los siguientes campos:
{ 'iss': 'https://server.example.com' 'sub': 'u98523-4509823' 'groupList': ['developers@example.corp', 'us-east1-cluster-admins@example.corp'] ... }
Dado este formato de token, deberá completar la especificación oidc
de su archivo de configuración de la siguiente manera:
issuerURL: 'https://server.example.com' username: 'sub' usernamePrefix: 'uid-' group: 'groupList' groupPrefix: 'gid-' extraParams: 'resource=token-groups-claim' ...
Después de haber creado su clúster de usuarios, utilice el control de acceso basado en roles (RBAC) de Kubernetes para otorgar acceso privilegiado a los usuarios autenticados.
En el siguiente ejemplo, crea un ClusterRole
que otorga a sus usuarios acceso de solo lectura a los secretos del clúster y crea un recurso ClusterRoleBinding
para vincular el rol al grupo autenticado.
Define un
ClusterRole
. Copia el siguiente YAML en un archivo llamadosecret-reader-role.yaml
.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: secret-reader rules: - apiGroups: [""] # The resource type for which access is granted resources: ["secrets"] # The permissions granted by the ClusterRole verbs: ["get", "watch", "list"]
Define un
ClusterRoleBinding
. Copia el siguiente YAML en un archivo llamadosecret-reader-admins.yaml
.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: read-secrets-admins subjects: # Allows anyone in the "us-east1-cluster-admins" group to # read Secrets in any namespace within this cluster. - kind: Group name: gid-us-east1-cluster-admins # Name is case sensitive apiGroup: rbac.authorization.k8s.io # Allows this specific user to read Secrets in any # namespace within this cluster - kind: User name: uid-u98523-4509823 apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: secret-reader apiGroup: rbac.authorization.k8s.io
Aplique
secret-reader-role.yaml
ysecret-reader-admins.yaml
a su clúster conkubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f secret-reader-role.yaml && \ kubectl apply -f secret-reader-admins.yaml
Los usuarios a los que se les otorga acceso en
read-secrets-admins
ahora tienen acceso para leer secretos en su clúster.
Crear una configuración de inicio de sesión
Esta sección es para administradores de clúster .
Después de crear un clúster de usuarios, debe generar un archivo de configuración para el clúster usando gcloud anthos create-login-config
.
Desde su directorio
anthos-aws
, useanthos-gke
para cambiar el contexto a su clúster de usuarios. Reemplace CLUSTER_NAME con el nombre de su clúster de usuarios.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Crea la configuración con
gcloud anthos
.gcloud anthos create-login-config --kubeconfig usercluster-kubeconfig
Reemplace usercluster-kubeconfig con la ruta del archivo
kubeconfig
de su clúster de usuarios. En Linux y macOS, este archivo se encuentra de forma predeterminada en~/.kube/config
.
Este comando genera un archivo ( kubectl-anthos-config.yaml
) que contiene la información de configuración que los desarrolladores usan para autenticarse en el clúster con la CLI de gcloud. No debe modificar este archivo.
Para comprender más sobre el contenido de kubectl-anthos-config.yaml
, consulte el apéndice .
Distribuir la configuración de inicio de sesión
Distribuya el archivo de configuración a los usuarios que necesiten autenticarse en sus clústeres. Puede distribuir la configuración de la siguiente manera:
- Colocando el archivo en el directorio predeterminado.
- Distribuir el archivo de forma segura.
- Alojar el archivo en un servidor HTTPS.
Directorios predeterminados de configuración de inicio de sesión
Las ubicaciones predeterminadas para almacenar el archivo de configuración para cada sistema operativo son las siguientes:
- Linux
-
$HOME/.config/google/anthos/kubectl-anthos-config.yaml
, donde$HOME
es el directorio de inicio del usuario. - macOS
-
$HOME/Library/Preferences/google/anthos/kubectl-anthos-config.yaml
, donde$HOME
es el directorio de inicio del usuario. - Ventanas
-
%APPDATA%/google/anthos/kubectl-anthos-config.yaml
, donde%APPDATA%
es el directorio de datos de la aplicación del usuario.
Una vez distribuida la configuración de inicio de sesión, los desarrolladores están listos para configurar la CLI de gcloud para acceder al clúster.
Modifique su clúster después de actualizar a Kubernetes 1.21
Después de actualizar su clúster a Kubernetes 1.21, debe configurar el Servicio de Identidad de GKE y eliminar la información de OIDC de la configuración del clúster. Para actualizar la configuración, siga estos pasos:
Siga los pasos que se indican en Actualizar su clúster .
Desde su directorio
anthos-aws
, useanthos-gke
para cambiar el contexto a su clúster de usuarios. Reemplace CLUSTER_NAME con el nombre de su clúster de usuarios.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Abra el manifiesto que contiene el clúster de AWS en un editor de texto. Mantenga el archivo abierto y use los valores del objeto
oidc
para seguir los pasos de la sección "Configuración de clústeres para el Servicio de Identidad de GKE" .Desde su directorio
anthos-aws
, useanthos-gke
para cambiar el contexto a su servicio de administración.cd anthos-aws anthos-gke aws management get-credentials
Abra el archivo YAML que creó su AWSCluster en un editor de texto. Si no tiene el archivo YAML inicial, puede usar
kubectl edit
.Editar YAML
Si siguió las instrucciones de "Crear un clúster de usuarios" , su archivo YAML se llamará
cluster-0.yaml
. Abra este archivo en un editor de texto.edición de kubectl
Para usar
kubectl edit
para editar su AWSCluster, ejecute el siguiente comando:env HTTPS_PROXY=http://localhost:8118 \ kubectl edit awscluster cluster-name
Reemplace cluster-name por su clúster de AWS. Por ejemplo, para editar el clúster predeterminado,
cluster-0
, ejecute el siguiente comando:env HTTPS_PROXY=http://localhost:8118 \ kubectl edit awscluster cluster-0
Elimina el objeto
oidc
del manifiesto de tu clúster.Guarde el archivo. Si usa
kubectl edit
,kubectl
aplicará los cambios automáticamente. Si edita el archivo YAML, aplíquelo a su servicio de administración con el siguiente comando:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f cluster-0.yaml
A continuación, el servicio de administración actualiza su AWSCluster.
Configurar gcloud para acceder a su clúster
Esta sección es para desarrolladores o administradores de clúster .
Prerrequisitos
Para completar esta sección, deberá completar lo siguiente:
- Una configuración de inicio de sesión .
Una versión actualizada de la CLI de gcloud con los componentes
anthos-auth
.gcloud components update gcloud components install anthos-auth
Verifique que la CLI de gcloud se haya instalado correctamente ejecutando el siguiente comando, que debería responder con detalles sobre los argumentos requeridos y las opciones disponibles.
gcloud anthos auth
Autenticarse en su clúster
Puede autenticarse en su clúster de las siguientes maneras:
- Con la CLI de gcloud en su máquina local.
- Con la CLI de gcloud en una máquina remota usando un túnel SSH.
Con Connect en el Google Cloud consola.
gcloud local
Utilice gcloud anthos auth login
para autenticarse en su clúster con su configuración de inicio de sesión.
Si colocaste la configuración de inicio de sesión en la ubicación predeterminada y configuraste el nombre del clúster, puedes usar gcloud anthos auth login
sin opciones. También puedes configurar el clúster, el usuario y otros detalles de autenticación con parámetros opcionales.
Por defecto
gcloud anthos auth login --cluster CLUSTER_NAME
Reemplace CLUSTER_NAME con un nombre de clúster completo. Por ejemplo, projects/my-gcp-project/locations/global/memberships/cluster-0-0123456a
.
Parámetros opcionales
gcloud anthos auth login
admite los siguientes parámetros opcionales:
gcloud anthos auth login --cluster CLUSTER_NAME \
--user USERNAME --login-config ANTHOS_CONFIG_YAML \
--login-config-cert LOGIN_CONFIG_CERT_PEM \
--kubeconfig=KUBECONFIG --dry-run
Los parámetros se describen en la siguiente tabla.
Parámetro | Descripción |
---|---|
cluster | El nombre del clúster para la autenticación. El valor predeterminado es el clúster en `kubectl-anthos-config.yaml`. |
user | Nombre de usuario para las credenciales en kubeconfig . El valor predeterminado es {cluster-name}-anthos-default-user . |
login-config | La ruta al archivo de configuración generado por el administrador del clúster para el desarrollador o la URL que aloja el archivo. El valor predeterminado es kubectl-anthos-config.yaml . |
login-config-cert | Si se utiliza una URL para login-config , la ruta al archivo de certificado de CA para realizar conexiones HTTPS. |
kubeconfig | Ruta al archivo kubeconfig que contiene los tokens. El valor predeterminado es $HOME/.kube/config` . |
prueba en seco | Pruebe sus opciones de línea de comandos sin cambiar su configuración o clúster. |
El comando gcloud anthos login
inicia un navegador que solicita al usuario iniciar sesión con sus credenciales empresariales, realiza el intercambio de credenciales OIDC y adquiere los tokens pertinentes. La CLI de gcloud escribe los tokens en un archivo kubeconfig
. kubectl
utiliza este archivo para autenticarse en el clúster de usuarios.
Para verificar que la autenticación fue exitosa, ejecute cualquier comando kubectl
con su archivo kubeconfig
:
env HTTPS_PROXY=http://localhost:8118 \
kubectl get nodes --kubeconfig my.kubeconfig
túnel de gcloud
Si desea autenticarse en un clúster de usuarios desde una máquina remota, puede hacerlo mediante un túnel SSH. Para usar un túnel, su archivo de configuración de autenticación debe estar en la máquina remota y debe poder acceder a su proveedor de Open ID desde su máquina local.
En su máquina local, ejecute el siguiente comando:
ssh USERNAME@REMOTE_MACHINE -L LOCAL_PORT:localhost:REMOTE_PORT
Reemplace lo siguiente:
USERNAME con un usuario que tenga acceso SSH a la máquina remota.
REMOTE_MACHINE con el nombre de host o la dirección IP de la máquina remota.
LOCAL_PORT es un puerto disponible en su máquina local que
ssh
usa para hacer un túnel a la máquina remota.REMOTE_PORT es el puerto que configuró para su URL de redireccionamiento de OIDC. El número de puerto forma parte del campo
kubectlRedirectURI
de su archivo de configuración de autenticación.
En su shell SSH, ejecute el siguiente comando para iniciar la autenticación:
gcloud anthos auth login --login-config AUTH_CONFIG_FILE
Reemplace AUTH_CONFIG_FILE con la ruta de su archivo de configuración de autenticación en el equipo remoto. La CLI de gcloud ejecuta un servidor web en el equipo remoto.
En su máquina local, en un navegador, vaya a http://localhost: LOCAL_PORT /login y siga el flujo de inicio de sesión de OIDC.
El archivo kubeconfig
en su máquina remota ahora tiene el token para acceder al clúster de usuarios.
En su shell SSH, verifique que tenga acceso al clúster de usuarios:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes
Consola
Puedes autenticarte con el Google Cloud consola, inicie el flujo de autenticación desde la página de clústeres de Kubernetes en el Google Cloud consola:
Abrir el Google Cloud consola:
Ubique su clúster de GKE en AWS en la lista y luego haga clic en Iniciar sesión .
Seleccione Autenticar con el proveedor de identidad configurado para el clúster y luego haga clic en INICIAR SESIÓN .
Serás redirigido a tu proveedor de identidad, donde es posible que tengas que iniciar sesión o dar tu consentimiento. Google Cloud consola accediendo a su cuenta. Luego será redirigido a la página de clústeres de Kubernetes en el Google Cloud consola.
Actualización de la configuración de OIDC
Para actualizar la configuración de OIDC en su clúster, utilice el comando kubectl edit
.
env HTTPS_PROXY=http://localhost:8118 \
kubectl edit clientconfigs -n kube-public default
La herramienta kubectl
carga el recurso ClientConfig en su editor predeterminado. Para actualizar la configuración, guarde el archivo. La herramienta kubectl
actualiza el recurso ClientConfig en su clúster.
Para obtener información sobre el contenido del recurso ClientConfig, consulte la siguiente sección.
Apéndice: Ejemplo de configuración de inicio de sesión
A continuación se muestra un ejemplo de kubectl-anthos-config.yaml
. Este ejemplo se incluye para comprender su contenido. Siempre debe generar el archivo con gcloud anthos create-login-config
.
apiVersion: authentication.gke.io/v2alpha1 kind: ClientConfig metadata: name: default namespace: kube-public spec: authentication: - name: oidc oidc: clientID: CLIENT_CONFIG clientSecret: CLIENT_SECRET extraParams: resource=k8s-group-claim,domain_hint=consumers certificateAuthorityData: CERTIFICATE_STRING issuerURI: https://adfs.contoso.com/adfs kubectlRedirectURI: http://redirect.kubectl.com/ scopes: allatclaim,group userClaim: "sub" groupsClaim: "groups" proxy: PROXY_URL #Optional certificateAuthorityData: CERTIFICATE_AUTHORITY_DATA name: projects/my-project/locations/global/membership/cluster-0 server: https://192.168.0.1:PORT preferredAuthentication: oidc
Para obtener explicaciones sobre el contenido de los campos, consulte Campos de autenticación .
¿Qué sigue?
Implemente su primera carga de trabajo en GKE en AWS.
A menos que se indique lo contrario, el contenido de esta página está sujeto a la licencia Reconocimiento 4.0 de Creative Commons y las muestras de código están sujetas a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio web de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-06-12 (UTC).