我们可以在Role and ClusterRole documentation 中找到,权限(规则)纯粹是附加的——没有“拒绝”规则:
角色和集群角色
RBAC 角色或 ClusterRole 包含表示一组权限的规则。权限纯粹是附加的(没有“拒绝”规则)。
可以找到可能的动词列表here:
您需要提供应该应用于规则中包含的资源的所有动词。
而不是:
verbs = ["*"]
提供所需的动词,例如:
verbs = ["get", "list", "patch", "update", "watch"]
例如,我创建了一个 example-role Role 和一个 example_role_binding RoleBinding。
example_role_binding RoleBinding 将example-role Role 中定义的权限授予用户john。
注意:有关使用以下资源的详细信息,请参阅kubernetes_role和kubernetes_role_binding 资源文档。
resource "kubernetes_role" "example_role" {
metadata {
name = "example-role"
namespace = "default"
}
rule {
api_groups = ["*"]
resources = ["*"]
verbs = ["get", "list", "patch", "update", "watch"]
}
}
resource "kubernetes_role_binding" "example_role_binding" {
metadata {
name = "example_role_binding"
namespace = "default"
}
role_ref {
api_group = "rbac.authorization.k8s.io"
kind = "Role"
name = "example-role"
}
subject {
kind = "User"
name = "john"
api_group = "rbac.authorization.k8s.io"
}
}
另外,我创建了test_user.sh Bash 脚本来快速检查它是否按预期工作:
注意:您可能需要修改变量namespace、resources , 和 user 以满足您的需求。
$ cat test_user.sh
#!/bin/bash
namespace=default
resources="pods deployments"
user=john
echo "=== NAMESPACE: ${namespace} ==="
for verb in create delete get list patch update watch; do
echo "-- ${verb} --"
for resource in ${resources}; do
echo -n "${resource}: "
kubectl auth can-i ${verb} ${resource} -n ${namespace} --as=${user}
done
done
$ ./test_user.sh
=== NAMESPACE: default ===
-- create --
pods: no
deployments: no
-- delete --
pods: no
deployments: no
-- get --
pods: yes
deployments: yes
-- list --
pods: yes
deployments: yes
...