Zulassungslisten für privilegierte Arbeitslasten in Autopilot erstellen

In diesem Dokument wird beschrieben, wie Sie Zulassungslisten erstellen, mit denen Sie privilegierte Arbeitslasten auf Ihren Autopilot-Knoten bereitstellen können. Sie speichern diese Zulassungslisten in Cloud Storage-Buckets. Dieses Dokument richtet sich an Plattformadministratoren und ‑operatoren, die bestimmte vom Kunden bereitgestellte Arbeitslasten von den standardmäßigen Autopilot-Sicherheitseinschränkungen für bestimmte Kubernetes-Arbeitslasten ausnehmen möchten. Sie sollten bereits mit der Zugangssteuerung für privilegierte Arbeitslasten in Autopilot vertraut sein.

Privilegierte Arbeitslasten in Autopilot

Im Autopilot-Modus wird eine Standardgruppe von Einschränkungen für Arbeitslasten erzwungen, um die Sicherheit zu verbessern. Sie können diese Einschränkungen umgehen, um bestimmte privilegierte Arbeitslasten auszuführen, indem Sie Zulassungslisten installieren, die diesen Arbeitslasten entsprechen. In Autopilot- oder Standardclustern können Sie standardmäßig Zulassungslisten von Autopilot-Partnern und bestimmten Open-Source-Projekten installieren.

Berechtigte GKE-Kunden können Zulassungslisten für ihre eigenen privilegierten Arbeitslasten erstellen und verwalten, die nicht mit den standardmäßigen Autopilot-Einschränkungen kompatibel sind. Diese Zulassungslisten sind benutzerdefinierte Kubernetes-Ressourcen vom Typ „WorkloadAllowlist“, die Sie in YAML-Dateien definieren und in Cloud Storage-Buckets speichern. Identitäts- und Kontoadministratoren verwenden Organisationsrichtlinien, damit Sie Ihre Cluster so konfigurieren können, dass diese vom Kunden verwalteten Zulassungslisten und Buckets erkannt werden. Clusteradministratoren können diese Zulassungslisten installieren, damit die privilegierten Arbeitslasten im Autopilot-Modus ausgeführt werden können.

Weitere Informationen zum Prozess und zu den beteiligten Personen finden Sie unter Funktionsweise der Zulassungssteuerung für privilegierte Autopilot-Arbeitslasten.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
  • Enable the Cloud Storage API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  • Achten Sie darauf, dass Sie einen GKE-Cluster mit Version 1.35 oder höher haben. Sie können für diese Aufgabe auch einen Autopilot-Cluster erstellen.
  • Prüfen Sie, ob Sie einen Cloud Storage-Bucket haben, in dem Sie Zulassungslistendateien speichern können. Sie können für diese Aufgabe auch einen Bucket erstellen.
  • Öffnen Sie das YAML-Manifest, das die privilegierte Arbeitslast definiert, die Sie in Autopilot ausführen möchten.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihren Bucket zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Speichern von Zulassungslisten in Cloud Storage und zum Konfigurieren der Synchronisierung benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

WorkloadAllowlist erstellen und hochladen

Zulassungslisten sind benutzerdefinierte WorkloadAllowlist-Ressourcen, die Sie in YAML-Dateien definieren. Die Felder in der Spezifikation einer WorkloadAllowlist ähneln den Feldern in einer Kubernetes-Pod-Spezifikation. Wenn Sie eine Zulassungsliste in Ihrem Cluster installieren und eine privilegierte Arbeitslast bereitstellen, validiert GKE die Spezifikation der privilegierten Arbeitslast anhand der installierten Zulassungsliste. Die Arbeitslast kann nur ausgeführt werden, wenn alle Felder in der Zulassungslistenspezifikation mit den entsprechenden Feldern in der Arbeitslastspezifikation übereinstimmen.

So erstellen Sie eine neue WorkloadAllowlist und laden sie in Ihren Cloud Storage-Bucket hoch:

  1. Identifizieren Sie die privilegierte Arbeitslast, die auf die Zulassungsliste gesetzt werden soll.
  2. Fügen Sie dem Feld metadata.annotations in der Pod-Spezifikation die folgende Annotation hinzu:

    cloud.google.com/generate-allowlist: "true"
    

    Fügen Sie für Pods, die von einem Controller wie einem DaemonSet oder einem Deployment verwaltet werden, das Label dem Feld spec.template.metadata.annotations hinzu.

  3. Versuchen Sie, die privilegierte Arbeitslast in Ihrem Cluster zu erstellen:

    kubectl apply -f WORKLOAD_FILE_PATH
    

    Ersetzen Sie WORKLOAD_FILE_PATH durch den Pfad zu Ihrer Arbeitslastmanifestdatei. GKE lehnt die Arbeitslast mit einer Fehlermeldung ab, die ein WorkloadAllowlist-Manifest enthält. Die Ausgabe sieht etwa so aus:

    This workload can be enabled using the following Custom Resource. To be used in-cluster, the WorkloadAllowlist must be uploaded to Google Cloud Storage and then installed using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/how-to/autopilot-privileged-allowlists.
    
    Note that many common partner workloads are already allowlisted. These can be installed directly using an AllowlistSynchronizer. Refer to https://cloud.google.com/kubernetes-engine/docs/resources/autopilot-partners.
    ---
    apiVersion: auto.gke.io/v1
    kind: WorkloadAllowlist
    metadata:
        name: test-pod-allowlist-2025-09-11t22-40-37
        annotations:
            autopilot.gke.io/no-connect: "true"
    exemptions:
        - autogke-disallow-privilege
    matchingCriteria:
        containers:
            - name: pause-container2
              image: k8s.gcr.io/pause2
              securityContext:
                privileged: true
    
  4. Erstellen Sie in einem Texteditor eine YAML-Datei, die die generierte WorkloadAllowlist enthält.

  5. Legen Sie das Feld metadata.name der Zulassungsliste fest.

  6. Optional: Generalisieren Sie die WorkloadAllowlist, damit ähnliche Arbeitslasten ausgenommen werden können. Gehen Sie nach einer der folgenden Methoden vor:

    • In bestimmten Feldern werden reguläre Ausdrücke unterstützt, z. B. in matchingCriteria.containers[*].image und matchingCriteria.containers[*].args. Verwenden Sie einen regulären Ausdruck, der mit mehreren Werten für verschiedene Arbeitslasten übereinstimmt.

    • Bestimmte Felder wie matchingCriteria.containers und matchingCriteria.securityContext.capabilities.add stimmen mit jeder Arbeitslast überein, die eine Teilmenge der Werte aus der WorkloadAllowlist enthält. Geben Sie in der WorkloadAllowlist zusätzliche Werte an, um andere Arbeitslasten abzugleichen.

    Weitere Informationen zu allen unterstützten Feldern und Werten, die Sie verwenden können, finden Sie in der WorkloadAllowlist CustomResourceDefinition.

  7. Manifestdatei in Ihren Cloud Storage-Bucket hochladen

Wenn die Richtlinien Ihrer Organisation die Installation von Zulassungslisten aus Ihrem Bucket in Clustern zulassen, können Clusteradministratoren Folgendes tun:

  1. Fügen Sie einem Cluster die Pfade Ihrer Zulassungsliste hinzu.
  2. Erstellen Sie einen AllowlistSynchronizer, um die Zulassungslisten aus Ihrem Bucket zu installieren.

Weitere Informationen zum Konfigurieren eines Clusters und zum Installieren von Zulassungslisten finden Sie unter Zulassung privilegierter Arbeitslasten im Autopilot-Modus steuern.

Beispiel für die Konfiguration der Zulassungsliste

Das Feld matchingCriteria in einer WorkloadAllowlist-Spezifikation hat eine ähnliche Struktur wie die Kubernetes-Pod-Spezifikation. Die WorkloadAllowlist CustomResourceDefinition ist die Quelle der Wahrheit für alle Felder, Werte und Ausdrücke, die Sie verwenden können.

In diesem Abschnitt sehen Sie ein Beispiel für eine Zulassungsliste, die einer Arbeitslast mit den folgenden Eigenschaften entspricht:

  • Der container-1-Container in der Arbeitslast wird im privilegierten Modus ausgeführt.
  • Die Arbeitslast stellt das Verzeichnis /var/log/ aus dem Dateisystem des Knotens im Schreibmodus bereit.
  1. Überprüfen Sie die Beispielarbeitslast:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: example-privileged-workload
      labels:
        env: dev
    spec:
      selector:
        matchLabels:
          env: dev
      template:
        metadata:
          labels:
            env: dev
        spec:
          containers:
          - name: container-1
            image: example-image-1
            resources:
              requests:
                cpu: "400m"
                memory: "4Gi"
            # Run the container in privileged mode
            securityContext:
              privileged: true
          - name: container-2
            image: example-image-2
            volumeMounts:
            - name: write-varlog
              mountPath: /logs
              readOnly: false
          # Mount a host directory
          volumes:
          - name: write-varlog
            hostPath:
              path: /var/log
              type: Directory
    

    Standardmäßig lehnt Autopilot diese Arbeitslast ab.

  2. Sehen Sie sich die Beispiel-WorkloadAllowlist an:

    apiVersion: auto.gke.io/v1
    kind: WorkloadAllowlist
    minGKEVersion: 1.32.0-gke.1000000
    metadata:
      name: example-privileged-workload
      annotations:
        autopilot.gke.io/no-connect: "true"
    # List of constraints that the allowlist modifies
    exemptions:
    - autogke-disallow-privilege
    - autogke-no-write-mode-hostpath
    matchingCriteria:
      containers:
      - name: container-1
        image: example-image-1
        securityContext:
          privileged: true
      - name: container-2
        image: example-image-2
        volumeMounts:
        - name: write-varlog
          mountPath: /logs
          readOnly: false
      volumes:
      - name: write-varlog
        hostPath:
          path: /var/log
    

    Diese WorkloadAllowlist hat die folgenden Eigenschaften:

    • Die Werte im Feld exemptions geben die Autopilot-Einschränkungen an, die durch die Zulassungsliste umgangen werden.
    • Die Werte im Feld matchingCriteria geben die Container an, die von der Beispielarbeitslast verwendet werden, sowie die Felder, die normalerweise gegen Autopilot-Einschränkungen verstoßen würden.

    Die Zulassungsliste enthält nur die Werte für Felder, die gegen Einschränkungen verstoßen. Andere Felder in der Arbeitslast, z. B. das Feld resources.requests, werden ignoriert.

Wenn Sie diese Beispiel-WorkloadAllowlist in einem Cluster installieren, erlaubt GKE die Ausführung der privilegierten Arbeitslast in diesem Cluster. Wenn Sie beispielsweise in einem Standardcluster mit Autopilot-Knoten diese WorkloadAllowlist installieren, kann die privilegierte Arbeitslast auf den Autopilot-Knoten ausgeführt werden.

Zugriff auf den GKE-Dienst-Agent gewähren

Damit Sie Zulassungslisten aus Ihrem Bucket in einem Cluster synchronisieren können, benötigt der GKE-Dienst-Agent im Clusterprojekt die folgenden IAM-Rollen:

So weisen Sie diese Rollen dem Dienst-Agent zu:

  1. So finden Sie die Projektnummer Ihres Clusterprojekts:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    
  2. Weisen Sie die Rolle roles/storage.bucketViewer zu:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --project=BUCKET_PROJECT_ID \
        --role=roles/storage.bucketViewer
    

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: Der Name Ihres Cloud Storage-Bucket.
    • CLUSTER_PROJECT_NUMBER: die Projektnummer des Clusterprojekts aus der Ausgabe des vorherigen Schritts.
    • BUCKET_PROJECT_ID: die ID des Projekts, das Ihren Bucket enthält.
  3. Weisen Sie die Rolle roles/storage.objectViewer zu:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME
        --member=serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --project=BUCKET_PROJECT_ID \
        --role=roles/storage.objectViewer
    

Nächste Schritte