In dieser Anleitung erfahren Sie, wie Sie mit Secret Manager und Cloud Build über einen Build auf private GitHub-Repositories zugreifen. Secret Manager ist ein Google Cloud-Dienst, der API-Schlüssel, Passwörter und andere sensible Daten sicher speichert.
Ziele
- Sie richten einen GitHub-SSH-Schlüssel ein.
- Sie fügen den öffentlichen SSH-Schlüssel zu den Bereitstellungsschlüsseln eines privaten Repository hinzu.
- Sie speichern den privaten SSH-Schlüssel in Secret Manager.
- Sie reichen einen Build ein, der auf den Schlüssel aus Secret Manager und damit auf das private Repository zugreift.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Secret Manager
- Cloud Build
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Enable the Cloud Build and Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Enable the Cloud Build and Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Optional: Arbeiten Sie die Kurzanleitung zu Secret Manager durch, um sich mit diesem Produkt vertraut zu machen.
SSH-Schlüssel erstellen
Öffnen Sie ein Terminalfenster.
Erstellen Sie ein neues Verzeichnis mit dem Namen
workingdir
und rufen Sie dieses Verzeichnis auf:mkdir workingdir cd workingdir
Erstellen Sie einen neuen GitHub-SSH-Schlüssel, wobei github-email Ihre GitHub-E-Mail-Adresse ist:
ssh-keygen -t rsa -b 4096 -N '' -f id_github -C github-email
Dieser Befehl erstellt einen neuen SSH-Schlüssel
workingdir/id_github
ohne Passphrase für Ihren SSH-Schlüssel. Cloud Build unterstützt keine mit Passphrases geschützte SSH-Schlüssel.
Privaten SSH-Schlüssel in Secret Manager speichern
Wenn Sie einen SSH-Schlüssel erstellen, wird in Ihrer Umgebung die id_github
-Datei erzeugt. Da sich jeder mit dieser Datei bei Ihrem Konto authentifizieren kann, müssen Sie die Datei in Secret Manager speichern, bevor Sie sie in einem Build verwenden können.
So speichern Sie den SSH-Schlüssel in Secret Manager:
Rufen Sie in der Google Cloud Console die Seite "Secret Manager" auf:
Klicken Sie auf der Seite Secret Manager auf Secret erstellen.
Geben Sie auf der Seite Secret erstellen unter Name einen Namen für das Secret ein.
Klicken Sie im Feld Secret-Wert auf Upload und laden Sie die Datei
workingdir/id_github
hoch.Lassen Sie den Abschnitt Regionen unverändert.
Klicken Sie auf Secret erstellen.
Dadurch wird Ihre id_github
-Datei in Secret Manager hochgeladen.
Öffentlichen SSH-Schlüssel zu Bereitstellungsschlüsseln eines privaten Repository hinzufügen
Melden Sie sich bei GitHub an.
Klicken Sie rechts oben auf Ihr Profilbild und dann auf Mein Profil.
Klicken Sie auf Ihrer Profilseite auf Repositories und dann auf den Namen Ihres Repository.
Klicken Sie im Repository auf Einstellungen.
Klicken Sie in der Seitenleiste auf Schlüssel bereitstellen und dann auf Bereitstellungsschlüssel hinzufügen.
Geben Sie einen Titel an und fügen Sie Ihren öffentlichen SSH-Schlüssel aus
workingdir/id_github.pub
ein.Wählen Sie Schreibzugriff zulassen aus, wenn dieser Schlüssel Schreibzugriff auf das Repository haben soll. Mit einem Bereitstellungsschlüssel mit Schreibzugriff kann eine Bereitstellung an das Repository übertragen werden.
Klicken Sie auf Schlüssel hinzufügen.
Löschen Sie den SSH-Schlüssel von Ihrem Laufwerk:
rm id_github*
Berechtigungen erteilen
Sie müssen dem Dienstkonto, das Sie für den Build verwenden, die Berechtigung zum Zugriff auf Secret Manager erteilen.
Öffnen Sie die Seite mit den Cloud Build-Einstellungen:
Wählen Sie aus der Drop-down-Liste das Dienstkonto aus, dessen Rollen Sie ändern können.
Setzen Sie den Status der Rolle
Secret Manager Secret Accessor
auf Aktivieren.
Öffentlichen SSH-Schlüssel zu bekannten Hosts hinzufügen
Die meisten Rechner haben eine Datei namens known_hosts
, die bekannte Schlüssel für Remote-Hosts enthält. Die Schlüssel werden häufig von den Remote-Hosts erfasst, wenn zum ersten Mal eine Verbindung zu ihnen hergestellt wird, sie können aber auch manuell hinzugefügt werden. Die Schlüssel in dieser Datei werden verwendet, um die Identität des Remote-Hosts zu verifizieren und vor Identitätsdiebstahl zu schützen.
Damit Cloud Build eine Verbindung zu GitHub herstellen kann, müssen Sie der Datei known_hosts
in der Build-Umgebung von Cloud Build den öffentlichen SSH-Schlüssel hinzufügen. Dazu fügen Sie den Schlüssel einer temporären known_hosts.github
-Datei hinzu und kopieren dann den Inhalt von known_hosts.github
in die known_hosts
-Datei in der Build-Umgebung von Cloud Build.
Erstellen Sie im Verzeichnis workingdir
eine Datei mit dem Namen known_hosts.github
und fügen Sie der Datei den öffentlichen SSH-Schlüssel hinzu:
ssh-keyscan -t rsa github.com > known_hosts.github
Im nächsten Abschnitt fügen Sie der Cloud Build-Konfigurationsdatei Anweisungen hinzu, um den Inhalt von known_hosts.github
in die Datei known_hosts
in der Build-Umgebung von Cloud Build zu kopieren.
Build konfigurieren
So konfigurieren Sie den Build:
Erstellen Sie eine Build-Konfigurationsdatei mit dem Namen
cloudbuild.yaml
in zwei Schritten: Der erstegcloud
-Schritt greift in Secret Manager auf den SSH-Schlüssel zu und speichert ihn alsid_rsa
in einem Volume namensssh
zusammen mit einer Kopie vonknown_hosts.github
. Das Volume dient als nichtflüchtiger Speicher für in den Build-Schritten verwendete Dateien. Im drittengit
-Schritt wird der Schlüssel inid_rsa
verwendet, um eine Verbindung zum Repository untergit@github.com:git-username/git-repository
herzustellen.# Access the id_github file from Secret Manager, and setup SSH steps: - name: 'gcr.io/cloud-builders/git' secretEnv: ['SSH_KEY'] entrypoint: 'bash' args: - -c - | echo "$$SSH_KEY" >> /root/.ssh/id_rsa chmod 400 /root/.ssh/id_rsa cp known_hosts.github /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh # Clone the repository - name: 'gcr.io/cloud-builders/git' args: - clone - --recurse-submodules - git@github.com:GIT_USERNAME/GIT_REPOSITORY volumes: - name: 'ssh' path: /root/.ssh availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/SECRET_NAME/versions/latest env: 'SSH_KEY'
Ersetzen Sie die Platzhalterwerte in den obigen Befehlen durch Folgendes:
GIT_USERNAME
: Der GitHub-Nutzername des Repository-Inhabers.GIT_REPOSITORY
: Der Name des GitHub-Repositorys, auf das Sie zugreifen möchten.PROJECT_ID
: die ID des Google Cloud-Projekts wo Sie Ihre Secrets gespeichert haben.SECRET_NAME
: der Name des von Ihnen erstellten Secrets in Secret Manager an.
Informationen zu mehrzeiligen YAML-Strings, die im obigen Snippet verwendet werden, finden Sie unter YAML-Multilinie.
Build einreichen
Führen Sie den folgenden Befehl aus, um den Build zu senden:
gcloud builds submit --config=cloudbuild.yaml .
Die entsprechende Ausgabe sieht etwa so aus:
Creating temporary tarball archive of 3 file(s) totalling 4.1 KiB before compression.
Uploading tarball of [.] to [gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz]
Created [https://cloudbuild.googleapis.com/v1/projects/[PROJECT-ID]/builds/871b68bc---].
Logs are available at [https://console.cloud.google.com/cloud-build/builds/871b68bc---?project=[PROJECT-ID]].
----------------------------- REMOTE BUILD OUTPUT ------------------------------
starting build "871b68bc-cefc-4411-856c-2a2b7c7d2487"
FETCHSOURCE
Fetching storage object: gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178
Copying gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz#1504288640827178...
/ [1 files][ 3.9 KiB/ 3.9 KiB]
Operation completed over 1 objects/3.9 KiB.
BUILD
Step #0: Already have image (with digest): gcr.io/cloud-builders/gcloud
Starting Step #0
Finished Step #0
Step #1: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #1
Step #1: # github.com SSH-2.0-libssh_0.7.0
Finished Step #1
Step #2: Already have image (with digest): gcr.io/cloud-builders/git
Starting Step #2
Step #2: Cloning into '[REPOSITORY-NAME]'...
Step #2: Warning: Permanently added the RSA host key for IP address 'XXX.XXX.XXX.XXX' to the list of known hosts.
Finished Step #2
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------
ID CREATE_TIME DURATION SOURCE IMAGES STATUS
871b68bc-cefc-4411-856c-2a2b7c7d2487 XXXX-XX-XXT17:57:21+00:00 13S gs://[PROJECT-ID]_cloudbuild/source/1504288639.02---.tgz - SUCCESS
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Bereitstellungsschlüssel aus dem Repository entfernen
Gehen Sie auf GitHub zur Repository-Hauptseite.
Klicken Sie unter Ihrem Repository-Namen auf Einstellungen.
Klicken Sie in der linken Seitenleiste auf Schlüssel bereitstellen.
Suchen Sie auf der Seite Schlüssel bereitstellen nach den Bereitstellungsschlüsseln, die mit Ihrem Repository verknüpft sind, und klicken Sie auf Löschen.
Nächste Schritte
- GitHub-Trigger erstellen
- Verschlüsselte Ressourcen in Cloud Build verwenden
- Weitere Informationen zu Secret Manager