Zaszyfrowane udostępnianie sekretów dla GitHub Actions

Twórz i pobieraj samodestrukcyjne linki do sekretów w przepływach CI/CD — za pomocą dwóch linii YAML.

Utwórz link do sekretu
- uses: vaulted-fyi/share-secret@v1
  id: share
  with:
    secret: ${{ secrets.API_KEY }}
    views: 1
    expires: 24h
Pobierz i odszyfruj
- uses: vaulted-fyi/share-secret/get@v1
  id: get
  with:
    url: ${{ needs.share.outputs.url }}

- run: echo "Secret is $SECRET"
  env:
    SECRET: ${{ steps.get.outputs.secret }}

Szyfrowanie end-to-end

Szyfrowanie AES-256-GCM odbywa się wewnątrz runnera GitHub Actions. Architektura zero-knowledge — serwer nigdy nie widzi plaintextu ani kluczy. Klucz deszyfrowania istnieje tylko we fragmencie URL.

Automatyczne maskowanie logów

Wywołuje core.setSecret przed setOutput, dzięki czemu odszyfrowana wartość nigdy nie pojawia się w logach przepływu pracy. Wieloliniowe sekrety są maskowane wiersz po wierszu dla pełnej ochrony.

Bez potrzeby infrastruktury

Żadnego serwera Vault, żadnego AWS Secrets Manager, żadnych plików konfiguracyjnych. Tylko dwie linie YAML w twoim przepływie pracy i masz zaszyfrowane udostępnianie sekretów.

Komponowalne wyjścia

Akcja tworzenia zwraca zarówno url, jak i id. Komponuj z powiadomieniami Slack, komentarzami do PR, akcjami e-mail lub dowolnym krokiem akceptującym dane tekstowe.

Ochrona hasłem

Dodaj opcjonalne hasło (passphrase) jako drugi czynnik. Klucz szyfrowania jest owijany za pomocą PBKDF2 — nawet jeśli ktoś przechwyci link, nie może odszyfrować bez hasła.

Samodestrukcyjne linki

Ustaw limity wyświetleń od 1 do 10. Ustaw czas wygaśnięcia od 1 godziny do 30 dni. Sekrety są automatycznie usuwane z serwera po osiągnięciu limitów.

Typowe przepływy pracy

Opublikuj link do sekretu jako komentarz do PR
- uses: vaulted-fyi/share-secret@v1
  id: share
  with:
    secret: ${{ secrets.DEPLOY_TOKEN }}
    views: 1
    expires: 1h

- uses: actions/github-script@v7
  with:
    script: |
      github.rest.issues.createComment({
        owner: context.repo.owner,
        repo: context.repo.repo,
        issue_number: context.issue.number,
        body: `Deploy token: ${{ steps.share.outputs.url }}`
      })
Wyślij do Slack
- uses: vaulted-fyi/share-secret@v1
  id: share
  with:
    secret: ${{ secrets.DATABASE_URL }}
    views: 3
    expires: 7d

- uses: slackapi/slack-github-action@v2
  with:
    webhook: ${{ secrets.SLACK_WEBHOOK }}
    webhook-type: incoming-webhook
    payload: |
      {"text": "DB credentials: ${{ steps.share.outputs.url }}"}
Chroniony hasłem
- uses: vaulted-fyi/share-secret@v1
  id: share
  with:
    secret: ${{ secrets.PROD_KEY }}
    passphrase: ${{ secrets.SHARE_PASSPHRASE }}
    views: 1
    expires: 1h

Dane wejściowe tworzenia

Dane wejścioweWymaganeDomyślneOpis
secrettakSekret w postaci plaintextu do zaszyfrowania i udostępnienia
viewsnie1Maks. wyświetleń przed automatycznym usunięciem (1, 3, 5, 10)
expiresnie24hCzas wygaśnięcia (1h, 24h, 7d, 30d)
passphrasenieOpcjonalne hasło dla dodatkowej ochrony

Dane wejściowe pobierania

Dane wejścioweWymaganeDomyślneOpis
urltakAdres URL Vaulted do odszyfrowania
passphrasenieHasło, jeśli sekret jest chroniony