【问题标题】:Istio request.auth.claims[cognito:groups] is not workingIstio request.auth.claims[cognito:groups] 不工作
【发布时间】:2020-12-07 16:24:49
【问题描述】:
apiVersion: "security.istio.io/v1beta1"
kind: "RequestAuthentication"
metadata:
  name: "jwt-example"
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  jwtRules:
    - issuer: "https://cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-xxxxx"
      jwksUri: "https://cognito-idp.ap-southeast-1.amazonaws.com/ap-southeast-xxxxx/.well-known/jwks.json"

spec:
  selector:
    matchLabels:
      istio: ingressgateway
  action: ALLOW
  rules:
    - from:
        - source:
            notRequestPrincipals: ["*"]
      to:
        - operation:
            paths: ["/api/v1/*"]
      when:
        - key: request.auth.claims[cognito:groups]
          values: ["testing"]

如果 JWT 令牌基于 AWS Cognito 的 testing 组,我尝试使用上述代码 sn-ps 以允许访问使用 /api/v1/*。不幸的是,它现在正在显示RBAC: access denied。请告诉我如何解决?

【问题讨论】:

  • 如果我对this 的理解正确,您应该使用DENYnotRequestPrincipals,或者使用相反的ALLOWrequestPrincipals,所以您可以尝试将操作从ALLOWDENY 或将源从 notRequestPrincipals 更改为 requestPrincipals?如果其中任何一个都不起作用,您可以尝试使用- key: request.auth.claims[groups] 而不是request.auth.claims[cognito:groups] 吗?还有一件事是键值应该在键下,所以你缺少2个空格。
  • 即使我将request.auth.claims[groups]ALLOWDENY 更改为requestPrincipals requestPrincipals ,它根本不起作用。我也在我的问题中添加了RequestAuthentication
  • @Jakub 由于requestPrincipals ,我已根据您的评论修复了问题。您可以将其发布为答案吗?我会把它标记为正确答案。
  • 很高兴它为您工作!所以它实际上适用于action: ALLOWrequestPrincipals,对吗?
  • @Jakub yap,那个有效。

标签: amazon-cognito istio


【解决方案1】:

问题

使用您当前的 AuthorizationPolicy,您可以使用 403 RBAC: access denied 的正确令牌阻止每个请求。

我最近使用 AuthorizationPolicy 创建了few tests,值得花点时间了解它的工作原理。


解决方案

正如我们在 cmets 中所讨论的,有两种方法可以实际完成这项工作。

使用action:ALLOWrequestPrincipals

spec:
  selector:
    matchLabels:
      istio: ingressgateway
  action: ALLOW
  rules:
    - from:
        - source:
            requestPrincipals: ["*"]

action:DENYNotRequestPrincipals

spec:
  selector:
    matchLabels:
      istio: ingressgateway
  action: DENY
  rules:
    - from:
        - source:
            notRequestPrincipals: ["*"]

示例

istio in action书上有一个例子。

拒绝没有 JWT 令牌的请求

让我们创建一个授权策略,在没有 JWT 令牌的情况下拒绝针对 API 网关的请求:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
 name: app-gw-requires-jwt
 namespace: istio-system
spec:
 selector:
   matchLabels:
     app: istio-ingressgateway
 action: DENY
 rules:
 - from:
   - source:
       notRequestPrincipals: ["*"]
   to:
   - operation:
       hosts: ["apiserver.istioinaction.io"]

此策略使用属性 notRequestPrincipals 和“*”值,这意味着源匹配所有缺少请求主体属性的请求。 Request Principal 属性从请求身份验证过滤器从令牌中提取并存储在过滤器元数据中的两个声明中获取其值。这两个声明是颁发者和主题,格式为 iss/sub。

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多