如何在 k8s 中查看与特定服务帐户关联的权限/角色?

inj*_*joy 11 rbac kubernetes

我尝试使用该kubectl get sa default命令,但只能看到一些非常基本的值。在 k8s 中查看与特定服务帐户关联的权限/角色的命令是什么?

Luc*_*Luc 11

以下命令可能会有所帮助。它基本上获取 RoleBindings 和 ClusterRoleBindings,其中 .subjects[0] 是 ServiceAccount 的名称。

$ kubectl get rolebinding,clusterrolebinding --all-namespaces -o jsonpath='{range .items[?(@.subjects[0].name=="SERVICE_ACCOUNT_NAME")]}[{.roleRef.kind},{.roleRef.name}]{end}'
Run Code Online (Sandbox Code Playgroud)

注意:它不会列出在主题字段中包含多个对象的 RoleBindings / ClusterRoleBindings

例如,如果 weave-net 部署为网络插件,您可以获取 weave-net ServiceAccount 使用的 Role 和 ClusterRole:

$ kubectl get rolebinding,clusterrolebinding --all-namespaces -o jsonpath='{range .items[?(@.subjects[0].name=="weave-net")]}[{.roleRef.kind},{.roleRef.name}]{end}'
[Role,weave-net][ClusterRole,weave-net]
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


iva*_*dov 11

上述所有答案的问题在于,它们依赖于您进行额外的跑腿工作,然后将它们授予的所有和RoleBindings/或ClusterRoleBindings以及任何重复策略编译到一个主列表中,您可以为给定的用户/组/服务帐户引用。

经过大量搜索,我发现了rbac-tool

查找绑定

使用该lookup命令查看所有Roles绑定ClusterRoles到用户或服务帐户的内容。

例如,这将打印Roles和。ClusterRolesdefault ServiceAccount

rbac-tool lookup default

  SUBJECT                         | SUBJECT TYPE   | SCOPE       | NAMESPACE             | ROLE
+---------------------------------+----------------+-------------+-----------------------+-----------------------------------------------------------------+
  default                         | ServiceAccount | ClusterRole |                       | cluster-admin
  default                         | ServiceAccount | Role        | openshift-marketplace | 29517457e658582846e43460363c3ffde708b018f636a66cc7e33076254bff4
  default                         | ServiceAccount | ClusterRole | rook-ceph             | psp:rook
  system:serviceaccounts:default  | Group          | ClusterRole | default               | system:image-puller
Run Code Online (Sandbox Code Playgroud)

显示 RBAC 策略

使用该policy-rules命令查看授予特定用户或服务帐户的所有资源和 RBAC 规则。

rbac-tool policy-rules system:serviceaccounts:default

  TYPE  | SUBJECT                        | VERBS | NAMESPACE | API GROUP          | KIND                | NAMES | NONRESOURCEURI | ORIGINATED FROM
+-------+--------------------------------+-------+-----------+--------------------+---------------------+-------+----------------+-----------------------------------+
  Group | system:serviceaccounts:default | get   | default   | core               | imagestreams/layers |       |                | ClusterRoles>>system:image-puller
  Group | system:serviceaccounts:default | get   | default   | image.openshift.io | imagestreams/layers |       |                | ClusterRoles>>system:image-puller
Run Code Online (Sandbox Code Playgroud)


And*_*ong 8

kubectl get rolebindings,clusterrolebindings \
--all-namespaces  \
-o custom-columns='KIND:kind,NAMESPACE:metadata.namespace,NAME:metadata.name,SERVICE_ACCOUNTS:subjects[?(@.kind=="ServiceAccount")].name'
Run Code Online (Sandbox Code Playgroud)

你可以试试这个命令来生成一个表来显示映射

在此处输入图片说明

  • 或者只需使用“kubectl get rolebindings,clusterrolebindings --all-namespaces -o Wide”,然后 grep 获取服务帐户的名称 (3认同)

rok*_*rok 8

我认为您正在寻找命令:kubectl auth can-i --listkubectl auth can-i --list --as=[user-name]

示例输出:

kubectl auth can-i --list 
Resources                                       Non-Resource URLs                     Resource Names              Verbs
selfsubjectaccessreviews.authorization.k8s.io   []                                    []                          [create]
selfsubjectrulesreviews.authorization.k8s.io    []                                    []                          [create]
persistentvolumeclaims                          []                                    []                          [get list watch create delete deletecollection patch update]
pods/exec                                       []                                    []                          [get list watch create delete deletecollection patch update]
pods                                            []                                    []                          [get list watch create delete deletecollection patch update]
events                                          []                                    []                          [get list watch]
pods/log                                        []                                    []                          [get list watch]
configmaps                                      []                                    []                          [get watch list]
                                                [/.well-known/openid-configuration]   []                          [get]
                                                [/api/*]                              []                          [get]
                                                [/api]                                []                          [get]
                                                [/apis/*]                             []                          [get]
                                                [/apis]                               []                          [get]
                                                [/healthz]                            []                          [get]
                                                [/healthz]                            []                          [get]
                                                [/livez]                              []                          [get]
                                                [/livez]                              []                          [get]
                                                [/openapi/*]                          []                          [get]
                                                [/openapi]                            []                          [get]
                                                [/openid/v1/jwks]                     []                          [get]
                                                [/readyz]                             []                          [get]
                                                [/readyz]                             []                          [get]
                                                [/version/]                           []                          [get]
                                                [/version/]                           []                          [get]
                                                [/version]                            []                          [get]
                                                [/version]                            []                          [get]
podsecuritypolicies.policy                      []                                    [global-unrestricted-psp]   [use]
Run Code Online (Sandbox Code Playgroud)


P E*_*ram 0

在 Kubernetes 中,服务帐户使用 ClusterRoleBinding 对象映射到权限(集群级别或命名空间级别)。您需要查找 RoleBinding 或 ClusterRoleBinding 对象,然后查找 Role 或 ClusterRole 对象以查看它在集群中拥有哪些权限。