Zulassungslisten für privilegierte Arbeitslasten in Autopilot erstellen

In diesem Dokument wird beschrieben, wie Sie Zulassungslisten erstellen, mit denen Sie privilegierte Arbeitslasten in 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 verwaltete Arbeitslasten von den standardmäßigen Autopilot-Sicherheitseinschränkungen für bestimmte Kubernetes-Arbeitslasten ausnehmen möchten. Sie sollten bereits mit der Zulassungskontrolle für privilegierte Arbeitslasten in Autopilot vertraut sein.

Privilegierte Arbeitslasten in Autopilot

Im Autopilot-Modus wird eine Reihe von Standardeinschrä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. Standardmäßig können Sie in jedem Autopilot- oder Standardcluster 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 WorkloadAllowlist-Kubernetes-Ressourcen, die Sie in YAML-Dateien definieren und in Cloud Storage-Buckets speichern. Identitäts- und Kontoadministratoren können mit Organisationsrichtlinien konfigurieren, dass Ihre Cluster diese vom Kunden verwalteten Zulassungslisten und Buckets erkennen. 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 Zulassungskontrolle für privilegierte Autopilot-Arbeitslasten.

Hinweis

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 diese Aufgabe verwenden möchten, installieren und dann initialisieren Sie die gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem gcloud components update Befehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
  • Aktivieren Sie die Cloud Storage API.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Informationen zum Zuweisen von Rollen.

    API aktivieren

  • 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 Sie auf die Zulassungsliste setzen möchten.
  2. Fügen Sie der Pod- Spezifikation im Feld metadata.annotations 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, die Annotation 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: Verallgemeinern Sie die WorkloadAllowlist, damit ähnliche Arbeitslasten ausgenommen werden können. Gehen Sie nach einer der folgenden Methoden vor:

    • Bestimmte Felder unterstützen reguläre Ausdrücke, z. B. matchingCriteria.containers[*].image und matchingCriteria.containers[*].args. Verwenden Sie einen regulären Ausdruck, der mehrere Werte für verschiedene Arbeitslasten abgleicht.

    • 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. Laden Sie die Manifestdatei in Ihren Cloud Storage-Bucket hoch.

Wenn Ihre Organisationsrichtlinien die Installation von Zulassungslisten aus Ihrem Bucket in Clustern zulassen, können Clusteradministratoren Folgendes tun:

  1. Fügen Sie einem Cluster Ihre Zulassungslistenpfade 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, siehe Zulassungskontrolle für privilegierte Arbeitslasten im Autopilot-Modus.

Beispiel für eine Zulassungslistenkonfiguration

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 mit einer Arbeitslast übereinstimmt, die die folgenden Attribute hat:

  • Der Container container-1 in der Arbeitslast wird im privilegierten Modus ausgeführt.
  • Die Arbeitslast stellt das Verzeichnis /var/log/ aus dem Knotendateisystem 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. Überprüfen Sie die Beispiel-WorkloadAllowlist:

    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 Attribute:

    • Die Werte im Feld exemptions geben die Autopilot-Einschränkungen an, die von der Zulassungsliste umgangen werden.
    • Die Werte im Feld matchingCriteria geben die Container an, die von der Beispielarbeitslast verwendet werden, und 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, lässt GKE zu, dass die privilegierte Arbeitslast in diesem Cluster ausgeführt wird. Wenn Sie diese WorkloadAllowlist beispielsweise in einem Standardcluster mit Autopilot-Knoten installieren, kann die privilegierte Arbeitslast auf den Autopilot-Knoten ausgeführt werden.

Zugriff auf den GKE-Dienst-Agent gewähren

Zum Synchronisieren von Zulassungslisten aus Ihrem Bucket in einem Cluster benötigt der GKE-Dienst-Agent im Clusterprojekt die folgenden IAM-Rollen:

So weisen Sie dem Dienst-Agent diese Rollen zu:

  1. Suchen 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.s3ns-system.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.s3ns-system.iam.gserviceaccount.com \
        --project=BUCKET_PROJECT_ID \
        --role=roles/storage.objectViewer
    

Nächste Schritte