Auf dieser Seite erfahren Sie, wie Sie mit der kontinuierlichen Validierung der Binärautorisierung (CV) die Aktualität der Images überprüfen können, die mit Pods verknüpft sind, die auf Google Kubernetes Engine (GKE) Clustern laufen, in denen CV aktiviert ist. Dazu prüft CV, wann das Image in die Image-Registry hochgeladen wurde.
Diese Prüfung unterstützt nur Artifact Registry- und Container Registry-Repositories.
Kosten
In diesem Leitfaden werden folgende Google Cloud-Dienste verwendet.
- Binärautorisierung, aber CV ist in der Vorschauphase kostenlos.
- Google Kubernetes Engine
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Google Kubernetes Engine APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com - Prüfen Sie, ob die gcloud CLI auf die neueste Version aktualisiert ist.
- Installieren Sie das
kubectl
-Befehlszeilentool - Wenn sich Ihre Richtlinien für die Binärautorisierung und GKE-Cluster in verschiedenen Projekten befinden, muss die Binärautorisierung in beiden Projekten aktiviert sein.
Erforderliche Rollen
In diesem Abschnitt erfahren Sie, wie Sie Rollen für diese Prüfung festlegen.
Überblick
Wenn Sie alle in dieser Anleitung erwähnten Produkte im selben Projekt ausführen, müssen Sie keine Berechtigungen festlegen. Die Binärautorisierung konfiguriert die Rollen korrekt, wenn Sie sie aktivieren. Wenn Sie die Produkte in verschiedenen Projekten ausführen, müssen Sie Rollen festlegen, wie in diesem Abschnitt beschrieben.
Bitten Sie den Administrator, dem Binärautorisierungsdienst-Agent des Richtlinienprojekts die folgenden IAM-Rollen zuzuweisen, damit der Dienst-Agent für Binärautorisierungen des Richtlinienprojekts die erforderlichen Berechtigungen zur Auswertung der CV-Image-Aktualitätsprüfung hat:
-
Wenn sich Ihr Clusterprojekt vom Richtlinienprojekt unterscheidet:
Bewerter für Richtlinien für Binärautorisierungen (
roles/binaryauthorization.policyEvaluator
) im Dienst-Agent für die Binärautorisierung für das Clusterprojekt, um auf das Richtlinienprojekt zuzugreifen -
Wenn sich Ihr Artifact-Projekt von Ihrem Richtlinienprojekt unterscheidet:
Artifact Registry-Leser (
roles/artifactregistry.reader
) für den Dienst-Agent für Binärautorisierungen des Richtlinienprojekts, damit er auf das Attestierungsprojekt zugreifen kann -
Wenn sich Ihr Artefaktprojekt vom Clusterprojekt unterscheidet: Artifact Registry-Leser (
roles/artifactregistry.reader
) im Binärautorisierungsdienst-Cluster des Clusterprojekts, um auf Image-Metadaten im Artefaktprojekt zuzugreifen
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Ihr Administrator kann möglicherweise auch dem Dienst-Agent für die Binärautorisierung des Richtlinienprojekts die erforderlichen Berechtigungen über benutzerdefinierte Rollen oder andere vordefinierte Rollen erteilen.
Rollen mit der gcloud CLI gewähren
Damit der Dienst-Agent für die Binärautorisierung in jedem Projekt die erforderlichen Berechtigungen zum Auswerten dieser Prüfung hat, müssen Sie dem Dienst-Agent für die Binärautorisierung in jedem Projekt die folgenden IAM-Rollen zuweisen.
Clusterprojekt, das vom Richtlinienprojekt abweicht
Weisen Sie dem Dienst-Agent für die Binärautorisierung im Clusterprojekt die Rolle Evaluator für die Binärautorisierungsrichtlinie (roles/binaryauthorization.policyEvaluator
) für das Richtlinienprojekt zu.
gcloud projects add-iam-policy-bindingPOLICY_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describeCLUSTER_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/binaryauthorization.policyEvaluator
Ersetzen Sie Folgendes:
POLICY_PROJECT_ID
: Die ID des Projekts, das Ihre Richtlinie enthält.CLUSTER_PROJECT_ID
: die Projekt-ID des Clusters.
Richtlinienprojekt unterscheidet sich vom Artefaktprojekt
Weisen Sie dem Dienst-Agent für die Binärautorisierung im Richtlinienprojekt die Rolle Artifact Registry-Leser (roles/artifactregistry.reader
) für das Artefaktprojekt zu.
gcloud projects add-iam-policy-bindingARTIFACT_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describePOLICY_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/artifactregistry.reader
Ersetzen Sie dabei ARTIFACT_PROJECT_ID
durch die ID des Projekts, das Ihr Artifact Registry-Repository enthält.
Clusterprojekt, das sich vom Artefaktprojekt unterscheidet
Weisen Sie dem Dienst-Agent für die Binärautorisierung im Clusterprojekt die Rolle Artifact Registry-Leser (roles/artifactregistry.reader
) für das Artefaktprojekt zu.
gcloud projects add-iam-policy-bindingARTIFACT_PROJECT_ID
\ --member="serviceAccount:service-$(gcloud projects describeCLUSTER_PROJECT_ID
--format='value(projectNumber)')@gcp-sa-binaryauthorization.iam.gserviceaccount.com" \ --role=roles/artifactregistry.reader
Ersetzen Sie Folgendes:
ARTIFACT_PROJECT_ID
: die ID des Projekts, das Ihr Artifact Registry-Repository enthält.CLUSTER_PROJECT_ID
ist die ID des Projekts, in dem Ihre GKE-Cluster ausgeführt werden.
Eine Plattformrichtlinie erstellen
So erstellen Sie eine CV-Plattformrichtlinie mit der Image-Aktualitätsprüfung:
Erstellen Sie die YAML-Datei für die Plattformrichtlinie:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - imageFreshnessCheck: maxUploadAgeDays: MAX_UPLOAD_AGE_DAYS displayName: CHECK_DISPLAY_NAME displayName: CHECK_SET_DISPLAY_NAME EOF
Ersetzen Sie Folgendes:
MAX_UPLOAD_AGE_DAYS
: Maximale verstrichene Zeit seit dem Hochladen des Images in die Registry in Tagen.CHECK_SET_DISPLAY_NAME
: Optionaler Anzeigename Ihrer Wahl für den DiagnosesatzCHECK_DISPLAY_NAME
: Optionaler Anzeigename Ihrer Wahl für die Diagnose
Erstellen Sie die Plattformrichtlinie:
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
- POLICY_ID: Eine Plattformrichtlinien-ID Ihrer Wahl. Wenn sich die Richtlinie in einem anderen Projekt befindet, können Sie den vollständigen Ressourcennamen verwenden:
CV aktivieren
Sie können einen neuen Cluster erstellen oder einen vorhandenen Cluster aktualisieren, um das CV-Monitoring mit prüfbasierten Plattformrichtlinien zu verwenden.
Cluster erstellen, der das CV-Monitoring verwendet
In diesem Abschnitt erstellen Sie einen Cluster, der nur das CV-Monitoring mit prüfbasierten Plattformrichtlinien verwendet.
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
CLUSTER_NAME
: ein ClusternameLOCATION
: Der Standort, z. B.us-central1
oderasia-south1
POLICY_PROJECT_ID
: Die ID des Projekts, in dem die Richtlinie gespeichert ist.POLICY_ID
: Die Richtlinien-ID.CLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Cluster mit Erzwingung und CV-Monitoring erstellen
In diesem Abschnitt erstellen Sie einen Cluster, der sowohl die Erzwingung der Projekt-Singleton-Richtlinie als auch das CV-Monitoring mit prüfbasierten Plattformrichtlinien verwendet:
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
CLUSTER_NAME
: ein ClusternameLOCATION
: Der Standort, z. B.us-central1
oderasia-south1
POLICY_PROJECT_ID
: Die ID des Projekts, in dem die Richtlinie gespeichert ist.POLICY_ID
: Die Richtlinien-ID.CLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud beta container clusters create CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters create CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters create CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Cluster zur Verwendung des CV-Monitoring aktualisieren
In diesem Abschnitt aktualisieren Sie einen Cluster, um das CV-Monitoring nur mit prüfbasierten Plattformrichtlinien zu verwenden. Wenn für den Cluster bereits die Erzwingung der Projekt-Singleton-Richtlinie aktiviert ist, wird sie durch Ausführen dieses Befehls deaktiviert. Stattdessen sollten Sie den Cluster mit aktivierter Erzwingung und aktiviertem CV-Monitoring aktualisieren.
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
CLUSTER_NAME
: Der ClusternameLOCATION
: Der Standort, z. B.us-central1
oderasia-south1
POLICY_PROJECT_ID
: die ID des Projekts, in dem die Richtlinie gespeichert istPOLICY_ID
: die Richtlinien-IDCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Cluster aktualisieren, um Erzwingung und CV-Monitoring zu verwenden
In diesem Abschnitt aktualisieren Sie einen Cluster, um sowohl die Erzwingung der Projekt-Singleton-Richtlinie als auch das CV-Monitoring mit prüfbasierten Plattformrichtlinien zu verwenden.
Ersetzen Sie folgende Werte, bevor sie einen der Befehlsdaten verwenden:
CLUSTER_NAME
: ein ClusternameLOCATION
: Der Standort, z. B.us-central1
oderasia-south1
POLICY_PROJECT_ID
: die ID des Projekts, in dem die Richtlinie gespeichert istPOLICY_ID
: die Richtlinien-IDCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Führen Sie folgenden Befehl aus:
Linux, macOS oder Cloud Shell
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
Windows (PowerShell)
gcloud beta container clusters update CLUSTER_NAME ` --location=LOCATION ` --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ` --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ` --project=CLUSTER_PROJECT_ID
Windows (cmd.exe)
gcloud beta container clusters update CLUSTER_NAME ^ --location=LOCATION ^ --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^ --project=CLUSTER_PROJECT_ID
Logs für CV-Einträge ansehen
CV protokolliert Plattformrichtlinienverstöße in Cloud Logging innerhalb von 24 Stunden. Die Einträge werden in der Regel innerhalb weniger Stunden angezeigt.
Wenn keine Images gegen die von Ihnen aktivierten Plattformrichtlinien verstoßen, werden keine Einträge in den Logs angezeigt.
Führen Sie den folgenden Befehl aus, um die CV-Logeinträge der letzten sieben Tage anzusehen:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'
Ersetzen Sie CLUSTER_PROJECT_ID
durch die Clusterprojekt-ID.
Prüftypen
CV-Logs prüfen Informationen zu Verstößen in checkResults
. Im Eintrag gibt der Wert checkType
die Prüfung an. Die Werte für die einzelnen Prüfungen lauten so:
ImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
Beispiellog
Der folgende Beispiel-CV-Logging-Eintrag beschreibt ein nicht konformes Image, das gegen eine Prüfung auf vertrauenswürdige Verzeichnisse verstößt:
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/123456789/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "My check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "gcr.io/my-project/hello-app:latest"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-test-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
Bereinigen
In diesem Abschnitt wird beschrieben, wie Sie das zuvor in dieser Anleitung konfigurierte CV-Monitoring bereinigen.
Sie können das CV-Monitoring oder sowohl die Binärautorisierung als auch CV in Ihrem Cluster deaktivieren.
Binärautorisierung in einem Cluster deaktivieren
Führen Sie den folgenden Befehl aus, um die CV und Binärautorisierungserzwingung in Ihrem Cluster zu deaktivieren:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Prüfbasiertes Richtlinien-Monitoring in einem Cluster deaktivieren
Führen Sie den folgenden Befehl aus, um CV mit prüfbasierten Richtlinien im Cluster zu deaktivieren und die Erzwingung mithilfe der Richtlinie für die Binärautorisierungserzwingung neu zu aktivieren:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
Ersetzen Sie Folgendes:
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Beachten Sie, dass --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
dem älteren Flag --enable-binauthz
entspricht.
Richtlinie löschen
Führen Sie den folgenden Befehl aus, um die Richtlinie zu löschen. Die prüfbasierte Plattformrichtlinie muss nicht gelöscht werden, um die prüfbasierte Richtlinienprüfung zu deaktivieren.
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
Ersetzen Sie Folgendes:
POLICY_ID
: Die ID der RichtliniePOLICY_PROJECT_ID
: Die Richtlinien-Projekt-ID
Nächste Schritte
- Aktualitätsprüfung für Bilder verwenden
- Einfache Prüfung auf Attestierungsignatur verwenden
- Sigstore-Signaturprüfung verwenden
- SLSA-Prüfung verwenden
- Prüfung auf vertrauenswürdige Verzeichnisse verwenden
- Sicherheitslückenprüfung verwenden
- CV-Logs ansehen