Las cargas de trabajo de GKE necesitan acceder a las APIs de GCP sin gestionar claves de cuentas de servicio.
→Habilitar y configurar Workload Identity en el clúster de GKE. Mapear las cuentas de servicio de Kubernetes (KSA) a las cuentas de servicio de Google (GSA).
Por qué: Elimina el riesgo de filtración de claves de cuentas de servicio mediante el uso de credenciales de corta duración y rotación automática derivadas de tokens de KSA.
Referencia↗
Proporcionar acceso a aplicaciones web internas desde cualquier red basado en la identidad del usuario y la postura del dispositivo, sin una VPN.
→Utilizar Identity-Aware Proxy (IAP) con Access Context Manager. Definir niveles de acceso basados en IP, estado del dispositivo (mediante Endpoint Verification) e identidad del usuario.
Por qué: Traslada el control de acceso del perímetro de la red a usuarios y dispositivos individuales, aplicando principios de confianza cero.
Referencia↗
Una pipeline de CI/CD (por ejemplo, GitHub Actions, GitLab) necesita acceder a recursos de GCP sin credenciales de larga duración.
→Utilizar Workload Identity Federation. Crear un pool de proveedores para el IdP externo (por ejemplo, GitHub OIDC) y configurar condiciones de atributos para restringir el acceso a repositorios o ramas específicos.
Por qué: Autenticación sin claves para cargas de trabajo externas. El sistema externo proporciona su propio token, que se intercambia por un token de GCP de corta duración.
Aplicar políticas de seguridad de IAM en toda la organización, como evitar la creación de claves de cuentas de servicio o restringir las concesiones de IAM a dominios específicos.
→Utilizar restricciones de Organization Policy como `iam.disableServiceAccountKeyCreation` y `iam.allowedPolicyMemberDomains`.
Por qué: Las Organization Policies se heredan y no pueden ser anuladas por los propietarios de proyectos, asegurando una postura de seguridad consistente.
Un usuario necesita acceso administrativo temporal, auditable y sujeto a aprobación a un entorno de producción para un incidente.
→Utilizar Privileged Access Manager (PAM) para acceso just-in-time (JIT). El usuario solicita un rol específico por un tiempo limitado, lo cual pasa por un flujo de trabajo de aprobación.
Por qué: Elimina los privilegios permanentes, un riesgo de seguridad importante. El acceso está limitado en el tiempo, justificado y completamente auditado.
Varios equipos comparten un clúster de GKE. Cada equipo debe gestionar recursos únicamente dentro de su propio namespace.
→Conceder el rol de IAM `roles/container.clusterViewer` a nivel de proyecto. Utilizar `Role` y `RoleBinding` de Kubernetes RBAC dentro de cada namespace para otorgar permisos específicos (por ejemplo, editar, ver).
Por qué: Separa la autenticación a nivel de clúster (IAM) de la autorización a nivel de namespace (Kubernetes RBAC), proporcionando un control multi-inquilino de grano fino.
Las APIs deben ser llamadas usando credenciales de corta duración en lugar de claves estáticas.
→Utilizar la suplantación de cuenta de servicio. Conceder a un principal el rol `roles/iam.serviceAccountTokenCreator` en una cuenta de servicio objetivo para generar tokens de acceso OAuth 2.0 de corta duración.
Por qué: Evita distribuir y gestionar claves de larga duración. Los tokens expiran automáticamente (por defecto 1 hora), reduciendo el riesgo si son comprometidos.
Un contratista necesita acceso a recursos específicos, pero el acceso debe expirar automáticamente después de 30 días.
→Conceder el rol de IAM necesario con una condición de IAM basada en el tiempo, por ejemplo, `request.time < timestamp("YYYY-MM-DDTHH:MM:SSZ")`.
Por qué: Automatiza la revocación del acceso, evitando la limpieza manual y asegurando que el acceso no se prolongue inadvertidamente.
Permitir únicamente que las imágenes de contenedores firmadas por la pipeline de CI/CD sean desplegadas en clústeres de GKE de producción.
→Implementar Binary Authorization. Crear una atestación en la pipeline de CI para firmar imágenes. Configurar una política de Binary Authorization en el clúster de GKE para requerir esta atestación.
Por qué: Aplica una cadena de suministro de software segura al prevenir que imágenes no verificadas o manipuladas se ejecuten en producción.
Referencia↗
Conceder permisos a recursos basados en sus etiquetas asignadas, no en nombres de recursos individuales.
→Utilizar IAM Conditions con expresiones de etiquetas de recursos, como `resource.matchTag("123456789/env", "prod")`.
Por qué: Habilita un control de acceso basado en atributos (ABAC) escalable. Los permisos son dinámicos y se aplican automáticamente a medida que se etiquetan los recursos.
Permitir que un proyecto de servicio despliegue VMs en un proyecto host de Shared VPC sin conceder derechos de administrador de red.
→En el proyecto host, conceder a la cuenta de servicio del proyecto de servicio el rol `roles/compute.networkUser` en la(s) subred(es) específica(s) que necesita usar.
Por qué: Sigue el principio de mínimo privilegio. Los proyectos de servicio pueden usar la red pero no modificarla (por ejemplo, cambiar reglas de firewall), la cual permanece gestionada centralmente.
Un usuario con `storage.admin` no puede crear un bucket. Necesita identificar la causa raíz.
→Verificar si existe una política de Denegación de IAM a un nivel superior (carpeta, organización) que deniegue el permiso `storage.buckets.create`.
Por qué: Las políticas de Denegación de IAM siempre anulan cualquier política de permiso. Esta es una herramienta poderosa para aplicar límites de seguridad no negociables.
Habilitar SSO para usuarios de Active Directory en las instalaciones para acceder a la consola de Google Cloud.
→Utilizar Google Cloud Directory Sync (GCDS) para sincronizar identidades con Cloud Identity. Configurar la federación (SAML) entre Cloud Identity y AD FS (u otro IdP).
Por qué: Mantiene AD como la fuente de verdad para las identidades mientras proporciona una experiencia SSO federada y sin interrupciones para los usuarios.