Argo CD 安全加固
Argo CD 同时接触 Git 凭据、目标集群凭据和部署清单,是交付链路的高价值控制面。安全设计应围绕最小权限、分层隔离、凭据轮换和可审计变更,而不是只保护 Web UI 登录页。
1. 身份与访问控制
- 使用企业 SSO,按稳定用户组映射 Argo CD 角色;
- 将本地
admin账号限定为受控的紧急恢复用途; - 默认只读或拒绝,按 Project 和应用授予
get、sync、override等动作; - CI 机器人只获得其 Project 所需的最小权限和短期令牌;
- 管理员、发布者、审计者和应用开发者使用不同组,禁止共享账号。
2. 仓库与 Secret 管理
仓库凭据应是只读 Deploy Key 或细粒度访问令牌,并由专用 Secret 保存。不要把 Git 令牌、Kubernetes kubeconfig、Helm registry 密码或 SSO client secret 提交到应用仓库。
# 只列出 Argo CD 内的 Secret 元信息,避免输出 data 中的敏感值
kubectl get secret -n argocd
# 查看仓库访问失败时的错误信息,不打印或导出 Secret 内容
kubectl logs -n argocd deploy/argocd-repo-server --tail=200
通过 External Secrets、Sealed Secrets 或企业密钥管理系统注入运行时 Secret;无论选择哪种方案,都要验证 Argo CD 的渲染账户无法读取超出其职责范围的密钥。
3. Git 签名与供应链
对生产部署仓库启用受保护分支、强制 PR、必需 CI 检查和签名提交策略。Argo CD 可配置 GPG 验证;启用前先导入受信任公钥并制定密钥轮换流程,避免因单个开发者密钥过期中断全部同步。
镜像版本使用不可变 tag 或 digest。Argo CD 同步 Git,不会自动证明镜像本身安全;镜像签名、SBOM、漏洞扫描和准入策略应由独立供应链控制补足。
4. 网络与 TLS
用户 / CI -> Ingress 或 Gateway -> argocd-server
Repo Server -> Git / Helm 仓库
Application Controller -> 目标 Kubernetes API
为以上最小流量路径配置 NetworkPolicy 和出口防火墙。入口必须使用有效 TLS;Git、OIDC、Kubernetes API 的 CA 链应正确配置,不能在生产中常态化使用 --insecure、跳过证书验证或开放匿名访问。
5. 高风险同步选项
以下能力必须由 Project、变更审批和演练共同约束:
| 能力 | 风险 | 控制措施 |
|---|---|---|
prune | Git 删除会删除受管资源 | 资源归属、备份、删除预览 |
selfHeal | 覆盖紧急手工修复 | 止血后及时回写 Git |
CreateNamespace | 绕过 Namespace 基线 | Project 限制与基线自动化 |
| Application finalizer | 删除 Application 级联删除资源 | 删除审批与关键资源保护 |
override 权限 | 绕过 Git 期望状态 | 仅限紧急管理员,留痕复盘 |
6. 审计与定期检查
每季度至少复核 Project 白名单、全局 RBAC、仓库凭据所有者、目标集群连接、管理员组和入口 TLS 证书。将 Argo CD API 审计、Kubernetes Audit Log、Git PR 和 CI 发布记录关联,才能追溯一次生产变更从代码到集群的完整路径。