Service Mesh(ASM)で ID 認証と承認制御を実行する必要がある場合は、JSON Web Token(JWT)ベースの認証を実装するように ASM セキュリティポリシーを構成できます。この方法では、有効な JWT を持つリクエストのみが保護されたリソースにアクセスできるため、サービス間の通信のセキュリティとプライバシー保護が向上します。
背景情報
JWT はオープンスタンダードであり、ユーザーの認証と承認によく使用されます。 JWT には、ユーザー情報と、暗号化されたユーザー情報を格納するフィールドが含まれています。 JWT ベースの認証を実装する場合、暗号化されたユーザー情報は復号化され、入力されたユーザー情報と比較されます。 これにより、ユーザー ID が検証されます。
前提条件
Istio ゲートウェイと仮想サービスが作成され、以下のパスにアクセスできるようになっている。 詳細については、「Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする」の手順 1 ~ 3 をご参照ください。
http://${IP address of the ingress gateway}/productpage http://${IP address of the ingress gateway}/api/v1/products/1 http://${IP address of the ingress gateway}/static/jquery.min.js
手順
[ASM コンソール] にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[asmsecuritypolicy] ページで、[作成] をクリックします。
[asmsecuritypolicy の作成] ダイアログボックスで、[JWT] をクリックし、[OK] をクリックします。
構成ウィザードの [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"}]}
構成ウィザードの [ワークロードと一致ルール] 手順で、[ワークロードグループの追加] をクリックします。 [新しいワークロードグループ] ダイアログボックスで、パラメーターを構成し、[OK] をクリックしてから、[送信] をクリックします。
次の表に、この例のパラメーターの構成方法を示します。
パラメーター
説明
ワークロードグループ名
パラメーターを test-policy に設定します。
ワークロードリスト
[ワークロードの追加] をクリックします。
[ワークロードの追加] ダイアログボックスで、[ゲートウェイスコープ] を選択します。
[ワークロードの選択] ボックスで、追加するワークロードを選択し、
アイコンをクリックして選択したワークロードを [選択済み] ボックスに追加し、[OK] をクリックします。
一致ルールリスト
次の 2 つの一致モードを使用できます。
一致した場合に認証:有効な JWT を持つリクエストのみが許可されます。
一致した場合に認証をバイパス:有効な JWT を持つリクエスト、または JWT を持たないリクエストが許可されます。 無効な JTW を持つリクエストは拒否されます。
この例では、[一致した場合に認証] を選択し、[一致ルール] を [カスタム一致ルール] に設定し、[一致ルールの追加] をクリックして、次のルールを構成します。
ルール 1:[パス] スイッチをオンにし、パラメーターを /static/* に設定します。
ルール 2:[パス] スイッチをオンにし、パラメーターを /api/* に設定します。
構成ウィザードの [完了] 手順で、「ASMSecurityPolicy が正常に作成されました」というメッセージが表示され、ASM セキュリティポリシーが作成されたことを示します。 [YAML] をクリックして作成されたリソースを表示するか、[完了] をクリックして [asmsecuritypolicy] ページに戻り、作成されたセキュリティポリシーを表示できます。
JWT ベースの認証構成が有効になっているかどうかを確認します。
次のコマンドを実行してアクセステストを実行します。
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 ベースの認証構成が有効になっていることを示しています。JWT ベース認証の一致モードと一致ルールを変更します。
[asmsecuritypolicy] ページで、変更する JWT ベースの認証ポリシーを見つけ、[アクション] 列の [編集] をクリックします。
構成ウィザードの [JWT 構成] 手順で、[次へ] をクリックします。
[ワークロードと一致ルール] 手順で、変更するワークロードグループを見つけ、[オペレーター] 列の [編集] をクリックします。
[新しいワークロードグループ] ダイアログボックスで、一致モードと一致ルールを変更し、[OK] をクリックしてから、[送信] をクリックします。
次の表に、変更後のパラメーター設定を示します。
パラメーター
説明
一致モード
[一致した場合に認証をバイパス] を選択します。
一致ルール
/api/*
一致ルールを削除し、/static/*
一致ルールのみを保持します。
次のコマンドを実行して、変更された 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 ベースの認証構成が有効になっていることを示しています。
関連情報
ASM セキュリティポリシーの概念と機能の詳細については、「ASM セキュリティポリシーの概要」をご参照ください。
メッシュ監査機能を有効にして、さまざまなユーザーの日常業務を記録または追跡できます。 また、ASM リソースに対する操作の監査アラートを構成し、重要なリソースが変更されたときにアラート連絡先にアラート通知をタイムリーに送信することもできます。 詳細については、「ASM で KubeAPI 操作監査機能を使用する」および「ASM リソースに対する操作の監査アラートを構成する」をご参照ください。