API, her çağrının doğrudan finansal etkisi olduğu ve hassas sunucu erişim bilgilerine ulaşabileceği varsayımıyla tasarlanmıştır. Bu nedenle güvenlik gereksinimleri REST standardının çok üzerindedir.
Uygulanan koruma mekanizmaları
- HMAC-SHA256: Her istek; metot, yol, zaman damgası, nonce ve gövde hash'i üzerinden HMAC-SHA256 ile imzalanır. Sabit zamanlı doğrulama (hash_equals).
- AES-256-GCM: Gizli anahtarlar yalnızca AES-256-GCM şifreli olarak saklanır (libsodium). Ana anahtar veritabanı dışında /etc/kh-reseller-api/master.key.v{N} yolunda tutulur.
- Replay protection: Zaman damgası penceresi +-300s, nonce önbelleği 600s. Başarıyla imzalanmış bir istek tekrar gönderilemez.
- Scope-based authorization: Anahtar başına açık kapsam/izin listesi. Yazma yetkili ve hassas kapsam/izinler açıkça etkinleştirilmek zorundadır.
- IP whitelist (optional): Anahtar başına isteğe bağlı IP beyaz listesi (CIDR gösterimi, IPv4 ve IPv6).
- Rate limit: Çok katmanlı: anahtar başına (dakika + gün) ve IP başına (dakika). Burst toleranslı token bucket.
- Idempotency: Siparişler ve yıkıcı servis aksiyonları Idempotency-Key gerektirir. Ağ tekrar denemelerine karşı 24 saatlik replay koruması.
- Tenant isolation: Her veritabanı sorgusu hesap kimliğinize sıkı filtre uygular. Kiracılar arası erişim tasarım gereği imkânsızdır.
- Tamper-evident audit log: Her istek, zincir hash'i ile denetim kaydına işlenir (chain_hash[n] = sha256(chain_hash[n-1] || row_n)). Geriye dönük manipülasyon hash kırılmasıyla anında tespit edilir.
- Credentials.read alerting: Her credentials.read çağrısı özel bir denetim kaydı ve hesap sahibine isteğe bağlı bir onay e-postası oluşturur.
- SSRF-guarded webhooks: Webhook URL'leri kayıt öncesinde denetlenir: yalnızca HTTPS, DNS çözümlemesi yalnızca herkese açık IP'ler döndürmelidir (RFC1918 yok, link-local yok).
Bayi tarafında en iyi uygulamalar
- Gizli anahtarı bir gizli anahtar yöneticisinde saklayın (HashiCorp Vault, AWS Secrets Manager, Doppler, 1Password), asla kodda, asla git deposunda tutmayın.
- Gizli anahtarı düzenli olarak döndürün (en az yılda bir veya personel değişikliği sonrası). Müşteri panelinden tek tıkla rotasyon, eski gizli anahtar derhal geçersiz olur.
- Her kullanım senaryosu için minimum kapsam/izinli ayrı bir anahtar (mümkünse salt okunur). "Tam yetkili" anahtardan kaçının.
- Entegrasyonunuz sabit IP'lerden çalışıyorsa (bulut, bastion): IP beyaz listesi tanımlayın.
- Idempotency-Key değerini sunucu tarafında üretip kalıcı saklayın, her yeniden denemede rastgele üretmeyin. Öneri: mantıksal sipariş başına UUIDv4.
- Webhook'u kendi URL'nize yönlendirin, en azından order.created ve credentials.read olaylarını olay akışı olarak izleyin.
Güvenlik bildirimi
Güvenlik açıklarını lütfen gizli olarak security@kernelhost.com adresine bildirin. Talep üzerine PGP anahtarı verilir. 24 saat içinde yanıt garantilidir. Bug bounty programı hazırlık aşamasındadır.

