Bereitstellung von Images in Cloud Run und Google Kubernetes Engine schützen

Auf dieser Seite finden Sie eine Anleitung zum Schützen von Image-Bereitstellungen in Cloud Run und Google Kubernetes Engine mit Cloud Build.

Informationen zum Konfigurieren der Binärautorisierung, um nach Build Attestierungen zu suchen und Bereitstellungen von Images zu blockieren, die nicht von Cloud Build generiert wurden. Dieser Prozess kann das Risiko der Bereitstellung nicht autorisierter Software verringern.

Hinweis

  1. Aktivieren Sie die Cloud Build, Binärautorisierung und Artifact Registry APIs.

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Informationen zum Zuweisen von Rollen.

    APIs aktivieren

  2. Um die Befehlszeilenbeispiele in dieser Anleitung zu verwenden, installieren und konfigurieren Sie das Google Cloud SDK.

  3. Binärautorisierung für Ihre Plattform einrichten.

Bereitstellungen mit Binärautorisierung steuern

Eine Richtlinie im Rahmen der Binärautorisierung ist eine Reihe von Regeln für das Deployment von Images. Sie können eine Regel so konfigurieren, dass digital signierte Attestierungen erforderlich sind.

Cloud Build generiert und signiert die Attestierungen zur Build-Zeit. Mit der Binärautorisierung können Sie den built-by-cloud-build Attestierer verwenden, um die Attestierungen zu prüfen und nur Images bereitzustellen, die von Cloud Build erstellt wurden.

Führen Sie einen Build in Ihrem Projekt aus, um den Attestierer built-by-cloud-build in Ihrem Projekt zu erstellen.

Führen Sie die folgenden Schritte aus, um die Bereitstellung von Images zu erlauben, die von Cloud Build erstellt wurden:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Binärautorisierung auf.

    Zur Binärautorisierung

  2. Im Tab Richtlinie klicken Sie auf Richtlinie bearbeiten.

  3. Wählen Sie im Dialogfeld Richtlinie bearbeiten die Option Nur Images zulassen, die von allen folgenden Attestierern genehmigt wurden aus.

  4. Klicken Sie auf Attestierer hinzufügen.

  5. Führen Sie im Dialogfeld Attestierer hinzufügen die folgenden Schritte aus:

    1. Wählen Sie Nach Projekt und Attestierername hinzufügen aus und führen Sie die folgenden Schritte aus:
      1. Geben Sie im Feld Projektname das Projekt ein, in dem Sie Cloud Build ausführen.
      2. Klicken Sie auf das Feld Name des Attestierers und prüfen Sie, ob der Attestierer built-by-cloud-build verfügbar ist.
      3. Klicken Sie auf built-by-cloud-build.
    2. Alternativ können Sie Nach Attestierer-Ressourcen-ID hinzufügen auswählen. Geben Sie unter Attestierer-Ressourcen-ID den Wert

      projects/PROJECT_ID/attestors/built-by-cloud-build
      

      Ersetzen Sie PROJECT_ID durch das Projekt, in dem Sie Cloud Build ausführen.

  6. Klicken Sie auf 1 Attestierer hinzufügen.

  7. Klicken Sie auf Save Policy (Richtlinie speichern).

gcloud

  1. Exportieren Sie Ihre vorhandene Richtlinie mit dem folgenden Befehl in eine Datei:

    gcloud container binauthz policy export > /tmp/policy.yaml
    
  2. Bearbeiten Sie die Richtliniendatei.

  3. Bearbeiten Sie eine der folgenden Regeln:

    • defaultAdmissionRule
    • clusterAdmissionRules
    • istioServiceIdentityAdmissionRules
    • kubernetesServiceAccountAdmissionRules
  4. Fügen Sie der Regel einen requireAttestationsBy-Block hinzu, sofern noch keiner vorhanden ist.

  5. Fügen Sie im Block requireAttestationsBy den Wert

    projects/PROJECT_ID/attestors/built-by-cloud-build
    

    Ersetzen Sie PROJECT_ID durch das Projekt, in dem Sie Cloud Build ausführen.

  6. Speichern Sie die Richtliniendatei.

  7. Importieren Sie die Richtliniendatei.

    gcloud container binauthz policy import /tmp/policy.yaml
    

    Das folgende Beispiel zeigt eine Richtliniendatei, die den Verweis auf built-by-cloud-build-attestor enthält:

    defaultAdmissionRule:
      evaluationMode: REQUIRE_ATTESTATION
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      requireAttestationsBy:
        - projects/PROJECT_ID/attestors/built-by-cloud-build
    name: projects/PROJECT_ID/policy
    

    Ersetzen Sie PROJECT_ID durch die Projekt-ID, in der Sie Cloud Build ausführen.

Sie können Richtlinienfehler in den Nachrichten der Binärautorisierung für GKE oder Cloud Run aufrufen.

Probelaufmodus verwenden

Im Probelaufmodus prüft die Binärautorisierung die Richtliniencompliance, ohne die Bereitstellung tatsächlich zu blockieren. Stattdessen werden Statusmeldungen zur Einhaltung von Richtlinien in Cloud Logging protokolliert. Anhand dieser Logs können Sie feststellen, ob Ihre Blockierrichtlinie korrekt funktioniert, und falsch positive Ergebnisse identifizieren.

So aktivieren Sie den Probelauf:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Binärautorisierung auf.

    Zur Binärautorisierung.

  2. Klicken Sie auf Richtlinie bearbeiten.

  3. Wählen Sie in der Standardregel oder eine bestimmte Regel den Probelaufmodus aus.

  4. Klicken Sie auf Save Policy (Richtlinie speichern).

gcloud

  1. Exportieren Sie die Richtlinie für die Binärautorisierung in eine YAML-Datei:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. Legen Sie in einem Texteditor enforcementMode auf DRYRUN_AUDIT_LOG_ONLY fest und speichern Sie die Datei.

  3. Importieren Sie zum Aktualisieren der Richtlinie die Datei mit dem folgenden Befehl:

    gcloud container binauthz policy import /tmp/policy.yaml
    

Sie können Richtlinienfehler in den Nachrichten der Binärautorisierung für GKE oder Cloud Run aufrufen.

Beschränkungen

  • Cloud Build und die Binärautorisierung müssen sich im selben Projekt befinden. Wenn Sie Ihre Bereitstellungsplattform in einem anderen Projekt ausführen, konfigurieren Sie IAM-Rollen für eine Einrichtung mit mehreren Projekten, und verweisen Sie auf das Cloud Build-Projekt, wenn Sie den built-by-cloud-build Attestierer in der Binärautorisierung hinzufügen.

  • Cloud Build generiert keine Attestierungen, wenn Sie Images mit einem expliziten docker push-Build-Schritt in Artifact Registry hochladen. Achten Sie darauf, dass Sie Images mit dem Feld images in Ihrem docker build-Build-Schritt in Artifact Registry hochladen. Weitere Informationen zu images finden Sie unter Verschiedene Möglichkeiten zum Speichern von Images in Artifact Registry.

  • Sie müssen separate Build-Konfigurationsdateien für Ihre Build-Pipeline und Bereitstellungs-Pipeline verwenden. Das liegt daran, dass Cloud Build Attestierungen erst generiert, nachdem die Build-Pipeline erfolgreich abgeschlossen wurde. Die Binärautorisierung prüft dann die Attestierung, bevor das Image bereitgestellt wird.

Attestierungen in privaten Pools aktivieren

Standardmäßig generiert Cloud Build keine Binärautorisierung Attestierungen für Builds in privaten Pools. Fügen Sie der Build-Konfigurationsdatei die requestedVerifyOption: VERIFIED Option hinzu, um Attestierungen zu generieren:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
  requestedVerifyOption: VERIFIED

Nach dem Hinzufügen von requestedVerifyOption aktiviert Cloud Build die Attestierungserstellung und Herkunftsmetadaten für Ihr Image.

Attestierermetadaten ansehen

Ein Attestierer wird erstellt, wenn Sie zum ersten Mal einen Build in einem Projekt ausführen. Die Attestierer-ID hat das Format projects/PROJECT_ID/attestors/built-by-cloud-build. PROJECT_ID ist Ihre Projekt-ID.

Sie können die Metadaten des Build-Attestierers mit dem folgenden Befehl prüfen:

curl -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build

Ersetzen Sie PROJECT_ID durch das Projekt, in der Sie Cloud Build ausführen.

Die Ausgabe enthält Informationen zum Attestierer und zu den entsprechenden öffentlichen Schlüsseln. Beispiel:

name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
  "userOwnedDrydockNote": {
    "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
    "publicKeys": [
      {
        "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
        "pkixPublicKey": {
          "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
          "signatureAlgorithm": "ECDSA_P256_SHA256"
        }
      },
...
      }
    ],
    "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
  },
  "updateTime": "2021-09-24T15:26:44.808914Z",
  "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"

Nächste Schritte