View a markdown version of this page

リポジトリアクセスを設定する - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「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 リポジトリとの直接統合。リポジトリ設定は不要です。

codecommit:GitPull

CodeConnections

マネージド認証で GitHub、GitLab、または Bitbucket に接続します。接続のセットアップが必要です。

codeconnections:UseConnection

ECR OCI アーティファクト

AWS ECR for OCI Helm チャートとマニフェスト画像の直接統合。リポジトリ設定は不要です。

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 方法

なし (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-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 チャート

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-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:// プレフィックスを含めてください。chart ではなく path フィールドを使用します。

必要な機能ロールのアクセス許可 – マネージドポリシーをアタッチします。

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

このポリシーには、必要な ECR アクセス許可である ecr:GetAuthorizationTokenecr: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" }'
注記

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

リポジトリ認証情報テンプレート

複数のリポジトリ (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 には、接続ステータスと、認証エラーがあればそれも表示されます。

リポジトリシークレットにステータス情報は含まれません。

その他のリソース