使用 Istio 的 IP 访问限制不起作用

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

我正在尝试使用 Istio 实施基于 IP 的访问限制,我希望 Istio 阻止除某些 IP 之外的所有请求。我已经到了阻止请求但不允许我在 YAML 清单中添加的 IP 的地步。我怀疑它看到的 IP 与原始客户端 IP 不同,因为我的 Istio 前面有几个负载均衡器。

我从一些文档中读到 X-Forwarder-For 是我们应该用来获取实际 IP 的东西,我已经在其他一些实现中使用过它,但不清楚如何让 Istio 选择实际的 X-Forwarder-Host。我们可以创建一些自定义标头并让 Istio 从那里读取吗?请帮助

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: ingress-policy
  namespace: istio-system
spec:
  selector:
    matchLabels:
      app: istio-ingressgateway
  action: ALLOW
  rules:
  - from:
    - source:
        remoteIpBlocks: ["98.XXX.XXX.66"]

我在我的 Envoy 中启用了调试日志,下面是正在记录的内容。

[2023-05-13T03:22:05.387Z] "GET /cluster/XXXX/XXXX/hari5 HTTP/1.1" 403 - rbac_access_denied_matched_policy[none] - "-" 0 19 0 - "98.XXX.XXX.66:52063,10.240.208.62" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36" "37ccfaa6-7deb-414f-9f5c-72926c997994" "XXX-XX-XXX.XXX.com" "-" outbound|80||XXX.XXX-XXX.svc.cluster.local - 10.240.208.23:8080 10.240.208.62:40755 - -

istio
2个回答
0
投票

我怀疑它看到的 IP 与原始 IP 不同 客户端 IP,因为我的 Istio 前面有几个负载均衡器。

假设您不使用

 externalTrafficPolicy: Local
,因为如here所述,您已经使用了
remoteIpBlocks
。因此,如果您遵守该规定,我看到的唯一问题如下。

负载均衡器是位于客户端和 Istio 之间的一个组件。因此,应该是负载均衡器读取客户端的 IP 并将此值添加到标头

X-Forwarded-For
。然后 Istio 将能够根据客户端的 IP 地址理解和过滤请求。


0
投票

这就是我们必须用来限制我们的一个应用程序基于 IP 的 GET 访问。

x-forwarded-for 标头只是一个逗号分隔的字符串,其中第一个条目是客户端 IP 地址,其余 IP 地址来自网关、代理等

  • 对于单个 IP 地址的匹配:例如“123.234.345.567,*”(注意当最后一段小于 3 位时,通配符前的逗号很重要)
  • 匹配最后一段的所有地址:例如“123.234.345.*”
  • 用于匹配最后 2 个段中的所有地址:例如“123.234.*”

You may also add multiple IP-patterns under

values
.

我希望这会带给你更多。

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: our-authorization-policy
  namespace: our-namespace
spec:
  selector:
    matchLabels:
      app: our-app-name
  action: ALLOW
  rules:
    - to:
        - operation:
            methods: ["GET"]
      when:
        - key: request.headers[x-forwarded-for]
          values:
            - "xxx.xxx.xxx.xxx,*" # note the trailing '*'
© www.soinside.com 2019 - 2024. All rights reserved.