En esta página, se describen las cuentas de servicio en Google Kubernetes Engine (GKE) y cómo proporcionan identidades para las aplicaciones. Aprenderás sobre los diferentes tipos de cuentas de servicio y cuándo usar cada tipo para autenticar el acceso a los recursos dentro de GKE sin depender de credenciales personales.
Esta página está dirigida a operadores y especialistas en seguridad que crean y administran cuentas de servicio para interactuar con aplicaciones de GKE. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles y tareas comunes de los usuarios de GKE.
Cuentas de servicio de Kubernetes y cuentas de servicio de IAM
En la siguiente tabla, se describen las principales diferencias 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 |
|
Cuenta de servicio de IAM |
|
Cuentas de servicio de Kubernetes
Las cuentas de servicio de Kubernetes se administran a nivel del clúster y existen en el servidor de la API de Kubernetes como objetos ServiceAccount
. En la documentación de Kubernetes y 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.
Creas una ServiceAccount de Kubernetes en un espacio de nombres y, luego, le asignas esa ServiceAccount a un Pod con el campo serviceAccountName
en el manifiesto del Pod. El proceso de kubelet en el nodo obtiene un token de portador de corta duración para la cuenta de servicio asignada y activa el token como un volumen proyectado en el Pod. De forma predeterminada, este volumen proyectado tiene un nombre que comienza con el prefijo kube-api-access-
. GKE administra todos los volúmenes que comienzan con este prefijo, lo que significa que no puedes modificar el tamaño de estos volúmenes. Para supervisar el uso del disco con mayor precisión, excluye de la configuración de supervisión los volúmenes que comiencen con el prefijo kube-api-access-
.
El token del portador de corta duración es un token web JSON (JWT) firmado por 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.
- Para conocer los conceptos básicos de las cuentas de servicio de Kubernetes, consulta Cuentas de servicio en la documentación de Kubernetes.
- Para obtener información sobre cómo crear cuentas de servicio nuevas, otorgar permisos mediante el control de acceso basado en roles (RBAC) y asignar cuentas de servicio a los Pods, consulta Configura cuentas de servicio para Pods.
- Si deseas conocer las prácticas recomendadas sobre la administración de las cuentas de servicio de Kubernetes, consulta Prácticas recomendadas para el RBAC.
- Para leer la configuración de OIDC del servidor de la API de Kubernetes de un clúster, llama al método
projects.locations.clusters.well-known.getOpenid-configuration
en la API de GKE.
Credenciales de la cuenta de servicio de Kubernetes comprometidas
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 de portador está vinculado al UID del objeto ServiceAccount en la API de Kubernetes. Borra la ServiceAccount y crea una nueva con el mismo nombre. Los tokens anteriores dejan de ser válidos porque el UID de la nueva ServiceAccount 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 del proyecto con la API de IAM. Puedes usar estas cuentas de servicio para realizar acciones como llamar a las APIs de Google Cloudde 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 Google Cloud administra. GKE usa los siguientes dos agentes de servicio:
- Agente de servicio de Kubernetes Engine
- Agente de servicio de nodos predeterminado de Kubernetes Engine
Agente de servicios de Kubernetes Engine
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 tu número de proyecto numérico.
Agente de servicio de nodos predeterminado de Kubernetes Engine
GKE usa el agente de servicio de nodo predeterminado de Kubernetes Engine para admitir el registro y la supervisión de los nodos de Kubernetes para los clústeres que usan la versión 1.33 y versiones posteriores de Kubernetes. Este agente de servicio tiene el dominio gcp-sa-gkenode.iam.gserviceaccount.com
y se le otorga el rol Agente de servicio de nodo predeterminado de Kubernetes Engine (roles/container.defaultNodeServiceAgent
) en tu proyecto cuando habilitas la API de GKE.
El identificador de este agente de servicio es el siguiente:
service-PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com
PROJECT_NUMBER
es tu número de proyecto numérico.
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.
Cuenta de servicio de los nodos de GKE predeterminada
GKE usa cuentas de servicio de IAM que se adjuntan a tus nodos para ejecutar tareas del sistema, como el registro y la supervisión. Como mínimo, estas cuentas de servicio de nodo deben tener el rol de cuenta de servicio de nodo predeterminado de Kubernetes Engine (roles/container.defaultNodeServiceAccount
) en tu proyecto. De forma predeterminada, GKE usa la cuenta de servicio predeterminada de Compute Engine, que se crea automáticamente en tu proyecto, como la cuenta de servicio del nodo.
Si tu organización aplica la restricción de la política de la organización iam.automaticIamGrantsForDefaultServiceAccounts
, es posible que la cuenta de servicio predeterminada de Compute Engine en tu proyecto no obtenga automáticamente los permisos requeridos para GKE.
Si usas la cuenta de servicio predeterminada de Compute Engine para otras funciones en tu proyecto u organización, es posible que la cuenta de servicio tenga más permisos de los que necesita GKE, lo que podría exponerte a riesgos de seguridad.
Para otorgar el rol roles/container.defaultNodeServiceAccount
a la cuenta de servicio predeterminada de Compute Engine, completa los siguientes pasos:
Console
- Ve a la página Bienvenido:
- En el campo Número del proyecto, haz clic en Copiar en el portapapeles.
- Ve a la página IAM:
- Haz clic en Grant access.
- En el campo Principales nuevas, especifica el siguiente valor:
ReemplazaPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
por el número de proyecto que copiaste. - En el menú Selecciona un rol, selecciona el rol de Cuenta de servicio de nodo predeterminado de Kubernetes Engine.
- Haz clic en Guardar.
gcloud
- Busca tu Google Cloud número de proyecto:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Reemplaza
PROJECT_ID
con el ID del proyecto.El resultado es similar a este:
12345678901
- Otorga el rol
roles/container.defaultNodeServiceAccount
a la cuenta de servicio predeterminada de Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Reemplaza
PROJECT_NUMBER
por el número de proyecto del paso anterior.
No inhabilites la cuenta de servicio predeterminada de Compute Engine, a menos que migres a cuentas de servicio administradas por el usuario.
Cuándo usar una cuenta de servicio específica
El tipo de cuenta de servicio que uses dependerá del tipo de identidad que desees 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.
¿Qué sigue?
- Obtén más información sobre cómo usar cuentas de servicio de Google con privilegios mínimos.
- Obtén más información para otorgar una función a una principal.