【问题标题】:Rego test to filter by IP addressRego测试按IP地址过滤
【发布时间】:2020-07-16 16:55:34
【问题描述】:

我正在使用与此类似的规则:

allow {
    http_request.method == "POST"
    allowed_paths[http_request.path]
    net.cidr_contains("XX.YYY.ZZZ.160/29-XX.YYY.ZZZ.32/29",source_address.Address.SocketAddress.address)
}

我有两个问题:

  1. 这是按发出请求的客户端的 IP 地址进行过滤的正确方法吗?
  2. 是否存在某种方法来模拟来自其中一些 IP 的请求并对其进行测试?

【问题讨论】:

  • 您可以发布您正在使用的完整文件吗?照原样,很难猜测其中一些变量来自哪里/它们是如何格式化的。如果太长,请随时链接到play.openpolicyagent.org

标签: spring rego


【解决方案1】:

是的,net.cidr_contains 是正确的方法,如果您知道批准的请求将来自特定的块。

我假设你的 Rego 看起来像这样:

package validate

import input.attributes.request.http as http_request
import input.attributes.source.address as source_address

allowed_paths = {
  "/foo",
  "/bar"
}

allow {
    http_request.method == "POST"
    allowed_paths[http_request.path]
    net.cidr_contains("127.0.0.1/24",source_address.Address.SocketAddress.address)
}

有几种测试方法。

您可以手动使用Rego Playground,它允许您手写请求并对其进行测试。这不是一个好的自动化解决方案,但可以用于现场/健全性检查。

对于 CI 或预提交检查,您可以使用 opa CLI 进行单元测试。 Gatekeeper Library 存储库提供了 excellent examples 如何执行此操作。测试可能类似于:

package validate

test_input_allowed_request {
    input := {"attributes":{"request":{"http":{"method":"POST","path":"/foo"}},"source":{"address":{"Address":{"SocketAddress":{"address":"127.0.0.64/26"}}}}}}
    results := allow with input as input
    results.allow
}

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2016-12-04
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多