问题描述
我们希望允许我们的开发人员通过将他们的代码和k8s资源合并到一个git repo中来将其更改自动部署到kubernetes集群,该仓库由ArgoCD监视。版本管理团队将负责管理ArgoCD配置和设置新应用,以及在集群上创建名称空间,角色和角色绑定,而开发人员应该能够通过GitOps部署其应用,而无需与直接集群。开发人员可能出于调试目的对群集具有读取访问权限。 现在的问题是:从理论上讲,开发人员可能会创建一个新的Yaml并指定一个角色绑定资源,该资源会将他/她的帐户绑定到集群管理员角色。由于ArgoCD具有群集管理员权限,因此这将是为开发人员提升特权的一种方式。 (或冒充开发人员的攻击者) 有没有一种方法可以限制通过ArgoCD创建哪些k8s资源。
编辑:
根据{{3}},使用clusterResourceWhitelist
的每个项目都可以做到这一点。
可以在全球范围内这样做吗?
解决方法
您对Argo CD项目是正确的。项目CRD支持使用clusterResourceWhitelist
,clusterResourceBlacklist
等字段来允许/拒绝K8S资源。 Argo CD documentation中也提供了示例项目定义。
为了全局限制受管资源列表,可以在resource.exclusions
ConfigMap中指定resource.inclusions
/ argocd-cm
字段。该示例可用here。