带通配符的 Istio 授权策略

问题描述 投票:0回答:2

授权策略不支持路径上的任何通配符模式吗?

我有以下端点:

/my-service/docs/active (GET)
/my-service/docs/<id>/activate/<bool> (PUT)

第一个将获取所有活动文档,第二个将激活/停用特定文档。 我尝试在授权策略上设置它,但由于 willdcard 的原因,它似乎忽略了此策略。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: my-service-private
  namespace: default
spec:
  action: DENY
  selector:
    matchLabels:
      app:my-service
  rules:
    - from:
        - source:
            notNamespaces: [ "default" ]
      to:
        - operation:
            methods: ["GET"]
            paths: ["/my-service/docs/active"]
        - operation:
            methods: ["PUT"]
            paths: ["/my-service/docs/*/activate/*"]  

除了更新我的所有端点之外,还有什么不同的解决方案吗?

10x

authorization istio
2个回答
4
投票

正如我在评论中提到的

根据 istio 文档

规则

规则匹配来自执行列表的源列表的请求 操作须遵守一系列条件。匹配发生在 至少有一个来源、操作和条件符合请求。一个 空规则始终匹配。

规则中的任何字符串字段都支持 Exact、Prefix、Suffix 和 存在匹配:

  • 精确匹配:“abc”将匹配值“abc”。
  • 前缀匹配:“abc*”将匹配值“abc”和“abcd”。
  • 后缀匹配:“*abc”将匹配值“abc”和“xabc”。
  • 存在匹配:“*”不为空时匹配。

所以授权策略确实支持通配符,但我认为问题在于

*/activate/*
路径,因为路径只能在开头、结尾或整个字符串使用通配符,双通配符不起作用。

有相关的开放 github 问题:


0
投票

我想这已经从 2021 年开始更新了;根据最新的授权策略文档

如果列表中的路径包含 {*} 或 {**} 路径模板运算符,它将被解释为 Envoy Uri 模板。要成为有效的路径模板,路径不得包含支持的运算符之外的 *、{ 或 }。使用路径模板运算符的路径段中不允许有其他字符。

  • {*} 匹配不能超出路径段的单个 glob。
  • {**} 匹配零个或多个 glob。如果路径包含 {**},则它必须是最后一个运算符。

我已使用这些模式成功匹配:

   - to:
      - operation:
          # Bypass auth without JWT present
          paths:
            - '/{*}/health'
            - '/{*}/buildinfo'
            - '/{*}/assets/{**}'
            - '/assets/{**}'
© www.soinside.com 2019 - 2024. All rights reserved.