GitHub Actions'ta Sırları Paylaş — Vault Gerekmez
Yazan Maxim Novak
Vaulted'ın GitHub Action'ını kullanarak HashiCorp Vault olmadan GitHub Actions'ta sırları paylaşabilirsin. Bu action, sıfır altyapıyla şifrelenmiş, kendiliğinden imha olan bağlantılar oluşturur. İstemci taraflı AES-256-GCM şifrelemesi kullanır ve tek bir iş akışı adımı olarak çalışır — sır yöneticisi sunucusuna veya bulut yapılandırmasına gerek yoktur.
CI pipeline'ları sürekli geçici kimlik bilgilerine ihtiyaç duyar. Yalnızca tek bir çalıştırma için var olması gereken bir deploy key. Bir geçiş sırasında iki repo arasında aktarılan bir token. Bir iş akışında döndürülen ve başka birinde kullanılan bir kimlik bilgisi.
Standart öneri "bir sır yöneticisi kullan" şeklindedir. Ama iş akışları arasında tek bir kimlik bilgisini aktarmak için HashiCorp Vault kurmak ya da AWS Secrets Manager yapılandırmak, bir mektup göndermek için depo kiralamak gibidir.
GitHub repo sırları statik durumu iyi karşılar — uzun ömürlü API anahtarları, deploy token'ları, servis hesabı kimlik bilgileri. Ancak geçici veya dinamik her şey için yetersiz kalırlar.
Boşluk: CI/CD'de geçici sır paylaşımı
Repo sırları, seyrek değişen ve tek bir repository tarafından kullanılan değerler için tasarlanmıştır. Şu senaryoları karşılamazlar:
- Anahtar rotasyonu sırasındaki tek seferlik aktarımlar — Bir iş akışında kimlik bilgisini döndürürsün ve başka bir iş akışının (veya ekibin) yeni değeri tam olarak bir kez alması gerekir.
- Repolar arası kimlik bilgisi paylaşımı — İki repo kısa ömürlü bir token alışverişi yapmak zorundadır, ancak hiçbiri onu kalıcı olarak saklamamalıdır.
- Zaman sınırlı yüklenici erişimi — Bir yüklenicinin deploy penceresi kapandıktan sonra sona ermesi gereken bir CI token'ı.
- Sırrın ne zaman kullanıldığını bilmek — Repo sırları, bir değerin okunup okunmadığı veya ne zaman okunduğu konusunda hiçbir görünürlük sağlamaz.
Bunlar geçici çözüm gerektiren geçici sorunlardır.
Daha hafif bir yaklaşım: şifrelenmiş, kendiliğinden imha olan bağlantılar
Vaulted GitHub Action, iş akışlarından doğrudan şifrelenmiş, kendiliğinden imha olan sırları oluşturup almanı sağlar — yönetilecek altyapı yoktur.
Sır oluşturma:
- name: Share rotated credential
id: share
uses: vaulted-fyi/share-secret@v1
with:
secret: ${{ steps.rotate.outputs.new_token }}
views: 1
expires: 1h
Bu adım, şifrelenmiş sırrı içeren bir URL çıktısı üretir. Şifreleme anahtarı URL fragment'ında bulunur; dolayısıyla hiçbir zaman Vaulted'ın sunucularına ulaşmaz.
Sır alma:
- 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 }}
Alındıktan sonra bağlantı tüketilir ve sunucu tarafındaki ciphertext silinir. Sır, yalnızca o işin süresi boyunca runner'ın belleğinde var olur.
Güvenlik modeli
Bu üç özellik, CI/CD kullanımı için güvenli kılar:
-
Zero-knowledge şifreleme. Sır, işlemi terk etmeden önce GitHub runner içinde AES-256-GCM ile şifrelenir. Şifreleme anahtarı, sunucuya hiçbir zaman gönderilmeyen URL fragment'ına gömülüdür. Vaulted yalnızca çözemeyeceği ciphertext'i saklar. Bu, CI/CD'ye uygulanmış istemci taraflı şifrelemedir.
-
Otomatik log maskeleme. Action,
core.setOutput'tan öncecore.setSecret'ı çağırarak sır değerinin her satırını GitHub'ın log maskeleyicisine kaydeder. Çok satırlı sırlar satır satır maskelenir; bu sayede kısmi eşleşmeler bile iş akışı loglarından temizlenir. -
Kendiliğinden imha olan bağlantılar. Görüntüleme sınırları ve zamana dayalı son kullanma tarihi sunucu tarafında uygulanır.
views: 1veexpires: 1hile oluşturulan bir sır, ilk alımdan sonra veya bir saat sonra — hangisi önce gelirse — kalıcı olarak silinir.
Bunu ne zaman sır yöneticisi yerine kullanmalısın
| Senaryo | Sır yöneticisi | Vaulted Action |
|---|---|---|
| Uzun ömürlü üretim kimlik bilgileri | Evet | Hayır |
| Uygulama çalışma zamanı yapılandırması (DB URL'leri, API anahtarları) | Evet | Hayır |
| İş akışları arasında tek seferlik kimlik bilgisi aktarımı | Aşırıya kaçmak | Evet |
| Geçici repolar arası token paylaşımı | Aşırıya kaçmak | Evet |
| Yüklenici için zaman sınırlı CI erişimi | Aşırıya kaçmak | Evet |
| Rotasyon sonrası kimlik bilgisi dağıtımı | Aşırıya kaçmak | Evet |
Sır yöneticileri, uygulamaların çalışma zamanında kullandığı sırlar için doğru araçtır. Vaulted ise aktarım içindir — bir kimlik bilgisinin bir yerden başka bir yere taşındığı ve kalıcı olmaması gereken an.
Başlarken
Action'ı herhangi bir iş akışına ekle:
- uses: vaulted-fyi/share-secret@v1
with:
secret: ${{ secrets.TEMP_CREDENTIAL }}
views: 1
expires: 1h
GitHub Marketplace'te bulabilirsin. Action tarafından oluşturulan sırlar web uygulaması ve CLI ile uyumludur — birinde oluşturulan her şey diğerinden alınabilir.
Vault sunucusu yok. IAM politikası yok. Altyapı yok. Yalnızca kendiliğinden imha olan şifrelenmiş bağlantılar.
İlgili
- API Anahtarlarını Güvenli Paylaş — API kimlik bilgileri için şifrelenmiş, kendiliğinden imha olan bağlantılar
- .env Dosyalarını Güvenli Paylaş — ortam yapılandırmalarını Slack olmadan paylaş
- Uçtan Uca Şifreleme Açıklandı — canlı şifreleme demolu görsel rehber