Organisationsrichtlinien konfigurieren

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

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:

  1. 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_OPERATION
    

    Ersetzen 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 sind CREATE, UPDATE und DELETE. Der Standardwert für das Feld disabledOperations ist *. Wenn Sie einen Dienst vollständig deaktivieren möchten, listen Sie CREATE, UPDATE und DELETE auf 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 GDCHRestrictedService unterstützt die folgende Teilmenge von Diensten in GDC:

    Dienst API-Gruppe Arten
    Marketplace marketplace.gdc.goog MarketplaceService
    Vertex AI Workbench aiplatform.gdc.goog Notebook
    Datenbankdienst – Postgres postgresql.dbadmin.gdc.goog
    • DBCluster
    • BackupPlan
    • Import
    • Restore
    Transfer Appliance system.gpc.gke.io TransferApplianceRequest
    Sicherung backup.gdc.goog BackupRepositoryManager
    Dataproc Container for Spark (Marketplace-Dienst) sparkoperator.k8s.io SparkApplication

    Wenn 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ährend DBCluster-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"
    
  2. Wenden Sie die Richtlinie mit der kubectl-Befehlszeile an:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • CLUSTER_KUBECONFIG: die kubeconfig-Datei des Clusters, auf den Sie die Richtlinie anwenden möchten
    • POLICY_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:

  1. 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\"]"
    }
    EOF
    

    Ersetzen Sie CUSTOM_ATTRIBUTE durch den Namen des Identitätsattributs, das zugeordnet werden soll, z. B. citizenship.

  2. Patchen Sie die Ressource IdentityProviderConfig im Namespace platform:

    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 befindet
    • IDENTITY_PROVIDER_CONFIG_NAME: der Name der IdentityProviderConfig-Ressource
  3. 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_VALUE
    

    Ersetzen 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 Namespace project-foo auf Subjekte mit dem Attribut citizenship=USA oder citizenship=UK beschrä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"
    
  4. Wenden Sie die Richtlinie mit der kubectl-Befehlszeile an:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml
    

    Ersetzen Sie Folgendes:

    • CLUSTER_KUBECONFIG: die kubeconfig-Datei des Clusters, auf den Sie die Richtlinie anwenden möchten
    • POLICY_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 befindet

  • POLICY_TYPE: der Typ der Organisationsrichtlinie, die gelöscht werden soll, z. B. GDCHRestrictedService oder GDCHRestrictByAttributes

  • POLICY_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ß mit kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.
  • warn: Entspricht dryrun, 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"]