- 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:
- Zulassung privilegierter Arbeitslasten im Autopilot-Modus
- Benutzerdefinierte Kubernetes-Ressourcen
- Sicherheitseinschränkungen von GKE Autopilot
- GKE Autopilot-Partner
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:
- 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.
- 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 updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
- Prüfen Sie, ob Sie Cluster so konfigurieren können, dass Zulassungslisten aus der ausgewählten Quelle installiert werden. Organisationsadministratoren können mit einer Organisationsrichtlinie die Pfade steuern, die Sie einem Cluster hinzufügen können. Weitere Informationen finden Sie unter Verwaltete Einschränkung für Zulassungslisten des Organisationsrichtliniendienstes.
Prüfen Sie für eigene privilegierte Arbeitslasten, die für berechtigte GKE-Kunden verfügbar sind, beide der folgenden Bedingungen:
- Der Administrator Ihrer Organisation hat den Bucket-Pfad Ihrer Zulassungsliste einer Organisationsrichtlinie hinzugefügt. Weitere Informationen finden Sie unter Privilegierte GKE-Arbeitslasten in Organisationen einschränken.
- Die Zulassungsliste, die Sie installieren möchten, befindet sich im Cloud Storage-Bucket. Weitere Informationen finden Sie unter Zulassungslisten für privilegierte Autopilot-Arbeitslasten erstellen.
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.
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.
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.
- Erstellen Sie in einem Texteditor eine neue YAML-Datei.
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_PATHErsetzen 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.yamlOder im folgenden Beispiel für eigene Zulassungslisten:
allowlistPaths: - my-agent/log-collector/* - my-agent/privileged-logging-agent.yamlDie 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.
Wenn Sie Zulassungslisten aus einem eigenen Cloud Storage-Bucket installieren, fügen Sie die Felder
spec.projectNumberundspec.bucketNameIhrem AllowlistSynchronizer hinzu. Weitere Informationen finden Sie in der CustomResourceDefinition AllowlistSynchronizer.Stellen Sie die YAML-Datei in Ihrem Cluster bereit:
kubectl apply -f PATH_TO_YAML_FILEErsetzen Sie
PATH_TO_YAML_FILEdurch den Pfad zur YAML-Datei, die Sie im vorherigen Schritt erstellt haben.Der AllowlistSynchronizer-Controller installiert Zulassungslistendateien aus den angegebenen Pfaden in Ihrem Cluster.
Warten Sie, bis der Synchronizer den Status
Readymeldet: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:
Listen Sie die vorhandenen Synchronizer in Ihrem Cluster auf:
kubectl get allowlistsynchronizerÖffnen Sie die Spezifikation des Synchronizers, den Sie aktualisieren möchten, in einem Texteditor.
Aktualisieren Sie das Feld
spec.allowlistPaths, um Pfade zu Zulassungslistendateien hinzuzufügen, zu ändern oder zu entfernen.Speichern und schließen Sie den Texteditor.
Wenden Sie die aktualisierte Konfiguration auf den Cluster an:
kubectl apply -f PATH_TO_YAML_FILEErsetzen Sie
PATH_TO_YAML_FILEdurch 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:
- Prüfen Sie, ob die Zulassungsliste in Ihrem Cluster vorhanden ist.
Rufen Sie die Spezifikation der installierten Zulassungsliste ab:
kubectl get workloadallowlist ALLOWLIST_NAME -o yamlErsetzen Sie
ALLOWLIST_NAMEdurch 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
imageDigestsenthält eine Liste der zulässigen Digests.# lines omitted for clarity - containerName: pause-container1 imageDigests: - cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 - 932ea160d395f3d7f76c0c17a52a63c4cfe1836a900f1058b6bc20b16fd10d23Wenn die Ausgabe kein Feld
imageDigestsenthä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.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:
- 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.
So prüfen Sie, ob die Zulassungsliste deinstalliert wurde: Rufen Sie eine Liste der
WorkloadAllowlist-Objekte in Ihrem Cluster ab:kubectl get workloadallowlistPrüfen Sie, ob die Zulassungsliste, die Sie entfernen wollten, nicht in der Ausgabe angezeigt wird.
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
- Informationen zu den verfügbaren Arbeitslasten von GKE Autopilot-Partnern
- Privilegierte Open-Source-Arbeitslasten in GKE Autopilot ausführen
- Informationen zu den Standardsicherheitsfunktionen von GKE Autopilot
- CustomResourceDefinition AllowlistSynchronizer lesen