協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 kro 許可
與 ACK 和 Argo CD 不同,kro 不需要 IAM 許可。 kro 完全在您的 Kubernetes 叢集內運作,而且不會進行 AWS API 呼叫。使用標準 Kubernetes RBAC 控制對 kro 資源的存取。
許可如何使用 kro
kro 使用兩種具有不同範圍的 Kubernetes 資源類型:
ResourceGraphDefinitions:定義自訂 APIs叢集範圍資源。通常由設計和維護組織標準的平台團隊管理。
執行個體:從 ResourceGraphDefinitions 建立的命名空間範圍自訂資源。可由具有適當 RBAC 許可的應用程式團隊建立。
根據預設,kro 功能具有透過AmazonEKSKROPolicy存取項目政策管理 ResourceGraphDefinitions 及其執行個體的許可。不過,kro 需要額外的許可,才能建立和管理 ResourceGraphDefinitions 中定義的基礎 Kubernetes 資源 (例如部署、服務或 ACK 資源)。您必須透過存取項目政策或 Kubernetes RBAC 授予這些許可。如需授予這些許可的詳細資訊,請參閱 使用 eksctl 建立 kro 功能、 使用 CLI 建立 kro AWS 功能或 使用主控台建立 kro 功能。
平台團隊許可
平台團隊需要許可才能建立和管理 ResourceGraphDefinitions。
平台團隊的範例 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
注意
角色 (kro.run在此範例中) 中的 API 群組必須符合 ResourceGraphDefinition 結構描述中apiVersion定義的 。
唯讀存取
授予唯讀存取權以檢視 ResourceGraphDefinitions 和執行個體,無需修改許可。
唯讀 ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kro-viewer rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["get", "list", "watch"]
執行個體的唯讀角色:
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"]
多命名空間存取
授予應用程式團隊使用 ClusterRoles 搭配 RoleBindings 存取多個命名空間的權限。
用於多命名空間存取的 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
最佳實務
最低權限原則:僅授予每個團隊責任所需的最低許可。
使用群組而非個別使用者:將角色繫結至群組,而非個別使用者,以便於管理。
個別的平台和應用程式考量:平台團隊管理 ResourceGraphDefinitions、應用程式團隊管理執行個體。
命名空間隔離:使用命名空間隔離不同的團隊或環境,具有 RBAC 控制對每個命名空間的存取。
稽核的唯讀存取權:為安全與合規團隊提供稽核目的的唯讀存取權。
後續步驟
-
kro 概念 - 了解 kro 概念和資源合成
-
EKS 功能的安全考量 - 檢閱 功能的安全最佳實務