Azure Arc에서 사용하도록 설정된 AKS의 인증서 관리 개요
적용 대상: Azure Stack HCI 22H2의 AKS, Windows Server의 AKS
Azure Arc에서 사용하도록 설정된 AKS는 인증서와 토큰 기반 인증의 조합을 사용하여 플랫폼 내의 다양한 작업을 담당하는 서비스(또는 에이전트) 간의 통신을 보호합니다. 인증서 기반 인증은 디지털 인증서를 사용하여 리소스에 대한 액세스 권한을 부여하기 전에 엔터티(에이전트, 컴퓨터, 사용자 또는 디바이스)를 식별합니다.
클라우드 에이전트
Arc에서 사용하도록 설정된 AKS를 배포하는 경우 AKS는 클러스터 내에서 다양한 기능을 수행하는 데 사용되는 에이전트를 설치합니다. 해당 에이전트는 다음과 같습니다.
- 클라우드 에이전트: 기본 플랫폼 오케스트레이션을 담당하는 서비스입니다.
- 노드 에이전트: 가상 머신 만들기, 삭제 등의 실제 작업을 수행하는 각 노드에 상주하는 서비스입니다.
- KMS(키 관리 시스템) Pod: 키 관리를 담당하는 서비스입니다.
- 기타 서비스: 클라우드 운영자, 인증서 관리자 등
AKS의 클라우드 에이전트 서비스는 클러스터의 VM(Virtual Machines), VNIC(Virtual Network 인터페이스) 및 VNET(Virtual Network)과 같은 인프라 구성 요소의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업을 오케스트레이션합니다.
클라우드 에이전트와 통신하기 위해 클라이언트는 이 통신을 보호하기 위해 인증서를 프로비전해야 합니다. 각 클라이언트에는 클라이언트와 연결된 RBAC(역할 기반 액세스 제어) 규칙을 정의하는 ID가 연결되어야 합니다. 각 ID는 다음 두 엔터티로 구성됩니다.
- 인증서를 반환하는 초기 인증에 사용되는 토큰 및
- 위의 로그인 프로세스에서 가져온 인증서이며 모든 통신에서 인증에 사용됩니다.
각 엔터티는 만료되는 특정 기간(기본값은 90일)에 유효합니다. 클라우드 에이전트에 계속 액세스하려면 각 클라이언트에서 인증서를 갱신하고 토큰을 회전해야 합니다.
인증서 유형
Arc에서 사용하도록 설정된 AKS에는 두 가지 유형의 인증서가 사용됩니다.
- 클라우드 에이전트 CA 인증서: 클라이언트 인증서에 서명/유효성을 검사하는 데 사용되는 인증서입니다. 이 인증서는 365일(1년) 동안 유효합니다.
- 클라이언트 인증서: 클라이언트가 클라우드 에이전트에 인증할 수 있도록 클라우드 에이전트 CA 인증서에서 발급한 인증서입니다. 이러한 인증서는 일반적으로 90일 동안 유효합니다.
Microsoft는 새 릴리스 후 60일 이내에 클러스터를 업데이트하는 것이 좋습니다. 내부 인증서 및 토큰이 최신 상태로 유지되도록 할 뿐만 아니라 새로운 기능, 버그 수정에 액세스하고 중요한 보안 패치를 사용하여 최신 상태를 유지하는 것이 좋습니다. 이러한 월별 업데이트 중에 업데이트 프로세스는 클러스터의 정상적인 작업 중에 자동 회전할 수 없는 토큰을 회전합니다. 인증서 및 토큰 유효성은 클러스터가 업데이트된 날짜로부터 기본 90일로 다시 설정됩니다.
Arc에서 사용하도록 설정된 AKS에서 인증서와의 보안 통신
인증서는 클러스터 내 구성 요소 간의 보안 통신을 구축하는 데 사용됩니다. AKS는 기본 제공 Kubernetes 구성 요소에 대한 제로 터치, 기본 제공 프로비전 및 인증서 관리를 제공합니다. 이 문서에서는 Arc에서 사용하도록 설정된 AKS에서 인증서를 프로비전하고 관리하는 방법을 알아봅니다.
인증서 및 CA
AKS는 다음 CA(인증 기관) 및 인증서를 생성하고 사용합니다.
클러스터 CA
- API 서버에는 API 서버에서 .로의 단방향 통신을 위한 인증서에 서명하는
kubelet
클러스터 CA가 있습니다. - 또한 각각
kubelet
은 API 서버와 통신하기 위해 클러스터 CA에서kubelet
서명한 CSR(인증서 서명 요청)을 만듭니다. - 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