使用 RBAC (Envoy) 允许 IP 与 TCP 侦听器

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

我正在尝试通过 Envoy 实现以下目标:

  • 使用 RBAC 规则允许 TCP 流量流向 Postgres 服务,以仅允许少数 IP。

这是我的监听器设置。

    - name: listener_postgres
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 54322
      filter_chains:
        filters:
          - name: envoy.filters.network.rbac
            config:
              stat_prefix: rbac_postgres
              rules:
                action: ALLOW
                policies:
                  "allow":
                    permissions:
                      - any: true
                    principals:
                      - source_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
                      - source_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
                      - source_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
          - name: envoy.tcp_proxy
            config:
              stat_prefix: tcp_postgres
              cluster: database_service

我可以确认服务设置正确,因为我可以删除 RBAC 规则并且可以成功连接。

添加 RBAC 规则后,我无法连接到 Postgres 数据库。

但由于某种原因似乎没有任何效果,我也尝试了remote_ip和direct_remote_ip来代替source_ip。

我做错了什么吗?

谢谢

postgresql tcp rbac envoyproxy
3个回答
0
投票

嘿,我遇到了同样的问题,这是适合我的配置。 我使用了

remote_ip
属性。 另外,检查更新的过滤器名称

- name: listener_postgres
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 54322
      filter_chains:
        filters:
          - name: envoy_rbac
            config:
              stat_prefix: rbac_postgres
              rules:
                action: ALLOW
                policies:
                  "allow":
                    permissions:
                      - any: true
                    principals:
                      - remote_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
          - name: envoy_tcp_proxy
            config:
              stat_prefix: tcp_postgres
              cluster: database_service

0
投票

似乎按照Rahul Pratap的建议将属性设置为“remote_ip”有效。

这是一个工作示例

    - name: listener_postgres
      address:
        socket_address:
          protocol: TCP
          address: 0.0.0.0
          port_value: 54322
      filter_chains:
        filters:
          - name: envoy.filters.network.rbac
            config:
              stat_prefix: rbac_postgres
              rules:
                action: ALLOW
                policies:
                  "allow":
                    permissions:
                      - any: true
                    principals:
                      - remote_ip:
                          address_prefix: XX.XX.XX.XX
                          prefix_len: 32
          - name: envoy.tcp_proxy
            config:
              stat_prefix: tcp_postgres
              cluster: database_service

0
投票

就我而言,它的工作原理是这样的

    filter_chains:
    - filters:
      - name: envoy.filters.network.rbac
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.rbac.v3.RBAC
          stat_prefix: rbac
          rules:
            action: ALLOW
            policies:
              "allow":
                permissions:
                  - any: true
                principals:
                  - remote_ip:
                      address_prefix: XX.XX.XX.XX
                      prefix_len: 24
© www.soinside.com 2019 - 2024. All rights reserved.