> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arouter.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# API Key ローテーション

> ゼロダウンタイムで ARouter API Key をローテーションするためのベストプラクティス。定期的な認証情報の更新でアプリケーションを安全に保つ。

API Key を定期的にローテーションすることで、漏洩した場合の影響範囲を最小化し、多くのセキュリティコンプライアンス要件を満たすことができます。ARouter のキー管理 API はゼロダウンタイムでのローテーションをサポートしています。

## ローテーション戦略

最も安全なローテーションパターンは**作成してから削除**です：

1. 古いキーと同じ権限で新しいキーを作成する
2. アプリケーションに新しいキーをデプロイする
3. 新しいキーが正常に動作することを確認する
4. 古いキーを削除する

これにより、新しいキーの動作が確認されるまで古いキーでトラフィックが継続するため、ダウンタイムが発生しません。

***

## ステップ 1：新しいキーを作成する

[キー管理 API](/jp/api-reference/keys/create-key) を使用して代替キーを作成します：

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST https://api.arouter.ai/v1/keys \
      -H "Authorization: Bearer lr_live_xxxx" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "production-v2",
        "allowed_providers": ["openai", "anthropic", "google"],
        "spending_limit": 500.00
      }'
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests

    response = requests.post(
        "https://api.arouter.ai/v1/keys",
        headers={"Authorization": "Bearer lr_live_xxxx"},
        json={
            "name": "production-v2",
            "allowed_providers": ["openai", "anthropic", "google"],
            "spending_limit": 500.00,
        },
    )
    new_key = response.json()["key"]
    print(f"New key created: {new_key[:8]}...")
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    const response = await fetch("https://api.arouter.ai/v1/keys", {
      method: "POST",
      headers: {
        Authorization: "Bearer lr_live_xxxx",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        name: "production-v2",
        allowed_providers: ["openai", "anthropic", "google"],
        spending_limit: 500.0,
      }),
    });

    const { key } = await response.json();
    console.log(`New key: ${key.substring(0, 8)}...`);
    ```
  </Tab>
</Tabs>

**返されたキー値をすぐに保存してください** — ARouter は作成時に一度だけ完全なキーを返します。

***

## ステップ 2：アプリケーションを更新する

デプロイ環境の `AROUTER_API_KEY` 環境変数（または対応するシークレット）を更新します：

```bash theme={null}
# .env ファイルの例
AROUTER_API_KEY=lr_live_new_key_here

# Kubernetes シークレットを更新する例
kubectl create secret generic arouter-credentials \
  --from-literal=api-key=lr_live_new_key_here \
  --dry-run=client -o yaml | kubectl apply -f -
```

新しいキーを反映するために、アプリケーションを再デプロイまたは再起動します。

***

## ステップ 3：新しいキーを確認する

古いキーを削除する前に、新しいキーが正常に動作することを確認します：

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl https://api.arouter.ai/v1/models \
      -H "Authorization: Bearer lr_live_new_key_here"
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    from openai import OpenAI

    # 新しいキーでテスト
    client = OpenAI(
        base_url="https://api.arouter.ai/v1",
        api_key="lr_live_new_key_here",
    )

    response = client.chat.completions.create(
        model="openai/gpt-5.4",
        messages=[{"role": "user", "content": "ping"}],
        max_tokens=5,
    )
    print("New key verified:", response.choices[0].message.content)
    ```
  </Tab>
</Tabs>

[ARouter ダッシュボード](https://arouter.ai/keys) を確認して、リクエストが新しいキーに表示されていることを確認します。

***

## ステップ 4：古いキーを削除する

新しいキーの動作が確認されたら、古いキーの ID を使用して削除します：

<Tabs>
  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE https://api.arouter.ai/v1/keys/key_oldid \
      -H "Authorization: Bearer lr_live_new_key_here"
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests

    requests.delete(
        "https://api.arouter.ai/v1/keys/key_oldid",
        headers={"Authorization": "Bearer lr_live_new_key_here"},
    )
    print("Old key deleted")
    ```
  </Tab>
</Tabs>

***

## 自動ローテーション

高セキュリティ環境では、CI/CD システムやシークレットマネージャーを使用してスケジュールに従ってローテーションを自動化します：

### GitHub Actions の例

```yaml theme={null}
name: Rotate ARouter Key

on:
  schedule:
    - cron: '0 0 1 * *'  # 毎月

jobs:
  rotate:
    runs-on: ubuntu-latest
    steps:
      - name: Create new key
        id: create
        run: |
          NEW_KEY=$(curl -s -X POST https://api.arouter.ai/v1/keys \
            -H "Authorization: Bearer ${{ secrets.AROUTER_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d '{"name": "production-auto-rotated"}' \
            | jq -r .key)
          echo "new_key=$NEW_KEY" >> $GITHUB_OUTPUT

      - name: Update secret
        uses: gliech/create-github-secret-action@v1
        with:
          name: AROUTER_API_KEY
          value: ${{ steps.create.outputs.new_key }}
          token: ${{ secrets.GH_TOKEN }}
```

***

## アクティブなキーを一覧表示する

使用中のキーを監査するために、アクティブなキーをすべて一覧表示します：

```bash theme={null}
curl https://api.arouter.ai/v1/keys \
  -H "Authorization: Bearer lr_live_xxxx"
```

レスポンス：

```json theme={null}
{
  "data": [
    {
      "id": "key_abc123",
      "name": "production-v2",
      "created_at": "2025-01-15T10:00:00Z",
      "last_used_at": "2025-04-01T08:30:00Z",
      "spending_limit": 500.00
    },
    {
      "id": "key_def456",
      "name": "staging",
      "created_at": "2025-03-01T09:00:00Z",
      "last_used_at": "2025-04-01T07:15:00Z",
      "spending_limit": 50.00
    }
  ]
}
```

***

## ベストプラクティス

* **スケジュールに従ってローテーションする** — 多くのアプリケーションにとって毎月のローテーションが良い基準です
* **漏洩が疑われたらすぐにローテーションする** — 次回のスケジュールローテーションを待たないでください
* **わかりやすい名前を使用する** — キー名にバージョンや日付を含める（例：`production-2025-04`、`production-v3`）
* **消費限度を設定する** — 本番キーには常に `spending_limit` を設定してリスク露出を抑える
* **環境ごとに別々のキーを使用する** — 本番環境とステージング環境でキーを共有しない
* **定期的に監査する** — 毎月キーのリストを確認し、使用されていないキーを削除する
* **キーをシークレットマネージャーに保存する** — バージョン管理の `.env` ファイルではなく、AWS Secrets Manager、HashiCorp Vault または同等のツールを使用する

完全なキー管理ガイドについては [キー管理](/jp/guides/key-management) を、完全な API リファレンスについては[キー管理 API](/jp/api-reference/keys/create-key) を参照してください。
