限制允许使用 ArgoCD 部署的 kubernetes 类型
Restricting allowed kubernetes types to be deployed with ArgoCD
我们希望允许我们的开发人员通过将他们的代码和 k8s 资源合并到由 ArgoCD 监视的 git 存储库中来自动将他们的更改部署到 kubernetes 集群。发布管理团队将负责管理 ArgoCD 配置和设置新应用程序以及在集群上创建命名空间、角色和角色绑定,而开发人员应该能够通过 GitOps 部署他们的应用程序而无需与直接集群。出于调试目的,开发人员可能对集群具有读取权限。
现在的问题是:理论上,开发人员可能会创建一个新的 yaml 并指定一个角色绑定资源,它将 his/her 帐户绑定到集群管理员角色。由于 ArgoCD 具有集群管理员权限,这将是一种提升开发者权限的方法。 (或冒充开发人员的攻击者)
有没有办法限制,允许通过ArgoCD创建哪些k8s资源。
编辑:
根据 docs,每个项目都可以使用 clusterResourceWhitelist
。
是否可以在全球范围内这样做?
关于 Argo CD 项目,你是对的。项目 CRD 使用 clusterResourceWhitelist
、clusterResourceBlacklist
等字段支持 allowing/denying K8S 资源。 Argo CD documentation.
中也提供示例项目定义
为了全局限制托管资源列表,您可以在argocd-cm
ConfigMap 中指定resource.exclusions
/resource.inclusions
字段。该示例可用 here.
我们希望允许我们的开发人员通过将他们的代码和 k8s 资源合并到由 ArgoCD 监视的 git 存储库中来自动将他们的更改部署到 kubernetes 集群。发布管理团队将负责管理 ArgoCD 配置和设置新应用程序以及在集群上创建命名空间、角色和角色绑定,而开发人员应该能够通过 GitOps 部署他们的应用程序而无需与直接集群。出于调试目的,开发人员可能对集群具有读取权限。 现在的问题是:理论上,开发人员可能会创建一个新的 yaml 并指定一个角色绑定资源,它将 his/her 帐户绑定到集群管理员角色。由于 ArgoCD 具有集群管理员权限,这将是一种提升开发者权限的方法。 (或冒充开发人员的攻击者) 有没有办法限制,允许通过ArgoCD创建哪些k8s资源。
编辑:
根据 docs,每个项目都可以使用 clusterResourceWhitelist
。
是否可以在全球范围内这样做?
关于 Argo CD 项目,你是对的。项目 CRD 使用 clusterResourceWhitelist
、clusterResourceBlacklist
等字段支持 allowing/denying K8S 资源。 Argo CD documentation.
为了全局限制托管资源列表,您可以在argocd-cm
ConfigMap 中指定resource.exclusions
/resource.inclusions
字段。该示例可用 here.