概述
请求身份认证(RequestAuthentication)定义了终端用户请求网格服务时候的身份认证策略;如果认证信息非法,请求将被拦截;默认情况下,如果不带身份认证信息,请求将被放过,可以配置特定授权策略要求请求的身份信息不能为空来拦截身份认证信息为空的请求。
请求身份认证配置粒度
请求身份认证策略支持三种,全局、命名空间和工作负载级;当策略的命名空间为系统命名空间时(默认为istio-system),策略为全局生效;当策略命名空间不是系统命名空间,且没有选择工作负载,策略将只在当前命名空间生效并覆盖全局策略;当策略在非系统命名空间,且选择了工作负载,则只对指定工作负载生效。
下面的配置中RequestAuthentication定义了foo命名空间下匹配app: httpbin标签的工作负载使用的jwt认证策略,同时AuthorizationPolicy定义了对请求来源的匹配,要求认证信息不能为空。
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: httpbin
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
jwtRules:
- issuer: "issuer-foo"
jwksUri: https://ctyun.com/.well-known/jwks.json
---
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: httpbin
namespace: foo
spec:
selector:
matchLabels:
app: httpbin
rules:
- from:
- source:
requestPrincipals: ["*"]
创建请求身份认证
- 进入网格控制台,选择 网格安全中心 –> 请求身份认证菜单。
- 选择命名空间,列表页会展示当前命名空间下的请求身份认证策略。
- 点击创建按钮,进行请求身份认证的创建。
修改请求身份认证
- 进入网格控制台,选择 网格安全中心 –> 请求身份认证菜单。
- 选择命名空间,列表页会展示当前命名空间下的请求身份认证策略,选择操作栏的编辑选项,修改策略,保存即可。
删除请求身份认证
- 进入网格控制台,选择 网格安全中心 –> 请求身份认证菜单。
- 选择命名空间,列表页会展示当前命名空间下的请求身份认证策略,选择操作栏的删除选项,删除选定的策略即可。
RequestAuthentication配置说明:
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
selector | WorkloadSelector | No | 工作负载选择器,选择策略生效的工作负载。 |
jwtRules | JWTRule | No | JWT配置列表,表示当前工作负载所支持的jwt配置(不支持一个请求带多个jwt认证信息的情况)。 |
JWTRule
字段 | 类型 | 必选 | 说明 |
---|---|---|---|
issuer | string | Yes | Jwt签发方。 |
audiences | string | No | Jwt接收方列表,jwt中包含其中任意一个接收者都可以通过验证。 |
jwksUri | string | No | 验证jwt签名的公钥URL,jwksUri和jwks只能有一个生效。 |
jwks | string | No | 验证jwt签名的公钥,jwksUri和jwks只能有一个生效。 |
fromHeaders | JWTHeader | No | 提取Jwt信息的头部字段。 |
fromParams | string | No | 提取Jwt信息的query字段。 |
outputPayloadToHeader | string | No | 向后端透传payload的头部字段名称。 |
forwardOriginalToken | bool | No | 设置为true时,原始的jwt将被透传到后端。 |
outputClaimToHeaders | ClaimToHeader | No | 定义payload里面的字段透传到后端的头部信息。 |