使用 Azure Kubernetes Service (AKS) 中已授權 IP 位址範圍,安全存取 API 伺服器

Kubernetes API 伺服器是 Kubernetes 控制平面的核心,也是與叢集互動及管理叢集的主要方式。 若要改善叢集的安全性,並將攻擊的風險降到最低,建議您限制可存取 API 伺服器的 IP 位址範圍。 若要這樣做,您可以使用 API 伺服器已授權的 IP 範圍功能。

本文說明如何使用 API 伺服器已授權的 IP 位址範圍功能,來限制哪些 IP 位址和 CIDR 可以存取控制平面。

開始之前

  • 您必須安裝並設定 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 角色型存取控制 (Kubernetes RBAC) 或 Azure RBAC 來控制存取。

若要保護對其他可公開存取 AKS 控制平面/API 伺服器的存取,您可以啟用及使用已授權 IP 範圍。 這些已授權 IP 範圍僅允許定義的 IP 位址範圍與 API 伺服器通訊。 從不屬於這些已授權 IP 範圍的 IP 位址向 API 伺服器提出的要求,會遭到封鎖。 繼續使用 Kubernetes RBAC 或 Azure RBAC 以授權使用者及其要求的動作。

如需關於 API 伺服器和其他叢集元件的詳細資訊,請參閱 AKS 的 Kubernetes 核心概念

透過已啟用的 API 伺服器已授權 IP 範圍,建立 AKS 叢集

使用 az aks create 建立叢集,並指定 --api-server-authorized-ip-ranges 參數來提供授權的公用 IP 位址範圍清單。 當您指定 CIDR 範圍時,請從範圍中的第一個 IP 位址開始。 例如,137.117.106.90/29 是有效範圍,但請確定您指定範圍中的第一個 IP 位址,例如 137.117.106.88/29。

重要

根據預設,您的叢集會使用標準 SKU 負載平衡器,以供您用來設定輸出閘道。 當您在叢集建立期間啟用 API 伺服器已授權 IP 範圍時,除了您指定的範圍之外,依預設也會允許叢集的公用 IP。 如果您指定 "",或沒有 --api-server-authorized-ip-ranges 的值,將會停用 API 伺服器已授權 IP 範圍。 請注意,如果您使用 PowerShell,請使用 --api-server-authorized-ip-ranges="" (與等號) 以避免任何剖析問題。

下列範例會在名稱為 myResourceGroup 的資源群組中,建立名稱為 myAKSCluster 的單一節點叢集,並啟用 API 伺服器的已授權 IP 範圍。 允許的 IP 位址範圍是 73.140.245.0/24:

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

注意

您應該將這些範圍新增至允許清單:

  • 叢集輸出 IP 位址 (防火牆、NAT 閘道或其他位址,視您的 輸出類型) 而定。
  • 代表您將從中管理叢集之網路的任何範圍

您可以指定的 IP 範圍數目上限為 200。

這些規則最多可能需要兩分鐘來傳播。 測試連線時,請預留最多的時間。

指定標準 SKU 負載平衡器的輸出 IP

建立 AKS 叢集時,如果您指定叢集的輸出 IP 位址或首碼,也會允許這些位址或首碼。 例如:

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

在上述範例中,--load-balancer-outbound-ip-prefixes 參數中提供的所有 IP 會允許與 --api-server-authorized-ip-ranges 參數中的 IP 一起使用。

相反地,您可以指定 --load-balancer-outbound-ip-prefixes 參數,以允許輸出負載平衡器 IP 首碼。

只允許標準 SKU 負載平衡器的輸出公用 IP

當您在叢集建立期間,啟用 API 伺服器的已授權 IP 範圍時,除了您指定的範圍之外,依預設也會允許叢集之標準 SKU 負載平衡器的輸出公用 IP。 如果只要允許標準 SKU 負載平衡器的輸出公用 IP,請在指定 --api-server-authorized-ip-ranges 參數時,使用 0.0.0.0/32。

在下列範例中,只允許標準 SKU 負載平衡器的輸出公用 IP,而且您只能從叢集內的節點存取 API 伺服器。

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

更新叢集的 API 伺服器已授權 IP 範圍

若要更新現有叢集上的 API 伺服器授權 IP 範圍,請使用 az aks update 命令並使用 --api-server-authorized-ip-ranges--load-balancer-outbound-ip-prefixes--load-balancer-outbound-ips--load-balancer-outbound-ip-prefixes 參數。

下列範例會在名稱為 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 範圍

若要停用授權的 IP 範圍,請使用 az aks update 並指定空白範圍來停用 API 伺服器授權 IP 範圍。 例如:

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

重要

在 Azure Cloud Shell 中或從本機電腦使用 PowerShell 執行此命令時,必須以單引號括住--api-server-authorized-ip-rangers 引數的雙引號字串值。 否則將會傳回錯誤訊息,指出遺漏了預期的引數。

尋找現有的已授權 IP 範圍

若要尋找已授權的 IP 範圍,請使用 az aks show 並指定叢集的名稱和資源群組。 例如:

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

使用 Azure 入口網站更新、停用和尋找已授權 IP 範圍

您也可以在 Azure 入口網站中,執行上述新增、更新、尋找和停用已授權 IP 範圍的作業。 若要存取,請在叢集資源的功能表刀鋒視窗中,導覽至 [設定] 下的 [網路]。

在瀏覽器中,顯示叢集資源的網路設定 Azure 入口網站頁面。[設定指定的 IP 範圍] 和 [指定的 IP 範圍] 選項會醒目提示。

如何尋找要包含在 --api-server-authorized-ip-ranges 中的 IP?

您必須將開發機器、工具或自動化 IP 位址新增至已核准 IP 範圍的 AKS 叢集清單,才能從該處存取 API 伺服器。

另一個選項是在防火牆虛擬網路中的個別子網路內,使用必要的工具來設定 Jumpbox。 這假設您環境具有的防火牆具有個別網路,而且您已在授權範圍內新增防火牆 IP。 同樣地,如果您已強制從 AKS 子網路通道至防火牆子網路,則叢集子網路中的 Jumpbox 也沒問題。

若要將另一個 IP 位址新增至核准的範圍,請使用下列命令。

# Retrieve your IP address
CURRENT_IP=$(dig +short "myip.opendns.com" "@resolver1.opendns.com")
# Add to AKS approved list
az aks update -g $RG -n $AKSNAME --api-server-authorized-ip-ranges $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 中叢集安全性和升級的最佳做法