為 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 的節點集區需要 Kubernetes 1.19 版和更新版本。
- 若要更新 FIPS 所使用的基礎套件或模組,您必須使用節點映像升級。
- FIPS 節點上的容器映像尚未評估 FIPS 合規性。
- 掛接 CIFS 共用失敗,因為 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 節點集區
使用
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
參數。使用
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
使用
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
在已啟用 FIPS 節點集區的其中一個節點上,使用
kubectl debug
命令以透過互動式工作階段來執行部署。kubectl debug node/aks-fipsnp-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
從互動式工作階段輸出來確認 FIPS 密碼編譯程式庫已啟用。 您的輸出看起來應類似下列的範例輸出:
root@aks-fipsnp-12345678-vmss000000:/# cat /proc/sys/crypto/fips_enabled 1
已啟用 FIPS 的節點集區也有 kubernetes.azure.com/fips_enabled=true 標籤,部署可用這些節點集區設為目標。
建立已啟用 FIPS 的 Windows 節點集區
使用
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
使用
az aks show
命令確認您的節點集區是否已啟用 FIPS,並在 agentPoolProfiles 中查詢 enableFIPS 值。az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query="agentPoolProfiles[].{Name:name enableFips:enableFips}" \ -o table
在已啟用 FIPS 的節點集區中建立 Windows 節點的 RDP 連線,並檢查登錄,確認 Windows 節點集區可以存取 FIPS 密碼編譯程式庫。 從 [執行] 應用程式中,輸入
regedit
。在登錄中尋找
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy
。如果
Enabled
設為 1,則會啟用 FIPS。
已啟用 FIPS 的節點集區也有 kubernetes.azure.com/fips_enabled=true 標籤,部署可用這些節點集區設為目標。
更新現有的節點集區以啟用或停用 FIPS
現有的Linux節點集區可以更新為啟用或停用FIPS。 如果您計劃將節點集區從非 FIPS 移轉至 FIPS,請先在測試環境中驗證應用程式是否正常運作,再將其移轉至生產環境。 在測試環境中驗證您的應用程式應該會防止因 FIPS 核心封鎖某些弱式加密或加密演算法 (例如不符合 FIPS 規範的 MD4 演算法) 所導致的問題。
注意
更新現有的 Linux 節點集區以啟用或停用 FIPS 時,節點集區更新將會在 FIPS 與非 FIPS 映像之間移動。 此節點集區更新將會觸發重新映像以完成更新。 這可能會導致節點集區更新需要幾分鐘的時間才能完成。
必要條件
- Azure CLI 2.64.0 版或更新版本。 若要尋找版本,請執行
az --version
。 如果您需要安裝或升級,請參閱安裝 Azure CLI。
在現有的節點集區上啟用 FIPS
現有的Linux節點集區可以更新以啟用FIPS。 更新現有的節點集區時,節點映像會從目前的映像變更為相同作業系統 SKU 的建議 FIPS 映像。
使用 [
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 規範的作業系統。 此重新映像會在節點集區更新期間發生。 不需要其他步驟。
使用
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
使用
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
在已啟用 FIPS 節點集區的其中一個節點上,使用
kubectl debug
命令以透過互動式工作階段來執行部署。kubectl debug node/aks-np-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
從互動式工作階段輸出來確認 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 映像。 節點映像變更會在重新安裝映像之後發生。
使用 [
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 規範的作業系統。 此重新映像會在節點集區更新期間發生。 不需要其他步驟。
使用
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) 中叢集安全性和升級的最佳做法。