다음을 통해 공유


Kubernetes에 대한 네트워크 액세스 보안 강화

이 문서에서는 AKS(Azure Kubernetes Service) 및 Amazon Elastic Kubernetes Service(EKS)의 네트워킹 모드를 비교합니다. AKS 클러스터의 관리되는 API 서버에 대한 연결 보안을 개선하는 방법을 설명합니다. 공용 네트워크 액세스를 제한하는 옵션도 포함되어 있습니다.

비고

이 문서는 Amazon EKS에 익숙한 전문가가 AKS(Azure Kubernetes Service)를 이해하는 데 도움이 되는 일련의 문서의 일부입니다.

Amazon EKS 네트워킹 모드

Amazon VPC(Virtual Private Cloud)를 사용하여 AWS(Amazon Web Services) 리소스를 퍼블릭 및 프라이빗 서브넷이 있는 가상 네트워크로 시작할 수 있습니다. 서브넷은 VPC 내의 IP 주소 범위입니다. 공용 서브넷은 인터넷에 연결하는 리소스를 호스트합니다. 프라이빗 서브넷은 공용 인터넷에 연결되지 않는 리소스를 호스트합니다. Amazon EKS는 공용 및 프라이빗 서브넷 모두에서 관리되는 노드 그룹을 프로비전할 수 있습니다.

엔드포인트 액세스 제어를 사용하면 공용 인터넷에서 또는 VPC를 통해 API 서버 엔드포인트에 연결할 수 있는지 여부를 구성할 수 있습니다. Amazon EKS는 클러스터 엔드포인트에 대한 액세스를 제어하는 여러 가지 방법을 제공합니다. 기본 퍼블릭 엔드포인트, 프라이빗 엔드포인트 또는 두 엔드포인트를 동시에 사용하도록 설정할 수 있습니다. 퍼블릭 엔드포인트를 사용하도록 설정하면 CIDR(Classless Inter-Domain Routing) 제한을 추가하여 퍼블릭 엔드포인트에 연결할 수 있는 클라이언트 IP 주소를 제한할 수 있습니다.

클러스터의 엔드포인트 설정은 Amazon EKS 노드가 관리되는 Kubernetes 컨트롤 플레인에 연결하는 방법을 결정합니다. Amazon EKS 콘솔 또는 API를 통해 엔드포인트 설정을 변경할 수 있습니다. 자세한 내용은 Amazon EKS 클러스터 엔드포인트 액세스 제어를 참조하세요.

퍼블릭 엔드포인트만

새 Amazon EKS 클러스터의 기본 모드는 공용 엔드포인트를 통해 컨트롤 플레인을 노출합니다. 클러스터에 대한 퍼블릭 엔드포인트만 사용하도록 설정되면 VPC 내에서 시작된 Kubernetes API 요청은 VPC를 떠나지만 Amazon의 네트워크를 떠나지 않습니다. 이러한 요청에는 작업자 노드에서 컨트롤 플레인으로의 통신이 포함됩니다. 노드는 공용 IP 주소 및 인터넷 게이트웨이로의 경로를 통해 컨트롤 플레인에 연결합니다. 또는 NAT(네트워크 주소 변환) 게이트웨이로 가는 경로를 사용하여 NAT 게이트웨이의 공용 IP 주소를 사용할 수 있습니다.

퍼블릭 및 프라이빗 엔드포인트

퍼블릭 엔드포인트와 프라이빗 엔드포인트를 모두 사용하도록 설정하면 VPC 내의 Kubernetes API 요청은 VPC에 있는 Amazon EKS에서 관리하는 탄력적 네트워크 인터페이스(ENI)를 통해 제어 평면과 통신합니다. 클러스터 API 서버는 인터넷에서 연결할 수 있습니다.

비공개 엔드포인트만

프라이빗 엔드포인트만 사용하도록 설정하면 클러스터 API 서버(예: kubectlhelm 명령)에 대한 모든 트래픽은 클러스터의 VPC 또는 연결된 네트워크 내에서 발생해야 합니다. 인터넷에서 API 서버에 대한 공용 액세스를 사용할 수 없습니다. 이 액세스 모드를 구현하려면 AWS VPN(Virtual Private Network) 또는 AWS DirectConnect 를 VPC에 사용합니다. AWS VPN 또는 DirectConnect 없이 엔드포인트에 대한 액세스를 제한하려면 공용 엔드포인트에 CIDR 제한을 추가하여 더 많은 네트워킹을 설정하지 않고 연결을 제한할 수 있습니다.

클러스터의 Kubernetes API 서버 엔드포인트에 대한 공용 액세스를 사용하지 않도록 설정하는 경우 다음 방법 중 하나로 Kubernetes API 서버 엔드포인트에 액세스할 수 있습니다.

연결 옵션에 대한 자세한 내용은 프라이빗 전용 API 서버 액세스를 참조하세요.

API 서버에 대한 AKS 네트워크 액세스

AKS에서 Kubernetes API에 대한 네트워크 액세스를 보호하려면 프라이빗 AKS 클러스터 또는 권한 있는 IP 주소 범위를 사용할 수 있습니다.

프라이빗 AKS 클러스터

프라이빗 AKS 클러스터는 API 서버와 에이전트 노드 간의 네트워크 트래픽이 가상 네트워크 내에 유지되도록 합니다. 프라이빗 AKS 클러스터에서 컨트롤 플레인 또는 API 서버에는 내부 IP 주소가 있습니다. 프라이빗 클러스터는 API 서버와 노드 풀 간의 네트워크 트래픽이 프라이빗 네트워크에만 유지되도록 합니다.

프라이빗 AKS 클러스터에서 API 서버에는 동일한 가상 네트워크에 있는 Azure 프라이빗 엔드포인트 를 통해서만 연결할 수 있는 내부 IP 주소가 있습니다. 동일한 가상 네트워크의 VM(가상 머신)은 이 프라이빗 엔드포인트를 통해 컨트롤 플레인과 비공개로 통신할 수 있습니다. 컨트롤 플레인 또는 API 서버는 Azure 관리 구독에서 호스트됩니다. AKS 클러스터 및 해당 노드 풀은 고객의 구독에 있습니다.

다음 다이어그램에서는 프라이빗 AKS 클러스터 구성을 보여 줍니다.

프라이빗 AKS 클러스터 구성을 보여 주는 다이어그램

이 아키텍처의 Visio 파일을 다운로드합니다.

프라이빗 AKS 클러스터를 프로비전하기 위해 AKS 리소스 공급자는 DNS(프라이빗 도메인 이름 시스템) 영역에 노드 리소스 그룹에 대한 프라이빗 FQDN(정규화된 도메인 이름)을 만듭니다. 필요에 따라 AKS는 Azure 공용 DNS 영역에 해당 주소 A 레코드가 있는 공용 FQDN을 만들 수도 있습니다. 에이전트 노드는 프라이빗 DNS 영역의 A 레코드를 사용하여 API 서버와 통신하기 위한 프라이빗 엔드포인트 IP 주소를 확인합니다.

AKS 리소스 공급자는 노드 리소스 그룹에서 프라이빗 DNS 영역을 만들거나 프라이빗 DNS 영역을 만들고 해당 리소스 ID를 프로비저닝 시스템에 전달할 수 있습니다. 프라이빗 클러스터를 만들려면 Azure, Bicep, Azure Resource Manager 템플릿, Azure CLI, Azure PowerShell 모듈 또는 AzureREST API함께 Terraform을 사용할 수 있습니다.

프로비전하는 동안 또는 기존 클러스터의 매개 변수와 함께 --enable-public-fqdn 명령을 사용하여 API 서버에 대해 공용 FQDN을 사용하도록 설정할 수 있습니다. 공용 FQDN을 사용하도록 설정하는 경우 서버에 액세스하는 VM은 클러스터를 호스트하는 동일한 가상 네트워크 또는 가상 네트워크 피어링 또는 사이트 간의 VPN을 통해 연결된 네트워크에 있어야 합니다. 이러한 VM의 예로는 Azure DevOps 자체 호스팅 에이전트 또는 GitHub Actions 자체 호스팅 실행기가 있습니다.

프라이빗 AKS 클러스터의 경우 API 서버의 공용 FQDN을 사용하지 않도록 설정합니다. 프라이빗 제어 평면과 통신하려면 VM이 동일한 가상 네트워크 또는 프라이빗 DNS 영역에 대한 가상 네트워크 링크가 있는 피어된 가상 네트워크에 있어야 합니다. 프라이빗 DNS 영역의 레코드는 A API 서버의 FQDN을 기본 컨트롤 플레인과 통신하는 프라이빗 엔드포인트 IP 주소로 확인합니다. 자세한 내용은 프라이빗 AKS 클러스터만들기를 참조하세요.

프라이빗 클러스터 배포 옵션

AKS 리소스 공급자는 프라이빗 AKS 클러스터 배포를 사용자 지정하기 위해 다음 매개 변수를 노출합니다.

  • 문자열은 authorizedIpRanges 허용되는 IP 주소 범위를 CIDR 형식으로 지정합니다.

  • disableRunCommand 부울은 클러스터의 run 명령을 비활성화할지 여부를 지정합니다.

  • enablePrivateCluster 불리언 값은 클러스터를 비공개로 만들지 여부를 지정합니다.

  • Boolean 값은 enablePrivateClusterPublicFQDN 프라이빗 클러스터에 대한 또 다른 공용 FQDN을 생성할지 여부를 지정합니다.

  • 문자열은 privateDnsZone 노드 리소스 그룹의 프라이빗 DNS 영역을 지정합니다. 값을 지정하지 않으면 리소스 공급자가 영역을 만듭니다. 다음 값을 지정할 수 있습니다.

    • System 는 기본값입니다.

    • None 기본값은 공용 DNS이므로 AKS는 프라이빗 DNS 영역을 만들지 않습니다.

    • <Your own private DNS zone resource ID>privatelink.<region>.azmk8s.io<subzone>.privatelink.<region>.azmk8s.io 형식으로 만든 프라이빗 DNS 영역을 사용합니다.

다음 표에서는 프라이빗 AKS 클러스터를 배포하는 DNS 구성 옵션을 보여 줍니다.

프라이빗 DNS 영역 옵션 enablePrivateClusterPublicFQDN: true enablePrivateClusterPublicFQDN: false
시스템 에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 가상 네트워크의 다른 VM은 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.

다른 VM은 API 서버의 공용 FQDN을 사용합니다.
에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 가상 네트워크의 다른 VM은 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.

공용 API 서버 FQDN을 사용할 수 없습니다.
없음 에이전트 노드를 포함한 모든 VM은 Azure 관리 공용 DNS 영역의 레코드를 A 통해 API 서버의 공용 FQDN을 사용합니다. 잘못된 구성. 프라이빗 AKS 클러스터는 API 서버의 이름 확인을 위해 적어도 공용 또는 프라이빗 DNS 영역이 필요합니다.
사용자 고유의 프라이빗 DNS 영역 리소스 ID 에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 가상 네트워크의 다른 VM은 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.

다른 VM은 API 서버의 공용 FQDN을 사용합니다.
에이전트 노드 및 AKS 클러스터 가상 네트워크 또는 프라이빗 DNS 영역에 연결된 가상 네트워크의 다른 VM은 프라이빗 DNS 영역 A 레코드를 사용하여 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.

공용 API 서버 FQDN을 사용할 수 없습니다.

프라이빗 클러스터 연결 및 관리

프라이빗 AKS 클러스터에서 API 서버 엔드포인트에는 공용 IP 주소가 없습니다. 다음 옵션 중 하나를 사용하여 프라이빗 클러스터에 대한 네트워크 연결을 설정할 수 있습니다.

Azure CLI를 사용하여 az aks 명령 호출 명령을 실행하여 VPN 또는 ExpressRoute 게이트웨이를 구성하지 않고 프라이빗 클러스터에 액세스합니다. 이 명령을 사용하여 클러스터에 직접 연결하지 않고 Azure API를 통해 프라이빗 클러스터와 같은 kubectlhelm다른 명령을 원격으로 호출합니다. command invoke을 사용하려면 Microsoft.ContainerService/managedClusters/runcommand/actionMicrosoft.ContainerService/managedclusters/commandResults/read 작업에 필요한 권한을 설정합니다.

Azure Portal에서 이 기능을 사용하여 Run command 프라이빗 클러스터에서 명령을 실행할 수 있습니다. 이 기능은 클러스터에서 command invoke 명령을 실행하는 기능을 사용합니다. 이 Run command 기능이 생성하는 Pod는 클러스터를 관리할 수 있는 kubectlhelm 도구를 제공합니다. Run command은 또한 Bash 환경을 제공하며, 여기에는 Pod 내에서 jq, xargs, grep, awk와 같은 도구가 포함됩니다.

동일한 가상 네트워크 또는 피어된 가상 네트워크에서 Azure Bastion 을 사용하여 점프 박스 관리 VM에 연결할 수 있습니다. Azure Bastion은 브라우저 및 Azure Portal을 통해 VM에 연결하는 데 사용할 수 있는 PaaS(완전 관리형 플랫폼 서비스)입니다. Azure Bastion은 Azure Portal에서 직접 TLS(전송 계층 보안)를 통해 매우 안전하고 원활한 RDP(원격 데스크톱 프로토콜) 또는 SSH VM 연결을 제공합니다. VM이 Azure Bastion을 통해 연결하는 경우 공용 IP 주소, 에이전트 또는 특수 클라이언트 소프트웨어가 필요하지 않습니다.

API Server VNet 통합

API Server VNet 통합으로 구성된 AKS 클러스터는 API 서버 엔드포인트를 위임된 서브넷에 직접 투영합니다. 서브넷은 AKS가 배포된 가상 네트워크에 있습니다. API Server VNet 통합을 사용하면 프라이빗 링크 또는 터널 없이 API 서버와 클러스터 노드 간에 네트워크 통신을 수행할 수 있습니다. API 서버는 위임된 서브넷에 있는 내부 부하 분산 장치 VIP 뒤에서 사용할 수 있습니다. 노드는 내부 부하 분산 장치 VIP를 사용하도록 구성됩니다. API Server VNet 통합을 사용하여 API 서버와 노드 풀 간의 네트워크 트래픽이 프라이빗 네트워크에만 유지되도록 합니다.

컨트롤 플레인 또는 API 서버는 AKS 관리 Azure 구독에 있습니다. 클러스터 또는 노드 풀이 Azure 구독에 있습니다. 클러스터 노드를 구성하는 서버와 VM은 위임된 서브넷에 프로젝스되는 API 서버 VIP 및 Pod IP 주소를 통해 서로 통신할 수 있습니다.

공용 클러스터 및 프라이빗 클러스터와 API Server VNet 통합을 사용할 수 있습니다. 클러스터 프로비전 후 공용 액세스를 추가하거나 제거할 수 있습니다. 가상 네트워크 통합이 없는 클러스터와 달리 에이전트 노드는 항상 DNS를 사용하지 않고 API 서버 내부 부하 분산 장치 IP의 개인 IP 주소와 직접 통신합니다. 노드에서 API 서버 트래픽으로 가는 트래픽은 프라이빗 네트워킹에 있습니다. 또한 API 서버-노드 연결에는 터널이 필요하지 않습니다. 공용 네트워크 액세스를 사용하는 경우 클러스터 외부 클라이언트는 일반적으로 API 서버와 통신할 수 있습니다. 공용 네트워크 액세스를 사용하지 않도록 설정한 경우 표준 프라이빗 클러스터와 동일한 프라이빗 DNS 설정 방법론을 따릅니다. 자세한 내용은 API Server VNet 통합을 사용하여 AKS 클러스터 만들기를 참조하세요.

권한 있는 IP 주소 범위

권한 있는 IP 주소 범위를 사용하여 클러스터 보안을 개선하고 API 서버에 대한 공격을 최소화할 수도 있습니다. 권한 있는 IP 주소 범위는 공용 AKS 클러스터의 제어 평면에 대한 액세스를 알려진 IP 주소 및 CIDR 목록으로 제한합니다. 이 옵션을 사용하는 경우 API 서버는 여전히 공개적으로 노출되지만 액세스는 제한됩니다.

다음 az aks update Azure CLI 명령은 IP 주소 범위에 권한을 부여합니다.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --api-server-authorized-ip-ranges  73.140.245.0/24

AKS 연결 고려 사항

AKS 연결에 대한 다음 주요 사항을 고려합니다.

  • AKS 프라이빗 클러스터는 권한 있는 IP 주소 범위에 비해 향상된 보안 및 격리를 제공합니다. 그러나 기존 공용 AKS 클러스터를 프라이빗 클러스터로 변환할 수는 없습니다. 대신 기존 AKS 클러스터에 대해 권한 있는 IP 주소 범위를 사용하도록 설정할 수 있습니다.

  • 권한 있는 IP 주소 범위를 프라이빗 API 서버 엔드포인트에 적용할 수 없습니다. 공용 API 서버에만 적용됩니다.

  • 프라이빗 클러스터는 Azure DevOps 호스팅 에이전트를 지원하지 않습니다. 대신 자체 호스팅 에이전트를 사용해야 합니다.

  • Azure Container Registry가 프라이빗 AKS 클러스터에서 작동하려면 클러스터 가상 네트워크의 컨테이너 레지스트리에 대한 프라이빗 링크를 설정해야 합니다. 또는 Container Registry 가상 네트워크와 프라이빗 클러스터의 가상 네트워크 간에 피어링을 설정할 수 있습니다.

  • Azure Private Link의 제한 사항은 프라이빗 클러스터에 적용됩니다.

  • 프라이빗 클러스터의 고객 서브넷에 있는 프라이빗 엔드포인트가 삭제되거나 수정되면 클러스터의 작동이 중지됩니다.

기여자

Microsoft는 이 문서를 유지 관리합니다. 다음 기여자는 이 문서를 작성했습니다.

주요 작성자:

기타 기여자:

LinkedIn 비공개 프로필을 보려면, LinkedIn에 로그인하세요.

다음 단계