API キーをローテーションする
POST /v1/api-keys/{key_id}:rotate · 権限 api-keys:write · 任意 Idempotency-Key
キーをローテーションします。同じ名前、種類、権限、allowed_cidrs を持つ新しいキーを作成して返します。古いキーは overlap_hours の間は有効なままで、その後は使用できなくなります。
- 新しいキー。 レスポンスには新しいキーが含まれます。
rotated_fromには古いキーの ID が入り、keyには生のキーが一度だけ含まれます(Cache-Control: no-store)。新しいキーをデプロイしたあと、古いキーを失効させてください。 - 重複期間。 古いキーには将来の
revoked_atが設定され、revoke_reason: rotatedになります。overlap_hours: 0の場合は直ちに取り消されます。 - 権限の昇格なし。 自身より多くの権限を持つキーはローテーションできません。
restrictedキーはsecretキーをローテーションできません。新しいキーの有効期限は、呼び出し元のキーの有効期限を超えられません。キーが自身をローテーションする場合も同様です(有効期限の延長はダッシュボードで行ってください)。allowed_cidrsを持つ呼び出し元のキーは、自身のネットワーク内に制限されたキーだけをローテーションできます。ダッシュボードで作成されたキーと、そこからローテーションされたすべてのキーは、自身またはダッシュボードからのみローテーションできます(permission_escalation)。新しいキーは古いキーのcreated_byを引き継ぎます。ローテーションを実行したキーは監査ログに記録されます。 - 冪等な再実行。 同じ
Idempotency-Keyでの再実行ではkeyが省略され、secret_redacted: trueが返されます。
リクエスト
| パラメーター | 配置 | 説明 |
|---|---|---|
key_id |
path | API キーの ID(key_…)。 |
本文:
本文は省略可能です。省略するとすべての既定値が適用されます。
| フィールド | 型 | 説明 |
|---|---|---|
overlap_hours |
integer | 省略可。0〜168、既定値は 24。古いキーが有効なままでいる時間数です。 |
expires_at |
string (date-time) | 省略可。新しいキーの有効期限です。既定値は現在から 365 日後で、呼び出し元のキーの有効期限以内、かつ最大 730 日までです。 |
レスポンス
200 OK、Cache-Control: no-store。新しいキーのオブジェクトと key を返します。
{
"id": "key_0000000000000000000000001z",
"name": "ci",
"type": "restricted",
"permissions": ["users:read"],
"allowed_cidrs": [],
"last4": "xxxx",
"created_by": "key_…",
"created_at": "2026-10-01T10:00:00Z",
"expires_at": "2027-10-01T10:00:00Z",
"last_used_at": null,
"last_used_ip": null,
"rotated_from": "key_…",
"revoked_at": null,
"revoke_reason": null,
"key": "<shown once>"
}
エラー
| HTTP | code |
発生条件 |
|---|---|---|
| 401 | unauthenticated |
キーが存在しない、無効である、または取り消されています。 |
| 403 | insufficient_permissions |
キーに必要な権限がありません。 |
| 403 | permission_escalation |
リクエストにより、呼び出し元のキーより多くの権限、より広いネットワーク範囲、またはより後の有効期限が付与されることになる場合、restricted キーが自身の権限を超えて作成、ローテーション、取り消しを行おうとした場合、または他のキーがダッシュボードで作成されたキーをローテーションまたは取り消そうとした場合。 |
| 404 | not_found |
この環境にキーが存在しません。 |
| 409 | conflict |
キーはすでに取り消されている、期限切れである、またはすでにローテーション済みです(有効ではありません)。 |
| 409 | api_key_limit_reached |
環境にすでに上限の 50 個の有効なキーがあります。 |
| 422 | validation_failed |
本文が無効です。overlap_hours が 0〜168 の範囲外である、または expires_at が過去、もしくは 730 日を超えて先の日時になっています。 |
例
curl -X POST "https://api.eu.keenauth.com/v1/api-keys/key_0000000000000000000000001z:rotate" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"overlap_hours":24}'