Auf dieser Seite erfahren Sie, wie Sie mit der CV-SLSA-Prüfung (Continuous Validation) für die Binärautorisierung die SLSA-konforme Herkunft von Container-Images prüfen, die mit auf GKE-Clustern (Google Kubernetes Engine) ausgeführten Pods verknüpft sind, für die CV aktiviert ist.
Für diese Prüfung müssen Sie Images mit Cloud Build erstellen, um eine SLSA-konforme Herkunft zu erzeugen.
Im Beispiel in dieser Anleitung werden Cloud Source Repositories für das Quellcode-Repository, Artifact Registry für die Image-Registry und Cloud Build verwendet, um das Image zu erstellen und die Herkunft zu erzeugen.
Der einzige vertrauenswürdige Builder, der von der SLSA-Prüfung unterstützt wird, ist Cloud Build.
Kosten
In diesem Leitfaden werden folgende Google Cloud-Dienste verwendet.
- Artifact Registry
- Binärautorisierung, aber CV ist in der Vorschauphase kostenlos.
- Cloud Build
- Cloud Source Repositories
- GKE
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, Cloud Build, GKE, Cloud Source Repositories APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.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, Cloud Build, GKE, Cloud Source Repositories APIs:
gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.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.
Übersicht
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.
Um sicherzustellen, dass der Dienst-Agent für die Binärautorisierung in jedem Projekt die erforderlichen Berechtigungen zur Auswertung der CV-SLSA-Prüfung hat, bitten Sie Ihren Administrator, dem Dienst-Agent für die Binärautorisierung in jedem Projekt die folgenden IAM-Rollen zu gewähren:
-
Artifact Registry-Leser (
roles/artifactregistry.reader
) für das Compute Engine-Dienstkonto des Clusterprojekts - 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 Attestierungsprojekt von Ihrem Richtlinienprojekt unterscheidet:
Betrachter von Container Analysis-Vorkommen (
roles/containeranalysis.occurrences.viewer
) für den Dienst-Agent für Binärautorisierungen des Richtlinienprojekts, damit er auf das Attestierungsprojekt zugreifen kann
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Ihr Administrator kann möglicherweise auch dem Dienst-Agent für die Binärautorisierung in jedem Projekt die erforderlichen Berechtigungen über benutzerdefinierte Rollen oder andere vordefinierte Rollen erteilen.
Rollen mit der gcloud CLI gewähren
Damit die Dienstkonten in jedem Projekt die erforderlichen Berechtigungen zum Auswerten dieser Prüfung haben, erteilen Sie den Dienstkonten in jedem Projekt die folgenden IAM-Rollen:
Wenn sich das Projekt, in dem Sie den Cluster ausführen, von dem Projekt unterscheidet, in dem sich die Richtlinie befindet, müssen Sie dem Dienst-Agent für die Binärautorisierung des Clusterprojekts die Berechtigung erteilen, auf die Richtlinie im Richtlinienprojekt zuzugreifen.
Rufen Sie den Dienst-Agent für die Binärautorisierung des Clusterprojekts ab:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Ersetzen Sie
CLUSTER_PROJECT_ID
durch die Projekt-ID des Clusters.CV die Bewertung der Richtlinie im Cluster erlauben:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \ --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \ --role='roles/binaryauthorization.policyEvaluator'
Ersetzen Sie
POLICY_PROJECT_ID
durch die ID des Projekts, das Ihre Richtlinie enthält.
Gewähren Sie dem Dienst-Agent des Richtlinienprojekts Zugriff auf Attestierungen:
Rufen Sie den Dienst-Agent für die Binärautorisierung ab, der dem Richtlinienprojekt zugeordnet ist:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") POLICY_PROJECT_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Ersetzen Sie
POLICY_PROJECT_ID
durch die ID des Projekts, das Ihre Richtlinie enthält.Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding ATTESTATION_PROJECT_ID \ --member="serviceAccount:$POLICY_PROJECT_SERVICE_ACCOUNT" \ --role='roles/containeranalysis.occurrences.viewer'
Ersetzen Sie
ATTESTATION_PROJECT_ID
durch die ID des Projekts, das Ihre Attestierungen enthält.
Gewähren Sie dem Compute Engine-Standarddienstkonto die Berechtigung, das Image aus dem Repository abzurufen:
Rufen Sie das Compute Engine-Dienstkonto ab, das mit dem Clusterprojekt verknüpft ist:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") COMPUTE_ENGINE_SERVICE_ACCOUNT="$PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Ersetzen Sie
CLUSTER_PROJECT_ID
durch die ID des Cluster-Projekts, das Ihre Plattformrichtlinie enthält.Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding ARTIFACT_PROJECT_ID \ --member="serviceAccount:$COMPUTE_ENGINE_SERVICE_ACCOUNT" \ --role='roles/artifactregistry.reader'
Ersetzen Sie
ARTIFACT_PROJECT_ID
durch die ID des Artifact Registry-Projekts, in dem die bereitzustellenden Images gespeichert sind.
Optional: Beispiel-Image erstellen und hochladen
Dieser Abschnitt dient nur zu Veranschaulichungszwecken und zeigt, wie Sie ein Beispiel-Image mit SLSA-konformer Herkunft erstellen. Die Provenienz wird später im Leitfaden zur Veranschaulichung der Prüfung verwendet. Weitere Informationen zur Cloud Build-Herkunft
Beispiel-Repository erstellen
So erstellen Sie ein Repository in Cloud Source Repositories:
Erstellen Sie das Repository und klonen Sie es lokal:
gcloud source repos create SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ gcloud source repos clone SOURCE_REPO_NAME \ --project=SOURCE_REPO_PROJECT_ID && \ cd SOURCE_REPO_NAME
Ersetzen Sie Folgendes:
SOURCE_REPO_NAME
: der Name Ihres Quellcode-Repositorys, z. B.slsa-check-test-repo
SOURCE_REPO_PROJECT_ID
: die Projekt-ID des Repositories
So erstellen Sie die Quell-, Konfigurations- und Build-Dateien:
Erstellen Sie die Bildquelle:
cat > quickstart.sh <<EOF #!/bin/sh echo "Hello, world! The time is $(date)." sleep infinity EOF
Machen Sie die Datei ausführbar:
chmod +x quickstart.sh
Erstellen Sie die Dockerfile-Konfigurationsdatei:
cat > Dockerfile <<EOF FROM alpine COPY quickstart.sh / CMD ["/quickstart.sh"] EOF
Erstellen Sie die Cloud Build-Datei
cloudbuild.yaml
, über die das Image in die Artifact Registry übertragen wird:cat > cloudbuild.yaml <<EOF steps: - name: 'gcr.io/cloud-builders/docker' args: [ 'build', '-t', 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE', '.' ] options: requestedVerifyOption: VERIFIED images: - 'LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE' EOF
Ersetzen Sie Folgendes:
LOCATION
: Artifact Registry-Standort, z. B.us-west2
,europe-central2
oderasia-east1
ARTIFACT_PROJECT_ID
: die ID des Projekts, in dem Artifact Registry-Artefakte gespeichert werdenARTIFACT_REPO_NAME
: Name des Artifact Registry-Repositorys, z. B.slsa-check-test-repo
DIRECTORY
: das Verzeichnis, z. B.slsa-check
IMAGE
: der Pfad zum Image, z. B.slsa-check-image
Führen Sie einen Commit der Dateien in Cloud Source Repositories aus:
git add . git commit -a
Beispiel-Image erstellen und hochladen
Zur Vereinfachung der Verwendung dieser Anleitung empfehlen wir, dasselbe Projekt für SOURCE_REPO_PROJECT_ID und ARTIFACT_PROJECT_ID zu verwenden. Wenn Sie verschiedene Projekte verwenden, müssen Sie möglicherweise zusätzliche IAM-Berechtigungen einrichten. Weitere Informationen zur Zugriffssteuerung in Artifact Registry Weitere Informationen zu Cloud Build finden Sie unter Cloud Build.
So erstellen Sie das Repository:
Erstellen Sie das Artifact Registry-Repository:
gcloud artifacts repositories create ARTIFACT_REPO_NAME \ --project=ARTIFACT_PROJECT_ID \ --repository-format=docker \ --location=LOCATION \ --description="Docker repository"
Ersetzen Sie Folgendes:
ARTIFACT_REPO_NAME
: der Name Ihres RepositorysARTIFACT_PROJECT_ID
: die Projekt-ID des ArtefaktsLOCATION
: Artifact Registry-Standort, z. B.us-west2
,europe-central2
oderasia-east1
Erstellen Sie den Cloud Build-Trigger:
gcloud beta builds triggers create cloud-source-repositories \ --project=SOURCE_REPO_PROJECT_ID \ --repo=SOURCE_REPO_NAME \ --region=LOCATION \ --branch-pattern=.* \ --build-config=cloudbuild.yaml
Ersetzen Sie Folgendes:
SOURCE_REPO_NAME
: Name des Quellcode-RepositorysSOURCE_REPO_PROJECT_ID
: die Cloud Build-Projekt-IDLOCATION
: der Standort
Lösen Sie einen Build aus, indem Sie die Dateien, die Sie zuvor in dieser Anleitung erstellt haben, pushen.
git push
Wenn das Image erfolgreich erstellt wurde, generiert Cloud Build die Provenienz und lädt das Image in Ihr Artifact Registry-Repository hoch.
So suchen Sie nach dem neuesten Image und rufen dessen Digest ab:
Prüfen Sie, ob Ihr Image mit Cloud Build erstellt wurde:
gcloud artifacts docker images list LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/REPO_NAME/DIRECTORY \ --project=ARTIFACT_PROJECT_ID \ --sort-by=create_time
Ersetzen Sie Folgendes:
LOCATION
: Artifact Registry-StandortARTIFACT_PROJECT_ID
: die Projekt-ID für ArtefakteARTIFACT_REPO_NAME
: der Name des RepositorysDIRECTORY
: das Verzeichnis
Kopieren Sie den Digest des neuesten Images. Der Digest sieht dann ungefähr so aus:
sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59
Optional: Herkunft des Bildes ansehen:
gcloud artifacts docker images describe \ LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST \ --project=ARTIFACT_PROJECT_ID \ --show-provenance
Ersetzen Sie Folgendes:
ARTIFACT_PROJECT_ID
: die Projekt-ID für ArtefakteLOCATION
: Artifact Registry-StandortARTIFACT_REPO_NAME
: Name des Artifact-RepositorysDIRECTORY
: das VerzeichnisIMAGE
: Pfad zum BildDIGEST
: der dem Bild zugeordnete Digest
Die Befehlsausgabe sieht dann ungefähr so aus:
image_summary: digest: sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 fully_qualified_digest: us-west2-docker.pkg.dev/my-project/slsa-check-repo/slsa-check-image@sha256:9432f747bd058b33de33bb5314d6eec1ac357d664e04c76824bb7072a9218d59 registry: us-west2-docker.pkg.dev repository: slsa-check-repo slsa_build_level: 3 provenance_summary: provenance: - build: intotoStatement: _type: https://in-toto.io/Statement/v0.1 predicateType: https://slsa.dev/provenance/v0.1 slsaProvenance: builder: id: https://cloudbuild.googleapis.com/GoogleHostedWorker materials: - digest: sha1: de4e4227fff1d00d6f7785a827608627e4a369ea uri: git+https://source.cloud.google.com/my-project/slsa-check-source-repo metadata: ... envelope: payload: eyJfdHlwZSI6I ... taW1hZ2U6dGFnMSJ9XX0= payloadType: application/vnd.in-toto+json signatures: - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/provenanceSigner/cryptoKeyVersions/1 sig: MEQCIBCCkho_re4EfAT-NBSSmAXOZlv4lU_vWzEru97tU8KmAiAKcAa99umWngzNQADmPixqYjbKjLOKQEUvrI5chSrf7g== - keyid: projects/verified-builder/locations/global/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1 sig: MEUCIFOEq_7RpiZAB4vUlit3hkZ2yI0n37-5Y87l0JbU-EZSAiEA9TNZZcv_MnzKffTnswHWZR2DSLmYiklr5twWfIec-zo=
Die Ausgabe muss den Block
provenance_summary
enthalten, damit die SLSA-Prüfung funktioniert. Wenn die Ausgabe den Block nicht enthält, prüfen Sie, ob Cloud Build durch einen Build-Trigger aufgerufen wurde. Cloud Build erzeugt keine Herkunftsinformationen, wenn es manuell ausgelöst wird.
Eine Plattformrichtlinie erstellen
Zum Generieren der Herkunft müssen Sie einen Cloud Build-Trigger verwenden, um das Image zu erstellen, wie unter Beispiel-Image erstellen und hochladen beschrieben.
So erstellen Sie eine Plattformrichtlinie mit einer SLSA-Prüfung:
Erstellen Sie die YAML-Datei für die Plattformrichtlinie:
cat > POLICY_PATH <<EOF gkePolicy: checkSets: - checks: - displayName: My SLSA check imageAllowlist: # This policy exempts images that are in the following artifact registry allowPattern: - ARTIFACT_LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/EXEMPT_IMAGE_PATH/** slsaCheck: rules: - attestationSource: containerAnalysisAttestationProjects: - projects/ATTESTATION_PROJECT_ID configBasedBuildRequired: true trustedBuilder: GOOGLE_CLOUD_BUILD trustedSourceRepoPatterns: - source.cloud.google.com/SOURCE_REPO_PROJECT_ID/SOURCE_REPO_NAME customConstraints: - CEL_EXPRESSION displayName: My check set EOF
Ersetzen Sie Folgendes:
POLICY_PATH
: Ein Pfad zur Richtliniendatei.ARTIFACT_LOCATION
: Der Speicherort Ihres Repositorys in der Artifact Registry.ARTIFACT_PROJECT_ID
: Die ID des Projekts, das Ihre Artefakte enthält.ARTIFACT_REPO_NAME
: das Repository, das das Image enthält.EXEMPT_IMAGE_PATH
: Optionaler Pfad zu einem oder mehreren ausgenommenen Bildern, z. B.not-built-by-cloud-build
. Der BlockimageAllowlist
ist in dieser Plattformrichtlinie enthalten, damit Sie Bilder ohne Herkunft ausnehmen können, damit sie nicht gegen die Plattformrichtlinie verstoßen. Wenn Sie stattdessen Verstöße bei diesen Bildern protokollieren möchten, lassen Sie diesen Block weg.ATTESTATION_PROJECT_ID
: die Projekt-ID, die die von Cloud Build erstellten Attestierungen enthält.SOURCE_REPO_PROJECT_ID
: die ID des Projekts, das Ihren Quellcode enthält.SOURCE_REPO_NAME
: das Repository, das das Image enthält. Zur Veranschaulichung: Wenn Sie einen Verstoß gegen diese Prüfung erzwingen möchten, legen SieSOURCE_REPO_NAME
auf ein Quellcode-Repository fest, in dem sich das Image nicht befindet.POLICY_PROJECT_ID
: Die ID des Projekts, das die CV-Richtlinie enthält.POLICY_ID
: Die ID dieser Richtlinie.CEL_EXPRESSION
: Ein CEL, der zusätzliche Einschränkungen für die SLSA-Richtlinie vorsieht. Wenn Sie beispielsweise eine benutzerdefinierte Einschränkung hinzufügen möchten, die zusätzlich vorschreibt, dass Bilder aus einem bestimmten Verzeichnispfad stammen müssen, ersetzen SieCEL_EXPRESSION
durch den folgenden Ausdruck:payload.predicate.externalParameters.buildConfigSource.path != "" && payload.predicate.externalParameters.buildConfigSource.repository.contains("github.com/my-repo/my-production-repo")
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
Image bereitstellen
Konfigurieren Sie
kubectl
:gcloud container clusters get-credentials CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID
Ersetzen Sie Folgendes:
CLUSTER_NAME
: der Name Ihres ClustersLOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-ID
Stellen Sie den Pod bereit:
kubectl run hello-app \ --image='LOCATION-docker.pkg.dev/ARTIFACT_PROJECT_ID/ARTIFACT_REPO_NAME/DIRECTORY/IMAGE@DIGEST'
Der Pod wird bereitgestellt. Da das Image mit Herkunft und einem vertrauenswürdigen Quellcode-Repository erstellt wurde, verstößt es nicht gegen die CV-SLSA-Prüfung und es werden keine Logeinträge generiert.
Wenn Sie einen Verstoß gegen die SLSA-Prüfung erzwingen möchten, können Sie
SOURCE_REPO_NAME
auf ein Quellcode-Repository festlegen, in dem sich das Image nicht befindet. Sie können den Build auch manuell auslösen, wodurch die Generierung der Provenienz übersprungen wird. Prüfen Sie dann die Logeinträge.
Logs für CV-Einträge ansehen
Sie können in Cloud Logging-Einträgen nach CV-Konfigurationsfehlern und Verstößen bei der Validierung von CV-Plattformrichtlinien suchen.
CV protokolliert Fehler und Verstöße innerhalb von 24 Stunden in Cloud Logging. Die Einträge werden in der Regel innerhalb weniger Stunden angezeigt.
Logs zu CV-Konfigurationsfehlern ansehen
Führen Sie den folgenden Befehl aus, um Fehlerprotokolle für die CV-Konfiguration aufzurufen:
gcloud logging read \
--order="desc" \
--freshness=7d \
--project=CLUSTER_PROJECT_ID \
'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'
Die folgende Ausgabe zeigt einen Konfigurationsfehler, bei dem keine CV-Plattformrichtlinie gefunden wird:
{
"insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
"configErrorEvent": {
"description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
}
},
"resource": {
"type": "k8s_cluster",
"labels": {
"cluster_name": "my-cluster",
"location": "us-central1-c",
"project_id": "my-project"
}
},
"timestamp": "2024-05-28T15:31:03.999566Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}
Validierungsverstöße gegen CV-Plattformrichtlinien ansehen
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