1
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?

Konnect Config Storeを使ってみる

Last updated at Posted at 2024-11-08

KonnectにKonnect Config Storeという機能が追加された。
今まで機密情報を格納するためにHashicorpのVaultやAWSのSecret Managerなどと連携して、そこにあるデータを取ってくるような仕組みが用意されていた。
ただ、この機密情報の格納庫はKong側には用意されていなかったので、利用者は別で用意する必要があった。
(環境変数で渡す方法もあるが、機密情報を更新すると再起動が必要だったり使い勝手が悪かった)
今回、この格納庫をKonnect側で用意したものがKonnect Config Storeとなる。

これを試しに使ってみたところ、少しハマりポイントがあったので備忘録がてら使い方を残しておく。

検証内容

ここではAI Proxy Pluginの中にある、OpenAIにアクセスするためのトークンをKonnect Config Storeに格納して、機密情報(OpenAIのアクセストークン)をdeckのYAMLに書かずにPluginを有効化することを確かめる。

検証に使ったYAMLは以下となる。

openai.yaml
_format_version: "3.0"
_konnect:
  control_plane_name: default
services:
- host: localhost
  name: openai-api
  port: 8000
  routes:
  - methods:
    - POST
    name: openai-api_openai-chat
    paths:
    - ~/openai-chat$
    plugins:
    - config:
        auth:
          header_name: Authorization
          header_value: '{vault://openai/KONG_OPENAI_AUTH_HEADER}'
        model:
          name: gpt-4
          options:
            max_tokens: 512
            temperature: 1
          provider: openai
        route_type: llm/v1/chat
      name: ai-proxy
      tags:
      - ai-proxy
    tags:
    - ai-proxy
  tags:
  - ai-proxy

Konnect Config Storeの指定方法については後ほど解説する。

Konnect Config Storeの作成

Konnect Config StoreはUIからでもAPIからでも設定できるが、ここではUIでの設定方法を説明する。
Konnectでの機密情報を管理する機能は各ControlPlaneのVaultsから設定できる。
新規作成はControlPlaneを開いて左サイドバーのVaultsから+ New Vaultsをクリックする。
すると以下のような作成画面に遷移する。

image.png

Vault ConfigurationのところでAWSのSecret ManagerだったりHashicorpのVaultだったりが選択できるが、ここで今回Konnectが選べるようになってるのでこれを選択する。
またGeneral InformationPrefixが名前的なものになるので、今回はOpenAIのトークンを格納するためopenaiと入れてSaveする。

次に作成したopenaiをクリックすると、格納する機密情報のKeyとValueを管理する画面になる。
ここで+ Store New Secretで新規にKeyとValueが追加できるのでクリックする。
すると以下のようなKeyとValueを入力する画面になる。ここではAI Proxy Pluginで使うOpenAIへの認証ヘッダの内容を入れたいので、以下のような感じで設定してSaveする。
image.png

  • Key: KONG_OPENAI_AUTH_HEADER
  • Value: Bearer <OpenAIの認証トークン>

Konnect Config Storeの特徴として、Valueは一度格納すると見ることは出来ない。
もし誤ったものを入れても確認は出来ないのでその点は注意。

保存後、UIからKeyが確認できる。
またdeckだと以下のような感じで確認できる。

vaults:
- config:
    config_store_id: b71217d7-327c-448a-9168-e2b0923945cf
  name: konnect
  prefix: openai

以上で機密情報の格納手順は終了となる

Konnect Config Storeの利用

冒頭で紹介したdeckのYAML(openai.yaml)をGatewayに適用する。
なお、deckをKonnectに利用するにあたり、以下のファイルを作成している。

~/.deck.yaml
konnect-addr: https://us.api.konghq.com
konnect-token: kpat_ER1WQ0rnxxxx
konnect-control-plane-name: default

konnect-tokenを各自のトークンに書き換えてもらえば、リージョンが同じならここで示す手順が同じように利用できると思う。

Konnect Config Storeの利用方法だが、先ほど紹介したYAMLの以下の部分が呼び出し箇所となる。

header_value: '{vault://openai/KONG_OPENAI_AUTH_HEADER}'

ここで大きな注意点なのだが、通常Vaultの呼び出しは文法的に以下のようになる。

vault://<Vaultの種類(例:env)>/VaultのPrefix/Secret名

ただ、Konnect Config Storeの場合は以下のようになる。

vault://VaultのPrefix/Secret名

(公式ドキュメントでは11/9時点ではvault://konnect/...となっているが、これは誤りでkonnectは予約語となっていて作成できない。)
そのため、openaiという箱の下にKONG_OPENAI_AUTH_HEADERというSecretのKeyを作成したのでvault://openai/KONG_OPENAI_AUTH_HEADERというパスで呼び出すのが正しいことになる。
仕様としてちょっと微妙なので、将来的に変わるかもしれない。
このYAMLを適用するには以下のコマンドで適用できる。

deck gateway sync --select-tag ai-proxy ./ai-proxy.yaml

タグを指定することでControlPlane内の既存の設定を残したままYAMLの内容をKonnectに反映する。
反映するとService、Route、Pluginが作成され、Pluginでは以下のように指定した値が確認できる。

image.png

実際に動作確認する。環境変数PROXYにDataPlaneのURLを設定し、以下のようにOpenAIに問い合わせをする。

curl -k --compressed -X POST ${PROXY}/openai-chat   -H "Content-Type: application/json" -d '{
    "messages": [{
    "role": "user",
    "content": "あなたの名前を教えてもらっていいですか?"
  }] }' | jq .

すると以下のような結果が返ってきた。

"content": "私の名前はOpenAIです。人工知能アシスタントとして、あなたの質問に答えたり、情報を提供したりすることが私の仕事です。",

正常なレスポンスが受け取れており、問題なくトークンがKonnect Config Storeから引っ張ってこれているようだ。

これまではSecret管理は別のサービスを用意する必要があって少し面倒だったが、今後はKonnectだけで完結できそうなので楽が出来そうだ。

1
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
1
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?