重新测试以按IP地址过滤

时间:2020-07-16 16:55:34

标签: spring rego

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

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中的请求并对其进行测试的方法?

1 个答案:

答案 0 :(得分:0)

是的,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
}