Informationen zu verschlüsselten Geheimnissen
Secrets are encrypted environment variables that you create in a repository or organization. The secrets you create are available to use in GitHub Actions workflows. GitHub verwendet eine versiegelte Libsodium-Box um sicherzustellen, dass Geheimnisse verschlüsselt werden, bevor sie GitHub erreichen, und verschlüsselt bleiben, bis Du sie in einem Workflow verwendest.
Für Geheimnisse, die auf Organisationsebene gespeichert sind, kannst Du Zugriffsrichtlinien festlegen, um zu kontrollieren, welche Repositorys die Organisations-Geheimnisse verwenden können. Geheimnisse auf Organisationsebene ermöglichen es Dir, Geheimnisse zwischen mehreren Repositories zu teilen, was die Notwendigkeit zur Erstellung von doppelten Geheimnissen verringert. Die Aktualisierung eines Organisationsgeheimnisses an nur einem Ort stellt außerdem sicher, dass die Änderung in allen Workflows aller Repositorys wirksam wird, die dieses Geheimnis verwenden.
Naming your secrets
The following rules apply to secret names:
- Secret names can only contain alphanumeric characters (
[a-z],[A-Z],[0-9]) or underscores (_). Spaces are not allowed. - Secret names must not start with the
GITHUB_prefix. - Secret names must not start with a number.
- Secret names must be unique at the level they are created at. For example, a secret created at the organization-level must have a unique name at that level, and a secret created at the repository-level must have a unique name in that repository. If an organization-level secret has the same name as a repository-level secret, then the repository-level secret takes precedence.
To help ensure that GitHub redacts your secret in logs, avoid using structured data as the values of secrets. Vermeide beispielsweise Geheimnisse zu erstellen, die JSON oder codierte Git-Blobs enthalten.
Accessing your secrets
Um ein Geheimnis für eine Aktion verfügbar zu machen, legest Du das Geheimnis als Eingabe oder Umgebungsvariable in der Workflow-Datei fest. In der README-Datei der Aktion erfährst Du, welche Eingaben und Umgebungsvariablen die Aktion erwartet. Weitere Informationen findest Du unter „Workflow-Syntax für GitHub Actions“.
Du kannst verschlüsselte Geheimnisse in einer Workflow-Datei verwenden und lesen, wenn Du auf die Datei Bearbeitungs-Zugriff hast. Weitere Informationen findest Du unter „Zugriffsberechtigungen auf GitHub“.
Warnung: GitHub redigiert Geheimnisse zwar automatisch bei Ausgabe ins Log, aber Du solltest nicht vorsätzlich Geheimnisse ins Log schreiben.
You can also manage secrets using the REST API. For more information, see "Secrets."
Limiting credential permissions
Beim Generieren von Anmeldeinformationen wird empfohlen, möglichst geringe Berechtigungen zu erteilen. Anstatt z.B. persönliche Anmeldeinformationen zu verwenden, solltest Du Bereitstellen von Schlüsseln oder einen „Service-Account“ (Dienstkonto) benuzen. Ziehe in Erwägung, Nur-Lese-Berechtigungen zu gewähren, wenn dies ausreicht, und schränke den Zugriff so weit wie möglich ein. Wähle beim Generieren eines persönlichen Zugriffstokens („personal access token“, PAT) die geringsmöglichen Anwendungsbereiche („scopes“) aus.
Creating encrypted secrets for a repository
Um Geheimnisse für ein Benutzerkonto-Repository zu erstellen, musst Du der Repository-Inhaber sein. Um Geheimnisse für ein Organisations-Repository zu erstellen, musst Du admin-Zugriff haben.
- Navigiere in GitHub zur Hauptseite des Repository.
- Klicke unter Deinem Repository-Namen auf Settings (Einstellungen).

- Klicken Sie auf der linken Seitenleiste auf Secrets (Geheimnisse).
- Klicken Sie auf Add a new secret (Neues Geheimnis hinzufügen).
- Type a name for your secret in the Name input box.
- Enter the value for your secret.
- Klicke auf Add secret (Geheimnis hinzufügen).
If your repository can access secrets from the parent organization, then those secrets are also listed on this page.
Creating encrypted secrets for an organization
When creating a secret in an organization, you can use a policy to limit which repositories can access that secret. For example, you can grant access to all repositories, or limit access to only private repositories or a specified list of repositories.
Um Geheimnisse auf Organisationsebene zu erstellen, musst Du admin-Zugriff haben.
- Navigiere auf GitHub zur Hauptseite der Organisation.
- Klicke unter Deinem Organisationsnamen auf Settings (Einstellungen).

- Klicken Sie auf der linken Seitenleiste auf Secrets (Geheimnisse).
- Click New secret.
- Type a name for your secret in the Name input box.
- Enter the Value for your secret.
- From the Repository access dropdown list, choose an access policy.
- Klicken Sie auf Add secret (Geheimnis hinzufügen).
Reviewing access to organization-level secrets
You can check which access policies are being applied to a secret in your organization.
- Navigiere auf GitHub zur Hauptseite der Organisation.
- Klicke unter Deinem Organisationsnamen auf Settings (Einstellungen).

- Klicken Sie auf der linken Seitenleiste auf Secrets (Geheimnisse).
- The list of secrets includes any configured permissions and policies. Ein Beispiel:

- For more details on the configured permissions for each secret, click Update.
Verschlüsselte Geheimnisse in einem Workflow verwenden
Mit Ausnahme von GITHUB_TOKEN werden Geheimnisse nicht an den Runner übergeben, wenn ein Workflow von einem geforkten Repository aus ausgelöst wird.
Um eine Aktion mit einem Geheimnis als Eingabe- oder Umgebungsvariable zu versehen, kannst Du den secrets Kontext verwenden, um auf Geheimnisse zuzugreifen, die Du in Deinem Repository erstellt hast. Weitere Informationen findest Du unter "Kontext und Ausdrucks-Syntax für GitHub Actions" und "Workflow-Syntax für GitHub Actions."
steps:
- name: Hello world action
with: # Das Geheimnis als Eingabe setzen
super_secret: ${{ secrets.SuperSecret }}
env: # Oder als Umgebunsvariable ("environment variable")
super_secret: ${{ secrets.SuperSecret }}
Wann immer dies möglich ist, vermeide die Übergabe von Geheimnissen zwischen Prozessen von der Befehlszeile aus. Befehlszeilen-Prozesse können für andere Benutzer (mithilfe des Befehls ps) sichtbar sein oder von „security audit events“ (Ereignissen zur Sicherheits-Überprüfung) erfasst werden. Um den Schutz von Geheimnissen zu unterstützen, solltest Du die Verwendung von Umgebungsvariablen, STDIN oder andere vom Zielprozess unterstützte Mechanismen in Betracht ziehen.
Wenn Sie Geheimnisse innerhalb einer Kommandozeile übergeben müssen, umschließe sie im Rahmen der gültigen Quotierungsregeln. Geheimnisse enthalten oft Sonderzeichen, die in Deiner Shell unbeabsichtigte Wirkungen entfalten können. Um diese Sonderzeichen zu vermeiden, verwende Deine Umgebungsvariablen mit Anführungszeichen. Ein Beispiel:
Beispiel mit Bash
steps:
- shell: bash
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$SUPER_SECRET"
Beispiel mit PowerShell
steps:
- shell: pwsh
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "$env:SUPER_SECRET"
Beispiel mit Cmd.exe
steps:
- shell: cmd
env:
SUPER_SECRET: ${{ secrets.SuperSecret }}
run: |
example-command "%SUPER_SECRET%"
Einschränkungen für Geheimnisse
Dein Workflow kann bis zu 100 Geheimnisse haben. Die Namen von Geheimnis-Umgebungsvariablen müssen Repository-weit eindeutig sein.
Geheimnisse sind auf 64 KB beschränkt. Um Geheimnisse zu verwenden, die größer als 64 KB sind, kannst Du verschlüsselte Geheimnisse in Deinem Repository speichern und die Passphrase zur Entschlüsselung als Geheimnis auf GitHub speichern. Du kannst beispielsweise gpg verwenden, um Deine Anmeldeinformationen lokal zu verschlüsseln, bevor Du die Datei in Deinem Repository auf GitHub eincheckst. Weitere Informationen findest Du auf der „GPG-Manpage“.
Warnung: Achte darauf, dass Deine Geheimnisse nicht gedruckt werden, wenn Deine Aktion ausgeführt wird. Wenn Du diesen Workaround verwendest, redigiert GitHub keine Geheimnisse, die in Protokollen ausgegeben werden.
-
Führe den folgenden Befehl von Deinem Terminal aus, um die Datei
my_secret.jsonmitgpgund dem Verschlüsselungs-Algorithmus AES256 zu verschlüsseln.$ gpg --symmetric --cipher-algo AES256 my_secret.json -
Du wirst aufgefordert, eine Passphrase einzugeben. Merke Dir die Passphrase, denn Du musst ein neues Geheimnis auf GitHub mit der Passphrase als Wert erstellen.
-
Create a new secret that contains the passphrase. Erstelle beispielsweise ein neues Geheimnis mit dem Namen
LARGE_SECRET_PASSPHRASEund setze den Wert des Geheimnisses auf die Passphrase, die Du im obigen Schritt ausgewählt hast. -
Kopiere Deine verschlüsselte Datei in Dein Repository und committe sie. In diesem Beispiel ist die verschlüsselte Datei
my_secret.json.gpg. -
Erstelle ein Shell-Skript, um das Passwort zu entschlüsseln. Speichere diese Datei als
decrypt_secret.sh.#!/bin/sh # Decrypt the file mkdir $HOME/secrets # --batch to prevent interactive command # --yes to assume "yes" for questions gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \ --output $HOME/secrets/my_secret.json my_secret.json.gpg -
Stelle sicher, dass Dein Shell-Skript ausführbar ist, bevor Du es in Dein Repository eincheckst.
$ chmod +x decrypt_secret.sh $ git add decrypt_secret.sh $ git commit -m "Add new decryption script" $ git push -
Verwende in Deinem Workflow einen
step, um das Shell-Skript aufzurufen und das Geheimnis zu entschlüsseln. Um in der Umgebung, in der Dein Workflow läuft, eine Kopie Deines Projektarchivs zu haben, musst Du die Aktionactions/checkoutverwenden. Referenziere Dein Shell-Skript mit dem Befehlrunrelativ zum Root Deines Repositorys.name: Workflows with large secrets on: push jobs: my-job: name: My Job runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Decrypt large secret run: ./.github/scripts/decrypt_secret.sh env: LARGE_SECRET_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }} # Dieser Befehl ist nur ein Beispiel, um zu zeigen, dass Dein Geheimnis ausgegeben wird # Stelle sicher, dass Du alle Druckanweisungen Deiner Geheimnisse entfernst. Github # verbirgt keine Geheimnisse, die diese Umgehung verwenden. - name: Test printing your secret (Entferne diesen Schritt im Produktivsystem) run: cat $HOME/secrets/my_secret.json