Attestierer mit der Google Cloud Console erstellen

Auf dieser Seite wird erläutert, wie Sie mit der Google Cloud Console einen benutzerdefinierten Attestierer in der Binärautorisierung erstellen. Alternativ können Sie diese Schritte auch mit der Google Cloud CLI oder der REST API ausführen. Diese Aufgabe ist Teil der Einrichtung der Binärautorisierung.

Cloud Build-Nutzer: Sie können stattdessen den Attestierer built-by-cloud-build verwenden, um nur von Cloud Build erstellte Images bereitzustellen.

Hinweise

Führen Sie vor dem Erstellen von Attestierern die folgenden Schritte aus:

  1. Binärautorisierung aktivieren.

  2. Binärautorisierung für die Plattform einrichten.

Übersicht

Ein Attestierer ist eine Google Cloud-Ressource, mit der die Binärautorisierung eine Attestierung prüft. Weitere Informationen zur Binärautorisierung finden Sie unter Überblick über die Binärautorisierung.

So erstellen Sie einen Attestierer:

  • Richten Sie ein Schlüsselpaar ein, mit dem ein Image zuerst signiert und eine Attestierung erstellt und später das Image beim Bereitstellen überprüft werden kann. PKIX-Schlüsselpaare sind Schlüsselpaare, die vom Cloud Key Management Service (Cloud KMS) im PKIX-kompatiblen Format generiert werden.
  • Erstellen Sie den Attestierer in der Binärautorisierung und ordnen Sie den von Ihnen erstellten öffentlichen Schlüssel zu.

In einer Einzelprojekteinrichtung erstellen Sie den Attestierer im selben Projekt, in dem Sie die Richtlinie für die Binärautorisierung konfigurieren. Bei einer Einrichtung mit mehreren Projekten haben Sie höchstwahrscheinlich ein Bereitstellerprojekt, in dem Ihre Richtlinie konfiguriert ist, sowie ein separates Attestiererprojekt, in dem Ihre Attestierer gespeichert sind.

Kryptografische Schlüssel einrichten

Mit der Binärautorisierung können Sie mithilfe von PKIX ein Image sicher signieren und später verifizieren. Dies gewährleistet, dass nur bestätigte Nutzer ein Container-Image autorisieren können.

In diesem Leitfaden wird der empfohlene Elliptic Curve Digital Signing Algorithm (ECDSA) verwendet, um ein PKIX-Schlüsselpaar zu erstellen. Sie können zum Signieren auch RSA- oder PGP-Schlüssel verwenden. Weitere Informationen zu Signieralgorithmen finden Sie unter Schlüsselzwecke und Algorithmen.

PKIX-Schlüsselpaar erstellen

Mit der Binärautorisierung können Sie mithilfe von asymmetrischen PKIX-Schlüsselpaaren ein Image signieren und prüfen.

Ein PKIX-Schlüsselpaar besteht aus einem privaten Schlüssel, mit dem der Signer Attestierungen digital signiert, und einem öffentlichen Schlüssel, den Sie dem Attestierer hinzufügen. Beim Deployment verwendet die Binärautorisierung diesen öffentlichen Schlüssel, um die vom privaten Schlüssel signierte Attestierung zu prüfen.

Die in Cloud KMS erstellten und gespeicherten asymmetrischen Schlüsselpaare sind mit dem PKIX-Format konform. Informationen zum Erstellen eines Cloud KMS-Schlüssels für die Binärautorisierung finden Sie unter Asymmetrische Schlüssel erstellen. Achten Sie darauf, dass beim Erstellen des Schlüssels als Schlüsselzweck Asymmetrisches Signieren ausgewählt wird.

PKIX (Cloud KMS)

So erstellen Sie das Schlüsselpaar in Cloud KMS:

  1. Richten Sie Umgebungsvariablen ein, die zum Erstellen des Schlüsselpaars erforderlich sind.

    KMS_KEY_PROJECT_ID=${PROJECT_ID}
    KMS_KEYRING_NAME=my-binauthz-keyring
    KMS_KEY_NAME=my-binauthz-kms-key-name
    KMS_KEY_LOCATION=global
    KMS_KEY_PURPOSE=asymmetric-signing
    KMS_KEY_ALGORITHM=ec-sign-p256-sha256
    KMS_PROTECTION_LEVEL=software
    KMS_KEY_VERSION=1
    
  2. Schlüsselbund erstellen.

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. Erstellen Sie den Schlüssel:

    gcloud kms keys create ${KMS_KEY_NAME} \
      --location ${KMS_KEY_LOCATION} \
      --keyring ${KMS_KEYRING_NAME}  \
      --purpose ${KMS_KEY_PURPOSE} \
      --default-algorithm ${KMS_KEY_ALGORITHM} \
      --protection-level ${KMS_PROTECTION_LEVEL}
    

PKIX (lokaler Schlüssel)

So erstellen Sie ein neues lokales asymmetrisches PKIX-Schlüsselpaar und speichern es in einer Datei:

  1. Erstellen Sie den Domainschlüssel:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Da diese Datei einen öffentlichen und einen privaten Schlüssel enthält, müssen Sie den öffentlichen Schlüssel in eine eigene Datei extrahieren, damit Sie ihn dem Attestierer hinzufügen können:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Attestierer erstellen

Im nächsten Schritt erstellen Sie den Attestierer und verknüpfen einen Artefaktanalyse-Hinweis mit einem öffentlichen Schlüssel.

Die Binärautorisierung verwendet Artefaktanalyse, um vertrauenswürdige Metadaten zu speichern, die für den Autorisierungsvorgang verwendet werden. Für jeden von Ihnen erstellten Attestierer muss ein Artefaktanalyse-Hinweis angelegt werden. Jede Attestierung wird als Vorkommen dieses Hinweises gespeichert.

So erstellen Sie den Attestierer:

  1. Rufen Sie die Seite "Binärautorisierung" für das Attestiererprojekt auf.

    Zur Binärautorisierung

  2. Klicken Sie im Tab Attestierer auf Erstellen.

  3. Klicken Sie auf Create New Attestor.

  4. Geben Sie unter Name des Attestierers einen Namen für den Attestierer ein, z. B. build-secure oder prod-qa.

  5. So fügen Sie dem Attestierer den öffentlichen Schlüssel hinzu:

    PKIX (lokaler Schlüssel)

    1. Klicken Sie auf Add a PKIX Key.
    2. Klicken Sie auf Aus Datei importieren.
    3. Wechseln Sie zur zuvor gespeicherten PKIX-Schlüsseldatei und wählen Sie sie aus. Hinweis: Sie können auch einen öffentlichen Schlüssel im PEM-Format einfügen.
    4. Wählen Sie den Signature-Algorithmus aus. Der Beispielschlüssel in diesem Leitfaden wird mit dem Algorithmus Elliptic Curve P256 – SHA Digest generiert.

    PKIX (Cloud KMS)

    1. Klicken Sie auf Add a PKIX Key.
    2. Klicken Sie auf Von Cloud KMS importieren.
    3. Geben Sie im geöffneten Fenster die Ressourcen-ID für die Schlüsselversion ein. Die Ressourcen-ID hat folgendes Format:

      projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
      

      Dabei gilt:

      • KMS_KEY_PROJECT_ID ist die ID des Projekts, in dem die Schlüssel gespeichert sind.
      • KMS_KEY_LOCATION ist der Speicherort des Schlüssels (global ist die Standardeinstellung).
      • KMS_KEYRING_NAME ist der Name des Schlüsselbunds.
      • KMS_KEY_NAME ist der Name des Schlüssels.
      • KMS_KEY_VERSION ist die Schlüsselversion.

      Wenn Sie ein Cloud KMS-Schlüsselpaar mit den Umgebungsvariablen auf dieser Seite erstellt haben, können Sie die Ressourcen-ID mit dem folgenden Befehl aufrufen:

      echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
      
    4. Klicken Sie auf Senden.

  6. Wenn Sie einen vorhandenen Hinweis verwenden möchten, den Sie zuvor erstellt haben, maximieren Sie den Abschnitt Erweiterte Einstellungen.

    1. Deaktivieren Sie das Kästchen Artefaktanalyse-Hinweis automatisch generieren.

    2. Geben Sie den voll qualifizierten Namen in das Feld Artefaktanalyse-Hinweis-ID ein. Der Name hat das Format projects/PROJECT_ID/notes/NOTE_ID.

  7. Klicken Sie auf Erstellen.

Erstellung des Attestierers prüfen

So prüfen Sie, ob der Attestierer erstellt wurde:

  1. Kehren Sie zur Seite der Binärautorisierung in der Google Cloud Console zurück.

  2. Öffnen Sie den Tab Attestierer.

Mehrere Projekte einrichten

Bei einer Einrichtung mit mehreren Projekten und einem eigenen Bereitsteller- und Attestiererprojekt, sind zusätzliche Berechtigungen erforderlich. Diese müssen für die Attestiererressource festgelegt werden, damit das Bereitstellerprojekt die während dem Deployment erstellten Attestierungen verwenden kann.

IAM-Rollenbindung für das Deployment-Projekt hinzufügen

Sie müssen dem Attestierer eine IAM-Rollenbindung für das Dienstkonto des Bereitstellerprojekts hinzufügen. Dieses Konto wird von der Binärautorisierung verwendet, wenn es eine Richtlinie auswertet, um festzustellen, ob das Konto Berechtigungen zum Zugriff auf den Attestierer hat.

Fügen Sie die IAM-Rollenbindung über die Befehlszeile hinzu, da dieser Schritt in der Google Cloud Console nicht unterstützt wird.

So fügen Sie die IAM-Rollenbindung hinzu:

  1. Richten Sie Umgebungsvariablen zum Speichern Ihrer Projektnamen und -nummern ein:

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. Richten Sie Umgebungsvariablen zum Speichern der Dienstkontonamen für die Projekte ein:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
    
  3. Fügen Sie die IAM-Rollenbindung hinzu:

    gcloud --project ATTESTOR_PROJECT_ID \
        beta container binauthz attestors add-iam-policy-binding \
        "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
        --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \
        --role=roles/binaryauthorization.attestorsVerifier
    

IAM-Rollenbindung für den Nutzer hinzufügen, der die Binärautorisierung einrichtet

Sie müssen eine IAM-Rollenbindung für den Nutzer hinzufügen, der der Richtlinie für Binärautorisierungen im Bereitstellerprojekt einen Attestierer hinzufügt. Der Nutzer benötigt die Berechtigung zum Aufrufen des Attestierers, der hinzugefügt werden soll. Bei Bedarf kann diese Berechtigung sicher widerrufen werden, nachdem der Attestierer hinzugefügt wurde.

Fügen Sie die IAM-Rollenbindung über die Befehlszeile hinzu, da dieser Schritt in der Google Cloud Console nicht unterstützt wird.

So fügen Sie die IAM-Rollenbindung hinzu:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors add-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

So entfernen Sie die IAM-Rollenbindung, nachdem der Attestierer hinzugefügt wurde:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors remove-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Nächste Schritte