Richtlinie zur Binärautorisierung aktualisieren

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

In diesem Dokument aktualisieren Sie die Richtlinie, um Container-Images in Container Registry und Artifact Registry von der Erzwingung der Binärautorisierung auszunehmen, und legen die Standardregel fest, um die Bereitstellung aller anderen Container zu verbieten.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

    gcloud init
  12. 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 Google 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. Wählen Sie im Abschnitt Sicherheit die Option Binärautorisierung aktivieren aus.

    Option für Binärautorisierung aktivieren

  8. Wählen Sie Nur erzwingen aus.

  9. Klicken Sie auf Erstellen.

gcloud

Führen Sie gcloud container clusters create mit dem aktivierten Flag --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE aus:

gcloud container clusters create \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --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.

Google Cloud Console

So rufen Sie die Standardrichtlinie auf:

  1. Rufen Sie in der Google 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:

globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: ALWAYS_ALLOW
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/<var>PROJECT_ID</var>/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",
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

Nur ausgenommene Images zulassen

In diesem Abschnitt wird beschrieben, wie Sie die Richtlinie ändern, um Images auszunehmen und die Bereitstellung aller anderen Images nicht zulassen.

Google Cloud Console

So ändern Sie die Richtlinie:

  1. Kehren Sie zur Seite Binärautorisierung in der Google Cloud Console 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

    Google Cloud Console

    Stellen Sie ein ausgenommenes Image bereit:

    1. Rufen Sie in der Google 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:

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

    Google 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 Google 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