

 **協助改進此頁面** 

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

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

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

# 設定儲存庫存取
<a name="argocd-configure-repositories"></a>

部署應用程式之前，請設定 Argo CD 以存取您的 Git 儲存庫和 Helm Chart 登錄檔。Argo CD 支援 GitHub、GitLab、Bitbucket、 AWS CodeCommit 和 AWS ECR 的多種身分驗證方法。

**注意**  
對於直接 AWS 服務整合 (ECR Helm Chart、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>


| Method | 使用案例 | 所需的 IAM 許可 | 
| --- | --- | --- | 
|   **直接整合 AWS 服務**   | 
|  CodeCommit：  |  直接與 AWS CodeCommit Git 儲存庫整合。不需要儲存庫組態。  |   `codecommit:GitPull`   | 
|  CodeConnections  |  使用受管身分驗證連線至 GitHub、GitLab 或 Bitbucket。需要連線設定。  |   `codeconnections:UseConnection`   | 
|  ECR OCI 成品  |  直接整合 OCI Helm Chart 和資訊清單映像的 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 方法  |  無 (EKS Access Entry 使用 Kubernetes RBAC 處理的許可）  | 

## 直接存取 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 Helm Chart
<a name="_ecr_helm_charts"></a>

ECR 會將 Helm Chart 儲存為 OCI 成品。Argo CD 支援兩種參考方式：

 **Helm 格式** （建議用於 Helm Chart)：

```
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://`首。使用 `path` 欄位而非 `chart`。

必要的功能角色許可 - 連接 受管政策：

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

此政策包含必要的 ECR 許可：`ecr:GetAuthorizationToken`、 `ecr:BatchGetImage`和 `ecr:GetDownloadUrlForLayer`。

## 使用 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`。這可提供比建立個別儲存庫秘密更好的 UX。如需詳細資訊，請參閱 Argo CD 文件中的[儲存庫登入](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`。這可提供比為每個儲存庫建立個別儲存庫秘密更好的 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`。然後，您可以在應用程式中參考此組織下的任何儲存庫，而無需建立其他秘密。

如需詳細資訊，請參閱 Argo CD 文件中的[儲存庫登入](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>

For 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/) - 上游儲存庫組態參考