Berbagi rahasia terenkripsi untuk GitHub Actions

Buat dan ambil tautan rahasia yang hancur sendiri dalam alur kerja CI/CD — dengan dua baris YAML.

Buat tautan rahasia
- uses: vaulted-fyi/share-secret@v1
  id: share
  with:
    secret: ${{ secrets.API_KEY }}
    views: 1
    expires: 24h
Ambil dan dekripsi
- 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 }}

Terenkripsi end-to-end

Enkripsi AES-256-GCM terjadi di dalam runner GitHub Actions. Arsitektur zero-knowledge — server tidak pernah melihat plaintext atau kunci. Kunci dekripsi hanya ada di fragmen URL.

Penyamaran log otomatis

Memanggil core.setSecret sebelum setOutput agar nilai yang didekripsi tidak pernah muncul di log alur kerja. Rahasia multi-baris disamarkan per baris untuk perlindungan penuh.

Tidak perlu infrastruktur

Tidak perlu server Vault, tidak perlu AWS Secrets Manager, tidak perlu file konfigurasi. Cukup dua baris YAML dalam alur kerjamu dan kamu sudah bisa berbagi rahasia terenkripsi.

Output yang dapat dikombinasikan

Action create menghasilkan url dan id. Kombinasikan dengan notifikasi Slack, komentar PR, action email, atau langkah apa pun yang menerima input string.

Perlindungan passphrase

Tambahkan passphrase opsional sebagai faktor kedua. Kunci enkripsi dibungkus dengan PBKDF2 — bahkan jika seseorang mencegat tautannya, mereka tidak bisa mendekripsi tanpa passphrase.

Tautan yang hancur sendiri

Atur batas tampilan dari 1 hingga 10 tampilan. Atur kedaluwarsa dari 1 jam hingga 30 hari. Rahasia dihapus otomatis dari server saat batas tercapai.

Alur kerja umum

Posting tautan rahasia sebagai komentar 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 }}`
      })
Kirim ke 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 }}"}
Dilindungi passphrase
- uses: vaulted-fyi/share-secret@v1
  id: share
  with:
    secret: ${{ secrets.PROD_KEY }}
    passphrase: ${{ secrets.SHARE_PASSPHRASE }}
    views: 1
    expires: 1h

Input Create

InputWajibDefaultDeskripsi
secretyaRahasia plaintext yang akan dienkripsi dan dibagikan
viewstidak1Maksimum tampilan sebelum dihapus otomatis (1, 3, 5, 10)
expirestidak24hWaktu kedaluwarsa (1h, 24h, 7d, 30d)
passphrasetidakPassphrase opsional untuk perlindungan ekstra

Input Get

InputWajibDefaultDeskripsi
urlyaURL Vaulted untuk didekripsi
passphrasetidakPassphrase jika rahasia dilindungi