GCP - Basic Information

Unterstütze HackTricks

Ressourcenhierarchie

Google Cloud verwendet eine Ressourcenhierarchie, die konzeptionell der eines traditionellen Dateisystems ähnelt. Dies bietet einen logischen Eltern/Kind-Workflow mit spezifischen Anknüpfungspunkten für Richtlinien und Berechtigungen.

Auf hoher Ebene sieht es so aus:

Organization
--> Folders
--> Projects
--> Resources

Eine virtuelle Maschine (genannt Compute Instance) ist eine Ressource. Eine Ressource befindet sich in einem Projekt, wahrscheinlich zusammen mit anderen Compute Instances, Speicher-Buckets usw.

Projekte Migration

Es ist möglich, ein Projekt ohne Organisation zu einer Organisation mit den Berechtigungen roles/resourcemanager.projectCreator und roles/resourcemanager.projectMover zu migrieren. Wenn sich das Projekt in einer anderen Organisation befindet, muss der GCP-Support kontaktiert werden, um es zuerst aus der Organisation zu entfernen. Weitere Informationen finden Sie hier.

Organisationsrichtlinien

Ermöglichen die Zentralisierung der Kontrolle über die Cloud-Ressourcen Ihrer Organisation:

  • Zentralisieren Sie die Kontrolle, um Einschränkungen zu konfigurieren, wie die Ressourcen Ihrer Organisation verwendet werden können.

  • Definieren und etablieren Sie Leitplanken für Ihre Entwicklungsteams, um innerhalb der Compliance-Grenzen zu bleiben.

  • Helfen Sie Projektbesitzern und ihren Teams, schnell zu agieren, ohne sich Sorgen um die Einhaltung von Vorschriften machen zu müssen.

Diese Richtlinien können erstellt werden, um die gesamte Organisation, Ordner oder Projekte zu betreffen. Nachkommen des Zielressourcen-Hierarchieknotens erben die Organisationsrichtlinie.

Um eine Organisationsrichtlinie zu definieren, wählen Sie eine Einschränkung, die eine bestimmte Art von Einschränkung gegen einen Google Cloud-Dienst oder eine Gruppe von Google Cloud-Diensten darstellt. Sie konfigurieren diese Einschränkung mit Ihren gewünschten Beschränkungen.

Häufige Anwendungsfälle

  • Begrenzen Sie das Teilen von Ressourcen basierend auf der Domain.

  • Begrenzen Sie die Nutzung von Identity and Access Management-Dienstkonten.

  • Beschränken Sie den physischen Standort neu erstellter Ressourcen.

  • Deaktivieren Sie die Erstellung von Dienstkonten.

Es gibt viele weitere Einschränkungen, die Ihnen eine feinkörnige Kontrolle über die Ressourcen Ihrer Organisation geben. Für weitere Informationen siehe die Liste aller Organisation Policy Service-Einschränkungen.

Standard-Organisationsrichtlinien

Dies sind die Richtlinien, die Google standardmäßig beim Einrichten Ihrer GCP-Organisation hinzufügt:

Zugriffsmanagement-Richtlinien

  • Domain-beschränkte Kontakte: Verhindert das Hinzufügen von Benutzern zu Essential Contacts außerhalb Ihrer angegebenen Domains. Dies beschränkt Essential Contacts darauf, nur verwaltete Benutzeridentitäten in Ihren ausgewählten Domains zuzulassen, um Plattformbenachrichtigungen zu erhalten.

  • Domain-beschränkte Freigabe: Verhindert das Hinzufügen von Benutzern zu IAM-Richtlinien außerhalb Ihrer angegebenen Domains. Dies beschränkt IAM-Richtlinien darauf, nur verwaltete Benutzeridentitäten in Ihren ausgewählten Domains zuzulassen, um auf Ressourcen innerhalb dieser Organisation zuzugreifen.

  • Verhinderung des öffentlichen Zugriffs: Verhindert, dass Cloud Storage-Buckets der Öffentlichkeit zugänglich gemacht werden. Dies stellt sicher, dass ein Entwickler Cloud Storage-Buckets nicht so konfigurieren kann, dass sie unautentifizierten Internetzugriff haben.

  • Einheitlicher Bucket-Zugriff: Verhindert objektbasierte Zugriffskontrolllisten (ACLs) in Cloud Storage-Buckets. Dies vereinfacht Ihr Zugriffsmanagement, indem IAM-Richtlinien konsistent auf alle Objekte in Cloud Storage-Buckets angewendet werden.

  • Erforderlicher OS-Login: VMs, die in neuen Projekten erstellt werden, haben OS Login aktiviert. Dies ermöglicht Ihnen die Verwaltung des SSH-Zugriffs auf Ihre Instanzen mithilfe von IAM, ohne dass Sie einzelne SSH-Schlüssel erstellen und verwalten müssen.

Zusätzliche Sicherheitsrichtlinien für Dienstkonten

  • Deaktivieren automatischer IAM-Zuweisungen: Verhindert, dass die Standard-App Engine- und Compute Engine-Dienstkonten automatisch die Editor-IAM-Rolle für ein Projekt bei der Erstellung erhalten. Dies stellt sicher, dass Dienstkonten bei der Erstellung keine übermäßig permissiven IAM-Rollen erhalten.

  • Deaktivieren der Erstellung von Dienstkontoschlüsseln: Verhindert die Erstellung öffentlicher Dienstkontoschlüssel. Dies hilft, das Risiko der Offenlegung persistenter Anmeldeinformationen zu verringern.

  • Deaktivieren des Hochladens von Dienstkontoschlüsseln: Verhindert das Hochladen öffentlicher Dienstkontoschlüssel. Dies hilft, das Risiko von geleakten oder wiederverwendeten Schlüsselmaterialien zu verringern.

Sichere VPC-Netzwerkkonfigurationsrichtlinien

  • Definieren erlaubter externer IPs für VM-Instanzen: Verhindert die Erstellung von Compute-Instanzen mit einer öffentlichen IP, die sie dem Internetverkehr aussetzen kann.

  • Deaktivieren der verschachtelten Virtualisierung von VMs: Verhindert die Erstellung verschachtelter VMs auf Compute Engine-VMs. Dies verringert das Sicherheitsrisiko unüberwachter verschachtelter VMs.

  • Deaktivieren des VM-Serienports: Verhindert den Zugriff auf den Serienport von Compute Engine-VMs. Dies verhindert die Eingabe an den Serienport eines Servers über die Compute Engine-API.

  • Einschränken autorisierter Netzwerke auf Cloud SQL-Instanzen: Verhindert den Zugriff öffentlicher oder nicht-interner Netzbereiche auf Ihre Cloud SQL-Datenbanken.

  • Einschränken der Protokollweiterleitung basierend auf der Art der IP-Adresse: Verhindert die Protokollweiterleitung von VMs für externe IP-Adressen.

  • Einschränken des öffentlichen IP-Zugriffs auf Cloud SQL-Instanzen: Verhindert die Erstellung von Cloud SQL-Instanzen mit einer öffentlichen IP, die sie dem Internetverkehr aussetzen kann.

  • Einschränken der Entfernung von Shared VPC-Projektverknüpfungen: Verhindert das versehentliche Löschen von Shared VPC-Hostprojekten.

  • Setzt die interne DNS-Einstellung für neue Projekte auf nur zonales DNS: Verhindert die Verwendung einer veralteten DNS-Einstellung, die eine geringere Dienstverfügbarkeit hat.

  • Überspringen der Erstellung des Standardnetzwerks: Verhindert die automatische Erstellung des Standard-VPC-Netzwerks und verwandter Ressourcen. Dies vermeidet übermäßig permissive Standard-Firewallregeln.

  • Deaktivieren der externen IPv6-Nutzung in VPCs: Verhindert die Erstellung externer IPv6-Subnetze, die unbefugtem Internetzugriff ausgesetzt sein können.

IAM-Rollen

Diese sind wie IAM-Richtlinien in AWS, da jede Rolle eine Reihe von Berechtigungen enthält.

Im Gegensatz zu AWS gibt es jedoch kein zentrales Repository für Rollen. Stattdessen geben Ressourcen X Zugriffsrollen an Y-Prinzipale, und der einzige Weg, um herauszufinden, wer Zugriff auf eine Ressource hat, ist die Verwendung der get-iam-policy-Methode über diese Ressource. Dies könnte ein Problem sein, da dies bedeutet, dass der einzige Weg, um herauszufinden, welche Berechtigungen ein Prinzipal hat, darin besteht, jede Ressource zu fragen, wem sie Berechtigungen erteilt, und ein Benutzer möglicherweise keine Berechtigungen hat, um Berechtigungen von allen Ressourcen zu erhalten.

Es gibt drei Arten von Rollen in IAM:

  • Basis-/Primitive Rollen, die die Owner, Editor und Viewer Rollen umfassen, die vor der Einführung von IAM existierten.

  • Vordefinierte Rollen, die granulare Zugriffsrechte für einen bestimmten Dienst bieten und von Google Cloud verwaltet werden. Es gibt viele vordefinierte Rollen, Sie können alle mit den ihnen zugewiesenen Privilegien hier einsehen.

  • Benutzerdefinierte Rollen, die granulare Zugriffsrechte gemäß einer vom Benutzer festgelegten Liste von Berechtigungen bieten.

Es gibt Tausende von Berechtigungen in GCP. Um zu überprüfen, ob eine Rolle eine Berechtigung hat, können Sie die Berechtigung hier suchen und sehen, welche Rollen sie haben.

Sie können auch hier vordefinierte Rollen suchen , die von jedem Produkt angeboten werden. Beachten Sie, dass einige Rollen nicht an Benutzer angehängt werden können und nur an SAs, weil einige Berechtigungen sie enthalten. Beachten Sie außerdem, dass Berechtigungen nur wirksam werden, wenn sie an den relevanten Dienst angehängt sind.

Oder überprüfen Sie, ob eine benutzerdefinierte Rolle eine spezifische Berechtigung hier verwenden kann.

GCP - IAM, Principals & Org Policies Enum

Benutzer

In der GCP-Konsole gibt es keine Benutzer- oder Gruppenverwaltung, dies wird in Google Workspace durchgeführt. Obwohl Sie einen anderen Identitätsanbieter in Google Workspace synchronisieren könnten.

Sie können auf Workspaces Benutzer und Gruppen zugreifen unter https://admin.google.com.

MFA kann für Workspaces-Benutzer erzwungen werden, jedoch könnte ein Angreifer ein Token verwenden, um auf GCP über die CLI zuzugreifen, das nicht durch MFA geschützt ist (es wird nur durch MFA geschützt, wenn sich der Benutzer anmeldet, um es zu generieren: gcloud auth login).

Gruppen

Wenn eine Organisation erstellt wird, wird dringend empfohlen, mehrere Gruppen zu erstellen. Wenn Sie eine von ihnen verwalten, könnten Sie die gesamte oder einen wichtigen Teil der Organisation kompromittiert haben:

Gruppe

Funktion

gcp-organization-admins (Gruppe oder individuelle Konten erforderlich für die Checkliste)

Verwaltung aller Ressourcen, die zur Organisation gehören. Weisen Sie diese Rolle sparsam zu; Org-Admins haben Zugriff auf alle Ihre Google Cloud-Ressourcen. Alternativ, da diese Funktion hoch privilegiert ist, sollten Sie in Erwägung ziehen, individuelle Konten anstelle der Erstellung einer Gruppe zu verwenden.

gcp-network-admins (erforderlich für die Checkliste)

Erstellung von Netzwerken, Subnetzen, Firewall-Regeln und Netzwerkgeräten wie Cloud Router, Cloud VPN und Cloud Load Balancers.

gcp-billing-admins (erforderlich für die Checkliste)

Einrichtung von Abrechnungskonten und Überwachung ihrer Nutzung.

gcp-developers (erforderlich für die Checkliste)

Entwurf, Codierung und Testen von Anwendungen.

gcp-security-admins

Einrichtung und Verwaltung von Sicherheitsrichtlinien für die gesamte Organisation, einschließlich Zugriffsmanagement und Organisationsbeschränkungsrichtlinien. Weitere Informationen zur Planung Ihrer Google Cloud-Sicherheitsinfrastruktur finden Sie im Google Cloud-Sicherheitsgrundlagen-Leitfaden.

gcp-devops

Erstellung oder Verwaltung von End-to-End-Pipelines, die kontinuierliche Integration und Bereitstellung, Überwachung und Systembereitstellung unterstützen.

gcp-logging-admins

gcp-logging-viewers

gcp-monitor-admins

gcp-billing-viewer (nicht mehr standardmäßig)

Überwachung der Ausgaben für Projekte. Typische Mitglieder sind Teil des Finanzteams.

gcp-platform-viewer (nicht mehr standardmäßig)

Überprüfung von Ressourceninformationen in der gesamten Google Cloud-Organisation.

gcp-security-reviewer (nicht mehr standardmäßig)

Überprüfung der Cloud-Sicherheit.

gcp-network-viewer (nicht mehr standardmäßig)

Überprüfung der Netzwerkkonfigurationen.

grp-gcp-audit-viewer (nicht mehr standardmäßig)

Ansicht von Audit-Logs.

gcp-scc-admin (nicht mehr standardmäßig)

Verwaltung des Security Command Centers.

gcp-secrets-admin (nicht mehr standardmäßig)

Verwaltung von Geheimnissen im Secret Manager.

Standard-Passwortrichtlinie

  • Erzwingen Sie starke Passwörter

  • Zwischen 8 und 100 Zeichen

  • Keine Wiederverwendung

  • Kein Ablaufdatum

  • Wenn Personen über einen Drittanbieter auf Workspace zugreifen, gelten diese Anforderungen nicht.

Dienstkonten

Dies sind die Prinzipale, die Ressourcen angehängt haben können und Zugriff haben, um einfach mit GCP zu interagieren. Zum Beispiel ist es möglich, auf das Auth-Token eines Dienstkontos zu zugreifen, das an eine VM in den Metadaten angehängt ist. Es können einige Konflikte auftreten, wenn sowohl IAM als auch Zugriffsumfänge verwendet werden. Zum Beispiel kann Ihr Dienstkonto die IAM-Rolle compute.instanceAdmin haben, aber die Instanz, die Sie kompromittiert haben, wurde mit der Umfangsbeschränkung https://www.googleapis.com/auth/compute.readonly eingeschränkt. Dies würde verhindern, dass Sie Änderungen mit dem OAuth-Token vornehmen, das Ihrer Instanz automatisch zugewiesen wird.

Es ist ähnlich wie IAM-Rollen von AWS. Aber im Gegensatz zu AWS kann jedes Dienstkonto an jeden Dienst angehängt werden (es muss dies nicht über eine Richtlinie erlauben).

Mehrere der Dienstkonten, die Sie finden werden, werden tatsächlich automatisch von GCP generiert, wenn Sie einen Dienst zu verwenden beginnen, wie:

PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_ID@appspot.gserviceaccount.com

Es ist jedoch auch möglich, benutzerdefinierte Dienstkonten zu erstellen und an Ressourcen anzuhängen, die so aussehen:

SERVICE_ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com

Access scopes

Access Scopes sind an generierte OAuth-Tokens angehängt, um auf die GCP-API-Endpunkte zuzugreifen. Sie beschränken die Berechtigungen des OAuth-Tokens. Das bedeutet, dass wenn ein Token einem Besitzer einer Ressource gehört, aber nicht den entsprechenden Scope im Token hat, um auf diese Ressource zuzugreifen, das Token nicht verwendet werden kann, um diese Privilegien (aus)zu nutzen.

Google empfiehlt tatsächlich, dass Access Scopes nicht verwendet werden und vollständig auf IAM vertraut wird. Das Web-Management-Portal erzwingt dies tatsächlich, aber Access Scopes können programmgesteuert weiterhin auf Instanzen mit benutzerdefinierten Servicekonten angewendet werden.

Sie können sehen, welche Scopes zugewiesen sind, indem Sie abfragen:

curl 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=<access_token>'

{
"issued_to": "223044615559.apps.googleusercontent.com",
"audience": "223044615559.apps.googleusercontent.com",
"user_id": "139746512919298469201",
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/sqlservice.login https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/accounts.reauth",
"expires_in": 2253,
"email": "username@testing.com",
"verified_email": true,
"access_type": "offline"
}

Die vorherigen Scopes sind die, die standardmäßig mit gcloud generiert werden, um auf Daten zuzugreifen. Dies liegt daran, dass Sie, wenn Sie gcloud verwenden, zuerst ein OAuth-Token erstellen und es dann verwenden, um die Endpunkte zu kontaktieren.

Der wichtigste Scope davon ist potenziell cloud-platform, was im Wesentlichen bedeutet, dass es möglich ist, auf jeden Dienst in GCP zuzugreifen.

Sie können eine Liste aller möglichen Scopes hier finden.

Wenn Sie gcloud-Browser-Anmeldeinformationen haben, ist es möglich, ein Token mit anderen Scopes zu erhalten, indem Sie etwas wie:

# Maybe you can get a user token with other scopes changing the scopes array from ~/.config/gcloud/credentials.db

# Set new scopes for SDKs credentials
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/sqlservice.login,https://www.googleapis.com/auth/appengine.admin,https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/accounts.reauth,https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.directory.group,https://www.googleapis.com/auth/admin.directory.domain,https://www.googleapis.com/auth/admin.directory.user

# Print new token
gcloud auth application-default print-access-token

# To use this token with some API you might need to use curl to indicate the project header with --header "X-Goog-User-Project: <project-name>"

Terraform IAM Policies, Bindings und Memberships

Wie von terraform definiert in https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/google_project_iam gibt es verschiedene Möglichkeiten, einem Principal mit terraform in GCP Zugriff auf eine Ressource zu gewähren:

  • Memberships: Sie setzen Principals als Mitglieder von Rollen ohne Einschränkungen über die Rolle oder die Principals. Sie können einen Benutzer als Mitglied einer Rolle setzen und dann eine Gruppe als Mitglied derselben Rolle setzen und auch diese Principals (Benutzer und Gruppe) als Mitglieder anderer Rollen setzen.

  • Bindings: Mehrere Principals können an eine Rolle gebunden werden. Diese Principals können weiterhin an andere Rollen gebunden oder Mitglieder anderer Rollen sein. Wenn jedoch ein Principal, der nicht an die Rolle gebunden ist, als Mitglied einer gebundenen Rolle gesetzt wird, verschwindet die Mitgliedschaft beim nächsten Anwenden der Bindung.

  • Policies: Eine Policy ist maßgeblich, sie gibt Rollen und Principals an und dann können diese Principals keine weiteren Rollen und diese Rollen keine weiteren Principals haben, es sei denn, diese Policy wird geändert (nicht einmal in anderen Policies, Bindings oder Memberships). Daher sind alle Privilegien einer in der Policy angegebenen Rolle oder eines Principals durch diese Policy eingeschränkt. Offensichtlich kann dies umgangen werden, wenn dem Principal die Möglichkeit gegeben wird, die Policy zu ändern oder Berechtigungen zur Privilegieneskalation zu erhalten (wie das Erstellen eines neuen Principals und das Binden einer neuen Rolle).

Referenzen

Unterstütze HackTricks

Last updated