当您需要在服务网格中进行身份验证和授权控制时,可以在ASM安全策略中配置JWT(JSON Web Token)认证,确保只有携带有效JWT的请求才能访问受保护的资源,提高服务间通信的安全性和隐私保护。
背景信息
JWT是一种常用的身份认证和鉴权机制。JWT中会携带一些用户信息和一个存储加密后信息的字段。将加密后的信息字段进行解密,与原始用户信息字段进行比较,可以验证该用户的信息是否有效,从而完成身份认证。
前提条件
已创建网关规则和虚拟服务,确保以下路径可以正常访问。具体操作,请参见使用Istio资源实现版本流量路由的步骤一到步骤三。
http://${网关地址}/productpage http://${网关地址}/api/v1/products/1 http://${网关地址}/static/jquery.min.js
操作步骤
登录ASM控制台,在左侧导航栏,选择 。
在网格管理页面,单击目标实例名称,然后在左侧导航栏,选择 。
在ASM安全策略页面,单击创建。
在创建ASM安全策略对话框,单击JWT认证,然后单击确定。
在JWT认证配置配置向导,进行相关配置,然后单击下一步。
配置项
配置示例
ASM安全策略名称
test-jwt
认证规则
Issuer
testing@secure.istio.io
JWKS来源
jwks
Key
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}
在工作负载和匹配规则配置向导,单击添加工作负载组。在新建工作负载组对话框,进行相关配置,单击确定,然后单击提交。
本示例配置如下。
配置项
说明
工作负载组名称
配置为test-policy。
工作负载列表
单击添加工作负载。
在添加工作负载对话框,选择网关生效。
在选择负载区域,选中目标负载,单击图标,将选中的负载添加到已选择区域,然后单击确定。
匹配规则列表
匹配模式有以下两种:
选中请求必须经过认证:请求必须携带正确的JWT,才能访问成功。
选中请求可跳过认证:不携带JWT或者携带正确JWT的请求可以访问成功,携带错误的JWT的请求会访问失败。
本示例匹配模式选择选中请求必须经过认证,匹配规则选中自定义匹配规则,单击添加匹配规则,进行如下配置。
规则1:打开HTTP路径(Path)开关,配置为/static/*。
规则2:打开HTTP路径(Path)开关,配置为/api/*。
创建成功后,在完成配置向导,会显示ASM安全策略创建成功。您可以单击查看YAML查看创建的资源,也可以单击完成,返回ASM安全策略页面,查看新创建的安全策略。
验证JWT认证配置是否生效。
执行以下命令,进行访问测试。
curl -I http://${网关地址}/productpage # 返回200。 curl -I http://${网关地址}/api/v1/products/1 # 返回403。 curl -I http://${网关地址}/static/jquery.min.js # 返回403。 # 设置JWT。 TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # 下面请求均返回200。 curl -I http://${网关地址}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${网关地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${网关地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"
按照上文的配置规则,以
/api
和/static
开头的请求必须携带正确的JWT,才能访问成功;以/productpage
开头的请求不携带JWT或者携带正确的JWT,才能访问成功。访问结果与代码中注释一致,表明JWT认证配置生效。修改JWT认证的配置规则。
在ASM安全策略页面的操作列,单击目标JWT认证安全策略对应的编辑。
在JWT认证配置配置向导,单击下一步。
在工作负载和匹配规则配置向导的操作列,单击目标工作负载组对应的编辑。
在新建工作负载组对话框,修改相关配置,单击确定,然后单击提交。
本示例配置如下。
配置项
说明
匹配模式
选择选中请求可跳过认证。
匹配规则
移除
/api/*
匹配规则,仅保留/static/*
匹配规则。
执行以下命令,验证修改后的JWT认证配置是否生效。
curl -I http://${网关地址}/productpage # 返回403。 curl -I http://${网关地址}/api/v1/products/1 # 返回403。 curl -I http://${网关地址}/static/jquery.min.js # 返回200。 # 设置JWT。 TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # 下面请求均返回200。 curl -I http://${网关地址}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${网关地址}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${网关地址}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"
按照修改后的配置规则,以
/static
开头的请求不携带JWT或者携带正确的JWT,才能访问成功;其他请求必须携带正确的JWT,才能访问成功。访问结果与代码中注释一致,表明修改后的JWT认证配置生效。
相关文档
关于ASM安全策略的概念和相关功能说明,请参见ASM安全策略概述。
您可以启用网格审计功能,记录或追溯不同用户的日常操作,也可以为网格资源操作配置审计告警,在重要资源变动时及时发出告警通知到告警联系人。具体操作,请参见使用KubeAPI操作审计和为网格资源操作配置审计告警。