RBAC 与服务账户
锁定集群访问权限。
RBAC 与服务账户 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
RBAC 控制一切
基于角色的访问控制(RBAC)决定哪些身份可以对哪些资源执行哪些操作。每个 API 调用都要根据 RBAC 进行授权。配置错误的 RBAC 是集群内权限提升的首要原因。
- 主体:用户、组、服务账户。
- 角色将动词绑定到资源。
- 绑定将主体连接到角色。
角色与 ClusterRoles 的区别
存在两种作用域。
- 角色 + RoleBinding:命名空间级权限。
- ClusterRole + ClusterRoleBinding:集群范围的权限。
将 ClusterRoleBinding 绑定到 cluster-admin 即可获得完全控制权。将其授予服务账户是常见且危险的错误。
服务账户令牌
每个容器组都以服务账户身份运行,并默认挂载其令牌。该令牌是一种持有者凭据,携带该账户的 RBAC 权限。如果容器组被攻陷,令牌也会失陷。
现代集群会签发短期、绑定受众的投射令牌,但旧式的长期机密令牌仍可能残留。
# Inspect which service account a pod uses
kubectl get pod web -o jsonpath='{.spec.serviceAccountName}'盘点您的权限
捕获令牌后,第一步是了解它能执行哪些操作。Kubernetes 提供了用于自检的 API。
# What can this token do?
kubectl auth can-i --list
# Specific checks
kubectl auth can-i create pods
kubectl auth can-i create clusterrolebindings危险的权限组合
某些动词即使没有 cluster-admin 也可作为权限提升手段。
create pods:调度特权或 hostPath 容器组以实现逃逸。create pods/exec:在现有容器组中运行命令。get/list secrets:读取整个集群范围内的凭据。create rolebindings/clusterrolebindings:将自己绑定到管理员权限。escalate/bind动词:授予您本不具备的权限。- 冒充:以另一个权限更高的主体身份行事。
通过创建容器组进行权限提升
如果服务账户可以创建容器组,它往往就能控制节点。攻击者会调度一个挂载主机文件系统或以特权模式运行的容器组,然后读取节点凭据或进行逃逸。
# Pod spec snippet that mounts the host root
# volumes: hostPath path: / ; container mounts it at /host
kubectl apply -f evil-pod.yaml
kubectl exec -it evil -- chroot /host bash通过绑定进行权限提升
如果您可以创建角色绑定(包括集群角色绑定),就可能将服务账户直接绑定到 cluster-admin。Kubernetes 会通过 bind/escalate 动词防护这一操作,但配置错误的角色有时仍会允许它。
# Bind a service account to cluster-admin (if permitted)
kubectl create clusterrolebinding pwn \
--clusterrole=cluster-admin \
--serviceaccount=default:web滥用身份冒充
impersonate 动词允许主体充当任意用户、组或服务账户。拥有广泛冒充权限的主体实际上具备集群中的所有权限。
# Act as a privileged user via impersonation
kubectl get secrets --as=admin-user --as-group=system:masters审计 RBAC
防御者应持续审查 RBAC,查找高风险授权。
- 查找绑定到 cluster-admin 的主体。
- 标记使用通配符动词/资源(
*)的授权。 - 检测授予非管理员账户读取机密和创建容器组权限的授权。
# Tools to audit RBAC
kubectl-who-can create pods
rbac-tool analysis
rakkess --as=system:serviceaccount:default:web强化服务账户
对身份实施最小权限原则。
- 在容器组不需要 API 访问权限的地方设置
automountServiceAccountToken: false。 - 为每个工作负载提供专用且作用域最小的服务账户。
- 对实际工作负载避免使用
default服务账户。 - 使用带受众的短期投射令牌;轮换并绑定这些令牌。
- 切勿将工作负载绑定到 cluster-admin。
以合乎道德的方式测试 RBAC
评估 RBAC 时,优先使用非破坏性检查(auth can-i、试运行),不要在生产环境中实际创建 cluster-admin 绑定。如果必须证明存在权限提升,请将操作限制在测试命名空间内,并移除您创建的任何绑定或容器组。
请报告促成权限提升的确切角色和绑定,以便收紧这些权限。
快速检查
确认您对 RBAC 的理解。
回顾
您已了解 RBAC 和服务账户如何管理集群访问权限,以及它们可能带来的威胁。
- RBAC 将主体与资源上的操作动词绑定;cluster-admin 提供完全控制权。
- 容器组会挂载 SA 令牌;
auth can-i可揭示其访问范围。 - 创建容器组、绑定、读取机密和身份冒充都是权限提升手段。
- 最小权限账户和禁用自动挂载可强化集群。
下一步:容器组安全与网络策略。
常见问题解答
「RBAC 与服务账户」课时是免费的吗?
是的 — 「RBAC 与服务账户」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「RBAC 与服务账户」这节课中我会学到什么?
锁定集群访问权限。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「RBAC 与服务账户」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Kubernetes 威胁模型
- RBAC 与服务账户
- Pod 安全与网络策略
- 保护供应链与机密信息