Kurzanleitung: Alle zulassen und nicht zulassen

Diese Kurzanleitung zeigt, wie Sie eine Basisregel in einer Richtlinie für die Binärautorisierung konfigurieren und testen.

In dieser Kurzanleitung rufen Sie die Standardregel in der Richtlinie auf und konfigurieren sie. Die Standardregel ermöglicht die Bereitstellung aller Images. Stellen Sie ein Container-Image in einem GKE-Cluster (Google Kubernetes Engine) bereit, um das zu testen. Anschließend legen Sie die Standardregel fest, um die Bereitstellung aller Images zu verhindern, und dann versuchen Sie, ein Image bereitzustellen.

Hinweis

  1. 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.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  4. Artifact Registry, Binary Authorization APIs aktivieren.

    Aktivieren Sie die APIs

  5. Installieren und initialisieren Sie das Cloud SDK.
  6. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  7. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  8. Artifact Registry, Binary Authorization APIs aktivieren.

    Aktivieren Sie die APIs

  9. Installieren und initialisieren Sie das Cloud SDK.
  10. Installieren Sie kubectl:

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.

Google Cloud Console

  1. Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.

    Zu GKE

    In der Console wird eine Liste der GKE-Cluster in Ihrem Google Cloud-Projekt angezeigt.

  2. Klicken Sie auf Cluster erstellen.

  3. Geben Sie in das Feld Name den Wert test-cluster ein.

    Feld "Name" in der Standardclustervorlage

  4. Wählen Sie unter Standorttyp die Option Zonal aus.

  5. Wählen Sie us-central1-a aus der Drop-down-Liste Zone aus.

  6. Klicken Sie auf den Link Sicherheit, um das Feld Sicherheit einzublenden.

  7. Klicken Sie im Feld Sicherheit das Kästchen Binärautorisierung aktivieren an.

    Option zur Aktivierung der Binärautorisierung

  8. Klicken Sie auf Erstellen.

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

Standardrichtlinie

Standardmäßig ist Ihre Richtlinie für die Binärautorisierung so konfiguriert, dass alle Container-Images bereitgestellt werden können.

Cloud Console

So rufen Sie die Standardrichtlinie auf:

  1. Rufen Sie in der Cloud Console die Seite Binärautorisierung auf.

    Zur Binärautorisierung

    In der Console werden Details zur Richtlinie angezeigt.

    Richtlinien-Tab mit der Standardregel

  2. Klicken Sie auf Richtlinie bearbeiten.

  3. Wählen Sie unter Projektstandardregel die Option Alle Images zulassen aus.

    Option zur Auswahl eines Standardregeltyps

gcloud

Um die Standardrichtlinie aufzurufen, exportieren Sie so 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

Um die Standardrichtlinie anzuzeigen, rufen Sie sie so 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"
  }
}

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.

Cloud Console

So testen Sie die Richtlinie:

  1. Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.

    Zu GKE

  2. Klicken Sie auf Bereitstellen.

    Sie werden aufgefordert, Details zum Deployment einzugeben.

  3. Wählen Sie Vorhandenes Container-Image aus.

    Seite "Deployment erstellen"

  4. Geben Sie gcr.io/google-samples/hello-app:1.0 als Pfad für das Container-Image ein.

  5. Klicken Sie auf Weiter.

    Seite "Deployment konfigurieren"

  6. Geben Sie hello-server in das Feld Name der Anwendung ein.

  7. Klicken Sie auf Bereitstellen.

kubectl

So testen Sie die Richtlinie:

  1. 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.

  2. Stellen Sie das Image bereit:

    kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
    

Prüfen Sie nun, ob das Deployment von der Binärautorisierung zugelassen wurde.

Cloud Console

Rufen Sie in der Cloud Console die GKE-Seite Arbeitslasten auf, um zu prüfen, ob das Image bereitgestellt wurde.

Zu GKE

Eine Arbeitslast für das Deployment wird mit einem grünen Symbol angezeigt. Dies weist darauf hin, dass das Image erfolgreich bereitgestellt wurde.

Nachricht über das erfolgreiche Deployment

kubectl

So prü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

Das Deployment muss für den nächsten Schritt gelöscht werden.

Cloud Console

So löschen Sie die Bereitstellung:

  1. Kehren Sie in der Cloud Console zur GKE-Seite Arbeitslasten zurück.

    Zu GKE

  2. Wählen Sie die Arbeitslast test-server aus.

  3. Klicken Sie auf Löschen.

kubectl

So löschen Sie die Bereitstellung:

kubectl delete deployment hello-server

Richtlinie so konfigurieren, dass keine Images zugelassen werden

Ändern Sie nun die Richtlinie so, dass alle bereitzustellenden Images blockiert statt zugelassen werden.

Cloud Console

So ändern Sie die Richtlinie:

  1. Kehren Sie in der Cloud Console zur Seite Binärautorisierung zurück.

    Zur Binärautorisierung

  2. Klicken Sie auf Richtlinie bearbeiten.

  3. Wählen Sie Alle Images nicht zulassen aus.

    Option zur Auswahl eines Standardregeltyps

  4. Klicken Sie auf Save Policy (Richtlinie speichern).

gcloud

So ändern Sie die Richtlinie:

  1. Exportieren Sie die YAML-Richtliniendatei:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Ändern Sie in einem Texteditor evaluationMode von ALWAYS_ALLOW in ALWAYS_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
    
  3. 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:

  1. 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
    
  2. 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"
    

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.

Cloud Console

Stellen Sie das Image bereit:

  1. Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.

    Zu GKE

  2. Klicken Sie auf Bereitstellen.

    Sie werden aufgefordert, Details zum Deployment einzugeben.

  3. Wählen Sie Vorhandenes Container-Image aus.

    Seite &quot;Deployment erstellen&quot;

  4. Geben Sie gcr.io/google-samples/hello-app:1.0 als Pfad für das Container-Image ein.

  5. Klicken Sie auf Weiter.

    Seite &quot;Deployment konfigurieren&quot;

  6. Geben Sie hello-server in das Feld Name der Anwendung ein.

  7. Klicken Sie auf Bereitstellen.

kubectl

Stellen Sie das Image bereit:

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

Sie können jetzt prüfen, ob die Richtlinie blockiert wurde.

Cloud Console

So prüfen Sie, ob das Image nicht bereitgestellt wurde:

Kehren Sie in der Cloud Console zur GKE-Seite Arbeitslasten zurück.

Zu GKE

Eine Arbeitslast für das Container-Image wird mit einem roten Symbol angezeigt, das darauf hinweist, dass das Image nicht bereitgestellt werden konnte.

Nachricht über das fehlgeschlagene Deployment

kubectl

Führen Sie den folgenden Befehl aus, um zu prüfen, ob das Image nicht bereitgestellt 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}}'

Die Antwort sieht in etwa so aus:

FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule

In dieser Ausgabe gilt:

  • POD_NAME: Der Name des Pods.
  • IMAGE_NAME: Der Name des Images.
  • ATTESTOR_NAME: Der Name des Attestierers.

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:

Löschen Sie den in GKE erstellten Cluster:

Console

So löschen Sie den Cluster:

  1. Rufen Sie in der Cloud Console die GKE-Seite Cluster auf.

    Zu GKE

  2. Wählen Sie den Cluster test-cluster aus und klicken Sie auf Löschen.

gcloud

So löschen Sie den Cluster:

gcloud container clusters delete \
    --zone=us-central1-a \
    test-cluster

Nächste Schritte