Bezpečnost a osvědčené postupy

Reseller API

API je navrženo s předpokladem, že každé volání má přímý finanční dopad a může přistupovat k citlivým serverovým přístupovým údajům. Bezpečnostní požadavky proto výrazně přesahují standardní úroveň REST.

Nasazená bezpečnostní opatření

  • HMAC-SHA256: Každý požadavek je podepsán HMAC-SHA256 přes metodu, cestu, časové razítko, nonce a hash těla. Ověření v konstantním čase (hash_equals).
  • AES-256-GCM: Tajné klíče jsou ukládány výhradně jako šifrovaný text AES-256-GCM (libsodium). Hlavní klíč leží mimo databázi v /etc/kh-reseller-api/master.key.v{N}.
  • Replay protection: Časové okno +-300 s, cache nonce 600 s. Úspěšně podepsaný požadavek nelze odeslat znovu.
  • Scope-based authorization: Explicitní seznam oprávnění pro každý klíč. Zapisovací a citlivá oprávnění musí být výslovně povolena.
  • IP whitelist (optional): Volitelný seznam povolených IP pro každý klíč (notace CIDR, IPv4 i IPv6).
  • Rate limit: Vícevrstvé: pro každý klíč (minuta a den) a pro každou IP (minuta). Token bucket s tolerancí burstu.
  • Idempotency: Objednávky a destruktivní servisní akce vyžadují Idempotency-Key. Ochrana proti opakování 24 hodin proti opakovaným pokusům v síti.
  • Tenant isolation: Každý databázový dotaz tvrdě filtruje podle Vašeho ID účtu. Přístup napříč nájemníky je už konstrukcí nemožný.
  • Tamper-evident audit log: Každý požadavek se ukládá do auditního logu s chain hashem (chain_hash[n] = sha256(chain_hash[n-1] || row_n)). Zpětná manipulace je okamžitě detekována zlomem hashe.
  • Credentials.read alerting: Každé volání credentials.read vytvoří dedikovaný auditní záznam a volitelný potvrzovací e-mail vlastníkovi účtu.
  • SSRF-guarded webhooks: Webhook URL jsou před uložením prověřovány: pouze HTTPS, DNS resolution smí vracet pouze veřejné IP (žádné RFC1918, žádné link-local).

Osvědčené postupy na Vaší straně

  • Tajný klíč ukládejte do správce tajných klíčů (HashiCorp Vault, AWS Secrets Manager, Doppler, 1Password), nikdy ne v kódu, nikdy ne v git repozitáři.
  • Tajný klíč pravidelně obnovujte (minimálně jednou ročně nebo po personální změně). Obnova v zákaznickém portálu jedním kliknutím, starý tajný klíč je okamžitě neplatný.
  • Pro každý případ použití jeden vyhrazený klíč s minimálním oprávněním (pokud možno pouze pro čtení). Žádné klíče v režimu "god-mode".
  • Pokud Vaše integrace běží z pevných IP (cloud, bastion): nastavte seznam povolených IP.
  • Idempotency-Key generujte na straně serveru a uchovávejte jej, neregenerujte při každém opakování. Doporučení: UUIDv4 pro každou logickou objednávku.
  • Nastavte webhook na vlastní URL, sledujte minimálně order.created a credentials.read jako proud událostí.

Bezpečnostní disclosure

Bezpečnostní problémy hlaste důvěrně na security@kernelhost.com. PGP klíč na vyžádání. Reakce do 24 hodin zaručena. Bug-bounty program v přípravě.