

 **이 페이지 개선에 도움 주기** 

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

# 리포지토리 액세스 구성
<a name="argocd-configure-repositories"></a>

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

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

## 사전 조건
<a name="_prerequisites"></a>
+ Argo CD 기능이 생성된 EKS 클러스터
+ Kubernetes 매니페스트를 포함하는 Git 리포지토리
+  클러스터와 통신하도록 구성된 `kubectl`

**참고**  
 AWS CodeConnections는 AWS 클라우드 또는 온프레미스에 있는 Git 서버에 연결할 수 있습니다. 자세한 내용은 [AWS CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/userguide/welcome.html)를 참조하세요.

## 인증 방법
<a name="_authentication_methods"></a>


<table>
<thead>
  <tr><th>방법</th><th>사용 사례</th><th>필요한 IAM 권한</th></tr>
</thead>
<tbody>
  <tr><td colspan="3"> **AWS 서비스와 직접 통합** </td></tr>
  <tr><td>CodeCommit</td><td>AWS CodeCommit Git 리포지토리와 직접 통합. 리포지토리 구성이 필요하지 않습니다.</td><td> `codecommit:GitPull` </td></tr>
  <tr><td>CodeConnections</td><td>관리형 인증을 사용하여 GitHub, GitLab 또는 Bitbucket에 연결합니다. 연결 설정이 필요합니다.</td><td> `codeconnections:UseConnection` </td></tr>
  <tr><td>ECR OCI 아티팩트</td><td>OCI 헬름 차트 및 매니페스트 이미지에 대한 AWS ECR과 직접 통합. 리포지토리 구성이 필요하지 않습니다.</td><td> `arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly` </td></tr>
  <tr><td colspan="3"> **자격 증명을 사용하는 리포지토리 구성** </td></tr>
  <tr><td> AWS Secrets Manager(사용자 이름/토큰)</td><td>개인 액세스 토큰 또는 암호를 저장합니다. Kubernetes 액세스 권한 없이 자격 증명 교체를 활성화합니다.</td><td> `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` </td></tr>
  <tr><td> AWS Secrets Manager(SSH 키)</td><td>SSH 키 인증을 사용합니다. Kubernetes 액세스 권한 없이 자격 증명 교체를 활성화합니다.</td><td> `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` </td></tr>
  <tr><td> AWS Secrets Manager(GitHub 앱)</td><td>프라이빗 키를 사용하는 GitHub 앱 인증. Kubernetes 액세스 권한 없이 자격 증명 교체를 활성화합니다.</td><td> `arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess` </td></tr>
  <tr><td>Kubernetes 보안 암호</td><td>클러스터 내 보안 암호를 사용하는 표준 Argo CD 메서드</td><td>없음(Kubernetes RBAC를 사용하여 EKS 액세스 항목에 의해 처리되는 권한)</td></tr>
</tbody>
</table>


## AWS 서비스에 대한 직접 액세스
<a name="direct_access_to_shared_aws_services"></a>

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

### CodeCommit 리포지토리
<a name="_codecommit_repositories"></a>

애플리케이션에서 직접 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
<a name="_codeconnections"></a>

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 헬름 차트
<a name="_ecr_helm_charts"></a>

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 사용
<a name="using_shared_aws_secrets_manager"></a>

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://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/)를 참조하세요.

### 사용자 이름 및 토큰 인증
<a name="_username_and_token_authentication"></a>

개인 액세스 토큰 또는 암호가 있는 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를 참조하는 리포지토리 보안 암호 생성**:

```
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 키 인증
<a name="_ssh_key_authentication"></a>

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 앱 인증
<a name="_github_app_authentication"></a>

프라이빗 키를 사용하는 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
```

### 리포지토리 자격 증명 템플릿
<a name="_repository_credential_templates"></a>

여러 리포지토리(예: 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](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-repo-creds-yaml/)를 참조하세요.

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

## AWS CodeConnections 사용
<a name="using_shared_aws_codeconnections"></a>

CodeConnections 통합은 [AWS CodeConnections를 사용하여 Git 리포지토리에 연결](integration-codeconnections.md) 섹션을 참조하세요.

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

## Kubernetes 보안 암호 사용
<a name="_using_kubernetes_secrets"></a>

표준 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 리포지토리
<a name="_codecommit_repositories_2"></a>

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 고려 사항](argocd-considerations.md) 섹션을 참조하세요.

## 리포지토리 연결 확인
<a name="_verify_repository_connection"></a>

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

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

## 추가 리소스
<a name="_additional_resources"></a>
+  [대상 클러스터 등록](argocd-register-clusters.md) - 배포에 대한 대상 클러스터 등록
+  [애플리케이션 생성](argocd-create-application.md) - 첫 번째 애플리케이션 생성
+  [Argo CD 고려 사항](argocd-considerations.md) - IAM 권한 및 보안 구성
+  [프라이빗 리포지토리](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/) - 업스트림 리포지토리 구성 참조