Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln

Unsere Dokumente werden häufig geschrieben, um Ihnen den Einstieg in ein Produkt oder ein Feature zu erleichtern. Einige Dokumente funktionieren jedoch möglicherweise nicht richtig, wenn Ihre Organisation Sicherheitseinschränkungen anwendet. Ihr Unternehmen kann beispielsweise einige der Sicherheitseinschränkungen aus dem Cloud Foundation Toolkit, den Google Cloud-Sicherheits-Blueprints, implementieren oder eigene erstellen.

Dieser Artikel hilft Ihnen bei der Behebung von Fehlern bei der Anwendungsbereitstellung, die in einer Organisation auftreten können, die Sicherheitseinschränkungen verwendet.

Probleme mit Sicherheitseinschränkungen beheben

Ihr IT-Betriebs- oder Sicherheitsteam kann Sicherheitseinschränkungen über Organisationsrichtlinien aktivieren. Diese Einschränkungen schränken ein, wie die Ressourcen Ihrer Organisation verwendet werden können.

Wenn Sie eine API-Anfrage senden, die einen Fehler zurückgibt, sollte die API-Antwort Ihnen mitteilen, ob es sich um einen Richtlinienverstoß handelt. In der Antwort sollte die Einschränkung erläutert werden, die verletzt wird. Mit den folgenden Schritten zur Fehlerbehebung können Sie feststellen, ob ein Verstoß vorliegt:

  1. Überprüfen Sie die API-Antwortfehlermeldung. Können Sie erkennen, welche Sicherheitseinschränkung Ihre Bereitstellung verletzt?

    Das folgende Beispiel zeigt, dass die sql.restrictPublicIp-Einschränkung das Problem ist:

    Organization Policy check failure
    The external IP of this instance violates the constraints/sql.restrictPublicIp enforced
    
  2. Wenn Sie den Richtlinienverstoß verstehen, aktualisieren Sie die Konfiguration der Ressourcenbereitstellung, um die Einschränkungen zu berücksichtigen.

    Im vorherigen Beispiel, in dem Sie externe öffentliche IP-Adressen einschränken, konfigurieren Sie Ihre Cloud SQL-Instanz für die Verwendung einer internen privaten IP-Adresse.

  3. Wenn Sie sich nicht sicher sind, warum die Einschränkung angewendet wird oder was Sie tun sollen, wenden Sie sich an Ihr Sicherheitsteam, um zu verstehen, wo die Richtlinie in der Hierarchie Ihrer Organisation angewendet wird und welche Problemumgehungen zur Verfügung stehen.

    Prüfen Sie, ob Bereitstellungsvorlagen wie Terraform-Vorlagen in Ihrer Organisation freigegeben sind. Diese Vorlagen sollten detailliert beschreiben, wie die Google Cloud-Infrastruktur konfiguriert wurde, und die Bereitstellung Ihrer Anwendung einschränken.

Häufige Probleme mit Sicherheitseinschränkungen

Wenn Sie Ihre Anwendungen in Google Cloud bereitstellen, kann ein Fehler wie im folgenden Beispiel auftreten:

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

In diesem Beispiel können Sie eine Cloud SQL-Instanz nicht für die Verwendung einer externen öffentlichen IP-Adresse konfigurieren. Eine Sicherheitseinschränkung wird durch eine Richtlinie erzwungen, die auf Ihre Umgebung angewendet wird.

Die folgenden allgemeinen Sicherheitseinschränkungen können bei der Entwicklung Ihrer Anwendungen in einer API-Fehlerantwort aktiviert und ausführlich beschrieben werden.

Compute Engine

Name der Einschränkung Gründe für die Implementierung Vorgeschlagene Problemumgehung
constraints/compute.disableNestedVirtualization Verhindern Sie, dass ein KVM-kompatibler Hypervisor in der VM installiert wird. Dieses Verhalten könnte ohne angemessene Patches und angemessene Verwaltung Sicherheitsrisiken verursachen. Konfigurieren Sie Ihre VM so, dass sie hardwarebeschleunigte verschachtelte Virtualisierung deaktiviert.

Standardmäßig ist sie für alle Compute Engine-VMs aktiviert, die auf Intel Haswell oder neueren CPU-Plattformen ausgeführt werden.
constraints/compute.requireShieldedVm Erfordert, dass neue VM-Instanzen Shielded-Laufwerk-Images mit aktiviertem Secure Boot, vTPM und Integrity Monitoring verwenden. Diese Optionen verhindern, dass die VM manipuliert wird oder dass auf Daten zugegriffen wird oder sie geändert werden. Aktivieren Sie beim Erstellen einer VM keine Shielded VMs.

Zum Erstellen eines GKE-Clusters müssen Sie Shielded GKE-Knoten aktivieren.

Dataflow unterstützt derzeit keine Shielded VM-Worker.
constraints/compute.disableSerialPortAccess Entfernen Sie Sicherheitsvektoren, um mit einer VM zu interagieren, oder sehen Sie sich die Diagnoseausgabe an, die zum Erstellen eines Angriffs verwendet werden kann. Aktivieren Sie beim Erstellen einer VM nicht den Zugriff auf den seriellen Port.
constraints/compute.disableGuestAttributesAccess Minimieren Sie die Menge an Informationen über den zugrunde liegenden Host und die Plattform, die von einer schädlichen Anwendung missbraucht werden könnten. Verwenden Sie die Compute Engine API nicht, um Gastattribute Ihrer Compute Engine-VMs zu lesen.
constraints/compute.vmExternalIpAccess Verhindern Sie, dass Anwendungen mit einer externen IP-Adresse ausgeführt werden und über das Internet zugänglich sind. Deaktivieren Sie den externen IP-Zugriff für Ihre VMs. Sie können nur eine interne private IP-Adresse verwenden.

GKE kann private Cluster ohne öffentliche IP-Adressen verwenden.

Dataprep und Dataflow unterstützen derzeit keine privaten IP-Adressen.

Virtuelle Netzwerk- und IP-Adressen

Name der Einschränkung Gründe für die Implementierung Vorgeschlagene Problemumgehung
constraints/compute.skipDefaultNetworkCreation Achten Sie darauf, dass nur vom Unternehmen verwaltete Virtual Private Clouds (VPCs) erstellt werden können und dass Netzwerk-Traffic- oder Filterregeln angewendet werden. Verbinden Sie Ihre Anwendungen mit vorhandenen VPCs in Ihrer Organisation. Automatisch erstellte VPCs werden nicht für neue Projekte bereitgestellt.
constraints/compute.restrictXpnProjectLienRemoval Verhindern Sie, dass eine freigegebene VPC versehentlich gelöscht wird, wenn Ressourcen in anderen Projekten auf den von ihr bereitgestellten Netzwerkdiensten basieren. Versuchen Sie nicht, eine freigegebene VPC zu löschen. Achten Sie darauf, dass Sie die richtige Ressource zum Löschen auswählen.
constraints/sql.restrictPublicIp Verhindern Sie, dass Cloud SQL-Instanzen mit einer externen IP-Adresse ausgeführt werden und über das Internet zugänglich sind. Konfigurieren Sie Ihre Cloud SQL-Instanz nicht für die Verwendung einer externen öffentlichen IP-Adresse.

Konfigurieren Sie stattdessen Ihre Cloud SQL-Instanz für die Verwendung einer internen privaten IP-Adresse.

Identität und Authentifizierung

Name der Einschränkung Gründe für die Implementierung Vorgeschlagene Problemumgehung
constraints/iam.disableServiceAccountKeyCreation Dienstkontoschlüssel können ein Sicherheitsrisiko darstellen, wenn sie offengelegt werden. Verhindern Sie daher, dass sie exportiert werden. Verwenden Sie anstelle eines Dienstkontos eine andere Form der Authentifizierung.
constraints/storage.uniformBucketLevelAccess Minimieren Sie das Risiko von falschen oder inkonsistenten Berechtigungen, die auf Storage-Buckets angewendet werden, indem Sie nur die Verwendung von Identity and Access Management (IAM) erlauben. Aktivieren Sie den einheitlichen Zugriff auf Bucket-Ebene, um Ihren Cloud Storage-Bucket zu sichern.
constraints/iam.allowedPolicyMemberDomains Beschränken Sie den Google Cloud-Ressourcenzugriff auf genehmigte Domains. Verwenden Sie ein Konto innerhalb einer der genehmigten Domains. Für diese Einschränkung gibt es zusätzliche bekannte Probleme.

Beispiele für API-Antwortfehler

Im vorherigen Beispiel zur Einschränkung externer IP-Adressen mit Cloud SQL führt ein Richtlinienverstoß dazu, dass die API einen Fehler zurückgibt. Die folgenden ausführlichere Beispiele zeigen die API-Antwort, die Ihnen zeigt, welche Einschränkung das Fehlschlagen der Anfrage verursacht. Prüfen Sie Ihre eigenen API-Antworten, um zu verstehen, warum Anwendungsbereitstellungen fehlschlagen.

Cloud SQL-Fehler mit dem gcloud-Befehlszeilentool:

$ gcloud alpha sql instances create mysql-node --project my-sql-project

ERROR: (gcloud.alpha.sql.instances.create) HTTPError 400: Invalid request:
Organization Policy check failure: the external IP of this instance violates the
constraints/sql.restrictPublicIp enforced at the 123456789 project.

Cloud SQL-Fehler mit Terraform:

$ terraform apply plan.out

[...]
module.mysql-db.google_sql_database_instance.default: Creating...

Error: Error, failed to create instance backend01-db-1c81e0e3: googleapi:
Error 400: Invalid request: Organization Policy check failure: the external IP
of this instance violates the constraints/sql.restrictPublicIp enforced at the
123456789 project., invalid

Auf Ihr Projekt angewendete Organisationsrichtlinien auflisten

Ihr Projekt kann Richtlinien von der Ordner- oder Organisationsebene übernehmen. Abhängig von Ihren Zugriffsrollen haben Sie möglicherweise keinen Einblick in die Richtlinien, die auf höheren Ebenen in Ihrer Hierarchie durchgesetzt werden, um zu sehen, wo die verletzte Einschränkung angewendet wird.

Mit dem Befehl gcloud alpha resource-manager org-policies list können Sie die angewendeten Richtlinien oder Ausnahmen für Ihr Projekt aufrufen und Ihre Projekt-ID mit dem Parameter --project angeben:

gcloud alpha resource-manager org-policies list --project <project-id>

Weitere Informationen zu einer angewendeten Richtlinie erhalten Sie über den Befehl gcloud alpha resource-org org-policies describe. Geben Sie den Namen der zu beschreibenden Richtlinie und Ihre Projekt-ID mit dem Parameter --project an:

gcloud alpha resource-manager org-policies describe <policy-name> --project <project-id>

Nächste Schritte

Wenn Sie nicht feststellen können, wo eine Richtlinie angewendet wird und wie Sie eine Sicherheitseinschränkung umgehen können, wenden Sie sich an Ihr IT-Betriebs- oder Sicherheitsteam. Jede Organisation wendet Richtlinien und Blueprints an, die auf ihre Umgebung zugeschnitten sind.

Weitere Informationen zu allen Steuerungen, die in Ihrer Organisation angewendet werden können, finden Sie in der Liste der Einschränkungen für Organisationsrichtlinien.