如何找到我在kubernetes集群中拥有的权限列表?

7ivaypg9  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(2)|浏览(111)

我能够使用listget pod、secrets、deployment和许多其他资源。我可以在群集范围内访问许多资源。有没有办法查看我在kubernetes集群中拥有的所有权限的合并列表?
kubectl auth can-i '*' '*'的结果是no

ctehm74n

ctehm74n1#

我不认为这是可能的,以获得所有的权限,你在一个k8s集群的统一列表。
查看kubectl auth can-i命令的helpexamples,它需要一个VERB,这是一个逻辑Kubernetes API动词,如'get''list''watch''delete'等。TYPE是Kubernetes资源。
kubectl auth can-i '*' '*'的结果可以理解为no,因为它检查您是否可以在当前名称空间中执行所有操作-这在您的情况下显然不是真的,因此是no响应。
您需要为每个资源和每个要检查的操作运行kubectl auth can-i(当然,您可以为所有命名空间使用-A--all-namespaces标志),但我想您可以编写一个脚本,在此命令上运行一个循环,为所有/一些资源检查所有/一些操作的权限。

更新:

如果您真的想这样做,您可以运行一个脚本来循环某些kubectl命令来实现这一点。
该脚本将(可能)看起来像:

#!/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

注意:在bash中,执行此操作的方式可能会有所不同。
我会解释一点:

  • 首先,我们获取所有的名称空间,只打印第一列,-n +2基本上意味着“从输出的第二行开始传递”。
  • 接下来,我们将获取集群中可用的大多数(如果不是全部)资源类型。从here中提取。
  • 遍历K8中支持的一些常见操作。在this页面找到了大部分(如果不是全部)。
  • 然后对前面的命令中得到的每个资源、操作和名称空间运行kubectl auth can-i cmd。

虽然它可以工作,但它需要很多时间,因为我们有很多名称空间,你必须通过大量的输出来找到一些东西,或者你最终会将输出重定向到一个文件并搜索字段。
实际上,您可能希望一次只在几个名称空间上运行它,以便检查几个资源上的几个操作。
就像这样:

#!/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

希望有帮助!

bxjv4tth

bxjv4tth2#

你可以尝试使用命令:kubectl auth can-i --listkubectl auth can-i --list --as=[user-name]
您也可以检查此documentation

相关问题