AWS Secret Sidecar Injector 项目教程
1. 项目介绍
AWS Secret Sidecar Injector 是一个 Kubernetes 的变异 Webhook,用于从 AWS Secrets Manager 获取密钥。该项目通过 Kubernetes 动态准入控制器,在 Pod 创建或更新时注入一个初始容器 aws-secrets-manager-secret-sidecar。该初始容器依赖于 IAM 角色服务账户(IRSA)从 AWS Secrets Manager 中检索密钥。此外,Kubernetes 动态准入控制器还会创建一个内存中的 Kubernetes 卷(名为 secret-vol,使用 emptyDirectory 的 medium 为 Memory),以便 Pod 访问密钥。
2. 项目快速启动
2.1 前提条件
- 一个具有访问和检索 AWS Secrets Manager 密钥权限的 IRSA ServiceAccount。
- 安装 Helm 以部署变异准入 Webhook。
2.2 安装步骤
-
添加 Helm 仓库
helm repo add secret-inject https://aws-samples.github.io/aws-secret-sidecar-injector/ -
更新 Helm 仓库
helm repo update -
部署变异 Webhook 准入控制器
helm install secret-inject secret-inject/secret-inject
2.3 访问密钥
在 Pod 的 podSpec 中添加以下注解以挂载密钥:
annotations:
secrets.k8s.aws/secret-arn: <SECRET-ARN>
默认情况下,解密的密钥会写入名为 secret-vol 的卷中,文件名为 secret。Kubernetes 动态准入控制器还会为 Pod 中的容器创建相应的 mountPath /tmp/secret,以便访问密钥。
你还可以选择性地使用以下可选注解来指定挂载路径:
annotations:
secrets.k8s.aws/mount-path: <ABSOLUTE-MOUNT-PATH>
注意,路径应为绝对路径,例如 /my-path。
你还可以使用以下可选注解来自定义挂载路径中的文件名或子文件夹:
annotations:
secrets.k8s.aws/secret-filename: <SECRET-FILENAME>
3. 应用案例和最佳实践
3.1 应用案例
AWS Secret Sidecar Injector 适用于需要在 Kubernetes 集群中安全访问 AWS Secrets Manager 密钥的应用场景。例如,一个需要访问数据库凭证的微服务应用,可以通过该项目将数据库凭证从 AWS Secrets Manager 中注入到 Pod 中,从而避免在代码或配置文件中硬编码敏感信息。
3.2 最佳实践
- 使用 IRSA:确保使用 IAM 角色服务账户(IRSA)来访问 AWS Secrets Manager,以提高安全性。
- 最小权限原则:为 IRSA 分配最小权限,仅允许访问必要的密钥。
- 定期轮换密钥:定期轮换密钥,并确保应用程序能够处理密钥的变更。
4. 典型生态项目
4.1 AWS Secrets and Config Provider (ASCP)
ASCP 是一个与 AWS Secret Sidecar Injector 类似的项目,但它支持 Secrets Manager 和 Parameter Store,并且可以挂载多个密钥。ASCP 还支持将密钥从 Secrets Manager 同步到 Kubernetes Secrets,并支持密钥轮换。
4.2 Native Secrets (NASE)
NASE 是一个无服务器的变异 Webhook,它拦截 Kubernetes Secrets 的创建和更新操作,并将密钥写入 AWS Secrets Manager,同时返回密钥的 ARN 给 Kubernetes。
4.3 Kubernetes Secret Store CSI Driver
Kubernetes Secret Store CSI Driver 是一个供应商中立的标准方式,用于从外部密钥存储中获取密钥。它支持多种密钥存储提供商,包括 AWS Secrets Manager。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



