Geçenlerde bir uyarı maili geldi, kredi dolmuş diye. "Yok artık, daha yeni yükledim" diye düşündüm. Hesabı açtım, kullanım grafiği tavan yapmış. Meğerse OpenAI API anahtarım, public bir GitHub reposunda 3 aydır cirit atıyormuş. Kafayı yiyecektim resmen.
Olanlar oldu, panikle loglara ve commit geçmişime daldım. İlk projeyi kurarken hızlıca test etmek istemiştim. Anahtarı direkt kodun içine yazıverdim şu şekilde:
Python:
api_key = "sk-...benim-süper-gizli-anahtarım..."
Sonra tabii "Bunu .env'e alayım, .gitignore'ı da ayarlarım" diye düşünüp, unutmuşum! Bir sonraki commit'te dosyayı gönderiverdim. .env dosyasını oluşturup anahtarı taşıdım ama .gitignore dosyasına eklemeyi unuttuğum için, .env dosyam da repo'ya pushlanmış. Şaka gibi ama oldu işte.
Önce hemen panik modunda eski anahtarı revoke ettim (iptal). API sağlayıcısının panelinden yeni bir tane oluşturdum. Sonra tüm repo geçmişini (history) tarayıp, o anahtarın ve .env dosyasının izini silmem gerekiyordu. git filter-repo gibi araçlar var ama dikkatli kullanmak lazım, tüm geçmişi yeniden yazar.
En kritik ders: İLK commit'ten önce .gitignore'ı hazırlamak ve içine `.env` satırını eklemek. Bir de pre-commit hook'u kurmak fena fikir değil, .env dosyasını kontrol etsin.
Şimdi her yeni projede ilk işim şu:
Bash:
touch .env .gitignore
echo ".env" >> .gitignore
echo ".env.local" >> .gitignore
Sonra config dosyamda da şöyle bir kontrol yapıyorum:
Python:
import os
from dotenv import load_dotenv
load_dotenv() # .env dosyasını yükler
API_KEY = os.getenv("API_KEY")
if not API_KEY:
raise ValueError("API_KEY .env dosyasında tanımlı değil!")
Bu sayede anahtar yoksa proje başlamıyor bile. Bir de artık private repo kullanmıyorsam, pushlamadan önce iki kere düşünüyorum.
Siz de böyle bir "güvenlik faciası" yaşadınız mı? Ya da .env ve .gitignore konusunda daha bombaproof bir yönteminiz var mı? Anlatın da öğrenelim...