旧バージョンのドキュメントを参照しています。 最新のドキュメントはこちらをご参照ください。
Kong Gatewayでのキーとキーセット管理
このページでは、Kong Gatewayで非対象キーとキーセットを管理するKong Gatewayの機能について説明します。
一部の操作では、公開鍵と秘密鍵へのアクセスが必要です。このドキュメントでは、Kong Gatewayを使用してこれらのキーへのアクセスを許可する方法についても説明します。
この機能は、KonnectとKong Managerの両方で利用できます。
- Konnect では、 Gateway Manager エンティティとしてキーを管理できます。
 - Kong Managerでは、 API Gateway のドロップダウンから利用できます。 {:.note}
 
ユースケース
一部のKong Gatewayプラグインは、JSON Webキーを構成するためのカスタムエンドポイントを提供します。新しい汎用エンドポイントは、各プラグインのカスタムエンドポイントを置き換えます。次の表に、新しいエンドポイントをサポートするプラグインを示します。
| プラグイン | サポートされているキー/キーセット | 
|---|---|
| OpenID Connect | なし | 
| JWT Signer | なし | 
| JWT | なし | 
| JWE Decrypt | あり | 
キーエンドポイント
汎用 Keysエンドポイントでは、公開鍵でも秘密鍵でも、非対称鍵をJWKまたはPEMとして保存できます。キーを識別するために、設定可能なkid文字列が必要です。kid属性は、トークンの検証または復号化に使用するキーを識別する一般的な方法ですが、キーを識別する必要がある他のシナリオでも使用できます。
キーセットのエンドポイント
JSON Webキーセットに1つまたは複数のキーを割り当てることができます。これは、特定のアプリケーションやサービスに使用する複数のキーを論理的にグループ化するのに役立ちます。キーセットは、キーを検索する場所をプラグインに指示したり、プラグインを 一部の キーのみに制限するスコープメカニズムを備えているため、キーをプラグインに公開する方法としても推奨されます。
キーセットを使用してプラグインを設定する方法の詳細については、次のプラグインのドキュメントを参照してください。
注: キーセットを削除すると、関連するすべてのキーが削除されます。
キー形式
現在、以下の2つの一般的な形式がサポートされています。
- JWK
 - PEM
 
どちらの形式も、公開鍵指数や秘密鍵指数など同じ基本情報を伝達しますが、追加のメタ情報を指定できる場合があります。たとえば、JWK形式はPEMよりも多くの情報を伝達します。いわば、同じキーでありながら、1つのキーペアを複数の異なる形式(JWKまたはPEM)で表現できます。
JWK形式でキーを作成し、キーセットと関連付けます。
以下のように、キーセットを作成します。
curl -i -X PUT http://HOSTNAME:8001/key-sets  \
  --data name=my-set
結果:
{
  "created_at": 1669029622,
  "id": "2033cb3d-ef3b-4f6d-8395-bc3c2d5a0e4f",
  "name": "my-set",
  "tags": null,
  "updated_at": 1669029622
  }
キーを作成し、キーセットに関連付けます。
curl -i -X POST http://HOSTNAME:8001/keys  \
  --data name=my-first-jwk \
  --data jwk='{"kty":"RSA","kid":"42","use":"enc","n":"pjdss8ZaDfEH6K6U7GeW2nxDqR4IP049fk1fK0lndimbMMVBdPv_hSpm8T8EtBDxrUdi1OHZfMhUixGaut-3nQ4GG9nM249oxhCtxqqNvEXrmQRGqczyLxuh-fKn9Fg--hS9UpazHpfVAFnB5aCfXoNhPuI8oByyFKMKaOVgHNqP5NBEqabiLftZD3W_lsFCPGuzr4Vp0YS7zS2hDYScC2oOMu4rGU1LcMZf39p3153Cq7bS2Xh6Y-vw5pwzFYZdjQxDn8x8BG3fJ6j8TGLXQsbKH1218_HcUJRvMwdpbUQG5nvA2GXVqLqdwp054Lzk9_B_f1lVrmOKuHjTNHq48w","e":"AQAB","d":"ksDmucdMJXkFGZxiomNHnroOZxe8AmDLDGO1vhs-POa5PZM7mtUPonxwjVmthmpbZzla-kg55OFfO7YcXhg-Hm2OWTKwm73_rLh3JavaHjvBqsVKuorX3V3RYkSro6HyYIzFJ1Ek7sLxbjDRcDOj4ievSX0oN9l-JZhaDYlPlci5uJsoqro_YrE0PRRWVhtGynd-_aWgQv1YzkfZuMD-hJtDi1Im2humOWxA4eZrFs9eG-whXcOvaSwO4sSGbS99ecQZHM2TcdXeAs1PvjVgQ_dKnZlGN3lTWoWfQP55Z7Tgt8Nf1q4ZAKd-NlMe-7iqCFfsnFwXjSiaOa2CRGZn-Q","p":"4A5nU4ahEww7B65yuzmGeCUUi8ikWzv1C81pSyUKvKzu8CX41hp9J6oRaLGesKImYiuVQK47FhZ--wwfpRwHvSxtNU9qXb8ewo-BvadyO1eVrIk4tNV543QlSe7pQAoJGkxCia5rfznAE3InKF4JvIlchyqs0RQ8wx7lULqwnn0","q":"ven83GM6SfrmO-TBHbjTk6JhP_3CMsIvmSdo4KrbQNvp4vHO3w1_0zJ3URkmkYGhz2tgPlfd7v1l2I6QkIh4Bumdj6FyFZEBpxjE4MpfdNVcNINvVj87cLyTRmIcaGxmfylY7QErP8GFA-k4UoH_eQmGKGK44TRzYj5hZYGWIC8","dp":"lmmU_AG5SGxBhJqb8wxfNXDPJjf__i92BgJT2Vp4pskBbr5PGoyV0HbfUQVMnw977RONEurkR6O6gxZUeCclGt4kQlGZ-m0_XSWx13v9t9DIbheAtgVJ2mQyVDvK4m7aRYlEceFh0PsX8vYDS5o1txgPwb3oXkPTtrmbAGMUBpE","dq":"mxRTU3QDyR2EnCv0Nl0TCF90oliJGAHR9HJmBe__EjuCBbwHfcT8OG3hWOv8vpzokQPRl5cQt3NckzX3fs6xlJN4Ai2Hh2zduKFVQ2p-AF2p6Yfahscjtq-GY9cB85NxLy2IXCC0PF--Sq9LOrTE9QV988SJy_yUrAjcZ5MmECk","qi":"ldHXIrEmMZVaNwGzDF9WG8sHj2mOZmQpw9yrjLK9hAsmsNr5LTyqWAqJIYZSwPTYWhY4nu2O0EY9G9uYiqewXfCKw_UngrJt8Xwfq1Zruz0YY869zPN4GiE9-9rzdZB33RBw8kIOquY3MK74FMwCihYx_LiU2YTHkaoJ3ncvtvg"}' \
  --data kid=42 \
  --data set.name=my-set
結果:
{
  "id":"92a245af-8cb6-4175-b3a9-9383cbb9848f",
  "jwk":
          { kty":"RSA",
            "kid":"42",
            "use":"enc",
            ..."},
  "created_at":1669029250,
  "updated_at":1669029250,
  "name":"my-first-jwk",
  "tags":null,
  "set":
          { "id":"cb5b5df8-0161-4fdf-a2ce-cefc9481d5f9"},
  "kid":"42",
  "pem":null
  }
PEM形式でキーを作成し、キーセットと関連付ける
以下のように、キーセットを作成します。
curl -i -X PUT http://HOSTNAME:8001/key-sets  \
  --data name=my-other-set
結果:
{
  "created_at": 1669029622,
  "id": "2033cb3d-ef3b-4f6d-8395-bc3c2d5a0e4f",
  "name": "my-other-set",
  "tags": null,
  "updated_at": 1669029622
  }
PEMでエンコードされたキーを作成し、キーセットと関連付けます。
curl -i -X POST http://HOSTNAME:8001/keys  \
  --data name=my-first-pem-key \
  --data pem.private_key=@path/to/private_key.pem \
  --data pem.public_key=@path/to/public_key.pem \
  --data kid=23 \
  --data set.name=my-other-set
結果:
{
  "id":"92a245af-8cb6-4175-b3a9-9383cbb9848f",
  "jwk": null
  "pem": {
          "public_key": "----BEGIN...",
          "private_key": "----BEGIN...."
  }
  "created_at":1669029250,
  "updated_at":1669029250,
  "name":"my-first-pem-key",
  "tags":null,
  "set":
          { "id":"cb5b5df8-0161-4fdf-a2ce-cefc9481d5f9"},
  "kid":"23",
  }