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 Artifact Registry von der Erzwingung der Binärautorisierung auszunehmen und die Standardregel so festzulegen, dass die Bereitstellung aller anderen Container nicht zulässig ist.

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. Wenn Sie Cloud Shell nicht verwenden, installieren Sie kubectl.
  15. 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 derGoogle Cloud Console die GKE-Seite Cluster auf.

      Zur 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 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. Erweitern Sie unter Von Bereitstellungsregeln ausgenommene Images die Option Image-Pfade.

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

      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 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 Artifact Registry auszunehmen:

      admissionWhitelistPatterns:
      - 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": "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 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 den Pfad des Container-Images ein.

        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

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

    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