帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
配置存储库访问权限
在部署应用程序之前,请配置 Argo CD 以访问 Git 存储库和 Helm 图表注册表。Argo CD 支持针对 GitHub、GitLab、Bitbucket、AWS CodeCommit 和 AWS ECR 的多种身份验证方法。
注意
若要与 AWS 服务直接集成(ECR Helm 图表、CodeCommit 存储库和 CodeConnections),您可以直接在 Application 资源中引用它们,而无需创建存储库配置。功能角色必须具有必要的 IAM 权限。有关详细信息,请参阅 配置 Argo CD 权限。
先决条件
-
已创建具有 Argo CD 功能的 EKS 集群
-
Git 存储库包含 Kubernetes 清单
-
已配置
kubectl以与集群通信
注意
AWS CodeConnections 可以连接到位于 AWS 云或本地的 Git 服务器。有关更多信息,请参阅 AWS CodeConnections。
身份验证方法
| 方法 | 使用场景 | 所需的 IAM 权限 |
|---|---|---|
|
与 AWS 服务直接集成 |
||
|
CodeCommit |
直接与 AWS CodeCommit Git 存储库集成。无需配置存储库。 |
|
|
CodeConnections |
通过托管身份验证连接到 GitHub、GitLab 或 Bitbucket。需要进行连接设置。 |
|
|
ECR OCI 构件 |
直接与 AWS ECR 集成以获取 OCI Helm 图表和清单映像。无需配置存储库。 |
|
|
使用凭证配置存储库 |
||
|
AWS Secrets Manager(用户名/令牌) |
存储个人访问令牌或密码。无需 Kubernetes 访问即可实现凭证轮换。 |
|
|
AWS Secrets Manager(SSH 密钥) |
使用 SSH 密钥身份验证。无需 Kubernetes 访问即可实现凭证轮换。 |
|
|
AWS Secrets Manager(GitHub 应用程序) |
使用私有密钥对 GitHub 应用程序进行身份验证。无需 Kubernetes 访问即可实现凭证轮换。 |
|
|
Kubernetes Secret |
使用集群内密钥的标准 Argo CD 方法 |
无(由 EKS 访问条目使用 Kubernetes RBAC 处理的权限) |
直接访问 AWS 服务
对于 AWS 服务,您可以直接在 Application 资源中引用它们,而无需创建存储库配置。功能角色必须具有必要的 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-nametargetRevision: 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-nametargetRevision:chart-versionchart:chart-namehelm: 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-nametargetRevision:artifact-versionpath:path-to-manifests
注意:使用 OCI 格式时,请包含 oci:// 前缀。请使用 path 字段而非 chart。
所需功能角色权限 - 附加托管策略:
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
此策略包括必要的权限:ecr:GetAuthorizationToken、ecr:BatchGetImage 和 ecr:GetDownloadUrlForLayer。
使用 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 文档中的存储库凭证
用户名和令牌身份验证
对于使用个人访问令牌或密码的 HTTPS 存储库:
在 Secrets Manager 中创建 Secret:
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 Secret:
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 私有密钥的 Secret:
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 创建 Repository Secret:
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 应用程序凭证的 Secret:
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 应用程序创建 Repository Secret:
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 文档中的存储库凭证
重要
确保您的 IAM 功能角色已附加托管策略 arn:aws:iam::aws:policy/AWSSecretsManagerClientReadOnlyAccess 或等效权限,包括 secretsmanager:GetSecretValue 和 KMS 解密权限。有关 IAM 策略配置,请参阅 Argo CD 注意事项。
使用 AWS CodeConnections
有关 CodeConnections 集成,请参阅使用 AWS CodeConnections 连接到 Git 存储库。
CodeConnections 为 GitHub、GitLab 和 Bitbucket 提供托管身份验证,无需存储凭证。
使用 Kubernetes Secrets
使用标准的 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 用户界面,在“设置 → 存储库”下检查连接状态。用户界面会显示连接状态和任何身份验证错误。
Repository Secret 不包含状态信息。
其他资源
-
注册目标集群:注册用于部署的目标集群
-
创建应用程序:创建第一个应用程序
-
Argo CD 注意事项:IAM 权限和安全配置
-
Private Repositories
:上游存储库配置参考