리포지토리 접근 구성
리포지토리 접근 구성
애플리케이션을 배포하기 전에 Argo CD가 Git 리포지토리와 Helm 차트 레지스트리에 접근하도록 구성하는 방법을 설명합니다.
출처: 문서
본문
Argo CD는 GitHub, GitLab, Bitbucket, AWS CodeCommit, AWS ECR에 대해 여러 인증 방법을 지원합니다.
참고
직접 AWS 서비스 통합(ECR Helm 차트, CodeCommit 리포지토리, CodeConnections)의 경우 Repository 구성을 만들지 않고 Application 리소스에서 직접 참조할 수 있습니다. 캐퍼빌리티 역할에 필요한 IAM 권한이 있어야 합니다. 자세한 내용은 Argo CD 권한 구성을 참고하세요.
사전 요구 사항
- Argo CD 캐퍼빌리티가 생성된 EKS 클러스터
- Kubernetes 매니페스트를 포함하는 Git 리포지토리
- 클러스터와 통신하도록 구성된
kubectl
참고
AWS CodeConnections는 AWS Cloud 또는 온프레미스에 있는 Git 서버에 연결할 수 있습니다. 자세한 내용은 AWS CodeConnections를 참고하세요.
인증 방법
| 방법 | 사용 사례 | 필요한 IAM 권한 |
|---|---|---|
| CodeCommit (직접 AWS 서비스 통합) | AWS CodeCommit Git 리포지토리와의 직접 통합. Repository 구성 불필요. | codecommit:GitPull |
| CodeConnections | 관리형 인증으로 GitHub, GitLab, Bitbucket에 연결. 연결 설정 필요. | codeconnections:UseConnection |
| ECR OCI Artifacts | OCI Helm 차트와 매니페스트 이미지용 AWS ECR과의 직접 통합. Repository 구성 불필요. | arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly |
| AWS Secrets Manager (사용자 이름/토큰) (자격 증명 포함 Repository 구성) | 개인 액세스 토큰이나 비밀번호 저장. Kubernetes 접근 없이 자격 증명 교체 가능. | arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess |
| AWS Secrets Manager (SSH Key) (자격 증명 포함 Repository 구성) | SSH 키 인증 사용. Kubernetes 접근 없이 자격 증명 교체 가능. | arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess |
| AWS Secrets Manager (GitHub App) (자격 증명 포함 Repository 구성) | 개인 키가 있는 GitHub App 인증. Kubernetes 접근 없이 자격 증명 교체 가능. | arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess |
| Kubernetes Secret | 클러스터 내 시크릿을 사용하는 표준 Argo CD 방법 | 없음(권한은 Kubernetes RBAC가 있는 EKS 접근 항목으로 처리) |
AWS 서비스 직접 접근
AWS 서비스는 Repository 구성을 만들지 않고 Application 리소스에서 직접 참조할 수 있습니다. 캐퍼빌리티 역할에 필요한 IAM 권한이 있어야 합니다.
CodeCommit 리포지토리
Application에서 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 Helm 차트
ECR은 Helm 차트를 OCI 아티팩트로 저장합니다. Argo CD는 이를 참조하는 두 가지 방법을 지원합니다.
Helm 형식(Helm 차트에 권장):
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
참고: Helm 형식을 사용할 때는 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 권한(ecr:GetAuthorizationToken, ecr:BatchGetImage, ecr:GetDownloadUrlForLayer)이 포함됩니다.
AWS Secrets Manager 사용
리포지토리 자격 증명을 Secrets Manager에 저장하고 Argo CD Repository 구성에서 참조합니다. Secrets Manager를 사용하면 Kubernetes RBAC 접근 없이도 자동 자격 증명 교체가 가능합니다. 자격 증명은 Secrets Manager에 대한 IAM 권한으로 교체할 수 있고, Argo CD는 업데이트된 값을 자동으로 읽습니다.
참고
여러 리포지토리에서 자격 증명을 재사용하려면(예: GitHub 조직의 모든 리포지토리)
argocd.argoproj.io/secret-type: repo-creds와 함께 리포지토리 자격 증명 템플릿을 사용하세요. 이는 개별 리포지토리 시크릿을 만드는 것보다 더 나은 UX를 제공합니다. 자세한 내용은 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"
}'
참고
tlsClientCertData와tlsClientCertKey값은 base64로 인코딩되어야 합니다.
Secrets Manager를 참조하는 Repository 시크릿 생성:
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 "[REDACTED PRIVATE KEY]"
SSH용 Repository 시크릿 생성:
apiVersion: v1
kind: Secret
metadata:
name: my-repo-ssh
namespace: argocd
labels:
argocd.argoproj.io/secret-type: repository
stringData:
type: git
url: [email protected]:your-org/your-repo.git
secretArn: arn:aws:secretsmanager:us-west-2:111122223333:secret:argocd/my-repo-ssh-AbCdEf
project: default
GitHub App 인증
개인 키가 있는 GitHub App 인증:
GitHub App 자격 증명으로 시크릿 생성:
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 App용 Repository 시크릿 생성:
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와 함께 리포지토리 자격 증명 템플릿을 사용하세요. 이는 각 리포지토리에 개별 시크릿을 만드는 것보다 더 나은 UX를 제공합니다.
리포지토리 자격 증명 템플릿 생성:
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와 일치하는 모든 리포지토리에 적용됩니다. 그러면 추가 시크릿을 만들지 않고도 Application에서 이 조직 아래의 모든 리포지토리를 참조할 수 있습니다. 자세한 내용은 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: [email protected]:your-org/your-repo.git
sshPrivateKey: |
[REDACTED 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의 Settings → Repositories에서 연결 상태를 확인합니다. UI는 연결 상태와 모든 인증 오류를 보여줍니다. Repository 시크릿에는 상태 정보가 포함되지 않습니다.
추가 리소스
- 대상 클러스터 등록 - 배포용 대상 클러스터 등록
- Application 생성 - 첫 Application 만들기
- Argo CD 고려 사항 - IAM 권한과 보안 구성
- Private Repositories - 업스트림 리포지토리 구성 레퍼런스