Azure Kubernetes Service (AKS) ノード プールに対して Federal Information Process Standard (FIPS) を有効にする

Federal Information Processing Standards (FIPS) 140-2 は、情報技術の製品やシステムに含まれる暗号モジュールに関して最低限のセキュリティ要件を規定する米国政府の標準です。 Azure Kubernetes Service (AKS) を使用すると、FIPS 140-2 対応の Linux および Windows ノード プールを作成できます。 FIPS 対応ノード プール上で実行されるデプロイは、そうした暗号モジュールを使用してセキュリティを高め、FedRAMP 準拠の一環としてセキュリティ規制への準拠を促進することができます。 FIPS 140-2 の詳細については、Federal Information Processing Standards (FIPS) 140 に関するページを参照してください。

前提条件

  • Azure CLI バージョン 2.32.0 以降がインストールされ構成されていること。 バージョンを確認するには、az --version を実行します。 Azure CLI のインストールまたはアップグレードの詳細については、「Azure CLI のインストール」を参照してください。

Note

AKS Monitoring Addon では、エージェント バージョン 3.1.17 (Linux) および Win-3.1.17 (Windows) 以降の Ubuntu、Azure Linux、Windows を使用した FIPS 対応ノード プールがサポートされています。

制限事項

  • FIPS 対応ノード プールには、次の制限があります。
    • FIPS 対応ノードプールには、Kubernetes バージョン 1.19 以降が必要です。
    • FIPS に使用される基になるパッケージまたはモジュールを更新するには、ノードイメージのアップグレードを使用する必要があります。
    • FIPS ノードのコンテナー イメージは、FIPS 準拠について評価されていません。
    • FIPS によって一部の認証モジュールが無効になるため、CIFS 共有のマウントは失敗します。 この問題を回避するには、FIPS 対応ノード プールにファイル共有をマウントしたときのエラーに関するページを参照してください。

重要

FIPS 対応の Linux イメージは、Linux ベースのノード プールに使用される既定の Linux イメージとは異なります。

FIPS 対応のノード イメージは、FIPS 非対応のイメージとは異なるバージョン番号 (カーネル バージョンなど) を持つことがあります。 また、FIPS 対応ノード プールおよびノード イメージは、FIPS 非対応のノード プールおよびイメージとは更新サイクルが異なることがあります。

サポートされている OS バージョン

FIPS 対応ノード プールは、サポートされているすべての OS の種類 (Linux および Windows) で作成できます。 ただし、すべての OS バージョンで FIPS 対応ノードプールがサポートされているわけではありません。 新しい OS バージョンがリリースされた後は、通常、FIPS に準拠する前に待機期間があります。

次の表に、サポートされている OS バージョンを示します。

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 をサポートしていないため、AKS は Linux FIPS 対応ノードプールを既定で Ubuntu 20.04 にします。

Note

以前は、GetOSOptions API を使用して、特定の OS で FIPS をサポートしているかどうかを判断できました。 GetOSOptions API は非推奨になり、2024-05-01 以降の新しい AKS API バージョンには含まれません。

FIPS 対応 Linux ノード プールを作成する

  1. --enable-fips-image パラメーターを指定して az aks nodepool add コマンドを使用して、FIPS 対応の Linux ノード プールを作成します。

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

    注意

    クラスターの作成時に az aks create コマンドで --enable-fips-image パラメーターを使用して、既定のノード プールで FIPS を有効にすることもできます。 このようにして作成したクラスターにノード プールを追加する場合でも、FIPS 対応ノード プールを作成するためには、ノード プールを追加する際に、 --enable-fips-image パラメーターを使用する必要があります。

  2. az aks show コマンドと agentPoolProfilesenableFIPS 値のクエリを使用して、ノード プールが FIPS 対応であることを確認します。

    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. kubectl debug を使用して FIPS 対応ノード プールのノードの 1 つに、対話型セッションのデプロイを実行します。

    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. --enable-fips-image パラメーターを指定して az aks nodepool add コマンドを使用して、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 コマンドと agentPoolProfilesenableFIPS 値のクエリを使用して、ノード プールが FIPS 対応であることを確認します。

    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. Enabled1 に設定されている場合、FIPS は有効になっています。

レジストリ エディターの FIPS アルゴリズム ポリシーおよびそれが有効になっている様子を示すスクリーンショット。

また、FIPS 対応ノード プールは、kubernetes.azure.com/fips_enabled=true というラベルを持ち、デプロイではこれを使用して、これらのノード プールをターゲットにすることができます。

既存のノード プールを更新して FIPS を有効または無効にする

既存の Linux ノード プールを更新して FIPS を有効または無効にすることができます。 ノード プールを非 FIPS から FIPS に移行することを計画している場合は、運用環境に移行する前にまず、アプリケーションが正常に動作していることをテスト環境で検証します。 テスト環境でのアプリケーションの検証では、FIPS に準拠していない MD4 アルゴリズムなどの脆弱な暗号化アルゴリズムをブロックする FIPS カーネルによって発生する問題を回避する必要があります。

Note

既存の Linux ノード プールを更新して FIPS を有効または無効にするとき、ノード プール更新は fips イメージと非 fips イメージの間を移動します。 このノード プール更新により、更新を完了するために再イメージ化がトリガーされます。 このため、ノード プール更新の完了までに数分かかる場合があります。

前提条件

  • Azure CLI バージョン 2.64.0 以降。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

既存のノード プールで FIPS を有効にする

既存の Linux ノード プールを更新して FIPS を有効にできます。 既存のノード プールを更新すると、ノード イメージは現在のイメージから、同じ OS 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 コマンドと、agentPoolProfiles での enableFIPS 値のクエリを使って、ノード プールが FIPS 対応であることを確認します。

    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. kubectl debug を使用して FIPS 対応ノード プールのノードの 1 つに、対話型セッションのデプロイを実行します。

    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 イメージから、同じ OS 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 コマンドと、agentPoolProfiles での enableFIPS 値のクエリを使って、ノード プールが FIPS 対応でないことを確認します。

    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) でのクラスターのセキュリティとアップグレードに関するベスト プラクティス」をご覧ください。