Prüfung von GCP IAM-Berechtigungen
Verwendungszweck
- Bei der Durchführung von Sicherheitsbewertungen von IAM-Konfigurationen auf GCP-Organisations- oder Projektebene
- Bei der Identifizierung von Dienstkonten mit übermäßigen Berechtigungen oder ungenutztem Zugriff
- Wenn Compliance-Anforderungen eine Überprüfung von Zugriffskontrollen und Rollenzuweisungen vorschreiben
- Bei der Untersuchung möglicher lateraler Bewegungen durch IAM-Fehlkonfigurationen
- Bei der Verringerung des Explosionsradius kompromittierter Anmeldedaten durch Eingrenzung von Berechtigungen
Nicht verwenden für die Prüfung von VPC-Firewall-Regeln (Netzwerksicherheitstools verwenden), für die GKE-RBAC-Prüfung (Kubernetes-spezifische RBAC-Tools verwenden) oder für die Echtzeit-Bedrohungserkennung von IAM-Aktionen (SCC Event Threat Detection verwenden).
Voraussetzungen
- GCP-Organisation oder -Projekt mit
roles/iam.securityReviewerundroles/cloudAsset.viewer - gcloud CLI mit entsprechenden Berechtigungen authentifiziert
- Cloud Asset API aktiviert (
gcloud services enable cloudasset.googleapis.com) - IAM Recommender API aktiviert (
gcloud services enable recommender.googleapis.com) - Policy Analyzer API aktiviert (
gcloud services enable policyanalyzer.googleapis.com)
Arbeitsablauf
Schritt 1: IAM-Bindungen organisationsweit auflisten
Liste alle IAM-Bindungen auf Organisations-, Ordner- und Projektebene auf, um die gesamte Zugriffslandschaft zu verstehen.
# IAM-Bindungen auf Organisationsebene
gcloud organizations get-iam-policy ORG_ID \
--format=json > org-iam-policy.json
# Alle IAM-Richtlinien organisationsweit durchsuchen
gcloud asset search-all-iam-policies \
--scope=organizations/ORG_ID \
--format="table(resource, policy.bindings.role, policy.bindings.members)" \
--limit=500
# Alle Benutzer und Dienstkonten mit der Rolle "Owner" finden
gcloud asset search-all-iam-policies \
--scope=organizations/ORG_ID \
--query="policy:roles/owner" \
--format="table(resource, policy.bindings.members)"
# Alle Bindungen mit primitiven Rollen (Owner, Editor, Viewer) finden
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}')
"
Schritt 2: Dienstkonten und ihre Schlüssel prüfen
Identifiziere Dienstkonten mit übermäßigen Berechtigungen, benutzermanaged Schlüsseln und ungenutzten Konten.
# Alle Dienstkonten in einem Projekt auflisten
gcloud iam service-accounts list \
--project=PROJECT_ID \
--format="table(email, displayName, disabled)"
# Auf benutzermanagte Schlüssel prüfen (sollten minimiert werden)
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
# Dienstkonten mit Admin-Rollen in allen Projekten finden
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)"
# IAM-Richtlinien von Dienstkonten prüfen (wer kann sich ausgeben)
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
Schritt 3: IAM Recommender zur Identifizierung übermäßiger Berechtigungen nutzen
Nutze den IAM Recommender von GCP, um Rollen zu finden, die mehr Zugriff gewähren als tatsächlich genutzt.
# IAM-Rollenempfehlungen für ein Projekt auflisten
gcloud recommender recommendations list \
--project=PROJECT_ID \
--recommender=google.iam.policy.Recommender \
--location=global \
--format="table(name, description, priority, stateInfo.state)"
# Detaillierte Empfehlung abrufen
gcloud recommender recommendations describe RECOMMENDATION_ID \
--project=PROJECT_ID \
--recommender=google.iam.policy.Recommender \
--location=global \
--format=json
# Einblicke zur IAM-Nutzung auflisten
gcloud recommender insights list \
--project=PROJECT_ID \
--insight-type=google.iam.policy.Insight \
--location=global \
--format="table(name, description, severity, category)"
# Empfehlung anwenden (nach Überprüfung)
gcloud recommender recommendations mark-claimed RECOMMENDATION_ID \
--project=PROJECT_ID \
--recommender=google.iam.policy.Recommender \
--location=global \
--etag=ETAG
Schritt 4: Effektive Berechtigungen mit Policy Analyzer analysieren
Nutze Policy Analyzer, um den effektiven Zugriff für bestimmte Prinzipale oder Ressourcen zu ermitteln.
# Prüfen, wer Zugriff auf eine bestimmte Ressource hat
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)"
# Prüfen, auf welche Ressourcen ein bestimmter Benutzer zugreifen kann
gcloud asset analyze-iam-policy \
--organization=ORG_ID \
--identity="user:[email protected]" \
--format="table(accessControlLists.resources.fullResourceName, accessControlLists.accesses.role)"
# Prüfen, wer eine bestimmte Aktion ausführen kann
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)"
# Alle Prinzipale mit allUsers- oder allAuthenticatedUsers-Zugriff finden
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)"
Schritt 5: Auf Domänenweite Delegation und Identitätswechselrisiken prüfen
Identifiziere Dienstkonten mit domänenweiter Delegation und Identitätswechselfähigkeiten.
# Auf Dienstkonten mit domänenweiter Delegation prüfen
# (Erfordert Admin SDK-Zugriff zum Auflisten delegierter Konten)
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', '')
# Prüfen, ob das Dienstkonto die domänenweite Delegation aktiviert hat
# Dies erfordert Admin SDK API-Zugriff
print(f'SA: {email} - Überprüfe admin.google.com auf Delegationsstatus')
"
# Dienstkonten finden, die von anderen Identitäten verwendet werden können
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 "=== Identitätswechselrisiko: $sa ==="
fi
done
Schritt 6: Prüfbericht erstellen und Korrekturen anwenden
Fasse die Ergebnisse zusammen und setze empfohlene Berechtigungsreduzierungen um.
# Primitive Rolle entfernen und durch vordefinierte Rolle ersetzen
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"
# Ungenutzte Dienstkontoschlüssel löschen
gcloud iam service-accounts keys delete KEY_ID \
--iam-account=SA_EMAIL
# Ungenutzte Dienstkonten deaktivieren
gcloud iam service-accounts disable SA_EMAIL --project=PROJECT_ID
Wichtige Konzepte
| Begriff | Definition |
|---|---|
| Primitive Rolle | Legacy-GCP-Rollen (Owner, Editor, Viewer), die breite Berechtigungen über alle Dienste hinweg gewähren, nicht für die Produktion empfohlen |
| Vordefinierte Rolle | Von GCP verwaltete Rolle, die auf bestimmte Dienste und Aktionen beschränkt ist und einen granulareren Zugriff als primitive Rollen bietet |
| IAM Recommender | GCP-ML-basierter Dienst, der die tatsächliche Berechtigungsnutzung analysiert und Rollenreduzierungen zur Erreichung des Least-Privilege-Prinzips vorschlägt |
| Policy Analyzer | Tool zur Analyse des effektiven IAM-Zugriffs in der Organisationshierarchie, das „Wer kann worauf zugreifen?“-Abfragen beantwortet |
| Dienstkontoschlüssel | Benutzermanagte Anmeldedaten für die Authentifizierung von Dienstkonten; ein Sicherheitsrisiko, da Schlüssel exportiert werden können und nicht automatisch ablaufen |
| Domänenweite Delegation | Gewährt einem Dienstkonto die Möglichkeit, jeden Benutzer in der Google Workspace-Domain zu impersonieren; ein erhebliches Risiko für Privilegienausweitung |
Tools & Systeme
- gcloud CLI: Primäres Tool zum Abfragen und Verwalten von GCP IAM-Richtlinien, Dienstkonten und Rollenbindungen
- IAM Recommender: ML-basierte Empfehlungsmaschine zur Reduzierung übermäßiger Berechtigungen basierend auf der tatsächlichen Nutzung
- Policy Analyzer: Organisationsweites Tool zur Analyse effektiver Zugriffe, um zu verstehen, wer auf was zugreifen kann
- Cloud Asset Inventory: Projektübergreifende Suche nach IAM-Richtlinien und Ressourcenmetadaten
- ScoutSuite: Multi-Cloud-Auditing-Tool mit GCP-IAM-spezifischen Prüfungen für Rollenzuweisungen und Dienstkonten
Häufige Szenarien
Szenario: Reduzierung der Nutzung primitiver Rollen in einer GCP-Organisation
Kontext: Ein Audit zeigt, dass 60 % der IAM-Bindungen in der Organisation primitive Rollen (Owner/Editor) verwenden. Das Sicherheitsteam muss zu vordefinierten Rollen migrieren, ohne die Arbeitsabläufe der Entwickler zu stören.
Vorgehen:
- Führe
gcloud asset search-all-iam-policiesaus, um alle primitiven Rollenbindungen zu erfassen - Nutze IAM Recommender, um ML-basierte Vorschläge für ersetzende vordefinierte Rollen zu erhalten
- Verwende für jede Bindung Policy Analyzer, um zu verstehen, worauf der Prinzipal tatsächlich zugreift
- Erstelle ein Zuordnungsdokument: primitive Rolle -> spezifische benötigte vordefinierte Rollen
- Wende vordefinierte Rollen neben den primitiven Rollen für einen Testzeitraum an
- Überwache auf Zugriffsverweigerungsfehler mit Cloud Audit Logs
- Entferne primitive Rollen, nachdem 2 Wochen lang keine Zugriffsprobleme aufgetreten sind
Fallstricke: Primitive Rollen enthalten Berechtigungen für alle GCP-Dienste, sodass ihr Ersatz mehrere vordefinierte Rollen erfordert. Der Recommender kann zu restriktive Rollen vorschlagen, wenn der Beobachtungszeitraum nicht alle Anwendungsfälle abdeckt. Benutzerdefinierte Rollen können Lücken füllen, wenn keine vordefinierte Rolle den genauen benötigten Berechtigungssatz bietet.
Ausgabeformat
GCP IAM-Berechtigungen – Prüfbericht
======================================
Organisation: acme-org (ORG_ID: 123456789)
Geprüfte Projekte: 25
Prüfdatum: 2026-02-23
ZUSAMMENFASSUNG DER IAM-BINDUNGEN:
Bindungen gesamt: 342
Mit primitiven Rollen: 205 (60%)
Mit vordefinierten Rollen: 112 (33%)
Mit benutzerdefinierten Rollen: 25 (7%)
KRITISCHE FESTSTELLUNGEN:
[IAM-001] Dienstkonto mit Owner-Rolle
SA: [email protected]
Rolle: roles/owner im Projekt prod-project
Benutzermanagte Schlüssel: 3 (ältester: 14 Monate)
Abhilfe: Durch spezifische vordefinierte Rollen ersetzen, alte Schlüssel löschen
[IAM-002] allAuthenticatedUsers-Bindung
Ressource: gs://public-data-bucket
Rolle: roles/storage.objectViewer
Risiko: Jeder Google-Kontoinhaber kann Bucket-Inhalte lesen
Abhilfe: Auf bestimmte Benutzergruppen oder Dienstkonten beschränken
GESUNDHEIT DER DIENSTKONTEN:
Dienstkonten gesamt: 67
Mit benutzermanagten Schlüsseln: 23
Schlüssel älter als 90 Tage: 18
Ungenutzte Konten (90+ Tage): 12
Mit domänenweiter Delegation: 2
EMPFEHLUNGEN DES RECOMMENDERS:
Empfehlungen gesamt: 45
Priorität HOCH: 12
Geschätzte reduzierte Berechtigungen: 2.847 einzelne Berechtigungen