レート制限
API やサービスへのリクエスト数に上限を設け、過負荷を防ぐ仕組み
APIセキュリティ
レート制限とは
レート制限 (Rate Limiting) は、API やサービスへのリクエスト数に上限を設け、過負荷、DDoS 攻撃、リソースの不公平な消費を防ぐ仕組みである。詳細なアルゴリズムは「レート制限パターン」「レート制限アルゴリズム」を参照。
なぜ必要か
レート制限は、過負荷によるサービスダウンの防止、1 ユーザーによるリソース独占の防止 (公平性)、下流サービス (Bedrock 等) の呼び出しコスト制御、DDoS 攻撃の緩和を目的とする。
AWS での多層レート制限
CloudFront (WAF) → API Gateway → Lambda → DynamoDB
↑ IP ベース ↑ API キーベース ↑ ユーザーベース
2000 req/5min 100 req/sec 10 req/min
| レイヤー | サービス | 粒度 |
|---|---|---|
| エッジ | WAF | IP アドレス |
| API | API Gateway スロットリング | API キー、ステージ |
| アプリケーション | Lambda + DynamoDB | ユーザー、テナント |
429 Too Many Requests
HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1711929600
クライアントは Retry-After ヘッダーに従って待機し、リトライする。
クライアント側の対応
async function fetchWithRetry(url: string, retries = 3): Promise<Response> {
const res = await fetch(url);
if (res.status === 429 && retries > 0) {
const delay = parseInt(res.headers.get('Retry-After') || '1') * 1000;
await new Promise(r => setTimeout(r, delay));
return fetchWithRetry(url, retries - 1);
}
return res;
}
実務での活用方法は関連書籍にも詳しい。