Öğren

SealBox'ı adım adım öğren

Hiç güvenlik bilgisi gerekmez. Her bölüm önce ne yaptığımızı gündelik bir benzetmeyle anlatır, sonra komutu gösterir.

1. 5 dakikada başla

⏱ 5 dakikaGereken: Python 3.12+

SealBox bir komut satırı aracı. Kurduktan sonra proje klasöründe birkaç komut çalıştırman yeterli.

Kur

$ pip install sealbox        # ya da: pipx install sealbox
$ sealbox -V                 # sürümü göster: sealbox 0.3.0

Projeni kontrol et

init hiçbir dosyayı değiştirmez. Projeye bakar ve sıradaki adımları sırayla söyler:

$ cd projem
$ sealbox init
sealbox 0.3.0 · proje: C:\projem

  ✓ Kasa: henüz yok
  · Ekip kurulmamış (tek kişi)  → sealbox team init --github <ad>
  ⚠ 3 dosyada açık sır var       → sealbox seal

Sıradaki adımlar:
  1) sealbox seal
  2) sealbox recovery setup

Mühürle, yedekle, çalıştır

$ sealbox seal                     # sırları kasaya taşı
$ sealbox recovery setup           # kurtarma kodu (bir kez)
$ sealbox exec -- python app.py    # programı sırlarla çalıştır
$ git add .sealbox
$ git commit -m "kasa"

İpucu: Takıldığın her yerde sealbox status yaz. Sorunlu her satırın yanında çözüm komutu yazar. Bir komutun ayrıntısı için sealbox help seal. Yanlış yazarsan (sealbox sael) "Bunu mu demek istediniz: seal?" diye düzeltir.

2. Temel kavramlar

SealBox'ı anlamak için beş kavram yeter. Hepsini evden bir benzetmeyle anlatıyoruz.

🏠

Büyük resim: Evine temizlikçi çağırdığını düşün (ajan). İşini yapması için her odaya girmesi gerekiyor. Mücevherleri masada bırakmazsın, kasaya koyarsın. Masaya da "mücevher kasada" diye not bırakırsın. Temizlikçi notu görür ama mücevheri göremez. SealBox bunu kodun için yapıyor.

🔐 Kasa (vault)

.sealbox/project.vault. Bütün sırlar burada AES-256-GCM ile şifreli durur. Şifreli olduğu için repoya girebilir.

🗝 Kasa anahtarı (DEK)

Kasayı açan tek anahtar. Diskte durmaz. Windows Kimlik Bilgisi Yöneticisi'nde, macOS Anahtar Zinciri'nde ya da Linux Secret Service'te saklanır.

🏷 Etiket (yer tutucu)

__SECURE_TCKN_103d…__ gibi rastgele bir ad. E-posta, TCKN ve IBAN gibi kişisel verilerin yerine yazılır.

🌱 Ortam değişkeni

Kodda parola yerine os.environ["DB_PASSWORD"] yazar. Değer, program çalışırken dışarıdan verilir.

✅ Onay penceresi

Bir program sırları istediğinde hangi değerlerin verileceğini gösteren pencere. Onu atlatan bir ayar yok.

🧯 Kurtarma kodu

Anahtar kaybolursa kasayı açan yedek kod. İstersen 3 parçaya böl, herhangi 2'si yeter.

Ne nereye gider?

Ne bulunduNe olur
Kodda parola, token, API anahtarı (tam bir metin)Kasaya taşınır, kodda os.environ["X"] / process.env.X / System.getenv("X") olur
Aynı değerin yorumdaki tekrarıEtiketle karalanır
E-posta, TCKN, telefon, IBAN, isimEtiketle karalanır (gerekirse vault expose)
.env dosyasıGizli satırlar kasaya, .env silinir, .env.sealed kalır
JSON / YAML / TOML ayarıKaralanır, hangi ortam değişkenini okuman gerektiği raporlanır
URL içindeki parça ya da desteklenmeyen dilDokunulmaz, [!] uyarısı verilir, elle taşıman gerekir

3. İlk projeni mühürle

⏱ 5 dakikaKomutlar: seal --check, seal

Önce sadece bak

--check hiçbir şeye dokunmaz. Açık sır varsa çıkış kodu 1 döner, böylece CI'da da kullanılabilir.

$ sealbox seal --check
.env → .env.sealed: 1 değer kasaya taşındı (DB_PASSWORD)
3 dosya tarandı (0.0 sn).
Diskte karalanmamış sır var. 'sealbox seal' çalıştırın.

Mühürle

$ sealbox seal                     # tüm proje
$ sealbox seal src/config.py       # yalnızca bir dosya

Proje kökünden çalıştır. src gibi bir alt klasörden çalıştırırsan ve üstte .env, .git ya da kasa varsa SealBox durur, çünkü üstteki .env açıkta kalırdı. O klasörü bilerek seçiyorsan -w . ver.

Dosyalarına ne olur?

Her dil, sırrı kendi standart yoluyla okur. Kodun mantığı değişmez:

Python
# önce
KEY = "sk_live_51N…"
# sonra
KEY = os.environ["KEY"]
JavaScript / TS
// önce
const key = "sk_live_51N…"
// sonra
const key = process.env.KEY
Java
// önce
String key = "sk_live_51N…";
// sonra
String key = System.getenv("KEY");

Aynı dosyayı geri alıp tekrar mühürlemek kasada kopya oluşturmaz, çünkü aynı değer her zaman aynı kayda bağlanır.

Java notu: static final sabit artık derleme anında değil çalışırken dolar. Sabiti switch case ya da anotasyon içinde kullanan kod taşımadan sonra derlenmez. Sırlar için bu pek olmaz.

4. Programı kasayla çalıştır

🎟

Benzetme: exec, kapıdaki görevli gibi çalışır. Programın "parolaya ihtiyacım var" der. Görevli sana "şu 4 değeri vereyim mi?" diye sorar. Sen evet dersen değerler yalnızca o çalıştırma boyunca verilir, iş bitince geri alınır.

$ sealbox exec -- python app.py        # Python
$ sealbox exec -- npm start            # Node.js
$ sealbox exec -- java Main.java       # Java
$ sealbox exec -- mvn spring-boot:run  # Maven / Gradle
  • -- işaretinden sonraki her şey senin normal komutun.
  • Önce onay penceresi açılır. Onayı atlatan bir bayrak ya da ortam değişkeni bilerek yok.
  • Programın çıktısında bilinen bir sır geçerse [GİZLİ:..] olarak basılır.

Not: Çıktı bir borudan geçtiği için etkileşimli ya da renkli terminal programları biraz farklı davranabilir. Süzgeç ters çevrilmiş ya da parçalanmış yazdırmayı yakalamaz. Asıl koruma onay penceresidir.

Karalanmış veriyi program kullanıyorsa

E-posta ya da TCKN gibi veriler etiketle karalanır, çünkü çoğu zaman çalışma anında gerekmez. Program gerçekten kullanıyorsa onu ortam değişkenine çevir:

$ sealbox vault expose __SECURE_EMAIL_8f2c…__
$ sealbox vault expose __SECURE_EMAIL_8f2c…__ --as ADMIN_EMAIL

5. Kasadaki değerleri yönet

Değerler hiçbir zaman terminale kendiliğinden yazılmaz. Göstermek ve silmek onay ister.

$ sealbox vault list                       # adlar ve etiketler (değer yok)
$ sealbox vault reveal DB_PASSWORD         # onay penceresinde göster
$ sealbox vault reveal __SECURE_TCKN_…__   # karalanmış veriye bak
$ sealbox vault set DB_PASSWORD            # değiştir ya da ekle
$ sealbox vault remove --unused            # kullanılmayanları sil

Geri almak kasadan silmez. Değer değiştiyse eskisi sahipsiz kalır, vault remove --unused temizler. Bir dosya etiketi ya da değişken adını hâlâ kullanıyorsa kayıt silinmez (zorlamak için --force).

6. Ekip arkadaşını ekle

⏱ 10 dakikaGereken: GitHub hesabında şifreli SSH anahtarı
🔑

Benzetme: Kasanın anahtarını kopyalayıp her arkadaşına kendi asma kilidiyle kilitli bir kutuda veriyorsun. Kutuları herkes görebilir, çünkü repoda duruyorlar. Ama her kutuyu yalnızca sahibinin anahtarı açar. O anahtar da GitHub'daki SSH anahtarı.

Ön hazırlık (herkes, bir kez)

Bilgisayarında şifreli bir SSH anahtarı olmalı ve açık kısmı GitHub hesabına eklenmiş olmalı. Şifresiz anahtar reddedilir, çünkü bilgisayardaki herhangi bir program (ajanlar dahil) onu okuyabilir.

$ ssh-keygen -t ed25519              # sorulunca şifre koy
$ ssh-keygen -p -f ~/.ssh/id_ed25519 # var olan anahtara sonradan şifre ekle
# ~/.ssh/id_ed25519.pub içeriğini GitHub → Settings → SSH keys'e ekle

Sen (sahip)

$ sealbox team init --github benim-adim   # ekibi kur, sahip sensin
$ sealbox team add arkadasim              # github.com/arkadasim.keys
$ sealbox team add ayse --owner           # o da kişi ekleyip çıkarabilsin
$ git add .sealbox
$ git commit -m "ekibe arkadasim eklendi"
$ git push

Arkadaşın

$ git pull
$ sealbox exec -- python app.py   # ilk açılışta SSH şifresi pencerede sorulur

İlk açılıştan sonra anahtar Windows deposunda önbelleğe alınır, bir daha sorulmaz.

Birini çıkarmak

$ sealbox team remove arkadasim   # kasa anahtarı yenilenir
$ sealbox team list               # üyeler ve SSH parmak izleri

Unutma: Çıkarılan kişi git geçmişindeki eski kasayı eski anahtarla açabilir. team remove bu yüzden görmüş olabileceği değerleri listeler. O parolaları kendi servislerinden (veritabanı, API paneli) yenile.

.gitignore kontrolü: Kök .gitignore bütün .sealbox/ klasörünü dışlıyorsa kasa repoya girmez. team komutları ve status bu durumda uyarır.

7. Anahtarı kaybedersen

🧯

Benzetme: Ev anahtarını kaybetmek için her zaman bir sebep vardır: Windows sıfırlanır, bilgisayar değişir, profil bozulur. Kurtarma kodu, güvendiğin bir yerde duran yedek anahtardır. Kodu 3 parçaya bölersen biri annende, biri kasada, biri USB'de durabilir. Herhangi 2'si kapıyı açar.

Bugün, her şey yolundayken (bir kez)

$ sealbox recovery setup                    # kod pencerede gösterilir, bir yere yaz
$ sealbox recovery shares                   # isteğe bağlı: 2-of-3 parçaya böl
$ sealbox recovery export D:\proje.sapkit   # isteğe bağlı: USB / bulut kiti

Kod ve parçalar terminale hiçbir zaman yazılmaz, yalnızca pencerede gösterilir. Kurtarma kopyaları ~/.sealbox/recovery/ altında durur, yani repoya girmez. Kod kullanıcı başına bir tanedir. Yeni projeler de sana kod sorulmadan bu kurtarmaya bağlanır.

Kötü gün geldiğinde

DurumNe yapmalı
Windows sıfırlandı, proje klasörü duruyorsealbox recovery restore ile kodu ya da 2 parçayı gir
Ekiptesin, bir sahip anahtarı yenilediBir şey yapma. Yeni anahtar SSH ile kendiliğinden alınır
Yeni bilgisayar, kasa klasörü de yoksealbox recovery restore --kit D:\proje.sapkit
Kod da yok, kit de yok, ekip de yoksealbox vault reset: yeni boş kasa açılır, eskisi kenara kaldırılır. Sırları servislerden yeniden al

Kilit açma sırası: Windows deposu → (ekip varsa) SSH anahtarı → hata mesajı ve kurtarma önerisi. Ne yapacağını bilmiyorsan sealbox status sana söyler.

8. VS Code ile çalışmak

Eklenti işi kendisi yapmaz. Düğmeleri sealbox komutuna bağlar. O yüzden önce komutun kurulu olması gerekir.

Kurulum

  1. pip install sealbox (ya da projenin .venv'ine kur).
  2. VS Code'da Eklentiler (Ctrl+Shift+X) → SealBox ara → Yükle. Ya da Marketplace sayfası. Cursor, Windsurf ya da VSCodium'da Open VSX'ten gelir.
  3. Elinde .vsix dosyası varsa: code --install-extension sealbox-0.3.0.vsix

Eklenti önce proje klasöründeki ve üstündeki .venv içinde arar, sonra PATH'e bakar. Başka bir yerdeyse ayarlardan sealbox.executable değerine yolunu yaz.

Günlük akış

  1. Yaz. Bir dosyaya parola yazıp kaydettiğinde o yer sarı çizilir.
  2. Ampule tıkla. "Bu dosyadaki sırları kasaya taşı" de. Değer kasaya gider, kod os.environ[...] olur.
  3. Üzerine gel. __SECURE_..__ etiketi ya da os.environ["X"] üzerinde "Değeri göster" çıkar. Onay penceresinden sonra görünür. "Kopyala" dersen pano 30 saniye sonra temizlenir.
  4. Çalıştır. Komut paletinden "SealBox: Programı kasayla çalıştır" de. Düz ▶ ile çalıştırıp KeyError alırsan eklenti bunu kendisi önerir.
  5. Durum çubuğuna bak. 🔒 3 sır kasada · 👥 2 kişi. Kurtarma kodu yoksa ⚠ yedeksiz yazar. Tıklayınca menü açılır.

Komut paleti (Ctrl+Shift+P → "SealBox")

KomutKarşılığı
SealBox: MenüTüm işlemler tek listede
SealBox: Projeyi tara (açık sır var mı?)seal --check
SealBox: Bu dosyadaki sırları kasaya taşıseal <dosya>
SealBox: Projedeki tüm sırları kasaya taşıseal
SealBox: Programı kasayla çalıştırexec -- …
SealBox: Kasadaki bir değeri göstervault reveal
SealBox: Karalanmış veriyi programa çalışırken vervault expose
SealBox: Kullanılmayan kayıtları kasadan silvault remove --unused
SealBox: Ekibe kişi ekle (GitHub kullanıcısı)team add
SealBox: Kurtarma kodu oluşturrecovery setup
SealBox: Kasayı kurtarma koduyla geri açrecovery restore

Güvenlik: Kurtarma kodu, parçalar ve SSH şifresi eklentiden geçmez. Hepsi Python'un açtığı ayrı pencerelerde gösterilir ya da sorulur. Eklenti yalnızca seal --check --json çıktısını okur. Bu çıktıda satır, sütun ve kategori vardır, değer yoktur.

9. CI'da açık sır kontrolü

seal --check açık sır bulursa çıkış kodu 1 döner. Bunu pull request'lerde bekçi olarak kullan:

.github/workflows/sealbox.yml
name: sealbox
on: [push, pull_request]
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install sealbox
      - run: sealbox seal --check

Bu adım kasayı açmaz, anahtar gerektirmez. Yalnızca diskte karalanmamış sır olup olmadığına bakar. Makinenin okuyabileceği rapor için --json ekle.

10. Sık sorulanlar

SealBox bir proxy mi?

Hayır. Ajanlar dosyaları doğrudan diskten okur, aradaki bir proxy bunu göremez. SealBox sırları dosyalardan kalıcı olarak çıkarır.

Kasayı repoya koymak güvenli mi?

Evet, bunun için tasarlandı. project.vault AES-256-GCM ile şifreli. Anahtarı repoda değil. .sealbox/.gitignore, yedekleri ve kilit dosyalarını dışarıda bırakır.

Daha önce commit ettiğim sırlar ne olacak?

Git geçmişinde kalırlar; SealBox geçmişi silmez. sealbox history, kasadaki hangi değerlerin eski commit'lerde geçtiğini ve push'lanıp push'lanmadığını söyler. O değerleri servislerinden değiştir, bir daha olmaması için sealbox hook install çalıştır.

Her sırrı bulur mu?

Hayır. Regex; parçalanmış, kodlanmış (\u0040, hex, ROT13) ya da düz yazı içindeki sırları kaçırabilir. Raporu incele, gerekirse custom_rules ekle. İsimler için person_names listesini kullan.

İngilizce kullanabilir miyim?

sealbox --lang en … ya da SEALBOX_LANG=en. Varsayılan dil bilgisayarın dilidir. Eklenti de VS Code'un dilini izler.

Eski adla (secure-ai-proxy) kurmuştum.

Hiçbir şey yapmana gerek yok. Eski .secure_proxy/ klasörleri ve secure_proxy.toml okunur. Kimlik deposundaki eski kayıt ilk açılışta yeni ada taşınır.