GitHub Actions ist die in GitHub integrierte Plattform für kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD), mit der Entwicklungsteams ihre Arbeitsabläufe automatisieren können, einschließlich der Build-, Test- und Bereitstellungspipeline.
Ein Nachteil von GitHub Actions ist, dass deine Logs öffentlich sind und jeder mit den nötigen Rechten darauf zugreifen kann.
Um zu verhindern, dass sensible Daten in den GitHub Actions-Protokollen offengelegt werden, solltest du verschlüsselte Umgebungsvariablen verwenden, um sensible Daten sicher zu speichern. Diese verschlüsselten Umgebungsvariablen werden als GitHub Actions Secrets bezeichnet.
In diesem Artikel erfährst du, wie du GitHub Actions Secrets verwendest, um zu verhindern, dass sensible Daten in deinen GitHub Actions Logs auftauchen.
Voraussetzungen:
Um diesem Tutorial zu folgen:
- Vergewissere dich, dass du ein GitHub-Konto hast.
- Du hast ein bestehendes GitHub-Repository. Für diesen Lehrgang kannst du das Demo-Repository klonen.
- Befolge diese Anweisungen, um das Demo-Repository zu klonen.
Wie du deine GitHub Action Logs sicher hältst
Wenn du Workflows mit GitHub Actions erstellst, kann jeder Besucher deines Repositorys die Logs einsehen. Allerdings kannst du deine Token, Passwörter und andere sensible Informationen nicht einfach löschen – du brauchst sie für Tests und damit deine App richtig funktioniert.
Die Lösung ist, sie mit dem ::add-mask::
Workflow-Befehl auszublenden, der ein Sternchen (*) an die Stelle der sensiblen Daten setzt, auf die er angewendet wird.
Der folgende Abschnitt zeigt dir, wie du ein Protokoll maskieren kannst.
Wie man Logs maskiert
Öffne zunächst das geklonte Repository in deinem Texteditor.
Erstelle das Verzeichnis .github/workflows/ im Stammverzeichnis deines Repositorys, um deine Workflow-Dateien zu speichern. Erstelle dann eine neue Datei namens hide-secrets.yml im Verzeichnis .github/workflows und füge den folgenden Code hinzu:
name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: echo a secret
run: echo "your secret token is verySecretToken"
Übertrage die Änderungen und schiebe sie in dein GitHub-Repository. Der aktualisierte GitHub Actions-Workflow ist nun aktiv und wird immer dann ausgelöst, wenn du eine neue Änderung veröffentlichst.
Öffne dein Repository auf GitHub und wähle die Registerkarte Aktionen, um die Protokolle einzusehen. Dein Workflow sollte wie folgt aussehen:
Wenn du die Workflow-Protokolle ansiehst, findest du den String verySecretToken
in den Protokollen. Klicke auf deinen Workflow und dann auf den Aufgabennamen (print-secret-token), um das Protokoll anzuzeigen. Es sollte wie folgt aussehen:
Um es auszublenden, benutze den Befehl ::add-mask::
, bearbeite die Datei hide-secrets.yml und füge dem Job print-secret-token
einen neuen Schritt hinzu:
name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: Add Mask
run: echo "::add-mask::verySecretToken"
- name: echo a secret
run: echo "your secret token is verySecretToken"
Du solltest den Schritt Add Mask
an erster Stelle einfügen, da die Maskierung erst nach der Ausführung von ::add-mask::
greift. Wenn du das Geheimnis verySecretToken
vor dem Schritt Add Mask
einfügst, wird es trotzdem unmaskiert erscheinen. Um sicherzustellen, dass der Wert maskiert wird, ist es also wichtig, ::add-mask::
so früh wie möglich zu verwenden.
Sobald du deine Änderungen in dein GitHub-Repository einträgst und veröffentlichst, wird die Zeichenfolge verySecretToken
durch Sternchen (*) ersetzt, wo immer sie in deinen Protokollen auftaucht:
Dies behebt zwar das Maskierungsproblem, führt aber ein neues Problem ein. Deine verySecretToken
steht immer noch in der Workflow-Datei, so dass jeder, der Zugriff auf den Quellcode hat, sie sehen kann.
Ein weiterer Nachteil des Maskierens von Klartext ist, dass das Maskieren nur eines Teils eines Wortes alle Instanzen des Wortes ausblendet. Nehmen wir zum Beispiel den folgenden Satz: „Programmieren ist toll, aber meine produktivsten Tage sind die, an denen ich kein Programm schreibe.“ Wenn du das Wort „Programm“ maskierst, wird es nicht nur am Ende des Satzes ausgeblendet, sondern auch überall sonst, wo es vorkommt, z. B. in „Programmierung“
Wenn du versuchst, reinen Text zu maskieren, erhältst du ein Ergebnis wie dieses:
Eine bessere Methode, um sensible Daten in GitHub Actions Logs zu verstecken, ist die Verwendung von GitHub Actions Secrets, wie im folgenden Abschnitt gezeigt wird.
Wie du GitHub Actions Secrets verwendest
Du kannst GitHub Actions Secrets verwenden, um alle privaten Daten zu speichern, die du in deinem GitHub Actions Workflow verwenden möchtest. Secrets werden als Schlüssel/Wert-Paare auf Repository- oder Organisationsebene erstellt.
Während ein Repository nur auf Secrets zugreifen kann, die auf Repository-Ebene erstellt wurden, werden Secrets, die auf Organisationsebene erstellt wurden, von allen Repositories innerhalb einer Organisation gemeinsam genutzt.
Secrets, die auf Repository-Ebene erstellt wurden, können von allen Personen, die über die Berechtigung zur Mitarbeit verfügen, in Aktionen verwendet werden. Du kannst den Wert deiner Secrets jederzeit ändern. Allerdings können Secrets nicht mit Workflows aus einem geforkten Repository verwendet werden.
Die folgenden Richtlinien gelten für die Benennung von Secrets:
- Geheimnamen dürfen keine Leerzeichen enthalten.
- Bei Geheimnamen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
- Geheimnamen dürfen nicht mit einer Zahl beginnen.
- Geheimnamen dürfen nicht mit dem Präfix
GITHUB_
beginnen. - Geheimnamen müssen eindeutig sein – Secrets mit demselben Namen dürfen nicht auf derselben Ebene existieren.
Du kannst diese Secrets innerhalb des GitHub-Aktions-Workflows verwenden, indem du einfach secrets
als YML-Variable vor deinem Geheimnamen hinzufügst, wie unten gezeigt:
${{ secrets.MY_SECRET_TOKEN }}
Für mehr Sicherheit kannst du Secrets auch maskieren, wie im folgenden Abschnitt gezeigt wird.
So maskierst du Secrets
Erstelle zunächst ein GitHub-Geheimnis. Klicke in deinem Repository auf GitHub auf die Registerkarte Einstellungen, wähle Secrets > Aktionen in der linken Seitenleiste und klicke dann auf Neues Repository-Geheimnis, um ein neues Geheimnis hinzuzufügen:
Gib deinem Geheimnis einen Namen und einen Geheimhaltungswert und klicke dann auf Geheimnis hinzufügen:
Jetzt, wo du dein Geheimnis erstellt und ihm den Wert verySecretToken
gegeben hast, kannst du es in deiner Workflow-Datei verwenden. Öffne deine Datei hide-secrets.yml und nimm die folgenden Änderungen vor:
name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: Add Mask
run: echo "::add-mask::${{ secrets.MY_SECRET_TOKEN }}"
- name: Echo a secret
run: echo "your secret token is ${{ secrets.MY_SECRET_TOKEN }}"
Der einzige Unterschied zwischen diesem und dem vorherigen Code ist, dass du das geheime Token durch dein neu erstelltes GitHub-Geheimnis „${{ secrets.MY_SECRET_TOKEN }}
ersetzt hast.“
Sobald du den Code festlegst und die Änderungen in dein GitHub-Repository überträgst, sind deine Secrets maskiert:
Zusammenfassung
Du darfst keine sensiblen Informationen in deinen GitHub Action Logs preisgeben. Die Maskierung von Klartext ist eine Möglichkeit, Daten zu verbergen, aber jeder, der auf deine Workflow-Dateien zugreift, kann die Informationen sehen, die du zu verbergen versuchst.
Wie dieser Lehrgang zeigt, ist GitHub Actions Secret eine viel sicherere Methode, um deine sensiblen Daten zu schützen und sie dann zu maskieren.
Lies unsere Dokumentation, um mehr über die Nutzung von Git bei Kinsta zu erfahren. Teste unser Anwendungs-Hosting jetzt kostenlos.
Schreibe einen Kommentar