다음을 통해 공유


AKS(Azure Kubernetes Service) 노드 풀에 대해 FIPS(Federal Information Process Standard) 사용

FIPS(Federal Information Processing Standard) 140-2는 정보 기술 제품 및 시스템에서 암호화 모듈에 대한 최소 보안 요구 사항을 정의하는 미국 정부 표준입니다. AKS(Azure Kubernetes Service)를 사용하면 FIPS 140-2가 사용하도록 설정된 Linux 및 Windows 노드 풀을 만들 수 있습니다. FIPS 사용 노드 풀에서 실행되는 배포는 이러한 암호화 모듈을 사용하여 향상된 보안을 제공하고 FedRAMP 준수의 일환으로 보안 제어를 지원할 수 있습니다. FIPS 140-2에 대한 자세한 내용은 FIPS(Federal Information Processing Standard) 140을 참조하세요.

필수 조건

  • Azure CLI 버전 2.32.0 이상 설치 및 구성 버전을 확인하려면 az --version을 실행합니다. Azure CLI 설치 또는 업그레이드에 대한 자세한 내용은 Azure CLI 설치를 참조하세요.

참고 항목

AKS 모니터링 추가 기능은 에이전트 버전 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 지원 노드 풀에 파일 공유를 탑재할 때 오류 발생을 참조하세요.

Important

FIPS 사용 Linux 이미지는 Linux 기반 노드 풀에 사용되는 기본 Linux 이미지와 다른 이미지입니다.

FIPS 사용 노드 이미지는 FIPS를 사용하지 않는 이미지와 같은 다른 버전 번호(예: 커널 버전)를 포함할 수 있습니다. FIPS 사용 노드 풀 및 노드 이미지의 업데이트 주기는 FIPS를 사용하지 않는 노드 풀 및 이미지와 다를 수 있습니다.

지원되는 OS 버전

지원되는 모든 OS 형식, Linux 및 Windows에서 FIPS 지원 노드 풀을 만들 수 있습니다. 그러나 모든 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로 설정됩니다.

참고 항목

이전에는 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
    

    참고 항목

    기본 노드 풀에서 FIPS를 사용하도록 설정하기 위해 클러스터를 만들 때 az aks create 명령과 함께 --enable-fips-image 매개 변수를 사용할 수도 있습니다. 이러한 방식으로 생성된 클러스터에 노드 풀을 추가할 때 FIPS 지원 노드 풀을 생성하기 위해 노드 풀을 추가할 때 --enable-fips-image 매개 변수를 사용해야 합니다.

  2. agentPoolProfilesenableFIPS 값에 대한 az aks show 명령 및 쿼리를 사용하여 노드 풀이 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 사용 노드 풀의 해당 노드 중 하나에서 대화형 세션으로 배포를 실행합니다.

    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. agentPoolProfilesenableFIPS 값에 대한 az aks show 명령 및 쿼리를 사용하여 노드 풀이 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 커널로 인한 문제를 방지할 수 있습니다.

참고 항목

FIPS를 사용하거나 사용하지 않도록 기존 Linux 노드 풀을 업데이트하는 경우 노드 풀 업데이트는 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 명령을 사용하여 노드 풀이 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. kubectl debug 명령을 사용하여 FIPS 사용 노드 풀의 해당 노드 중 하나에서 대화형 세션으로 배포를 실행합니다.

    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 명령을 사용하여 노드 풀이 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 보안에 대한 자세한 내용은 AKS(Azure Kubernetes Service)의 클러스터 보안 및 업그레이드 모범 사례를 참조하세요.