Chaque clé API a une liste allowedHosts configurable. Une requête venant d’une IP absente de la liste est refusée 403.
Configuration
À la création d’une clé (Développeurs → Clés API → Nouvelle clé) ou via PATCH :
PATCH /v1/api-keys/<id>
{
"allowedHosts": ["52.91.123.45", "52.91.123.46"]
}
Wildcard * (défaut : ["*"]), 0.0.0.0 ou liste vide = pas de restriction.
Use cases
| Setup | Liste recommandée |
|---|
| Backend monolithe sur serveur dédié | IP statique du serveur |
| AWS ECS / Lambda avec NAT Gateway | IP du NAT (statique) |
| Cloudflare Workers | Pas d’IP fixe → laissez vide, sécurisez via clé |
| Vercel serverless | Vercel n’a pas d’IP fixe sur le tier gratuit → laissez vide, ou utilisez Vercel Edge Config avec une clé scopée |
| Dev local | 127.0.0.1 ou laissez vide (clé sk_test_* uniquement) |
Ne mettez pas votre IP de bureau dans la liste pour une clé de production. Si vous avez besoin d’appeler la prod depuis votre laptop, créez une clé séparée scoped lecture uniquement.
Derrière un proxy
Si vous êtes derrière un proxy ou un load balancer, assurez-vous qu’il transmet l’IP source réelle de l’appelant, sinon l’IP comparée à la liste sera celle du proxy interne.
Combinaison avec scopes
L’allowlist IP et les scopes s’appliquent tous les deux. Une requête est refusée 403 si :
- l’IP n’est pas autorisée (
403, sans code d’erreur stable) ;
- ou le scope requis manque (
403 avec le code INSUFFICIENT_SCOPE).
Défense en couches : même si une clé fuite, l’attaquant doit aussi appeler depuis une IP autorisée pour l’utiliser.