Brains4Cloud
ESEN
Practicar

Tema 1 de 3

D4 · Configurar el acceso y la seguridad

IAM: políticas, herencia y roles

El apartado 4.1 del temario trata de gestionar IAM: ver y modificar políticas, entender la herencia en la jerarquía de recursos, elegir entre roles básicos, predefinidos y personalizados, y aplicar el mínimo privilegio.

IAM controla quién puede hacer qué sobre qué recurso. Para dar acceso se concede un rol a un principal sobre un recurso. Los permisos no se conceden directamente: siempre van dentro de roles.

Principal

Personas: cuentas de Google, grupos de Google e identidades federadas de workforce pools. Cargas de trabajo: cuentas de servicio e identidades de workload identity pools. Antes se llamaban «members».

Rol

Conjunto de permisos con formato servicio.recurso.verbo, por ejemplo resourcemanager.projects.list.

Recurso

Un recurso de un servicio (VM, bucket, tema) o un contenedor: proyecto, carpeta u organización.

Políticas de permiso (allow policies)

Una allow policy (antes «política de IAM») es un objeto JSON o YAML asociado a un recurso con una lista de vinculaciones de rol (role bindings): cada una une un rol con los principales que lo tienen.

{
  "bindings": [
    { "role": "roles/storage.objectViewer",
      "members": ["group:analysts@example.com"] },
    { "role": "roles/compute.instanceAdmin.v1",
      "members": ["user:ana@example.com"],
      "condition": { "title": "until-dec",
        "expression": "request.time < timestamp('2026-12-31T00:00:00Z')" } }
  ],
  "etag": "BwUjMhCsNvY=",
  "version": 3
}
  • Hasta 1500 principales por política.
  • El etag controla la concurrencia: evita que dos cambios simultáneos se pisen.
  • Versión: la 1 no admite condiciones; la 3 añade el campo condition (la 2 es interna).
  • Los cambios suelen aplicarse en unos 2 minutos, pero a veces tardan 7 minutos o más.

Herencia y política efectiva

Una allow policy en un contenedor se aplica a ese contenedor y a todo lo que tiene debajo: organización → carpetas → proyectos → recursos. La política efectiva de un recurso es la unión de su política y las de todos sus antecesores: basta con que una vinculación de cualquier nivel conceda el acceso.

  • Un permiso concedido arriba no se puede quitar con una allow policy más abajo. Para restringir hace falta una política de denegación.
  • Los recursos que no admiten allow policy propia (por ejemplo, los buckets de logs) heredan las de sus antecesores: se concede el rol en el proyecto.
  • Buenas prácticas de Google: conceder roles a grupos en lugar de a usuarios sueltos; pocos equipos con roles en la organización (seguridad, red); carpetas que reflejen la estructura de la empresa.

TipoDetalle
BásicosMuy permisivos, con miles de permisos de todos los servicios. Google pide no usarlos en producción salvo que no haya alternativa
PredefinidosCreados y mantenidos por Google para tareas concretas de cada servicio; se actualizan solos cuando hay funciones nuevas. Ej.: roles/pubsub.publisher
PersonalizadosLos creas tú con los permisos exactos. Ayudan al mínimo privilegio, pero el mantenimiento es tuyo

Roles básicos (vista previa)

  • roles/reader: acciones de solo lectura.
  • roles/writer: Reader más acciones que cambian el estado.
  • roles/admin: Writer más tareas sensibles, como gestionar roles y permisos o configurar la facturación.
  • No se conceden desde la consola: con la API o gcloud.

Roles básicos heredados (legacy)

  • roles/viewer, roles/editor y roles/owner, anteriores a IAM (antes «primitivos»).
  • Dan además permisos especiales de servicios, como los valores de conveniencia de Cloud Storage.
  • No admiten condiciones.
  • Owner no incluye todos los permisos: por ejemplo, no puede cambiar los datos de pago ni crear políticas de denegación.

Crear y gestionar roles personalizados

  • Se crean en una organización o un proyecto, nunca en una carpeta (para usarlo en una carpeta, créalo en la organización). Solo se pueden conceder dentro de esa organización o proyecto.
  • Límite: 300 por organización y 300 por proyecto.
  • Un rol de proyecto no puede incluir permisos que solo funcionan a nivel de carpeta u organización.
  • No todos los permisos se admiten: cada uno tiene nivel SUPPORTED, TESTING o NOT_SUPPORTED.
  • Algunos permisos van en pareja: para actualizar una política se necesita getIamPolicy además de setIamPolicy. Conviene partir de un rol predefinido.
  • Fase de lanzamiento informativa: ALPHA, BETA, GA, DEPRECATED. Con DISABLED el rol sigue en las políticas pero no tiene efecto.
  • El ID del rol no se puede cambiar. Un rol borrado se puede recuperar durante 7 días, y su ID no se puede reutilizar hasta pasados 44 días.
  • Quien puede editar roles personalizados puede añadirse cualquier permiso: limita ese poder a muy pocas personas.
gcloud iam roles create vmOperator --project=my-project \
  --title="VM Operator" --description="Start and stop VMs" \
  --permissions="compute.instances.get,compute.instances.list,compute.instances.start,compute.instances.stop" \
  --stage=GA

gcloud iam roles create orgAuditor --organization=123456789012 --file=role.yaml
gcloud iam roles update vmOperator --project=my-project --stage=DISABLED
gcloud iam roles delete vmOperator --project=my-project
gcloud iam roles undelete vmOperator --project=my-project

Ver, conceder y revocar acceso

# Conceder o quitar un rol (cambio puntual)
gcloud projects add-iam-policy-binding my-project \
  --member=group:devs@example.com --role=roles/compute.viewer
gcloud projects remove-iam-policy-binding my-project \
  --member=group:devs@example.com --role=roles/compute.viewer

# Cambios masivos: leer, modificar y escribir
gcloud projects get-iam-policy my-project --format=json > policy.json
gcloud projects set-iam-policy my-project policy.json
  • Formato de los principales: user:, group:, serviceAccount:, domain:.
  • set-iam-policy sobrescribe la política entera. Sigue siempre el patrón leer-modificar-escribir para no borrar vinculaciones sin querer; el etag rechaza la escritura si otro la cambió entre medias.
  • Los mismos comandos existen para carpetas (gcloud resource-manager folders), organizaciones y recursos concretos.

IAM Conditions

Control de acceso basado en atributos: la vinculación solo concede el rol si la expresión, escrita en un subconjunto de CEL (Common Expression Language), es verdadera. Sirven, por ejemplo, para acceso temporal o limitado a recursos con cierto nombre. También se usan en reglas de denegación y en Principal Access Boundary.

request.time < timestamp('2026-12-31T00:00:00Z')
resource.name.startsWith('projects/_/buckets/exampleco-site-assets/')
  • No se pueden usar con los roles básicos heredados (Owner, Editor, Viewer) ni con allUsers o allAuthenticatedUsers.
  • Una vinculación condicional no anula una sin condición: si el principal ya tiene el rol sin condición, lo tiene siempre.
  • En un bucket de Cloud Storage requieren acceso uniforme a nivel de bucket.
  • Google recomienda no superar 100 vinculaciones condicionales por política.

Políticas de denegación (deny)

  • Impiden a ciertos principales usar ciertos permisos aunque tengan un rol que los incluya: IAM evalúa las deny antes que las allow.
  • Se asocian a un proyecto, carpeta u organización y se heredan hacia abajo.
  • Cada regla: principales denegados, permisos denegados, condición opcional y excepciones (exceptionPrincipals, exceptionPermissions).
  • Hasta 500 políticas de denegación por recurso.

Principal Access Boundary (PAB)

  • Se asocian a conjuntos de principales, no a recursos, y definen a qué recursos pueden optar a acceder.
  • Si un recurso queda fuera, no hay acceso aunque una allow policy lo conceda.
  • Útiles para impedir el acceso a recursos de otras organizaciones (phishing, exfiltración) o limitar cuentas de servicio a ciertos proyectos.
  • Solo bloquean los permisos admitidos.

Privileged Access Manager (PAM) permite que los principales pidan acceso temporal y auditable, con justificación o aprobación, en lugar de tener un rol de forma permanente.

Policy Analyzer, Troubleshooter y recomendaciones

HerramientaResponde a…
Policy Analyzer«¿Quién tiene acceso a esta cuenta de servicio?», «¿Qué datasets puede leer este usuario?» (de Cloud Asset Inventory)
Policy Troubleshooter«¿Por qué este usuario tiene, o no tiene, este permiso?»
Recomendaciones de rolesQuitar o sustituir roles con permisos que sobran
Activity AnalyzerCuándo se usaron por última vez las cuentas de servicio y sus claves
Insights de cuentas de servicioCuentas de servicio sin usar en los últimos 90 días
Insights de movimiento lateralRoles que dejan a una cuenta de servicio suplantar a otra de otro proyecto

Escenarios de examen

SituaciónRespuestaPor qué
Dar al equipo de datos acceso de lectura a todos los proyectos de una carpetaConceder el rol predefinido al grupo en la carpetaSe hereda; los grupos simplifican la gestión.
Ningún rol predefinido encaja y el de más se excede en permisosRol personalizado a nivel de proyecto u organizaciónMínimo privilegio; no existe a nivel de carpeta.
Dar acceso a un contratista solo hasta fin de mesVinculación de rol con condición request.timeNecesita política versión 3.
Impedir que nadie salvo un grupo borre proyectos en toda la organizaciónPolítica de denegación con exceptionPrincipalsSe evalúa antes que las allow.
Saber por qué un usuario no puede leer un bucketPolicy TroubleshooterExplica qué política concede o deniega.
Saber quién tiene acceso a un dataset de BigQueryPolicy AnalyzerAnaliza las allow policies.
Quitar permisos que un usuario no ha usado en mesesRecomendaciones de roles (IAM recommender)Sugiere quitar o sustituir roles.
Evitar que las cuentas de servicio accedan a recursos de otras organizacionesPolítica de Principal Access BoundaryDefine a qué recursos pueden acceder los principales.

Trampas frecuentes del examen

❓ ¿Se puede quitar en un proyecto un rol que se concedió en la carpeta?

No con una allow policy: la política efectiva es la unión de todos los niveles. Para bloquearlo se usa una política de denegación.

❓ ¿Se puede crear un rol personalizado a nivel de carpeta?

No. Solo en organización o proyecto; para una carpeta, créalo en la organización.

❓ ¿Se puede añadir una condición a una vinculación del rol Editor?

No. Los roles básicos heredados (Owner, Editor, Viewer) no admiten condiciones.

❓ ¿Qué pasa si ejecutas set-iam-policy con un archivo que solo tiene la vinculación nueva?

Sobrescribe la política entera y se pierden las demás vinculaciones. Hay que leer, modificar y escribir.

❓ ¿Owner tiene todos los permisos?

No. Por ejemplo, no puede modificar los datos de pago de Cloud Billing ni crear políticas de denegación.

❓ ¿Qué se evalúa primero, una deny o una allow?

La deny. Si deniega el permiso, da igual qué roles tenga el principal.

¿Entendiste este tema?

Pon a prueba lo que acabas de aprender

Un equipo de soporte solo debe poder arrancar y parar VMs en el proyecto prod. Ningún rol predefinido se limita a eso. Siguiendo las buenas prácticas, ¿qué haces?

¿Listo para poner a prueba "IAM: políticas, herencia y roles"?

Preguntas originales, cada una con su explicación.

Empezar un simulacro