共用方式為


為 Azure Kubernetes Service (AKS) 節點集區啟用聯邦資訊處理標準 (FIPS)

聯邦資訊處理標準 (FIPS) 140-2 是美國政府標準,定義資訊技術產品和系統中密碼編譯模組的最低安全性需求。 Azure Kubernetes Service (AKS) 可讓您建立已啟用 FIPS 140-2 的 Linux 和 Windows 節點集區。 在已啟用 FIPS 的節點集區上執行的部署可以使用這些密碼編譯模組來提供更高的安全性,並協助符合 FedRAMP 合規性的安全性控制。 如需 FIPS 140-2 的詳細資訊,請參閱聯邦資訊處理標準 (FIPS) 140

必要條件

  • 已安裝及設定的 Azure CLI 2.32.0 版或更新版本。 若要尋找版本,請執行 az --version。 如需安裝或升級 Azure CLI 的詳細資訊,請參閱安裝 Azure CLI

注意

AKS 監視附加元件支援使用 Ubuntu、Azure Linux 和 Windows,從代理程式版本 3.1.17 (Linux) 和 Win-3.1.17 (Windows) 開始已啟用 FIPS 的節點集區。

限制

  • 已啟用 FIPS 的節點集區有下列限制:

重要

已啟用 FIPS 的 Linux 映像與用於 Linux 節點集區的預設 Linux 映像不同。

已啟用 FIPS 的節點映像可能會有不同的版本號碼,例如核心版本,而不是未啟用 FIPS 的映像。 已啟用 FIPS 的節點集區和節點映像的更新週期可能與未啟用 FIPS 的節點集區和映像不同。

支援的作業系統版本

您可以在所有支援的作業系統類型 Linux 和 Windows 上建立已啟用 FIPS 的節點集區。 不過,並非所有作業系統版本都支援已啟用 FIPS 的節點集區。 發行新的作業系統版本之後,通常會有一段等候期間,之後才會符合 FIPS 規範。

下表包含支援的作業系統版本:

OS 類型 OS SKU FIPS 合規性
Linux Ubuntu 支援
Linux Azure Linux 支援
Windows Windows Server 2019 支援
Windows Windows Server 2022 支援

當要求已啟用 FIPS 的 Ubuntu 時,如果預設的 Ubuntu 版本不支援 FIPS,AKS 會預設為支援 FIPS 的最新 Ubuntu 版本。 例如,Ubuntu 22.04 為 Linux 節點集區的預設值。 由於 22.04 目前不支援 FIPS,針對已啟用 已啟用 FIPS 的 Linux 節點集區,AKS 會預設為 Ubuntu 20.04。

注意

先前,您可以使用 GetOSOptions API 來判斷指定的作業系統是否支援 FIPS。 從 2024-05-01 開始,GetOSOptions API 現在已過時,且不再包含在新的 AKS API 版本中。

建立已啟用 FIPS 的 Linux 節點集區

  1. 使用 az aks nodepool add 命令搭配 --enable-fips-image 參數,建立已啟用 FIPS 的 Linux 節點集區。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name fipsnp \
        --enable-fips-image
    

    注意

    您也可以在建立叢集以在預設節點集區上啟用 FIPS 時,使用 --enable-fips-image 參數搭配 az aks create 命令。 以這種方式將節點集區新增至建立的叢集時,您仍然必須在新增節點集區以建立已啟用 FIPS 的節點集區時,使用 --enable-fips-image 參數。

  2. 使用 az aks show 命令確認您的節點集區是否已啟用 FIPS,並在 agentPoolProfiles 中查詢 enableFIPS 值。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \
        -o table
    

    下列範例輸出顯示 fipsnp 節點集區已啟用 FIPS:

    Name       enableFips
    ---------  ------------
    fipsnp     True
    nodepool1  False  
    
  3. 使用 kubectl get nodes 命令列出節點。

    kubectl get nodes
    

    下列範例輸出顯示叢集中的節點清單。 開頭為 aks-fipsnp 的節點是已啟用 FIPS 節點集區的一部分。

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-fipsnp-12345678-vmss000000      Ready    agent   6m4s    v1.19.9
    aks-fipsnp-12345678-vmss000001      Ready    agent   5m21s   v1.19.9
    aks-fipsnp-12345678-vmss000002      Ready    agent   6m8s    v1.19.9
    aks-nodepool1-12345678-vmss000000   Ready    agent   34m     v1.19.9
    
  4. 在已啟用 FIPS 節點集區的其中一個節點上,使用 kubectl debug 命令以透過互動式工作階段來執行部署。

    kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  5. 從互動式工作階段輸出來確認 FIPS 密碼編譯程式庫已啟用。 您的輸出看起來應類似下列的範例輸出:

    root@aks-fipsnp-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled
    1
    

已啟用 FIPS 的節點集區也有 kubernetes.azure.com/fips_enabled=true 標籤,部署可用這些節點集區設為目標。

建立已啟用 FIPS 的 Windows 節點集區

  1. 使用 az aks nodepool add 命令搭配 --enable-fips-image 參數,建立已啟用 FIPS 的 Windows 節點集區。 與以 Linux 為基礎的節點集區不同,Windows 節點集區會共用相同的映像集。

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name fipsnp \
        --enable-fips-image \
        --os-type Windows
    
  2. 使用 az aks show 命令確認您的節點集區是否已啟用 FIPS,並在 agentPoolProfiles 中查詢 enableFIPS 值。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \
        -o table
    
  3. 在已啟用 FIPS 的節點集區中建立 Windows 節點的 RDP 連線,並檢查登錄,確認 Windows 節點集區可以存取 FIPS 密碼編譯程式庫。 從 [執行] 應用程式中,輸入 regedit

  4. 在登錄中尋找 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy

  5. 如果 Enabled 設為 1,則會啟用 FIPS。

顯示 FIPS 演算法原則的登錄編輯器圖片且已啟用的螢幕擷取畫面。

已啟用 FIPS 的節點集區也有 kubernetes.azure.com/fips_enabled=true 標籤,部署可用這些節點集區設為目標。

更新現有的節點集區以啟用或停用 FIPS (預覽)

可以更新現有的節點集區以啟用或停用 FIPS。 如果您計劃將節點集區從非 FIPS 移轉至 FIPS,請先在測試環境中驗證應用程式是否正常運作,再將其移轉至生產環境。 在測試環境中驗證您的應用程式應該會防止因 FIPS 核心封鎖某些弱式加密或加密演算法 (例如不符合 FIPS 規範的 MD4 演算法) 所導致的問題。

注意

更新現有的 Linux 節點集區以啟用或停用 FIPS 時,節點集區更新將會在 FIPS 與非 FIPS 映像之間移動。 此節點集區更新將會觸發重新映像以完成更新。 這可能會導致節點集區更新需要幾分鐘的時間才能完成。

必要條件

  • Azure CLI 版本 2.56.0 或更新版本,以及 安裝和設定 aks-preview 延伸模組。 若要尋找版本,請執行 az --version。 如果您需要安裝或升級,請參閱安裝 Azure CLI

重要

AKS 預覽功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:

安裝 aks-preview Azure CLI 延伸模組

  • 使用 [az extension add][az-extension-add] 或 [az extension update][az-extension-update] 命令註冊或更新 aks-preview 延伸模組。

    # Register the aks-preview extension
    az extension add --name aks-preview
    
    # Update the aks-preview extension
    az extension update --name aks-preview
    

註冊 MutableFipsPreview 功能旗標

  1. 使用 [az feature register][az-feature-register] 命令註冊 MutableFipsPreview 功能旗標。

    az feature register --namespace "Microsoft.ContainerService" --name "MutableFipsPreview"
    

    狀態需要幾分鐘的時間才會顯示「已註冊」

  2. 使用 [az feature show][az-feature-show] 命令驗證註冊狀態。

    az feature show --namespace "Microsoft.ContainerService" --name "MutableFipsPreview"
    
  3. 當狀態反映為已註冊 時,請使用 [az provider register][az-provider-register] 命令重新整理 Microsoft.ContainerService 資源提供者的註冊。

    az provider register --namespace Microsoft.ContainerService
    

在現有的節點集區上啟用 FIPS

可以更新現有的節點集區以啟用 FIPS。 更新現有的節點集區時,節點映像會從目前的映像變更為相同作業系統 SKU 的建議 FIPS 映像。

  1. 使用 [az aks nodepool update][az-aks-nodepool-update] 命令搭配 --enable-fips-image 參數來更新節點集區。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name np \
        --enable-fips-image
    

上述命令會立即觸發節點集區的重新映像,以部署符合 FIPS 規範的作業系統。 此重新映像會在節點集區更新期間發生。 不需要其他步驟。

  1. 使用 az aks show 命令驗證您的節點集區已啟用 FIPS,並在 agentPoolProfiles 中查詢 enableFIPS 值。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \
        -o table
    

    下列範例輸出顯示 np 節點集區已啟用 FIPS:

    Name       enableFips
    ---------  ------------
    np         True
    nodepool1  False  
    
  2. 使用 kubectl get nodes 命令列出節點。

    kubectl get nodes
    

    下列範例輸出顯示叢集中的節點清單。 開頭為 aks-np 的節點是已啟用 FIPS 節點集區的一部分。

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-np-12345678-vmss000000          Ready    agent   6m4s    v1.19.9
    aks-np-12345678-vmss000001          Ready    agent   5m21s   v1.19.9
    aks-np-12345678-vmss000002          Ready    agent   6m8s    v1.19.9
    aks-nodepool1-12345678-vmss000000   Ready    agent   34m     v1.19.9
    
  3. 在已啟用 FIPS 節點集區的其中一個節點上,使用 kubectl debug 命令以透過互動式工作階段來執行部署。

    kubectl debug node/aks-np-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  4. 從互動式工作階段輸出來確認 FIPS 密碼編譯程式庫已啟用。 您的輸出看起來應類似下列的範例輸出:

    root@aks-np-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled
    1
    

已啟用 FIPS 的節點集區也有 kubernetes.azure.com/fips_enabled=true 標籤,部署可用這些節點集區設為目標。

在現有節點集區上停用 FIPS

可以更新現有的 Linux 節點集區以停用 FIPS。 更新現有的節點集區時,節點映像會從目前的 FIPS 映像變更為相同作業系統 SKU 的建議非 FIPS 映像。 節點映像變更會在重新安裝映像之後發生。

  1. 使用 [az aks nodepool update][az-aks-nodepool-update] 命令搭配 --disable-fips-image 參數來更新 Linux 節點集區。

    az aks nodepool update \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name np \
        --disable-fips-image
    

上述命令會立即觸發節點集區的重新映像,以部署符合 FIPS 規範的作業系統。 此重新映像會在節點集區更新期間發生。 不需要其他步驟。

  1. 使用 az aks show 命令驗證您的節點集區未啟用 FIPS,並在 agentPoolProfiles 中查詢 enableFIPS 值。

    az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \
        -o table
    

    下列範例輸出顯示 np 節點集區未啟用 FIPS:

    Name       enableFips
    ---------  ------------
    np         False
    nodepool1  False  
    

下一步

若要深入了解 AKS 安全性,請參閱 Azure Kubernetes Service (AKS) 中叢集安全性和升級的最佳做法