設定 kro 許可 - Amazon EKS

協助改進此頁面

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 授予這些許可。如需授予這些許可的詳細資訊,請參閱 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
注意

角色中的 API 群組 (kro.run在此範例中) 必須符合 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 控制對每個命名空間的存取。

稽核的唯讀存取權:為安全與合規團隊提供稽核目的的唯讀存取權。

後續步驟