帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
配置 kro 权限
与 ACK 和 Argo CD 不同,kro 无需额外的 IAM 权限。kro 完全在 Kubernetes 集群中运行,不会发起 Amazon API 调用。可通过标准的 Kubernetes RBAC 机制管控对 kro 资源的访问权限。
kro 权限的工作原理
kro 涉及两种作用域不同的 Kubernetes 资源:
ResourceGraphDefinition:属于集群级资源,用于定义自定义 API。这类资源通常由平台团队负责管理,平台团队会基于组织内的标准规范完成资源的设计与维护工作。
实例:属于命名空间级资源,基于 ResourceGraphDefinition 创建而来。拥有对应 RBAC 权限的应用团队,即可创建这类实例。
默认情况下,kro 功能会通过 AmazonEKSKROPolicy 访问条目策略,获得管理 ResourceGraphDefinition 及其实例的权限。但如果需要让 kro 创建和管理 ResourceGraphDefinition 中定义的底层 Kubernetes 资源(例如 Deployment、Service 或 ACK 资源),则需要为其配置额外权限。您可通过访问条目策略或 Kubernetes RBAC 两种方式授予这些权限。有关授予这些权限的详细信息,请参阅 kro 自定义资源权限。
平台团队权限
平台团队需要具备创建和管理 ResourceGraphDefinition 的权限。
平台团队的 ClusterRole 示例:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-platform-admin rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["*"]
绑定到平台团队成员:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: platform-team-kro-admin subjects: - kind: Group name: platform-team apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kro-platform-admin apiGroup: rbac.authorization.k8s.io
应用团队权限
应用团队需要具备在其所属命名空间内创建自定义资源实例的权限。
应用团队的角色示例:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kro-app-developer namespace: my-app rules: - apiGroups: ["kro.run"] resources: ["webapps", "databases"] verbs: ["create", "get", "list", "update", "delete", "patch"]
绑定到应用团队成员:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-team-kro-developer namespace: my-app subjects: - kind: Group name: app-team apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: kro-app-developer apiGroup: rbac.authorization.k8s.io
注意
Role 配置中的 API 组(本例中为 kro.run)必须与 ResourceGraphDefinition 模式文件里定义的 apiVersion 保持一致。
只读访问权限
授予只读访问权限,允许相关人员查看 ResourceGraphDefinition 及实例,且不赋予修改权限。
只读 ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-viewer rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["get", "list", "watch"]
实例的只读 Role:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kro-instance-viewer namespace: my-app rules: - apiGroups: ["kro.run"] resources: ["webapps", "databases"] verbs: ["get", "list", "watch"]
多命名空间访问权限
借助 ClusterRole 搭配 RoleBinding,为应用团队授予多命名空间的访问权限。
多命名空间访问的 ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-multi-namespace-developer rules: - apiGroups: ["kro.run"] resources: ["webapps"] verbs: ["create", "get", "list", "update", "delete"]
绑定到指定命名空间:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-team-dev-access namespace: development subjects: - kind: Group name: app-team apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kro-multi-namespace-developer apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: app-team-staging-access namespace: staging subjects: - kind: Group name: app-team apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: kro-multi-namespace-developer apiGroup: rbac.authorization.k8s.io
最佳实践
最低权限原则:仅为每个团队授予完成其职责所需的最小权限。
优先使用用户组而非独立用户:将角色绑定到用户组而非单个用户,便于权限的统一管理。
分离平台团队与应用团队的职责边界:平台团队负责管理 ResourceGraphDefinition,应用团队负责管理实例。
命名空间隔离机制:利用命名空间实现不同团队或环境的隔离,并通过 RBAC 管控各命名空间的访问权限。
审计场景的只读访问权限:为安全与合规团队配置只读访问权限,满足审计工作的需求。
后续步骤
-
kro 概念:了解 kro 的基本概念及资源组合编排
-
kro 概念:了解 SimpleSchema、CEL 表达式和组合编排模式
-
EKS 功能的安全注意事项:查看针对功能的安全最佳实践