ゲートウェイで JWT ベース認証を有効にして、集中認証と承認を実装できます。こうすることで、認証されたリクエストのみがバックエンドサービスにアクセスできます。JWT は JSON Web Token の略です。
背景情報
JWT は、一般的にユーザー認証に使用されます。JWT には、ユーザー情報と、暗号化されたユーザー情報を格納するフィールドが含まれています。JWT ベース認証を実装する場合、暗号化されたユーザー情報が復号化され、入力されたユーザー情報と比較されます。これにより、ユーザー ID が検証されます。詳細については、「JWT」をご参照ください。
前提条件
手順
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、使用するイングレスゲートウェイの名前をクリックします。
ゲートウェイの概要ナビゲーションペインで、 を選択します。
設定ウィザードの [JWT 設定] ステップで、[ゲートウェイ JWT 認証を有効にする] をオンにし、関連パラメーターを設定して、[次へ] をクリックします。
パラメーター
説明
発行者
JWT の発行者。この例では、パラメーターは testing@secure.istio.io に設定されています。
JWKS ソース
JWT の検証に使用される JSON Web Key Set(JWKS)。この例では、[jwks] が選択されています。
キー
値の例:
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
詳細設定
[詳細設定] をクリックします。[JWT ルールの詳細オプション] ダイアログボックスで、要件に基づいて JWT トークンの位置、JWT パススルー、およびヘッダーによるペイロードの送信を設定します。[OK] をクリックします。
設定ウィザードの [一致ルール] ステップで、パラメーターを設定し、[送信] をクリックします。
パラメーター
説明
一致モード
この例では、[一致した場合に認証] が選択されています。有効な値:
[一致した場合に認証]:指定されたリクエストに対して JWT ベース認証が実行されます。
[一致した場合に認証をバイパス]:指定されたリクエストに対して JWT ベース認証は不要です。
一致ルール
[カスタム一致ルール] を選択し、[パス] をオンにして、このパラメーターを /productpage に設定します。この設定は、/productpage パスへのリクエストが JWT ベース認証に合格する必要があることを示しています。他のパスへのリクエストは、JWT ベース認証に合格する必要はありません。
説明この場合、他のパスにアクセスするためのリクエストは、JTW を持たない場合は許可され、無効な JWT を持つ場合は拒否されます。
その後、[JWT ベース認証が正常に設定されました] というメッセージが表示され、ネイティブの Istio セキュリティリソースが表示されます。[YAML] をクリックして、リソース設定を表示できます。
JWT ベース認証の設定が有効になっているかどうかを確認します。
次のコマンドを実行して、環境変数を設定します。
TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
次のコマンドを実行して、アクセステストを実行します。
テスト 1:有効な JWT を持つリクエストを送信して、
/productpage
パスにアクセスします。curl -I http://${ASM ゲートウェイの IP アドレス}/productpage -H "Authorization: Bearer $TOKEN"
出力例:
HTTP/1.1 200 OK content-type: text/html; charset=utf-8 content-length: 4294 server: istio-envoy date: Tue, 17 Jan 2023 08:47:34 GMT x-envoy-upstream-service-time: 17
テスト 2:JWT を持たないリクエストを送信して、
/productpage
パスにアクセスします。curl -I http://${ASM ゲートウェイの IP アドレス}/productpage
出力例:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 17 Jan 2023 08:50:31 GMT server: istio-envoy
テスト 3:無効な JWT を持つリクエストを送信して、
/productpage
パスにアクセスします。curl -I http://${ASM ゲートウェイの IP アドレス}/productpage -H "Authorization: Bearer invalid token"
出力例:
HTTP/1.1 401 Unauthorized www-authenticate: Bearer realm="http://114.55.XXX.XXX/productpage", error="invalid_token" content-length: 79 content-type: text/plain date: Tue, 17 Jan 2023 08:51:47 GMT server: istio-envoy
テスト 4:JWT を持たないリクエストを送信して、別のパスにアクセスします。
curl -I http://${ASM ゲートウェイの IP アドレス}/api/v1/products/1
HTTP/1.1 200 OK content-type: application/json content-length: 195 server: istio-envoy date: Tue, 17 Jan 2023 08:55:10 GMT x-envoy-upstream-service-time: 16
次の表に、テスト結果を示します。テスト結果は期待どおりであり、JWT ベース認証が有効になっていることを示しています。
アクセステスト
アクセス許可?
有効な JWT を持つリクエストを送信して、
/productpage
パスにアクセスします。はい
JWT を持たないリクエストを送信して、
/productpage
パスにアクセスします。いいえ
無効な JWT を持つリクエストを送信して、
/productpage
パスにアクセスします。いいえ
JWT を持たないリクエストを送信して、別のパスにアクセスします。
はい
関連情報
ASM ゲートウェイのアクセスログの内容をカスタマイズして、潜在的なセキュリティリスクをタイムリーに検出できます。詳細については、「ASM ゲートウェイのアクセスログの生成と収集の機能の設定」をご参照ください。
メッシュ監査機能を有効にして、さまざまなユーザーの日常業務を記録または追跡できます。また、ASM リソースに対する操作の監査アラートを設定し、重要なリソースが変更されたときにアラート連絡先にアラート通知をタイムリーに送信することもできます。詳細については、「ASM での KubeAPI 操作監査機能の使用」および「ASM リソースに対する操作の監査アラートの設定」をご参照ください。
イングレスゲートウェイでリクエスト内の JWT を認証できます。リクエストには、宛先サービスにアクセスするための有効な JWT が含まれている必要があります。詳細については、「ASM でのイングレスゲートウェイの JWT 認証の設定」をご参照ください。