Istio 授权策略规则问题



我一直在测试 istio (1.6( 授权策略,并想确认以下内容:

  1. 我是否可以使用 k8s 服务名称,如下所示,其中httpbin.bar是部署/工作负载 httpbin 的服务名称:
- to:
- operation:
hosts: ["httpbin.bar"]
  1. 我有以下规则;仅允许从foo命名空间中的服务帐户sleep访问httpbin.bar服务。
---
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: whitelist-httpbin-bar
namespace: bar
action: ALLOW 
rules:
- from:
- source:
principals: ["cluster.local/ns/foo/sa/sleep"]
- to:
- operation:
hosts: ["httpbin.bar"]

我设置了 2 个服务;httpbin.barprivatehttpbin.bar.我的假设是它会阻止对privatehttpbin.bar的访问,但事实并非如此。附带说明一下,我故意避免添加selector.matchLabels因为据我所知,该规则应该只对httpbin.bar成功。

文档指出:

当至少有一个源、操作和条件与请求匹配时,就会发生匹配。

根据这里。

我解释说 AND 逻辑将适用于sourceoperation.

如果我能找出为什么这可能不起作用,或者我的理解需要纠正,我将不胜感激。

对于AuthorizationPolicy对象,命名空间栏中有两个规则:

  • 允许来自foo命名空间的任何请求;服务帐户sleep到任何服务。
  • 允许任何请求httpbin服务;从任何命名空间,使用任何服务帐户。

所以这是一个OR,你正在申请。

如果要应用 AND;这意味着允许来自命名空间foo与服务帐户sleep的任何请求与服务httpbin通信,则需要在命名空间栏中应用以下规则:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: whitelist-httpbin-bar
namespace: bar
rules:
- from:
- source:
principals: ["cluster.local/ns/foo/sa/sleep"]
to:                     # <- remove the dash (-) from here
- operation:
hosts: ["httpbin.bar"]

关于第一点 您可以通过 k8s 服务名称指定主机名。因此,主机字段可以接受 httpbin.bar。

关于第二点, 根据这里,

授权策略范围(目标(由 "元数据/命名空间"和一个可选的"选择器"。

"元数据/命名空间"告诉策略应用哪个命名空间。如果已设置 对于根命名空间,该策略适用于网格中的所有命名空间。

因此,授权策略whitelist-httpbin-bar适用于命名空间foo中的工作负载。但是,要授权的服务httpbinprivatehttpbin位于bar命名空间中。因此,您的授权策略不会限制对这些服务的访问。

如果工作负载没有 ALLOW 策略,请允许请求。

上述条件使请求有效。

希望这有帮助。

最新更新