Communitygithub.com

auditing-gcp-iam-permissions

Audit des permissions IAM de Google Cloud Platform pour identifier les autorisations excessives.

Qu'est-ce que auditing-gcp-iam-permissions ?

Cette compétence guide l'audit des configurations IAM de Google Cloud Platform (GCP) afin de détecter les autorisations trop permissives, les comptes de service inutilisés et les risques de délégation à l'échelle du domaine. Elle s'appuie sur l'outil `gcloud`, les API Cloud Asset, IAM Recommender et Policy Analyzer pour inventorier les liaisons IAM, analyser les clés des comptes de service, générer des recommandations de réduction des privilèges et produire un rapport d'audit complet. Utile pour les évaluations de sécurité, les audits de conformité et la réduction du rayon d'explosion des identifiants compromis.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Audit des permissions IAM GCP

Quand l'utiliser

  • Lors d'évaluations de sécurité des configurations IAM d'une organisation ou d'un projet GCP
  • Lors de l'identification de comptes de service disposant d'autorisations excessives ou d'accès inutilisés
  • Lorsque des exigences de conformité imposent une révision des contrôles d'accès et des attributions de rôles
  • Lors de l'investigation de mouvements latéraux potentiels via des erreurs de configuration IAM
  • Pour réduire le rayon d'explosion des identifiants compromis en limitant les permissions

Ne pas utiliser pour l'audit des règles de pare-feu VPC (utiliser des outils de sécurité réseau), pour l'audit RBAC GKE (utiliser des outils RBAC spécifiques à Kubernetes), ou pour la détection de menaces en temps réel sur les actions IAM (utiliser SCC Event Threat Detection).

Prérequis

  • Organisation ou projet GCP avec les rôles roles/iam.securityReviewer et roles/cloudAsset.viewer
  • gcloud CLI authentifié avec les permissions appropriées
  • API Cloud Asset activée (gcloud services enable cloudasset.googleapis.com)
  • API IAM Recommender activée (gcloud services enable recommender.googleapis.com)
  • API Policy Analyzer activée (gcloud services enable policyanalyzer.googleapis.com)

Flux de travail

Étape 1 : Énumérer les liaisons IAM dans toute l'organisation

Listez toutes les liaisons IAM au niveau de l'organisation, du dossier et du projet pour comprendre l'ensemble du paysage des accès.

# Liaisons IAM au niveau de l'organisation
gcloud organizations get-iam-policy ORG_ID \
  --format=json > org-iam-policy.json

# Rechercher toutes les politiques IAM dans l'organisation
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --format="table(resource, policy.bindings.role, policy.bindings.members)" \
  --limit=500

# Trouver tous les utilisateurs et comptes de service avec le rôle Owner
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --query="policy:roles/owner" \
  --format="table(resource, policy.bindings.members)"

# Trouver toutes les liaisons utilisant des rôles primitifs (Owner, Editor, Viewer)
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --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}')
"

Étape 2 : Auditer les comptes de service et leurs clés

Identifiez les comptes de service avec des autorisations excessives, des clés gérées par l'utilisateur et des comptes inutilisés.

# Lister tous les comptes de service dans un projet
gcloud iam service-accounts list \
  --project=PROJECT_ID \
  --format="table(email, displayName, disabled)"

# Vérifier les clés gérées par l'utilisateur (à minimiser)
for sa in $(gcloud iam service-accounts list --project=PROJECT_ID --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

# Trouver les comptes de service avec des rôles admin dans tous les projets
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --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)"

# Vérifier les politiques IAM des comptes de service (qui peut les emprunter)
for sa in $(gcloud iam service-accounts list --project=PROJECT_ID --format="value(email)"); do
  echo "=== $sa ==="
  gcloud iam service-accounts get-iam-policy "$sa" --format=json 2>/dev/null
done

Étape 3 : Utiliser IAM Recommender pour identifier les permissions excessives

Exploitez IAM Recommender de GCP pour trouver les rôles qui accordent plus d'accès que réellement utilisé.

# Lister les recommandations de rôles IAM pour un projet
gcloud recommender recommendations list \
  --project=PROJECT_ID \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --format="table(name, description, priority, stateInfo.state)"

# Obtenir une recommandation détaillée
gcloud recommender recommendations describe RECOMMENDATION_ID \
  --project=PROJECT_ID \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --format=json

# Lister les insights sur l'utilisation IAM
gcloud recommender insights list \
  --project=PROJECT_ID \
  --insight-type=google.iam.policy.Insight \
  --location=global \
  --format="table(name, description, severity, category)"

# Appliquer une recommandation (après révision)
gcloud recommender recommendations mark-claimed RECOMMENDATION_ID \
  --project=PROJECT_ID \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --etag=ETAG

Étape 4 : Analyser les permissions effectives avec Policy Analyzer

Utilisez Policy Analyzer pour déterminer l'accès effectif pour des principaux ou ressources spécifiques.

# Vérifier qui a accès à une ressource spécifique
gcloud asset analyze-iam-policy \
  --organization=ORG_ID \
  --full-resource-name="//storage.googleapis.com/projects/_/buckets/sensitive-data-bucket" \
  --format="table(identityList.identities, accessControlLists.accesses.role)"

# Vérifier à quelles ressources un utilisateur spécifique peut accéder
gcloud asset analyze-iam-policy \
  --organization=ORG_ID \
  --identity="user:[email protected]" \
  --format="table(accessControlLists.resources.fullResourceName, accessControlLists.accesses.role)"

# Vérifier qui peut effectuer une action spécifique
gcloud asset analyze-iam-policy \
  --organization=ORG_ID \
  --full-resource-name="//cloudresourcemanager.googleapis.com/projects/PROJECT_ID" \
  --permissions="iam.serviceAccounts.actAs,iam.serviceAccountKeys.create" \
  --format="table(identityList.identities, accessControlLists.accesses.permission)"

# Trouver tous les principaux avec accès allUsers ou allAuthenticatedUsers
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --query="policy:allUsers OR policy:allAuthenticatedUsers" \
  --format="table(resource, policy.bindings.role, policy.bindings.members)"

Étape 5 : Vérifier les risques de délégation à l'échelle du domaine et d'emprunt

Identifiez les comptes de service avec délégation à l'échelle du domaine et capacités d'emprunt.

# Vérifier les comptes de service avec délégation à l'échelle du domaine
# (Nécessite l'accès à l'API Admin SDK pour lister les comptes délégués)
gcloud iam service-accounts list --project=PROJECT_ID --format=json | python3 -c "
import json, sys
accounts = json.load(sys.stdin)
for sa in accounts:
    email = sa.get('email', '')
    # Vérifier si le compte de service a la délégation à l'échelle du domaine activée
    # Nécessite l'accès à l'API Admin SDK
    print(f'CS: {email} - Vérifier admin.google.com pour le statut de délégation')
"

# Trouver les comptes de service que d'autres identités peuvent emprunter
for sa in $(gcloud iam service-accounts list --project=PROJECT_ID --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 "=== Risque d'emprunt : $sa ==="
  fi
done

Étape 6 : Générer un rapport d'audit et appliquer les corrections

Compilez les résultats et mettez en œuvre les réductions de permissions recommandées.

# Supprimer un rôle primitif et le remplacer par un rôle prédéfini
gcloud projects remove-iam-policy-binding PROJECT_ID \
  --member="user:[email protected]" \
  --role="roles/editor"

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

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

# Supprimer les clés de compte de service inutilisées
gcloud iam service-accounts keys delete KEY_ID \
  --iam-account=SA_EMAIL

# Désactiver les comptes de service inutilisés
gcloud iam service-accounts disable SA_EMAIL --project=PROJECT_ID

Concepts clés

TermeDéfinition
Rôle primitifRôles GCP hérités (Owner, Editor, Viewer) qui accordent des permissions larges sur tous les services, déconseillés en production
Rôle prédéfiniRôle géré par GCP, limité à des services et actions spécifiques, offrant un accès plus granulaire que les rôles primitifs
IAM RecommenderService ML de GCP qui analyse l'utilisation réelle des permissions et suggère des réductions de rôles pour atteindre le moindre privilège
Policy AnalyzerOutil d'analyse de l'accès IAM effectif dans la hiérarchie de l'organisation, répondant aux questions qui-peut-accéder-à-quoi
Clé de compte de serviceIdentifiant géré par l'utilisateur pour l'authentification des comptes de service, un risque de sécurité car les clés peuvent être exportées et n'expirent pas automatiquement
Délégation à l'échelle du domaineAccorde à un compte de service la capacité d'emprunter l'identité de n'importe quel utilisateur du domaine Google Workspace, un risque d'escalade de privilèges significatif

Outils et systèmes

  • gcloud CLI: Outil principal pour interroger et gérer les politiques IAM GCP, les comptes de service et les liaisons de rôles
  • IAM Recommender: Moteur de recommandation basé sur le ML pour réduire les permissions excessives en fonction de l'utilisation réelle
  • Policy Analyzer: Outil d'analyse de l'accès effectif à l'échelle de l'organisation pour comprendre qui peut accéder à quoi
  • Cloud Asset Inventory: Recherche inter-projets pour les politiques IAM et les métadonnées de ressources
  • ScoutSuite: Outil d'audit multi-cloud avec des vérifications IAM GCP spécifiques pour les attributions de rôles et les comptes de service

Scénarios courants

Scénario : Réduction de l'utilisation des rôles primitifs dans une organisation GCP

Contexte : Un audit révèle que 60 % des liaisons IAM dans l'organisation utilisent des rôles primitifs (Owner/Editor). L'équipe de sécurité doit migrer vers des rôles prédéfinis sans perturber les workflows des développeurs.

Approche :

  1. Exécuter gcloud asset search-all-iam-policies pour inventorier toutes les liaisons avec des rôles primitifs
  2. Utiliser IAM Recommender pour obtenir des suggestions basées sur le ML pour le remplacement par des rôles prédéfinis
  3. Pour chaque liaison, utiliser Policy Analyzer pour comprendre à quoi le principal accède réellement
  4. Créer un document de correspondance : rôle primitif -> rôles prédéfinis spécifiques nécessaires
  5. Appliquer les rôles prédéfinis en parallèle des rôles primitifs pendant une période de test
  6. Surveiller les erreurs d'accès refusé à l'aide des journaux Cloud Audit
  7. Supprimer les rôles primitifs après avoir confirmé l'absence de problèmes d'accès pendant 2 semaines

Pièges : Les rôles primitifs incluent des permissions sur tous les services GCP, leur remplacement nécessite donc plusieurs rôles prédéfinis. Le moteur de recommandation peut suggérer des rôles trop restrictifs si la période d'observation ne capture pas tous les cas d'utilisation. Les rôles personnalisés peuvent combler les lacunes là où aucun rôle prédéfini ne correspond exactement à l'ensemble des permissions nécessaires.

Format de sortie

Rapport d'audit des permissions IAM GCP
=========================================
Organisation : acme-org (ORG_ID : 123456789)
Projets audités : 25
Date de l'audit : 2026-02-23

RÉSUMÉ DES LIAISONS IAM :
  Total des liaisons :                   342
  Utilisation de rôles primitifs :       205 (60%)
  Utilisation de rôles prédéfinis :      112 (33%)
  Utilisation de rôles personnalisés :    25 (7%)

RÉSULTATS CRITIQUES :
[IAM-001] Compte de service avec rôle Owner
  CS : [email protected]
  Rôle : roles/owner sur le projet prod-project
  Clés gérées par l'utilisateur : 3 (la plus ancienne : 14 mois)
  Correction : Remplacer par des rôles prédéfinis spécifiques, supprimer les anciennes clés

[IAM-002] Liaison allAuthenticatedUsers
  Ressource : gs://public-data-bucket
  Rôle : roles/storage.objectViewer
  Risque : Tout titulaire d'un compte Google peut lire le contenu du bucket
  Correction : Restreindre à des groupes d'utilisateurs ou comptes de service spécifiques

SANTÉ DES COMPTES DE SERVICE :
  Total des comptes de service :          67
  Avec clés gérées par l'utilisateur :    23
  Clés de plus de 90 jours :              18
  Comptes inutilisés (90+ jours) :         12
  Avec délégation à l'échelle du domaine :  2

SUGGESTIONS DU RECOMMENDER :
  Total des recommandations :             45
  Priorité HAUTE :                        12
  Permissions estimées réduites :       2 847 permissions individuelles

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 associés