#!/bin/bash
for namespace in $(kubectl get namespaces | awk '{ print $1 }' | tail -n +2); do
echo "Current namespace: $namespace"
for resource in $(kubectl api-resources --verbs=list --namespaced -o name); do
for action in get list watch create update patch delete; do
echo "- $action $resource"
kubectl auth can-i "$action" "$resource" --namespace="$namespace"
done
done
done
#!/bin/bash
for namespace in default calico-system; do
echo "Current namespace: $namespace"
for resource in pods deployments.apps; do
for action in get create; do
echo "- $action $resource"
kubectl auth can-i "$action" "$resource" --namespace="$namespace"
done
done
done
这是一个更快,并会帮助你很容易找到你要找的东西。 样本输出:
Current namespace: default
- get pods
yes
- create pods
no
- get deployments.apps
yes
- create deployments.apps
no
Current namespace: calico-system
- get pods
yes
- create pods
no
- get deployments.apps
yes
- create deployments.apps
no
2条答案
按热度按时间ctehm74n1#
我不认为这是可能的,以获得所有的权限,你在一个k8s集群的统一列表。
查看
kubectl auth can-i
命令的help
和examples
,它需要一个VERB
,这是一个逻辑Kubernetes API动词,如'get'
,'list'
,'watch'
,'delete'
等。TYPE
是Kubernetes资源。kubectl auth can-i '*' '*'
的结果可以理解为no
,因为它检查您是否可以在当前名称空间中执行所有操作-这在您的情况下显然不是真的,因此是no
响应。您需要为每个资源和每个要检查的操作运行
kubectl auth can-i
(当然,您可以为所有命名空间使用-A
或--all-namespaces
标志),但我想您可以编写一个脚本,在此命令上运行一个循环,为所有/一些资源检查所有/一些操作的权限。更新:
如果您真的想这样做,您可以运行一个脚本来循环某些
kubectl
命令来实现这一点。该脚本将(可能)看起来像:
注意:在
bash
中,执行此操作的方式可能会有所不同。我会解释一点:
-n +2
基本上意味着“从输出的第二行开始传递”。kubectl auth can-i
cmd。虽然它可以工作,但它需要很多时间,因为我们有很多名称空间,你必须通过大量的输出来找到一些东西,或者你最终会将输出重定向到一个文件并搜索字段。
实际上,您可能希望一次只在几个名称空间上运行它,以便检查几个资源上的几个操作。
就像这样:
这是一个更快,并会帮助你很容易找到你要找的东西。
样本输出:
希望有帮助!
bxjv4tth2#
你可以尝试使用命令:
kubectl auth can-i --list
或kubectl auth can-i --list --as=[user-name]
您也可以检查此documentation