Sichere Image-Pipeline erstellen

Auf dieser Seite wird erläutert, wie Sie eine sichere Image-Pipeline einrichten können, um das Generieren von Basis-Container-Images zu automatisieren.

Übersicht

Die sichere Image-Pipeline ist ein Open-Source-Tool, das ein Framework von Google Cloud-Projekten, -Ressourcen und einem GitHub-Repository einrichtet, mit dem Sie benutzerdefinierte und sichere Basis-Images erstellen und pflegen können. Sie können die Images aus Google Cloud-Projekten nutzen.

Die folgende Abbildung zeigt das Framework von Ressourcen, die von einer sicheren Image-Pipeline erstellt wurden:

Sichere Image-Pipeline

Nach dem Einrichten der Pipeline werden die folgenden Ressourcen erstellt:

  • Ein GitHub-Repository, das den Quellcode für Container-Images hostet.

  • Drei Google Cloud-Projekte: Build-Projekt, Staging-Projekt und Verifiziertes Projekt. Immer wenn ein Image im Image-Repository aktualisiert wird, wird Cloud Build im Build-Projekt ausgelöst und das aktualisierte Image wird erstellt, signiert und an das Artifact Registry-Repository im Staging-Projekt gesendet. Wenn das Image im Staging-Projekt manuell verifiziert wird, überträgt die Pipeline das Image per Push an das verifizierte Projekt.

Kosten

Die sichere Image-Pipeline verwendet die folgenden Google Cloud-Produkte:

Mithilfe des Preisrechners können Sie anhand Ihrer voraussichtlichen Nutzung eine Kostenschätzung vornehmen.

Hinweis

Erforderliche IAM-Berechtigungen

Der Nutzer, der die sichere Image-Pipeline einrichtet, benötigt die Rollen roles/organization.admin und roles/billing.admin der Identitäts- und Zugriffsverwaltung für die Google Cloud-Organisation. Eine Anleitung zum Zuweisen von IAM-Rollen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.

Sichere Image-Pipeline einrichten

Das GitHub-Repository der sicheren Image-Pipeline enthält das Skript zur Automatisierung der Generierung von Basis-Images.

So richten Sie die sichere Image-Pipeline ein:

  1. Klonen Sie das GitHub-Repository der sicheren Image-Pipeline auf Ihren lokalen Computer:

    git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
    
  2. Rufen Sie das Verzeichnis secure-image-pipeline auf.

    cd secure-image-pipeline/
    
  3. Kopieren Sie env.sh.tmpl nach env.sh:

    cp env.sh.tmpl env.sh
    
  4. Öffnen Sie env.sh im gewünschten Editor.

  5. Bearbeiten Sie die folgenden Werte:

    • PARENT_ORGANIZATION: Geben Sie die ID Ihrer Google Cloud-Organisation ein. Das Skript für die sichere Image-Pipeline verwendet diese Organisation, um Cloud-Projekte und Basis-Images zu generieren.
    • BASEIMGFCT_PROJECT: Geben Sie einen String ein, unter dem das Skript die Projekt-IDs der von ihm erstellten Projekte erstellt. Der String muss 6 bis 30 Kleinbuchstaben, Ziffern oder Bindestriche enthalten. Sie muss mit einem Buchstaben beginnen und darf nicht mit einem Bindestrich enden. Wenn Sie beispielsweise foo angeben, erstellt das Skript drei Projekte mit den IDs foo-builder, foo-stage und foo-verified.
    • BASEIMGFCT_BUCKET: Geben Sie einen Namen für den Cloud Storage-Bucket ein, den das Skript zum Speichern des Terraform-Automatisierungscodes erstellt. Prüfen Sie, ob der Name den Anforderungen für Bucket-Namen entspricht.
    • BASEIMGFCT_REGION: Geben Sie den Namen der Region ein, die verwendet werden soll, oder verwenden Sie den Standardwert.
    • BILLING_ACCOUNT: Geben Sie das Rechnungskonto ein, das der Organisation zugeordnet ist.
    • GITHUB_TOKEN: Geben Sie Ihr persönliches Zugriffstoken für GitHub ein. Das Skript verwendet dieses Token, um ein GitHub-Repository zu erstellen, das den Quellcode für die Basis-Images enthält.
  6. Führen Sie das Setup-Skript aus:

    ./setup.sh
    
  7. Geben Sie die folgenden GitHub-Kontoinformationen ein, wenn Sie dazu aufgefordert werden:

    1. Der Name Ihrer GitHub-Organisation.

    2. Ihre GitHub-E-Mail-Adresse

    3. Ihr GitHub-Nutzername

    4. Gewähren Sie dem Skript die Berechtigung zum Erstellen eines neuen Projekts, in dem Basis-Images gespeichert werden.

    5. Geben Sie "y" ein.

    Dieser Vorgang dauert einige Minuten. Bei Abschluss des Vorgangs wird die Meldung GitHub-Repositories verknüpfen und eine beliebige Taste drücken, um fortzufahren angezeigt.

  8. Weiter mit beliebiger Taste.

    Das Skript öffnet ein neues Browserfenster der Google Cloud Console, um Ihr GitHub-Repository mit Ihrem Cloud-Projekt zu verknüpfen.

  9. Wechseln Sie zum Browserfenster der Konsole.

  10. Wählen Sie im Pop-up-Fenster GitHub-App-Installationen verwalten Ihr GitHub-Konto aus.

  11. Klicken Sie auf Weiteres Projekt hinzufügen.

  12. Wählen Sie im Drop-down-Menü Projekt auswählen das Projekt im Format YOUR_PROJECT_NAME-Builder aus.

  13. Wählen Sie das Kästchen für die Zustimmung aus und klicken Sie auf Weiter.

  14. Wählen Sie in der Liste der Repositories das Repository mit dem Namen baseimgfact-[some number]-containers aus und klicken Sie auf (1) Repositories verbinden.

  15. Klicken Sie auf der Seite Push-Trigger erstellen auf Überspringen. Das Skript erstellt den Push-Trigger automatisch.

  16. Klicken Sie auf Fertig.

  17. Wechseln Sie zum Terminal.

  18. Weiter mit beliebiger Taste.

Die Ausführung des Skripts dauert einige Minuten.

Von der sicheren Image-Pipeline erstellte Ressourcen

Wenn das Setup-Skript die Ausführung abgeschlossen hat, werden die folgenden Ressourcen erstellt:

GitHub:

  • Ein Repository mit dem Namen baseimgfct-[some number]-containers, das den Quellcode zum Erstellen von Container-Images enthält. Das Skript setup speichert dieses Repository mit einfachen Dockerfiles, eines für jede beliebte Linux-Distribution.
  • Deployment-Schlüssel – separate Deployment-Schlüssel für Schreibzugriff auf das Repository.

Google Cloud-Projekte:

  • Ein Cloud-Projekt namens YOUR_PROJECT_NAME-builder, das Ressourcen zum Erstellen und Übertragen eines Images an das Staging-Projekt enthält, wenn der Quellcode im GitHub-Repository aktualisiert wird.

    Dieses Projekt enthält die Cloud Build-Trigger, die Builds auslösen, wenn im Hauptzweig in baseimgfct-[some number]-containers Pull-Anfragen Zusammenführungen aufgerufen werden. Mit einer Pull-Anfrage werden die Images erstellt und in das Staging-Projekt übertragen. Bei einer Zusammenführung werden die Images erstellt und in das verifizierte Projekt verschoben.

    IAM-Berechtigungen für YOUR_PROJECT_NAME-builder: Wir empfehlen, Teammitgliedern, die voraussichtlich Änderungen an der Pipeline vornehmen, Zugriff auf dieses Projekt zu gewähren. Eine Anleitung zum Gewähren des Zugriffs auf Projekte finden Sie unter Zugriff gewähren, ändern und widerrufen.

  • Ein Cloud-Projekt mit dem Namen YOUR_PROJECT_NAME-stage, das zum Staging von Images für eine manuelle Überprüfung verwendet wird, bevor die Images im verifizierten Projekt veröffentlicht werden. Dieses Projekt enthält die folgenden Ressourcen:

    • Ein Artifact Registry-Docker-Repository, das die erstellten Container-Images enthält.
    • Cloud Functions für jedes Image im Projekt, das jedes Mal eine Neuerstellung des Images auslöst, wenn eine neue Fehlerkorrektur für eine bekannte Sicherheitslücke gefunden wird.
    • Pub/Sub-Themen, die zum Ausführen von Cloud Functions-Funktionen verwendet werden
    • Instanz des Voucher Servers, der als Cloud Run-Deployment ausgeführt wird. Der Voucher Server prüft das Image mit einer Liste der Anforderungen der Sicherheitsrichtlinien. Sie können entweder die Standardrichtlinienanforderungen der Pipeline verwenden oder eine benutzerdefinierte Sicherheitsrichtlinie angeben. Nachdem die Sicherheitschecks bestanden wurden, erstellt der Gutscheinserver eine Attestierung für das Image mithilfe der Binärautorisierung. Dieses attestierte Image, auch signiertes Image genannt, wird dann an das verifizierte Projekt übertragen.

    IAM-Berechtigungen für YOUR_PROJECT_NAME-stage: Wir empfehlen, nur Entwicklern Zugriff auf dieses Projekt zu gewähren, die aus Artifact Registry bereitgestellte Images lesen dürfen. Eine Anleitung zum Gewähren des Zugriffs auf Projekte finden Sie unter Zugriff gewähren, ändern und entziehen.

  • Ein Cloud-Projekt mit dem Namen YOUR_PROJECT_NAME-verified. Dieses Projekt enthält die endgültigen signierten Images, die manuell überprüft wurden.

Nächste Schritte