istio返回带有通配符路径的“rbac:access denied”

3phpmpom  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(510)

在“authorizationpolicy”中使用通配符路径时,istio返回“rbac:access denied”,请参见文件:
api-key-test-authorization.yml接口

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: api-key-test-authorization
  namespace: test
spec:
  selector:
    matchLabels:
      api-key-secured: enabled
  rules:
  - to:
    - operation:
        paths: ["*/test1", "*/test2/*", "*/test4*"]
  - to:
    - operation:
        paths: ["/*"]
    when:
    - key: request.headers[api-key]
      values: ["XXXXXXXX"]

资源.java

...
enter code here
@GetMapping(value = "/test1")
@ResponseBody
public ResponseEntity<Resource> getTest1(HttpServletResponse response) throws IOException {

    System.out.println("Test 1");

    return ResponseEntity.ok().build();
}

@GetMapping(value = "/test2/{id}/xpto")
@ResponseBody
public ResponseEntity<Resource> getTest2(@PathVariable("id") String id, HttpServletResponse response) throws IOException {

    System.out.println(id + " XPTO");

    return ResponseEntity.ok().build();
}

@GetMapping(value = "/test3/{id}")
@ResponseBody
public ResponseEntity<Resource> getTest3(@PathVariable("id") String id, HttpServletResponse response) throws IOException {

    System.out.println(id + " of Test 3");

    return ResponseEntity.ok().build();
}

结果:
"http://example.com/test1“:工作很好;
"http://example.com/test2//xpto“:return”rbac:拒绝访问“;
"http://example.com/test3/“:return”rbac:拒绝访问“;
这些路径配置为不需要传递“api密钥”,但是当路径中存在通配符(*)时,它会返回要求传递“api密钥”的错误。
我用的是istio.1.4.9

xytpbqjk

xytpbqjk1#

似乎根据文档,前缀或后缀匹配是可能的,但不是两者都有:
规则中的任何字符串字段都支持精确、前缀、后缀和状态匹配:
精确匹配:“”将匹配值“”。
前缀匹配:“”将匹配值“”和“d”。
后缀匹配:“
”将匹配值“”和“x”。
状态匹配:当值不为空时,“*”将匹配。
请注意,对于给定的url,前缀匹配可能就足够了,因为在此上下文中没有考虑域部分。
类似的东西(未经测试)

paths: ["test1", "test2/*", "test4*"]

相关问题