

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

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

# Argo CD のプライベートエンドポイントアクセスを設定する
<a name="argocd-private-access"></a>

デフォルトでは、パブリックインターネット経由で Argo CD エンドポイントにアクセスできます。VPC と Argo CD エンドポイント間のトラフィックがパブリックインターネットを経由せずに AWS ネットワーク内に留まるようにプライベートエンドポイントアクセスを設定できます。

プライベートアクセスを有効にすると、AWS はドメインネームシステム (DNS) を更新して、Argo CD エンドポイントのホスト名が VPC エンドポイントに関連付けられたプライベート IP アドレスに解決されるようにします。Argo CD エンドポイントにアクセスするには、これらのプライベート IP へのネットワーク接続 (VPC、仮想プライベートネットワーク (VPN) 接続、または AWS Direct Connect 経由) がある必要があります。

## プライベート IP VPN の仕組み
<a name="_how_private_access_works"></a>

Argo CD 機能のプライベートアクセスを設定する場合:

1. VPC 内の `com.amazonaws.region-code.eks-capabilities` サービス用の VPC エンドポイントを作成します。

1. Argo CD 機能を作成または更新するときに、VPC エンドポイント ID を指定します。

1.  AWS は、Argo CD エンドポイントのホスト名が VPC エンドポイントに関連付けられたプライベート IP アドレスに解決されるように DNS レコードを設定します。

1. Argo CD エンドポイントへのすべてのトラフィックは、VPC エンドポイントを介してプライベートにフローします。

## 前提条件
<a name="_prerequisites"></a>
+ アクティブな Argo CD 機能を持つ Amazon Elastic Kubernetes Service (Amazon EKS) クラスター ([Argo CD 機能を作成する](create-argocd-capability.md) を参照)
+ サブネット、セキュリティグループ、インターフェイス VPC エンドポイントなど、Amazon VPC の概念に精通していること
+ プライベートアクセスが必要なアベイラビリティーゾーンにサブネットを持つ VPC
+  AWS コマンドラインインターフェイス (AWS CLI) バージョン `2.12.3` 以降

## ステップ 1: eks-capabilities 用の VPC エンドポイントを作成する
<a name="_step_1_create_a_vpc_endpoint_for_eks_capabilities"></a>

`com.amazonaws.region-code.eks-capabilities` サービス用のインターフェイス VPC エンドポイントを作成します。

------
#### [ Console ]

1. [Amazon VPC コンソール](https://console.aws.amazon.com/vpc/) を開きます。

1. 左のナビゲーションペインで [**エンドポイント**] を選択してください。

1. **エンドポイントの作成** を選択します。

1. **[サービスカテゴリ]** で、**[AWS のサービス]** を選択します。

1. 検索フィールドに `eks-capabilities` と入力して、`com.amazonaws.region-code.eks-capabilities` を選択します。

1. **[VPC]** では、Argo CD エンドポイントへのアクセス元になる VPC を選択します。

1. **[サブネット]** では、プライベートアクセスが必要な各アベイラビリティーゾーンのサブネットを選択します。

1. **[セキュリティグループ]** では、クライアントネットワークからのインバウンド HTTPS トラフィック (ポート 443) を許可するセキュリティグループを選択します。

1. **エンドポイントの作成** を選択します。

1. VPC エンドポイント ID (例: `vpce-0123456789abcdef0`) を書き留めます。

------
#### [ CLI ]

{{region-code}} を自分の AWS リージョンに、{{vpc-id}} を VPC ID に、{{subnet-id-1 subnet-id-2}} を異なるアベイラビリティーゾーンのサブネット ID に、および {{sg-id}} を HTTPS インバウンドトラフィックを許可するセキュリティグループに置き換えます。

```
aws ec2 create-vpc-endpoint \
  --region {{region-code}} \
  --vpc-endpoint-type Interface \
  --service-name com.amazonaws.{{region-code}}.eks-capabilities \
  --vpc-id {{vpc-id}} \
  --subnet-ids {{subnet-id-1 subnet-id-2}} \
  --security-group-ids {{sg-id}}
```

レスポンス内の `VpcEndpointId` を書き留めます。

------

**重要**  
VPC エンドポイントにアタッチされたセキュリティグループがインバウンド HTTPS (ポート 443) トラフィックを許可していることを確認します。トラフィックソースには、ユーザーまたはアプリケーションが Argo CD エンドポイントにアクセスするすべてのネットワークが含まれている必要があります。

## ステップ 2: Argo CD 機能でプライベートアクセスを設定する
<a name="_step_2_configure_private_access_on_the_argo_cd_capability"></a>

VPC エンドポイントが利用可能になったら、それを使用するように Argo CD 機能を設定します。新しい機能を作成するとき、または既存の機能を更新することで、プライベートアクセスを設定できます。

### プライベートアクセスで新しい機能を作成する
<a name="_create_a_new_capability_with_private_access"></a>

`create-capability` コマンドに `networkAccess` を含めます。{{region-code}}、{{my-cluster}}、およびその他のプレースホルダーを自分の値に置き換えます。

```
aws eks create-capability \
  --region {{region-code}} \
  --cluster-name {{my-cluster}} \
  --capability-name my-argocd \
  --type ARGOCD \
  --role-arn {{arn:aws:iam::111122223333:role/ArgoCDCapabilityRole}} \
  --configuration '{
    "argoCd": {
      "awsIdc": {
        "idcInstanceArn": "arn:aws:sso:::instance/ssoins-1234567890abcdef",
        "idcRegion": "idc-region-code"
      },
      "rbacRoleMappings": [{
        "role": "ADMIN",
        "identities": [{
          "id": "user-id",
          "type": "SSO_USER"
        }]
      }],
      "networkAccess": {
        "vpceIds": ["vpce-0123456789abcdef0"]
      }
    }
  }'
```

### 既存の機能を更新してプライベートアクセスを有効にする
<a name="_update_an_existing_capability_to_enable_private_access"></a>

{{region-code}}、{{my-cluster}}、{{my-argocd}}、および VPC エンドポイント ID を自分の値に置き換えます。

```
aws eks update-capability \
  --region {{region-code}} \
  --cluster-name {{my-cluster}} \
  --capability-name {{my-argocd}} \
  --configuration '{
    "argoCd": {
      "networkAccess": {
        "vpceIds": ["vpce-0123456789abcdef0"]
      }
    }
  }'
```

機能の更新が完了するまで待機します。

```
aws eks describe-capability \
  --region {{region-code}} \
  --cluster-name {{my-cluster}} \
  --capability-name {{my-argocd}} \
  --query 'capability.status' \
  --output text
```

更新が完了すると、ステータスが `ACTIVE` に戻ります。

## ステップ 3: DNS の解決と接続を確認する
<a name="_step_3_verify_dns_resolution_and_connectivity"></a>

プライベートアクセスが設定された状態で機能がアクティブになったら、Argo CD エンドポイントのホスト名がプライベート IP アドレスに解決されていることを確認します。

任意のネットワークから、次の `nslookup` コマンドを実行します:

```
nslookup {{your-argocd-endpoint.eks-capabilities.region-code.amazonaws.com}}
```

レスポンスには、プライベート IP アドレス (例えば、`10.x.x.x` や `172.16.x.x` などの RFC 1918 範囲のアドレス) が表示されます。

エンドポイントがプライベート IP に解決されない場合は、以下を確認します:
+ 機能ステータスが `ACTIVE` である (AWS は、この機能がアクティブになった後に DNS レコードを作成します)
+ VPC エンドポイントが `available` 状態である
+ 機能設定の VPC エンドポイント ID が、作成したエンドポイントと一致する

**注記**  
プライベートアクセスを設定すると、Argo CD エンドポイントのホスト名はプライベート IP アドレスに解決されます。接続するには、VPC、VPN 接続、または AWS Direct Connect を介して、これらのプライベート IP へのネットワーク接続がある必要があります。

## プライベートアクセスを無効にする
<a name="_disable_private_access"></a>

プライベートアクセスを無効にし、パブリックエンドポイントアクセスを復元するには、VPC エンドポイント ID を削除するように機能を更新します。

```
aws eks update-capability \
  --region {{region-code}} \
  --cluster-name {{my-cluster}} \
  --capability-name {{my-argocd}} \
  --configuration '{
    "argoCd": {
      "networkAccess": {
        "vpceIds": []
      }
    }
  }'
```

## 考慮事項
<a name="_considerations"></a>
+ プライベートアクセスを有効にすると、Argo CD エンドポイントには VPC 内またはそれに接続されているネットワーク内からのみ到達できます (VPN や AWS Direct Connect など)。
+ プライベートアクセスが機能するには、VPC エンドポイントが `available` 状態のままである必要があります。VPC エンドポイントを削除すると、新しいエンドポイントを作成して機能を更新するまで、Argo CD エンドポイントにアクセスできなくなります。
+  AWS は現在、`eks-capabilities` サービスエンドポイントの VPC エンドポイントポリシーをサポートしていません。