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:
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:
- Cloud Build
- Artifact Registry
- Artefaktanalyse
- Binärautorisierung
- Pub/Sub
- Cloud Run
- Cloud Run Functions
Mithilfe des Preisrechners können Sie anhand Ihrer voraussichtlichen Nutzung eine Kostenschätzung vornehmen.
Hinweis
Sie benötigen eine Google Cloud-Organisation, um die sichere Image-Pipeline verwenden zu können. Google Workspace- und Cloud Identity-Kunden können eine Google Cloud-Organisation erstellen:
- Google Workspace: Registrieren Sie sich für Google Workspace.
- Cloud Identity: Registrieren Sie sich für Cloud Identity.
Weitere Informationen zur Google Cloud-Organisation finden Sie unter Kurzanleitung: Organisationen verwenden.
Installieren Sie Terraform 0.14.10.
Erstellen Sie ein Konto auf GitHub, falls Sie noch keines haben.
- Wenn Sie auf GitHub die 2-Faktor-Authentifizierung eingerichtet haben, erstellen Sie ein persönliches Zugriffstoken, das Sie anstelle eines GitHub-Passworts in der Befehlszeile verwenden.
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:
Klonen Sie das GitHub-Repository der sicheren Image-Pipeline auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/secure-image-pipeline
Rufen Sie das Verzeichnis
secure-image-pipeline
auf.cd secure-image-pipeline/
Kopieren Sie
env.sh.tmpl
nachenv.sh
:cp env.sh.tmpl env.sh
Öffnen Sie
env.sh
im gewünschten Editor.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 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 IDsfoo-builder
,foo-stage
undfoo-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.
Führen Sie das Setup-Skript aus:
./setup.sh
Geben Sie die folgenden GitHub-Kontoinformationen ein, wenn Sie dazu aufgefordert werden:
Der Name Ihrer GitHub-Organisation.
Ihre GitHub-E-Mail-Adresse
Ihr GitHub-Nutzername
Gewähren Sie dem Script die Berechtigung, ein neues Projekt zum Speichern von Basis-Images zu erstellen.
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.
Weiter mit beliebiger Taste.
Das Script öffnet ein neues Google Cloud Console-Browserfenster, um Ihr GitHub-Repository mit Ihrem Google Cloud-Projekt zu verknüpfen.
Wechseln Sie zum Browserfenster der Google Cloud Console.
Wählen Sie im Pop-up-Fenster GitHub-App-Installationen verwalten Ihr GitHub-Konto aus.
Klicken Sie auf Weiteres Projekt hinzufügen.
Wählen Sie im Drop-down-Menü Projekt auswählen das Projekt im Format YOUR_PROJECT_NAME-Builder aus.
Wählen Sie das Kästchen für die Zustimmung aus und klicken Sie auf Weiter.
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.
Klicken Sie auf der Seite Push-Trigger erstellen auf Überspringen. Das Skript erstellt den Push-Trigger automatisch.
Klicken Sie auf Fertig.
Wechseln Sie zum Terminal.
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 Skriptsetup
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 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, den Zugriff auf dieses Projekt nur Teammitgliedern zu gewähren, die voraussichtlich Änderungen an der Pipeline vornehmen. 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-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 Run-Funktionen 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 Run-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 erfolgreich waren, erstellt der Voucher-Server mithilfe 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
- Informationen zur Verwendung der Basis-Image-Pipeline
- Benutzerdefinierte Sicherheitsrichtlinie festlegen