全部產品
Search
文件中心

Container Service for Kubernetes:如何建立ACK One GitOps使用者並授權

更新時間:Jul 16, 2024

本文介紹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

前提條件

操作步驟

建立Local User操作由ACK One Fleet執行個體管理員在Fleet執行個體中執行。具體步驟如下。

  1. 執行以下命令,編輯ArgoCD argocd-cm的ConfigMap檔案。

    kubectl edit cm argocd-cm -n argocd
  2. argocd-cm的ConfigMap檔案中,添加如下所示的Local Userlocaluser1

    data:
      accounts.localuser1: login,apiKey    # 可以UI/CLI登入,並可以產生apiKey Token。
      accounts.localuser1.enabled: "true"  # 建立localuser1。
  3. 執行以下命令,查看Local User。

    argocd account list

    預期輸出:

    NAME        ENABLED  CAPABILITIES
    admin       true     login
    localuser1  true     login,apiKey   # 此處為上一步已建立的localuser1。
  4. 執行以下命令,設定密碼並產生認證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支援的資源如下:clustersprojectsapplicationsapplicationsetsrepositoriescertificatesaccountsgpgkeyslogsexec, extensions

支援的Actions如下:getcreateupdatedeletesyncoverrideaction/<api-group>/<Kind>/<action-name>

其中syncoverrideaction/<api-group>/<Kind>/<action-name>操作只對applications資源有意義。

為Local User授權

  1. 執行以下命令,編輯ArgoCD argocd-rbac-cm的ConfigMap檔案。

    kubectl edit cm argocd-rbac-cm -n argocd
  2. 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 艦隊管理員參考以下步驟配置相應的許可權:

  1. 使用艦隊kubeconfig執行以下命令,編輯ArgoCD argocd-rbac-cm的ConfigMap檔案。

    kubectl edit cm argocd-rbac-cm -n argocd
  2. 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授予應用層級的許可權:

  1. 使用RAM主帳號或者許可權管理員帳號登入阿里雲RAM控制台,在左側導覽列,單擊使用者或者角色,進入您希望授權的使用者或角色的詳情頁,複製UID角色ID

  2. 登入ACK One控制台,在左側導覽列選擇艦隊 > GitOps,單擊GitOps控制台,登入ArgoCD UI。

  3. 在ArgoCD UI左側導覽列,單擊Settings > Projects,單擊+ NEW PROJECT建立Project,或選擇並進入已有的Project詳情頁。(此處省略SUMMARY中倉庫、叢集和叢集資源的許可權配置)。

  4. 單擊上方+ ADD ROLE,配置以下資訊後,再單擊上方CREATE建立project role:

    • GENERAL:配置Role的基本資料。

    • POLICY RULES:配置應用許可權資訊。

    • GROUPS:下方橫線處填上1中的UID角色ID,單擊右側ADD GROUP

在下圖樣本中,建立了名為roletest的角色,該角色允許RAM使用者27***02test專案下所有應用程式具有get(唯讀)許可權。被授予許可權的RAM使用者27***02可以在ACK One控制台點擊LOG IN VIA ALIYUN SSO,登入到ArgoCD UI以驗證許可權是否符合預期。

image