0Pricing
DevOps Bootcamp · 课时

服务账户与工作负载身份

学习服务账户如何为 Pod 提供独立身份、其令牌如何工作,以及如何授予它们最小权限访问权。

服务账户与工作负载身份 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

工作负载的身份

用户需要向 Kubernetes 进行身份验证,但容器组也需要身份,以便安全地与 API 服务器通信。这个身份就是服务账户。

什么是 ServiceAccount?

ServiceAccount 是一个命名空间范围的对象,代表工作负载的身份。每个容器组都会使用一个服务账户运行;如果未指定,默认使用 default。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: report-generator
  namespace: analytics

为容器组分配服务账户

在容器组规格中设置 serviceAccountName,即可让容器组以指定的身份运行。

apiVersion: v1
kind: Pod
metadata:
  name: reporter
spec:
  serviceAccountName: report-generator
  containers:
  - name: app
    image: reporter:1.0

挂载的令牌

Kubernetes 会将一个短生命周期的 JWT 令牌挂载到容器组中,供服务账户使用,以验证 API 调用。

# inside the Pod
cat /var/run/secrets/kubernetes.io/serviceaccount/token

默认账户为何有风险

命名空间中的所有容器组共享 default ServiceAccount。若向它授予权限,就会让所有容器组暴露在过大的权限范围内。请优先为每个工作负载使用专用账户。

禁用令牌自动挂载

如果容器组从不调用 API,请禁用令牌挂载,以缩小攻击面。

apiVersion: v1
kind: Pod
metadata:
  name: no-api-pod
spec:
  automountServiceAccountToken: false
  containers:
  - name: app
    image: myapp:1.0

使用 RBAC 授予权限

服务账户在绑定到角色之前没有任何权限。RoleBinding 的主体就是服务账户。

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: reporter-read
  namespace: analytics
subjects:
- kind: ServiceAccount
  name: report-generator
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

最小权限的实践

  • 每个工作负载使用一个服务账户
  • 只授予它真正需要的操作和资源
  • 在可能的情况下,使用 Role 将范围限制在命名空间内,而不是使用 ClusterRole

绑定的投影令牌

现代令牌是投影的,并且与容器组的生命周期绑定,过期时间很短。它们会自动轮换,因此泄露的令牌远没有旧式长期有效密钥那么危险。

云中的工作负载身份

云平台会将 Kubernetes ServiceAccount 映射到云 IAM 身份(例如 AWS 上的 IRSA、GKE 上的 Workload Identity),这样容器组无需存储静态凭据即可访问云资源。

metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123:role/report-role

验证权限

请模拟该服务账户并使用 kubectl auth can-i,确认它确实拥有您预期的访问权限。

kubectl auth can-i list pods \
  --as=system:serviceaccount:analytics:report-generator \
  -n analytics

快速检查

测试您对服务账户的理解。

回顾

您了解到,ServiceAccount 为容器组提供独立身份,并由短生命周期的投影令牌提供支持。请为每个工作负载使用专用账户来落实最小权限原则,通过 RBAC 绑定授予访问权限,在不使用令牌时禁用令牌挂载,并将账户映射到云 IAM,以免使用凭据即可访问云资源。

常见问题解答

「服务账户与工作负载身份」课时是免费的吗?

是的 — 「服务账户与工作负载身份」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「服务账户与工作负载身份」这节课中我会学到什么?

学习服务账户如何为 Pod 提供独立身份、其令牌如何工作,以及如何授予它们最小权限访问权。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「服务账户与工作负载身份」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 基于角色的访问控制(RBAC)
  2. 用于隔离的网络策略
  3. Pod 安全标准
  4. 服务账户与工作负载身份
← 返回 DevOps Bootcamp