Zulassung privilegierter Arbeitslasten im Autopilot-Modus steuern

Sie können privilegierte Arbeitslasten im Autopilot-Modus von Google Kubernetes Engine (GKE) ausführen, indem Sie Zulassungslisten für diese Arbeitslasten in Ihren Clustern installieren. In diesem Dokument wird beschrieben, wie Sie die folgenden Aufgaben ausführen:

  • GKE so konfigurieren, dass nur bestimmte privilegierte Arbeitslasten im Autopilot-Modus ausgeführt werden.
  • Zulassungslisten für privilegierte Arbeitslasten installieren.

Dieses Dokument richtet sich an die folgenden Rollentypen:

  • Sicherheitsingenieure, die sicherstellen möchten, dass für die Ausführung von Arbeitslasten von Drittanbietern in Ihren Clustern eine Zulassungsliste erforderlich ist und dass diese aus von GKE genehmigten Quellen stammen.
  • Plattformingenieure, die Arbeitslasten von Drittanbietern in Clustern aktivieren möchten, um Anwendungsentwicklungsteams zu unterstützen.

Sie sollten mit den folgenden Konzepten vertraut sein:

Privilegierte Arbeitslasten in Autopilot

Im Autopilot-Modus wird eine Reihe von Standardeinschränkungen für Arbeitslasten erzwungen, um Ihre Sicherheitslage zu verbessern. Sie können diese Einschränkungen ändern, um bestimmte privilegierte Arbeitslasten auszuführen, indem Sie Zulassungslisten installieren, die diesen Arbeitslasten entsprechen. Standardmäßig können Sie mit Autopilot Zulassungslisten von Autopilot-Partnern und bestimmten Open-Source-Projekten installieren. Berechtigte GKE-Kunden können auch Zulassungslisten für eigene privilegierte Arbeitslasten erstellen, die sie in Cloud Storage-Buckets hochladen.

Jede Zulassungsliste ist eine Datei, die einer bestimmten privilegierten Arbeitslast entspricht. So führen Sie eine privilegierte Arbeitslast aus:

  1. Konfigurieren Sie den Cluster so, dass die Installation von Zulassungslisten aus bestimmten Pfaden zulässig ist. Standardmäßig werden alle Zulassungslisten von Autopilot-Partnern und genehmigten Open-Source-Projekten unterstützt.
  2. Erstellen Sie im Cluster einen AllowlistSynchronizer , der die Zulassungsliste installiert und auf dem neuesten Stand hält.

Fehlerberichte und Feature Requests für privilegierte Arbeitslasten und Zulassungslisten

Der Inhaber einer privilegierten Arbeitslast ist für das Erstellen, Entwickeln und Verwalten seiner Arbeitslasten und Zulassungslisten verantwortlich. Wenn Sie einen Fehler finden oder einen Feature Request für eine privilegierte Arbeitslast oder Zulassungsliste haben, wenden Sie sich an den entsprechenden Inhaber.

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.

Voraussetzungen

  • Für die benutzerdefinierte Ressource AllowlistSynchronizer ist die GKE-Version 1.32.2-gke.1652000 oder höher erforderlich.
  • Sie müssen wissen, welche privilegierte Arbeitslast Sie in Ihrem Cluster ausführen möchten.
  • Wenn Sie die Konfiguration des Zulassungslistenpfads für einen Cluster ändern möchten, muss in Ihrem Cluster die GKE-Version 1.35 oder höher ausgeführt werden.

Zulassungslistenpfade für einen Cluster konfigurieren

In diesem Abschnitt wird beschrieben, wie Sie einen Cluster so konfigurieren, dass die Installation von Zulassungslisten aus einer Reihe genehmigter Pfade unterstützt wird. Standardmäßig unterstützt Autopilot die Installation von Zulassungslisten von GKE-Partnern und genehmigten Open-Source-Projekten. Sie können diese Standardkonfiguration für einzelne Cluster ändern. Sie können auch genehmigte Zulassungslistenquellen für eine gesamte Organisation, einen Ordner oder ein Projekt mithilfe einer Organisationsrichtlinie angeben.

  1. Geben Sie die Pfade zu den Zulassungslistendateien an, die dem Cluster hinzugefügt werden sollen. Sie können beim Erstellen oder Aktualisieren des Clusters mehrere Pfade angeben. Sie können die Installation von Zulassungslisten aus einer beliebigen Quelle auch deaktivieren, indem Sie anstelle eines Pfads einen leeren String angeben. Weitere Informationen zu den Pfaden, die Sie angeben können, finden Sie unter Zulassungslistenpfade.

  2. Verwenden Sie das Flag --autopilot-privileged-admission, wenn Sie einen Autopilot- oder Standardcluster erstellen oder aktualisieren, um die genehmigten Zulassungslistenquellen für einen Cluster zu steuern, wie im folgenden Befehl:

    gcloud container clusters create-auto CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Ersetzen Sie Folgendes:

    • CLUSTER_NAME: ein Name für Ihren neuen Cluster.
    • LOCATION: der Speicherort der Clustersteuerungsebene, z. B. us-central1.
    • ALLOWLIST1_PATH,ALLOWLIST2_PATH,...: eine durch Kommas getrennte Liste von Pfaden zu Zulassungslistendateien oder -verzeichnissen. Beispiel: gke://*,gs://my-agent/privileged-logging-agent.yaml. Sie können die Installation von Zulassungslisten aus einer beliebigen Quelle auch deaktivieren, indem Sie einen leeren String ("") angeben.

Wenn Sie einen vorhandenen Cluster aktualisieren, ohne das Flag --autopilot-privileged-admission anzugeben, ändert sich die vorhandene Pfadkonfiguration für diesen Cluster nicht. Sie müssen dieses Flag nicht jedes Mal angeben, wenn Sie einen Cluster aktualisieren.

Nachdem der Cluster erstellt oder aktualisiert wurde, können Sie Zulassungslisten aus den angegebenen Pfaden installieren, indem Sie AllowlistSynchronizers erstellen.

Neuen AllowlistSynchronizer erstellen

Wenn Sie eine privilegierte Arbeitslast ausführen möchten, fügen Sie den Pfad zur entsprechenden Zulassungslistendatei einer AllowlistSynchronizer-Spezifikation in einer YAML-Datei hinzu. Anschließend stellen Sie den AllowlistSynchronizer in Ihrem Cluster bereit.

  1. Erstellen Sie in einem Texteditor eine neue YAML-Datei.
  2. Fügen Sie der YAML-Datei den folgenden Inhalt hinzu:

    apiVersion: auto.gke.io/v1
    kind: AllowlistSynchronizer
    metadata:
      name: ALLOWLIST_SYNCHRONIZER_NAME
    spec:
      allowlistPaths:
      - ALLOWLIST1_PATH
      - ALLOWLIST2_PATH
    

    Ersetzen Sie Folgendes:

    • ALLOWLIST_SYNCHRONIZER_NAME: der Name des neuen Synchronizers. Wählen Sie einen beschreibenden Namen, der die Arbeitslast oder das Team identifiziert, das von der Zulassungsliste unterstützt wird.
    • ALLOWLIST1_PATH, ALLOWLIST2_PATH, ...: eine Liste von Pfaden zu Zulassungslistendateien oder -verzeichnissen, die Sie installieren möchten, wie im folgenden Beispiel für von GKE genehmigte Zulassungslisten:

      allowlistPaths:
      - Gke-Org/accelerators/*
      - Wiz/wiz-sensor/v1/wiz-sensor-v1.yaml
      

      Oder im folgenden Beispiel für eigene Zulassungslisten:

      allowlistPaths:
      - my-agent/log-collector/*
      - my-agent/privileged-logging-agent.yaml
      

      Die Clusterkonfiguration muss die von Ihnen angegebenen Pfade unterstützen, wie im Abschnitt Zulassungslistenpfade für einen Cluster konfigurieren beschrieben. Außerdem darf jeder AllowlistSynchronizer entweder nur von GKE genehmigte Zulassungslisten oder nur eigene Zulassungslisten enthalten.

  3. Wenn Sie Zulassungslisten aus einem eigenen Cloud Storage-Bucket installieren, fügen Sie die Felder spec.projectNumber und spec.bucketName Ihrem AllowlistSynchronizer hinzu. Weitere Informationen finden Sie in der CustomResourceDefinition AllowlistSynchronizer.

  4. Stellen Sie die YAML-Datei in Ihrem Cluster bereit:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ersetzen Sie PATH_TO_YAML_FILE durch den Pfad zur YAML-Datei, die Sie im vorherigen Schritt erstellt haben.

    Der AllowlistSynchronizer-Controller installiert Zulassungslistendateien aus den angegebenen Pfaden in Ihrem Cluster.

  5. Warten Sie, bis der Synchronizer den Status Ready meldet:

    kubectl wait --for=condition=Ready allowlistsynchronizer/ALLOWLIST_SYNCHRONIZER_NAME \
        --timeout=60s
    

Sie können die Installation von Zulassungslisten und die Bereitstellung privilegierter Arbeitslasten auch in Ihre CI/CD-Pipeline (Continuous Integration and Continuous Deployment) einbinden. Konfigurieren Sie Ihren Workflow so, dass er wartet, bis die Zulassungsliste erfolgreich installiert wurde, bevor die entsprechende Arbeitslast bereitgestellt wird.

Vorhandenen AllowlistSynchronizer aktualisieren

Sie können einen vorhandenen AllowlistSynchronizer aktualisieren, um Zulassungslistendateien hinzuzufügen oder zu entfernen. Sie können vorhandene Synchronizer in folgenden Situationen aktualisieren:

  • Der Inhaber der Arbeitslast fügt eine neue Zulassungslistendatei mit einem anderen Namen hinzu.
  • Sie möchten einem vorhandenen Synchronizer, der zugehörige Zulassungslisten gruppiert, eine neue Zulassungsliste für Arbeitslasten hinzufügen.
  • Sie möchten eine Zulassungsliste aus einem Synchronizer entfernen, weil Sie die entsprechende Arbeitslast nicht mehr verwenden möchten.

So aktualisieren Sie ein vorhandenes AllowlistSynchronizer-Objekt:

  1. Listen Sie die vorhandenen Synchronizer in Ihrem Cluster auf:

    kubectl get allowlistsynchronizer
    
  2. Öffnen Sie die Spezifikation des Synchronizers, den Sie aktualisieren möchten, in einem Texteditor.

  3. Aktualisieren Sie das Feld spec.allowlistPaths, um Pfade zu Zulassungslistendateien hinzuzufügen, zu ändern oder zu entfernen.

  4. Speichern und schließen Sie den Texteditor.

  5. Wenden Sie die aktualisierte Konfiguration auf den Cluster an:

    kubectl apply -f PATH_TO_YAML_FILE
    

    Ersetzen Sie PATH_TO_YAML_FILE durch den Pfad zur YAML-Datei, die Sie im vorherigen Schritt aktualisiert haben.

Wenn Sie eine aktualisierte Synchronizerkonfiguration bereitstellen, erhöht sich das Feld managedAllowlistStatus.generation im Status des AllowlistSynchronizer-Objekts um eins. Der AllowlistSynchronizer-Controller wendet dann Ihre Änderungen an.

Status der Zulassungslistensynchronisierung beobachten

Nachdem Sie einen AllowlistSynchronizer installiert oder einen vorhandenen Synchronizer aktualisiert haben, können Sie den Synchronisierungsstatus beobachten. Der Status hilft Ihnen, die Installation, Entfernung oder Änderung von Zulassungslistendateien sowie alle Fehler nachzuverfolgen, die auftreten können.

Führen Sie den folgenden Befehl aus, um den allgemeinen Status der Synchronisierung zu beobachten:

kubectl get allowlistsynchronizer ALLOWLIST_SYNCHRONIZER_NAME -o yaml

Die Ausgabe sieht etwa so aus:

...
status:
  conditions:
  - type: Ready
    status: "False"
    reason: "SyncError"
    message: "some allowlists failed to sync: example-allowlist-1.yaml"
    lastTransitionTime: "2024-10-12T10:00:00Z"
    observedGeneration: 2
  managedAllowlistStatus:
    - filePath: "gs://path/to/example-allowlist-2.yaml"
      generation: 1
      phase: Installed
      lastSuccessfulSync: "2024-10-10T10:00:00Z"
    - filePath: "gs://path/to/example-allowlist-1.yaml"
      phase: Failed
      lastError: "Initial install failed: invalid contents"
      lastSuccessfulSync: "2024-10-08T10:00:00Z"

In dieser Beispielausgabe konnte die Zulassungsliste example-allowlist-1.yaml nicht synchronisiert werden und die Zulassungsliste example-allowlist-2.yaml wurde erfolgreich installiert. Eine Beschreibung dieser Felder finden Sie unter AllowlistSynchronizer-Status.

Prüfen, ob eine Zulassungsliste in Ihrem Cluster vorhanden ist

Führen Sie den folgenden Befehl aus, um zu prüfen, ob eine Zulassungsliste in Ihrem Cluster vorhanden ist:

kubectl get workloadallowlist

Die Ausgabe ist eine Liste der installierten Zulassungslisten im Cluster. Prüfen Sie, ob die Zulassungsliste, die Sie verwenden möchten, in der Ausgabe enthalten ist.

Privilegierte Arbeitslast bereitstellen

Nachdem eine Zulassungsliste erfolgreich installiert wurde, können Sie die entsprechende Arbeitslast in Ihrem Cluster bereitstellen. Der Inhaber der Arbeitslast sollte Ihnen auch eine Installationsanleitung für die Arbeitslast zur Verfügung stellen. Eine Liste der Autopilot Partner und Links zu ihrer Dokumentation finden Sie unter Autopilot-Partner.

Private Image-Mirror-Repositories verwenden

Sie können die Container-Images privilegierter Arbeitslasten in eigenen privaten Repositories spiegeln. Wenn Sie diese gespiegelten Images in einer Arbeitslast ausführen möchten, müssen alle folgenden Voraussetzungen erfüllt sein:

  • Der SHA-256-Digest des gespiegelten Images muss mit dem Image-Digest der öffentlich verfügbaren Arbeitslast übereinstimmen.
  • Der von Ihnen angegebene SHA-256-Image-Digest muss im WorkloadAllowlist-Objekt vorhanden sein, das mit Ihrem Cluster synchronisiert wird.

Wenn die Arbeitslast gespiegelte Images unterstützt, enthält die Zulassungsspezifikation für diese Arbeitslast eine Liste von Image-Digests im Feld containers.imageDigests. Normalerweise hat dieses Feld einen separaten Digest für jede verfügbare Version des Container-Images. So rufen Sie diese Liste von Image-Digests auf:

  1. Prüfen Sie, ob die Zulassungsliste in Ihrem Cluster vorhanden ist.
  2. Rufen Sie die Spezifikation der installierten Zulassungsliste ab:

    kubectl get workloadallowlist ALLOWLIST_NAME -o yaml
    

    Ersetzen Sie ALLOWLIST_NAME durch den Namen der installierten Zulassungsliste. Beispiel: company-name-solution-v1.0.0.

    Bei Arbeitslasten, die dieses Feature unterstützen, sieht die Ausgabe etwa so aus. Das Feld imageDigests enthält eine Liste der zulässigen Digests.

    # lines omitted for clarity
    - containerName: pause-container1
      imageDigests:
      - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
      - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23
    

    Wenn die Ausgabe kein Feld imageDigests enthält oder der Digest für die Releaseversion, die Sie verwenden möchten, nicht in der Liste enthalten ist, wenden Sie sich direkt an den Inhaber der Arbeitslast und bitten Sie ihn, die Zulassungsliste zu aktualisieren. Nachdem der Inhaber der Arbeitslast Image-Digests zu seiner Zulassungsliste hinzugefügt hat, installiert der Zulassungslistensynchronizer in Ihrem Cluster automatisch die aktualisierte Zulassungsliste.

  3. Fügen Sie Ihrem Arbeitslastmanifest einen der unterstützten Image-Digests hinzu.

Betrachten Sie beispielsweise das folgende Image in der öffentlich verfügbaren Pod-Spezifikation eines Partners:

...
  containers:
  - name: pause-container1
    image: partner-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Sie können ein gespiegeltes Image verwenden, wenn der Digest mit dem öffentlich verfügbaren Digest übereinstimmt, wie im folgenden Beispiel:

...
  containers:
  - name: pause-container1
    image: my-private-repo/pause1@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229
    securityContext:
      privileged: true

Sie müssen den SHA-256-Digest in Ihr Image-Feld einfügen, ähnlich dem vorherigen Beispiel. Wenn die Digests nicht übereinstimmen, wird das gespiegelte Image nicht ausgeführt. Wenn Sie Image-Digests beibehalten möchten, wenn Sie Partner-Images spiegeln, verwenden Sie ein Tool wie crane, ORAS oder skopeo.

Privilegierte Arbeitslast löschen

Wenn Sie nicht mehr zulassen möchten, dass eine privilegierte Arbeitslast in Ihren Clustern ausgeführt wird, entfernen Sie den Pfad zur entsprechenden Zulassungsliste aus Ihrem AllowlistSynchronizer. Der Synchronizer deinstalliert die Zulassungsliste.

Wenn Sie ein WorkloadAllowlist-Objekt aus Ihrem Cluster löschen, anstatt den Synchronizer zu aktualisieren, installiert der Synchronizer die Zulassungsliste neu. Achten Sie darauf, dass Sie den Pfad aus dem AllowlistSynchronizer entfernen.

So deinstallieren Sie eine Zulassungsliste:

  1. Entfernen Sie im YAML-Manifest für den AllowlistSynchronizer, der die Zulassungsliste verwaltet, den Pfad zur Zulassungsliste, die Sie deinstallieren möchten. Eine Anleitung finden Sie im Abschnitt Vorhandenen AllowlistSynchronizer aktualisieren.
  2. So prüfen Sie, ob die Zulassungsliste deinstalliert wurde: Rufen Sie eine Liste der WorkloadAllowlist-Objekte in Ihrem Cluster ab:

    kubectl get workloadallowlist
    

    Prüfen Sie, ob die Zulassungsliste, die Sie entfernen wollten, nicht in der Ausgabe angezeigt wird.

  3. Löschen Sie die Arbeitslast aus Ihrem Cluster. Eine Anleitung finden Sie in der Dokumentation des Arbeitslastanbieters.

Installation von Zulassungslisten in Ihren Clustern verhindern

Wenn Sie die Installation von Zulassungslisten für privilegierte Arbeitslasten in bestimmten Clustern verhindern möchten, geben Sie beim Erstellen oder Aktualisieren eines Clusters einen leeren String ("") im --autopilot-privileged-admission Flag an.

  • Wenn Sie bestimmte Zulassungslistenpfade für einen Cluster deaktivieren möchten, lassen Sie die Pfade zu diesen Zulassungslisten beim Erstellen oder Aktualisieren eines Clusters weg:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-privileged-admission=ALLOWLIST1_PATH,ALLOWLIST2_PATH,...
    

    Ersetzen Sie ALLOWLIST1_PATH,ALLOWLIST2_PATH,... durch eine durch Kommas getrennte Liste von Pfaden zu Zulassungslistenquellen. Lassen Sie die Pfade weg, die Sie deaktivieren möchten.

  • Wenn Sie alle Zulassungslisten in einem vorhandenen Cluster deaktivieren möchten, geben Sie einen leeren String als genehmigten Pfad an:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autopilot-allowlist-paths=""
    

Fehlerbehebung

Wenn die Synchronisierung oder die Bereitstellung der Arbeitslast fehlschlägt, finden Sie unter Fehlerbehebung bei der Bereitstellung privilegierter Autopilot-Arbeitslasten weitere Informationen.

Nächste Schritte