안녕하세요. MC에몽입니다.
오늘은 GCP의 Kubernetes Engine 서비스인 GKE의 기능 중 제어 영역 액세스 제어 기능에 대해서 알아보겠습니다.
GKE Cluster를 통제하는 제어 영역(Control Plane)은 보안 상 신뢰할 수 없는 IP 주소로 액세스 할 수 없게 차단할 필요가 있습니다.
* 제어 영역이란 Kubernetes의 Worker Node를 제어하는 Master Node가 존재하는 영역을 의미합니다.
Google Cloud에서는 승인된 네트워크를 사용하여 신뢰할 수 있는 지정된 IP 주소 범위로만 제어 영역에 액세스 할 수 있는 보안적 이점을 제공합니다.[1]
승인된 네트워크는 GKE Cluster 생성 시 추가하거나 기존 클러스터에 승인된 네트워크를 추가할 수 있습니다.
GKE는 Public / Private 2가지 타입의 Cluster가 존재합니다.
Public Cluster에선 각 Worker Node가 Public IP를 가지고, Private은 보안적 강화를 위해 Worker Node가 Private IP만을 가지고 있습니다.
1. Public Cluster에서 제어 영역 액세스를 위한 승인된 네트워크 추가
1) GCP Console > Kubernetes Engine > Create a Kubernetes Cluster > Cluster > Networking
> Enable control plane authorized networks
Public Cluster에서 승인된 네트워크 CIDR 범위는 최대 50개 입니다.[2]
기존에 생성된 클러스터의 승인된 네트워크를 추가 혹은 삭제하거나 사용 중지 할 수 있습니다.
※ 단, Public Cluster 경우, 승인된 네트워크를 사용 중지 시 공개 인터넷을 통해 모든 IP 주소가 제어 영역의 엔드포인트로 연결 될 수 있습니다.[3]
2) GCP Console > Kubernetes Engine > Clusters >Edit > Networking > Control plane authorized networks
2. Private Cluster에서 제어 영역 액세스를 위한 승인된 네트워크 추가
Private Clusater는 Public IP가 없는 노드를 사용하기 때문에 외부 인터넷의 클라이언트가 노드 IP 주소로 연결 할 수 없습니다.
외부 클라이언트는 직접적으로 GKE Cluster의 Node와 연결 될 수 없으며 Ingress로 노출된 서비스를 통해서 어플리케이션에 접속할 수 있습니다.
GKE Private Cluster는 제어 영역에 대해 Private IP Endpoint와 Public IP Endpoint 중 하나를 설정 할 수 있습니다.
Private Endpoint를 사용하는 경우, Cluster node가 위치한 VPC와 Google이 관리하는 제어 영역의 VPC간에 피어링이 맺어지는 형태로 내부 IP로 서로 통신할 수 있습니다. 제어 영역에 접근하기 위해서는 피어링 된 GKE Cluster VPC의 내부 IP를 가진 VM을 통해서 접근해야 합니다. 보안을 강화하기 위해 승인된 네트워크 설정을 통해 특정 "내부 IP 주소 범위"만 접근 할 수 있도록 제한할 수 있습니다.
2-1. Private Cluster에서 제어 영역 액세스를 위한 승인된 네트워크 추가(Private Endpoint)
1) GCP Console > VPC network > VPC networks > Add Subnet
Private Cluster 생성 시 Node의 Subnet으로 사용될 Subnet을 Private Google Access를 활성화 하여 생성합니다.
Private Cluster는 Public IP가 없기 때문에 VPC 내에서 트래픽 전송만이 가능하지만, Private Google Access를 활성화 하여 다른 Google API 및 서비스의 외부 IP 주소로 접속이 가능합니다.[4]
2) GCP Console > Kubernetes Engine > Clusters > Create
GKE Private Cluster를 생성합니다. 보안을 위해 제어 영역을 외부 IP로 접속 설정을 비활성화 합니다.
3) Networking > Authorized Networks
제어 영역 액세스를 위한 승인된 네트워크를 추가합니다.
제어 영역에 대한 외부 IP 접속 설정이 비활성화 되었음으로, 승인된 네트워크의 IP 범위는 VPC 내부 IP범위로 제한됩니다.
4) GKE Cluster를 생성한 VPC를 확인하여 제어 영역이 포함된 VPC가 피어링 되어 있음을 확인 할 수 있습니다.
5) Cluster > Network > Control plane authorized networks 에서 승인된 네트워크 IP 범위를 추가할 수 있습니다.
Private Cluster의 승인된 네트워크 IP 범위 개수는 최대 100개입니다.
이제 승인된 네트워크 IP 범위에 해당하는 내부 IP를 가진 Bastion VM을 통해 제어 영역으로 접속할 수 있습니다.
Public Endpoint를 사용하는 경우, GKE를 사용하는 VPC와 제어 영역 VPC간에 피어링이 맺어지는 동일한 형태이지만, 제어 영역에 접근하기 위한 End point가 피어링 된 제어 영역 VPC의 내부 IP가 아닌 외부 IP를 사용합니다. 따라서 피어링 된 GKE VPC 외에도 GCP 네트워크 외부에서 Public Endpoint로 자유롭게 접근 가능합니다. 보안을 강화하기 위해 승인된 네트워크 영역의 "외부 IP 주소 범위"만 접근 할 수 있도록 제한하는 설정을 할 수 있습니다.
2-2. Private Cluster에서 제어 영역 액세스를 위한 승인된 네트워크 추가(Public Endpoint)
1) GCP Console > VPC network > VPC networks > Add Subnet
Private Cluster 생성 시 Node의 Subnet으로 사용될 Subnet을 Private Google Access를 활성화 하여 생성합니다.
2) GCP Console > Kubernetes Engine > Clusters > Create
GKE Private Cluster를 생성합니다. 제어 영역을 외부 IP로 접속 설정을 활성화 합니다.
3) Networking > Authorized Networks
제어 영역 액세스를 위한 승인된 네트워크를 추가합니다.
제어 영역에 대한 외부 IP 접속 설정이 활성화 되었음으로, 승인된 네트워크의 IP 범위는 외부 IP범위입니다.
4) GKE Cluster를 생성한 VPC를 확인하여 제어 영역이 포함된 VPC가 피어링 되어 있음을 확인 할 수 있습니다.
5) Private Cluster가 Public IP를 Endpoint로 생성된 것을 확인 할 수 있습니다. 이제 해당 IP에 대하여 GCP Network 밖에서도 접근이 가능합니다. 승인된 네트워크 설정을 하였음으로, 접근 가능한 IP범위는 승인된 네트워크 범위로 한정됩니다.
Cluster > Network > Control plane authorized networks 에서 승인된 네트워크를 추가/삭제/비활성화 할 수 있습니다.
* Private Cluster에선 보안을 위해 승인된 네트워크를 사용하도록 강력히 권고하고 있습니다.
Private Cluster의 승인된 네트워크 IP 범위 개수는 최대 100개입니다.
오늘은 GKE의 제어 영역 액세스를 위한 승인된 네트워크 추가 기능 개념 및 사용법에 대해 알아보았습니다.
See you later!
참고자료
[1] https://cloud.google.com/kubernetes-engine/docs/how-to/authorized-networks?hl=ko#overview
[2] https://cloud.google.com/kubernetes-engine/docs/how-to/authorized-networks?hl=ko#limitations
[3] https://cloud.google.com/kubernetes-engine/docs/how-to/authorized-networks?hl=ko#disable
[4] https://cloud.google.com/vpc/docs/private-google-access?hl=ko
'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글
[GCP] QWIKLABS (0) | 2022.06.09 |
---|---|
[Google Cloud Platform] GCP 스토리지, 컨테이너 - STRUCTURED DATA(1) (0) | 2022.06.07 |
[GCP] Dataflow (0) | 2022.06.03 |
[Qwiklab] Cloud Composer Copying BigQuery Tables Across Different Locations (0) | 2022.06.03 |
[GCP]Cloud Asset Inventory (0) | 2022.06.02 |
댓글