Richtlinienbewertungsdienst verwenden

Auf dieser Seite erfahren Sie, wie Sie mit dem Google Cloud CLI-Befehl des Richtlinienbewertungsdienstes schnell prüfen können, ob ein Image oder eine Kubernetes-Ressource einer plattformbasierten Richtlinie entspricht, die auf kontinuierlichen Validierungsprüfungen basiert.

Übersicht

Der Richtlinienauswertungsdienst ist eine Funktion der Binärautorisierung, die Sie mit kontinuierlicher Validierung (CV) und prüfbasierten Plattformrichtlinien verwenden können. Der Richtlinienbewertungsdienst prüft auf Anfrage, ob ein von Ihnen angegebenes Container-Image einer CV-Plattformrichtlinie entspricht. Der Richtlinienbewertungsdienst ist als gcloud-Kommandozeilenbefehl und als Methode projects.platforms.gke.policies.evaluate verfügbar.

CV prüft mindestens einmal alle 24 Stunden auf Richtlinienverstöße. Daher kann es bis zu 24 Stunden dauern, bis CV-Ereignisse nach dem Aktivieren von CV oder dem Bereitstellen einer Kubernetes-Ressource in Logging angezeigt werden. Außerdem werden von CV Logeinträge erstellt, wenn ein Richtlinienverstoß erkannt wird. CV erstellt keine Logeinträge, wenn Kubernetes-Ressourcen der Richtlinie entsprechen.

Der Richtlinienbewertungsdienst gibt ein Ergebnis aus, das angibt, ob das Image der Richtlinie entspricht oder ob es gegen die Richtlinie verstößt.

Mit dem Richtlinienbewertungsdienst können Sie schnell feststellen, ob Ihr Bild einer Richtlinie entspricht.

Wenn Sie den Dienst verwenden, geben Sie die Bild-URL entweder direkt oder in einer Kubernetes-Ressource an. Außerdem geben Sie den Namen der auf GKE CV-Prüfungen basierenden Richtlinie an.

So kann der Dienst zur Richtlinienauswertung Ihnen helfen, Richtlinien zu entwickeln und nicht konforme Kubernetes-Ressourcen zu debuggen, bevor Sie CV verwenden.

Diese Funktion unterstützt nur Richtlinien, die auf GKE-CV-Prüfungen basieren.

Für Bilder muss auch ein Image-Digest im Format IMAGE_URL@IMAGE_DIGEST angegeben werden, außer in den folgenden Fällen:

  • Prüfung auf vertrauenswürdige Verzeichnisse: Die Prüfung wird bestanden, wenn sich das Image in einem von Ihnen angegebenen Verzeichnis befindet.
  • Zulassungslisten für ausgenommene Bilder: Für alle anderen Prüfungen ist ein Image-Digest im Format IMAGE_URL@IMAGE_DIGEST erforderlich.

Hinweise

  1. Install the Google Cloud CLI.

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

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

    gcloud init

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Policy Evaluator (roles/binaryauthorization.policyEvaluator) für das Richtlinienprojekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwenden des Dienstes zur Richtlinienbewertung benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Wenn in Ihrer Richtlinie bestimmte Prüfungen verwendet werden, müssen Sie Ihren Administrator möglicherweise bitten, die folgenden prüfungsspezifischen erforderlichen Rollen zuzuweisen:

Prüfbasierte Plattformrichtlinien bewerten

Der Richtlinienbewertungsdienst kann eine einzelne Image-URL oder ein Image auswerten, das in einer Kubernetes-Ressource im JSON- oder YAML-Format angegeben ist.

Prüfbasierte Plattformrichtlinien mit einer Kubernetes-Ressource bewerten

Führen Sie den folgenden Befehl aus, um eine Richtlinie mit einer Kubernetes-Ressource über die gcloud CLI auszuwerten:

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • POLICY_ID: Die ID der Plattformrichtlinie. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: Der Pfad zu Ihrer Pod-Spezifikation.

Führen Sie folgenden Befehl aus:

Linux, macOS oder Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --resource=POD_SPECIFICATION_PATH

Führen Sie den folgenden Befehl aus, um eine Richtlinie auszuwerten, in der die Plattform angegeben ist, die auf gke festgelegt sein muss:

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • POLICY_ID: Die ID der Plattformrichtlinie. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POD_SPECIFICATION_PATH: Der Pfad zu Ihrer Pod-Spezifikation.

Führen Sie folgenden Befehl aus:

Linux, macOS oder Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --platform=gke \
    --resource=POD_SPECIFICATION_PATH

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --platform=gke `
    --resource=POD_SPECIFICATION_PATH

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --platform=gke ^
    --resource=POD_SPECIFICATION_PATH

Prüfbasierte Plattformrichtlinien mit einer Image-URL bewerten

Führen Sie den folgenden Befehl aus, um eine Richtlinie anhand einer Bild-URL zu prüfen:

Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

  • POLICY_ID: Die ID der Plattformrichtlinie. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • IMAGE_URL: Der Pfad zu Ihrer Pod-Spezifikation.

Führen Sie folgenden Befehl aus:

Linux, macOS oder Cloud Shell

gcloud beta container binauthz policy evaluate POLICY_ID \
    --image=IMAGE_URL

Windows (PowerShell)

gcloud beta container binauthz policy evaluate POLICY_ID `
    --image=IMAGE_URL

Windows (cmd.exe)

gcloud beta container binauthz policy evaluate POLICY_ID ^
    --image=IMAGE_URL

Wenn Sie das Flag --image verwenden, wird implizit davon ausgegangen, dass der Namespace und das Dienstkonto leer sind. Wenn in der Richtlinie, die Sie auswerten, Checksets verwendet werden, die auf kubernetesNamespace oder kubernetesServiceAccount beschränkt sind, sind die zurückgegebenen Ergebnisse möglicherweise nicht genau.

Befehlsausgabe überprüfen

Die Befehlsausgabe enthält ein zusammenfassendes Ergebnis, das den Konformitätsstatus des Pods angibt. Die folgenden Konformitätsstatus können zurückgegeben werden:

  • CONFORMANT: Die Kubernetes-Ressource entspricht der Plattformrichtlinie.
  • NON_CONFORMANT: Die Kubernetes-Ressource entspricht nicht der Plattformrichtlinie.
  • ERROR: Bei der Auswertung ist ein Fehler aufgetreten.

Die Antwort enthält auch verschachtelte Ergebnisse mit detaillierten Informationen zum Konformitätsstatus aller Prüfungen, die für jedes Bild in der Kubernetes-Ressource ausgewertet wurden.

Jeder ImageResults-Block enthält ein für Menschen lesbares explanation-Feld, in dem beschrieben wird, warum das Bild zulässig oder unzulässig ist.

Um die Scripting-Funktion zu vereinfachen, gibt der Befehl einen Exitcode ungleich null zurück, wenn die Pod-Spezifikation nicht der Richtlinie entspricht oder die Auswertung fehlschlägt.

Die folgenden Ausgabefälle veranschaulichen zwei Fälle. Im ersten Fall entspricht die Kubernetes-Ressource der Richtlinie. Im zweiten Fall entspricht die Ressource nicht der Richtlinie.

Konformes Ergebnis ansehen

In diesem Abschnitt wird die Ausgabe einer Überprüfung des Richtlinienbewertungsdienstes beschrieben, bei der der Pod der Plattformrichtlinie entspricht.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: CONFORMANT
          explanation: Image is in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    verdict: CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: CONFORMANT
verdict: CONFORMANT

In der Ausgabe wird für die folgenden Arten von Bewertungen das Ergebnis CONFORMANT zurückgegeben:

  • Check: Das Image entspricht der einzelnen Prüfung, in diesem Fall der Prüfung auf vertrauenswürdige Verzeichnisse.
  • CheckSet: Das Bild entspricht allen Prüfungen im CheckSet.
  • Richtlinie: Das Bild entspricht der Richtlinie.

Da das Image der Richtlinie entspricht, gibt der Befehl den Exit-Code 0 zurück.

Nicht konformes Ergebnis ansehen

In diesem Abschnitt wird die Ausgabe einer Überprüfung des Richtlinienbewertungsdienstes beschrieben, bei der der Pod nicht der Plattformrichtlinie entspricht.

results:
- imageResults:
  - checkSetResult:
      checkResults:
        results:
        - displayName: My trusted directory check
          evaluationResult:
            verdict: NON_CONFORMANT
          explanation: Image isn't in a trusted directory
          type: TrustedDirectoryCheck
      displayName: Default check set
      scope: {}
    imageUri: us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0
    verdict: NON_CONFORMANT
  kubernetesNamespace: default
  kubernetesServiceAccount: default
  podName: my-pod
  verdict: NON_CONFORMANT
verdict: NON_CONFORMANT

Da das Image in der Ausgabe nicht die individuelle Prüfung besteht, in diesem Fall die Prüfung auf vertrauenswürdige Verzeichnisse und damit den Satz aller Prüfungen, lautet das Ergebnis der obersten Ebene NON_CONFORMANT. Der Befehl gibt daher einen Exit-Code ungleich null zurück.

Richtlinienbewertungsdienst testen

In diesem Abschnitt wird beschrieben, wie Sie den Dienst zur Richtlinienauswertung testen können. Sie erstellen eine prüfbasierte Plattformrichtlinie, die die Prüfung auf vertrauenswürdige Verzeichnisse enthält. Im ersten Test können Sie dann eine Pod-Spezifikation auswerten, die der Richtlinie entspricht. Im zweiten Test bewerten Sie eine Pod-Spezifikation, die nicht der Richtlinie entspricht.

Führen Sie die folgenden Befehle aus, um eine Richtlinie zu erstellen, die eine vertrauenswürdige Verzeichnisprüfung enthält:

  1. Erstellen Sie eine Plattformrichtliniendatei:

    cat << EOF > my-policy.yaml
    gkePolicy:
      checkSets:
      - checks:
        - displayName: "My trusted directory check"
          trustedDirectoryCheck:
            trustedDirPatterns:
            - "us-docker.pkg.dev/google-samples/containers/gke/"
        displayName: "My default check set"
    EOF
    
  2. Erstellen Sie die Richtlinie:

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • POLICY_ID: Eine Plattformrichtlinien-ID Ihrer Wahl. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • POLICY_PATH: Ein Pfad zur Richtliniendatei.
    • POLICY_PROJECT_ID: Die ID des Richtlinienprojekts.

    Führen Sie folgenden Befehl aus:

    Linux, macOS oder Cloud Shell

    gcloud beta container binauthz policy create POLICY_ID \
        --platform=gke \
        --policy-file=POLICY_PATH \
        --project=POLICY_PROJECT_ID

    Windows (PowerShell)

    gcloud beta container binauthz policy create POLICY_ID `
        --platform=gke `
        --policy-file=POLICY_PATH `
        --project=POLICY_PROJECT_ID

    Windows (cmd.exe)

    gcloud beta container binauthz policy create POLICY_ID ^
        --platform=gke ^
        --policy-file=POLICY_PATH ^
        --project=POLICY_PROJECT_ID

    gcloud beta container binauthz policy create POLICY_ID \
    --platform=gke \
    --policy-file=my-policy.yaml
    

Konformes Image bewerten

In diesem Abschnitt bewerten Sie eine Pod-Spezifikation, die der Richtlinie entspricht, die Sie zuvor in dieser Anleitung erstellt haben. Die Bewertung gibt ein Ergebnis zurück, das angibt, dass die Pod-Spezifikation CONFORMANT ist, da die Pod-Spezifikation auf ein Image verweist, das sich in dem Verzeichnis befindet, das in trustedDirPatterns in der Prüfung auf vertrauenswürdige Verzeichnisse angegeben ist. “

  1. Erstellen Sie die Pod-Spezifikation:

    cat << EOF > my-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
          }
          ]
      }
    }
    EOF
    
  2. Verwenden Sie den Richtlinienbewertungsdienst mit dem folgenden Befehl:

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • POLICY_ID: Die ID der Plattformrichtlinie. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-conforming-pod.json: Der Pfad zu Ihrer Pod-Spezifikation.

    Führen Sie folgenden Befehl aus:

    Linux, macOS oder Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-conforming-pod.json

Nicht konformes Image bewerten

In diesem Abschnitt bewerten Sie eine Pod-Spezifikation, die nicht der Richtlinie entspricht, die Sie zuvor in dieser Anleitung erstellt haben. Die Bewertung erzeugt ein Ergebnis, das angibt, dass die Pod-Spezifikation NON_CONFORMANT ist, da die Pod-Spezifikation auf ein Image verweist, das sich außerhalb des Verzeichnisses befindet, das in trustedDirPatterns in der Prüfung auf vertrauenswürdige Verzeichnisse angegeben ist.

Führen Sie die folgenden Befehle aus, um ein nicht konformes Bild zu bewerten:

  1. Erstellen Sie die Pod-Spezifikation:

    cat << EOF > my-non-conforming-pod.json
    {
      "apiVersion": "v1",
      "kind": "Pod",
      "metadata": {
        "name": ""
      },
      "spec": {
        "containers": [
          {
            "image": "us-docker.pkg.dev/untrusted-directory/containers/gke/hello-app:1.0"
          }
        ]
      }
    }
    EOF
    
  2. Verwenden Sie den Richtlinienbewertungsdienst mit dem folgenden Befehl:

    Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:

    • POLICY_ID: Die ID der Plattformrichtlinie. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
    • my-non-conforming-pod.json: Der Pfad zu Ihrer Pod-Spezifikation.

    Führen Sie folgenden Befehl aus:

    Linux, macOS oder Cloud Shell

    gcloud beta container binauthz policy evaluate POLICY_ID \
        --image=my-non-conforming-pod.json

    Windows (PowerShell)

    gcloud beta container binauthz policy evaluate POLICY_ID `
        --image=my-non-conforming-pod.json

    Windows (cmd.exe)

    gcloud beta container binauthz policy evaluate POLICY_ID ^
        --image=my-non-conforming-pod.json

Nächste Schritte