Diese Kurzanleitung zeigt, wie Sie in der Binärautorisierung eine einfache Richtlinie konfigurieren und testen.
In dieser Kurzanleitung rufen Sie die Standardrichtlinie auf und testen diese. Anschließend konfigurieren Sie die Richtlinie so, dass das Deployment aller Container-Images aus Container Registry in einem Google Kubernetes Engine-Cluster (GKE) abgelehnt wird. Dies ist keine reale, praktisch anwendbare Richtlinie. In einer realen Richtlinie benötigen Sie in der Regel Attestierungen von Attestierern in Ihrer Umgebung, damit ein Container-Image bereitgestellt werden kann.
Unter Erste Schritte mit der Befehlszeile oder Erste Schritte mit der Console finden Sie eine längere Anleitung, die zeigt, wie eine Richtlinie mit den erforderlichen Attestierungen konfiguriert wird.
Vorbereitung
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.
- Installieren und initialisieren Sie das Cloud SDK.
- Installieren Sie
kubectl
:
Erforderliche APIs aktivieren
Aktivieren Sie die APIs für GKE, Container Analysis und die Binärautorisierung:
gcloud
Legen Sie das Google Cloud-Standardprojekt fest, das von
gcloud
-Befehlen verwendet wird:PROJECT_ID=PROJECT_ID gcloud config set project ${PROJECT_ID}
Dabei ist PROJECT_ID der Name Ihres Projekts.
Aktivieren Sie die erforderlichen APIs:
gcloud services enable \ container.googleapis.com \ containeranalysis.googleapis.com \ binaryauthorization.googleapis.com
Console
Aktivieren Sie die erforderlichen APIs:
Es kann einige Minuten dauern, bis dieser Vorgang abgeschlossen ist.
Cluster mit aktivierter Binärautorisierung erstellen
Sie erstellen jetzt einen GKE-Cluster mit aktivierter Binärautorisierung. Dies ist der Cluster, in dem die bereitgestellten Container-Images ausgeführt werden sollen:
gcloud
Führen Sie gcloud container clusters create
mit dem aktivierten Flag --enable-binauthz
aus:
gcloud container clusters create \ --enable-binauthz \ --zone us-central1-a \ test-cluster
Console
Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.
In der Console wird eine Liste der GKE-Cluster in Ihrem Google Cloud-Projekt angezeigt.
Klicken Sie auf Cluster erstellen.
Geben Sie in das Feld Name den Wert
test-cluster
ein.Wählen Sie unter Standorttyp die Option Zonal aus.
Wählen Sie
us-central1-a
aus der Drop-down-Liste Zone aus.Klicken Sie auf Verfügbarkeit, Netzwerk, Sicherheit und weitere Funktionen.
Wählen Sie im Abschnitt Sicherheit die Option Binärautorisierung aktivieren aus.
Klicken Sie auf Erstellen.
Standardrichtlinie
Standardmäßig ist Ihre Richtlinie für die Binärautorisierung so konfiguriert, dass alle Container-Images bereitgestellt werden können.
gcloud
Um die Standardrichtlinie anzuzeigen, exportieren Sie die YAML-Richtliniendatei:
gcloud container binauthz policy export
Die Datei hat standardmäßig folgenden Inhalt:
admissionWhitelistPatterns: - namePattern: gcr.io/google_containers/* - namePattern: gcr.io/google-containers/* - namePattern: k8s.gcr.io/* - namePattern: gke.gcr.io/* - namePattern: gcr.io/stackdriver-agents/* globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
REST API
Zur Anzeige der Standardrichtlinie rufen Sie sie im JSON-Format ab:
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Die REST API gibt Folgendes zurück:
{ "name": "projects/PROJECT_ID/policy", "admissionWhitelistPatterns": [ { "namePattern": "gcr.io/google_containers/*" }, { "namePattern": "gcr.io/google-containers/*" }, { "namePattern": "k8s.gcr.io/*" }, { "namePattern": "gke.gcr.io/*" }, { "namePattern": "gcr.io/stackdriver-agents/*" } ], "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
Console
So rufen Sie die Standardrichtlinie auf:
Rufen Sie in der Google Cloud Console die Seite Binärautorisierung auf.
Zur Seite "Binärautorisierung"
In der Console werden Details zur Richtlinie angezeigt.
Klicken Sie auf Richtlinie konfigurieren oder, falls vorhanden, auf Richtlinie bearbeiten.
Wählen Sie unter Projektstandardregel die Option Alle Images zulassen aus.
Richtlinie testen
Sie können die Richtlinie testen und dazu versuchen, ein Beispiel-Container-Image im Cluster bereitzustellen.
Für diese Kurzanleitung verwenden Sie das Beispiel-Container-Image im Pfad gcr.io/google-samples/hello-app
in Container Registry. Dies ist ein von Google erstelltes öffentliches Container-Image, das die Hello-World-Beispielanwendung enthält.
kubectl
So testen Sie die Richtlinie:
Aktualisieren Sie die lokale
kubeconfig
-Datei:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Damit werden die Anmeldedaten und Endpunktinformationen bereitgestellt, die für den Zugriff auf den Cluster in GKE erforderlich sind.
Stellen Sie das Image bereit:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Console
So testen Sie die Richtlinie:
Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.
Klicken Sie auf Bereitstellen.
Sie werden aufgefordert, Details zum Deployment einzugeben.
Wählen Sie Vorhandenes Container-Image aus.
Geben Sie
gcr.io/google-samples/hello-app:1.0
als Pfad für das Container-Image ein.Klicken Sie auf Weiter.
Geben Sie
hello-server
in das Feld Name der Anwendung ein.Klicken Sie auf Bereitstellen.
Prüfen Sie nun, ob das Deployment von der Binärautorisierung zugelassen wurde.
kubectl
So überprüfen Sie, ob das Image bereitgestellt wurde:
kubectl get pods
Der Befehl gibt eine Nachricht ähnlich der folgenden aus, die zeigt, dass das Deployment erfolgreich war:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Console
Rufen Sie in der Google Cloud Console die GKE-Seite Arbeitslasten auf, um zu prüfen, ob das Image bereitgestellt wurde.
Eine Arbeitslast für das Deployment wird mit einem grünen Symbol angezeigt. Dies weist darauf hin, dass das Image erfolgreich bereitgestellt wurde.
Das Deployment muss für den nächsten Schritt gelöscht werden.
kubectl
So löschen Sie das Deployment:
kubectl delete deployment hello-server
Konsole
So löschen Sie das Deployment:
Kehren Sie zur GKE-Seite Arbeitslasten in der Google Cloud Console zurück.
Wählen Sie die Arbeitslast
test-server
aus.Klicken Sie auf Löschen.
Richtlinie so konfigurieren, dass keine Images zugelassen werden
Ändern Sie nun die Richtlinie so, dass alle bereitzustellenden Images blockiert statt zugelassen werden.
gcloud
So ändern Sie die Richtlinie:
Exportieren Sie die YAML-Richtliniendatei:
gcloud container binauthz policy export > /tmp/policy.yaml
Ändern Sie in einem Texteditor
evaluationMode
vonALWAYS_ALLOW
inALWAYS_DENY
.Die YAML-Richtliniendatei sollte in etwa so aussehen:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Importieren Sie die YAML-Richtliniendatei wieder in die Binärautorisierung:
gcloud container binauthz policy import /tmp/policy.yaml
REST API
So ändern Sie die Richtlinie:
Erstellen Sie eine Textdatei mit der aktualisierten Richtlinie im JSON-Format:
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOM
Senden Sie die aktualisierte Richtlinie an die REST API:
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Console
So ändern Sie die Richtlinie:
Kehren Sie zur Seite Binärautorisierung in der Google Cloud Console zurück.
Klicken Sie auf Richtlinie bearbeiten.
Wählen Sie Alle Images nicht zulassen aus.
Klicken Sie auf Richtlinie speichern.
Richtlinie noch einmal testen
Testen Sie die Richtlinie noch einmal. Dazu stellen Sie ein Beispiel-Container-Image für den Cluster bereit. Diesmal verhindert die Binärautorisierung, dass das Image bereitgestellt wird.
kubectl
Stellen Sie das Image bereit:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Console
Stellen Sie das Image bereit:
Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.
Klicken Sie auf Bereitstellen.
Sie werden aufgefordert, Details zum Deployment einzugeben.
Wählen Sie Vorhandenes Container-Image aus.
Geben Sie
gcr.io/google-samples/hello-app:1.0
als Pfad für das Container-Image ein.Klicken Sie auf Weiter.
Geben Sie
hello-server
in das Feld Name der Anwendung ein.Klicken Sie auf Bereitstellen.
Sie können jetzt prüfen, ob die Richtlinie blockiert wurde.
kubectl
So prüfen Sie, ob das Image tatsächlich blockiert wurde:
kubectl get pods
Der Befehl gibt die folgende Nachricht aus, dass das Image nicht bereitgestellt wurde:
No resources found.
Sie können weitere Details zum Deployment abrufen:
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
Diese Ausgabe zeigt, dass das Deployment von der Richtlinie nicht zugelassen wurde:
FailedCreate:Error creating: pods "hello-server-579859fb5b-lvfgd" is forbidden: image policy webhook backend denied one or more images: Denied by default admission rule. Overridden by evaluation mode
Konsole
So prüfen Sie, ob das Image tatsächlich blockiert wurde:
Kehren Sie zur GKE-Seite Arbeitslasten in der Google Cloud Console zurück.
Eine Arbeitslast für das Container-Image wird mit einem roten Symbol angezeigt. Dies weist darauf hin, dass das Image nicht bereitgestellt werden konnte.
Bereinigen
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Kurzanleitung verwendeten Ressourcen in Rechnung gestellt werden:
Löschen Sie den Cluster, den Sie in GKE erstellt haben:
gcloud
So löschen Sie den Cluster:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
Konsole
So löschen Sie den Cluster:
Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.
Wählen Sie den Cluster
test-cluster
aus und klicken Sie auf Löschen.
Weitere Informationen
- Erfahren Sie, wie Sie eine Richtlinie mit erforderlichen Attestierungen einrichten und erzwingen unter:
- Lesen Sie unsere Ressourcen zu DevOps und gehen Sie unser Forschungsprogramm durch.