基于 JWT 授权
本教程向您展示如何通过设置 Istio 授权策略来实现基于 JSON Web Token(JWT)的强制访问控制。 Istio 授权策略同时支持字符串类型和列表类型的 JWT 声明。
开始之前
在开始这个任务之前,请先完成以下操作:
参照 Istio 安装向导6 安装 Istio。
部署两个工作负载(workload):
httpbin
和sleep
。将它们部署在同一个命名空间中,例如foo
。每个工作负载都在前面运行一个 Envoy 代理。 你可以使用以下命令来部署它们:使用下面的命令验证
sleep
能够正常访问httpbin
服务:
允许包含有效 JWT 和 列表类型声明的请求
以下命令为
foo
命名空间下的httpbin
工作负载创建一个名为jwt-example
的身份验证策略。这个策略使得httpbin
工作负载接收 Issuer 为testing@secure.istio.io
的 JWT 令牌:验证使用无效 JWT 的请求被拒绝:
验证没有 JWT 令牌的请求被允许,因为以上策略不包含授权策略:
以下命令为
foo
命名空间下的httpbin
工作负载创建一个名为require-jwt
的授权策略。 这个策略要求所有发往httpbin
服务的请求都要包含一个将requestPrincipal
设置为testing@secure.istio.io/testing@secure.istio.io
的有效 JWT。Istio 使用/
连接 JWT 令牌的iss
和sub
以组成requestPrincipal
字段。获取
iss
和sub
都为testing@secure.istio.io
的 JWT。这会让 Istio 生成的requestPrincipal
属性值为testing@secure.istio.io/testing@secure.istio.io
:验证使用有效 JWT 的请求被允许:
验证没有 JWT 的请求被拒绝:
以下命令更新
require-jwt
授权策略,使其同时要求 JWT 包含一个名为groups
值为group1
的声明:获取
groups
声明列表为group1
和group2
的 JWT:验证包含 JWT 且 JWT 中包含名为
groups
值为group1
声明的请求被允许:验证包含 JWT,但 JWT 不包含
groups
声明的请求被拒绝:
清理
删除
foo
命名空间: