我已经将OPA docker插件部署为per instruction。在我尝试为docker exec创建自定义docker API权限之前,一切都很好。
我已经在authz.rego文件中添加了以下部分:
allow {
user_id := input.Headers["Authz-User"]
users[user_id].readOnly
input.path[0] == "/v1.41/containers/busybox/exec"
input.Method == "POST"
}但是,当我尝试运行以下bash命令时,它仍然给我错误:Bob下的docker exec -it busybox sh根据指令测试用户。
journalctl -u docker.service提供了以下错误:level=error msg="AuthZRequest for POST /v1.41/containers/busybox/exec returned error: authorization denied by plugin openpolicyagent/opa-docker-authz-v2:0.4: request rejected by administrative policy"
有趣的是,当我注释掉input.path部分时,它是以完全读写用户的身份工作的,所以规则可以工作,但严格提到API path -不能。也许我指定它的方式是错误的?
尝试了不同的变体,例如:
input.path == ["/v1.41/containers/busybox/exec"]
input.path = ["/v1.41/containers/busybox/exec"]
input.path = ["/v1.41*"]
input.path = ["/v1.41/*"]
input.path = ["/v1.41%"]
input.path = ["/v1.41/%"]我也希望得到关于如何允许任何容器的exec操作的建议,而不仅仅是指定的容器。
提前感谢!
发布于 2021-02-23 12:55:52
查看提供给OPA的input map,您应该同时找到input.Path、input.PathPlain和input.PathArr
input := map[string]interface{}{
"Headers": r.RequestHeaders,
"Path": r.RequestURI,
"PathPlain": u.Path,
"PathArr": strings.Split(u.Path, "/"),
"Query": u.Query(),
"Method": r.RequestMethod,
"Body": body,
"User": r.User,
"AuthMethod": r.UserAuthNMethod,
}没有小写的input.path可用,但使用任何其他替代方案应该可以。
https://stackoverflow.com/questions/66323261
复制相似问题