帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
配置 Argo CD 权限
Argo CD 托管功能与 Amazon Identity Center 集成以进行身份验证,并使用内置的 RBAC 角色进行授权。本主题将介绍如何为用户和团队配置权限。
Argo CD 权限的工作原理
Argo CD 功能通过 Amazon 进行身份验证,并提供三个内置的 RBAC 角色进行授权。
当用户访问 Argo CD 时:
-
他们使用 Amazon Identity Center(可以与企业身份提供者联合)进行身份验证
-
Amazon Identity Center 向 Argo CD 提供用户和组信息
-
Argo CD 会根据配置将用户和组映射到 RBAC 角色
-
用户只能看到他们有权访问的应用程序和资源
内置 RBAC 角色
Argo CD 功能提供三个内置角色,您需要将其映射到 Amazon Identity Center 的用户和组。
ADMIN
可以完全访问所有应用程序和设置:
-
创建、更新和删除应用程序和 ApplicationSets
-
管理 Argo CD 配置
-
注册和管理部署目标集群
-
配置存储库访问权限
-
管理项目
-
查看所有应用程序状态和历史记录
EDITOR
可以创建和修改应用程序,但无法更改 Argo CD 设置:
-
创建和更新应用程序和 ApplicationSets
-
同步和刷新应用程序
-
查看应用程序状态和历史记录
-
无法删除应用程序
-
无法更改 Argo CD 配置
-
无法管理集群或存储库
VIEWER
可以对应用程序进行只读访问:
-
查看应用程序状态和历史记录
-
查看应用程序清单和资源
-
无法进行任何更改
-
无法同步或刷新应用程序
配置角色映射
创建或更新功能时,将 Amazon Identity Center 用户和组映射到 Argo CD 角色。
示例角色映射:
{ "rbacRoleMapping": { "ADMIN": ["AdminGroup", "alice@example.com"], "EDITOR": ["DeveloperGroup", "DevOpsTeam"], "VIEWER": ["ReadOnlyGroup", "bob@example.com"] } }
注意
角色名称区分大小写,必须为大写(ADMIN、EDITOR、VIEWER)。
重要
EKS 功能与 Amazon Identity Center 集成后,每个 Argo CD 功能可支持最多 1000 个身份。身份可以是用户或组。
更新角色映射:
aws eksfe update-capability \ --regionus-east-1\ --cluster-namecluster\ --capability-namecapname\ --endpoint "https://eks.ap-northeast-2.amazonaws.com" \ --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \ --configuration '{ "argoCd": { "rbacRoleMappings": { "addOrUpdateRoleMappings": [ { "role": "ADMIN", "identities": [ { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" } ] } ] } } }'
使用管理员账户
管理员账户专为初始设置和管理任务(例如注册集群和配置存储库)而设计。
何时适合使用管理员账户:
-
初始功能设置和配置
-
单人开发或快速演示
-
管理任务(注册集群、配置存储库、创建项目)
管理员账户最佳实践:
-
请勿将账户令牌提交给版本控制
-
如果令牌暴露,则立即轮换
-
将账户令牌的使用限制在设置和管理任务
-
设置较短的过期时间(最长 12 小时)
-
在任何给定时间只能创建 5 个账户令牌
何时改用基于项目的访问:
-
与多个用户共享的开发环境
-
任何与生产环境相似的环境
-
需要有关操作执行者的审计跟踪记录时
-
需要强制实施资源限制或访问边界时
对于生产环境和多用户场景,请使用基于项目的访问控制,并将专用 RBAC 角色映射到 Amazon Identity Center 组。
基于项目的访问控制
使用 Argo CD 项目(AppProject)为团队提供精细的访问控制和资源隔离。
项目提供以下功能:
-
源限制:限制可以使用哪些 Git 存储库
-
目标限制:限制可以指向哪些集群和命名空间
-
资源限制:限制可以部署哪些 Kubernetes 资源类型
-
RBAC 集成:将项目映射到 Amazon Identity Center 组或 Argo CD 角色
团队隔离示例项目:
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Team A applications # Source restrictions sourceRepos: - https://github.com/myorg/team-a-apps # Destination restrictions destinations: - namespace: team-a-* server: arn:aws:eks:us-west-2:111122223333:cluster/production # Resource restrictions clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap
为用户分配项目:
拥有 EDITOR 或 VIEWER 角色的用户可以限制为访问特定项目。ADMIN 用户则可以访问所有项目。
apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a spec: # ... project configuration ... # Map Identity Center groups to project roles roles: - name: developer description: Team A developers policies: - p, proj:team-a:developer, applications, *, team-a/*, allow groups: - TeamADevelopers - name: viewer description: Team A viewers policies: - p, proj:team-a:viewer, applications, get, team-a/*, allow groups: - TeamAViewers
常见权限模式
模式 1:拥有完整访问权限的管理员团队
{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam", "SRETeam"] } }
模式 2:开发人员可以部署,其他人可以查看
{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam"], "EDITOR": ["DevelopmentTeam", "DevOpsTeam"], "VIEWER": ["AllEmployees"] } }
模式 3:通过项目实现团队隔离
-
将所有开发者映射到 EDITOR 角色
-
为每个团队创建单独的 AppProjects
-
使用项目角色,限制访问团队特定应用程序
{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam"], "EDITOR": ["AllDevelopers"] } }
然后创建具有团队特定限制和角色映射的项目。
最佳实践
优先使用用户组而非独立用户:将 Amazon Identity Center 用户组映射到 Argo CD 角色,而不是单个用户,以便于管理。
从最低权限开始:从 VIEWER 访问权限开始,然后根据需要授予 EDITOR 或 ADMIN 权限。
使用项目实现团队隔离:为不同的团队或环境创建单独的 AppProjects 以强制实施边界。
利用 Identity Center 联合身份验证:配置 Amazon Identity Center,以与企业身份提供者联合,从而实现集中式用户管理。
定期审查访问权限:定期审查角色映射和项目分配,以确保适当的访问级别。
限制集群访问权限:请记住,Argo CD RBAC 会控制 Argo CD 资源和操作的访问权限,这与 Kubernetes RBAC 无关。拥有 Argo CD 访问权限的用户可以将应用程序部署到 Argo CD 有权访问的集群。限制 Argo CD 可以访问的集群,并使用项目目标限制来控制应用程序的部署位置。
Amazon 服务权限
要在 Application 资源中直接使用 Amazon 服务(而无需创建存储库资源),请将所需的 IAM 权限附加到功能角色。
用于 Helm 图表的 ECR:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }
CodeCommit 存储库:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "arn:aws:codecommit:region:account-id:repository-name" } ] }
CodeConnections(GitHub、GitLab、Bitbucket):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeconnections:UseConnection" ], "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id" } ] }
有关使用这些集成的详细信息,请参阅配置存储库访问权限。
后续步骤
-
使用 Argo CD:了解如何创建应用程序和管理部署
-
Argo CD 概念:了解 Argo CD 概念,包括项目
-
EKS 功能的安全注意事项:查看针对功能的安全最佳实践