設定 Argo CD 許可 - Amazon EKS

協助改進此頁面

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

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

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

設定 Argo CD 許可

Argo CD 受管功能與 AWS Identity Center 整合以進行身分驗證,並使用內建的 RBAC 角色進行授權。本主題說明如何設定使用者和團隊的許可。

許可如何使用 Argo CD

Argo CD 功能使用 AWS Identity Center 進行身分驗證,並提供三個內建 RBAC 角色進行授權。

當使用者存取 Argo CD 時:

  1. 他們使用 AWS Identity Center 進行身分驗證 (可聯合到您的公司身分提供者)

  2. AWS Identity Center 提供使用者和群組資訊給 Argo CD

  3. Argo CD 會根據您的組態,將使用者和群組映射至 RBAC 角色

  4. 使用者只會看到他們有權存取的應用程式和資源

內建 RBAC 角色

Argo CD 功能提供三個您映射到 AWS Identity Center 使用者和群組的內建角色。這些是全球範圍的角色,可控制對 Argo CD 資源的存取,例如專案、叢集和儲存庫。

重要

全域角色控制對 Argo CD 本身的存取,而不是對應用程式等專案範圍的資源的存取。EDITOR 和 VIEWER 使用者預設無法查看或管理應用程式,他們需要專案角色來存取專案範圍的資源。專案角色和專案範圍存取 如需授予應用程式和其他專案範圍資源存取權的詳細資訊,請參閱 。

ADMIN

完整存取所有 Argo CD 資源和設定:

  • 在任何專案中建立、更新和刪除應用程式和 ApplicationSets

  • 管理 Argo CD 組態

  • 註冊和管理部署目標叢集

  • 設定儲存庫存取

  • 建立和管理專案

  • 檢視所有應用程式狀態和歷史記錄

  • 列出和存取所有叢集和儲存庫

EDITOR

可以更新專案並設定專案角色,但無法變更全域 Argo CD 設定:

  • 更新現有專案 (無法建立或刪除專案)

  • 設定專案角色和許可

  • 檢視 GPG 金鑰和憑證

  • 無法變更全域 Argo CD 組態

  • 無法直接管理叢集或儲存庫

  • 無法查看或管理沒有專案角色的應用程式

檢視程式

對 Argo CD 資源的唯讀存取權:

  • 檢視專案組態

  • 列出所有專案 (包括未指派給使用者的專案)

  • 檢視 GPG 金鑰和憑證

  • 無法列出叢集或儲存庫

  • 無法進行任何變更

  • 無法查看或管理沒有專案角色的應用程式

注意

若要授予 EDITOR 或 VIEWER 使用者對應用程式的存取權,ADMIN 或 EDITOR 必須建立專案角色,將 Identity Center 群組映射至專案中的特定許可。

專案角色和專案範圍存取

全域角色 (ADMIN、EDITOR、VIEWER) 控制對 Argo CD 本身的存取。專案角色控制對特定專案中資源和功能的存取,包括:

  • 資源:應用程式、ApplicationSets、儲存庫登入資料、叢集登入資料

  • 功能:日誌存取、執行應用程式 Pod 的存取

了解兩層許可模型

  • 全域範圍:內建角色決定使用者可以對專案、叢集、儲存庫和 Argo CD 設定執行的操作

  • 專案範圍:專案角色決定使用者可以對特定專案中的資源和功能執行的動作

這表示:

  • ADMIN 使用者可以存取所有專案資源和功能,無需額外的組態

  • 必須授予 EDITOR 和 VIEWER 使用者存取專案資源和功能的專案角色

  • EDITOR 使用者可以建立專案角色,授予自己和其他人可以更新的專案存取權

工作流程範例

  1. ADMIN 會將 Identity Center 群組映射至全域 EDITOR 角色

  2. ADMIN 會為團隊建立專案

  3. EDITOR 會設定該專案內的專案角色,以授予團隊成員對專案範圍資源的存取權

  4. 團隊成員 (可能有 VIEWER 全球角色) 現在可以根據其專案角色許可查看和管理該專案中的應用程式

如需設定專案角色的詳細資訊,請參閱 專案型存取控制

設定角色映射

在建立或更新功能時,將 AWS Identity Center 使用者和群組映射至 Argo CD 角色。

範例角色映射

{ "rbacRoleMapping": { "ADMIN": ["AdminGroup", "alice@example.com"], "EDITOR": ["DeveloperGroup", "DevOpsTeam"], "VIEWER": ["ReadOnlyGroup", "bob@example.com"] } }
注意

角色名稱區分大小寫,且必須為大寫 (ADMIN、EDITOR、VIEWER)。

重要

EKS 功能與 AWS Identity Center 整合支援每個 Argo CD 功能最多 1,000 個身分。身分可以是使用者或群組。

更新角色映射

aws eks update-capability \ --region us-east-1 \ --cluster-name cluster \ --capability-name capname \ --endpoint "https://eks.ap-northeast-2.amazonaws.com" \ --role-arn "arn:aws:iam::[.replaceable]111122223333:role/[.replaceable]`EKSCapabilityRole`" \ --configuration '{ "argoCd": { "rbacRoleMappings": { "addOrUpdateRoleMappings": [ { "role": "ADMIN", "identities": [ { "id": "686103e0-f051-7068-b225-e6392b959d9e", "type": "SSO_USER" } ] } ] } } }'

管理員帳戶用量

管理員帳戶專為初始設定和管理任務而設計,例如註冊叢集和設定儲存庫。

當管理員帳戶適當時

  • 初始功能設定和組態

  • Solo 開發或快速示範

  • 管理任務 (叢集註冊、儲存庫組態、專案建立)

管理員帳戶的最佳實務

  • 不要將帳戶字符遞交至版本控制

  • 如果權杖公開,請立即輪換權杖

  • 將帳戶字符用量限制為設定和管理任務

  • 設定短過期時間 (最長 12 小時)

  • 任何指定時間只能建立 5 個帳戶字符

改用專案型存取的時機

  • 與多個使用者共用開發環境

  • 任何類似生產的環境

  • 當您需要執行動作之人員的稽核線索時

  • 當您需要強制執行資源限制或存取界限時

對於生產環境和多使用者案例,請使用專案型存取控制搭配映射至 AWS Identity Center 群組的專用 RBAC 角色。

專案型存取控制

使用 Argo CD Projects (AppProject) 為團隊提供精細的存取控制和資源隔離。

重要

將使用者或群組指派給專案特定角色之前,您必須先在功能組態中將這些角色映射至全域 Argo CD 角色 (ADMIN、EDITOR 或 VIEWER)。使用者在沒有全域角色映射的情況下無法存取 Argo CD,即使他們已指派給專案角色。

考慮將使用者映射到全域 VIEWER 角色,然後透過專案特定角色授予其他許可。這可提供基準存取,同時允許在專案層級進行精細控制。

專案提供:

  • 來源限制:限制哪些 Git 儲存庫可以使用

  • 目的地限制:限制哪些叢集和命名空間可以成為目標

  • 資源限制:限制可以部署哪些 Kubernetes 資源類型

  • RBAC 整合:將專案映射至 AWS Identity Center 群組或 Argo CD 角色

團隊隔離的範例專案

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: description: Team A applications # Required: Specify which namespaces this project watches for Applications sourceNamespaces: - argocd # Source restrictions sourceRepos: - https://github.com/myorg/team-a-apps # Destination restrictions destinations: - namespace: team-a-* server: arn:aws:eks:us-west-2:111122223333:cluster/production # Resource restrictions clusterResourceWhitelist: - group: '' kind: Namespace namespaceResourceWhitelist: - group: 'apps' kind: Deployment - group: '' kind: Service - group: '' kind: ConfigMap

來源命名空間

使用 EKS Argo CD 功能時,AppProject 定義中需要 spec.sourceNamespaces 欄位。此欄位指定哪些命名空間可以包含參考此專案的應用程式或 ApplicationSets。

重要

EKS Argo CD 功能僅支援應用程式和 ApplicationSets 的單一命名空間 - 您在建立功能時指定的命名空間 (通常是 argocd)。這與支援多個命名空間的開放原始碼 Argo CD 不同。

AppProject 組態

所有 AppProjects 都必須在 中包含 功能的已設定命名空間sourceNamespaces

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a-project namespace: argocd spec: description: Applications for Team A # Required: Specify the capability's configured namespace (configuration.argoCd.namespace) sourceNamespaces: - argocd # Must match your capability's namespace configuration # Source repositories this project can deploy from sourceRepos: - 'https://github.com/my-org/team-a-*' # Destination restrictions destinations: - namespace: 'team-a-*' server: arn:aws:eks:us-west-2:111122223333:cluster/my-cluster
注意

如果您從 省略 功能的命名空間sourceNamespaces,則該命名空間中的應用程式或 ApplicationSets 無法參考此專案,導致部署失敗。

將使用者指派給專案

專案角色授予 EDITOR 和 VIEWER 使用者對專案資源 (應用程式、ApplicationSets、儲存庫和叢集登入資料) 和 功能 (日誌、Exec) 的存取權。如果沒有專案角色,這些使用者就無法存取這些資源,即使他們具有全域角色存取權。

ADMIN 使用者可以存取所有應用程式,而不需要專案角色。

範例:將應用程式存取權授予團隊成員

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: team-a namespace: argocd spec: # ... project configuration ... sourceNamespaces: - argocd # Project roles grant Application-level access roles: - name: developer description: Team A developers - can manage Applications policies: - p, proj:team-a:developer, applications, *, team-a/*, allow - p, proj:team-a:developer, clusters, get, *, allow # See cluster names in UI groups: - 686103e0-f051-7068-b225-e6392b959d9e # Identity Center group ID - name: viewer description: Team A viewers - read-only Application access policies: - p, proj:team-a:viewer, applications, get, team-a/*, allow - p, proj:team-a:viewer, clusters, get, *, allow # See cluster names in UI groups: - 786203e0-f051-7068-b225-e6392b959d9f # Identity Center group ID
注意

包含在專案角色clusters, get, *, allow中,以允許使用者在 UI 中查看叢集名稱。如果沒有此許可,目的地叢集會顯示為「未知」。

了解專案角色政策

政策格式為: p, proj:<project>:<role>, <resource>, <action>, <object>, <allow/deny>

資源政策

  • applications, , team-a/, allow - 團隊專案中所有應用程式的完整存取權

  • applications, get, team-a/*, allow - 應用程式的唯讀存取

  • applications, sync, team-a/*, allow - 可以同步應用程式,但無法建立/刪除

  • applications, delete, team-a/*, allow - 可以刪除應用程式 (請謹慎使用)

  • applicationsets, , team-a/, allow - 完整存取 ApplicationSets

  • repositories, *, *, allow - 存取儲存庫登入資料

  • clusters, *, *, allow - 存取叢集登入資料

功能政策

  • logs, , team-a/, allow - 存取應用程式日誌

  • exec, , team-a/, allow - 執行對應用程式 Pod 的存取

注意

EDITOR 使用者可以建立專案角色,以授予自己和他們可以更新之專案中的其他許可。這可讓團隊主管控制團隊對專案範圍資源的存取,而不需要 ADMIN 介入。

注意

groups 欄位中使用 Identity Center IDs (而非群組名稱)。您也可以使用 Identity Center 使用者 IDs進行個別使用者存取。在 AWS Identity Center 主控台或使用 CLI AWS 尋找這些 IDs。

常見許可模式

模式 1:具有完整存取權的管理團隊

{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam", "SRETeam"] } }

ADMIN 使用者可以查看和管理所有專案範圍的資源,而無需額外的組態。

模式 2:團隊領導管理專案、開發人員透過專案角色存取

{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam"], "EDITOR": ["TeamLeads"], "VIEWER": ["AllDevelopers"] } }
  1. ADMIN 會為每個團隊建立專案

  2. 團隊負責人 (EDITOR) 設定專案角色,授予開發人員對專案資源 (應用程式、ApplicationSets、登入資料) 和功能 (日誌、執行) 的存取權

  3. 開發人員 (VIEWER) 只能存取其專案角色允許的資源和功能

模式 3:具有專案角色的團隊型存取

  1. ADMIN 建立專案並將團隊負責人映射至全球 EDITOR 角色

  2. 團隊負責人 (EDITOR) 將團隊成員指派給其專案中的專案角色

  3. 團隊成員只需要 VIEWER 全球角色 - 專案角色提供專案資源和功能的存取權

{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam"], "EDITOR": ["TeamLeads"], "VIEWER": ["AllDevelopers"] } }

最佳實務

使用群組而非個別使用者:將 AWS Identity Center 群組映射至 Argo CD 角色,而非個別使用者,以便於管理。

從最低權限開始:從 VIEWER 存取開始,並視需要授予 EDITOR 或 ADMIN。

使用專案進行團隊隔離:為不同的團隊或環境建立單獨的 AppProjects以強制執行界限。

利用 Identity Center 聯合:設定 AWS Identity Center 與您的公司身分提供者聯合,以進行集中式使用者管理。

定期存取檢閱:定期檢閱角色映射和專案指派,以確保適當的存取層級。

限制叢集存取:請記住,Argo CD RBAC 會控制對 Argo CD 資源和操作的存取,但不對應至 Kubernetes RBAC。具有 Argo CD 存取權的使用者可以將應用程式部署到 Argo CD 可存取的叢集。限制 Argo CD 可存取的叢集,並使用專案目的地限制來控制應用程式可部署的位置。

AWS 服務許可

若要直接在應用程式資源中使用 AWS 服務 (無需建立儲存庫資源),請將所需的 IAM 許可連接到功能角色。

Helm Chart 的 ECR

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" } ] }

CodeCommit 儲存庫

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "arn:aws:codecommit:region:account-id:repository-name" } ] }

CodeConnections (GitHub、GitLab、Bitbucket)

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codeconnections:UseConnection" ], "Resource": "arn:aws:codeconnections:region:account-id:connection/connection-id" } ] }

如需使用這些整合的詳細資訊設定儲存庫存取,請參閱 。

後續步驟