Berbagi rahasia terenkripsi untuk GitHub Actions
Buat dan ambil tautan rahasia yang hancur sendiri dalam alur kerja CI/CD — dengan dua baris YAML.
- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.API_KEY }}
views: 1
expires: 24h- 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
- 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 }}`
})- 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 }}"}- uses: vaulted-fyi/share-secret@v1
id: share
with:
secret: ${{ secrets.PROD_KEY }}
passphrase: ${{ secrets.SHARE_PASSPHRASE }}
views: 1
expires: 1hInput Create
| Input | Wajib | Default | Deskripsi |
|---|---|---|---|
| secret | ya | — | Rahasia plaintext yang akan dienkripsi dan dibagikan |
| views | tidak | 1 | Maksimum tampilan sebelum dihapus otomatis (1, 3, 5, 10) |
| expires | tidak | 24h | Waktu kedaluwarsa (1h, 24h, 7d, 30d) |
| passphrase | tidak | — | Passphrase opsional untuk perlindungan ekstra |
Input Get
| Input | Wajib | Default | Deskripsi |
|---|---|---|---|
| url | ya | — | URL Vaulted untuk didekripsi |
| passphrase | tidak | — | Passphrase jika rahasia dilindungi |