ビュー:
プロファイル適用性: レベル1
ノードネットワーク外からのKubernetes APIへのアクセスが不要な場合は、アクセスを無効にしてください。
プライベートクラスターでは、マスターノードにはプライベートエンドポイントとパブリックエンドポイントの2つのエンドポイントがあります。プライベートエンドポイントは、マスターの内部IPアドレスであり、マスターのVPC Network内の内部ロードバランサーの背後にあります。ノードはプライベートエンドポイントを使用してマスターと通信します。パブリックエンドポイントは、マスターのVPC Network外部からKubernetes APIにアクセスできるようにします。
Kubernetes APIは機密性の高い操作を行うために認証されたトークンを必要としますが、脆弱性によりKubernetesが無制限のアクセスで公開される可能性があります。さらに、攻撃者は現在のクラスターとKubernetes APIのバージョンを特定し、それが攻撃に対して脆弱かどうかを判断できるかもしれません。必要でない限り、パブリックエンドポイントを無効にすることでそのような脅威を防ぎ、攻撃者がKubernetes APIに対して攻撃を行うためにはマスターのVPC Networkにいる必要があります。
注意
注意
初期設定では、パブリックエンドポイントは無効になっています。

影響

EKSクラスターエンドポイントをプライベートに設定します。
  1. クラスターエンドポイントを公開のままにし、どのCIDRブロックがクラスターエンドポイントと通信できるかを指定します。これらのブロックは、クラスターエンドポイントへのアクセスが許可されたパブリックIPアドレスのホワイトリストセットです。
  2. ホワイトリストに登録されたCIDRブロックのセットでパブリックアクセスを構成し、プライベートエンドポイントアクセスを有効に設定します。これにより、特定の範囲のパブリックIPからのパブリックアクセスが可能になり、制御プレーンがプロビジョニングされるときにクラスターVPCにプロビジョニングされるクロスアカウントENIを介して、kubelet (ワーカー) とKubernetes API間のすべてのネットワークトラフィックを強制します。

監査

KubernetesAPIサーバへのプライベートエンドポイントアクセスを確認する:
export CLUSTER_NAME=<your cluster name>
export REGION_CODE=<your region>
aws eks describe-cluster \
--name "${CLUSTER_NAME}" \
--region "${REGION_CODE}" \
--query \
"cluster.resourcesVpcConfig.{endpointPublicAccess:endpointPublicAccess,endpointPrivateAccess:endpointPrivateAccess}" \
--output json
次の項目が"endpointPrivateAccess": trueであることを確認してください。
次の項目が"endpointPublicAccess": trueであることを確認してください。

修復

Kubernetes APIサーバへのプライベートエンドポイントアクセスを有効にすることで、ノードとAPIサーバ間のすべての通信がVPC内に留まります。
これを念頭に置いて、AWS CLIを使用してクラスターを更新し、プライベートエンドポイントアクセスが有効になっていることを確認できます。
例えば、次のコマンドはKubernetes APIへのプライベートアクセスを有効にし、パブリックアクセスが許可されないことを保証します。
aws eks update-cluster-config \
--region $AWS_REGION \
--name $CLUSTER_NAME \
--resources-vpc-config endpointPrivateAccess=true,endpointPublicAccess=false
注意
注意
詳細については、参考セクションのEKSクラスターエンドポイントのドキュメントリンクを参照してください。