Tema 3 de 3
El apartado 4.2 termina con las formas seguras de autenticarse como una cuenta de servicio: suplantarla, usar credenciales de corta duración y federar identidades externas sin claves.
Contenido
Un principal autenticado (un usuario u otra cuenta de servicio) obtiene un token de la cuenta de servicio y lo usa para actuar como ella, con todos sus permisos. Siempre hay dos identidades: quien suplanta y la cuenta suplantada. Se parece a AssumeRole de AWS.
iam.serviceAccounts.getAccessToken, incluido en Service Account Token Creator (roles/iam.serviceAccountTokenCreator).gcloud iam service-accounts add-iam-policy-binding \ deployer@my-project.iam.gserviceaccount.com \ --member=user:ana@example.com --role=roles/iam.serviceAccountTokenCreator
# Un solo comando gcloud storage buckets list \ --impersonate-service-account=deployer@my-project.iam.gserviceaccount.com # Todos los comandos de gcloud gcloud config set auth/impersonate_service_account \ deployer@my-project.iam.gserviceaccount.com # Bibliotecas cliente en tu equipo (archivo de ADC) gcloud auth application-default login \ --impersonate-service-account deployer@my-project.iam.gserviceaccount.com
En los tres casos gcloud pide credenciales de corta duración para la cuenta de servicio y ejecuta las llamadas con ellas.
Según Google, son la forma más segura de autenticarse como una cuenta de servicio: un token de acceso OAuth 2.0 que caduca a la 1 hora por defecto y no se renueva solo. Suponen menos riesgo que las claves.
--impersonate-service-account, con una cuenta asociada a una VM (las bibliotecas cliente usan ADC) o con Workload Identity Federation.iam.allowServiceAccountCredentialLifetimeExtension. Los tokens de ID duran 1 hora.Con suplantación
La mayoría de los logs de auditoría registran las dos identidades: la cuenta suplantada y quien creó las credenciales. Excepciones: App Engine y GKE no registran quién creó las credenciales.
Con claves o cuentas asociadas
Solo aparece la cuenta de servicio, no la persona que usó la clave o ejecutó código en la VM. Eso crea riesgos de escalada de privilegios y de no repudio.
ADC es la estrategia que usan las bibliotecas para encontrar credenciales automáticamente según el entorno, de modo que el mismo código funciona en desarrollo y en producción. Orden de búsqueda:
GOOGLE_APPLICATION_CREDENTIALS (archivo de configuración de Workload o Workforce Identity Federation, o una clave, que no se recomienda).gcloud auth application-default login.El orden no indica cuál es mejor; solo dónde busca primero.
Da a cargas de trabajo on-premises o de otras nubes acceso a Google Cloud con identidades federadas, sin claves de cuentas de servicio. Funciona con AWS, Azure, Active Directory on-premises, GitHub, GitLab, certificados X.509 y cualquier IdP compatible con OIDC o SAML 2.0.
| Concepto | Qué es |
|---|---|
| Workload identity pool | Agrupa identidades externas. Google recomienda un pool por entorno (desarrollo, preproducción, producción) |
| Proveedor | Relación de confianza con el IdP (AWS, Entra ID, GitHub, Okta…) |
| Asignación de atributos | Expresiones CEL que pasan los claims del IdP a google.subject (obligatorio), google.groups y hasta 50 attribute.* |
| Condición de atributos | Expresión CEL que acepta o rechaza credenciales; limita qué identidades pueden autenticarse |
principal://… o principalSet://… sobre los recursos. La alternativa es suplantar una cuenta de servicio, que necesita roles/iam.workloadIdentityUser.Es la forma recomendada de que los pods accedan a APIs de Google Cloud: cada aplicación tiene su identidad y se le conceden roles con IAM, sin archivos de claves. Google gestiona el pool y el proveedor.
PROJECT_ID.svc.id.goog, registra el clúster como proveedor y despliega el servidor de metadatos de GKE en cada nodo.gcloud container clusters update my-cluster --location=europe-west1 \ --workload-pool=my-project.svc.id.goog gcloud container node-pools update default-pool --cluster=my-cluster \ --location=europe-west1 --workload-metadata=GKE_METADATA # Dar acceso al ServiceAccount de Kubernetes "reader" del namespace "app" gcloud storage buckets add-iam-policy-binding gs://app-data --role=roles/storage.objectViewer \ --member=principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/my-project.svc.id.goog/subject/ns/app/sa/reader
Federa usuarios (empleados, socios, contratistas) desde un IdP externo compatible con OIDC o SAML 2.0 (Entra ID, AD FS, Okta…) para que entren en Google Cloud con SSO. No guarda cuentas en Google Cloud, así que no hace falta sincronizar con Google Cloud Directory Sync. Los workforce identity pools se configuran a nivel de organización y el acceso se concede con allow policies.
Workload Identity Federation
Federa cargas de trabajo: aplicaciones, pipelines, pods.
Workforce Identity Federation
Federa personas con SSO desde su IdP.
| Situación | Respuesta | Por qué |
|---|---|---|
| Probar si una cuenta de servicio tiene permisos suficientes antes de desplegar | Suplantarla con --impersonate-service-account | Sin claves; credenciales de corta duración. |
| Dar a un usuario acceso elevado temporal sin cambiar las políticas de los recursos | Token Creator sobre una cuenta de servicio con esos permisos | Suplantación para elevar temporalmente. |
| Que gcloud use siempre una cuenta de servicio en tu equipo | gcloud config set auth/impersonate_service_account | Propiedad de configuración. |
| Desarrollar en local una aplicación que solo funciona como cuenta de servicio | gcloud auth application-default login --impersonate-service-account | Las bibliotecas cliente suplantan la cuenta. |
| Un pipeline de GitHub Actions debe desplegar en Google Cloud | Workload Identity Federation con un proveedor OIDC de GitHub | Sin claves de cuentas de servicio. |
| Una aplicación en AWS debe leer de BigQuery | Workload Identity Federation con proveedor AWS | Intercambio de tokens con el Security Token Service. |
| Un pod de GKE debe escribir en un bucket | Workload Identity Federation for GKE y un rol para el ServiceAccount de Kubernetes | Activado siempre en Autopilot. |
| Los empleados deben entrar con Okta sin sincronizar cuentas a Google | Workforce Identity Federation | SSO sin GCDS. |
❓ ¿Qué rol necesitas para suplantar una cuenta de servicio?
Service Account Token Creator (iam.serviceAccounts.getAccessToken). Service Account User sirve para asociarla a recursos.
❓ ¿Se puede suplantar una cuenta de servicio desde la consola?
No. En la consola siempre usas tus credenciales de usuario; la suplantación se hace con gcloud, ADC o la API.
❓ ¿Cuánto dura por defecto un token de acceso de corta duración?
1 hora. Se puede ampliar a 12 horas con la restricción iam.allowServiceAccountCredentialLifetimeExtension.
❓ Una aplicación en Azure necesita acceder a Google Cloud. ¿Creas una clave?
No. Workload Identity Federation evita las claves; es la opción recomendada.
❓ ¿Activar Workload Identity Federation for GKE da permisos a los pods?
No. Hay que conceder roles al principal del ServiceAccount de Kubernetes.
❓ ¿Workforce o Workload Identity Federation para que los empleados entren con su IdP?
Workforce: federa personas. Workload federa aplicaciones.
¿Entendiste este tema?
Pon a prueba lo que acabas de aprender
Un pipeline de GitHub Actions despliega en Cloud Run usando una clave JSON de una cuenta de servicio guardada como secreto del repositorio. El equipo de seguridad quiere eliminar esa clave. ¿Qué haces?
Preguntas originales, cada una con su explicación.
Empezar un simulacroInicia sesión para guardar tu progreso.
Terminaste el último tema de este deep dive.
Volver al índice →