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:

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:

Vorschau deines Workflows in GitHub
Vorschau deines Workflows

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:

Untersuche deine GitHub-Aktionsprotokolle
Untersuche deine GitHub-Actions Logs

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:

Einfache Texte erstellen
Einfache Texte erstellen

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:

Problem beim Maskieren von einfachem Text
Problem beim Maskieren von einfachem Text

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:

Ein neues Repository-Geheimnis erstellen
Ein neues Repository-Geheimnis erstellen

Gib deinem Geheimnis einen Namen und einen Geheimhaltungswert und klicke dann auf Geheimnis hinzufügen:

Ein neues GitHub-Geheimnis hinzufügen
Ein neues GitHub-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:

Masked GitHub Actions Secrets
Maskierte GitHub Actions Secrets

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.

Jeremy Holcombe Kinsta

Content & Marketing Editor bei Kinsta, WordPress Web Developer und Content Writer. Außerhalb von WordPress genieße ich den Strand, Golf und Filme. Außerdem habe ich Probleme mit großen Menschen ;).