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.

Überblick

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.

Hinweise

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 Pipelineskript für sichere Images verwendet diese Organisation, um Google 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. Erteilen Sie dem Skript die Berechtigung, ein neues Projekt zum Speichern von Basis-Images zu erstellen.

    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 Google Cloud-Projekt zu verknüpfen.

  9. Wechseln Sie zum Browserfenster der Google Cloud Console.

  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 Google Cloud-Projekt mit dem Namen YOUR_PROJECT_NAME-builder, das Ressourcen zum Erstellen eines Images und zum Hochladen eines Images in 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, nur Teammitgliedern Zugriff auf dieses Projekt zu gewähren, die Änderungen an der Pipeline vornehmen sollen. Eine Anleitung zum Gewähren des Zugriffs auf Projekte finden Sie unter Zugriff gewähren, ändern und widerrufen.

  • Ein Google Cloud-Projekt mit dem Namen YOUR_PROJECT_NAME-stage, mit dem Images für eine manuelle Überprüfung getestet werden, bevor die Images für das verifizierte Projekt freigegeben 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 Sicherheitsprüfungen bestanden wurden, erstellt der Gutscheinserver mit der Binärautorisierung eine Attestierung für das Image. 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 Google 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