Shu*_*eng 3 linux cloud bash kubernetes
如何exec使用 来检查授权kubectl auth can-i ...?
而get、create、delete等被视为动词,exec则不是,如下所示:
$ kubectl --kubeconfig=config-prod.yml auth can-i exec po
Warning: verb 'exec' is not a known verb
yes
Run Code Online (Sandbox Code Playgroud)
授权是否exec包含在另一个授权中,例如create?
通常,当有人创建RBAC规则并想要检查哪些verbs规则可供资源使用时:
$ kubectl api-resources -o wide | grep pods
pods po v1 true Pod [create delete deletecollection get list patch update watch]
Run Code Online (Sandbox Code Playgroud)
然而这还不是全部。如果您将使用如下所示的不同方法:
$ kubectl proxy &
Starting to serve on 127.0.0.1:8001
curl http://localhost:8001/api/v1
{
"kind": "APIResourceList",
"groupVersion": "v1",
"resources": [
{
...
### You will be able to find `pods` and verbs which can be used with pods
{
"name": "pods",
"singularName": "",
"namespaced": true,
"kind": "Pod",
"verbs": [
"create",
"delete",
"deletecollection",
"get",
"list",
"patch",
"update",
"watch"
],
"shortNames": [
"po"
### But also `pod/exec` and `pod/logs`
{
"name": "pods/exec",
"singularName": "",
"namespaced": true,
"kind": "PodExecOptions",
"verbs": [
"create",
"get"
]
},
{
"name": "pods/log",
"singularName": "",
"namespaced": true,
"kind": "Pod",
"verbs": [
"get"
]
Run Code Online (Sandbox Code Playgroud)
在使用 RBAC 授权 - 参考资源中,您可以找到有关 的信息subresource。
在 Kubernetes API 中,大多数资源都是使用其对象名称的字符串表示形式来表示和访问的,例如 Pod 的 pod。RBAC 是指使用与相关 API 端点的 URL 中出现的完全相同的名称的资源。一些 Kubernetes API 涉及子资源,例如 Pod 的日志
在本文档中,您有一个示例,pods/logs但类似的情况也适用于pods/exec。
如果您将使用命令:
$ kubectl auth can-i create pods/exec
yes
$ kubectl auth can-i get pods/exec
yes
## Or
$ kubectl auth can-i get pods --subresource=exec
yes
$ kubectl auth can-i create pods --subresource=exec
yes
Run Code Online (Sandbox Code Playgroud)
上面的输出不包括Warning我使用的verbs(get和create) 中的 ( 和 ) pods/exec。这就是正确的语法,先使用verb然后subresource。
为什么两个输出都是yes?我使用了管理员角色。
如果您想进行一些测试,您可以创建ServiceAccount(test),Role和RoleBinding. Role下面的yaml:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-view-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-exec-view-role
rules:
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get"]
Run Code Online (Sandbox Code Playgroud)
的输出auth can-i:
$ kubectl auth can-i create pods/exec --as=system:serviceaccount:default:test
no
$ kubectl auth can-i get pods/exec --as=system:serviceaccount:default:test
yes
Run Code Online (Sandbox Code Playgroud)
create pods/exec关于和之间的区别,get pods/exec你可以检查 github thread用户即使没有权限也可以使用 websocket 端点执行到 pod 中pods/exec create。特别是在 @liggitt评论中:
因此,与 pods/exec 子资源一起使用的动词只是应该指示该 API 端点使用哪种 HTTP 方法?
这就是所有资源动词的工作方式(通过 get 映射到特殊情况列表和监视中的特定动词)。请参阅https://kubernetes.io/docs/reference/access-authn-authz/authorization/#define-the-request-verb
因此,构建 RBAC 角色的管理员应该查看代码并找出 websocket exec 端点支持哪些 HTTP 方法?
不,子资源和关联的动词应包含在 API 文档中。这值得针对https://github.com/kubernetes/website/issues/修复生成器以获取这些子资源
希望它回答了您的问题。如果您仍有疑问,请告诉我。
| 归档时间: |
|
| 查看次数: |
3063 次 |
| 最近记录: |