Diperbarui

Berbagi Rahasia di GitHub Actions — Tanpa Vault

Oleh

Kamu bisa berbagi rahasia di GitHub Actions tanpa HashiCorp Vault menggunakan GitHub Action dari Vaulted, yang membuat tautan terenkripsi yang otomatis terhapus tanpa infrastruktur apa pun. Action ini menggunakan enkripsi sisi klien AES-256-GCM dan bekerja sebagai satu langkah workflow — tanpa server secrets manager atau konfigurasi cloud.

Pipeline CI terus-menerus membutuhkan kredensial sementara. Deploy key yang hanya boleh ada untuk satu run. Token yang diteruskan antar dua repo saat migrasi. Kredensial yang dirotasi di satu workflow dan dikonsumsi di workflow lain.

Saran standarnya adalah "gunakan secrets manager." Tapi menyiapkan HashiCorp Vault atau mengonfigurasi AWS Secrets Manager hanya untuk meneruskan satu kredensial antar workflow ibarat menyewa gudang hanya untuk mengirim surat.

GitHub repo secrets menangani kasus statis dengan baik — API key berumur panjang, deploy token, kredensial service account. Tapi untuk hal-hal yang bersifat sementara atau dinamis, mereka tidak memadai.

Celahnya: berbagi rahasia sementara di CI/CD

Repo secrets dirancang untuk nilai yang jarang berubah dan dikonsumsi oleh satu repositori saja. Mereka tidak mencakup:

  • Serah terima sekali pakai saat rotasi kunci — Kamu merotasi kredensial di satu workflow dan workflow lain (atau tim lain) perlu mengambil nilai baru itu tepat satu kali.
  • Berbagi kredensial lintas repo — Dua repo perlu bertukar token berumur pendek, tapi keduanya tidak boleh menyimpannya secara permanen.
  • Akses kontraktor berbatas waktu — Token CI yang harus kedaluwarsa setelah jendela deploy kontraktor berakhir.
  • Mengetahui kapan rahasia dikonsumsi — Repo secrets tidak memberikan visibilitas apakah atau kapan sebuah nilai dibaca.

Ini adalah masalah sementara yang membutuhkan solusi sementara.

Pendekatan yang lebih ringan: tautan terenkripsi yang otomatis terhapus

Vaulted GitHub Action memungkinkan kamu membuat dan mengambil rahasia terenkripsi yang otomatis terhapus langsung dari workflow — tanpa infrastruktur yang perlu dikelola.

Membuat rahasia:

- name: Share rotated credential
  id: share
  uses: vaulted-fyi/share-secret@v1
  with:
    secret: ${{ steps.rotate.outputs.new_token }}
    views: 1
    expires: 1h

Langkah ini menghasilkan URL yang berisi rahasia terenkripsi. Kunci enkripsi berada di URL fragment, sehingga tidak pernah menyentuh server Vaulted.

Mengambil rahasia:

- name: Get shared credential
  id: get
  uses: vaulted-fyi/share-secret/get@v1
  with:
    url: ${{ needs.rotate.outputs.secret_url }}

- name: Deploy with rotated credential
  run: ./deploy.sh
  env:
    API_TOKEN: ${{ steps.get.outputs.secret }}

Setelah diambil, tautan dikonsumsi dan ciphertext di sisi server dihapus. Rahasia hanya ada di memori runner selama durasi job tersebut.

Model keamanan

Tiga sifat yang membuat ini aman untuk penggunaan CI/CD:

  1. Enkripsi zero-knowledge. Rahasia dienkripsi dengan AES-256-GCM di dalam GitHub runner sebelum meninggalkan proses. Kunci enkripsi tertanam di URL fragment, yang tidak pernah dikirim ke server. Vaulted hanya menyimpan ciphertext yang tidak bisa didekripsinya. Ini adalah enkripsi sisi klien yang diterapkan pada CI/CD.

  2. Penyamaran log otomatis. Action memanggil core.setSecret sebelum core.setOutput, mendaftarkan setiap baris nilai rahasia ke log masker GitHub. Rahasia multi-baris disamarkan per baris, sehingga bahkan kecocokan parsial pun disensor dari log workflow.

  3. Tautan yang otomatis terhapus. Batas tampilan dan kedaluwarsa berbasis waktu diterapkan di sisi server. Rahasia yang dibuat dengan views: 1 dan expires: 1h akan dihapus secara permanen setelah pengambilan pertama atau setelah satu jam — mana yang lebih dulu.

Kapan menggunakan ini vs. secrets manager

SkenarioSecrets managerVaulted Action
Kredensial produksi berumur panjangYaTidak
Konfigurasi runtime aplikasi (DB URL, API key)YaTidak
Serah terima kredensial sekali pakai antar workflowTerlalu berlebihanYa
Berbagi token lintas repo sementaraTerlalu berlebihanYa
Akses CI kontraktor berbatas waktuTerlalu berlebihanYa
Distribusi kredensial setelah rotasiTerlalu berlebihanYa

Secrets manager adalah alat yang tepat untuk rahasia yang dikonsumsi aplikasi saat runtime. Vaulted adalah untuk serah terima — saat kredensial berpindah dari satu tempat ke tempat lain dan tidak boleh tersimpan.

Memulai

Tambahkan action ke workflow mana pun:

- uses: vaulted-fyi/share-secret@v1
  with:
    secret: ${{ secrets.TEMP_CREDENTIAL }}
    views: 1
    expires: 1h

Temukan di GitHub Marketplace. Rahasia yang dibuat oleh action ini kompatibel dengan web app dan CLI — apa pun yang dibuat di salah satu bisa diambil dari yang lain.


Tanpa server Vault. Tanpa kebijakan IAM. Tanpa infrastruktur. Hanya tautan terenkripsi yang otomatis terhapus.


Terkait