本文介紹ACK One GitOps支持的用戶類型以及如何為用戶授權。
用戶類型
ACK One GitOps支持多用戶團隊協作,管理員可以創建或刪除用戶,并為不同用戶設置不同的ArgoCD RBAC權限和不同的ArgoCD Application的權限。目前ACK One GitOps支持以下兩種用戶類型。
Local User
系統本地用戶。管理員可以創建Local User并獲取認證Token,由自動化系統使用,調用ArgoCD API自動創建ArgoCD Application、Project等。若您的團隊規模較小,可創建不同的Local User分配給團隊成員。關于Local User授權方式,請參見為Local User授權。
阿里云RAM User/Role
阿里云用戶或角色。建議使用阿里云用戶登錄ArgoCD UI或ArgoCD CLI。ACK One GitOps默認支持使用阿里云RAM User/Role SSO ArgoCD UI和ArgoCD CLI。關于阿里云RAM User授權方式,請參見為阿里云RAM User/Role授權。
創建Local User
前提條件
已從ACK One控制臺獲取Fleet實例的KubeConfig,并通過kubectl連接至Fleet實例。
已在ACK One Fleet實例中開啟GitOps。具體操作,請參見在ACK One Fleet實例中開啟GitOps。
已獲取ArgoCD管理員密碼,并登錄ArgoCD CLI。具體操作,請參見通過ArgoCD CLI方式訪問ArgoCD。
操作步驟
創建Local User操作由ACK One Fleet實例管理員在Fleet實例中執行。具體步驟如下。
執行以下命令,編輯ArgoCD
argocd-cm
的ConfigMap文件。kubectl edit cm argocd-cm -n argocd
在
argocd-cm
的ConfigMap文件中,添加如下所示的Local Userlocaluser1
。data: accounts.localuser1: login,apiKey # 可以UI/CLI登錄,并可以生成apiKey Token。 accounts.localuser1.enabled: "true" # 創建localuser1。
執行以下命令,查看Local User。
argocd account list
預期輸出:
NAME ENABLED CAPABILITIES admin true login localuser1 true login,apiKey # 此處為上一步已創建的localuser1。
執行以下命令,設置密碼并生成認證Token。
# 設置密碼。 argocd account update-password \ --account localuser1 \ --current-password <admin password> \ --new-password <localuser1-password> # 獲取localuser1認證Token。 argocd account generate-token --account localuser1 eyJhb......
為用戶配置ArgoCD RBAC
ArgoCD支持為SSO或Local User配置RBAC,以限制用戶對ArgoCD資源的訪問。其通過定義RBAC角色,再將SSO Group或Local User映射到角色來實現訪問控制。
角色授權說明
進行授權操作時,您需要先為角色授權,再將SSO Group或Local User映射到角色,完成用戶授權。
您可以自定義角色,也可以使用Argo CD提供的如下預置角色:
role:readonly
:對所有Argo CD資源具有只讀權限。(get)role:admin
:對所有Argo CD資源具有所有權限。
為角色授權需要在argocd-rbac-cm ConfigMap中的.data.policy.csv
字段中配置,格式如下:
不屬于Project的:
p, <role/user/group>, <resource>, <action>, <object>
屬于Project的:
p, <role/user/group>, <resource>, <action>, <appproject>/<object>
ArgoCD支持的資源如下:clusters
、projects
、applications
、applicationsets
、repositories
、certificates
、accounts
、gpgkeys
、logs
、exec
, extensions
。
支持的Actions如下:get
、create
、update
、delete
、sync
、override
、action/<api-group>/<Kind>/<action-name>
。
其中sync
、override
、action/<api-group>/<Kind>/<action-name>
操作只對applications
資源有意義。
為Local User授權
執行以下命令,編輯ArgoCD
argocd-rbac-cm
的ConfigMap文件。kubectl edit cm argocd-rbac-cm -n argocd
在
argocd-rbac-cm
的ConfigMap文件中,參考以下示例根據實際需求為Local User進行授權。重要請勿修改此ConfigMap文件中已有的配置。
data: policy.csv: | ## p, role:project-admin, applications, *, */*, allow ## p, role:project-admin, projects, *, *, allow g, "14***01", role:admin # 現有配置,請保留。 g, localuser1, role:admin # 新增配置,映射localuser1到角色admin。 ## g, localuser1, role:project-admin # 映射localuser1到角色project-admin。 scopes: '[uid]' # 現有配置,請保留。
示例代碼中提供的兩個授權場景分別如下:
映射localuser1到預置角色admin,使localuser1具有ArgoCD資源的所有權限。
屏蔽的配置為:映射localuser1到自定義角色project-admin,并為角色project-admin授予projects和applications資源的所有權限。
為阿里云RAM User/Role授權
ACK One GitOps默認打通ArgoCD UI和ArgoCD CLI向阿里云RAM的SSO認證。當您登錄阿里云控制臺后,可以通過SSO登錄ArgoCD UI或ArgoCD CLI,無需再次輸入用戶名密碼。
若RAM User為ACK One Fleet實例管理員,ACK One GitOps會自動同步權限設置,授權其ArgoCD UI或ArgoCD CLI管理員權限。
若RAM User為普通用戶,需要艦隊管理員為其授予相應的權限。包含兩方面的權限管理:
在
argocd-rbac-cm
中為RAM Uesr/Role授予ArgoCD RBAC權限。通過ArgoCD Projects管理RAM Uesr/Role對目標集群、倉庫、應用(Application)的權限。
為RAM Uesr/Role授予ArgoCD RBAC權限
需要ACK One 艦隊管理員參考以下步驟配置相應的權限:
使用艦隊kubeconfig執行以下命令,編輯ArgoCD
argocd-rbac-cm
的ConfigMap文件。kubectl edit cm argocd-rbac-cm -n argocd
在
argocd-rbac-cm
中,參考以下示例為給RAM User授予權限。下圖示例為RAM User "27***02"配置了argocd admin權限,注釋部分是為RAM User "27***02"配置project-admin權限。data: policy.csv: | ## p, role:project-admin, applications, *, */*, allow ## p, role:project-admin, projects, *, *, allow g, "14***01", role:admin # 現有配置,請保留。 g, "27***02", role:admin # 新增配置,設置RAM User "27***02"為admin。 ## g, "27***02", role:project-admin # 映射RAM User "27***02"到角色project-admin。 scopes: '[uid]' # 現有配置,請保留。
為RAM Uesr/Role授予ArgoCD應用級別的權限控制
ArgoCD中每個Application都屬于一個Project,通過ArgoCD Projects可以為不同阿里云RAM User/Role授予不同的應用級別權限。
在多團隊使用Argo CD的場景下,Argo CD Projects提供了Applications邏輯分組能力,并具備以下功能:
限制Git源倉庫:控制哪些Git倉庫可以用于部署應用程序。
限制目標集群和Namespaces:定義應用程序可以部署到的集群和命名空間,確保部署符合團隊的資源劃分和安全策略。
限制對象類型:限定可以部署的Kubernetes資源類型,例如RBAC、CRDs、DaemonSets、NetworkPolicy等,以免使用不必要或危險的資源類型。
應用級別RBAC:通過定義project roles,可以為不同阿里云RAM User/Role授予不同的應用級別權限,并綁定到OIDC Groups和 JWT Tokens,從而實現細粒度的權限管理。
ACK One管理員可參考以下步驟對RAM User/Role授予應用級別的權限:
使用RAM主賬號或者權限管理員賬號登錄阿里云RAM控制臺,在左側導航欄,單擊用戶或者角色,進入您希望授權的用戶或角色的詳情頁,復制UID或角色ID。
登錄ACK One控制臺,在左側導航欄選擇 ,單擊GitOps控制臺,登錄ArgoCD UI。
在ArgoCD UI左側導航欄,單擊
,單擊+ NEW PROJECT新建Project,或選擇并進入已有的Project詳情頁。(此處省略SUMMARY中倉庫、集群和集群資源的權限配置)。單擊上方+ ADD ROLE,配置以下信息后,再單擊上方CREATE創建project role:
GENERAL
:配置Role的基本信息。POLICY RULES
:配置應用權限信息。GROUPS
:下方橫線處填上1中的UID或角色ID,單擊右側ADD GROUP。
在下圖示例中,創建了名為roletest
的角色,該角色允許RAM用戶27***02
對test
項目下所有應用程序具有get
(只讀)權限。被授予權限的RAM用戶27***02
可以在ACK One控制臺點擊LOG IN VIA ALIYUN SSO,登錄到ArgoCD UI以驗證權限是否符合預期。