Richtlinie mit der REST API konfigurieren

Auf dieser Seite finden Sie eine Anleitung zum Konfigurieren einer Richtlinie für die Binärautorisierung mithilfe der REST API. Alternativ können Sie diese Aufgaben auch mit der Google Cloud CLI oder der Google Cloud Console ausführen. Dieser Schritt ist Teil der Einrichtung der Binärautorisierung.

Übersicht

Eine Richtlinie ist ein Satz von Regeln, die das Deployment eines oder mehrerer Container-Images steuern.

Fügen Sie beim Konfigurieren einer Richtlinie mit der REST API Werte in einem JSON-Format ein, dessen Struktur mit der YAML-Struktur identisch ist, die in gcloud-Interaktionen mit dem Dienst verwendet wird. Weitere Informationen finden Sie in der Referenz zu YAML-Richtlinien.

Für die Konfiguration einer Richtlinie sind folgende Schritte erforderlich:

  • JSON-Richtliniendatei exportieren
  • Zusätzliche, ausgenommene Images hinzufügen (optional)
  • Standardregel festlegen
  • Beliebige clusterspezifische Regeln hinzufügen (optional)
  • JSON-Richtliniendatei importieren

Die meisten realen Richtlinien prüfen, ob alle erforderlichen Attestierer bestätigt haben, dass ein Container-Image für das Deployment verfügbar ist. In diesem Fall müssen Sie beim Konfigurieren der Richtlinie auch Attestierer erstellen.

Standardprojekt festlegen

Legen Sie das Google Cloud-Standardprojekt fest, falls Sie dies noch nicht getan haben:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

Dabei entspricht PROJECT_ID der ID des Projekts.

Richtlinie exportieren

Dieser Abschnitt gilt für GKE, GKE-Cluster, Cloud Run und Anthos Service Mesh.

Exportieren Sie die Richtlinie in eine JSON-Datei auf Ihrem lokalen System:

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" \
    -o "/tmp/policy.json"

Die Datei hat standardmäßig folgenden Inhalt:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/**"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

In der Standardliste admissionWhitelistPatterns Ihres Richtlinienexports werden möglicherweise andere Imagepfade angezeigt, die in dieser Anleitung angezeigt werden.

Ausgenommene Images verwalten

Dieser Abschnitt gilt für GKE, GKE-Cluster, Cloud Run und Anthos Service Mesh.

Ein ausgenommenes Image ist ein Container-Image, das von den Richtlinienregeln ausgenommen ist. Die Binärautorisierung lässt das Deployment von ausgenommenen Images immer zu.

Wenn Sie ausgenommene Images angeben möchten, listen Sie ihre Registry-Pfade in admissionWhitelistPatterns auf. Der Pfad kann sich auf Container Registry oder eine andere Image-Registry beziehen. Der Erzwinger verarbeitet ausgenommene Images in admissionWhitelistPatterns, nachdem Images vom Auswertungsmodus für Systemrichtlinien ausgenommen wurden.

Wenn Sie ein ausgenommenes Image hinzufügen möchten, fügen Sie einen namePattern-Knoten unter einer admissionWhitelistPatterns-Liste in die JSON-Richtliniendatei ein:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "MATCHING_PATTERN"
    }
  ],
  ...
}

Dabei ist MATCHING_PATTERN der genau passende Pfad zu einem einzelnen Image in Ihrer Registry oder zu allen Images, die einem Muster mit dem Platzhaltersymbol (*, **) entsprechen.

Cloud Run

Dieser Abschnitt gilt für Cloud Run.

Sie können nicht direkt Image-Namen angeben, die ein Tag enthalten. Sie können beispielsweise nicht IMAGE_PATH:latest angeben.

Wenn Sie Image-Namen angeben möchten, die Tags enthalten, müssen Sie den Image-Namen mithilfe eines Platzhalters so angeben:

  • * für alle Versionen eines einzelnen Images. Beispiel: us-docker.pkg.dev/myproject/container/hello@*
  • ** für alle Images in einem Projekt. Beispiel: us-docker.pkg.dev/myproject/**

Sie können Pfadnamen verwenden, um einen Digest im Format IMAGE_PATH@DIGEST anzugeben.

Auswertungsmodus für Systemrichtlinien

Dieser Abschnitt gilt für GKE und GKE-Cluster.

Der Auswertungsmodus für Systemrichtlinien ist eine Richtlinieneinstellung, bei der die Binärautorisierung eine Systemrichtlinie auswertet, bevor die von Ihnen konfigurierte Richtlinie ausgewertet wird. Google verwaltet die Systemrichtlinie, mit der eine Liste der von Google verwalteten Systemimages ausgenommen wird, die von GKE verwendet werden. In der Systemrichtlinie aufgeführte Images werden nicht durch die Richtlinienerzwingung blockiert. Wenn Sie die Einstellung nicht aktivieren, müssen Sie die Liste der ausgenommenen Images selbst verwalten. Ausgenommene Images verwalten

Sie können den Inhalt der globalen Richtlinie mit dem folgenden Befehl abrufen:

gcloud alpha container binauthz policy export-system-policy

Wenn Sie den Auswertungsmodus für globale Richtlinien aktivieren möchten, fügen Sie der JSON-Richtliniendatei den folgenden übergeordneten Knoten hinzu:

"globalPolicyEvaluationMode": "ENABLE"

Fügen Sie Folgendes hinzu, um den Auswertungsmodus für globale Richtlinien zu deaktivieren:

"globalPolicyEvaluationMode": "DISABLE"

So exportieren Sie die einer Richtlinie zugeordnete Systemrichtlinie:

gcloud alpha container binauthz policy export-system-policy \
  --location=REGION > /tmp/policy.yaml

Ersetzen Sie REGION durch die Region, die der Systemrichtlinie zugeordnet ist, die Sie exportieren möchten (oder "global"). Hier einige Beispiele: asia-east1, europe-west1, us-central1

Wenn Sie --location weglassen oder --location=global angeben, gibt der Befehl eine Systemrichtlinie aus einer Region in der letzten Gruppe von Regionen aus, um Aktualisierungen zu erhalten. Da die meisten Änderungen an der Systemrichtlinie Hinzufügungen sind, enthält die Ausgabe die Gruppe von Systemimages, die derzeit in allen Regionen zulässig sind.

Standardregel festlegen

Dieser Abschnitt gilt für GKE, GKE-Cluster, Cloud Run und Anthos Service Mesh.

Eine Regel ist Bestandteil einer Richtlinie, die Einschränkungen für Container-Images definiert. Nur Container-Images, die diesen Einschränkungen genügen, können bereitgestellt werden. Jeder Zulassungsanfrage ist ein GKE-Cluster zugeordnet. Wenn eine Anfrage nicht mit einer clusterspezifischen Regel übereinstimmt, wird die Standardregel verwendet.

Die Standardregel wird im Knoten defaultAdmissionRule in der Richtlinie definiert. Weitere Informationen zu den Bestandteilen dieser Regel finden Sie unter ADMISSION_RULE in der YAML-Richtlinienreferenz. Beispiele für Standardregeln finden Sie unter Beispielrichtlinien.

Bearbeiten Sie zum Festlegen der Standardregel den Knoten defaultAdmissionRule in der JSON-Richtliniendatei nach Bedarf:

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

wobei

  • EVAL_MODE gibt den Einschränkungstyp an, den die Binärautorisierung auswertet, bevor das Deployment eines Container-Images zugelassen wird.
  • ENFORCEMENT_MODE gibt die Aktion an, die ausgeführt wird, wenn ein Container-Image nicht den in der Regel definierten Einschränkungen entspricht.
  • ATTESTOR gibt die Attestierer an (falls erforderlich), die ein Container-Image signieren müssen, bevor es bereitgestellt werden kann. Verwenden Sie den vollständig qualifizierten Pfad zum Attestierer im Format projects/PROJECT_ID/attestors/ATTESTOR_NAME.

Wenn Ihre Regel prüft, ob alle erforderlichen Attestierer ein Container-Image signiert haben, müssen Sie vor dem Ausführen dieses Schrittes Attestierer erstellen.

Clusterspezifische Regeln festlegen (optional)

Dieser Abschnitt gilt für GKE und GKE-Cluster.

Ein Cluster kann auch eine oder mehrere clusterspezifische Regeln enthalten. Dieser Regeltyp gilt nur für den angegebenen GKE-Cluster. Wenn für einen Cluster keine eigene Regel festgelegt ist, wird die Standardregel verwendet. Clusterspezifische Regeln sind ein optionaler Bestandteil einer Richtlinie.

Clusterspezifische Regeln werden in clusterAdmissionRules-Knoten in der JSON-Richtliniendatei definiert. Weitere Informationen zu den Bestandteilen dieser Regel finden Sie unter ADMISSION_RULE in der YAML-Richtlinienreferenz. Ein Beispiel finden Sie unter Clusterspezifische Regel verwenden in den Beispielrichtlinien.

So fügen Sie eine clusterspezifische Regel hinzu:

Fügen Sie in der JSON-Richtliniendatei einen clusterAdmissionRules-Knoten hinzu:

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

Dabei ist CLUSTER_SPECIFIER die Ressourcen-ID des Clusters, auf den die Regel angewendet wird.

  • Bei GKE, GKE-angehängten Clustern und GKE on AWS ist das Format CLUSTER_LOCATION.CLUSTER_NAME, z. B. us-central1-a.test-cluster.
  • Bei GKE on Bare Metal und GKE on VMware lautet das Format FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID, z. B. global.test-membership.

Die anderen Attribute finden Sie weiter oben in dieser Anleitung unter Standardregel festlegen. Ein Beispiel für eine clusterspezifische Regel finden Sie unter Beispielrichtlinien.

Wenn Ihre Regel prüft, ob alle erforderlichen Attestierer ein Container-Image signiert haben, müssen Sie vor dem Ausführen dieses Schrittes Attestierer erstellen.

JSON-Richtliniendatei importieren

Dieser Abschnitt gilt für GKE, GKE-Cluster, Cloud Run und Anthos Service Mesh.

Importieren Sie die JSON-Richtliniendatei wieder in die Binärautorisierung. Geben Sie dazu Folgendes ein:

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"

Nächste Schritte