리포지토리 액세스 구성 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

리포지토리 액세스 구성

애플리케이션을 배포하기 전에 Git 리포지토리 및 헬름 차트 레지스트리에 액세스하도록 Argo CD를 구성합니다. Argo CD는 GitHub, GitLab, Bitbucket, AWS CodeCommit 및 AWS ECR에 대해 여러 인증 방법을 지원합니다.

참고

직접 AWS 서비스 통합(ECR 헬름 차트, CodeCommit 리포지토리 및 CodeConnections)의 경우 리포지토리 구성을 생성하지 않고도 애플리케이션 리소스에서 직접 참조할 수 있습니다. 용량 역할에는 필요한 IAM 권한이 있어야 합니다. 세부 정보는 Argo CD 권한 구성 섹션을 참조하세요.

사전 조건

  • Argo CD 기능이 생성된 EKS 클러스터

  • Kubernetes 매니페스트를 포함하는 Git 리포지토리

  • 클러스터와 통신하도록 구성된 kubectl

참고

AWS CodeConnections는 AWS 클라우드 또는 온프레미스에 있는 Git 서버에 연결할 수 있습니다. 자세한 내용은 AWS CodeConnections를 참조하세요.

인증 방법

방법 사용 사례 필요한 IAM 권한

AWS 서비스와 직접 통합

CodeCommit

AWS CodeCommit Git 리포지토리와 직접 통합. 리포지토리 구성이 필요하지 않습니다.

codecommit:GitPull

CodeConnections

관리형 인증을 사용하여 GitHub, GitLab 또는 Bitbucket에 연결합니다. 연결 설정이 필요합니다.

codeconnections:UseConnection

ECR OCI 아티팩트

OCI 헬름 차트 및 매니페스트 이미지에 대한 AWS ECR과 직접 통합. 리포지토리 구성이 필요하지 않습니다.

arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly

자격 증명을 사용하는 리포지토리 구성

AWS Secrets Manager(사용자 이름/토큰)

개인 액세스 토큰 또는 암호를 저장합니다. Kubernetes 액세스 권한 없이 자격 증명 교체를 활성화합니다.

arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess

AWS Secrets Manager(SSH 키)

SSH 키 인증을 사용합니다. Kubernetes 액세스 권한 없이 자격 증명 교체를 활성화합니다.

arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess

AWS Secrets Manager(GitHub 앱)

프라이빗 키를 사용하는 GitHub 앱 인증. Kubernetes 액세스 권한 없이 자격 증명 교체를 활성화합니다.

arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess

Kubernetes 보안 암호

클러스터 내 보안 암호를 사용하는 표준 Argo CD 메서드

없음(Kubernetes RBAC를 사용하여 EKS 액세스 항목에 의해 처리되는 권한)

AWS 서비스에 대한 직접 액세스

AWS 서비스의 경우 리포지토리 구성을 생성하지 않고도 애플리케이션 리소스에서 직접 참조할 수 있습니다. 용량 역할에는 필요한 IAM 권한이 있어야 합니다.

CodeCommit 리포지토리

애플리케이션에서 직접 CodeCommit 리포지토리 참조:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: source: repoURL: https://git-codecommit.region.amazonaws.com/v1/repos/repository-name targetRevision: main path: kubernetes/manifests

필요한 용량 역할 권한:

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

CodeConnections

CodeConnections를 통해 GitHub, GitLab 또는 Bitbucket 리포지토리를 참조합니다. 리포지토리 URL 형식은 CodeConnections 연결 ARN에서 파생됩니다.

리포지토리 URL 형식은 다음과 같습니다.

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: source: repoURL: https://codeconnections.region.amazonaws.com/git-http/account-id/region/connection-id/owner/repository.git targetRevision: main path: kubernetes/manifests

필요한 용량 역할 권한:

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

ECR 헬름 차트

ECR은 헬름 차트를 OCI 아티팩트로 저장합니다. Argo CD는 이를 참조하는 다음과 같은 두 가지 방법을 지원합니다.

헬름 형식(헬름 차트의 경우 권장):

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app-helm namespace: argocd spec: source: repoURL: account-id.dkr.ecr.region.amazonaws.com/repository-name targetRevision: chart-version chart: chart-name helm: valueFiles: - values.yaml

참고: 헬름 형식을 사용할 때는 oci:// 접두사를 포함하지 마세요. chart 필드를 사용하여 차트 이름을 지정합니다.

OCI 형식(Kubernetes 매니페스트가 있는 OCI 아티팩트의 경우):

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app-oci namespace: argocd spec: source: repoURL: oci://account-id.dkr.ecr.region.amazonaws.com/repository-name targetRevision: artifact-version path: path-to-manifests

참고: OCI 형식을 사용할 때 oci:// 접두사를 포함합니다. chart 대신 path 필드를 사용합니다.

필수 기능 역할 권한 - 관리형 정책을 연결합니다.

arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly

이 정책에는 ecr:GetAuthorizationToken, ecr:BatchGetImage, ecr:GetDownloadUrlForLayer와 같은 필수 ECR 권한이 포함되어 있습니다.

AWS Secrets Manager 사용

Secrets Manager에 리포지토리 자격 증명을 저장하고 Argo CD 리포지토리 구성에서 참조합니다. Secrets Manager를 사용하면 Kubernetes RBAC 액세스 권한 없이도 자동화된 자격 증명 교체가 지원됩니다. 자격 증명은 Secrets Manager에 대한 IAM 권한을 사용하여 교체할 수 있으며 Argo CD는 업데이트된 값을 자동으로 읽습니다.

참고

여러 리포지토리(예: GitHub 조직의 모든 리포지토리)에서 자격 증명을 재사용하려면 argocd.argoproj.io/secret-type: repo-creds에서 리포지토리 자격 증명 템플릿을 사용합니다. 그러면 개별 리포지토리 보안 암호를 생성할 때보다 사용자 경험이 개선됩니다. 자세한 내용은 Argo CD 설명서의 Repository Credentials를 참조하세요.

사용자 이름 및 토큰 인증

개인 액세스 토큰 또는 암호가 있는 HTTPS 리포지토리의 경우:

Secrets Manager에서 보안 암호 생성:

aws secretsmanager create-secret \ --name argocd/my-repo \ --description "GitHub credentials for Argo CD" \ --secret-string '{"username":"your-username","token":"your-personal-access-token"}'

선택적 TLS 클라이언트 인증서 필드(프라이빗 Git 서버의 경우):

aws secretsmanager create-secret \ --name argocd/my-private-repo \ --secret-string '{ "username":"your-username", "token":"your-token", "tlsClientCertData":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCi4uLgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t", "tlsClientCertKey":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCi4uLgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0t" }'
참고

tlsClientCertDatatlsClientCertKey 값은 base64로 인코딩해야 합니다.

Secrets Manager를 참조하는 리포지토리 보안 암호 생성:

apiVersion: v1 kind: Secret metadata: name: my-repo namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: type: git url: https://github.com/your-org/your-repo secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-AbCdEf project: default

SSH 키 인증

SSH 기반 Git 액세스의 경우 프라이빗 키를 일반 텍스트(JSON 아님)로 저장합니다.

SSH 프라이빗 키를 사용하여 보안 암호 생성:

aws secretsmanager create-secret \ --name argocd/my-repo-ssh \ --description "SSH key for Argo CD" \ --secret-string "-----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn ... -----END OPENSSH PRIVATE KEY-----"

SSH에 대한 리포지토리 보안 암호 생성:

apiVersion: v1 kind: Secret metadata: name: my-repo-ssh namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: type: git url: git@github.com:your-org/your-repo.git secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf project: default

GitHub 앱 인증

프라이빗 키를 사용하는 GitHub 앱 인증의 경우:

GitHub 앱 자격 증명을 사용하여 보안 암호 생성:

aws secretsmanager create-secret \ --name argocd/github-app \ --description "GitHub App credentials for Argo CD" \ --secret-string '{ "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=", "githubAppID":"123456", "githubAppInstallationID":"12345678" }'
참고

githubAppPrivateKeySecret 값은 base64로 인코딩해야 합니다.

GitHub Enterprise의 선택적 필드:

aws secretsmanager create-secret \ --name argocd/github-enterprise-app \ --secret-string '{ "githubAppPrivateKeySecret":"LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQouLi4KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0=", "githubAppID":"123456", "githubAppInstallationID":"12345678", "githubAppEnterpriseBaseUrl":"https://github.example.com/api/v3" }'

GitHub 앱에 대한 리포지토리 보안 암호 생성:

apiVersion: v1 kind: Secret metadata: name: my-repo-github-app namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: type: git url: https://github.com/your-org/your-repo secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-app-AbCdEf project: default

리포지토리 자격 증명 템플릿

여러 리포지토리(예: GitHub 조직 또는 사용자의 모든 리포지토리)에서 자격 증명을 재사용하려면 argocd.argoproj.io/secret-type: repo-creds에서 리포지토리 자격 증명 템플릿을 사용합니다. 그러면 각 리포지토리에 대해 개별 리포지토리 보안 암호를 생성할 때보다 사용자 경험이 개선됩니다.

리포지토리 자격 증명 템플릿 생성:

apiVersion: v1 kind: Secret metadata: name: github-org-creds namespace: argocd labels: argocd.argoproj.io/secret-type: repo-creds stringData: type: git url: https://github.com/your-org secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/github-org-AbCdEf

이 자격 증명 템플릿은 URL 접두사 https://github.com/your-org와 일치하는 모든 리포지토리에 적용됩니다. 그런 다음 추가 보안 암호를 생성하지 않고 애플리케이션에서 이 조직의 모든 리포지토리를 참조할 수 있습니다.

자세한 내용은 Argo CD 설명서의 Repository Credentials를 참조하세요.

중요

IAM 기능 역할에 관리형 정책 arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess 또는 secretsmanager:GetSecretValue 및 KMS 복호화 권한을 포함한 동등한 권한이 있는지 확인합니다. IAM 정책 구성은 Argo CD 고려 사항 섹션을 참조하세요.

AWS CodeConnections 사용

CodeConnections 통합은 AWS CodeConnections를 사용하여 Git 리포지토리에 연결 섹션을 참조하세요.

CodeConnections는 자격 증명을 저장하지 않고도 GitHub, GitLab 및 Bitbucket에 대한 관리형 인증을 제공합니다.

Kubernetes 보안 암호 사용

표준 Argo CD 메서드를 사용하여 Kubernetes에 직접 자격 증명을 저장합니다.

개인 액세스 토큰을 사용하는 HTTPS의 경우:

apiVersion: v1 kind: Secret metadata: name: my-repo namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: type: git url: https://github.com/your-org/your-repo username: your-username password: your-personal-access-token

SSH의 경우:

apiVersion: v1 kind: Secret metadata: name: my-repo-ssh namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: type: git url: git@github.com:your-org/your-repo.git sshPrivateKey: | -----BEGIN OPENSSH PRIVATE KEY----- ... your private key ... -----END OPENSSH PRIVATE KEY-----

CodeCommit 리포지토리

AWS CodeCommit의 경우 IAM 기능 역할 CodeCommit 권한(codecommit:GitPull)을 부여합니다.

리포지토리를 구성합니다.

apiVersion: v1 kind: Secret metadata: name: codecommit-repo namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: type: git url: https://git-codecommit.us-west-2.amazonaws.com/v1/repos/my-repo project: default

자세한 IAM 정책 구성은 Argo CD 고려 사항 섹션을 참조하세요.

리포지토리 연결 확인

Argo CD UI의 설정 → 리포지토리에서 연결 상태를 확인합니다. UI에 연결 상태 및 모든 인증 오류가 표시됩니다.

리포지토리 보안 암호에는 상태 정보가 포함되지 않습니다.

추가 리소스