kubernetes - 根据 JWT 中的用户声明路由 Istio 虚拟服务
问题描述
Istio 可以根据标头等路由流量。在 Istio 文档中有很好的例子来说明如何做到这一点。
Istio 还可以验证您的 JWT。Istio 文档也涵盖了这一点。
但是我似乎找不到让我的 JWT Validated 的方法,然后使用在 JWT Json 中找到的用户声明来路由流量。我链接到的示例只是希望用户是标题中的纯文本。
如何将 Istio 虚拟服务设置为基于 JWT 中的声明(最好是经过验证的声明)进行路由。
解决方案
您可以使用Istio 授权策略来实现这一点。如果没有声明或角色,我对 Keycloak 和 Kong 做了类似的事情来限制 API 网关级别的用户流量。
这是使用 istio 进行 JWT 身份验证的一个很好的示例:
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: backend
namespace: default
spec:
selector:
matchLabels:
app: backend
jwtRules:
- issuer: "${KEYCLOAK_URL}/auth/realms/istio"
jwksUri: "${KEYCLOAK_URL}/auth/realms/istio/protocol/openid-connect/certs"
---
# To allow only requests with a valid token, create an authorization policy
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: backend
namespace: default
spec:
selector:
matchLabels:
app: backend
action: ALLOW
rules:
- from:
when:
- key: request.auth.claims[preferred_username]
values: ["testuser"]
示例链接:https ://istio.io/latest/docs/tasks/security/authorization/authz-jwt/
OIDC 的另一个很好的例子:https ://www.jetstack.io/blog/istio-oidc
RBAC 和组列表检查:https ://istio.io/v1.4/docs/tasks/security/authorization/rbac-groups/
推荐阅读
- arrays - 空手道匹配两个 JSON 文件:对象数组,其中包含对象的内部打乱数组
- apache-flink - 如何减少 Flink intra-jobs 之间的时间并避免重复任务
- excel - Excel为一个单元格内的两个值添加相同的前缀
- download - 用于 linux 的 Netezza odbc 驱动程序下载失败
- javascript - 通过 PWA 的社交媒体分享图片
- web-scraping - 如何在不使用 Twitter API 的情况下获取只有推文 ID 的推文?
- xml - Azure APIM 中的 XML 转换
- r - R for loop wise : Rowwise sum on conditions : 性能问题
- r - 如何在 R markdown 中增加数据表的高度
- c# - 如何在类库中处理数据时将数据从类库发送回 Web 表单应用程序?