是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存储库提供了如何执行此操作的出色示例。测试可能类似于:
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
}