[AWS]EKS Securitygroup(보안그룹) 파헤치기
IT/AWS

[AWS]EKS Securitygroup(보안그룹) 파헤치기

반응형

Intro

  • AWS EKS는 쿠버네티스 Master와 Worker의 클러스터 구성을 완전관리형으로 제공해주는 서비스 입니다.
  • 그러다보니 Master Plane은 AWS의 Black Box영역으로 쉽게 알 수가 없으며
  • Black Box영역의 Master Plane과 Worker Node간의 네트워크 통신은 어떤 어떻게 이루어지는지도 쉽게 알 수가 없습니다.
  • 이렇게 완전관리형 서비스를 사용할때 네트워크통신 레벨을 관리해야하는 서버관리자 입장에서는 Black Box영역을 분석을 할 수 밖에 없게 됩니다.
  • 오늘은 서버관리자 입장에서 EKS Black Box영역 특히 Master와 Worker가 어떻게 통신하는지
  • 그리고 방화벽관리는 어떻게 해야하는지에 대해 파헤쳐드리도록 하겠습니다.시간이 부족하신분은 하단에 결론부분만 보시기 바랍니다.

사전지식

AWS EKS Cluster 구조도

EKS 보안그룹 3가지

1. Cluster security group

2. Control Plane security group

3. Node security group

1. Cluster security group

  • 저는 처음에 Control Plane security group, Node security group 만 있으면 되지 않는가 생각했습니다.
  • 이 Cluster security group은 어떤 이유로 필요한건가 다양한 테스트끝에 알아낸 결론은
  • Control plane과 Node 간에 통신을 무조건적으로 가능하게 하기위해 만들어놓은 AWS의 "안전장치"이다 라는 것입니다.
  • 이 말을 이해하기 위해 EKS를 콘솔에서 직접 생성 해보면 아래와 같은 구조로 보안그룹이 생성됩니다.
  • 그림을 보시면 감이 오시나요?
  • 이것의 이미는 "나(cluster security group)자신을 갖고 있으면 우린 서로 통신할 수 있어" 라는 것입니다.
  • 그림과 같은 구조를 AWS에서 자동으로 가져감으로 인해 control plane과 worker node와의 무조건적인 통신이 가능하도록 한 것입니다.
  • AWS 공식 문서에서도 보면 이를 권장하고 있습니다. 왜냐하면 이런 구조로 가야 네트워크 이슈를 사전에 막을 수 있기 때문입니다.
  • 하지만 서버관리자 입장에서 이렇게 네트워크 허용을 너무 많이 해놓으면 향후 그럼 네트워크 제한을 어떻게 해야하지?가 큰 이슈가 되어버립니다.
  • 글 마지막에 최소한으로 IN/OUT을 설정하도록 하는 방법을 알려드리겠습니다.

[참고]AWS 콘솔에서 Cluster security group 확인

  • EKS 에서 확인
  • Cluster security group In/Out rule

2. Control Plane security group

  • AWS공식 문서를 보고 Control Plane security group이 있으니 잘 설정해서 써야겠네 하고 AWS 콘솔에서 찾아봅니다.
  • 그런데 EKS를 생성해보면 어디를 찾아봐도 Control Plane security group 이라는걸 확인할 수가 없습니다.
  • 도대체 뭐가 Control Plane security group 이라는 거지?라며 EKSCTL로 EKS를 생성해보았습니다.
  • eksctl은 그림에있는 Additional security group이 Control Plane security group이라는 이름으로 생성이 됩니다.
  • 즉 Additional security group = Control Plane security group 이라는 것입니다. (그 증거를 아래 참고에서 찾을 수가 있음)

[참고]AWS 콘솔에서 Additional security group(Control Plane security group) 확인

  • eksctl로 EKS를 생성하였을 경우 Additional security group 정책이 아래와 같이 설정되어있으며
  • 이는 AWS공식 문서에서 설명하고 있는 Control Plane security group과 매우 유사합니다.

3. Node security group

  • 이 보안그룹은 명확하게 worker node가되는 EC2에 할당되는 보안그룹입니다.
  • AWS콘솔을 통해서 Woker Node를 생성하게되면 Node에는 Cluster security group이 자동으로 할당되며, 아래 그림과 같이 RemoteAceess security group이 자동으로 생성되어 할당됩니다.
  • 여기서 RemoteAceess security group이 WorkerNode security group이라고 보시면 됩니다.

보안 그룹 관리 스타일이 AWS콘솔, eksctl, terraform 각각 다르다

  • 각각을 사용하여 EKS cluster와 NodeGroup을 생성해보면 보안 그룹 설정이 모두 다른걸 볼 수 있습니다.

AWS콘솔 스타일 Security Group 구조

eksctl 스타일 Security Group 구조

terraform 스타일 Security Group 구조

세가지 모두 공통적으로 고려해야할 EKS cluster 설정이 있다

  • EKS Cluster Endpoint Access 모드
    • public
    • private and public
    • private

EKS Cluster Endpoint Access 모드

  • API server endpoint의 종류는 3가지로 only public, public and private, only private 이 있습니다.
  • AWS콘솔에서보면 EKS클러스터를 생성할때 "API server endpoint access"를 선택하도록 되어있습니다.
  • 아래에서 이 3가지를 설명하기 위해 더 자세히 EKS cluster 구조도를 살펴보겠습니다.

EKS Cluster API endpoint 구조도

  • 그림을 보고 API server endpoint의 종류를 선택하는데 어느정도 감이 오시나요?
  • 보안상 Private subnet 에서 외부 인터넷으로 트래픽이 나가면 안되는 경우 private , private and public으로 설정하여 빨간색 화살표로 통신하도록 방화벽을 제한해야합니다.
  • 단, 이경우 VPC endpoint 를 생성하여 방화벽에 적용해야합니다. (아래 Worker Node Security Group(private) 그림을 참고 바랍니다.)

API server endpoint - public

  • API endpoint를 조회해보면 IP가 public으로 조회가 됩니다.
  • 위 구조도에서 초록색 화살표에 해당됩니다.

API server endpoint - Private

  • API endpoint를 조회해보면 IP가 Cluster VPC CIDR대역 2개로 조회가 됩니다.
  • 이는 EKS cluster를 생성할때 자동으로 생성되는 ENI IP와 동일합니다.
  • 즉, 위 구조도에서 빨간색 화살표에 해당됩니다.

API server endpoint - Public and Private

  • API endpoint를 local PC에서 조회가 되며, VPC내에 있는 bastion host에서도 조회가 가능합니다.
  • 위 구조도에서는 빨간색, 초록색 화살표 두개를 모두 사용하는 것입니다.

결론

EKS Cluster의 Security Group이 3가지가 있다

  1. EKS Cluster Security Group
  2. EKS Control Plane Security Group
  3. WorkerNode Security Group

EKS Cluster 의 보안그룹(Security Group)을 관리하는 스타일에 대표적으로 3가지가 있다

  1. AWS 콘솔 스타일
  2. eksctl 스타일
  3. terraform 스타일

AWS 콘솔 스타일로 EKS Cluster의 Security Group IN/OUT정책 최소로 설정하는 방법

  • cluster security group

  • control plane security group

  • Worker Node Security Group(private) * 참고로 노드그룹간 CoreDNS통신은 ehpemeral port(1024-65535)으로 통신합니다.

  • Worker Node Security Group(public) * 참고로 노드그룹간 CoreDNS통신은 ehpemeral port(1024-65535)으로 통신합니다.

cluster security group 은 필요 없어도 그만이다

  • 예상대로 cluster security group 에 IN/OUT 정책을 모두 제외해도 아래 그림과 같이 control plane security group과 Worker Node Security Group만으로도 통신이 가능합니다.
  • 따라서 개인적으로 EKS 보안그룹을 관리하는 스타일은 AWS 콘솔로 설정하고, cluster security group은 eksctl의 cluster shared security group용도로 사용하는것이 가장 깔끔할 것 같습니다.

반응형