Vorbeugende Kontrollen für akzeptable Ressourcenkonfigurationen

Last reviewed 2023-12-20 UTC

Wir empfehlen, Richtlinieneinschränkungen zu definieren, die akzeptable Ressourcenkonfigurationen erzwingen und riskante Konfigurationen verhindern. Der Blueprint verwendet eine Kombination aus Einschränkungen der Organisationsrichtlinien und IaC-Validierung (Infrastructure-as-Code) in Ihrer Pipeline. Durch diese Kontrollen wird verhindert, dass Ressourcen erstellt werden, die nicht Ihren Richtlinien entsprechen. Wenn Sie diese Steuerelemente schon früh beim Entwerfen und Erstellen Ihrer Arbeitslasten erzwingen, können Sie spätere Korrekturarbeiten vermeiden.

Einschränkungen für Organisationsrichtlinien

Der Organisationsrichtliniendienst erzwingt Einschränkungen, um sicherzustellen, dass bestimmte Ressourcenkonfigurationen in Ihrer Google Cloud-Organisation nicht erstellt werden können, auch nicht durch eine Person mit einer IAM-Rolle mit ausreichend Rechten.

Der Blueprint erzwingt Richtlinien auf dem Organisationsknoten, sodass diese Steuerelemente von allen Ordnern und Projekten in der Organisation übernommen werden. Dieses Richtlinienpaket soll bestimmte Konfigurationen mit hohem Risiko verhindern, z. B. die Freigabe einer VM für das öffentliche Internet oder die Gewährung öffentlichen Zugriffs auf Speicher-Buckets, es sei denn, Sie erlauben bewusst eine Ausnahme von der Richtlinie.

In der folgenden Tabelle werden die Einschränkungen für Organisationsrichtlinien beschrieben, die im Blueprint implementiert sind:

Organisationsrichtlinie-Beschränkung Beschreibung

compute.disableNestedVirtualization

Eine verschachtelte Virtualisierung auf Compute Engine-VMs kann bei unsachgemäßer Konfiguration Monitoring und andere Sicherheitstools für Ihre VMs umgehen. Diese Einschränkung verhindert das Erstellen einer verschachtelten Virtualisierung.

compute.disableSerialPortAccess

IAM-Rollen wie compute.instanceAdmin ermöglichen den privilegierten Zugriff auf den Seriellport einer Instanz mit SSH-Schlüsseln. Wenn der SSH-Schlüssel offengelegt wird, kann ein Angreifer auf den seriellen Port zugreifen und Netzwerk- und Firewallsteuerungen umgehen. Diese Einschränkung verhindert den Zugriff auf den seriellen Port.

compute.disableVpcExternalIpv6

Externe IPv6-Subnetze können für nicht autorisierten Internetzugriff freigegeben werden, wenn sie schlecht konfiguriert sind. Diese Einschränkung verhindert das Erstellen externer IPv6-Subnetze.

compute.requireOsLogin

Das standardmäßige Festlegen von SSH-Schlüsseln in Metadaten kann unbefugten Remotezugriff auf VMs ermöglichen, wenn die Schlüssel offengelegt werden. Diese Einschränkung erzwingt die Verwendung von OS Login anstelle von metadatenbasierten SSH-Schlüsseln.

compute.restrictProtocolForwardingCreationForTypes

Eine VM-Protokollweiterleitung für externe IP-Adressen kann zu nicht autorisiertem ausgehenden Internettraffic führen, wenn sie schlecht konfiguriert ist. Diese Einschränkung erlaubt die VM-Protokollweiterleitung nur für interne Adressen.

compute.restrictXpnProjectLienRemoval

Das Löschen eines Hostprojekts einer freigegebene VPC kann Auswirkungen auf alle Dienstprojekte haben, die Netzwerkressourcen verwenden. Diese Einschränkung verhindert das versehentliche oder böswillige Löschen der freigegebenen VPC-Hostprojekte, da sie das Entfernen der Projektsperre für diese Projekte verhindert.

compute.setNewProjectDefaultToZonalDNSOnly

Eine Legacy-Einstellung für das globale (projektweite) interne DNS wird nicht empfohlen, da sie die Dienstverfügbarkeit verringert. Durch diese Einschränkung wird die Verwendung der alten Einstellung verhindert.

compute.skipDefaultNetworkCreation

In jedem neuen Projekt, für das die Compute Engine API aktiviert ist, werden ein Standard-VPC-Netzwerk und zu moderate Standard-VPC-Firewallregeln erstellt. Mit dieser Einschränkung wird das Erstellen des Standardnetzwerks und der Standard-VPC-Firewallregeln übersprungen.

compute.vmExternalIpAccess

Standardmäßig wird eine VM mit einer externen IPv4-Adresse erstellt, was zu nicht autorisierten Zugriffen aus dem Internet führen kann. Mit dieser Einschränkung wird eine leere Zulassungsliste mit externen IP-Adressen konfiguriert, die die VM verwenden kann. Alle anderen werden abgelehnt.

essentialcontacts.allowedContactDomains

Standardmäßig können wichtige Kontakte so konfiguriert werden, dass Benachrichtigungen zu Ihrer Domain an jede andere Domain gesendet werden. Mit dieser Einschränkung wird festgelegt, dass nur E-Mail-Adressen in genehmigten Domains als Empfänger für wichtige Kontakte festgelegt werden können.

iam.allowedPolicyMemberDomains

Standardmäßig können Zulassungsrichtlinien für jedes Google-Konto gewährt werden, einschließlich nicht verwalteter Konten und Konten externer Organisationen. Mit dieser Einschränkung wird sichergestellt, dass Zulassungsrichtlinien in Ihrer Organisation nur verwalteten Konten aus Ihrer eigenen Domain gewährt werden können. Optional können Sie zusätzliche Domains zulassen.

iam.automaticIamGrantsForDefaultServiceAccounts

Standardmäßig werden Standarddienstkonten automatisch zu weitreichende Rollen zugewiesen. Diese Einschränkung verhindert die automatische Zuweisung von IAM-Rollen für Standarddienstkonten.

iam.disableServiceAccountKeyCreation

Dienstkontoschlüssel sind nichtflüchtige Anmeldedaten mit hohem Risiko. In den meisten Fällen kann eine sicherere Alternative zu Dienstkontoschlüsseln verwendet werden. Durch diese Einschränkung wird das Erstellen von Dienstkontoschlüsseln verhindert.

iam.disableServiceAccountKeyUpload

Wenn Sie Dienstkontoschlüsselmaterial hochladen, kann das Risiko steigen, wenn das Schlüsselmaterial offengelegt wird. Durch diese Einschränkung wird das Hochladen von Dienstkontoschlüsseln verhindert.

sql.restrictAuthorizedNetworks

Cloud SQL-Instanzen können nicht authentifiziertem Internetzugriff ausgesetzt sein, wenn die Instanzen so konfiguriert sind, dass sie autorisierte Netzwerke ohne Cloud SQL Auth-Proxy verwenden. Diese Richtlinie verhindert die Konfiguration autorisierter Netzwerke für den Datenbankzugriff und erzwingt stattdessen die Verwendung des Cloud SQL Auth-Proxys.

sql.restrictPublicIp

Cloud SQL-Instanzen können nicht authentifiziertem Internetzugriff ausgesetzt sein, wenn die Instanzen mit öffentlichen IP-Adressen erstellt werden. Diese Einschränkung verhindert öffentliche IP-Adressen in Cloud SQL-Instanzen.

storage.uniformBucketLevelAccess

Auf Objekte kann in Cloud Storage standardmäßig über Legacy-Access Control Lists (ACLs) statt auf IAM zugegriffen werden. Dies kann zu inkonsistenten Zugriffssteuerungen und zu einer versehentlichen Offenlegung führen, wenn falsch konfiguriert wird. Der Zugriff über Legacy-ACLs ist von der Einschränkung iam.allowedPolicyMemberDomains nicht betroffen. Durch diese Einschränkung wird erzwungen, dass der Zugriff nur über den einheitlichen Zugriff auf Bucket-Ebene von IAM konfiguriert werden kann, nicht über alte ACLs.

storage.publicAccessPrevention

Cloud Storage-Buckets können nicht autorisiertem Internetzugriff ausgesetzt sein, wenn sie falsch konfiguriert sind. Diese Einschränkung verhindert ACLs und IAM-Berechtigungen, die Zugriff auf allUsers und allAuthenticatedUsers gewähren.

Diese Richtlinien sind ein Ausgangspunkt, den wir für die meisten Kunden und die meisten Szenarien empfehlen. Möglicherweise müssen Sie jedoch die Einschränkungen für Organisationsrichtlinien ändern, um bestimmte Arbeitslasttypen zu berücksichtigen. Beispielsweise wird eine Arbeitslast, die einen Cloud Storage-Bucket als Back-End für Cloud CDN zum Hosten öffentlicher Ressourcen verwendet, von storage.publicAccessPrevention blockiert, oder eine öffentliche Cloud Run-Anwendung, die keine Authentifizierung erfordert, wird durch iam.allowedPolicyMemberDomains blockiert. In diesen Fällen sollten Sie die Organisationsrichtlinie auf Ordner- oder Projektebene ändern, um eine eng gefasste Ausnahme zuzulassen. Sie können auch Organisationsrichtlinien Einschränkungen bedingt hinzufügen, indem Sie ein Tag definieren, das eine Ausnahme oder Erzwingung für Richtlinien gewährt, und das Tag dann auf Projekte und Ordner anwenden.

Weitere Einschränkungen finden Sie unter Verfügbare Einschränkungen und Benutzerdefinierte Einschränkungen.

Vor der Bereitstellung Infrastruktur als Code validieren

Der Blueprint verwendet einen GitOps-Ansatz zur Verwaltung der Infrastruktur. Das bedeutet, dass alle Infrastrukturänderungen über versionierte Infrastructure as Code (IaC) implementiert werden und vor der Bereitstellung validiert werden können.

Die im Blueprint erzwungenen Richtlinien definieren zulässige Ressourcenkonfigurationen, die von Ihrer Pipeline bereitgestellt werden können. Wenn Code, der in Ihr GitHub-Repository hochgeladen wird, die Richtlinienprüfungen nicht besteht, werden keine Ressourcen bereitgestellt.

Informationen zur Verwendung von Pipelines und zur Durchsetzung von Kontrollen durch CI/CD-Automatisierung finden Sie unter Bereitstellungsmethodik.

Nächste Schritte