我正在努力理解ArgoCD中的RBAC概念,我有一些问题。根据这个文档和这个文档,我发现我们可以使用ConfigMap
(argocd-rbac-cm配置RBAC规则。)或直接在AppProject
中。我不明白的是这两种选择有什么不同?比如在什么情况下我们会用这个而不是那个?因为当我这样做的时候,例如:
# First Setup
# ConfigMap argocd-rbac-cm.yaml
...
policy.csv: |
p, role:test-role, applications, *, appproject-1/*, allow
g, nxh6991@gmail.com, role:test-role
scopes: ['email', 'group']
--------------------------------------
# Second setup
# AppProject
kind: AppProject
metadata:
name: appproject-1
...
spec:
roles:
- name: test-role
policies:
- p, role:test-role, applications, *, appproject-1/*, allow
- g, nxh6991@gmail.com, role:test-role
我看到这里没有区别但是第一个管用,第二个不行。这意味着通过第一次设置,nxh6991@gmail.com
可以访问AppProject
appproject-1中的任何资源并且可以做任何事情(创建,同步等),但第二次设置没有给nxh6991@gmail.com
任何东西。我确实认为幕后发生了什么事,但我自己也搞不清楚。如果可以的话,你们能给我指出来吗?
事实上,我使用电子邮件nxh6991@gmail.com
作为我的例子,因为我试图设置ArgoCD使用SSO与谷歌。所以我的第二个问题是:现在,我的SSO工作得很好(意味着人们可以通过使用自己的Google帐户访问Argo Web UI),我想使用RBAC来限制对Argo CD资源的访问。更详细地说,我只是希望每个团队(如team-dev, team-test等)的成员只能访问他们自己预定义的AppProject
,而不是其他的。那么,请问这种情况下的最佳做法是什么?我的意思是我应该使用RBAC与ConfigMap
或AppProject
?或者我们还有别的解决方法?
谢谢你们!
第一个问题:不确定是否可以按照上面的方式在AppProject
中分配用户。我只看到了策略和组分配的示例,而不是单个用户分配的示例- https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#configuring-rbac-with-projects。你可能想要倾向于组(这样更好,因为如果你不想管理身份,如果你不需要)
第二个问题:我在微服务架构中为300多名工程师管理RBAC;我们也有大约20个项目。我利用ConfigMap来控制访问(直到我们的Okta组策略进一步发展)。由于我们以声明的方式管理Argo,我让用户将他们的电子邮件地址添加到正确项目下的rbac configmap;然后通过拉请求过程,我(或我团队中的某人)确认更改。我认为管理身份非常重要……所以我更喜欢有上帝般的力量来批准/拒绝别人。
另外,这是一个来自核心贡献者(Michael Crenshaw)的关于保护ArgoCD的很棒的礼物- https://www.youtube.com/watch?v=bRNMI29F2fI。强烈推荐!