Communitygithub.com

auditoria-de-permisos-iam-en-gcp

Auditoría de permisos IAM de Google Cloud Platform para identificar configuraciones excesivamente permisivas.

¿Qué es auditoria-de-permisos-iam-en-gcp?

Esta habilidad está diseñada para realizar auditorías de seguridad exhaustivas sobre las configuraciones de IAM (Identity and Access Management) de Google Cloud Platform (GCP). Permite a un agente de IA (como Claude Code, Cursor, Codex, etc.) enumerar enlaces IAM a nivel de organización, proyecto y carpeta; auditar cuentas de servicio y sus claves; utilizar el Recomendador de IAM de GCP para identificar permisos excesivos no utilizados; analizar permisos efectivos con el Analizador de Políticas; y detectar riesgos de delegación en todo el dominio y suplantación de identidad. La habilidad se apoya en herramientas como gcloud CLI, Cloud Asset Inventory, IAM Recommender y Policy Analyzer. Es útil para evaluaciones de seguridad, cumplimiento normativo y reducción del radio de explosión ante credenciales comprometidas. No debe usarse para auditorías de reglas de firewall de VPC, RBAC de GKE o detección de amenazas en tiempo real.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/mukul975/Anthropic-Cybersecurity-Skills/tree/main/skills/auditing-gcp-iam-permissions

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Auditoría de Permisos IAM en GCP

Cuándo Usarlo

  • Al realizar evaluaciones de seguridad de configuraciones IAM de organizaciones o proyectos de GCP
  • Al identificar cuentas de servicio con permisos excesivos o acceso no utilizado
  • Cuando los requisitos de cumplimiento exigen revisión de controles de acceso y asignaciones de roles
  • Al investigar posibles movimientos laterales a través de configuraciones IAM incorrectas
  • Al reducir el radio de explosión de credenciales comprometidas limitando permisos

No usar para auditoría de reglas de firewall de VPC (usar herramientas de seguridad de red), para auditoría de RBAC de GKE (usar herramientas específicas de RBAC de Kubernetes) o para detección de amenazas en tiempo real sobre acciones IAM (usar SCC Event Threat Detection).

Prerrequisitos

  • Organización o proyecto de GCP con roles/iam.securityReviewer y roles/cloudAsset.viewer
  • gcloud CLI autenticado con permisos apropiados
  • Cloud Asset API habilitada (gcloud services enable cloudasset.googleapis.com)
  • IAM Recommender API habilitada (gcloud services enable recommender.googleapis.com)
  • Policy Analyzer API habilitada (gcloud services enable policyanalyzer.googleapis.com)

Flujo de Trabajo

Paso 1: Enumerar Enlaces IAM en Toda la Organización

Listar todos los enlaces IAM a nivel de organización, carpeta y proyecto para comprender el panorama completo de acceso.

# Enlaces IAM a nivel de organización
gcloud organizations get-iam-policy ID_ORG \
  --format=json > org-iam-policy.json

# Buscar todas las políticas IAM en toda la organización
gcloud asset search-all-iam-policies \
  --scope=organizations/ID_ORG \
  --format="table(resource, policy.bindings.role, policy.bindings.members)" \
  --limit=500

# Encontrar todos los usuarios y cuentas de servicio con rol Owner
gcloud asset search-all-iam-policies \
  --scope=organizations/ID_ORG \
  --query="policy:roles/owner" \
  --format="table(resource, policy.bindings.members)"

# Encontrar todos los enlaces que usan roles primitivos (Owner, Editor, Viewer)
gcloud asset search-all-iam-policies \
  --scope=organizations/ID_ORG \
  --query="policy:roles/owner OR policy:roles/editor" \
  --format=json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for result in data:
    resource = result.get('resource', '')
    for binding in result.get('policy', {}).get('bindings', []):
        role = binding.get('role', '')
        if role in ['roles/owner', 'roles/editor']:
            for member in binding.get('members', []):
                print(f'{resource} | {role} | {member}')
"

Paso 2: Auditar Cuentas de Servicio y Sus Claves

Identificar cuentas de servicio con permisos excesivos, claves gestionadas por el usuario y cuentas no utilizadas.

# Listar todas las cuentas de servicio en un proyecto
gcloud iam service-accounts list \
  --project=ID_PROYECTO \
  --format="table(email, displayName, disabled)"

# Verificar claves gestionadas por el usuario (deben minimizarse)
for sa in $(gcloud iam service-accounts list --project=ID_PROYECTO --format="value(email)"); do
  keys=$(gcloud iam service-accounts keys list \
    --iam-account="$sa" \
    --managed-by=user \
    --format="table(name.basename(),validAfterTime,validBeforeTime)")
  if [ -n "$keys" ]; then
    echo "=== $sa ==="
    echo "$keys"
  fi
done

# Encontrar cuentas de servicio con roles de administrador en todos los proyectos
gcloud asset search-all-iam-policies \
  --scope=organizations/ID_ORG \
  --query="policy.bindings.members:serviceAccount AND (policy:roles/owner OR policy:roles/editor OR policy:admin)" \
  --format="table(resource, policy.bindings.role, policy.bindings.members)"

# Verificar políticas IAM de cuentas de servicio (quiénes pueden suplantar)
for sa in $(gcloud iam service-accounts list --project=ID_PROYECTO --format="value(email)"); do
  echo "=== $sa ==="
  gcloud iam service-accounts get-iam-policy "$sa" --format=json 2>/dev/null
done

Paso 3: Usar el Recomendador de IAM para Identificar Permisos Excesivos

Aprovechar el Recomendador de IAM de GCP para encontrar roles que otorgan más acceso del realmente utilizado.

# Listar recomendaciones de roles IAM para un proyecto
gcloud recommender recommendations list \
  --project=ID_PROYECTO \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --format="table(name, description, priority, stateInfo.state)"

# Obtener recomendación detallada
gcloud recommender recommendations describe ID_RECOMENDACION \
  --project=ID_PROYECTO \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --format=json

# Listar información sobre uso de IAM
gcloud recommender insights list \
  --project=ID_PROYECTO \
  --insight-type=google.iam.policy.Insight \
  --location=global \
  --format="table(name, description, severity, category)"

# Aplicar una recomendación (después de revisarla)
gcloud recommender recommendations mark-claimed ID_RECOMENDACION \
  --project=ID_PROYECTO \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --etag=ETAG

Paso 4: Analizar Permisos Efectivos con el Analizador de Políticas

Usar el Analizador de Políticas para determinar el acceso efectivo para entidades o recursos específicos.

# Verificar quién tiene acceso a un recurso específico
gcloud asset analyze-iam-policy \
  --organization=ID_ORG \
  --full-resource-name="//storage.googleapis.com/projects/_/buckets/sensitive-data-bucket" \
  --format="table(identityList.identities, accessControlLists.accesses.role)"

# Verificar a qué recursos puede acceder un usuario específico
gcloud asset analyze-iam-policy \
  --organization=ID_ORG \
  --identity="user:[email protected]" \
  --format="table(accessControlLists.resources.fullResourceName, accessControlLists.accesses.role)"

# Verificar quién puede realizar una acción específica
gcloud asset analyze-iam-policy \
  --organization=ID_ORG \
  --full-resource-name="//cloudresourcemanager.googleapis.com/projects/ID_PROYECTO" \
  --permissions="iam.serviceAccounts.actAs,iam.serviceAccountKeys.create" \
  --format="table(identityList.identities, accessControlLists.accesses.permission)"

# Encontrar todas las entidades con acceso allUsers o allAuthenticatedUsers
gcloud asset search-all-iam-policies \
  --scope=organizations/ID_ORG \
  --query="policy:allUsers OR policy:allAuthenticatedUsers" \
  --format="table(resource, policy.bindings.role, policy.bindings.members)"

Paso 5: Verificar Delegación en Todo el Dominio y Riesgos de Suplantación

Identificar cuentas de servicio con delegación en todo el dominio y capacidades de suplantación.

# Verificar cuentas de servicio con delegación en todo el dominio
# (Requiere acceso a Admin SDK para listar cuentas delegadas)
gcloud iam service-accounts list --project=ID_PROYECTO --format=json | python3 -c "
import json, sys
accounts = json.load(sys.stdin)
for sa in accounts:
    email = sa.get('email', '')
    # Verificar si la SA tiene habilitada la delegación en todo el dominio
    # Esto requiere acceso a la API de Admin SDK
    print(f'SA: {email} - Verificar admin.google.com para estado de delegación')
"

# Encontrar cuentas de servicio que otras identidades pueden suplantar
for sa in $(gcloud iam service-accounts list --project=ID_PROYECTO --format="value(email)"); do
  policy=$(gcloud iam service-accounts get-iam-policy "$sa" --format=json 2>/dev/null)
  if echo "$policy" | python3 -c "
import json, sys
p = json.load(sys.stdin)
for b in p.get('bindings', []):
    if b['role'] in ['roles/iam.serviceAccountTokenCreator', 'roles/iam.serviceAccountUser']:
        print(f'  {b[\"role\"]}: {b[\"members\"]}')
" 2>/dev/null; then
    echo "=== Riesgo de suplantación: $sa ==="
  fi
done

Paso 6: Generar Informe de Auditoría y Aplicar Correcciones

Compilar hallazgos e implementar reducciones de permisos recomendadas.

# Eliminar rol primitivo y reemplazar con rol predefinido
gcloud projects remove-iam-policy-binding ID_PROYECTO \
  --member="user:[email protected]" \
  --role="roles/editor"

gcloud projects add-iam-policy-binding ID_PROYECTO \
  --member="user:[email protected]" \
  --role="roles/compute.viewer"

gcloud projects add-iam-policy-binding ID_PROYECTO \
  --member="user:[email protected]" \
  --role="roles/storage.objectViewer"

# Eliminar claves de cuenta de servicio no utilizadas
gcloud iam service-accounts keys delete ID_CLAVE \
  --iam-account=CORREO_SA

# Deshabilitar cuentas de servicio no utilizadas
gcloud iam service-accounts disable CORREO_SA --project=ID_PROYECTO

Conceptos Clave

TérminoDefinición
Rol PrimitivoRoles heredados de GCP (Owner, Editor, Viewer) que otorgan permisos amplios en todos los servicios, no recomendados para producción
Rol PredefinidoRol gestionado por GCP limitado a servicios y acciones específicas, que proporciona un acceso más granular que los roles primitivos
Recomendador de IAMServicio de GCP basado en ML que analiza el uso real de permisos y sugiere reducciones de roles para lograr el mínimo privilegio
Analizador de PolíticasHerramienta para analizar el acceso IAM efectivo en la jerarquía de la organización, respondiendo consultas de quién-puede-acceder-a-qué
Clave de Cuenta de ServicioCredencial gestionada por el usuario para autenticación de cuentas de servicio, un riesgo de seguridad ya que las claves pueden exportarse y no expiran automáticamente
Delegación en Todo el DominioOtorga a una cuenta de servicio la capacidad de suplantar a cualquier usuario en el dominio de Google Workspace, un riesgo significativo de escalada de privilegios

Herramientas y Sistemas

  • gcloud CLI: Herramienta principal para consultar y gestionar políticas IAM, cuentas de servicio y enlaces de roles de GCP
  • Recomendador de IAM: Motor de recomendaciones basado en ML para reducir permisos excesivos según el uso real
  • Analizador de Políticas: Herramienta de análisis de acceso efectivo a nivel de organización para comprender quién puede acceder a qué
  • Cloud Asset Inventory: Búsqueda entre proyectos de políticas IAM y metadatos de recursos
  • ScoutSuite: Herramienta de auditoría multinube con comprobaciones específicas de IAM de GCP para asignaciones de roles y cuentas de servicio

Escenarios Comunes

Escenario: Reducir el Uso de Roles Primitivos en Toda una Organización de GCP

Contexto: Una auditoría revela que el 60% de los enlaces IAM en toda la organización usan roles primitivos (Owner/Editor). El equipo de seguridad necesita migrar a roles predefinidos sin interrumpir los flujos de trabajo de los desarrolladores.

Enfoque:

  1. Ejecutar gcloud asset search-all-iam-policies para inventariar todos los enlaces de roles primitivos
  2. Usar el Recomendador de IAM para obtener sugerencias basadas en ML de roles predefinidos de reemplazo
  3. Para cada enlace, usar el Analizador de Políticas para entender a qué accede realmente la entidad
  4. Crear un documento de mapeo: rol primitivo -> roles predefinidos específicos necesarios
  5. Aplicar roles predefinidos junto con roles primitivos durante un período de prueba
  6. Monitorear errores de acceso denegado usando Cloud Audit Logs
  7. Eliminar roles primitivos después de confirmar que no hay problemas de acceso durante 2 semanas

Errores comunes: Los roles primitivos incluyen permisos en todos los servicios de GCP, por lo que reemplazarlos requiere múltiples roles predefinidos. El Recomendador puede sugerir roles demasiado restrictivos si el período de observación no captura todos los casos de uso. Los roles personalizados pueden cubrir vacíos donde ningún rol predefinido coincide con el conjunto exacto de permisos necesario.

Formato de Salida

Informe de Auditoría de Permisos IAM de GCP
==============================================
Organización: acme-org (ID_ORG: 123456789)
Proyectos Auditados: 25
Fecha de Auditoría: 2026-02-23

RESUMEN DE ENLACES IAM:
  Enlaces totales:                    342
  Usando roles primitivos:            205 (60%)
  Usando roles predefinidos:          112 (33%)
  Usando roles personalizados:         25 (7%)

HALLAZGOS CRÍTICOS:
[IAM-001] Cuenta de Servicio con Rol Owner
  SA: [email protected]
  Rol: roles/owner en proyecto prod-project
  Claves Gestionadas por Usuario: 3 (más antigua: 14 meses)
  Corrección: Reemplazar con roles predefinidos específicos, eliminar claves antiguas

[IAM-002] Enlace allAuthenticatedUsers
  Recurso: gs://public-data-bucket
  Rol: roles/storage.objectViewer
  Riesgo: Cualquier titular de cuenta de Google puede leer el contenido del bucket
  Corrección: Restringir a grupos de usuarios o cuentas de servicio específicos

SALUD DE CUENTAS DE SERVICIO:
  Total de cuentas de servicio:        67
  Con claves gestionadas por usuario:  23
  Claves con más de 90 días:           18
  Cuentas no utilizadas (90+ días):    12
  Con delegación en todo el dominio:    2

SUGERENCIAS DEL RECOMENDADOR:
  Recomendaciones totales:             45
  Prioridad ALTA:                      12
  Permisos estimados reducidos:        2847 permisos individuales

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

abusing-dpapi-for-credential-access

Extract and decrypt Windows DPAPI-protected secrets (Credential Manager, browser logins/cookies, Wi-Fi credentials, KeePass keys) online or offline using SharpDPAPI, SharpChrome, Mimikatz, or Impacket

abusing-shadow-credentials-for-privesc

Take over Active Directory accounts by writing attacker-controlled public keys to msDS-KeyCredentialLink (Shadow Credentials) with pyWhisker, Whisker, or Certipy, then authenticate via PKINIT to recover the target

achieving-cmmc-level-2-compliance

>-

acquiring-disk-image-with-dd-and-dcfldd

Create forensically sound bit-for-bit disk images with dd or dcfldd on a Linux forensic workstation, preserving evidence integrity through hash verification (MD5/SHA) during acquisition. Use when imaging a suspect drive, USB device, or memory card for investigation, preserving volatile disk evidence during incident response, or producing a verified copy for legal or law-enforcement proceedings before any destructive analysis.

analyzing-active-directory-acl-abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3

analyzing-android-malware-with-apktool

Perform static analysis of Android APK malware using apktool for resource decompilation, jadx for Java source recovery, and androguard for manifest inspection, dangerous permission-combination detection, and identification of obfuscated code, dynamic code loading, and reflection-based API calls. Use to statically triage a suspicious APK without executing it or to build mobile malware detection rules.

analyzing-api-gateway-access-logs

Parses API Gateway access logs (AWS API Gateway, Kong, Nginx) to detect

analyzing-apt-group-with-mitre-navigator

Query ATT&CK data with attackcti, mitreattack-python, and stix2, then build MITRE ATT&CK Navigator layers and multi-layer heatmap overlays mapping one or more APT groups

analyzing-azure-activity-logs-for-threats

Queries Azure Monitor activity logs and sign-in logs via azure-monitor-query

analyzing-bootkit-and-rootkit-samples

Analyzes bootkit and advanced rootkit malware infecting the Master

analyzing-browser-forensics-with-hindsight

Parse Chromium-based browser databases with Hindsight to extract and correlate browsing history, downloads, cookies, cached content, autofill data, saved passwords, and extensions from Chrome, Edge, Brave, Opera, and Vivaldi into a unified timeline (XLSX, JSON, or SQLite output). Use during incident response, insider-threat investigations, or criminal cases when you need to reconstruct a user

analyzing-campaign-attribution-evidence

Systematically evaluate cyber-campaign evidence to attribute an operation to a threat actor, using the Diamond Model and Analysis of Competing Hypotheses (ACH) to weigh infrastructure overlaps, TTP consistency, malware code similarity, and timing/language artifacts into confidence-weighted attribution assessments. Use when an incident investigation needs a defensible attribution confidence level.

analyzing-certificate-transparency-for-phishing

Monitor Certificate Transparency logs using crt.sh and Certstream to

analyzing-cloud-storage-access-patterns

Detect abnormal access in AWS S3, GCS, and Azure Blob Storage by analyzing CloudTrail Data Events, GCS audit logs, and Azure Storage Analytics for after-hours bulk downloads, new-IP access, and API-call spikes (e.g. GetObject) via statistical baselines and time-series anomaly detection. Use when investigating suspected cloud data exfiltration or building related detection rules.

analyzing-cobalt-strike-beacon-configuration

Extract and analyze Cobalt Strike beacon configuration from PE files

analyzing-cobaltstrike-malleable-c2-profiles

Parse and analyze Cobalt Strike Malleable C2 profiles with dissect.cobaltstrike (profiles and beacon-payload configs) and pyMalleableC2 (AST parsing) to extract HTTP/DNS transforms, URIs, headers, sleep/jitter, and injection behavior, then generate network detection signatures. Use when reverse-engineering a captured malleable profile or building detections against Cobalt Strike Beacon traffic.

analyzing-command-and-control-communication

Analyzes malware C2 communication over HTTP, HTTPS, DNS, and custom

analyzing-cyber-kill-chain

Analyzes intrusion activity against the Lockheed Martin Cyber Kill Chain

analyzing-disk-image-with-autopsy

Perform comprehensive forensic analysis of raw (dd), E01, or AFF disk images with Autopsy and The Sleuth Kit, recovering deleted files, examining metadata and embedded artifacts, keyword searching, and building investigation timelines with visual reports. Use for structured analysis of a forensic disk image or when stakeholders need visual reports from evidence.

analyzing-dns-logs-for-exfiltration

Analyzes DNS query logs to detect data exfiltration via DNS tunneling,

Skills relacionados