k8s查询ServiceAccount有没有列出 nodes 的权限
要检查 ServiceAccount `xxxxxx:default` 是否具有列出 nodes 的权限,可以使用以下方法:
1. **使用 kubectl auth can-i 命令**
这是最直接的方法,可以检查特定用户或 ServiceAccount 是否具有特定权限:
kubectl auth can-i list nodes --as=system:serviceaccount:xxxxxx:default
如果有权限,将返回 `yes`,否则返回 `no`。
2. **检查 Role 和 RoleBinding**
查看命名空间级别的角色和角色绑定:
# 查看 xxxxxx 命名空间中的 Role
kubectl get role -n xxxxxx# 查看 RoleBinding
kubectl get rolebinding -n xxxxxx# 查看具体的 Role 和 RoleBinding 详情
kubectl get role <role-name> -n xxxxxx -o yaml
kubectl get rolebinding <rolebinding-name> -n xxxxxx -o yaml
3. **检查 ClusterRole 和 ClusterRoleBinding**
由于 nodes 是集群级别资源,通常需要 ClusterRole 和 ClusterRoleBinding:
# 查看所有的 ClusterRole
kubectl get clusterrole# 查看与 lindorm 相关的 ClusterRole
kubectl get clusterrole | grep yyy# 查看 ClusterRoleBinding
kubectl get clusterrolebinding | grep yyy# 查看具体的 ClusterRole 和 ClusterRoleBinding 详情
kubectl get clusterrole <clusterrole-name> -o yaml
kubectl get clusterrolebinding <clusterrolebinding-name> -o yaml
4. **使用 kubectl describe 查看详细信息**
# 查看 ServiceAccount 的详细信息
kubectl describe sa default -n xxxxxx# 查看与 ServiceAccount 关联的 RoleBindings
kubectl get rolebindings,clusterrolebindings --all-namespaces -o wide | grep xxxxxx
5. **模拟请求测试**
可以使用 kubectl 的 --as 参数模拟请求:
# 模拟 ServiceAccount 发起 list nodes 请求
kubectl get nodes --as=system:serviceaccount:xxxxxx:default
通过这些方法,可以确定 ServiceAccount 是否具有列出 nodes 的权限。根据之前的审计日志,目前该 ServiceAccount 没有相应权限,需要创建适当的 RBAC 资源来授予权限。