이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Argo CD 권한 구성
Argo CD 관리형 기능은 인증을 위해 AWS Identity Center와 통합되며 권한 부여를 위해 기본 제공 RBAC 역할을 사용합니다. 이 주제에서는 사용자 및 팀에 대한 권한을 구성하는 방법을 설명합니다.
Argo CD에서 권한이 작동하는 방식
Argo CD 기능은 인증에 AWS Identity Center를 사용하고 권한 부여에 세 가지 기본 제공 RBAC 역할을 제공합니다.
사용자가 Argo CD에 액세스하는 경우:
-
사용자는 AWS Identity Center(기업 ID 제공업체에 페더레이션할 수 있음)를 사용하여 인증함
-
AWS Identity Center는 Argo CD에 사용자 및 그룹 정보를 제공함
-
Argo CD는 사용자 구성을 기반으로 사용자 및 그룹을 RBAC 역할에 매핑함
-
사용자는 액세스 권한이 있는 애플리케이션 및 리소스만 볼 수 있음
기본 제공 RBAC 역할
Argo CD 기능은 AWS Identity Center 사용자 및 그룹에 매핑하는 세 가지 기본 제공 역할을 제공합니다. 이는 프로젝트, 클러스터 및 리포지토리와 같은 Argo CD 리소스에 대한 액세스를 제어하는 글로벌 범위의 역할입니다.
중요
글로벌 역할은 애플리케이션과 같은 프로젝트 범위의 리소스가 아닌 Argo CD 자체에 대한 액세스를 제어합니다. EDITOR 및 VIEWER 사용자는 기본적으로 애플리케이션을 보거나 관리할 수 없으며, 프로젝트 범위의 리소스에 액세스하려면 프로젝트 역할이 필요합니다. 애플리케이션 및 기타 프로젝트 범위의 리소스 관련 액세스 권한 부여에 대한 자세한 내용은 프로젝트 역할 및 프로젝트 범위 액세스 섹션을 참조하세요.
ADMIN
모든 Argo CD 리소스 및 설정에 대한 전체 액세스:
-
Applications 및 ApplicationSets의 생성, 업데이트, 삭제
-
Argo CD 구성 관리
-
배포 대상 클러스터 등록 및 관리
-
리포지토리 액세스 구성
-
프로젝트 생성 및 관리
-
모든 애플리케이션 상태 및 기록 보기
-
모든 클러스터 및 리포지토리의 나열 및 액세스
EDITOR
프로젝트를 업데이트하고 프로젝트 역할을 구성할 수 있지만 글로벌 Argo CD 설정은 변경할 수 없습니다.
-
기존 프로젝트 업데이트(프로젝트를 생성하거나 삭제할 수 없음)
-
프로젝트 역할 및 권한 구성
-
GPG 키 및 인증서 보기
-
글로벌 Argo CD 구성을 변경할 수 없음
-
클러스터 또는 리포지토리를 직접 관리할 수 없음
-
프로젝트 역할 없이 애플리케이션을 보거나 관리할 수 없음
VIEWER
Argo CD 리소스에 대한 읽기 전용 액세스 권한:
-
프로젝트 구성 보기
-
모든 프로젝트(사용자가 할당되지 않은 프로젝트 포함) 나열
-
GPG 키 및 인증서 보기
-
클러스터 또는 리포지토리를 나열할 수 없음
-
변경할 수 없음
-
프로젝트 역할 없이 애플리케이션을 보거나 관리할 수 없음
참고
EDITOR 또는 VIEWER 사용자에게 애플리케이션에 대한 액세스 권한을 부여하려면 ADMIN 또는 EDITOR가 Identity Center 그룹을 프로젝트 내 특정 권한에 매핑하는 프로젝트 역할을 생성해야 합니다.
프로젝트 역할 및 프로젝트 범위 액세스
글로벌 역할(ADMIN, EDITOR, VIEWER)은 Argo CD 자체에 대한 액세스를 제어합니다. 프로젝트 역할은 다음을 포함하여 특정 프로젝트 내 리소스 및 기능에 대한 액세스를 제어합니다.
-
리소스: 애플리케이션, ApplicationSets, 리포지토리 자격 증명, 클러스터 자격 증명
-
기능: 로그 액세스, 애플리케이션 포드에 대한 실행 액세스
2단계 권한 모델 이해:
-
글로벌 범위: 기본 제공 역할은 사용자가 프로젝트, 클러스터, 리포지토리 및 Argo CD 설정으로 수행할 수 있는 작업을 결정함
-
프로젝트 범위: 프로젝트 역할은 사용자가 특정 프로젝트 내 리소스 및 기능으로 수행할 수 있는 작업을 결정함
이는 다음을 의미합니다.
-
ADMIN 사용자는 추가 구성 없이 모든 프로젝트 리소스 및 기능에 액세스할 수 있음
-
프로젝트 리소스 및 기능에 액세스하려면 EDITOR 및 VIEWER 사용자에게 프로젝트 역할을 부여해야 함
-
EDITOR 사용자는 이들이 업데이트할 수 있는 프로젝트 내에서 자신과 다른 사용자에게 액세스 권한을 부여하기 위해 프로젝트 역할을 생성할 수 있음
워크플로 예제:
-
ADMIN은 Identity Center 그룹을 글로벌 범위에서 EDITOR 역할에 매핑함
-
ADMIN은 팀에서 프로젝트를 생성함
-
EDITOR는 팀원에게 프로젝트 범위의 리소스에 대한 액세스 권한을 부여하도록 해당 프로젝트 내에서 프로젝트 역할을 구성함
-
이제 팀원(VIEWER 글로벌 역할이 있을 수 있음)은 프로젝트 역할 권한을 기반으로 해당 프로젝트의 애플리케이션을 보고 관리할 수 있음
프로젝트 역할 구성에 대한 자세한 내용은 프로젝트 기반 액세스 제어 섹션을 참조하세요.
역할 매핑 구성
기능을 생성하거나 업데이트할 때 AWS Identity Center 사용자 및 그룹을 Argo CD 역할에 매핑합니다.
역할 매핑 예제:
{ "rbacRoleMapping": { "ADMIN": ["AdminGroup", "alice@example.com"], "EDITOR": ["DeveloperGroup", "DevOpsTeam"], "VIEWER": ["ReadOnlyGroup", "bob@example.com"] } }
참고
역할 이름은 대소문자를 구분하며 대문자(ADMIN, EDITOR, VIEWER)여야 합니다.
중요
AWS Identity Center와의 EKS 기능 통합은 Argo CD 기능당 최대 1,000개의 ID를 지원합니다. ID는 사용자 또는 그룹일 수 있습니다.
역할 매핑 업데이트:
aws eks update-capability \ --regionus-east-1\ --cluster-namecluster\ --capability-namecapname\ --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" } ] } ] } } }'
관리자 계정 사용
관리자 계정은 클러스터 등록 및 리포지토리 구성과 같은 초기 설정 및 관리 태스크를 위해 설계되었습니다.
관리자 계정이 적절한 경우:
-
초기 기능 설정 및 구성
-
단독 개발 또는 빠른 데모
-
관리 태스크(클러스터 등록, 리포지토리 구성, 프로젝트 생성)
관리자 계정의 모범 사례:
-
버전 관리에 계정 토큰을 커밋하지 않음
-
공개된 경우 즉시 토큰 교체
-
계정 토큰 사용을 설정 및 관리 태스크로 제한
-
짧은 만료 시간 설정(최대 12시간)
-
지정된 시점에서 한 번에 5개의 계정 토큰만 생성할 수 있음
대신 프로젝트 기반 액세스를 사용해야 하는 경우:
-
여러 사용자와 공유된 개발 환경
-
프로덕션과 유사한 모든 환경
-
작업을 수행한 사람에 대한 감사 추적이 필요한 경우
-
리소스 제한 사항 또는 액세스 경계를 적용해야 하는 경우
프로덕션 환경 및 다중 사용자 시나리오의 경우 AWS Identity Center 그룹에 매핑된 전용 RBAC 역할과 함께 프로젝트 기반 액세스 제어를 사용합니다.
프로젝트 기반 액세스 제어
Argo CD 프로젝트(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 기능을 사용하는 경우 spec.sourceNamespaces 필드가 AppProject 정의에 필요합니다. 이 필드는 이 프로젝트를 참조하는 Applications 또는 ApplicationSets를 포함할 수 있는 네임스페이스를 지정합니다.
중요
EKS Argo CD 기능은 기능(일반적으로 argocd)을 생성할 때 사용자가 지정한 네임스페이스인 Applications 및 ApplicationSets에 대한 단일 네임스페이스만 지원합니다. 여러 네임스페이스를 지원하는 오픈 소스 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에서 기능의 네임스페이스를 생략하면 해당 네임스페이스의 Applications 또는 ApplicationSets가 이 프로젝트를 참조할 수 없으므로 배포에 실패합니다.
프로젝트에 사용자 지정:
프로젝트 역할은 EDITOR 및 VIEWER 사용자에게 프로젝트 리소스(Applications, ApplicationSets, 리포지토리 및 클러스터 자격 증명) 및 기능(로그, 실행)에 대한 액세스 권한을 부여합니다. 프로젝트 역할이 없으면 글로벌 역할 액세스 권한이 있더라도 이러한 사용자는 이러한 리소스에 액세스할 수 없습니다.
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
참고
사용자가 UI에서 클러스터 이름을 볼 수 있도록 프로젝트 역할에 clusters, get, *, allow를 포함합니다. 이 권한이 없으면 대상 클러스터가 '알 수 없음'으로 표시됩니다.
프로젝트 역할 정책 이해:
정책 형식은 다음과 같습니다. 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- 애플리케이션 포드에 대한 실행 액세스
참고
EDITOR 사용자는 이들이 업데이트할 수 있는 프로젝트 내에서 자신과 다른 사용자에게 권한을 부여하기 위해 프로젝트 역할을 생성할 수 있습니다. 이를 통해 팀 리드가 ADMIN의 개입 없이도 팀의 프로젝트 범위 리소스에 대한 액세스를 제어할 수 있습니다.
참고
groups 필드에 Identity Center 그룹 ID(그룹 이름 아님)를 사용합니다. 개별 사용자 액세스를 위해 Identity Center 사용자 ID를 사용할 수도 있습니다. AWS Identity Center 콘솔 또는 AWS CLI를 사용하여 이러한 ID를 찾습니다.
일반적인 권한 패턴
패턴 1: 전체 액세스 권한이 있는 관리자 팀
{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam", "SRETeam"] } }
ADMIN 사용자는 추가 구성 없이도 모든 프로젝트 범위 리소스를 보고 관리할 수 있습니다.
패턴 2: 팀 리드가 프로젝트를 관리하고 개발자가 프로젝트 역할을 통해 액세스하는 경우
{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam"], "EDITOR": ["TeamLeads"], "VIEWER": ["AllDevelopers"] } }
-
ADMIN은 각 팀에서 프로젝트를 생성함
-
팀 리드(EDITOR)는 개발자에게 프로젝트 리소스(Applications, ApplicationSets, 자격 증명) 및 기능(로그, 실행)에 대한 액세스 권한을 부여하도록 프로젝트 역할을 구성함
-
개발자(VIEWER)는 프로젝트 역할에서 허용하는 리소스 및 기능에만 액세스할 수 있음
패턴 3: 프로젝트 역할을 사용하는 팀 기반 액세스
-
ADMIN은 프로젝트를 생성하고 팀 리드를 EDITOR 역할에 글로벌로 매핑함
-
팀 리드(EDITOR)는 프로젝트 내 프로젝트 역할에 팀원을 할당함
-
팀원에게는 VIEWER 글로벌 역할만 있으면 되며, 프로젝트 역할은 프로젝트 리소스 및 기능에 대한 액세스를 제공함
{ "rbacRoleMapping": { "ADMIN": ["PlatformTeam"], "EDITOR": ["TeamLeads"], "VIEWER": ["AllDevelopers"] } }
모범 사례
개별 사용자 대신 그룹 사용: 더 쉽게 관리하도록 AWS Identity Center 그룹을 개별 사용자가 아닌 Argo CD 역할에 매핑합니다.
최소 권한으로 시작: VIEWER 액세스 권한으로 시작하고 필요에 따라 EDITOR 또는 ADMIN을 부여합니다.
팀 격리를 위해 프로젝트 사용: 서로 다른 팀 또는 환경에 대해 별도의 AppProject를 생성하여 경계를 적용합니다.
Identity Center 페더레이션 활용: 중앙 집중식 사용자 관리를 위해 기업 ID 제공업체와 페더레이션하도록 AWS Identity Center를 구성합니다.
정기적인 액세스 검토: 역할 매핑 및 프로젝트 할당을 정기적으로 검토하여 적절한 액세스 수준을 보장합니다.
클러스터 액세스 제한: Argo CD RBAC는 Argo CD 리소스 및 작업에 대한 액세스를 제어하지만 Kubernetes RBAC에는 해당되지 않습니다. Argo CD 액세스 권한이 있는 사용자는 Argo CD에서 액세스할 수 있는 클러스터에 애플리케이션을 배포할 수 있습니다. Argo CD에서 액세스할 수 있는 클러스터를 제한하고 프로젝트 대상 제한 사항을 사용하여 애플리케이션을 배포할 수 있는 위치를 제어합니다.
AWS 서비스 권한
리포지토리 리소스를 생성하지 않고 애플리케이션 리소스에서 직접 AWS 서비스를 사용하려면 필요한 IAM 권한을 기능 역할에 연결합니다.
헬름 차트에 대한 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" } ] }
이러한 통합 사용에 대한 자세한 내용은 리포지토리 액세스 구성 섹션을 참조하세요.
다음 단계
-
Argo CD 작업 - 애플리케이션을 생성하고 배포를 관리하는 방법에 대해 알아보기
-
Argo CD 개념 - 프로젝트를 포함한 Argo CD 개념 이해
-
EKS 기능에 대한 보안 고려 사항 - 기능에 대한 보안 모범 사례 검토