インターネット全体を許可する EKS の公開アクセス CIDR

EKS の公開アクセスが必要な場合も、許可する CIDR 範囲を必要最小限にしてください。

説明

EKS の公開 API に 0.0.0.0/0 を許可すると、すべての IPv4 アドレスから接続を試行できます。認証と Kubernetes の認可は引き続き適用されますが、公開アクセスが必要な場合も管理用 IP 範囲を限定する必要があります。

全送信元を許可すると、不要な認証試行やスキャンを受ける範囲が広がります。

想定される影響

  • コントロールプレーンの広範な露出: インターネット上の各所からクラスターエンドポイントへのアクセスを試行できます。
  • 攻撃試行の増加: 総当たり、脆弱性探索、自動スキャンの対象となる可能性があります。
  • 運用上のリスク: 漏えいした認証情報が、接続元ネットワークの制限を受けずに悪用される可能性があります。

対処方法

  • public_access_cidrs を管理ネットワークや承認済みクライアントの実際の送信元 IP 範囲に限定してください。
  • プライベートエンドポイントを使わないノードがある場合は、ノードまたは NAT の送信元アドレスも許可する必要があります。変更前にノードと管理者の接続をテストしてください。
  • 公開アクセスが不要な場合は、プライベートエンドポイントと接続経路を用意してから endpoint_public_access = false に切り替えてください。

例

参照するロールとサブネットは別途定義してください。変更後の 203.0.113.10/32 は説明用のアドレスです。承認済みの管理用アドレスと、必要なノードの送信元アドレスに置き換えてください。

変更前

hcl
resource "aws_eks_cluster" "example" {
  name     = "example"
  role_arn = aws_iam_role.example.arn

  vpc_config {
    subnet_ids             = [aws_subnet.example1.id, aws_subnet.example2.id]
    endpoint_public_access = true
    public_access_cidrs    = ["0.0.0.0/0"]
  }
}

変更後

hcl
resource "aws_eks_cluster" "example" {
  name     = "example"
  role_arn = aws_iam_role.example.arn

  vpc_config {
    subnet_ids             = [aws_subnet.example1.id, aws_subnet.example2.id]
    endpoint_public_access = true
    public_access_cidrs    = ["203.0.113.10/32"]
  }
}

変更前は、すべての IPv4 アドレスに公開 API へのアクセスを許可します。変更後は指定したアドレスに範囲を絞ります。CIDR 制限は認証や認可の代わりにはならず、プライベートエンドポイントへのアクセスを制御する設定でもありません。

参考資料