GKE-Workloads müssen auf GCP-APIs zugreifen können, ohne Dienstkontoschlüssel zu verwalten.
→Workload Identity auf dem GKE-Cluster aktivieren und konfigurieren. Kubernetes-Dienstkonten (KSA) Google-Dienstkonten (GSA) zuordnen.
Warum: Eliminiert das Risiko kompromittierter Dienstkontoschlüssel durch die Verwendung kurzlebiger, automatisch rotierender Anmeldeinformationen, die von KSA-Tokens abgeleitet sind.
Referenz↗
Zugriff auf interne Webanwendungen aus jedem Netzwerk basierend auf Benutzeridentität und Gerätezustand ermöglichen, ohne VPN.
→Identity-Aware Proxy (IAP) mit Access Context Manager verwenden. Zugriffsebenen basierend auf IP, Gerätezustand (via Endpoint Verification) und Benutzeridentität definieren.
Warum: Verschiebt die Zugriffskontrolle vom Netzwerkperimeter auf einzelne Benutzer und Geräte und setzt Zero-Trust-Prinzipien durch.
Referenz↗
Eine CI/CD-Pipeline (z. B. GitHub Actions, GitLab) muss auf GCP-Ressourcen zugreifen, ohne langlebige Anmeldeinformationen zu verwenden.
→Workload Identity Federation verwenden. Einen Anbieterpool für den externen IdP (z. B. GitHub OIDC) erstellen und Attributbedingungen konfigurieren, um den Zugriff auf bestimmte Repositories oder Branches zu beschränken.
Warum: Schlüssellose Authentifizierung für externe Workloads. Das externe System stellt sein eigenes Token bereit, das gegen ein kurzlebiges GCP-Token ausgetauscht wird.
IAM-Sicherheitsrichtlinien organisationsweit durchsetzen, z. B. die Erstellung von Dienstkontoschlüsseln verhindern oder IAM-Berechtigungen auf bestimmte Domänen beschränken.
→Organization Policy-Einschränkungen wie `iam.disableServiceAccountKeyCreation` und `iam.allowedPolicyMemberDomains` verwenden.
Warum: Organisation Policies werden vererbt und können von Projektbesitzern nicht überschrieben werden, was eine konsistente Sicherheitshaltung gewährleistet.
Ein Benutzer benötigt temporären, auditierbaren und genehmigungsbasierten Administratorzugriff auf eine Produktionsumgebung für einen Vorfall.
→Privileged Access Manager (PAM) für Just-in-Time (JIT)-Zugriff verwenden. Der Benutzer beantragt eine bestimmte Rolle für einen begrenzten Zeitraum, was einen Genehmigungsworkflow durchläuft.
Warum: Eliminiert dauerhafte Privilegien, ein großes Sicherheitsrisiko. Der Zugriff ist zeitlich begrenzt, begründet und vollständig auditiert.
Mehrere Teams teilen sich einen GKE-Cluster. Jedes Team darf nur Ressourcen innerhalb seines eigenen Namespace verwalten.
→Die IAM-Rolle `roles/container.clusterViewer` auf Projektebene zuweisen. Kubernetes RBAC `Role` und `RoleBinding` innerhalb jedes Namespace verwenden, um spezifische Berechtigungen (z. B. Bearbeiten, Anzeigen) zu erteilen.
Warum: Trennung der Authentifizierung auf Cluster-Ebene (IAM) von der Autorisierung auf Namespace-Ebene (Kubernetes RBAC), wodurch eine fein granulare, mandantenfähige Kontrolle ermöglicht wird.
APIs müssen mit kurzlebigen Anmeldeinformationen anstelle von statischen Schlüsseln aufgerufen werden.
→Dienstkonto-Impersonation verwenden. Einem Principal die Rolle `roles/iam.serviceAccountTokenCreator` für ein Ziel-Dienstkonto gewähren, um kurzlebige OAuth 2.0-Zugriffstoken zu generieren.
Warum: Vermeidet die Verteilung und Verwaltung langlebiger Schlüssel. Tokens laufen automatisch ab (Standard 1 Stunde), was das Risiko im Falle einer Kompromittierung reduziert.
Ein Auftragnehmer benötigt Zugriff auf bestimmte Ressourcen, aber der Zugriff muss nach 30 Tagen automatisch ablaufen.
→Die erforderliche IAM-Rolle mit einer zeitbasierten IAM-Bedingung gewähren, z. B. `request.time < timestamp("YYYY-MM-DDTHH:MM:SSZ")`.
Warum: Automatisiert den Entzug des Zugriffs, vermeidet manuelle Bereinigung und stellt sicher, dass der Zugriff nicht unbeabsichtigt verlängert wird.
Nur Container-Images zulassen, die von der CI/CD-Pipeline signiert wurden, um in Produktions-GKE-Clustern bereitgestellt zu werden.
→Binary Authorization implementieren. Eine Attestierung in der CI-Pipeline erstellen, um Images zu signieren. Eine Binary Authorization-Richtlinie auf dem GKE-Cluster konfigurieren, um diese Attestierung zu verlangen.
Warum: Erzwingt eine sichere Software-Lieferkette, indem verhindert wird, dass ungeprüfte oder manipulierte Images in der Produktion ausgeführt werden.
Referenz↗
Berechtigungen für Ressourcen basierend auf ihren zugewiesenen Tags gewähren, nicht auf einzelnen Ressourcennamen.
→IAM-Bedingungen mit Ressourcen-Tag-Ausdrücken verwenden, wie `resource.matchTag("123456789/env", "prod")`.
Warum: Ermöglicht skalierbare, attributbasierte Zugriffskontrolle (ABAC). Berechtigungen sind dynamisch und werden automatisch angewendet, sobald Ressourcen getaggt werden.
Einem Service-Projekt erlauben, VMs in einem Shared VPC-Hostprojekt bereitzustellen, ohne Netzwerkadministratorrechte zu gewähren.
→Im Hostprojekt dem Dienstkonto des Service-Projekts die Rolle `roles/compute.networkUser` für die spezifischen Subnetze gewähren, die es verwenden muss.
Warum: Folgt dem Prinzip der geringsten Rechte. Service-Projekte können das Netzwerk nutzen, aber nicht ändern (z. B. Firewall-Regeln ändern), was zentral verwaltet bleibt.
Ein Benutzer mit `storage.admin` kann keinen Bucket erstellen. Sie müssen die Ursache ermitteln.
→Suchen Sie nach einer IAM Deny Policy auf einer höheren Ebene (Ordner, Organisation), die die Berechtigung `storage.buckets.create` verweigert.
Warum: IAM Deny Policies überschreiben immer alle Allow Policies. Dies ist ein leistungsstarkes Werkzeug zur Durchsetzung nicht verhandelbarer Sicherheitsgrenzen.
SSO für lokale Active Directory-Benutzer aktivieren, um auf die Google Cloud-Konsole zuzugreifen.
→Google Cloud Directory Sync (GCDS) verwenden, um Identitäten mit Cloud Identity zu synchronisieren. Föderation (SAML) zwischen Cloud Identity und AD FS (oder einem anderen IdP) konfigurieren.
Warum: Hält AD als primäre Quelle für Identitäten, während Benutzern eine nahtlose, föderierte SSO-Erfahrung geboten wird.