【k8s】--as=system:serviceaccount:demo-rbac:demo-user模拟某组件的某sa

--as=system:serviceaccount:demo-rbac:demo-user模拟某组件的某sa

在 Kubernetes 中,kubectl 命令提供了一个 --as 参数,用于临时模拟以指定的用户身份执行命令。这个功能可以帮助你测试和验证某个用户或服务账户的权限。

1. --as 参数

  • 功能:--as 参数允许你指定一个 Kubernetes 用户或服务账户的身份,使用该身份来执行 kubectl 命令。
  • 场景:这对于权限管理和调试非常有用,尤其是当你想要检查某个用户或服务账户是否拥有足够的权限来执行某个操作时。

解释:

kubectl get role -n demo-rbac --as=system:serviceaccount:demo-rbac:demo-user

  • kubectl get role -n demo-rbac:

    • 这个命令用于列出 demo-rbac 命名空间中的所有 Role 资源。Role 是在命名空间级别管理权限的资源。
    • -n demo-rbac 指定了要在 demo-rbac 命名空间中执行这个命令。
  • --as=system:serviceaccount:demo-rbac:demo-user:

    • 这个部分是关键,它告诉 kubectl 命令临时以 demo-user这个服务账户的身份执行命令,而不是以当前用户的身份执行。
    • system:serviceaccount: 是 Kubernetes 内部使用的一种标识符,表示这是一个服务账户。
    • demo-rbac 是服务账户所属的命名空间。
    • demo-user 是服务账户的名称。

什么是当前用户的身份? 我们知道一个命名空间A内可以有若干个sa,但是A内的pod只能指定一个sa,当我们kubectl exec 命令进入pod后,执行

curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default.svc/api/v1/namespaces/demo-rbac/pods

虽然没有指定sa,但是错误信息 "message": "forbidden: User "system:serviceaccount:demo-rbac:demo-user" 中却提示我们 使用了 sa=demo-user,也就是说整个pod内的任意进程访问kube api,自动携带的身份就是pod的sa属性

含有错误信息的示例,前提是这个sa确实没有权限,或者替换成其他的没有权限的url资源:

复制代码
 curl -k -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default.svc
{
"kind": "Status",
"apiVersion": "v1",
"metadata": {

},
"status": "Failure",
"message": "forbidden: User \"system:serviceaccount:demo-rbac:demo-user\" cannot get path \"/\": user does not have read access to the namespace",
"reason": "Forbidden",
"details": {

},
"code": 403
}

2. 使用 --as 的典型场景

一般来说 --as 使用用于在主机上执行kube命令,进行验证某个权限功能,此时不必进入到pod中,否则,就需要像前面章节中提到的kubectl exec 进入到pod后,再执行命名

  • 权限验证:你可以用 --as 参数模拟某个用户或服务账户,来验证他们是否有执行某些操作的权限。
  • 调试:如果某个用户报告无法访问某些资源,你可以使用 --as 参数来模拟该用户并重现问题。

示例场景

假设你有一个服务账户 demo-user,你想验证这个服务账户是否有权限在 demo-rbac 命名空间中列出所有 Role 资源。使用以下命令:

复制代码
kubectl get role -n demo-rbac --as=system:serviceaccount:demo-rbac:demo-user

如果这个服务账户有权限,你会看到 demo-rbac 命名空间中的 Role 列表。

如果没有权限,命令会失败,并提示相关的权限错误信息。

相关推荐
记得开心一点嘛3 小时前
Docker compose 部署微服务项目(从0-1出发纯享版无废话)
docker·容器·eureka
猿小猴子3 小时前
在 Ubuntu24.04 LTS 上 Docker 部署英文版 n8n 和 部署中文版 n8n-i18n-chinese
docker·容器·n8n
io无心4 小时前
Docker绑定端口报错
运维·docker·容器
zxnbmk4 小时前
pod内部共享命名空间与k8s命名空间是一个东西吗?
云原生·容器·kubernetes·namespaces
三个蔡5 小时前
Java求职者面试:从Spring Boot到微服务的技术深度探索
java·大数据·spring boot·微服务·kubernetes
cherishSpring6 小时前
在windows使用docker打包springboot项目镜像并上传到阿里云
spring boot·docker·容器
LKAI.6 小时前
k8s存储动态供给StorageClass
docker·微服务·云原生·容器·kubernetes
你可以叫我仔哥呀7 小时前
k8s学习记录(五):Pod亲和性详解
学习·容器·kubernetes
马武寨山的猴子8 小时前
【MinerU】:一款将PDF转化为机器可读格式的工具——RAG加强(Docker版本)
人工智能·docker·容器·pdf·rag
高峰君主9 小时前
「Docker已死?」:基于Wasm容器的新型交付体系如何颠覆十二因素应用宣言
docker·容器·wasm