キー認証

認証とは、要求者がリソースにアクセスする権限を持っていることを確認するプロセスです。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 オブジェクトを使用して行われます。キーはコンシューマーに割り当てられ、クライアント アプリケーションはリクエストの中でキーを提示します。

  1. 新しいコンシューマーの作成

    このチュートリアルでは、luka というユーザー名の新しいコンシューマーを作成します。

    curl -i -X POST http://localhost:8001/consumers/ \
      --data username=luka
    

    コンシューマーが作成されたことを示す 201 レスポンスが返されます。

  2. コンシューマーへのキーの割り当て

    プロビジョニングが完了したら、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 へのすべてのプロキシ リクエストがキー認証で保護されます。

  1. キー認証の有効化

    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 設定フィールドは、リクエストを認証するときにプラグインがキーを読み取るために探すフィールドの名前を定義します。プラグインはヘッダー、クエリ文字列パラメーター、リクエスト ボディの中からこのフィールドを探します。

  2. 未認証リクエストの送信

    キーを提供せずにサービスにアクセスしてみます。

    curl -i http://localhost:8000/mock/request

    グローバルにキー認証を有効にしたため、承認されていないことを示すレスポンスが返されます。

    HTTP/1.1 401 Unauthorized
    ...
    {
        "message": "No API key found in request"
    }
    
  3. 不正なキーの送信

    不正なキーでサービスにアクセスしてみます。

    curl -i http://localhost:8000/mock/request \
      -H 'apikey:bad-key'
    

    承認されていないことを示すレスポンスが返されます。

    HTTP/1.1 401 Unauthorized
    ...
    {
      "message":"Invalid authentication credentials"
    }
    
  4. 有効なリクエストの送信

    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 キーを使用する必要があります。キーを指定し続けたくない場合は、プラグインを無効にしてから次に進みます。

  1. Key Authentication プラグイン ID の特定

    curl -X GET http://localhost:8001/plugins/

    以下ののような、id フィールドを含む JSON レスポンスが返されます。

    ...
    "id": "2512e48d9-7by0-674c-84b7-00606792f96b"
    ...
    
  2. プラグインの無効化

    上記で取得したプラグイン ID を使用して、インストールされている Key Authentication プラグインの enabled フィールドを PATCH します。リクエストは以下のようになります。プラグイン ID は適切な値に置き換えてください。

    curl -X PATCH http://localhost:8001/plugins/2512e48d9-7by0-674c-84b7-00606792f96b \
      --data enabled=false
    
  3. 認証の無効化のテスト

    これで、API キーを入力せずにリクエストできます。

    curl -i http://localhost:8000/mock/request

    以下のレスポンスが返されるはずです。

    HTTP/1.1 200 OK

« 前へ
プロキシ キャッシュ

次へ »
ロード バランス