AKS(Azure Kubernetes Service)의 인증서 회전

AKS(Azure Kubernetes Service)는 여러 구성 요소에 대한 인증을 위해 인증서를 사용합니다. 2022년 3월 이후에 만들어진 RBAC 지원 클러스터는 인증서 자동 회전을 통해 사용하도록 설정됩니다. 보안이나 정책상의 이유로 해당 인증서를 주기적으로 회전해야 할 수도 있습니다. 예를 들어 90일마다 모든 인증서를 회전하는 정책이 있을 수 있습니다.

참고 항목

인증서 자동 회전은 RBAC 지원 AKS 클러스터에 대해 기본적으로 사용하도록 설정됩니다.

이 문서에서는 AKS 클러스터에서 인증서 회전이 작동하는 방법을 보여 줍니다.

시작하기 전에

이 문서에는 Azure CLI 버전 2.0.77 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

AKS 인증서, 인증 기관 및 서비스 계정

AKS는 다음 인증서, CA(인증 기관) 및 SA(서비스 계정)를 생성하고 사용합니다.

  • AKS API 서버는 클러스터 CA라는 CA를 만듭니다.
  • API 서버에는 클러스터 CA가 있으며, 클러스터 CA는 API 서버에서 Kubelet으로의 단방향 통신 인증서에 서명합니다.
  • 각 kubelet은 kubelet에서 API 서버로의 통신을 위해 클러스터 CA가 서명하는 CSR(인증서 서명 요청)을 만듭니다.
  • API 애그리게이터는 클러스터 CA를 사용하여 다른 API와의 통신을 위한 인증서를 발급합니다. API 애그리게이터는 해당 인증서를 발급하기 위한 자체 CA도 가질 수 있지만, 현재는 클러스터 CA를 사용하고 있습니다.
  • 각 노드는 Cluster CA가 서명하는 SA 토큰을 사용합니다.
  • kubectl 클라이언트는 AKS 클러스터와 통신하기 위한 인증서를 가지고 있습니다.

Microsoft는 클러스터 인증서를 제외하고 이 섹션에 언급된 모든 인증서를 유지 관리합니다.

참고 항목

  • 2019년 5월 이전에 만들어진 AKS 클러스터에는 2년 후에 만료되는 인증서가 있습니다.
  • 2019년 5월 이후에 만들어진 AKS 클러스터에는 30년 후에 만료되는 클러스터 CA 인증서가 있습니다.

노드 풀의 수명을 표시하는 kubectl get nodes 명령을 사용하여 클러스터가 만들어진 시기를 확인할 수 있습니다.

인증서 만료 날짜 확인

클러스터 인증서 만료 날짜 확인

  • kubectl config view 명령을 사용하여 클러스터 인증서의 만료 날짜를 확인합니다.

    kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
    

API 서버 인증서 만료 날짜 확인

  • 다음 curl 명령을 사용하여 API 서버 인증서의 만료 날짜를 확인합니다.

    curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
    

VMAS 에이전트 노드 인증서 만료 날짜 확인

  • az vm run-command invoke 명령을 사용하여 VMAS 에이전트 노드 인증서의 만료 날짜를 확인합니다.

    az vm run-command invoke -g MC_rg_myAKSCluster_region -n vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
    

가상 머신 확장 집합 에이전트 노드 인증서 만료 날짜 확인

  • az vm run-command invoke 명령을 사용하여 Virtual Machine Scale Set 에이전트 노드 인증서의 만료 날짜를 확인합니다.

    az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate" --query "value[0].message"
    

인증서 자동 회전

AKS가 CA가 아닌 인증서를 자동으로 회전하려면 클러스터에 모든 Azure 지역에서 기본적으로 사용하도록 설정된 TLS 부트스트랩이 있어야 합니다.

참고 항목

  • 기존 클러스터가 있는 경우 인증서 자동 회전을 사용하도록 설정하려면 해당 클러스터를 업그레이드해야 합니다.
  • 자동 회전을 사용하도록 설정하려면 부트스트랩을 사용하지 않도록 설정하지 마세요.
  • 클러스터가 자동 인증서 회전 중에 중지된 상태인 경우 컨트롤 플레인 인증서만 회전됩니다. 이 경우 인증서 회전 후 노드 풀을 다시 만들어 노드 풀 인증서 회전을 시작해야 합니다.

2022년 3월 이후에 만들거나 업그레이드한 AKS 클러스터의 경우 Azure Kubernetes Service 클라이언트 인증서 유효 시간의 80% 이내에 제어 평면 및 에이전트 노드 모두에서 CA가 아닌 인증서를 자동으로 회전한 후 클러스터 가동 중지 시간 없이 만료됩니다.

현재 에이전트 노드 풀이 TLS 부트스트랩을 사용하도록 설정되어 있는지 확인하는 방법

  1. 다음 경로 중 하나를 찾아 클러스터에 TLS 부트스트래핑이 사용하도록 설정되어 있는지 확인합니다.

    • Linux 노드에서: /var/lib/kubelet/bootstrap-kubeconfig 또는 /host/var/lib/kubelet/bootstrap-kubeconfig
    • Windows 노드: C:\k\bootstrap-config

    자세한 내용은 유지 관리 또는 문제 해결을 위해 Azure Kubernetes Service 클러스터 노드에 연결을 참조하세요.

    참고 항목

    Kubernetes 버전이 발전함에 따라 파일 경로가 변경될 수 있습니다.

  2. 지역이 구성되면 새 클러스터를 만들거나 기존 클러스터를 업그레이드하여 클러스터 인증서에 대한 자동 회전을 설정합니다. 이 기능을 사용 설정하려면 컨트롤 플레인과 노드 풀을 업그레이드해야 합니다.

클러스터 인증서 수동 회전

Warning

az aks rotate-certs를 사용하여 인증서를 회전하면 모든 노드, Virtual Machine Scale Sets 및 디스크가 다시 만들어지며 AKS 클러스터에 대해 최대 30분의 가동 중지 시간이 발생할 수 있습니다.

  1. az aks get-credentials 명령을 사용하여 클러스터에 연결합니다.

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    
  2. az aks rotate-certs 명령을 사용하여 클러스터의 모든 인증서, CA 및 SA를 회전합니다.

    az aks rotate-certs -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    

    Important

    az aks rotate-certs를 완료하는 데 최대 30분이 소요될 수 있습니다. 완료하기 전에 명령이 실패하면 az aks show를 사용하여 클러스터의 상태가 ‘인증서 회전’인지 확인합니다. 클러스터가 실패 상태인 경우, az aks rotate-certs를 다시 실행하여 인증서를 다시 회전합니다.

  3. kubectl get nodes와 같은 kubectl 명령을 사용하여 이전 인증서가 더 이상 유효하지 않은지 확인합니다.

    kubectl get nodes
    

    kubectl에서 사용하는 인증서를 업데이트하지 않은 경우 다음 출력 예와 유사한 오류가 표시됩니다.

    Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
    
  4. --overwrite-existing 플래그와 함께 az aks get-credentials 명령을 사용하여 kubectl에서 사용하는 인증서를 업데이트합니다.

    az aks get-credentials -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME --overwrite-existing
    
  5. kubectl get 명령을 사용하여 인증서가 업데이트되었는지 확인합니다.

    kubectl get nodes
    

    참고 항목

    AKS 위에서 실행되는 서비스가 있는 경우 해당 인증서를 업데이트해야 할 수도 있습니다.

다음 단계

이 문서에서는 클러스터의 인증서, CA 및 SA를 자동으로 회전하는 방법을 보여 주었습니다. 자세한 내용은 AKS(Azure Kubernetes Service)의 클러스터 보안 및 업그레이드 모범 사례를 참조하세요.