Richtlinie zur Binärautorisierung mit GKE konfigurieren

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.

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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  7. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  13. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  14. Installieren Sie kubectl:
  15. Cluster mit aktivierter Binärautorisierung-Erzwingung 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.

    Die Binärautorisierung funktioniert mit Autopilot- oder Standardclustern.

    Google Cloud Console

    In den folgenden Schritten wird ein Autopilot-Cluster konfiguriert.

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

      Zur GKE

    2. Klicken Sie auf Erstellen.

    3. Führen Sie unter Autopilot-Cluster erstellen die folgenden Schritte aus:

      1. Geben Sie im Feld Name test-cluster ein.

      2. Wählen Sie im Menü Region die Option us-central1 aus.

      3. Maximieren Sie den Abschnitt Erweiterte Einstellungen.

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

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

      6. Wählen Sie Nur erzwingen aus.

      7. Klicken Sie auf Weiter und dann auf Weiter:Überprüfen und erstellen.

      8. Klicken Sie auf Erstellen, um den Cluster zu 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
    

    Das Erstellen eines Clusters kann einige Minuten dauern.

    Standardrichtlinie

    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

    Um die Standardrichtlinie aufzurufen, exportieren Sie so die YAML-Richtliniendatei:

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

    Dieser Befehl erzeugt folgende Ausgabe:

    {
      "name": "projects/PROJECT_ID/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_ALLOW",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    

    Erzwingungsrichtlinie testen

    Sie können die Richtlinie zur Durchsetzung von Richtlinien testen und dazu versuchen, ein Beispiel-Container-Image im Cluster bereitzustellen.

    Für diese Kurzanleitung verwenden Sie das Beispiel-Container-Image im Pfad us-docker.pkg.dev/google-samples/containers/gke/hello-app in Artifact Registry. Dies ist ein von Google erstelltes öffentliches Container-Image, das die "Hello-World"-Beispielanwendung enthält.

    Google Cloud Console

    So testen Sie die Richtlinie:

    1. Rufen Sie in derGoogle 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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 als Pfad für das Container-Image ein.

    5. Klicken Sie auf Weiter.

    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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      

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

    Google Cloud Console

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

    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.

    Google Cloud Console

    So löschen Sie die Bereitstellung:

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

      Zu GKE

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

    3. Klicken Sie auf Löschen.

    kubectl

    So löschen Sie die Bereitstellung:

    kubectl delete deployment hello-server
    

    Richtlinie zur Durchsetzung von Richtlinien so konfigurieren, dass keine Images zugelassen werden

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

    Google Cloud Console

    So ändern Sie die Richtlinie:

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

    Google Cloud Console

    Stellen Sie das Image bereit:

    1. Rufen Sie in derGoogle 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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 als Pfad für das Container-Image ein.

    5. Klicken Sie auf Weiter.

    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 us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    

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

    Google Cloud Console

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

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

    Zu GKE

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

    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 auf dieser Seite 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 derGoogle 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