전체 인터넷에 노출된 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 제한은 인증과 권한 검사를 대신하지 않으며, 사설 엔드포인트 접근을 제어하는 설정도 아닙니다.

참조