kubernetes - Istio (1.6.2):有效 JWT 令牌的 RBAC 访问被拒绝
问题描述
我是 Istio 的新手。我正在使用 JWT 实现授权。我收到有效 JWT 令牌的 RBAC 访问被拒绝错误。我添加了 JWT Payload and Authorization Policy 以供参考。我正在使用 Kubernetes 版本 v1.18.3 和 Istio 1.6.2。我在 minikube 上运行集群。
智威汤逊有效载荷:
{
"iss": "https://dev-n63ipah2.us.auth0.com/",
"sub": "sEbjHGBcZ16D0jk8wohIp7vPoT0MWTO0@clients",
"aud": "http://10.97.72.213/",
"iat": 1594125596,
"exp": 1594211996,
"azp": "sEbjHGBcZ16D0jk8wohIp7vPoT0MWTO0",
"scope": "read:contact write:contact update:contact delete:contact",
"gty": "client-credentials"
}
授权政策:
apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
name: dex-ms-contact-require-jwt
namespace: default
spec:
selector:
matchLabels:
app: dex-ms-contact
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["https://dev-n63ipah2.us.auth0.com/sEbjHGBcZ16D0jk8wohIp7vPoT0MWTO0@clients"]
to:
- operation:
methods: ["*"]
paths: ["*"]
when:
- key: request.auth.claims[iss]
values: ["https://dev-n63ipah2.us.auth0.com/"]
应用授权策略后,我通过邮递员点击 GET http://10.97.72.213/contact/1 API,我得到 403 Forbidden RBAC: access denied。
注意:10.97.72.213 是 Minikube 集群的公共 IP 地址。
解决方案
根据 Istio 文档:
requestPrincipals - Optional. A list of request identities (i.e. “iss/sub” claims), which matches to the “request.auth.principal” attribute.
在你的情况下iss
ishttps://dev-n63ipah2.us.auth0.com/
和sub
is https://dev-n63ipah2.us.auth0.com/
,所以你可能想要这样的东西:
- from:
- source:
requestPrincipals: ["https://dev-n63ipah2.us.auth0.com//sEbjHGBcZ16D0jk8wohIp7vPoT0MWTO0@clients"]
(请注意双斜杠 - 第一个是 iss 的一部分,第二个是分隔符)。
推荐阅读
- c# - 如何在 GetEnumerator 中返回动态实体
- sql - 在 SQL Developer 的脚本中传递和使用参数
- bootstrap-4 - 如何在 Bootstrap ul li 上设置半径?
- oracle - 是否可以从 Oracle 11g 标准版转储文件将 schma 导入 Oracle 18c 快捷版?
- ios - Apple-app-site-association 文件未链接到应用程序
- python - 在 python 中实现“Eratosthenes 筛”时出现问题的过滤器行为
- java - java.lang.RuntimeException:org.openqa.selenium.WebDriverException:未知错误:Chrome 启动失败:异常退出
- java - 如果程序不等待输入,如何使用扫描仪修复“未找到行”异常
- angular - 运行“ng test”时,Karma 中的元素未知错误
- php - 如何使用正则表达式在字符串中查找变量文本