Mit Organisationsrichtlinien können Sie die Ressourcen Ihrer Organisation zentral und programmatisch steuern. Als Administrator für Organisationsrichtlinien können Sie Richtlinien für Ihre gesamte Organisation konfigurieren, um die folgenden Vorteile zu erzielen:
- Zentralisieren Sie die Steuerung, um Einschränkungen für die Nutzung der Ressourcen Ihrer Organisation zu konfigurieren.
- Definieren und etablieren Sie Schutzmaßnahmen für Ihre Entwicklungsteams, damit sie die Compliance-Anforderungen einhalten.
- Projektinhaber und ihre Teams können schnell vorankommen, ohne die Compliance zu gefährden.
Google Distributed Cloud (GDC) mit Air Gap bietet keine Console-UI oder dedizierte CLI zum Erstellen und Verwalten von Organisationsrichtlinien. Sie müssen die Kubernetes API oder die kubectl-Befehlszeile verwenden.
Unterschiede zur Identitäts- und Zugriffsverwaltung
Identity and Access Management (IAM) und Organisationsrichtlinien dienen sich ergänzenden Zugriffs- und Governance-Funktionen:
- IAM konzentriert sich auf die Erteilung von Berechtigungen. Sie definiert, wer (Mitglieder wie Nutzer, Gruppen oder Dienstkonten) welche Aktionen (Rollen) für welche Ressourcen (Ressourcenbereich) ausführen kann. Berechtigungen, die über IAM-Rollen gewährt werden, sind additiv und haben keine Ablehnungsregeln.
- Organisationsrichtlinien dienen dazu, Sicherheitsmechanismen einzurichten. Mit ihnen können Administratoren programmatische Einschränkungen für Ressourcen in der gesamten Organisation konfigurieren, z. B. bestimmte Dienste deaktivieren oder Ressourcenänderungen basierend auf Subjektattributen mithilfe der attributbasierten Zugriffssteuerung (ABAC) einschränken. Organisationsrichtlinien haben Vorrang und blockieren Vorgänge, auch wenn ein Mitglied eine IAM-Rolle hat.
Hinweis
Bevor Sie Organisationsrichtlinien konfigurieren, müssen Sie die erforderlichen Berechtigungen anfordern und Ihre Umgebung vorbereiten.
IAM-Rollen anfordern
Wenden Sie sich an Ihren IAM-Admin der Organisation, um die folgenden IAM-Rollen für die Aufgaben anzufordern, die Sie ausführen müssen:
- Administrator für Richtlinien für eingeschränkte Dienste (
gdchrestrictedservice-policy-admin): Richtlinien für eingeschränkte Dienste erstellen, aktualisieren und löschen. - Administrator von Richtlinien für die Einschränkung nach Attributen (
gdchrestrictbyattributes-policy-admin): Erstellen, Aktualisieren und Löschen von Richtlinien für die attributbasierte Zugriffssteuerung.
Umgebung vorbereiten
Laden Sie die gdcloud CLI herunter und installieren Sie sie, falls noch nicht geschehen.
Generieren Sie eine kubeconfig-Datei, um den kubectl-CLI-Zugriff zu konfigurieren.
Richtlinie konfigurieren
In GDC können Sie zwei Arten von Organisationsrichtlinien konfigurieren:
- Richtlinie für eingeschränkte Dienste (
GDCHRestrictedService): Schränkt ein, welche Dienste Sie in einem Cluster verwenden oder ändern können. - Attributbasierte Zugriffssteuerungsrichtlinie (
GDCHRestrictByAttributes): Schränkt den Zugriff auf Ressourcen in einem Cluster bedingt ein, basierend auf Subjektattributen, die von Ihrem Identitätsanbieter zugeordnet wurden.
Richtlinie für eingeschränkte Dienste konfigurieren
Mit dem Richtlinientyp GDCHRestrictedService können Sie einschränken, welche Dienste Sie in einem Cluster verwenden oder ändern können, indem Sie bestimmte APIs blockieren. Sie können beispielsweise einen Dienst auf bestimmte Projekte beschränken oder den Zugriff auf einen neuen Dienst blockieren, während Sie ihn testen. Erstellen Sie diese Richtlinie im selben Cluster wie die Dienstressourcen. Sie können in einem Cluster mehrere Richtlinieninstanzen für verschiedene Dienste oder Projekte erstellen.
GDCHRestrictedService unterstützt die Vorgänge CREATE, UPDATE und DELETE. Wenn Sie Lesevorgänge für GET und LIST einschränken möchten, verwenden Sie IAM-Rollenbindungen, um Zugriff zu gewähren und zu widerrufen.
Konfigurieren Sie eine Richtlinie für eingeschränkte Dienste:
Definieren Sie das Richtlinienmanifest:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATIONErsetzen Sie Folgendes:
POLICY_NAME: der Name der Organisationsrichtlinie.API_GROUP: die API-Gruppe des einzuschränkenden Dienstes, wie in der folgenden Tabelle der unterstützten Dienste aufgeführt.KIND: Die einzuschränkende Ressourcenart, wie in der folgenden Tabelle der unterstützten Dienste aufgeführt.DISABLED_OPERATION: die Vorgangsgruppen, die durch diese Richtlinie blockiert werden. Die zulässigen Werte sindCREATE,UPDATEundDELETE. Der Standardwert für das FelddisabledOperationsist*. Wenn Sie einen Dienst vollständig deaktivieren möchten, listen SieCREATE,UPDATEundDELETEauf und geben Sie alle Arten an.
Standardmäßig gilt die Richtlinie für alle Namespaces im Cluster. Informationen zum Beschränken der Richtlinie auf bestimmte Namespaces oder Projekte finden Sie unter Geltungsbereich einer Organisationsrichtlinie innerhalb eines Clusters definieren.
Die Richtlinie
GDCHRestrictedServiceunterstützt die folgende Teilmenge von Diensten in GDC:Dienst API-Gruppe Arten Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebookDatenbankdienst – Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequestSicherung backup.gdc.googBackupRepositoryManagerDataproc Container for Spark (Marketplace-Dienst) sparkoperator.k8s.ioSparkApplicationWenn ein Dienst mehrere Arten in der Tabelle auflistet (z. B. Datenbankdienst), können Sie nur die einzelnen Arten angeben, die Sie einschränken möchten. Sie können beispielsweise
Restore-Vorgänge blockieren, währendDBCluster-Vorgänge weiterhin zulässig sind.Im folgenden Beispiel werden Aktualisierungen auf Marketplace-Dienste beschränkt:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: no-update-to-marketplace-service spec: match: kinds: - apiGroups: - "marketplace.gdc.goog" kinds: - MarketplaceService parameters: disabledOperations: - "UPDATE"Wenden Sie die Richtlinie mit der kubectl-Befehlszeile an:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlErsetzen Sie Folgendes:
CLUSTER_KUBECONFIG: die kubeconfig-Datei des Clusters, auf den Sie die Richtlinie anwenden möchtenPOLICY_NAME: der Name der Organisationsrichtliniendatei
Attributbasierte Zugriffssteuerungsrichtlinie konfigurieren
Mit dem Richtlinientyp GDCHRestrictByAttributes können Sie ABAC-Richtlinien erstellen, um den Zugriff auf Ressourcen basierend auf Subjektattributen bedingt einzuschränken. Mit diesem Richtlinientyp können Sie beispielsweise Schreib- oder Änderungsvorgänge für Storage-Buckets einschränken, sodass nur Nutzer oder Dienstkonten mit bestimmten Identitätsattributen (z. B. citizenship=USA oder citizenship=UK) diese Vorgänge ausführen können.
Erstellen Sie diese Richtlinie im selben Cluster wie die Ressourcen. Sie können in einem Cluster mehrere Richtlinieninstanzen für verschiedene Ressourcen oder Projekte erstellen.
Konfigurieren Sie eine attributbasierte Zugriffssteuerungsrichtlinie:
Erstellen Sie eine JSON-Patchdatei, um benutzerdefinierte Identitätsattribute für Ihre
IdentityProviderConfig-Ressource zuzuordnen:cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOFErsetzen Sie
CUSTOM_ATTRIBUTEdurch den Namen des Identitätsattributs, das zugeordnet werden soll, z. B.citizenship.Patchen Sie die Ressource
IdentityProviderConfigim Namespaceplatform:kubectl --kubeconfig CLUSTER_KUBECONFIG patch \ IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \ -n platform --type=json \ -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'Ersetzen Sie Folgendes:
CLUSTER_KUBECONFIG: die kubeconfig-Datei des Clusters, in dem sich der Identitätsanbieter befindetIDENTITY_PROVIDER_CONFIG_NAME: der Name derIdentityProviderConfig-Ressource
Definieren Sie das Richtlinienmanifest:
apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: attributes: - CUSTOM_ATTRIBUTE attributeValues: - ALLOWED_ATTRIBUTE_VALUEErsetzen Sie Folgendes:
POLICY_NAME: der Name der Organisationsrichtlinie.API_GROUP: die API-Gruppe der einzuschränkenden Ressourcen, z. B.object.gdc.goog.KIND: die einzuschränkende Ressourcenart, z. B.Bucket.CUSTOM_ATTRIBUTE: das benutzerdefinierte Subjektattribut, das vom Identitätsanbieter zugeordnet wird, z. B.citizenship.ALLOWED_ATTRIBUTE_VALUE: der zulässige Wert für das benutzerdefinierte Attribut, z. B.USA. Anfragen von Subjekten, deren Attribut nicht mit einem der zulässigen Werte übereinstimmt, werden abgelehnt.
Standardmäßig gilt die Richtlinie für alle Namespaces im Cluster. Informationen zum Beschränken der Richtlinie auf bestimmte Namespaces oder Projekte finden Sie unter Geltungsbereich einer Organisationsrichtlinie innerhalb eines Clusters definieren.
Im folgenden Beispiel wird die Änderung von
Bucket-Ressourcen im Namespaceproject-fooauf Subjekte mit dem Attributcitizenship=USAodercitizenship=UKbeschränkt:apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: restrict-by-citizenship spec: match: scope: Namespaced kinds: - apiGroups: - "object.gdc.goog" kinds: - Bucket namespaces: - project-foo parameters: attributes: - "citizenship" attributeValues: - "USA" - "UK"Wenden Sie die Richtlinie mit der kubectl-Befehlszeile an:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlErsetzen Sie Folgendes:
CLUSTER_KUBECONFIG: die kubeconfig-Datei des Clusters, auf den Sie die Richtlinie anwenden möchtenPOLICY_NAME: der Name der Organisationsrichtliniendatei
Bereich einer Organisationsrichtlinie innerhalb eines Clusters definieren
Wenn Sie eine Organisationsrichtlinie definieren, müssen Sie entscheiden, ob sie sich auf alle Namespaces, nur auf bestimmte Namespaces oder auf alle Namespaces mit Ausnahme einer bestimmten Liste auswirken soll. Verwenden Sie dazu eine Kombination der Parameter .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces und .spec.match.scope der Richtliniendefinition.
Weitere Informationen zu diesen Parametern finden Sie im Abschnitt „Übereinstimmung mit Organisationsrichtlinien“. Wenn Sie beispielsweise das Erstellen von Datenbanken nur in Namespaces mit dem Label owner: dba-team zulassen möchten, erstellen Sie die folgende Richtlinie:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: db-restricted-to-dbas
spec:
match:
scope: Namespaced
namespaceSelector:
matchExpressions:
# We are restricting the use of the service in namespaces that
# don't have the owner: dba-team label
- key: owner
operator: NotIn
values:
- dba-team
kinds:
- apiGroups:
- "postgresql.dbadmin.gdc.goog"
kinds:
- DBCluster
- BackupPlan
- Import
- Restore
parameters:
disabledOperations:
- "UPDATE"
- "CREATE"
- "DELETE"
Vorhandene Richtlinie zurücksetzen
Wenn Sie eine vorhandene Richtlinie nicht mehr erzwingen möchten, löschen Sie sie mit der kubectl-Befehlszeile. Verwenden Sie eine kubeconfig-Datei, die Ihnen Zugriff auf den Cluster gewährt, in dem die Richtlinie definiert ist, und auf die IAM-Rolle, die dem Richtlinientyp entspricht (z. B. gdchrestrictedservice-policy-admin oder gdchrestrictbyattributes-policy-admin).
So löschen Sie eine Organisationsrichtlinie:
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
Ersetzen Sie Folgendes:
CLUSTER_KUBECONFIG: die kubeconfig-Datei des Clusters, in dem sich die Organisationsrichtlinie befindetPOLICY_TYPE: der Typ der Organisationsrichtlinie, die gelöscht werden soll, z. B.GDCHRestrictedServiceoderGDCHRestrictByAttributesPOLICY_NAME: der Name der zu löschenden Organisationsrichtlinie
Richtlinie im Prüfmodus testen
Sie können eine Richtlinie testen, ohne sie zu erzwingen. Testen Sie eine Richtlinie, um sicherzustellen, dass sie vor dem Roll-out keine vorhandenen Systeme beeinträchtigt, oder um eine Schätzung zu erhalten, wie weit verbreitet ein Verhalten ist. Fügen Sie Ihrer Richtliniendefinition ein enforcementAction hinzu, um einen Test hinzuzufügen. Für diesen Parameter gibt es drei mögliche Werte:
deny: Die Richtlinie wird erzwungen. Dies ist die Standardeinstellung.dryrun: Die Aktion ist zulässig, aber Sie können sehen, dass sowohl in den Audit-Logs als auch im Richtlinienstatus ein Richtlinienverstoß vorliegt. Prüfen Sie den Verstoß mitkubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.warn: Entsprichtdryrun, mit der Ausnahme, dass der Test auch eine Warnung als Antwort auf die Anfrage anzeigt, die einen Richtlinienverstoß ausgelöst hat.
Wenn Sie beispielsweise eine Richtlinie testen möchten, die den Marketplace deaktiviert, erstellen Sie die folgende Richtlinie:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: disable-marketplace-service-project-alice
spec:
enforcementAction: warn
match:
kinds:
- apiGroups: ["marketplace.gdc.goog"]
kinds: ["MarketplaceService"]