阻止访问kubernetes命名空间的OPA rego策略



我正试图编写一个策略,阻止特定用户对特定kubernetes命名空间列表的权限。到目前为止,这就是我所拥有的,它适用于单个用户/命名空间,但我需要一个可以处理多个用户或命名空间的

package kubernetes.admission
operations = {"CREATE", "UPDATE", "DELETE"}
deny[msg] {
username := input.request.userInfo.username
username == "user1"
operations[input.request.operation]
namespaces:= input.request.object.metadata.namespace]
namespace == ns1
msg := sprintf("Unauthorized: %v is not permitted to modify objects in namespace %v", [username, namespace])
}

听起来你想要一个映射,然后每个用户->允许的命名空间。下面是一个如何做到这一点的例子。

package kubernetes.admission
import future.keywords.in
operations := {"CREATE", "UPDATE", "DELETE"}
user_namespaces := {
"admin1": ["default", "kube-system"],
"user1": ["user1-ns"],
"user2": ["default", "user2-ns"],
}
deny[msg] {
input.request.operation in operations
username := input.request.userInfo.username
namespace:= input.request.object.metadata.namespace

not namespace in user_namespaces[username]
msg := sprintf("Unauthorized: %v is not permitted to modify objects in namespace %v", [username, namespace])
}

对于";真实的";策略您可能不想对用户进行硬编码->命名空间映射与此类似,但将其作为OPA内存中数据的一部分提供,但原理相同。

最新更新