すべてのプロダクト
Search
ドキュメントセンター

:JWT ベースの認証を実装するための ASM セキュリティポリシーの構成

最終更新日:Jan 13, 2025

Service Mesh(ASM)で ID 認証と承認制御を実行する必要がある場合は、JSON Web Token(JWT)ベースの認証を実装するように ASM セキュリティポリシーを構成できます。この方法では、有効な JWT を持つリクエストのみが保護されたリソースにアクセスできるため、サービス間の通信のセキュリティとプライバシー保護が向上します。

背景情報

JWT はオープンスタンダードであり、ユーザーの認証と承認によく使用されます。 JWT には、ユーザー情報と、暗号化されたユーザー情報を格納するフィールドが含まれています。 JWT ベースの認証を実装する場合、暗号化されたユーザー情報は復号化され、入力されたユーザー情報と比較されます。 これにより、ユーザー ID が検証されます。

前提条件

手順

  1. [ASM コンソール] にログインします。左側のナビゲーションペインで、[service Mesh] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、[メッシュセキュリティセンター] > [asmsecuritypolicy] を選択します。

  3. [asmsecuritypolicy] ページで、[作成] をクリックします。

  4. [asmsecuritypolicy の作成] ダイアログボックスで、[JWT] をクリックし、[OK] をクリックします。

    1. 構成ウィザードの [JWT 構成] 手順で、パラメーターを構成し、[次へ] をクリックします。

      パラメーター

      ASMSecurityPolicyName

      test-jwt

      証明ルール

      発行者

      testing@secure.istio.io

      JWKS ソース

      jwks

      キー

      { "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
    2. 構成ウィザードの [ワークロードと一致ルール] 手順で、[ワークロードグループの追加] をクリックします。 [新しいワークロードグループ] ダイアログボックスで、パラメーターを構成し、[OK] をクリックしてから、[送信] をクリックします。

      次の表に、この例のパラメーターの構成方法を示します。

      パラメーター

      説明

      ワークロードグループ名

      パラメーターを test-policy に設定します。

      ワークロードリスト

      1. [ワークロードの追加] をクリックします。

      2. [ワークロードの追加] ダイアログボックスで、[ゲートウェイスコープ] を選択します。

      3. [ワークロードの選択] ボックスで、追加するワークロードを選択し、添加 アイコンをクリックして選択したワークロードを [選択済み] ボックスに追加し、[OK] をクリックします。

      一致ルールリスト

      次の 2 つの一致モードを使用できます。

      • 一致した場合に認証:有効な JWT を持つリクエストのみが許可されます。

      • 一致した場合に認証をバイパス:有効な JWT を持つリクエスト、または JWT を持たないリクエストが許可されます。 無効な JTW を持つリクエストは拒否されます。

      この例では、[一致した場合に認証] を選択し、[一致ルール][カスタム一致ルール] に設定し、[一致ルールの追加] をクリックして、次のルールを構成します。

      • ルール 1:[パス] スイッチをオンにし、パラメーターを /static/* に設定します。

      • ルール 2:[パス] スイッチをオンにし、パラメーターを /api/* に設定します。

      image.png

      構成ウィザードの [完了] 手順で、「ASMSecurityPolicy が正常に作成されました」というメッセージが表示され、ASM セキュリティポリシーが作成されたことを示します。 [YAML] をクリックして作成されたリソースを表示するか、[完了] をクリックして [asmsecuritypolicy] ページに戻り、作成されたセキュリティポリシーを表示できます。

  5. JWT ベースの認証構成が有効になっているかどうかを確認します。

    1. 次のコマンドを実行してアクセステストを実行します。

      curl -I http://${IP address of the ingress gateway}/productpage # ステータスコード 200 が返されます。
      curl -I http://${IP address of the ingress gateway}/api/v1/products/1 # ステータスコード 403 が返されます。
      curl -I http://${IP address of the ingress gateway}/static/jquery.min.js  # ステータスコード 403 が返されます。
      
      # JWT を構成します。
      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
      
      # 次のすべてのリクエストに対してステータスコード 200 が返されます。
      curl -I http://${IP address of the ingress gateway}/productpage -H "Authorization: Bearer $TOKEN"
      curl -I http://${IP address of the ingress gateway}/api/v1/products/1 -H "Authorization: Bearer $TOKEN"
      curl -I http://${IP address of the ingress gateway}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"

      指定された一致モードと一致ルールに従って、/static または /api で始まるパスへのアクセスは、有効な JWT を持っている場合にのみ許可されます。一方、/productpage で始まるパスへのアクセスは、有効な JWT を持っているか、JWT を持っていない場合にのみ許可されます。 アクセス結果は期待どおりです。 これは、JWT ベースの認証構成が有効になっていることを示しています。

    2. JWT ベース認証の一致モードと一致ルールを変更します。

      1. [asmsecuritypolicy] ページで、変更する JWT ベースの認証ポリシーを見つけ、[アクション] 列の [編集] をクリックします。

      2. 構成ウィザードの [JWT 構成] 手順で、[次へ] をクリックします。

      3. [ワークロードと一致ルール] 手順で、変更するワークロードグループを見つけ、[オペレーター] 列の [編集] をクリックします。

      4. [新しいワークロードグループ] ダイアログボックスで、一致モードと一致ルールを変更し、[OK] をクリックしてから、[送信] をクリックします。

        次の表に、変更後のパラメーター設定を示します。

        パラメーター

        説明

        一致モード

        [一致した場合に認証をバイパス] を選択します。

        一致ルール

        /api/* 一致ルールを削除し、/static/* 一致ルールのみを保持します。

        image.png

    3. 次のコマンドを実行して、変更された JWT ベースの認証構成が有効になっているかどうかを確認します。

      curl -I http://${IP address of the ingress gateway}/productpage # ステータスコード 403 が返されます。
      curl -I http://${IP address of the ingress gateway}/api/v1/products/1 # ステータスコード 403 が返されます。
      curl -I http://${IP address of the ingress gateway}/static/jquery.min.js   # ステータスコード 200 が返されます。
      
      # JWT を構成します。
      TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
      
      # 次のすべてのリクエストに対してステータスコード 200 が返されます。
      curl -I http://${IP address of the ingress gateway}/productpage -H "Authorization: Bearer $TOKEN"
      curl -I http://${IP address of the ingress gateway}/api/v1/products/1 -H "Authorization: Bearer $TOKEN"
      curl -I http://${IP address of the ingress gateway}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"

      新しい一致モードと一致ルールに従って、/static で始まるパスへのアクセスは、JWT を持たないか、有効な JWT を持っている場合にのみ許可されます。 その他のリクエストは、有効な JWT を持っている場合にのみ許可されます。 アクセス結果は期待どおりです。 これは、新しい JWT ベースの認証構成が有効になっていることを示しています。

関連情報