プロファイル適用範囲:レベル1 - クラスター/コントロールプレーン
クラスターがプライベートエンドポイントが有効でパブリックアクセスが無効になっていることを確認し、Kubernetes APIのセキュリティを強化してください。プライベートクラスターでは、マスターノードにはプライベートエンドポイントとパブリックエンドポイントの両方があります。プライベートエンドポイントは、VPCネットワークの内部ロードバランサーの背後にある内部IPアドレスで、ノードとマスターの通信を容易にします。一方、パブリックエンドポイントは、マスターのVPCネットワークの外部からKubernetes
APIにアクセスするためのものです。Kubernetes APIは機密性の高い操作には認証トークンが必要ですが、脆弱性により公開されることがあり、攻撃者がクラスターとそのAPIバージョンを特定して既知の脆弱性を悪用する可能性があります。パブリックエンドポイントを無効にすることで、そのようなリスクを制限し、攻撃者が攻撃を開始するためにはマスターのVPCネットワーク内にいる必要があります。パブリックアクセスが必要な場合は、クラスターのVPC内で安全にプロビジョニングされたクロスアカウントENIを介してkubeletとKubernetes
API間のすべての内部トラフィックを維持しながら、指定されたホワイトリストCIDRブロックのみを許可するように構成する必要があります。
影響
EKS クラスターエンドポイントをプライベートに設定します。
1. クラスターエンドポイントをパブリックのままにして、どのCIDRブロックがクラスターエンドポイントと通信できるかを指定します。これらのブロックは、クラスターエンドポイントにアクセスすることが許可されたパブリックIPアドレスのホワイトリストセットです。
2. ホワイトリストに登録されたCIDRブロックのセットでパブリックアクセスを構成し、プライベートエンドポイントアクセスを有効に設定します。これにより、特定の範囲のパブリックIPからのパブリックアクセスが可能になり、コントロールプレーンがプロビジョニングされるときにクラスターVPCにプロビジョニングされるクロスアカウントENIを介して、kubelet(ワーカー)とKubernetes
API間のすべてのネットワークトラフィックが強制されます。
監査
Kubernetes API サーバーへのプライベートエンドポイントアクセスを確認します。次の項目がenabled: falseであることを確認してください
export CLUSTER_NAME=<your cluster name> aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.resourcesVpcConfig.endpointPublicAccess"
次の項目がenabled: trueになっていることを確認してください
export CLUSTER_NAME=<your cluster name> aws eks describe-cluster --name ${CLUSTER_NAME} --query "cluster.resourcesVpcConfig.endpointPrivateAccess"
修復
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