跳到主要内容

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、变更审批和演练共同约束:

能力风险控制措施
pruneGit 删除会删除受管资源资源归属、备份、删除预览
selfHeal覆盖紧急手工修复止血后及时回写 Git
CreateNamespace绕过 Namespace 基线Project 限制与基线自动化
Application finalizer删除 Application 级联删除资源删除审批与关键资源保护
override 权限绕过 Git 期望状态仅限紧急管理员,留痕复盘

6. 审计与定期检查​

每季度至少复核 Project 白名单、全局 RBAC、仓库凭据所有者、目标集群连接、管理员组和入口 TLS 证书。将 Argo CD API 审计、Kubernetes Audit Log、Git PR 和 CI 发布记录关联,才能追溯一次生产变更从代码到集群的完整路径。