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 die folgenden 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.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Create or select 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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable artifactregistry.googleapis.com
binaryauthorization.googleapis.com cloudbuild.googleapis.com container.googleapis.com sourcerepo.googleapis.com -
Install the Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Create or select 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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization, Cloud Build, GKE, Cloud Source Repositories APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.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.
-
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 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.
Erteilen 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.
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 Repositorys
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
, mit der 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 sindARTIFACT_REPO_NAME
: Der Name des Artifact Registry-Repositorys, z. B.slsa-check-test-repo
DIRECTORY
: das Verzeichnis, z. B.slsa-check
IMAGE
: der Pfad zum Bild, z. B.slsa-check-image
Übertragen Sie die Dateien per Commit an Cloud Source Repositories:
git add . git commit -a
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
Cloud Build-Trigger erstellen:
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
: der Name des Quellcode-RepositorysSOURCE_REPO_PROJECT_ID
: die Cloud Build-Projekt-IDLOCATION
: der Standort
Lösen Sie einen Build aus, indem Sie die Dateien pushen, die Sie zuvor in dieser Anleitung erstellt haben.
git push
Wenn das Image erfolgreich erstellt wurde, generiert Cloud Build die Herkunft und lädt das Image in Ihr Artifact Registry-Repository hoch.
So prüfen Sie, ob das neueste Image verfügbar ist, und rufen den Digest ab:
Prüfen Sie, ob Ihr Image von 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 Ihres 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
: der Name des Artefakt-RepositorysDIRECTORY
: das VerzeichnisIMAGE
: der Pfad zum BildDIGEST
: der Digest, der dem Image zugeordnet ist
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
provenance_summary
-Block enthalten, damit die SLSA-Prüfung funktioniert. Wenn die Ausgabe den Block nicht enthält, prüfen Sie, ob Cloud Build von einem Build-Trigger aufgerufen wurde. Cloud Build erzeugt keine Herkunftsinformationen, wenn es manuell ausgelöst wird.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 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
: Ein optionaler Pfad zu einem oder mehreren ausgenommenen Bildern, z. B.not-built-by-cloud-build
. DerimageAllowlist
-Block ist in dieser Plattformrichtlinie enthalten, damit Sie Bilder ohne Herkunftsnachweis ausnehmen können, sodass sie nicht gegen die Plattformrichtlinie verstoßen. Wenn Sie stattdessen Verstöße aus 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 Richtlinie für vertrauliche Daten enthält.POLICY_ID
: Die ID dieser Richtlinie.CEL_EXPRESSION
: Ein CEL-Ausdruck, der zusätzliche Einschränkungen für die SLSA-Richtlinie enthält. Wenn Sie beispielsweise eine benutzerdefinierte Einschränkung hinzufügen möchten, die zusätzlich erfordert, dass Bilder aus einem bestimmten Verzeichnispfad stammen, 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:
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-IDCLUSTER_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-IDCLUSTER_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-IDCLUSTER_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-IDKonfigurieren 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. In diesem Fall wird die Herkunft nicht generiert. Suchen Sie dann nach Logeinträgen.ImageFreshnessCheck
SigstoreSignatureCheck
SimpleSigningAttestationCheck
SlsaCheck
TrustedDirectoryCheck
VulnerabilityCheck
CLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-IDCLUSTER_NAME
ist der Name des Clusters.LOCATION
: Der ClusterstandortCLUSTER_PROJECT_ID
: Die Cluster-Projekt-IDPOLICY_ID
: Die ID der RichtliniePOLICY_PROJECT_ID
: Die Richtlinien-Projekt-ID- 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
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:
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:
Optional: Beispielbild erstellen und hochladen
Dieser Abschnitt dient nur zur Veranschaulichung und zeigt, wie Sie ein Beispiel-Image mit SLSA-konformer Herkunft erstellen. Die Herkunft wird später im Leitfaden verwendet, um die Prüfung zu demonstrieren. Weitere Informationen zur Cloud Build-Herkunft
Beispiel-Repository erstellen
So erstellen Sie ein Repository in Cloud Source Repositories:
Beispiel-Image erstellen und hochladen
Zur Vereinfachung dieser Anleitung empfehlen wir, dass Sie dasselbe Projekt für SOURCE_REPO_PROJECT_ID und ARTIFACT_PROJECT_ID 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 – Übersicht.
So erstellen Sie das Repository:
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:
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:
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:
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:
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:
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
Logs für CV-Einträge ansehen
Sie können in Cloud Logging-Einträgen nach CV-Konfigurationsfehlern und CV-Verstößen gegen die 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 für CV-Konfigurationsfehler ansehen
Führen Sie den folgenden Befehl aus, um Fehlerlogs zur 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"
}
Verstöße gegen die CV-Plattformrichtlinie 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:
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:
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:
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: