AppProject、RBAC 与 SSO
Application 定义“部署什么”,AppProject 定义“允许部署到哪里、允许访问什么”。生产环境不应让所有团队使用 default Project,因为它通常无法约束仓库、集群和 Namespace 的范围。
1. 创建生产 Project
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
name: production
namespace: argocd
spec:
description: 生产环境应用的受控交付边界
sourceRepos:
- https://git.example.com/platform/*
destinations:
- namespace: user-center
server: https://kubernetes.default.svc
clusterResourceWhitelist:
- group: ''
kind: Namespace
namespaceResourceWhitelist:
- group: apps
kind: Deployment
- group: ''
kind: Service
- group: networking.k8s.io
kind: Ingress
白名单应从应用确实需要的资源开始扩展。若应用不需要创建 Namespace、CRD、ClusterRole 或 Webhook,不要授予这些集群级资源权限。
2. Project 角色
Project 可定义面向自动化或团队的角色令牌与策略。人类用户优先经 SSO 组映射授权;临时令牌必须有到期、保管和撤销流程。
spec:
roles:
- name: deployer
description: 仅可同步 production Project 内的应用
policies:
- p, proj:production:deployer, applications, get, production/*, allow
- p, proj:production:deployer, applications, sync, production/*, allow
groups:
- platform-deployers
3. 全局 RBAC 基线
Argo CD RBAC 使用 Casbin 策略。全局配置应遵循“默认只读或无权限、按组授予”的原则;不要给所有已登录用户 role:admin。
data:
policy.default: role:readonly
policy.csv: |
p, role:readonly, applications, get, */*, allow
g, platform-admins, role:admin
g, platform-deployers, proj:production:deployer
将这类配置纳入平台 Git 并通过变更审批发布。修改 RBAC 后使用一个低权限测试账号验证“允许的动作能执行、越权动作被拒绝”。
4. SSO 接入原则
生产环境优先接入企业 OIDC 或 SAML IdP,按稳定的组 claim 映射角色。配置前明确管理员紧急访问方案,但不要长期保留多人共享的本地 admin 密码。
# 用当前身份验证是否只拥有预期权限
argocd account get-user-info
argocd app list