跳到主要内容

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
权限边界是两层

Argo CD RBAC 决定用户能操作哪些 Application;目标集群中的 ServiceAccount/RBAC 决定 Controller 最终能创建哪些 Kubernetes 资源。两层都必须收敛,不能只依赖 UI 权限。