3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIモデルのAPIキーをKongで守る

3
Posted at

はじめに

AIのAPIキーが流出して課金被害にあったという事例はみなさんも聞いたことがあると思います。
認証の設定ミスだったり、GitHubにあげてしまったり、盗まれたり、
経路は様々ですが、社内であってもAPIキーを渡すことはリスクとなっています。

今回、社内で複数のAIモデルのAPI利用を始めるにあたって、
Kongを利用することでAIのAPIキーを公開することなく、
メンバにAPIを利用してもらえる状態を作れたので、その方法をご紹介します。

概要

API GWにAI Gateway(AI Proxy Advanced)とKey Authenticationプラグインを設定します。
AI Proxy AdvancedにAIモデルのAPIキーを、
Key AuthenticationにRealmsを紐づけることで
Realmsに所属するCentrally-managed Consumersはユーザーごとに発行したKeyで認証するので、
API Keyをユーザーに渡すことなく、AIのAPI利用を実現出来ます。
ユーザーごとにUser Keyを発行するので、使用状況などもDashBoardsから確認出来るようになります。
ai-apikey-overview.png

設定手順

1.ユーザ作成

Realms

Kong Konnectでのユーザーにあたる機能はConsumersです。
そのConsumersをグルーピングするためにますはRealmsを作成します。
realms.png

初回作成の場合は許可するCPはないと思うので、一旦defaultで存在するCPを選択します。
後述の手順で、対象のCPを再度設定をします。
new-realms.png

Centrally-managed Consumers

Kong Konnect v3.10以上であれば、Centrally-managed Consumersを利用することが出来ます。
CPスコープのConsumersと違い、複数のCPを横断的に利用することが出来るので、ユーザーを一元的に管理することが出来ます。

UsernameはKong Konnectのアカウント名と同一が分かりやすいと思います。(今回はQiitaのアカウント名です)
先ほど作成したRealmsを設定しましょう。
new-consumers.png

作成完了後、Key authenticationタブから、そのユーザー専用のキーを作成します。
consumers.png

任意のカスタムキーを設定したい場合はUser generated keyを選択しますが、ランダム文字列でいい場合はそのまま作成します。
今回は社内の都合でBearer認証も一緒に行いたかったので、User generated keyで無理矢理Bearerという文字列ごとtokenとして登録します。
create-key-authentication.png

(Bearer認証を行う場合のみ)
tokenはランダム文字列生成とかで作成するかと思いますが、
仕様上、数字や記号でスタートすると認証エラーが発生してしまうので、
アルファベットから始まっているtokenを作成してください。
Ex) U7tI2rkrQbuTUehX3pB9YU4scWircPyx_d3d1ecbe

2.API Gateway作成

API Gateway

API GW作成についてはご存知の方も多いでしょう。
今回はAPIキーをラップしたいだけなので、
何も自分でたてる必要のないServerlessで作成します。
create-api-gateway.png

Key Authenticaion

プラグインからKey Authenticationを選択します。
plugin.png

Key Namesに任意の項目名と
additional settingsであるIdentity Realmsに先ほど作成したRealmsを設定します。
Bearer認証を行う場合は、Key NamesはAuthorizationと入力します。
plugin-key-authentication.png

各モデルのSDKで接続する場合は、それぞれの仕様に基づくAPIキー認証を受け入れられる必要があります。

記事公開時点では
OpenAIAuthorization
GeminiAuthorization
Claudex-api-key
となっています。

3.AI Gateway作成

AI Gateway

AI Gateway nameとPathは任意で
Select gatewayで先ほど作成したAPI GWを選択します。
new-ai-gateway.png

Load balancingの項目からAIモデルの設定を行います。
LLM ProviderやRoute typeは使用用途に合わせて設定してください。
Authentication from gateway to LLMではProvided by the AI gatewayを選択し、
入力欄にAIモデルのAPIキーを入力します。
connect-llm.png

4.Realms設定

Realms

忘れずにRealmsの設定に戻りましょう。
右端の︙からEditが出来ます。
realms-settings.png

暫定で設定していたdefaultを削除して、作成したAPI Gatewayを設定します。
edit-realms.png

5.実践

AI gatewayのOverviewのQuickstartにcurlで動かせる接続テスト用のコマンドがあるので、
これをベースに接続テストを行います。
ai-gateway-overview.png

Consumersで作成したKeyをheaderに設定します。

curl -X POST https://XXXXXXXX.com/openai \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d '{
  "messages": [
    {
      "role": "user",
      "content": "Who are you?"
    }
  ],
  "model": "gpt-5.4"
}'

connect-test-openai.png

同じ形式でGeminiも作ってみました。
AI Gatewayの実態はAPI Gatewayに設定するAI Proxy Advancedというプラグインなので、
1つのAPI Gatewayに対していくつも設定することが出来ます。
同じAPI Gatewayに設定するとドメイン部分は共通なので、設定したPathを変更することでLLM自体を切り替えることが出来ます。

curl -X POST https://XXXXXXXX.com/gemini \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d '{
  "messages": [
    {
      "role": "user",
      "content": "Who are you?"
    }
  ],
  "model": "gemini-3-flash-preview"
}'

connect-test-gemini.png

Who are you?という質問に対して
OpenAIは一般的なLLMとしての回答ですが、
Geminiは人間的な自己紹介をしていますね。
無事にそれぞれ意図したモデルから回答が返ってきています。

Bearer認証ではないパターンだとこんな感じになります。

curl -X POST https://XXXXXXXX.com/openai \
-H 'Content-Type: application/json' \
-H 'apikey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
-d '{
  "messages": [
    {
      "role": "user",
      "content": "Who are you?"
    }
  ],
  "model": "gpt-5.4"
}'

6.ダッシュボード作成

AI Gateway

リクエスト数やToken数などはAI GatewayのOverviewから確認することが出来ますが、
誰がどのくらい使ったかや、最近の使用量の変化などは表示されません。
ai-gateway-analytics.png

Dashboards

詳細を確認するためにはダッシュボード作成が必要となりますが、
ObservabilityのDashboardsからCreate from templateで簡単に作成出来ます。
中央のAI gateway dashboardを選ぶとAI利用に即した情報を閲覧出来ます。
create-from-template.png

社内で既にAI gatewayを利用しているので、様々な情報が見えます。
リクエスト数やモデル毎の使用回数、Consumers,Model毎のToken量までテンプレートのデフォルトで確認出来ます。
ai-gateway-dashboard.png

必要な情報を上に集めて見やすいようにカスタムも出来ます。
custom-dashboard.png

おわりに

Rate Limitの設定を省いていたり、
Observablityの部分についてはDashboardsしか作っていなかったり、
色々省いた形の手順にはなりますが、Kong KonnectからUIのみでAIモデルのAPI Keyのラップが出来ました。

万が一、ユーザーに配布したKeyが流出したとしても、
誰がどのくらいtokenを使っているかも確認できるので、
異常な使用量のConsumersに紐づくKeyを削除するだけで、周囲への影響なく対応が出来ます。

30分ぐらいで設定できると思うので、設定してみてください!
皆様、Kongで安全なAI APIライフを!

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?