Pour contrôler l'authentification et l'autorisation au sein d'un maillage de services, configurez l'authentification JSON Web Token (JWT) dans une ASMSecurityPolicy. Cela garantit que seules les requêtes portant un JWT valide peuvent accéder aux ressources protégées, renforçant ainsi la sécurité et la confidentialité des communications interservices.
Informations générales
Un JWT contient des revendications, telles que des informations utilisateur, signées numériquement. Le système vérifie la signature pour confirmer l'authenticité et l'intégrité du jeton, validant ainsi l'identité de l'utilisateur.
Prérequis
Une application est déployée dans le cluster ajouté à l'instance ASM.
Une passerelle d'entrée est déployée et vous avez obtenu son adresse.
-
Créez une passerelle et un service virtuel pour garantir l'accessibilité des chemins suivants. Pour plus d'informations, consultez les étapes 1 à 3 de la rubrique Utiliser les ressources Istio pour acheminer le trafic en fonction des versions.
http://${GATEWAY_ADDRESS}/productpage http://${GATEWAY_ADDRESS}/api/v1/products/1 http://${GATEWAY_ADDRESS}/static/jquery.min.js
Procédure
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez .
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, choisissez .
Sur la page ASMSecurityPolicy, cliquez sur Create.
-
Dans la boîte de dialogue Create ASMSecurityPolicy, sélectionnez JWT et cliquez sur OK.
-
Dans l'assistant JWT Config, configurez les paramètres et cliquez sur Next.
Paramètre
Exemple
ASMSecurityPolicyName
test-jwt
Certification Rules
Émetteur
testing@secure.istio.io
JWKS Source
jwks
Clé
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]} -
Sur la page Workload and Match Rules, cliquez sur Add Workload Group. Dans la boîte de dialogue New Workload Group, configurez les paramètres et cliquez sur OK. Enfin, cliquez sur Submit.
Le tableau suivant présente les exemples de configuration.
Paramètre
Description
Workload Group Name
Définissez la valeur sur test-policy.
Workload List
-
Cliquez sur Add Workload.
-
Dans la boîte de dialogue Add Workload, sélectionnez Gateway Scope.
-
Dans la section Select workloads, sélectionnez la charge de travail cible et cliquez sur l'icône
pour la déplacer vers la section selected. Cliquez ensuite sur OK.
Match Rule List
Les options suivantes de Match Mode sont disponibles :
-
Auth If Matched : Les requêtes correspondant aux règles doivent porter un JWT valide pour aboutir.
-
Bypass Auth If Matched : Les requêtes correspondant aux règles peuvent aboutir sans JWT ou avec un JWT valide. Les requêtes avec un JWT invalide échoueront.
Dans cet exemple, définissez Match Mode sur Auth If Matched, définissez Matching Rules sur Custom Matching Rules et cliquez sur Add Match Rule pour configurer les règles suivantes.
-
Règle 1 : Activez le commutateur Path et définissez sa valeur sur /static/*.
-
Règle 2 : Activez le commutateur Path et définissez sa valeur sur /api/*.
Sur la page Complete, le message de réussite ASMSecurityPolicy created successfully s'affiche. Vous pouvez cliquer sur View YAML pour consulter la configuration de la ressource ou cliquer sur Complete pour revenir à la page ASMSecurityPolicy.
-
-
-
Vérifiez que la configuration d'authentification JWT est effective.
-
Exécutez les commandes suivantes pour tester l'accès.
curl -I http://${GATEWAY_ADDRESS}/productpage # Returns 200. curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 # Returns 403. curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js # Returns 403. # Set the JWT. TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8iLCJzdWIiOiJ0ZXN0aW5nQHNlYcyVyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3UcMI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # The following requests all return 200. curl -I http://${GATEWAY_ADDRESS}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"Selon les règles de configuration, les requêtes destinées aux chemins commençant par
/apiou/staticdoivent porter un JWT valide pour aboutir. Les requêtes vers le chemin/productpagene nécessitent pas de JWT. Les résultats sont cohérents avec les commentaires du code et confirment que la configuration d'authentification JWT est effective. -
Modifiez les règles de configuration de l'authentification JWT.
Sur la page ASMSecurityPolicy, localisez la stratégie de sécurité d'authentification JWT cible et cliquez sur edit dans la colonne Operator.
Dans l'assistant JWT Config, cliquez sur Next.
Sur la page Workload and Match Rules, identifiez le groupe de charges de travail cible et cliquez sur edit dans la colonne Operator.
-
Dans la boîte de dialogue New Workload Group, modifiez les paramètres, cliquez sur OK, puis cliquez sur Submit.
Le tableau suivant présente les exemples de configuration.
Paramètre
Description
Match Mode
Sélectionnez Bypass Auth If Matched.
Matching Rules
Supprimez la règle de correspondance
/api/*et conservez uniquement la règle de correspondance/static/*.
-
Exécutez les commandes suivantes pour vérifier que la configuration modifiée de l'authentification JWT est effective.
curl -I http://${GATEWAY_ADDRESS}/productpage # Returns 403. curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 # Returns 403. curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js # Returns 200. # Set the JWT. TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3UcMI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # The following requests all return 200. curl -I http://${GATEWAY_ADDRESS}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"Selon les règles de configuration modifiées, les requêtes destinées aux chemins commençant par
/staticpeuvent aboutir sans JWT ou avec un JWT valide. Toutes les autres requêtes doivent porter un JWT valide pour réussir. Les résultats sont cohérents avec les commentaires du code et confirment que la configuration modifiée de l'authentification JWT est effective.
-
Documents connexes
Pour plus d'informations sur les concepts et fonctionnalités de ASMSecurityPolicy, consultez la rubrique Présentation de ASMSecurityPolicy.
Activez la fonctionnalité d'audit du maillage pour suivre les opérations utilisateur. Vous pouvez également configurer des alertes d'audit pour les opérations sur les ressources afin de notifier rapidement les contacts des modifications apportées aux ressources importantes. Pour plus d'informations, consultez les rubriques Utiliser l'audit des opérations KubeAPI et Configurer des alertes d'audit pour les opérations sur les ressources du mesh.