Hallo, Entdecker! An dieser Seite wird aktiv gearbeitet, oder sie wird noch übersetzt. Die neuesten und genauesten Informationen findest Du in unserer englischsprachigen Dokumentation.

Encrypted secrets

Encrypted secrets allow you to store sensitive information in your organization, repository, or repository environments.

GitHub Actions is available with GitHub Free, GitHub Pro, GitHub Free for organizations, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server, GitHub One, and GitHub AE. GitHub Actions ist nicht verfügbar für private Repositorys, die im Besitz von Konten mit älteren Pro-Repository-Plänen sind. For more information, see "GitHub's products."

Inhalt dieses Artikels

Note: Environments, environment protection rules, and environment secrets are currently in beta and subject to change.

Informationen zu verschlüsselten Geheimnissen

Secrets are encrypted environment variables that you create in an organization, repository, or repository environment. The secrets that you create are available to use in GitHub Actions workflows. GitHub uses a libsodium sealed box to help ensure that secrets are encrypted before they reach GitHub and remain encrypted until you use them in a workflow.

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.

For secrets stored at the environment level, you can enable required reviewers to control access to the secrets. A workflow job cannot access environment secrets until approval is granted by required approvers.

Benennen Ihrer Geheimnisse

Die folgenden Regeln gelten für geheime Namen:

  • Geheime Namen dürfen nur alphanumerische Zeichen ([a-z], [A-Z], [0-9]) oder Unterstriche (_) enthalten. Leerzeichen sind nicht zulässig.

  • Geheime Namen dürfen nicht mit dem GITHUB_ -Präfix beginnen.

  • Geheime Namen dürfen nicht mit einer Zahl beginnen.

  • Secret names are not case-sensitive.

  • Geheime Namen müssen auf der Ebene eindeutig sein, auf der sie erstellt werden. For example, a secret created at the environment level must have a unique name in that environment, a secret created at the repository level must have a unique name in that repository, and a secret created at the organization level must have a unique name at that level.

    If a secret with the same name exists at multiple levels, the secret at the lower level takes precedence. For example, if an organization-level secret has the same name as a repository-level secret, then the repository-level secret takes precedence. Similarly, if an organization, repository, and environment all have a secret with the same name, the environment-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.

Zugriff auf Ihre Geheimnisse

Um ein Geheimnis für eine Aktion verfügbar zu machen, legen Sie das Geheimnis als Eingabe oder Umgebungsvariable in der Workflow-Datei fest. In der README-Datei der Aktion erfahren Sie, 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.

Organization and repository secrets are read when a workflow run is queued, and environment secrets are read when a job referencing the environment starts.

Sie können Geheimnisse auch mit der REST-API verwalten. For more information, see "Secrets."

Einschränken von Anmeldeinformationsberechtigungen

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.

Erstellen verschlüsselter Geheimnisse für ein 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.

  1. Navigiere in GitHub zur Hauptseite des Repository.
  2. Klicke unter Deinem Repository-Namen auf Settings (Einstellungen). Schaltfläche „Repository settings" (Repository-Einstellungen)
  3. Klicken Sie auf der linken Seitenleiste auf Secrets (Geheimnisse).
  4. Click New repository secret.
  5. Geben Sie einen Namen für Ihr Geheimnis in das Eingabefeld Name ein.
  6. Geben Sie den Wert für Ihr Geheimnis ein.
  7. Klicken Sie auf Add secret (Geheimnis hinzufügen).

If your repository has environment secrets or can access secrets from the parent organization, then those secrets are also listed on this page.

Note: Users with collaborator access can use the REST API to manage secrets for a repository. For more information, see "GitHub Actions secrets API."

  1. Navigiere in GitHub zur Hauptseite des Repository.
  2. Klicke unter Deinem Repository-Namen auf Settings (Einstellungen). Schaltfläche „Repository settings" (Repository-Einstellungen)
  3. In the left sidebar, click Environments.
  4. Click on the environment that you want to add a secret to.
  5. Under Environment secrets, click Add secret.
  6. Geben Sie einen Namen für Ihr Geheimnis in das Eingabefeld Name ein.
  7. Geben Sie den Wert für Ihr Geheimnis ein.
  8. Klicken Sie auf Add secret (Geheimnis hinzufügen).

Erstellen verschlüsselter Geheimnisse für eine Organisation

Beim Erstellen eines geheimen Schlüssels in einer Organisation können Sie eine Richtlinie verwenden, um einzuschränken, welche Repositorys auf diesen geheimen Schlüssel zugreifen können. Sie können z. B. Zugriff auf alle Repositorys gewähren oder den Zugriff auf nur private Repositorys oder eine angegebene Liste von Repositorys beschränken.

Um Geheimnisse auf Organisationsebene zu erstellen, musst Du admin-Zugriff haben.

  1. Navigiere auf GitHub zur Hauptseite der Organisation.
  2. Klicke unter Deinem Organisationsnamen auf Settings (Einstellungen). Schaltfläche „Organization settings" (Organsationseinstellungen)
  3. Klicken Sie auf der linken Seitenleiste auf Secrets (Geheimnisse).
  4. Click New organization secret.
  5. Geben Sie einen Namen für Ihr Geheimnis in das Eingabefeld Name ein.
  6. Geben Sie den Value für Ihr Geheimnis ein.
  7. Wählen Sie im Repository-Zugriff Dropdownliste eine Zugriffsrichtlinie aus.
  8. Klicken Sie auf Add secret (Geheimnis hinzufügen).

Überprüfen des Zugriffs auf Geheimnisse auf Organisationsebene

Sie können überprüfen, welche Zugriffsrichtlinien auf einen geheimen Schlüssel in Ihrer Organisation angewendet werden.

  1. Navigiere auf GitHub zur Hauptseite der Organisation.
  2. Klicke unter Deinem Organisationsnamen auf Settings (Einstellungen). Schaltfläche „Organization settings" (Organsationseinstellungen)
  3. Klicken Sie auf der linken Seitenleiste auf Secrets (Geheimnisse).
  4. Die Liste der Geheimnisse enthält alle konfigurierten Berechtigungen und Richtlinien. Ein Beispiel: Geheimliste
  5. Weitere Informationen zu den konfigurierten Berechtigungen für jeden geheimen Schlüssel finden Sie unter Aktualisieren.

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

You can store up to 1,000 secrets per organization, 100 secrets per repository, and 100 secrets per environment. A workflow may use up to 100 organization secrets and 100 repository secrets. Additionally, a job referencing an environment may use up to 100 environment secrets.

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 Ihrem Repository auf GitHub eincheckst. Weitere Informationen finden Sie 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 gedruckt werden.

  1. Führe den folgenden Befehl von Deinem Terminal aus, um die Datei my_secret.json mit gpg und dem Verschlüsselungs-Algorithmus AES256 zu verschlüsseln.

    $ gpg --symmetric --cipher-algo AES256 my_secret.json
  2. Du wirst aufgefordert, eine Passphrase einzugeben. Merken Sie sich die Passphrase, denn Sie müssen ein neues Geheimnis auf GitHub mit der Passphrase als Wert erstellen.

  3. Erstellen Sie einen neuen Geheimschlüssel, der die Passphrase enthält. Erstelle beispielsweise ein neues Geheimnis mit dem Namen LARGE_SECRET_PASSPHRASE und setze den Wert des Geheimnisses auf die Passphrase, die Du im obigen Schritt ausgewählt hast.

  4. Kopiere Deine verschlüsselte Datei in Dein Repository und committe sie. In diesem Beispiel ist die verschlüsselte Datei my_secret.json.gpg.

  5. Erstellen Sie ein Shell-Skript, um das Passwort zu entschlüsseln. Speichern Sie diese Datei als decrypt_secret.sh.

    Die Datei
    mkdir $HOME/secrets
    --batch entschlüsseln, um den interaktiven Befehl
    zu verhindern - --ja, um "Ja" für Fragen
    gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE"
    --output $HOME/secrets/my_secret.json my_secret.json.gp
  6. Stellen Sie sicher, dass Ihr Shell-Skript ausführbar ist, bevor Sie es in Ihrem Repository einchecken.

    $ chmod +x decrypt_secret.sh
    $ git add decrypt_secret.sh
    $ git commit -m "Add new decryption script"
    $ git push
  7. Verwenden Sie in Ihrem 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 Aktion actions/checkout verwenden. Referenzieren Sie Ihr Shell-Skript mit dem Befehl run relativ zum Root Ihres 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 (Remove this step in production)
            run: cat $HOME/secrets/my_secret.json
    

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

Oder, learn how to contribute.