Säkerhet och best practices

Reseller-API

API:et är utformat med antagandet att varje anrop har direkt ekonomisk påverkan och kan komma åt känsliga serveruppgifter. Säkerhetskraven ligger därför klart över REST-standard.

Inbyggda skyddsmekanismer

  • HMAC-SHA256: Varje förfrågan signeras med HMAC-SHA256 över metod, sökväg, tidsstämpel, nonce och body-hash. Verifiering i konstant tid (hash_equals).
  • AES-256-GCM: Hemligheter lagras uteslutande som AES-256-GCM-chiffertext (libsodium). Huvudnyckeln ligger utanför databasen i /etc/kh-reseller-api/master.key.v{N}.
  • Replay protection: Tidsstämpelfönster +-300s, nonce-cache 600s. En framgångsrikt signerad förfrågan kan inte skickas igen.
  • Scope-based authorization: Uttrycklig behörighetslista per nyckel. Skrivande och känsliga behörigheter måste aktiveras uttryckligen.
  • IP whitelist (optional): Valfri IP-vitlista per nyckel (CIDR-notation, IPv4 och IPv6).
  • Rate limit: Flerskiktad: per nyckel (minut + dag) och per IP (minut). Token-bucket med burst-tolerans.
  • Idempotency: Beställningar och destruktiva tjänsteåtgärder kräver en Idempotency-Key. 24h uppspelningsskydd mot nätverksåterförsök.
  • Tenant isolation: Varje databasfråga filtrerar strikt på ditt konto-ID. Åtkomst mellan tenanter är konstruktionsmässigt omöjlig.
  • Tamper-evident audit log: Varje förfrågan landar i granskningsloggen med chain-hash (chain_hash[n] = sha256(chain_hash[n-1] || row_n)). Retroaktiv manipulation upptäcks omedelbart via hash-brott.
  • Credentials.read alerting: Varje credentials.read-anrop genererar en dedikerad granskningspost samt valfritt bekräftelsemejl till kontoägaren.
  • SSRF-guarded webhooks: Webhook-URL:er kontrolleras före lagring: endast HTTPS, DNS-uppslag får uteslutande returnera publika IP-adresser (inga RFC1918, inga link-local).

Best practices på din sida

  • Lagra hemligheten i en lösenordshanterare (HashiCorp Vault, AWS Secrets Manager, Doppler, 1Password), aldrig i kod, aldrig i ett git-repo.
  • Rotera hemligheten regelbundet (minst årligen eller efter personalförändringar). Rotation med ett klick i kundportalen, den gamla hemligheten blir omedelbart ogiltig.
  • En dedikerad nyckel per användningsfall med minimal behörighet (endast läsning om möjligt). Inga "god-mode"-nycklar.
  • Om din integration körs från fasta IP-adresser (moln, bastion): sätt en IP-vitlista.
  • Generera Idempotency-Key på serversidan och spara den, generera den inte slumpmässigt vid varje retry. Rekommendation: UUIDv4 per logisk beställning.
  • Sätt en webhook till din egen URL, bevaka minst order.created och credentials.read som händelseström.

Säkerhets-disclosure

Rapportera säkerhetsbrister konfidentiellt till security@kernelhost.com. PGP-nyckel på begäran. Svar inom 24 timmar garanteras. Bug-bounty-program under förberedelse.