密钥管理与 RBAC
了解在容器环境中管理敏感数据和实施基于角色的访问控制(RBAC)的高级策略。
密钥管理与 RBAC 是 CoddyKit 上的免费 Docker & DevOps Fundamentals 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & DevOps Fundamentals 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & DevOps Fundamentals 课程共包含 4 节课。
保护您的容器环境
欢迎学习!本课将深入介绍容器化应用的关键安全实践:机密信息管理和基于角色的访问控制(RBAC)。
这些概念对于保护敏感数据并确保只有经过授权的实体才能在容器环境中执行特定操作至关重要。

硬编码机密信息的危险
将 API 密钥、数据库密码或私有证书等敏感信息直接硬编码到应用代码或 Dockerfile 中,会带来重大安全风险。
- 暴露:任何能够访问代码仓库或构建镜像的人都可以轻易查看这些信息。
- 缺乏控制:更改机密信息需要重新构建并重新部署整个应用。
- 合规问题:这违反了许多安全最佳实践和监管要求。
环境变量(请谨慎使用)
一种常见但并不总是安全的传递机密信息的方式,是使用环境变量。Docker 允许您通过 -e 标志传递环境变量,应用也可以读取它们。
但是,环境变量很容易被查看(例如使用 docker inspect),还可能保留在 shell 历史记录或日志中。对于真正敏感的数据,还有更好的解决方案。
实际使用 Docker Secrets
Docker Secrets 允许您安全地存储敏感数据,并将其传递给容器。当机密信息附加到容器时,它会作为临时文件挂载到 /run/secrets/ 中。
首先,您需要创建一个机密信息(例如 echo "my_secure_pass" | docker secret create app_secret -)。然后,您的应用可以读取它:
import os
def main():
secret_path = "/run/secrets/app_secret"
try:
with open(secret_path, 'r') as f:
secret_value = f.read().strip()
print(f"Secret read: {secret_value}")
except FileNotFoundError:
print("Secret file not found. Make sure it's mounted.")
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
main()Kubernetes Secrets 概览
与 Docker Secrets 类似,Kubernetes 也有一个名为“Secrets”的对象,用于存储和管理敏感信息。这些机密信息可以作为文件挂载到 Pod 中,也可以作为环境变量公开。
重要提示:Kubernetes Secrets 默认采用 base64 编码,而不是加密。这意味着它们很容易被解码。如果要实现静态数据的真正加密,您需要进行额外配置(例如集成 KMS)。
使用 K8s Secrets 部署
让我们看一个示例,了解如何定义 Kubernetes Secret,以及如何在 Pod 中使用它。您可以在 YAML 中定义机密信息,也可以通过 kubectl 命令创建它们。
创建后,Pod 可以引用该机密信息,将其作为卷挂载,或将其值注入为环境变量。
apiVersion: v1
kind: Pod
metadata:
name: my-secret-pod
spec:
containers:
- name: my-app-container
image: busybox
command: ["sh", "-c", "echo Username: $(cat /etc/secrets/username) Password: $(cat /etc/secrets/password)"]
volumeMounts:
- name: secret-volume
mountPath: "/etc/secrets"
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-k8s-secret外部机密信息保管库
对于高度敏感的数据,或者需要跨多个集群和环境管理机密信息的情况,外部机密信息管理工具可以提供以下高级功能:
- 集中存储:为所有机密信息提供单一可信来源。
- 静态数据和传输中的数据加密:提供更强的安全保障。
- 动态机密信息:自动生成短期凭据。
- 审计和访问控制:提供细粒度权限和全面的日志记录。
常见选项包括 HashiCorp Vault、AWS Secrets Manager 和 Azure Key Vault。
什么是 RBAC?
基于角色的访问控制(RBAC)是一种限制系统访问权限的方法,只允许经过授权的用户访问系统。它不是直接向单个用户分配权限,而是将权限分组为“角色”,再将用户分配到这些角色中。
在容器编排中,RBAC 可确保用户、应用或服务仅拥有与资源(例如 Pod、Deployment 和 Secrets)交互所必需的权限。
K8s RBAC 的构建模块
Kubernetes RBAC 使用几种关键资源类型:
- Role:定义特定命名空间内的权限(例如在“dev”命名空间中“可以查看 Pod”)。
- ClusterRole:定义整个集群范围内的权限(例如“可以查看所有 Pod”或“可以管理节点”)。
- RoleBinding:将在 Role 中定义的权限授予命名空间内的用户、组或服务账户。
- ClusterRoleBinding:将在 ClusterRole 中定义的权限授予整个集群范围内的用户、组或服务账户。
RBAC 示例:限制访问权限
让我们看一个示例,了解如何授予特定服务账户权限,使其只能在某个命名空间中列出和获取 Pod。这可以落实最小权限原则。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods-binding
namespace: default
subjects:
- kind: ServiceAccount
name: pod-viewer-sa # Name of the ServiceAccount to bind to
namespace: default
roleRef:
kind: Role
name: pod-reader
apiGroup: rbac.authorization.k8s.io检查您的理解
您已经学习了如何保护敏感数据和控制访问权限。现在进行快速检查!
回顾:保护您的应用
做得很好!在本课中,您学习了容器安全的两个关键支柱:
- 机密信息管理:使用 Docker Secrets 和 Kubernetes Secrets 保护敏感数据,并了解它们的优势和局限性。
- 基于角色的访问控制(RBAC):在 Kubernetes 中实施细粒度权限,以确保遵循最小权限原则。
掌握这些知识后,您将能够构建更健壮、更安全的容器化应用!
常见问题解答
「密钥管理与 RBAC」课时是免费的吗?
是的 — 「密钥管理与 RBAC」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Docker & DevOps Fundamentals 课程的其余内容,请升级到 CoddyKit PRO。 Docker & DevOps Fundamentals 课程共包含 4 节课。
「密钥管理与 RBAC」这节课中我会学到什么?
了解在容器环境中管理敏感数据和实施基于角色的访问控制(RBAC)的高级策略。 你通过在浏览器中直接运行的动手代码来练习 Docker & DevOps Fundamentals,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Docker & DevOps Fundamentals 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Docker & DevOps Fundamentals 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「密钥管理与 RBAC」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Docker & DevOps Fundamentals 课中编写并运行代码吗?
能。每节 Docker & DevOps Fundamentals 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 容器镜像安全扫描
- 容器运行时安全
- 密钥管理与 RBAC
- 网络策略与最小权限网络