認証とは、要求者がリソースにアクセスする権限を持っていることを確認するプロセスです。API ゲートウェイ認証は、その名のとおり、アップストリーム サービスとの間のデータ フローを認証します。
Kong Gateway には、以下のようなプラグイン ライブラリがあり、最も広く使用されている API ゲートウェイ認証方法をサポートしています。
一般的な認証方法には、次のようなものがあります。
Kong Gateway が認証を制御することで、クライアントが認証に成功しない限り、リクエストがアップストリーム サービスに届くことはありません。つまり、アップストリーム サービスは事前に認証されたリクエストを処理するため、認証を行う必要がなく、認証に関連した計算時間や開発労力を節約できます。
Kong Gateway は、すべての認証試行を可視化できるため、サービスの可用性とコンプライアンスをサポートする監視およびアラート機能を構築することが可能です。
詳細は、「API Gateway 認証とは?」を参照してください。
以下のチュートリアルでは、Kong Gateway で Key Authentication プラグインを有効にする方法を説明します。
API キー認証は、一般的な API 認証方法です。キー認証では、Kong Gateway で API キーを生成して、コンシューマーと関連付けます。このキーは、クライアントがリクエスト時に提示する認証シークレットになります。Kong Gateway は、提示されたキーの有効性に基づいて、リクエストを承認または拒否します。このプロセスは、グローバルに、または個々のサービスやルートに適用できます。
このページは、「Kong 入門」チュートリアルの一部です。チュートリアルは最初から順にお読みになることを推奨します。
ステップ 1 の「Kong を始める」では、ツールに必要なものとローカルの Kong Gateway を実行する手順を説明しています。
ステップ 2 の「サービスとルート」では、チュートリアルで使用するモック サービスをインストールする手順を説明しています。
これらのステップをまだ完了していない場合は、先に完了してください。
Kong Gateway のキー認証は、 consumers オブジェクトを使用して行われます。キーはコンシューマーに割り当てられ、クライアント アプリケーションはリクエストの中でキーを提示します。
新しいコンシューマーの作成
このチュートリアルでは、luka
というユーザー名の新しいコンシューマーを作成します。
curl -i -X POST http://localhost:8001/consumers/ \
--data username=luka
コンシューマーが作成されたことを示す 201
レスポンスが返されます。
コンシューマーへのキーの割り当て
プロビジョニングが完了したら、Admin API を呼び出して、新しいコンシューマーにキーを割り当てます。このチュートリアルでは、キー値を top-secret-key
に設定します。
curl -i -X POST http://localhost:8001/consumers/luka/key-auth \
--data key=top-secret-key
キーが作成されたことを示す 201
レスポンスが返されます。
この例では、キーの内容を明示的に top-secret-key
に設定しています。key
フィールドを指定しない場合、Kong Gateway がキー値を生成します。
警告: このチュートリアルでは、説明のためキー値を割り当てました。複雑なキーは、API ゲートウェイに自動生成させることをお勧めします。キーを指定するのは、テストする場合、または既存のシステムを移行する場合のみにしてください。
このプラグインをグローバルにインストールすると、Kong Gateway へのすべてのプロキシ リクエストがキー認証で保護されます。
キー認証の有効化
Kong Gateway には Key Authentication プラグインがデフォルトでインストールされており、Admin API 上の plugins オブジェクトに POST
リクエストを送信することで有効にできます。
curl -X POST http://localhost:8001/plugins/ \
--data "name=key-auth" \
--data "config.key_names=apikey"
プラグインがインストールされたことを示す 201
レスポンスが返されます。
上記のリクエストの key_names
設定フィールドは、リクエストを認証するときにプラグインがキーを読み取るために探すフィールドの名前を定義します。プラグインはヘッダー、クエリ文字列パラメーター、リクエスト ボディの中からこのフィールドを探します。
未認証リクエストの送信
キーを提供せずにサービスにアクセスしてみます。
curl -i http://localhost:8000/mock/request
グローバルにキー認証を有効にしたため、承認されていないことを示すレスポンスが返されます。
HTTP/1.1 401 Unauthorized
...
{
"message": "No API key found in request"
}
不正なキーの送信
不正なキーでサービスにアクセスしてみます。
curl -i http://localhost:8000/mock/request \
-H 'apikey:bad-key'
承認されていないことを示すレスポンスが返されます。
HTTP/1.1 401 Unauthorized
...
{
"message":"Invalid authentication credentials"
}
有効なリクエストの送信
apikey
ヘッダーに有効なキーを指定してリクエストを送信します。
curl -i http://localhost:8000/mock/request \
-H 'apikey:top-secret-key'
200 OK
レスポンスが返されます。
Key Authentication プラグインは、特定のサービスに対して有効にできます。リクエストの内容は上記と同じですが、リクエストはサービス URL に POST
されます。
curl -X POST http://localhost:8001/services/example_service/plugins \
--data name=key-auth
Key Authentication プラグインは、特定のルートに対して有効にできます。リクエストの内容は上記と同じですが、リクエストはルート URL に POST
されます。
curl -X POST http://localhost:8001/routes/example_route/plugins \
--data name=key-auth
キー認証を有効にしたまま入門ガイドの残りのチュートリアルを実行すると、すべてのリクエストでこの API キーを使用する必要があります。キーを指定し続けたくない場合は、プラグインを無効にしてから次に進みます。
Key Authentication プラグイン ID の特定
curl -X GET http://localhost:8001/plugins/
以下ののような、id
フィールドを含む JSON レスポンスが返されます。
...
"id": "2512e48d9-7by0-674c-84b7-00606792f96b"
...
プラグインの無効化
上記で取得したプラグイン ID を使用して、インストールされている Key Authentication プラグインの enabled
フィールドを PATCH
します。リクエストは以下のようになります。プラグイン ID は適切な値に置き換えてください。
curl -X PATCH http://localhost:8001/plugins/2512e48d9-7by0-674c-84b7-00606792f96b \
--data enabled=false
認証の無効化のテスト
これで、API キーを入力せずにリクエストできます。
curl -i http://localhost:8000/mock/request
以下のレスポンスが返されるはずです。
HTTP/1.1 200 OK
« 前へ
プロキシ キャッシュ
次へ »
ロード バランス