首页 > 解决方案 > 使用 JWT 进行 Istio 授权

问题描述

我正在运行 isio 1.0.2,无法根据针对 Azure AD 的 JWT 声明配置服务授权。

我已经成功配置并验证了 Azure AD oidc jwt 最终用户身份验证,它工作正常。

现在我想使用 request.auth.claims["preferred_username"] 属性配置 RBAC 授权。我创建了一个如下所示的 ServiceRoleBinding:

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: service-reader
  namespace: default
spec:
  rules:
  - services: ["myservice.default.svc.cluster.local"]
    methods: ["GET"]
    paths: ["*/products"]
---
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: service-reader-binding
  namespace: default
spec:
  subjects:
  - properties:
      source.principal: "*"
      request.auth.claims["preferred_username"]: "user@company.com"
  roleRef:
    kind: ServiceRole
    name: "service-reader"

但是,我不断从服务代理收到 403 Forbidden,即使来自 Authentication 标头的 preferred_username 声明是正确的。如果我注释掉request.auth.claims["preferred_username"]: "user@company.com"行,则请求成功。

关于基于 oidc 和 jwt 配置授权,谁能指出我正确的方向?

标签: authorizationjwtrbacistio

解决方案


没关系。我发现了问题。我缺少用户:“*”检查以允许所有用户。所以在主题下应该说:

subjects:
  - user: "*"
    properties:
      source.principal: "*"
      request.auth.claims["preferred_username"]: "user@company.com"

这解决了它。


推荐阅读