Kurzanleitung: Ausgenommene Images

In diesem Dokument wird beschrieben, wie Sie in den Richtlinien für die Binärautorisierung Images ausnehmen.

In diesem Dokument aktualisieren Sie die Richtlinie zur Ausnahme von Container-Images aus Container Registry und Artifact Registry. Zum Zeitpunkt des Deployments ermöglicht der Binärautorisierungserzwinger die Bereitstellung ausgenommener Images in einem Google Kubernetes Engine-Cluster (GKE). Der Enforcer lässt ausgenommene Images zu, bevor er andere Richtlinienregeln erzwingt.

In den folgenden End-to-End-Anleitungen erfahren Sie, wie Sie eine Richtlinie konfigurieren, die Attestierungen für ein Image erfordert:

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. Wenn Sie Cloud Shell nicht verwenden, installieren Sie kubectl.

Cluster mit aktivierter Binärautorisierung erstellen

GKE-Cluster mit aktivierter Binärautorisierung erstellen. 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 für Binärautorisierung aktivieren

  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 ansehen

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.

  2. Klicken Sie auf Richtlinie bearbeiten.

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

gcloud

Exportieren Sie die YAML-Richtliniendatei und tun Sie Folgendes, um die Standardrichtlinie aufzurufen:

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"
  }
}

Nur ausgenommene Images zulassen

Ändern Sie die Richtlinie, um die Bereitstellung aller Images mit Ausnahme der unter Ausgenommene Images zu verbieten.

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 Disallow all images (Alle Images ablehnen).

  4. Erweitern Sie unter Von Bereitstellungsregeln ausgenommene Images die Option Image-Pfade.

  5. Klicken Sie auf Image-Pfade hinzufügen.

    Container Registry

    Fügen Sie unter Neuer Image-Pfad den folgenden Pfad aus einem Container Registry-Repository ein:

    gcr.io/google-samples/hello-app:1.0
    

    Artifact Registry

    Fügen Sie unter Neuer Image-Pfad den folgenden Pfad aus einem Artifact Registry-Repository ein:

    us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    
  6. Klicken Sie auf Fertig, um den Image-Pfad zu speichern.

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

gcloud

So ändern Sie die Richtlinie, um Beispiel-Images aus Container Registry und Artifact Registry zuzulassen:

  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 und fügen Sie ausgenommene Images zu admissionWhitelistPatterns hinzu.

    Ändern Sie die YAML-Richtliniendatei so, um die folgenden Beispiel-Images von Container Registry und Artifact Registry auszunehmen:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google-samples/hello-app:1.0
    - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/<var>PROJECT_ID</var>/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",
      "admissionWhitelistPatterns": [
        {
          "namePattern": "gcr.io/google-samples/hello-app:1.0"
        },
        {
          "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "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 testen

So testen Sie die Richtlinie, indem Sie ein Image bereitstellen, das Sie auf die Zulassungsliste Exempt image gesetzt haben:

  1. Ein ausgenommenes Image im Cluster bereitstellen

    Cloud Console

    Stellen Sie ein ausgenommenes 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.

    4. Geben Sie den Pfad des Container-Images ein.

      Container Registry

      Geben Sie Folgendes ein, um ein Image aus Container Registry bereitzustellen:

      gcr.io/google-samples/hello-app:1.0
      

      Artifact Registry

      So stellen Sie ein Image aus Artifact Registry bereit:

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    5. Klicken Sie auf Weiter.

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

    7. Klicken Sie auf Bereitstellen.

    kubectl

    Container Registry

    Stellen Sie das Image aus Container Registry bereit:

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

    Artifact Registry

    Stellen Sie das Image aus Artifact Registry bereit:

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    
  2. Prüfen Sie, ob das Image bereitgestellt werden konnte:

    Cloud Console

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

    1. Zur Seite "GKE"

    Zu GKE

    1. Zur Seite „Arbeitslasten“

    Die Arbeitslast hello-server wird mit einem grünen Symbol angezeigt. Dies weist darauf hin, dass sie ausgeführt wird.

    kubectl

    Geben Sie den folgenden Befehl ein, um zu prüfen, ob das Image bereitgestellt werden konnte:

    kubectl get pods
    

    Sie sehen das ausgeführte Image.

  3. Löschen Sie den Pod.

    Cloud Console

    Auf der GKE-Seite Arbeitslasten:

    1. Wählen Sie die Arbeitslast hello-server aus.

    2. Klicken Sie auf Löschen.

    3. Wenn Sie aufgefordert werden, Ressourcen zu löschen, klicken Sie auf Löschen.

    kubectl

    kubectl delete pod hello-server
    

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

Führen Sie den folgenden Befehl aus, um den Cluster zu löschen:

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

Nächste Schritte