Sichere Image-Pipeline erstellen

Auf dieser Seite wird erläutert, wie Sie die Secure Image-Pipeline einrichten, um die Erstellung von Basis-Container-Images zu automatisieren.

Übersicht

Die sichere Image-Pipeline ist ein Open-Source-Tool, das ein Framework von Google Cloud-Projekten und -Ressourcen sowie ein GitHub-Repository zum Einrichten und Verwalten benutzerdefinierter Dienste einrichtet. und sichere Basis-Images ab. 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 werden:

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 bestätigtes Projekt Jedes Mal, wenn ein Image im Image-Repository aktualisiert wird, Cloud Build-Trigger Im Build-Projekt wird das aktualisierte Image erstellt, signiert und in dasArtefakt-Registry Repository im Staging-Projekt. Wenn das Image im Staging-Projekt manuell verifiziert wird, überträgt die Pipeline das Image an das verifizierte Projekt.

Kosten

In der sicheren Image-Pipeline werden die folgenden Google Cloud-Produkte verwendet:

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 für die Identitäts- und Zugriffsverwaltung für die Google Cloud-Organisation. Eine Anleitung zum Zuweisen von IAM-Rollen finden Sie unter Zugriff gewähren, ändern und widerrufen.

Sichere Image-Pipeline einrichten

Das GitHub-Repository für sichere Image-Pipelines 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 Secure 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 (Elternorganisation): Geben Sie die ID Ihrer Google Cloud-Organisation ein. Das Skript für sichere Image-Pipelines verwendet diese Organisation, um Cloud-Projekte und Basis-Images zu generieren.
    • BASEIMGFCT_PROJECT: Geben Sie einen String ein, mit dem das Skript die Projekt-IDs der von ihm erstellten Projekte erstellt. Der String muss aus 6 bis 30 Kleinbuchstaben, Ziffern oder Bindestrichen bestehen. Dieser muss mit einem Buchstaben beginnen und darf keinen Bindestrich enthalten. 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 erstellt, um den Terraform-Automatisierungscode zu speichern. Der Name muss die Anforderungen für Bucket-Namen erfüllen.
    • 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 Setupskript 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. Ihren GitHub-Nutzernamen

  8. Das Skript fordert die Berechtigung an, ein neues Projekt zum Speichern von Basis-Images zu erstellen.

    1. Geben Sie "y" ein.

    Die Ausführung dieses Vorgangs dauert einige Minuten. Nach Abschluss des Vorgangs wird die Meldung GitHub-Repositories verknüpfen und beliebige Taste drücken, um fortzufahren angezeigt.

  9. Drücken Sie eine beliebige Taste, um fortzufahren.

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

  10. Wechseln Sie zum Browserfenster der Cloud Console.

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

  12. Klicken Sie auf Weiteres Projekt hinzufügen.

  13. Wählen Sie im Drop-down Projekt auswählen das Projekt im Format YOUR_PROJECT_NAME-builder aus.

  14. Klicken Sie auf das Kästchen für die Zustimmung und dann auf Weiter.

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

  16. Klicken Sie auf der Seite Push-Trigger erstellen auf Überspringen. Das Skript erstellt den Push-Trigger automatisch für Sie.

  17. Klicken Sie auf Fertig.

  18. Kehren Sie zum Terminal zurück.

  19. Drücken Sie eine beliebige Taste, um fortzufahren.

Die Ausführung des Skripts dauert einige Minuten.

Mit der sicheren Image-Pipeline erstellte Ressourcen

Wenn die Ausführung des Setupskripts abgeschlossen ist, 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 füllt es dieses Repository mit einfachen Dockerfiles aus, eines für jede der beliebten Linux-Distributionen.
  • Bereitstellungsschlüssel: separate Deployment-Schlüssel mit Schreibzugriff auf das Repository.

Google Cloud-Projekte:

  • Ein Cloud-Projekt mit dem Namen YOUR_PROJECT_NAME-builder, das Ressourcen enthält, um jedes Mal, wenn der Quellcode im GitHub-Repository aktualisiert wird, ein Image zu erstellen und per Push in das Staging-Projekt zu übertragen.

    Dieses Projekt enthält die Cloud Build-Trigger, die Builds aufrufen, wenn eine Pull-Anfrage oder -Zusammenführung im Hauptzweig in baseimgfct-[some number]-containers ausgeführt wird. Mit einer Pull-Anfrage werden die Images erstellt und in das Staging-Projekt verschoben. Bei der 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 Cloud-Projekt mit dem Namen YOUR_PROJECT_NAME-stage, das zum Staging von Images verwendet wird, um die Images manuell prüfen zu können, bevor die Images für das verifizierte 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, wodurch bei jeder bekannten Fehlerkorrektur für eine bekannte Sicherheitslücke eine Neuerstellung des Images ausgelöst wird.
    • Pub/Sub-Themen, die zur Ausführung von Cloud Functions verwendet werden
    • Eine Instanz des Voucher-Servers, der als Cloud Run-Deployment ausgeführt wird. Der Gutscheinserver überprüft das Image mit einer Liste von Anforderungen an die Sicherheitsrichtlinien. Sie können entweder die Standardrichtlinienanforderungen der Pipeline verwenden oder eine benutzerdefinierte Sicherheitsrichtlinie angeben. Wenn die Sicherheitsprüfungen erfolgreich waren, fügt der Gutscheinserver dem Image mithilfe der Binärautorisierung eine Attestierung hinzu. Dieses attestierte Image, auch als signiertes Image bezeichnet, wird dann in das verifizierte Projekt übertragen.

    IAM-Berechtigungen für YOUR_PROJECT_NAME-stage: Wir empfehlen, nur solchen Entwicklern Zugriff zu gewähren, die die bereitgestellten Images aus Artifact Registry lesen können. Eine Anleitung, wie Sie Nutzern Zugriff auf Projekte gewähren, finden Sie unter Zugriff gewähren, ändern und widerrufen.

  • 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