Azure Arc에서 사용하도록 설정된 AKS의 인증서 관리 개요

적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS

Azure Arc에서 사용하도록 설정된 AKS는 인증서와 토큰 기반 인증의 조합을 사용하여 플랫폼 내의 다양한 작업을 담당하는 서비스(또는 에이전트) 간의 통신을 보호합니다. 인증서 기반 인증은 디지털 인증서를 사용하여 리소스에 대한 액세스 권한을 부여하기 전에 엔터티(에이전트, 머신, 사용자 또는 디바이스)를 식별합니다.

클라우드 에이전트

Arc에서 사용하도록 설정된 AKS를 배포하는 경우 AKS는 클러스터 내에서 다양한 기능을 수행하는 데 사용되는 에이전트를 설치합니다. 해당 에이전트는 다음과 같습니다.

  • 클라우드 에이전트: 기본 플랫폼 오케스트레이션을 담당하는 서비스입니다.
  • 노드 에이전트: 가상 머신 만들기, 삭제 등의 실제 작업을 수행하는 각 노드에 상주하는 서비스입니다.
  • KMS(키 관리 시스템) Pod: 키 관리를 담당하는 서비스입니다.
  • 기타 서비스: 클라우드 운영자, 인증서 관리자 등

AKS의 클라우드 에이전트 서비스는 클러스터의 VNIC(Virtual Machines), VNIC(Virtual Network 인터페이스) 및 VNET(가상 네트워크)과 같은 인프라 구성 요소의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업을 오케스트레이션합니다.

클라우드 에이전트와 통신하기 위해 클라이언트는 이 통신을 보호하기 위해 인증서를 프로비전해야 합니다. 각 클라이언트에는 클라이언트와 연결된 RBAC(역할 기반 Access Control) 규칙을 정의하는 ID가 연결되어야 합니다. 각 ID는 다음 두 엔터티로 구성됩니다.

  • 인증서를 반환하는 초기 인증에 사용되는 토큰 및
  • 위의 로그인 프로세스에서 가져온 인증서이며 모든 통신에서 인증에 사용됩니다.

각 엔터티는 만료되는 특정 기간(기본값은 90일)에 유효합니다. 클라우드 에이전트에 계속 액세스하려면 각 클라이언트에서 인증서를 갱신하고 토큰을 회전해야 합니다.

인증서 유형

Arc에서 사용하도록 설정된 AKS에는 두 가지 유형의 인증서가 사용됩니다.

  • 클라우드 에이전트 CA 인증서: 클라이언트 인증서에 서명/유효성을 검사하는 데 사용되는 인증서입니다. 이 인증서는 365일(1년) 동안 유효합니다.
  • 클라이언트 인증서: 클라이언트가 클라우드 에이전트에 인증하기 위해 클라우드 에이전트 CA 인증서에서 발급한 인증서입니다. 이러한 인증서는 일반적으로 90일 동안 유효합니다.

새 릴리스 후 60일 이내에 클러스터를 업데이트하는 것이 좋습니다. 내부 인증서 및 토큰이 최신 상태로 유지되도록 할 뿐만 아니라 새로운 기능, 버그 수정에 액세스하고 중요한 보안 패치를 최신 상태로 유지하는 것이 좋습니다. 이러한 월별 업데이트 중에 업데이트 프로세스는 클러스터의 정상적인 작업 중에 자동 회전할 수 없는 토큰을 회전합니다. 인증서 및 토큰 유효성은 클러스터가 업데이트된 날짜로부터 기본 90일로 다시 설정됩니다.

Arc에서 사용하도록 설정된 AKS에서 인증서와의 보안 통신

인증서는 클러스터 내 구성 요소 간의 보안 통신을 구축하는 데 사용됩니다. AKS는 기본 제공 Kubernetes 구성 요소에 대한 제로 터치, 기본 제공 프로비전 및 인증서 관리를 제공합니다. 이 문서에서는 Arc에서 사용하도록 설정된 AKS에서 인증서를 프로비전하고 관리하는 방법을 알아봅니다.

인증서 및 CA

AKS는 다음 CA(인증 기관) 및 인증서를 생성하고 사용합니다.

클러스터 CA

  • API 서버에는 API 서버에서 로의 단방향 통신을 위한 인증서에 서명하는 클러스터 CA가 kubelet있습니다.
  • 또한 각각 kubelet 은 에서 API 서버로의 통신을 위해 클러스터 CA에서 서명하는 CSR(인증서 서명 요청)을 kubelet 만듭니다.
  • etcd 키 값 저장소에는 etcd에서 API 서버로의 통신을 위해 클러스터 CA에서 서명한 인증서가 있습니다.

etcd CA

etcd 키 값 저장소에는 클러스터의 etcd 복제본 간에 데이터 복제를 인증하고 권한을 부여하기 위해 인증서에 서명하는 etcd CA가 있습니다.

프런트 프록시 CA

프런트 프록시 CA는 API 서버와 확장 API 서버 간의 통신을 보호합니다.

인증서 프로비저닝

에 대한 kubelet 인증서 프로비저닝은 TLS 부트스트랩을 사용하여 수행됩니다. 다른 모든 인증서의 경우 YAML 기반 키 및 인증서 만들기를 사용합니다.

  • 인증서는 /etc/kubernetes/pki에 저장됩니다.
  • 키는 RSA 4096, EcdsaCurve: P384입니다.

참고

루트 인증서는 10년 동안 유효합니다. 다른 모든 루트가 아닌 인증서는 수명이 짧고 4일 동안 유효합니다.

인증서 갱신 및 관리

루트가 아닌 인증서는 자동으로 갱신됩니다. 다음 인증서를 제외한 Kubernetes에 대한 모든 컨트롤 플레인 인증서가 관리됩니다.

  • Kubelet 서버 인증서
  • Kubeconfig 클라이언트 인증서

보안 모범 사례로 사용자 인증에 Active Directory Single Sign-In 을 사용해야 합니다.

인증서 해지

인증서 해지는 드물어야 하며 인증서 갱신 시 수행해야 합니다.

해지하려는 인증서의 일련 번호가 있으면 Kubernetes 사용자 지정 리소스를 사용하여 해지 정보를 정의하고 유지합니다. 각 해지 개체는 하나 이상의 해지 항목으로 구성될 수 있습니다.

해지를 수행하려면 다음 중 하나를 사용합니다.

  • 일련 번호
  • 그룹화
  • DNS 이름
  • IP 주소

notBefore 특정 타임스탬프 이전에 발급된 인증서만 해지하도록 시간을 지정할 수 있습니다. notBefore 시간을 지정하지 않으면 해지와 일치하는 모든 기존 및 이후 인증서가 해지됩니다.

참고

서버 인증서 해 kubelet 지는 현재 사용할 수 없습니다.

해지를 수행할 때 일련 번호를 사용하는 경우 아래 설명된 PowerShell 명령을 사용하여 Repair-AksHciClusterCerts 클러스터를 작동 상태로 전환할 수 있습니다. 이전에 나열된 다른 필드를 사용하는 경우 시간을 지정 notBefore 해야 합니다.

apiVersion: certificates.microsoft.com/v1 
kind: RenewRevocation 
metadata: 
  name: my-renew-revocation 
  namespace: kube-system 
spec: 
  description: My list of renew revocations 
  revocations: 
  - description: Revoked certificates by serial number 
    kind: serialnumber 
    notBefore: "2020-04-17T17:22:05Z" 
    serialNumber: 77fdf4b1033b387aaace6ce1c18710c2 
  - description: Revoked certificates by group 
    group: system:nodes 
    kind: Group 
  - description: Revoked certificates by DNS 
    dns: kubernetes.default.svc. 
    kind: DNS 
  - description: Revoked certificates by DNS Suffix 
    dns: .cluster.local 
    kind: DNS 
  - description: Revoked certificates by IP 
    ip: 170.63.128.124 
    kind: IP 

다음 단계