設定儲存庫存取 - Amazon EKS

協助改進此頁面

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

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

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

設定儲存庫存取

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

注意

對於直接 AWS 服務整合 (ECR Helm Chart、CodeCommit 儲存庫和 CodeConnections),您可以直接在應用程式資源中參考它們,而無需建立儲存庫組態。功能角色必須具有必要的 IAM 許可。如需詳細資訊,請參閱 設定 Argo CD 許可

先決條件

  • 建立 Argo CD 功能的 EKS 叢集

  • 包含 Kubernetes 資訊清單的 Git 儲存庫

  • kubectl 設定為與您的叢集通訊

注意

若要在多個儲存庫中重複使用登入資料,您可以使用儲存庫登入資料範本 (已複製)。如需詳細資訊,請參閱 Argo CD 文件中的私有儲存庫

身分驗證方法

Method 使用案例 所需的 IAM 許可

直接整合 AWS 服務

CodeCommit:

直接與 AWS CodeCommit Git 儲存庫整合。不需要儲存庫組態。

codecommit:GitPull

CodeConnections

使用受管身分驗證連線至 GitHub、GitLab 或 Bitbucket。需要連線設定。

codeconnections:UseConnection

ECR Helm Chart

與 OCI Helm Chart 的 AWS ECR 直接整合。不需要儲存庫組態。

ecr:GetAuthorizationToken, ecr:BatchGetImage, ecr:GetDownloadUrlForLayer

具有登入資料的儲存庫組態

AWS Secrets Manager (使用者名稱/權杖)

存放個人存取字符或密碼

secretsmanager:GetSecretValue

AWS Secrets Manager (SSH 金鑰)

使用 SSH 金鑰身分驗證

secretsmanager:GetSecretValue

AWS Secrets Manager (GitHub 應用程式)

使用私有金鑰進行 GitHub 應用程式身分驗證

secretsmanager:GetSecretValue

Kubernetes 秘密

使用叢集內秘密的標準 Argo CD 方法

無 (僅限信任政策)

直接存取 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 Helm Chart

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

必要的功能角色許可:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Resource": "*" } ] }

使用 AWS Secrets Manager

將儲存庫登入資料儲存在 Secrets Manager 中,並在 Argo CD 儲存庫組態中參考它們。

使用者名稱和字符身分驗證

對於具有個人存取字符或密碼的 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
重要

確保您的 IAM 功能角色具有您所建立秘密的secretsmanager:GetSecretValue許可。如需 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-----

公有儲存庫

公有儲存庫不需要其他組態:

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: public-app namespace: argocd spec: source: repoURL: https://github.com/argoproj/argocd-example-apps targetRevision: HEAD path: guestbook # ... rest of configuration

CodeCommit 儲存庫

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 考量事項

驗證儲存庫連線

透過設定 → 儲存庫下的 Argo CD UI 檢查連線狀態。UI 會顯示連線狀態和任何身分驗證錯誤。

儲存庫秘密不包含狀態資訊。

其他資源