Acerca de las cuentas de servicio en GKE


En esta página, se describen las cuentas de servicio en Google Kubernetes Engine (GKE), que proporcionan identidades para las aplicaciones.

Las cuentas de servicio son identidades destinadas a las aplicaciones en lugar de a las personas. En GKE, interactúas con las cuentas de servicio de Kubernetes y con las cuentas de servicio de la administración de identidades y accesos.

Cuentas de servicio de Kubernetes y cuentas de servicio de IAM

En la siguiente tabla, se describen las diferencias principales entre las cuentas de servicio de Kubernetes y las cuentas de servicio de IAM:

Tipos de cuentas de servicio en GKE
Cuenta de servicio de Kubernetes
  • Objeto ServiceAccount en el servidor de la API de Kubernetes
  • Con alcance a un espacio de nombres de Kubernetes en un clúster
  • Proporciona una identidad para que los Pods la usen dentro del clúster.
Cuenta de servicio de IAM
  • Administra mediante la API de IAM
  • Con alcance a un proyecto de Google Cloud
  • Proporciona una identidad para las aplicaciones en el proyecto

Cuentas de servicio de Kubernetes

Las cuentas de servicio de Kubernetes se administran a nivel de clúster y existen en el servidor de la API de Kubernetes como objetos ServiceAccount. En la documentación de Kubernetes y en la documentación de GKE, a menudo se usa el término ServiceAccount para distinguir estos recursos de Kubernetes de las cuentas de servicio en otros entornos como IAM.

Debes crear una ServiceAccount de Kubernetes en un espacio de nombres y, luego, asignarla a un Pod mediante el campo serviceAccountName en el manifiesto del Pod. El proceso de kubelet en el nodo obtiene un token del portador de corta duración para la ServiceAccount asignada y lo activa como un volumen proyectado en el Pod.

El token del portador de corta duración es un token web JSON (JWT) que firma el servidor de la API, que es un proveedor de OpenID Connect (OIDC). Para validar el token del portador, obtén la clave de validación pública para el clúster mediante una llamada al método projects.locations.clusters.getJwks en la API de GKE.

Rota las credenciales de la cuenta de servicio de Kubernetes

Si una credencial de cuenta de servicio de Kubernetes está comprometida, usa una de las siguientes opciones para revocar las credenciales:

  • Vuelve a crear tus Pods: El token del portador está vinculado a cada UID de Pod único, por lo que volver a crear los Pods invalida las credenciales anteriores.
  • Vuelve a crear la cuenta de servicio de Kubernetes: El token del portador está vinculado al UID del objeto ServiceAccount en la API de Kubernetes. Borra la ServiceAccount y crea una ServiceAccount nueva con el mismo nombre. Los tokens anteriores dejan de ser válidos porque el UID de la ServiceAccount nueva es diferente.
  • Realiza una rotación de credenciales: Esta operación revoca todas las credenciales de la cuenta de servicio de Kubernetes en tu clúster. La rotación también cambia el certificado de CA y la dirección IP de tu clúster. Para obtener más detalles, consulta Rotación de credenciales.

Cuentas de servicio de IAM

Las cuentas de servicio de IAM se administran a nivel de proyecto con la API de IAM. Puedes usar estas cuentas de servicio a fin de realizar acciones como llamar a las APIs de Google Cloud de manera programática y administrar permisos para las aplicaciones que se ejecutan en productos de Google Cloud.

Para obtener más información, consulta la descripción general de las cuentas de servicio de IAM.

Agentes de servicio de GKE

Un agente de servicio de IAM es una cuenta de servicio de IAM que administra Google Cloud.

GKE usa el agente de servicio de Kubernetes Engine para administrar el ciclo de vida de los recursos del clúster en tu nombre, como los nodos, los discos y los balanceadores de cargas. Este agente de servicio tiene el dominio container-engine-robot.iam.gserviceaccount.com y se le otorga el rol Agente de servicio de Kubernetes Engine (roles/container.serviceAgent) en tu proyecto cuando habilitas: la API de GKE.

El identificador de este agente de servicio es el siguiente:

service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com

PROJECT_NUMBER es el número de proyecto numérico.

Si inhabilitas el agente de servicio de GKE, puedes recuperarlo si sigues las instrucciones en Habilita una cuenta de servicio.

Si quitas los permisos del agente de servicio en tu proyecto, puedes recuperarlos si sigues las instrucciones de Error 400/403: Faltan permisos de edición en la cuenta.

Si borras el agente de servicio de GKE, puedes recuperarlo si sigues las instrucciones en Recupera una cuenta de servicio.

Cuenta de servicio de los nodos de GKE predeterminada

De forma predeterminada, tus nodos usan la cuenta de servicio predeterminada de Compute Engine. De forma predeterminada, a esta cuenta de servicio se le otorga la función de editor (roles/editor) y tiene más permisos que los necesarios para los nodos de GKE. Considera usar un rol que use los permisos mínimos necesarios para ejecutar nodos en el clúster.

No inhabilites la cuenta de servicio predeterminada de Compute Engine, a menos que migres a cuentas de servicio administradas por el usuario.

Permisos mínimos

GKE requiere un conjunto mínimo de permisos de IAM para operar el clúster. Para obtener instrucciones sobre cómo crear una cuenta de servicio de IAM con privilegios mínimos, consulta Usa cuentas de servicio de Google con privilegios mínimos.

Cuándo usar una cuenta de servicio específica

El tipo de cuenta de servicio que debes usar depende del tipo de identidad que deseas proporcionar para tus aplicaciones, de la siguiente manera:

  • Proporciona una identidad para que tus Pods la usen en el clúster: Usa una ServiceAccount de Kubernetes. Cada espacio de nombres de Kubernetes tiene una ServiceAccount default, pero te recomendamos que crees ServiceAccounts nuevas con privilegios mínimos para cada carga de trabajo en cada espacio de nombres.
  • Proporciona una identidad para que tus Pods se usen fuera del clúster: Usa la federación de identidades para cargas de trabajo para GKE. La federación de identidades para cargas de trabajo para GKE te permite especificar recursos de Kubernetes, como ServiceAccounts, como principales en las políticas de IAM. Por ejemplo, usa la federación de identidades para cargas de trabajo para GKE cuando llames a las APIs de Google Cloud, como Secret Manager o Spanner desde tus Pods.
  • Proporciona una identidad predeterminada para tus nodos: Usa una cuenta de servicio de IAM personalizada con privilegios mínimos cuando crees tus clústeres o nodos de GKE. Si no usas una cuenta de servicio de IAM personalizada, GKE usa la cuenta de servicio predeterminada de Compute Engine, que tiene permisos extensos dentro de tu proyecto.

¿Qué sigue?