Einführung
Im vorherigen Lab hat sich unser Roboterassistent automatisch in ein Lager eingeloggt. Aber woher hatte er das Passwort?
In der echten Automatisierung benötigen Workflows oft vertrauliche Daten wie API-Schlüssel, Passwörter oder Tokens. Sie dürfen diese Werte niemals fest in Repository-Dateien eintragen.
GitHub stellt Secrets als geschützten Speicher für vertrauliche Werte bereit, die von Workflows verwendet werden. Das ist eine zentrale Sicherheitsmaßnahme in CI/CD, da Pipelines häufig Zugriff mit erweiterten Berechtigungen benötigen.
Dies ist eine der wichtigsten Grenzen bei der Sicherheit von Automatisierungen. Pipelines benötigen Zugangsdaten. Diese sollten jedoch zur Laufzeit aus einem geschützten Speicher bereitgestellt werden, anstatt sie in der Versionsverwaltung zu speichern.
In diesem Lab werden Sie:
- ein geheimes Passwort im Tresor erstellen,
- dem Roboter beibringen, es abzurufen,
- nachweisen, dass GitHub das Passwort zensiert, selbst wenn der Roboter versucht, es auszugeben.
Voraussetzungen
Wir verwenden weiterhin das Repository github-actions-basics.
Ein Secret erstellen
Stellen Sie sich vor, dass unsere Anwendung eine Verbindung zu einer Datenbank herstellen muss. Das Datenbankpasswort muss sicher gespeichert werden.
Wir erstellen ein Secret mit dem Namen DB_PASSWORD.
- Öffnen Sie Ihr Repository
github-actions-basicsauf GitHub. - Klicken Sie auf die Registerkarte Settings.
- Suchen Sie in der linken Seitenleiste den Menüpunkt Secrets and variables und klicken Sie darauf, um ihn aufzuklappen.
- Wählen Sie Actions aus.
- Klicken Sie auf die grüne Schaltfläche New repository secret.

Nun wird ein einfaches Formular angezeigt:
- Name: Geben Sie
DB_PASSWORDein. (Für Secret-Namen werden üblicherweise ausschließlich Großbuchstaben verwendet.) - Secret: Geben Sie
SuperSafePassword123!ein.
Klicken Sie auf Add secret.
Jetzt sollte DB_PASSWORD in der Liste erscheinen. Beachten Sie, dass der Wert nicht mehr sichtbar ist. Sobald ein Secret gespeichert wurde, bleibt es dauerhaft verborgen. Sie können es aktualisieren oder löschen, aber weder Sie noch jemand anderes kann den Wert jemals wieder anzeigen.
Das Secret verwenden
Nachdem das Passwort sicher gespeichert ist, erstellen wir einen Workflow, der es verwendet.
Das wichtige Muster ist die Indirektion: Der Workflow verweist anhand des Namens auf ein Secret, und GitHub löst den Wert während der Ausführung sicher auf.
In Ihrer Workflow-Datei können Sie mit der Syntax ${{ secrets.YOUR_SECRET_NAME }} auf jedes Secret zugreifen.
Wechseln Sie in Ihr Projektverzeichnis.
cd ~/project
git clone https://github.com/your-username/github-actions-basics.git
cd github-actions-basics
Hinweis: Ersetzen Sie your-username durch Ihren tatsächlichen GitHub-Benutzernamen.
Erstellen Sie im Ordner .github/workflows eine neue Workflow-Datei mit dem Namen security-test.yml.
touch .github/workflows/security-test.yml
Öffnen Sie die Datei mit nano.
nano .github/workflows/security-test.yml
Fügen Sie den folgenden Inhalt ein:
name: Security Test
on: [push]
jobs:
test-secret:
runs-on: ubuntu-latest
steps:
- name: Try to print secret
env:
MY_PASSWORD: ${{ secrets.DB_PASSWORD }}
run: echo "The password is $MY_PASSWORD"
Hier geschieht etwas Interessantes: Wir übertragen das Secret aus dem GitHub-Tresor in eine Umgebungsvariable namens MY_PASSWORD. Anschließend versuchen wir, es mit echo auszugeben.
Moment! Ist es nicht eine sehr schlechte Idee, ein Passwort im Protokoll auszugeben? Doch, das ist es! Wir tun dies jedoch, um eine wichtige Sicherheitsfunktion von GitHub Actions zu demonstrieren.
Speichern Sie die Datei und beenden Sie nano.
Die Maskierung überprüfen
Führen Sie diesen Workflow aus und beobachten Sie, was passiert, wenn wir versuchen, ein Secret offenzulegen.
Committen und übertragen Sie Ihre Änderungen.
git add .
git commit -m "Test secret masking"
git push
Öffnen Sie auf GitHub den Bereich Actions Ihres Repositorys.
- Klicken Sie auf den Lauf des Workflows „Security Test“.
- Klicken Sie auf den Job
test-secret. - Klappen Sie den Schritt „Try to print secret“ auf.
Sehen Sie sich die Ausgabe an. Sie sollte ungefähr so aussehen:
The password is ***

GitHub Actions erkennt automatisch, dass der Wert von $MY_PASSWORD aus einem Secret stammt. Bevor etwas in das Protokoll geschrieben wird, sucht GitHub nach diesem vertraulichen Wert und ersetzt ihn durch ***.
Die Maskierung begrenzt den Schaden einer versehentlichen Offenlegung in Protokollen. Trotzdem ist es weiterhin besser, Secrets überhaupt nicht auszugeben. Sicherheitsfunktionen sind ein Sicherheitsnetz und keine Rechtfertigung für einen nachlässigen Umgang mit vertraulichen Daten.
Diese Funktion zur „Maskierung“ schützt Sie. Selbst wenn Sie versehentlich versuchen, ein Secret auszugeben, oder ein verwendetes Tool zu viele Informationen protokolliert, erkennt GitHub das Secret und entfernt die vertraulichen Daten aus den Protokollen.
Hinweis zu GITHUB_TOKEN: Erinnern Sie sich an ${{ secrets.GITHUB_TOKEN }}, das wir im vorherigen Lab verwendet haben? Es funktioniert genau auf dieselbe Weise. GitHub erstellt dieses Secret automatisch für jeden Lauf, und auch sein Wert wird in den Protokollen maskiert.
Zusammenfassung
In diesem Lab haben Sie die Grundlagen der Sicherheit in Automatisierungen kennengelernt.
- Tresor: Sie haben GitHub Secrets verwendet, um vertrauliche Daten wie Passwörter zu speichern.
- Zugriff: Sie haben
${{ secrets.NAME }}verwendet, um Ihrem Roboter den Zugriff auf diese Daten zu ermöglichen. - Maskierung: Sie haben überprüft, dass GitHub Secrets automatisch aus Protokollen entfernt (
***), um versehentliche Offenlegungen zu verhindern.
Sie verfügen nun über eine sichere, automatisierte Pipeline. Im letzten Lab behandeln wir das wichtigste Ziel von DevOps: Continuous Deployment. Sie lernen, wie Ihr Roboter Ihren Code auf einem Live-Server bereitstellt.



