

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

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# リポジトリアクセスを設定する
<a name="argocd-configure-repositories"></a>

アプリケーションをデプロイする前に、Git リポジトリおよび Helm チャートレジストリにアクセスするように Argo CD を設定します。Argo CD は、GitHub、GitLab、Bitbucket、AWS CodeCommit、AWS ECR に対応するために複数の認証方法をサポートしています。

**注記**  
直接 AWS サービス統合 (ECR Helm チャート、CodeCommit リポジトリ、CodeConnections) の場合、リポジトリ設定を作成しなくても、Application リソースで直接参照できます。機能ロールには、IAM アクセス許可が必要です。詳細については、「[Argo CD アクセス許可を設定する](argocd-permissions.md)」を参照してください。

## 前提条件
<a name="_prerequisites"></a>
+ EKS クラスターに Argo CD 機能が作成されていること
+ Git リポジトリに Kubernetes マニフェストが含まれていること
+  クラスターと通信できるように `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 アーティファクト  |  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 サービスへの直接アクセス
<a name="direct_access_to_shared_aws_services"></a>

AWS サービスの場合、リポジトリ設定を作成しなくても、Application リソースで直接参照できます。機能ロールには、IAM アクセス許可が必要です。

### CodeCommit リポジトリ
<a name="_codecommit_repositories"></a>

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
<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 チャート
<a name="_ecr_helm_charts"></a>

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: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 ドキュメントの「[Repository Credentials](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` に一致するすべてのリポジトリに適用されます。その後、追加のシークレットを作成せずに、この組織内の任意のリポジトリを Application で参照できます。

詳細については、Argo CD ドキュメントの「[Repository Credentials](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>

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) - デプロイ用にターゲットクラスターを登録する
+  [Application を作成する](argocd-create-application.md) - 最初の Application を作成する
+  [Argo CD に関する考慮事項](argocd-considerations.md) - IAM アクセス許可とセキュリティ設定
+  [プライベートリポジトリ](https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/) - アップストリームリポジトリ設定リファレンス