AKS(Azure Kubernetes Service)에서 권한 있는 IP 주소 범위를 사용하는 안전한 API 서버 액세스

이 문서에서는 API 서버 권한이 있는 IP 주소 범위를 사용하여 컨트롤 플레인에 액세스할 수 있는 IP 주소 및 CIDR을 제한하는 방법을 보여 줍니다.

Kubernetes API 서버는 Kubernetes 컨트롤 플레인의 핵심이며 클러스터와 상호 작용하고 클러스터를 관리하는 중심적인 방법입니다. 클러스터의 보안을 강화하고 공격 위험을 최소화하려면 API 서버에 액세스할 수 있는 IP 주소 범위를 제한하는 것이 좋습니다. 이를 위해 API 서버 승인 IP 범위 기능을 사용할 수 있습니다.

시작하기 전에

  • Azure CLI 버전 2.0.76 이상이 설치되고 구성되어 있어야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • AKS 클러스터를 Azure DevOps와 통합할 때 포함할 IP 주소를 알아보려면 Azure DevOps 허용된 IP 주소 및 도메인 URL 문서를 참조하세요.

제한 사항

API 서버 권한이 있는 IP 범위 기능에는 다음과 같은 제한 사항이 있습니다.

  • API 서버 승인 IP 범위 기능은 2019년 10월에 미리 보기에서 제외되었습니다. 기능이 미리 보기에서 제외된 후 만들어진 클러스터의 경우 이 기능은 표준 SKU 부하 분산 장치에서만 지원됩니다. API 서버 승인 IP 범위 기능이 사용 설정된 기본 SKU 부하 분산 장치의 기존 클러스터는 그대로 계속 작동합니다. 그러나 이러한 클러스터는 표준 SKU 부하 분산 장치로 마이그레이션할 수 없습니다. 기존 클러스터는 Kubernetes 버전과 컨트롤 플레인이 업그레이드되면 계속 작동합니다.
  • API 서버 승인 IP 범위 기능은 프라이빗 클러스터에서 지원되지 않습니다.
  • 노드 공용 IP를 사용하는 클러스터에서 이 기능을 사용하는 경우 노드 공용 IP를 사용하는 노드 풀은 공용 IP 접두사를 사용해야 합니다. 공용 IP 접두사는 승인된 범위로 추가해야 합니다.

API 서버 권한이 있는 IP 범위의 개요

Kubernetes API 서버는 기본 Kubernetes API를 노출하고 kubectl 및 Kubernetes 대시보드와 같은 관리 도구에 대한 상호 작용을 제공합니다. AKS는 전용 API 서버가 있는 단일 테넌트 클러스터 컨트롤 플레인을 제공합니다. API 서버에는 기본적으로 공용 IP 주소가 할당됩니다. Kubernetes RBAC(역할 기반 액세스 제어) 또는 Azure RBAC를 사용하여 액세스를 제어할 수 있습니다.

그 외에 공개적으로 액세스할 수 있는 AKS 컨트롤 플레인/API 서버에 대한 액세스를 보호하려면 권한 있는 IP 범위를 사용하도록 설정하고 사용하면 됩니다. 권한 있는 IP 범위는 정의된 IP 주소 범위만 API 서버와 통신하도록 허용합니다. 권한 있는 IP 범위에 속하지 않는 IP 주소에서 API 서버에 보낸 요청은 차단됩니다.

API 서버 권한이 있는 IP 범위를 사용하도록 설정된 AKS 클러스터 만들기

Important

기본적으로 클러스터는 아웃바운드 게이트웨이를 구성하는 데 사용할 수 있는 표준 SKU 부하 분산 장치를 사용합니다. 클러스터를 만드는 동안 API 서버 권한 있는 IP 범위를 사용하도록 설정하면 내가 지정하는 범위 외에도 사용자의 클러스터에 공용 IP가 기본적으로 허용됩니다. --api-server-authorized-ip-ranges“”를 지정하거나 아무 값도 지정하지 않으면 API 서버 권한 있는 IP 범위가 사용되지 않습니다. PowerShell을 사용 중인 경우 구문 분석 문제를 방지하기 위해 --api-server-authorized-ip-ranges=""(등호 포함)를 사용합니다.

참고 항목

해당 범위를 허용 목록에 추가해야 합니다.

  • 클러스터 송신 IP 주소(아웃바운드 유형에 따라 방화벽, NAT 게이트웨이 또는 기타 주소)입니다.
  • 클러스터를 관리할 네트워크를 나타내는 모든 범위

지정할 수 있는 IP 범위의 최대 개수는 200개입니다.

규칙이 적용되는 데 최대 2분이 소요될 수 있습니다. 연결을 테스트할 때 2분까지는 기다리시기 바랍니다.

API 서버 권한이 부여된 IP 범위가 사용하도록 설정된 클러스터를 만들 때 --api-server-authorized-ip-ranges 매개 변수를 사용하여 권한 있는 공용 IP 주소 범위 목록을 제공합니다. CIDR 범위를 지정할 때 범위의 첫 번째 IP 주소부터 시작합니다. 예를 들어 137.117.106.90/29는 유효한 범위이지만 137.117.106.88/29와 같이 범위의 첫 번째 IP 주소를 지정해야 합니다.

  • --api-server-authorized-ip-ranges 매개 변수와 함께 az aks create 명령을 사용하여 API 서버 권한 있는 IP 범위를 사용하도록 설정된 AKS 클러스터를 만듭니다. 다음 예제에서는 myResourceGroup이라는 리소스 그룹에 API 서버 권한 있는 IP 범위를 사용하도록 설정된 myAKSCluster라는 클러스터를 만듭니다. 허용되는 IP 주소 범위는 73.140.245.0/24입니다.

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --generate-ssh-keys
    

표준 SKU 부하 분산 장치에 대한 아웃바운드 IP를 지정합니다.

API 서버 권한이 부여된 IP 범위를 사용하도록 설정하여 클러스터를 만들 때 --load-balancer-outbound-ips 또는 --load-balancer-outbound-ip-prefixes 매개 변수를 사용하여 클러스터에 대한 아웃바운드 IP 주소 또는 접두사를 지정할 수도 있습니다. 매개 변수에 제공된 모든 IP는 --api-server-authorized-ip-ranges 매개 변수의 IP와 함께 허용됩니다.

  • API 서버 권한이 부여된 IP 범위를 사용하도록 설정된 AKS 클러스터를 만들고 --load-balancer-outbound-ips 매개 변수를 사용하여 표준 SKU 부하 분산 장치에 대한 아웃바운드 IP 주소를 지정합니다. 다음 예제에서는 myResourceGroup이라는 리소스 그룹에 API 서버 권한 있는 IP 범위를 사용하도록 설정하고 아웃바운드 IP 주소 <public-ip-id-1><public-ip-id-2>를 사용하여 myAKSCluster라는 클러스터를 만듭니다.

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 73.140.245.0/24 --load-balancer-outbound-ips <public-ip-id-1>,<public-ip-id-2> --generate-ssh-keys
    

표준 SKU 부하 분산 장치의 아웃바운드 공용 IP만 허용

클러스터를 만드는 동안 API 서버 권한이 있는 IP 범위를 사용하도록 설정하면 사용자가 지정하는 범위 외에도 클러스터에 표준 SKU 부하 분산 장치의 아웃바운드 공용 IP가 기본적으로 허용됩니다. 표준 SKU 부하 분산 장치의 아웃바운드 공용 IP만 허용하려면 --api-server-authorized-ip-ranges 매개 변수를 지정할 때 0.0.0.0/32를 사용합니다.

  • API 서버 권한이 부여된 IP 범위를 사용하도록 설정된 AKS 클러스터를 만들고 --api-server-authorized-ip-ranges 매개 변수를 사용하여 표준 SKU 부하 분산 장치의 아웃바운드 공용 IP 주소만 허용합니다. 다음 예제에서는 myResourceGroup이라는 리소스 그룹에 API 서버 권한 있는 IP 범위를 사용하도록 설정하고 표준 SKU 부하 분산 장치의 공용 IP 주소만 허용하는 myAKSCluster라는 클러스터를 만듭니다.

    az aks create --resource-group myResourceGroup --name myAKSCluster --vm-set-type VirtualMachineScaleSets --load-balancer-sku standard --api-server-authorized-ip-ranges 0.0.0.0/32 --generate-ssh-keys
    

기존 클러스터의 API 서버 권한 있는 IP 범위 업데이트

  • --api-server-authorized-ip-ranges 매개 변수와 함께 az aks update 명령을 사용하여 기존 클러스터의 API 서버 권한 있는 IP 범위를 업데이트합니다. 다음 예제에서는 myResourceGroup이라는 리소스 그룹의 myAKSCluster라는 클러스터에서 API 서버 권한이 있는 IP 범위를 업데이트합니다. 권한을 부여할 IP 주소 범위는 73.140.245.0/24입니다.

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

    또한 --api-server-authorized-ip-ranges 매개 변수를 지정할 때 0.0.0.0/32를 사용하여 표준 SKU 부하 분산 장치의 공용 IP만 허용할 수 있습니다.

권한 있는 IP 범위 사용 해제

  • az aks update 명령을 사용하여 권한 있는 IP 범위를 사용하지 않도록 설정하고 --api-server-authorized-ip-ranges 매개 변수에 대해 빈 범위 ""를 지정합니다.

    az aks update --resource-group myResourceGroup --name myAKSCluster --api-server-authorized-ip-ranges ""
    

기존의 권한 있는 IP 범위 찾기

  • --query 매개 변수를 apiServerAccessProfile.authorizedIpRanges로 설정하고 az aks show 명령을 사용하여 기존의 권한 있는 IP 범위를 찾습니다.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query apiServerAccessProfile.authorizedIpRanges
    

--api-server-authorized-ip-ranges에 포함할 IP를 찾는 방법

개발 머신, 도구 또는 자동화 IP 주소에서 API 서버에 액세스하기 위해서는 이들을 승인된 IP 범위의 AKS 클러스터 목록에 추가해야 합니다.

또 다른 옵션은 Firewall의 가상 네트워크에서 별도의 서브넷 내에 필요한 도구를 사용하여 jumpbox를 구성하는 것입니다. 이렇게 하면 사용자의 환경에 네트워크별로 방화벽이 있고 사용자가 방화벽 IP를 권한 있는 범위에 추가한 것으로 가정됩니다. 마찬가지로 AKS 서브넷에서 방화벽 서브넷으로 강제 터널링한 경우 클러스터 서브넷에 jumpbox를 두는 것도 괜찮습니다.

  1. 다음 명령을 사용하여 IP 주소를 검색합니다.

    # Retrieve your IP address
    CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
    
  2. Azure CLI 또는 Azure PowerShell을 사용하여 승인된 목록에 IP 주소를 추가합니다.

    # Add to AKS approved list using Azure CLI
    az aks update --resource-group $RG --name $AKSNAME --api-server-authorized-ip-ranges $CURRENT_IP/24,73.140.245.0/24
    
    # Add to AKS approved list using Azure PowerShell
    Set-AzAksCluster -ResourceGroupName $RG -Name $AKSNAME -ApiServerAccessAuthorizedIpRange '$CURRENT_IP/24,73.140.245.0/24'
    

참고 항목

위 예제에서는 승인된 범위에 다른 IP 주소를 추가합니다. 클러스터의 API 서버 권한 있는 IP 범위 업데이트의 IP 주소는 계속 포함됩니다. 기존 IP 주소를 포함하지 않으면 이 명령은 이 주소를 권한 있는 범위에 추가하는 대신 새 IP 주소로 바꿉니다. 승인된 IP 범위를 사용하지 않도록 설정하려면 az aks update를 사용하고 빈 범위 ""를 지정합니다.

또 다른 옵션은 Windows 시스템에서 다음 명령을 사용하여 공용 IPv4 주소를 가져오는 것입니다. 또는 IP 주소 찾기의 단계를 따를 수 있습니다.

Invoke-RestMethod http://ipinfo.io/json | Select -exp ip

인터넷 브라우저에서 내 IP 주소 찾기를 검색하여 이 주소를 찾을 수도 있습니다.

다음 단계

이 문서에서는 API 서버 권한이 있는 IP 범위를 사용하도록 설정하는 방법을 살펴봤습니다. 이 방법은 AKS 클러스터를 안전하게 실행할 수 있는 방법 중 하나입니다. 자세한 내용은 AKS에서 애플리케이션 및 클러스터에 대한 보안 개념AKS의 클러스터 보안 및 업그레이드를 위한 모범 사례를 참조하세요.