0
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でのAzure Key Vaultの参照方法

Last updated at Posted at 2025-12-03

本記事は「Kong Advent Calendar 2025」の4日目のエントリとして、KonnectでのAzure Key Vaultの参照方法について解説する。

Kong Gatewayではdeck CLIを使ってKong Gatewayの設定をYAMLで管理することができるが、このファイル内にパスワードなどの機微情報をベタ書きしたくない人は多いと思う。
これを隠蔽するやり方の一つとして、Vault的なものを参照する形で設定する方法がある。
ただ、これの設定方法に関する記述がAzure Key Vaultについては現行のドキュメントには記載がなく、ナレッジベースの記載も分かりにくいので、手順をまとめてみた。

前提

以下を前提とする。

  • Azureが利用できること
  • Konnectが利用できること
  • Data PlaneはAzure Container Appsとしてデプロイ済み
  • Service/Routeは設定済み(今回はhttpbin.orgを利用)

Data PlaneがKey Vaultの情報を引っ張る方法として、マネージドIDを利用する方法と、EntraIDアプリケーションを利用する方法があるが、ここではマネージドIDを利用する方法で説明する。

検証

今回はRedisのパスワードをVaultで隠蔽し、Proxy Cache Advanced Pluginで利用するケースで設定する。

Azure Managed Redis インスタンスの作成

最初にAzure Managed RedisのUIからAzure Managed Redis インスタンスを作成する。
作成に躓くところは特にないので詳細は割愛するが、今回は以下の設定で作成している。

  • データ層:インメモリ
  • キャッシュサイズ:0.5GB
  • パフォーマンス:バランス(SKU B0)

作成後、設定->認証Access keysからアクセスキー認証を有効化し、Primary keyを控えておく。

20251127100307.png

また検証用途ということで一旦パブリックアクセスを有効にする。
最後に概要のページからEndpointを控えておく。(Proxy Cache Advanced Plugin設定時に利用する)

キーコンテナー(Azure Key Vault)の作成とロールの割り当て

Azureのキーコンテナーに移動し、オブジェクト->シークレットから新しいシークレットを追加する。
ここでは名前をredis-keyとし、値に先程取得したPrimary Keyを登録する。
20251127104147.png

作成後、アクセス制御(IAM)から追加->ロールの割り当てを追加をクリックし、以下を選んでレビューと割り当てからKey Vaultを読み取るためのロールをContainer Appsに割り当てる。

  • ロール:キーコンテナーシークレットユーザー
  • メンバー:
    • アクセスの割り当て先:マネージドID
    • メンバー:Data PlaneのContainer Apps

また概要ページからコンテナーのURIを控えておく。

KonnectのVault設定

Konnect上でGatewayを選択後、左サイドバーのVaultsをクリックし、New vaultをクリックする。
Vault Configurationの項目でVaultの種類が選択できるので、Azure Vaultを選択する。
その後、以下の項目を記入する。

  • Location: Key Vaultのリージョン(ここではJapan Eastを指定)
  • Vault URL: キーコンテナーのURI(先程控えたURI(https://<コンテナ名>.vault.azure.net)を入力)
  • Prefix: Pluginから参照する際のプレフィックス(ここではredisを指定)

20251128093051.png

KonnectのVault設定

Routeに対してProxy Cache Advanced Pluginを追加し、以下を設定する。

  • Strategy: redis
  • Redis Configuration: Use dedicated configuration
  • Redis.Host: Azure Managed RedisのEndpoint(先程控えた<your-redis-name>.japaneast.redis.azure.netを入力)
  • Redis.Port: 10000(Azure Managed Redisのポート)
  • Redis.Password: {vault://redis/redis-key}(Vaultのプレフィックスとキー名を組み合わせて指定)
  • Redis.Ssl: true
  • Redis.Ssl Verify: true

deckの場合、最終的には以下のような設定になる。

_format_version: "3.0"
_konnect:
  control_plane_name: default
services:
- host: httpbin.org
  name: httpbin-service
  path: /
  port: 443
  protocol: https
  routes:
  - name: test
    paths:
    - /test
    plugins:
    - name: proxy-cache-advanced
      config:
        redis:
          host: myredis.japaneast.redis.azure.net
          password: '{vault://redis/redis-key}'
          port: 10000
          ssl: true
          ssl_verify: true
        strategy: redis

vaults:
- name: azure
  prefix: redis
  config:
    base64_decode: false
    credentials_prefix: AZURE
    location: Japan East
    type: secrets
    vault_uri: https://himitsu-kv.vault.azure.net/

動作確認

Container Appsのエンドポイントにcurlを実行する。

curl https://<your-endpoint>.japaneast.azurecontainerapps.io/test/anything -i

ヘッダを見るとx-cache-status: Missが表示される。
再度実行するとx-cache-status: Hitが表示され、キャッシュが有効になっていることが確認できる。

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