Bezpieczeństwo i dobre praktyki

Reseller API

API zostało zaprojektowane przy założeniu, że każde wywołanie ma bezpośredni wpływ finansowy i może umożliwiać dostęp do poufnych danych dostępowych serwerów. Wymagania bezpieczeństwa są dlatego znacznie wyższe niż standardowe REST.

Wdrożone mechanizmy ochronne

  • HMAC-SHA256: Każde żądanie jest podpisywane HMAC-SHA256 obejmującym metodę, ścieżkę, znacznik czasu, nonce oraz skrót treści. Weryfikacja w czasie stałym (hash_equals).
  • AES-256-GCM: Tajne klucze są utrwalane wyłącznie jako szyfrogramy AES-256-GCM (libsodium). Klucz główny znajduje się poza bazą danych w /etc/kh-reseller-api/master.key.v{N}.
  • Replay protection: Okno znacznika czasu +-300s, pamięć podręczna nonce 600s. Pomyślnie podpisane żądanie nie może zostać odtworzone ponownie.
  • Scope-based authorization: Jawna lista zakresów uprawnień dla każdego klucza. Zakresy zapisujące i wrażliwe muszą być włączone w sposób jawny.
  • IP whitelist (optional): Opcjonalna biała lista IP dla każdego klucza (notacja CIDR, IPv4 oraz IPv6).
  • Rate limit: Wielowarstwowy: na klucz (minuta + dzień) i na IP (minuta). Token bucket z tolerancją burst.
  • Idempotency: Zamówienia i destrukcyjne akcje serwisowe wymagają nagłówka Idempotency-Key. Ochrona przed powtórzeniami przez 24h przy ponownych próbach sieciowych.
  • Tenant isolation: Każde zapytanie do bazy danych filtruje twardo po identyfikatorze Państwa konta. Dostęp międzylokatorski jest niemożliwy z konstrukcji.
  • Tamper-evident audit log: Każde żądanie trafia do dziennika audytu z chain-hash (chain_hash[n] = sha256(chain_hash[n-1] || row_n)). Retrospektywna manipulacja jest wykrywana przez przerwanie łańcucha skrótów.
  • Credentials.read alerting: Każde wywołanie credentials.read tworzy dedykowany wpis audytu oraz opcjonalny e-mail potwierdzający do właściciela konta.
  • SSRF-guarded webhooks: URL-e webhooków są sprawdzane przed zapisem: wyłącznie HTTPS, rozwiązanie DNS musi zwracać tylko publiczne adresy IP (bez RFC1918, bez link-local).

Dobre praktyki po Państwa stronie

  • Tajny klucz proszę przechowywać w menedżerze sekretów (HashiCorp Vault, AWS Secrets Manager, Doppler, 1Password), nigdy w kodzie ani w repozytorium git.
  • Tajny klucz proszę regularnie rotować (przynajmniej raz w roku lub po zmianach kadrowych). Rotacja w panelu klienta jednym kliknięciem, stary klucz zostaje natychmiast unieważniony.
  • Dla każdego przypadku użycia jeden dedykowany klucz z minimalnym zakresem uprawnień (jeśli to możliwe, tylko do odczytu). Bez kluczy w trybie "god mode".
  • Jeżeli integracja działa ze stałych adresów IP (chmura, bastion), proszę ustawić białą listę IP.
  • Idempotency-Key proszę generować po stronie serwera i utrwalać, a nie generować świeży przy każdej próbie ponowienia. Zalecenie: UUIDv4 na każde logiczne zamówienie.
  • Proszę ustawić webhook na własny URL i obserwować jako strumień zdarzeń co najmniej order.created oraz credentials.read.

Zgłaszanie podatności

Podatności bezpieczeństwa prosimy zgłaszać poufnie na security@kernelhost.com. Klucz PGP na życzenie. Reakcja w ciągu 24h gwarantowana. Program bug bounty w przygotowaniu.