Amazon EKS クラスターエンドポイントのパブリックアクセス無効状態で、Argo CDと別VPCのEKSクラスターを疎通させてみる
AWS Security Hubコントロール「EKS.1」では、Amazon EKSクラスターエンドポイントでパブリックアクセスが有効な状態だとチェックに引っ掛かります。
Argo CDを利用していて、外部クラスター登録で別VPCのAmazon EKSクラスターを登録している環境では、パブリックを無効にするとどういった影響があるのか気になり調べてみました。
結論
- Argo CD用Amazon EKSクラスターは、登録対象のAmazon EKSクラスターのクラスターエンドポイントへのアクセスが必要
- Argo CD外部クラスター登録時に、Amazon EKSクラスターエンドポイントを登録する必要がある
- Amazon EKSクラスターエンドポイントがプライベートのみの状態では、VPC内から通信する必要がある
- Argo CD用Amazon EKSクラスターVPCと登録対象のAmazon EKSクラスターVPC間でVPC間通信が必要
環境の用意
以下の手順で、2つのEKSクラスターを用意しました。(Argo CD用のAmazon EKSクラスター・登録対象のAmazon EKSクラスター)
ワークロード用Amazon EKSクラスターのクラスターエンドポイントのパブリックアクセスを無効にする
ワークロード用Amazon EKSクラスター(spoke-dev)のクラスターエンドポイントのパブリックアクセスを無効にします。
Argo CDからワークロード用Amazon EKSクラスターのアプリケーション(workload-dev)のSync
を実行します。
パブリックアクセスが無効になり、Argo CD用のEKSクラスターからワークロード用のAmazon EKSクラスターのクラスターエンドポイントへアクセスができないため失敗してしまいます。
Argo CD VPCとワークロードVPCを接続して疎通可能にする
クラスターエンドポイントのアクセスがプライベートのみ有効な状況では、クラスターの VPC または接続されたネットワークから疎通することが可能です。
クラスター API サーバーへのすべてのトラフィックは、クラスターの VPC または接続されたネットワーク内から送信する必要があります。
今回の場合は、Argo CD VPCとワークロードVPCのVPC間通信が必要です。
VPC間通信の方法はTransit GatewayやVPCピアリングなど色々選択肢があります。
今回はVPCピアリングでやってみます。
AWSマネジメントコンソール
-> ピアリング接続
-> ピアリング接続を作成
を選択します。
ピアリング接続を作成します。
- リクエストVPC: hub-control-plane(Argo CD VPC)
- アクセプタVPC: spoke-dev(ワークロードVPC)
作成した接続を選択して、アクション
からリクエストを承諾
を行います。
ステータスがアクティブ
になっていることを確認します。
VPCピアリング接続へのルートを、各VPCのEKSサブネットにアタッチされているルートテーブルに追加します。
ワークロード用のAmazon EKSクラスターのセキュリティグループで、Argo CD用のAmazon EKSクラスターからの通信を許可するルールを追加します。
再度、Argo CDからワークロード用のAmaozn EKSにデプロイしたApplicationを確認します。
Failed
だったStatus
がSynked
になっていることを確認できました。
おわりに
クラスターエンドポイントをパブリック無効にすると、登録対象のEKSクラスターがあるVPC内への通信が必要になります。
登録対象のクラスターやVPCが多いと管理のVPC間通信の設定の手間も大きくなりそうです。
パブリックアクセス有効でIPアドレスを制限することも可能です。IPアドレス制限でセキュリティを担保する選択肢もありますので、ご検討ください。
以上、AWS事業本部の佐藤(@chari7311)でした。
参考