kubernetes - 使用 terraform 在 k8s 集群中授予 RBAC 角色
问题描述
我想将RBAC
规则分配给一个用户,该用户提供对使用 Terraform资源中除动词'create'
和'delete'
动词之外的所有资源的访问权限。'namespace'
目前我们有如下规则:
rule {
api_groups = ["*"]
resources = ["*"]
verbs = ["*"]
}
解决方案
正如我们在Role 和 ClusterRole 文档中发现的那样,权限(规则)纯粹是附加的——没有“拒绝”规则:
角色和集群角色 RBAC 角色或集群角色包含代表一组权限的规则。权限纯粹是附加的(没有“拒绝”规则)。
可以在这里找到可能的动词列表:
您需要提供应该应用于规则中包含的资源的所有动词。
代替:
verbs = ["*"]
提供所需的动词,例如:
verbs = ["get", "list", "patch", "update", "watch"]
例如,我创建了一个example-role
Role
和一个example_role_binding
RoleBinding
. 授予用户中定义的
权限。注意:有关使用以下资源的详细信息,请参阅kubernetes_role和kubernetes_role_binding资源文档。example_role_binding
RoleBinding
example-role
Role
john
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
...
推荐阅读
- html - 上传文件时无法访问该站点
- java - 过滤到地图后收集到流的问题
- python - 部分金额的限制
- stripe-payments - 带有条纹的 Laravel 收银员:没有这样的计划错误?
- javascript - JavaScript:将事件侦听器添加到页面加载时不存在特定表单元素的动态表单?
- angular6 - 如何对 Angular 中的 BehaviourSubject 订阅进行单元测试
- html - 如何使 .css 文件与 Microsoft Edge 和 Internet Explorer 中的 .html 文件一起运行?
- python-3.x - BeatuifulSoup 返回重复数据而不是迭代
- android - 如何在 mvvm 模式下在 android 中有一个带有房间的启动画面。?
- perl - 编辑 Perl $PERL5LIB 和 @INC