このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
リポジトリアクセスを設定する
アプリケーションをデプロイする前に、Git リポジトリおよび Helm チャートレジストリにアクセスするように Argo CD を設定します。Argo CD は、GitHub、GitLab、Bitbucket、AWS CodeCommit、AWS ECR に対応するために複数の認証方法をサポートしています。
注記
直接 AWS サービス統合 (ECR Helm チャート、CodeCommit リポジトリ、CodeConnections) の場合、リポジトリ設定を作成しなくても、Application リソースで直接参照できます。機能ロールには、IAM アクセス許可が必要です。詳細については、「Argo CD アクセス許可を設定する」を参照してください。
前提条件
-
EKS クラスターに Argo CD 機能が作成されていること
-
Git リポジトリに Kubernetes マニフェストが含まれていること
-
クラスターと通信できるように
kubectlが設定されていること
注記
AWS CodeConnections は、AWS クラウドまたはオンプレミスにある Git サーバーに接続できます。詳細については、「AWS CodeConnections」を参照してください。
認証方法
| Method | ユースケース | 必要な IAM アクセス許可 |
|---|---|---|
|
AWS サービスとの直接統合 |
||
|
CodeCommit |
AWS CodeCommit Git リポジトリとの直接統合。リポジトリ設定は不要です。 |
|
|
CodeConnections |
マネージド認証で GitHub、GitLab、または Bitbucket に接続します。接続のセットアップが必要です。 |
|
|
ECR OCI アーティファクト |
AWS ECR for OCI Helm チャートとマニフェスト画像の直接統合。リポジトリ設定は不要です。 |
|
|
認証情報によるリポジトリ設定 |
||
|
AWS Secrets Manager (ユーザー名/トークン) |
個人用アクセストークンまたはパスワードを保存します。Kubernetes アクセスなしで認証情報のローテーションを有効にします。 |
|
|
AWS Secrets Manager (SSH キー) |
SSH キー認証を使用します。Kubernetes アクセスなしで認証情報のローテーションを有効にします。 |
|
|
AWS Secrets Manager (GitHub アプリ) |
プライベートキーによる GitHub アプリの認証。Kubernetes アクセスなしで認証情報のローテーションを有効にします。 |
|
|
Kubernetes シークレット |
クラスター内シークレットを使用した標準の Argo CD 方法 |
なし (Kubernetes RBAC を使用した EKS アクセスエントリによって処理されるアクセス許可) |
AWS サービスへの直接アクセス
AWS サービスの場合、リポジトリ設定を作成しなくても、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-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 では、次の 2 つの方法でそれらを参照できます。
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:// プレフィックスを含めてください。chart ではなく path フィールドを使用します。
必要な機能ロールのアクセス許可 – マネージドポリシーをアタッチします。
arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
このポリシーには、必要な ECR アクセス許可である 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 でリポジトリ認証情報テンプレートを使用します。これにより、個別のリポジトリシークレットを作成するよりも 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 を参照するリポジトリシークレットを作成する:
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
リポジトリ認証情報テンプレート
複数のリポジトリ (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: 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 UI の [設定] → [リポジトリ] から接続ステータスを確認します。UI には、接続ステータスと、認証エラーがあればそれも表示されます。
リポジトリシークレットにステータス情報は含まれません。
その他のリソース
-
ターゲットクラスターを登録する - デプロイ用にターゲットクラスターを登録する
-
Application を作成する - 最初の Application を作成する
-
Argo CD に関する考慮事項 - IAM アクセス許可とセキュリティ設定
-
プライベートリポジトリ
- アップストリームリポジトリ設定リファレンス