我正在使用与此类似的规则:
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)
}
我有两个问题:
答案 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
}