Tema 1 de 3
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.
Contenido
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.
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
}condition (la 2 es interna).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.
| Tipo | Detalle |
|---|---|
| Básicos | Muy permisivos, con miles de permisos de todos los servicios. Google pide no usarlos en producción salvo que no haya alternativa |
| Predefinidos | Creados y mantenidos por Google para tareas concretas de cada servicio; se actualizan solos cuando hay funciones nuevas. Ej.: roles/pubsub.publisher |
| Personalizados | Los 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.Roles básicos heredados (legacy)
roles/viewer, roles/editor y roles/owner, anteriores a IAM (antes «primitivos»).SUPPORTED, TESTING o NOT_SUPPORTED.getIamPolicy además de setIamPolicy. Conviene partir de un rol predefinido.ALPHA, BETA, GA, DEPRECATED. Con DISABLED el rol sigue en las políticas pero no tiene efecto.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
# 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
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.gcloud resource-manager folders), organizaciones y recursos concretos.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/')allUsers o allAuthenticatedUsers.Políticas de denegación (deny)
exceptionPrincipals, exceptionPermissions).Principal Access Boundary (PAB)
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.
| Herramienta | Responde 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 roles | Quitar o sustituir roles con permisos que sobran |
| Activity Analyzer | Cuándo se usaron por última vez las cuentas de servicio y sus claves |
| Insights de cuentas de servicio | Cuentas de servicio sin usar en los últimos 90 días |
| Insights de movimiento lateral | Roles que dejan a una cuenta de servicio suplantar a otra de otro proyecto |
| Situación | Respuesta | Por qué |
|---|---|---|
| Dar al equipo de datos acceso de lectura a todos los proyectos de una carpeta | Conceder el rol predefinido al grupo en la carpeta | Se hereda; los grupos simplifican la gestión. |
| Ningún rol predefinido encaja y el de más se excede en permisos | Rol personalizado a nivel de proyecto u organización | Mínimo privilegio; no existe a nivel de carpeta. |
| Dar acceso a un contratista solo hasta fin de mes | Vinculación de rol con condición request.time | Necesita política versión 3. |
| Impedir que nadie salvo un grupo borre proyectos en toda la organización | Política de denegación con exceptionPrincipals | Se evalúa antes que las allow. |
| Saber por qué un usuario no puede leer un bucket | Policy Troubleshooter | Explica qué política concede o deniega. |
| Saber quién tiene acceso a un dataset de BigQuery | Policy Analyzer | Analiza las allow policies. |
| Quitar permisos que un usuario no ha usado en meses | Recomendaciones de roles (IAM recommender) | Sugiere quitar o sustituir roles. |
| Evitar que las cuentas de servicio accedan a recursos de otras organizaciones | Política de Principal Access Boundary | Define a qué recursos pueden acceder los principales. |
❓ ¿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?
Preguntas originales, cada una con su explicación.
Empezar un simulacro