다음을 통해 공유


Azure Kubernetes Service 클러스터에 키 관리 서비스 etcd 암호화 추가

이 문서에서는 Azure Key Vault 및 KMS(키 관리 서비스) 플러그 인을 사용하여 etcd 키-값 저장소에 있는 AKS(Azure Kubernetes Service) 비밀에 미사용 상태의 암호화를 활성화하는 방법을 보여 줍니다. KMS 플러그 인을 사용하여 다음을 수행할 수 있습니다.

  • etcd 암호화에서 키 자격 증명 모음의 키 사용
  • 사용자 고유의 키를 가져옵니다.
  • etcd에 저장된 비밀에 미사용 상태의 암호화 제공
  • 키 자격 증명 모음에서 키 회전

KMS 사용에 대한 자세한 내용은 데이터 암호화에 KMS 공급자 사용을 참조하세요.

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
  • Azure CLI 버전 2.39.0 이상 az --version를 실행하여 버전을 찾습니다. 설치 또는 업그레이드가 필요한 경우, Azure CLI 설치를 참조하세요.

Warning

2024년 9월 15일부터 Konnectivity는 이전에 이 구성을 사용하지 않은 새 구독 또는 구독에 대한 프라이빗 키 자격 증명 모음에 대해 더 이상 지원되지 않습니다. 현재 이 구성을 사용 중이거나 지난 60일 동안 사용한 구독의 경우 AKS 버전 1.30이 커뮤니티 지원을 위한 수명이 끝날 때까지 지원이 계속됩니다.

KMS는 공개 키 자격 증명 모음에 대한 Konnectivity 또는 API Server VNet 통합(미리 보기) 을 지원합니다.

KMS는 프라이빗 및 퍼블릭 키 자격 증명 모음 모두에 대한 API Server VNet 통합(미리 보기) 을 지원합니다.

kubectl get po -n kube-system을 사용하여 결과를 확인하고 konnectivity-agent Pod가 실행 중임을 표시할 수 있습니다. Pod가 실행 중인 경우 AKS 클러스터에서 Konnectivity를 사용합니다. API 서버 VNet 통합을 사용할 때 az aks show -g -n 명령을 실행하여 enableVnetIntegration 설정이 true로 지정되어 있는지 확인할 수 있습니다.

제한 사항

KMS etcd 암호화를 AKS와 통합할 때 다음 제한 사항이 적용됩니다.

  • 키, 키 자격 증명 모음 또는 연결된 ID의 삭제는 지원되지 않습니다.
  • KMS etcd 암호화는 시스템이 할당한 관리 ID에서 작동하지 않습니다. 기능을 활성화하기 전에 키 자격 증명 모음 액세스 정책을 설정해야 합니다. 클러스터를 만든 후에는 시스템이 할당한 관리 ID를 사용할 수 없습니다. 주기 종속성을 고려합니다.
  • "특정 가상 네트워크 및 IP 주소의 공용 액세스 허용" 또는 "공용 액세스 사용 안 함" 방화벽 설정이 있는 Azure Key Vault는 KMS 플러그 인에서 Key Vault로의 트래픽을 차단하므로 지원되지 않습니다.
  • KMS가 활성화된 클러스터에서 지원하는 최대 비밀 수는 2,000개입니다. 그러나 KMS v2는 이 한도의 제한을 받지 않고 더 많은 비밀을 처리할 수 있다는 점에 유의해야 합니다.
  • 다른 테넌트에서 BYO(사용자 고유) Azure Key Vault를 가져오기를 지원하지 않습니다.
  • KMS가 활성화되어 있으면 연결된 키 자격 증명 모음 모드(공개 또는 프라이빗)를 변경할 수 없습니다. 키 자격 증명 모음을 업데이트하려면 먼저 KMS를 비활성화했다가 다시 활성화해야 합니다.
  • 클러스터에 KMS가 켜져 있고 프라이빗 키 자격 증명 모음이 있는 경우 API 서버 VNet 통합(미리 보기) 터널을 사용해야 합니다. Konnectivity는 지원되지 않습니다.
  • Virtual Machine Scale Sets API를 사용하여 클러스터의 크기를 0으로 줄이면 노드의 할당이 취소됩니다. 그러면 클러스터가 다운되어 복구할 수 없게 됩니다.
  • KMS를 비활성화하면 키를 destroy할 수 없습니다. 키를 destroy하면 API 서버의 작동이 중지됩니다.

KMS는 공개 키 자격 증명 모음 또는 프라이빗 키 자격 증명 모음을 지원합니다.

공개 키 자격 증명 모음에서 KMS 활성화

다음 섹션에서는 공개 키 자격 증명 모음에서 KMS를 활성화하는 방법을 설명합니다.

공개 키 자격 증명 모음 및 키 만들기

Warning

키 또는 키 자격 증명 모음 삭제는 지원되지 않아서 클러스터의 비밀을 복구할 수 없게 됩니다.

키 자격 증명 모음 또는 키를 복구해야 하는 경우 일시 삭제 및 제거 방지를 통한 Azure Key Vault 복구 관리를 참조하세요.

RBAC 공개 키 자격 증명 모음 미사용 시 키 자격 증명 모음 및 키 만들기

az keyvault create를 사용하면 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하지 않고도 키 자격 증명 모음을 만들 수 있습니다.

az keyvault create --name MyKeyVault --resource-group MyResourceGroup

az keyvault key create를 사용하여 키를 만듭니다.

az keyvault key create --name MyKeyName --vault-name MyKeyVault

az keyvault key show를 사용하여 키 ID를 내보냅니다.

export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID

이 예제에서는 KEY_ID에 키 ID를 저장합니다.

RBAC 공개 키 자격 증명 모음 사용 시 키 자격 증명 모음 및 키 만들기

az keyvault create를 사용하면 Azure RBAC를 사용하여 키 자격 증명 모음을 만들 수 있습니다.

export KEYVAULT_RESOURCE_ID=$(az keyvault create --name MyKeyVault --resource-group MyResourceGroup  --enable-rbac-authorization true --query id -o tsv)

키를 만들 수 있는 권한을 자신에게 할당합니다.

az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id -o tsv) --assignee-principal-type "User" --scope $KEYVAULT_RESOURCE_ID

az keyvault key create를 사용하여 키를 만듭니다.

az keyvault key create --name MyKeyName --vault-name MyKeyVault

az keyvault key show를 사용하여 키 ID를 내보냅니다.

export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID

이 예제에서는 KEY_ID에 키 ID를 저장합니다.

공개 키 자격 증명 모음에 사용자가 할당한 관리 ID 만들기

az identity create를 사용하여 사용자가 할당한 관리 ID를 만듭니다.

az identity create --name MyIdentity --resource-group MyResourceGroup

az identity show를 사용하여 ID 개체 ID를 가져옵니다.

IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID

앞의 예제에서는 IDENTITY_OBJECT_ID에 ID 개체 ID의 값을 저장합니다.

az identity show를 사용하여 ID 리소스 ID를 가져옵니다.

IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID

이 예제에서는 IDENTITY_RESOURCE_ID에 ID 리소스 ID의 값을 저장합니다.

공개 키 자격 증명 모음의 암호를 해독하고 암호화할 수 있는 권한 할당

다음 섹션에서는 프라이빗 키 자격 증명 모음의 암호 해독 및 암호화 권한을 할당하는 방법을 설명합니다.

RBAC 공개 키 자격 증명 미사용 시 권한 할당

키 자격 증명 모음이 --enable-rbac-authorization으로 설정되지 않은 경우 az keyvault set-policy를 사용하여 Azure 키 자격 증명 모음 정책을 만들 수 있습니다.

az keyvault set-policy --name MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID

RBAC 공개 키 자격 증명 모음 사용 시 권한 할당

키 자격 증명 모음이 --enable-rbac-authorization으로 설정된 경우 Key Vault Crypto 사용자 역할을 할당하여 암호 해독 및 암호화 권한을 부여합니다.

az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

공개 키 자격 증명 모음이 있는 AKS 클러스터를 만들고 KMS etcd 암호화를 활성화합니다.

KMS etcd 암호화를 활성화하려면 az aks create 명령을 사용하여 AKS 클러스터를 만듭니다. az aks create와 함께 --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access, --azure-keyvault-kms-key-id 매개 변수를 사용할 수 있습니다.

az aks create \
    --name myAKSCluster \
    --resource-group MyResourceGroup \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-vault-network-access "Public" \
    --azure-keyvault-kms-key-id $KEY_ID \
    --generate-ssh-keys

공개 키 자격 증명 모음에서 KMS etcd 암호화를 활성화하도록 기존 AKS 클러스터 업데이트

기존 클러스터에서 KMS etcd 암호화를 활성화하려면 az aks update 명령을 사용합니다. az-aks-update와 함께 --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access, --azure-keyvault-kms-key-id 매개 변수를 사용할 수 있습니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $KEY_ID

다음 명령을 사용하여 모든 비밀을 업데이트합니다. 이 명령을 실행하지 않으면 이전에 만든 비밀이 더 이상 암호화되지 않습니다. 대규모 클러스터의 경우 비밀을 네임스페이스로 세분화하거나 업데이트 스크립트를 만들 수 있습니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

공개 키 자격 증명 모음에서 기존 키 회전

키 ID를 변경(키 이름 또는 키 버전 변경 포함)하면 az aks update 명령을 사용할 수 있습니다. az-aks-update와 함께 --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access, --azure-keyvault-kms-key-id 매개 변수를 사용하여 KMS에서 기존 키를 회전할 수 있습니다.

Warning

키 회전 후에 모든 비밀을 업데이트해야 합니다. 모든 비밀을 업데이트하지 않으면 이전에 만든 키가 없거나 더 이상 작동하지 않는 경우 비밀에 액세스할 수 없습니다.

KMS는 동시에 키 2개를 사용합니다. 첫 번째 키 회전 후 다음 키 회전까지 이전 키와 새 키가 모두 유효(만료되지 않음)한지 확인해야 합니다. 두 번째 키 회전 후 가장 오래된 키를 안전하게 제거/만료할 수 있습니다.

KMS 키 버전을 새 keyId버전으로 회전한 후 AKS 리소스 json에서 확인 securityProfile.azureKeyVaultKms.keyId 하세요. 새 키 버전이 사용 중인지 확인합니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup  --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $NEW_KEY_ID 

다음 명령을 사용하여 모든 비밀을 업데이트합니다. 이 명령을 실행하지 않으면 이전에 만든 비밀이 여전히 이전 키로 암호화됩니다. 대규모 클러스터의 경우 비밀을 네임스페이스로 세분화하거나 업데이트 스크립트를 만들 수 있습니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

프라이빗 키 자격 증명 모음에서 KMS 활성화

프라이빗 키 자격 증명 모음에서 KMS를 활성화하면 AKS가 노드 리소스 그룹에 프라이빗 엔드포인트와 프라이빗 링크를 자동으로 만듭니다. 키 자격 증명 모음에는 AKS 클러스터와의 프라이빗 엔드포인트 연결이 추가됩니다.

Warning

KMS는 프라이빗 키 자격 증명 모음에 대한 API 서버 VNet 통합(미리 보기)만 지원합니다.

프라이빗 키 자격 증명 모음 및 키 만들기

Warning

키 또는 키 자격 증명 모음 삭제는 지원되지 않아서 클러스터의 비밀을 복구할 수 없게 됩니다.

키 자격 증명 모음 또는 키를 복구해야 하는 경우 일시 삭제 및 제거 방지를 통한 Azure Key Vault 복구 관리를 참조하세요.

az keyvault create를 사용하여 프라이빗 키 자격 증명 모음을 만듭니다.

az keyvault create --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled

az keyvault key create를 사용하여 키를 만듭니다.

az keyvault key create --name MyKeyName --vault-name MyKeyVault

프라이빗 엔드포인트가 없는 프라이빗 키 자격 증명 모음에서 키를 만들거나 업데이트하는 작업은 지원되지 않습니다. 프라이빗 키 자격 증명 모음을 관리하는 방법을 알아보려면 Azure Private Link를 사용하여 키 자격 증명 모음 통합을 참조하세요.

프라이빗 키 자격 증명 모음에 사용자가 할당할 관리 ID 만들기

az identity create를 사용하여 사용자가 할당한 관리 ID를 만듭니다.

az identity create --name MyIdentity --resource-group MyResourceGroup

az identity show를 사용하여 ID 개체 ID를 가져옵니다.

IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID

앞의 예제에서는 IDENTITY_OBJECT_ID에 ID 개체 ID의 값을 저장합니다.

az identity show를 사용하여 ID 리소스 ID를 가져옵니다.

IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID

이 예제에서는 IDENTITY_RESOURCE_ID에 ID 리소스 ID의 값을 저장합니다.

프라이빗 키 자격 증명 모음의 암호를 해독하고 암호화할 수 있는 권한 할당

다음 섹션에서는 프라이빗 키 자격 증명 모음의 암호 해독 및 암호화 권한을 할당하는 방법을 설명합니다.

RBAC 프라이빗 키 자격 증명 모음 미사용 시 권한 할당

참고 항목

프라이빗 키 자격 증명 모음을 사용하면 AKS에서 ID가 보유한 권한의 유효성을 검사할 수 없습니다. KMS를 사용하기 전에 키 자격 증명 모음에 액세스할 수 있는 권한이 ID에 부여되었는지 확인합니다.

키 자격 증명 모음이 --enable-rbac-authorization으로 설정되지 않은 경우 az keyvault set-policy를 사용하여 Azure에서 키 자격 증명 모음 정책을 만들 수 있습니다.

az keyvault set-policy --name MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID

RBAC 프라이빗 키 자격 증명 모음 사용 시 권한 할당

키 자격 증명 모음이 --enable-rbac-authorization으로 설정되지 않은 경우 암호 해독 및 암호화 권한이 포함된 Azure RBAC 역할을 할당합니다.

az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

프라이빗 키 자격 증명 모음에서 프라이빗 키 자격 증명 모음과 클러스터 간의 프라이빗 링크를 만들려면 Key Vault 기여자 역할이 필요합니다.

az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

프라이빗 키 자격 증명 모음이 있는 AKS 클러스터를 만들고 KMS etcd 암호화를 활성화합니다.

프라이빗 키 자격 증명 모음에서 KMS etcd 암호화를 활성화하려면 az aks create 명령을 사용하여 AKS 클러스터를 만듭니다. az-aks-create와 함께 --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access, --azure-keyvault-kms-key-vault-resource-id 매개 변수를 사용할 수 있습니다.

az aks create \
    --name myAKSCluster \
    --resource-group MyResourceGroup \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID \
    --azure-keyvault-kms-key-vault-network-access "Private" \
    --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID \
    --generate-ssh-keys

기존 AKS 클러스터 업데이트하여 프라이빗 키 자격 증명 모음에서 KMS etcd 암호화 활성화

프라이빗 키 자격 증명 모음이 있는 기존 클러스터에서 KMS etcd 암호화를 활성화하려면 az aks update 명령을 사용합니다. az-aks-update와 함께 --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access, --azure-keyvault-kms-key-vault-resource-id 매개 변수를 사용할 수 있습니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $KEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID

다음 명령을 사용하여 모든 비밀을 업데이트합니다. 이 명령을 실행하지 않으면 이전에 만든 비밀이 암호화되지 않습니다. 대규모 클러스터의 경우 비밀을 네임스페이스로 세분화하거나 업데이트 스크립트를 만들 수 있습니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

프라이빗 키 자격 증명 모음에서 기존 키 회전

키 ID(키 이름 및 키 버전 포함)를 변경하면 az aks update 명령을 사용할 수 있습니다. az-aks-update와 함께 --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access, --azure-keyvault-kms-key-vault-resource-id 매개 변수를 사용하여 KMS의 기존 키를 회전할 수 있습니다.

Warning

키 회전 후에 모든 비밀을 업데이트해야 합니다. 모든 비밀을 업데이트하지 않으면 이전에 만든 키가 없거나 더 이상 작동하지 않는 경우 비밀에 액세스할 수 없습니다.

키를 회전하면 이전 키(key1)가 계속 캐시되므로 삭제해서는 안 됩니다. 이전 키(key1)를 즉시 삭제하려면 키를 두 번 회전해야 합니다. 그러면 key2, key3이 캐시되고 기존 클러스터에 영향을 미치지 않으면서 key1을 삭제할 수 있습니다.

KMS 키 버전을 새 keyId버전으로 회전한 후 AKS 리소스 json에서 확인 securityProfile.azureKeyVaultKms.keyId 하세요. 새 키 버전이 사용 중인지 확인합니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup  --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $NewKEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID

다음 명령을 사용하여 모든 비밀을 업데이트합니다. 모든 비밀을 업데이트하지 않으면 이전에 만든 비밀이 이전 키로 암호화됩니다. 대규모 클러스터의 경우 비밀을 네임스페이스로 세분화하거나 업데이트 스크립트를 만들 수 있습니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

키 자격 증명 모음 모드 업데이트

참고 항목

다른 모드(공개, 프라이빗 불문)를 사용하여 다른 키 자격 증명 모음을 변경하려면 az aks update를 직접 실행하면 됩니다. 연결된 키 자격 증명 모음의 모드를 변경하려면 먼저 KMS를 비활성화한 후 새 키 자격 증명 모음 ID를 사용하여 다시 활성화해야 합니다.

다음 섹션에서는 연결된 공개 키 자격 증명 모음을 프라이빗 모드로 마이그레이션하는 방법을 설명합니다. 이러한 단계는 프라이빗에서 퍼블릭으로 마이그레이션하는 데도 사용할 수 있습니다.

클러스터에서 KMS 비활성화

기존 클러스터에서 KMS를 비활성화하고 키 자격 증명 모음을 릴리스합니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

다음 명령을 사용하여 모든 비밀을 업데이트합니다. 이 명령을 실행하지 않으면 이전에 만든 비밀이 여전히 이전 키로 암호화됩니다. 대규모 클러스터의 경우 비밀을 네임스페이스로 세분화하거나 업데이트 스크립트를 만들 수 있습니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

키 자격 증명 모음 모드 변경

공개에서 프라이빗으로 키 자격 증명 모음을 업데이트합니다.

az keyvault update --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled

프라이빗에서 퍼블릭으로 마이그레이션하려면 위의 명령에서 --public-network-access을(를) Enabled(으)로 설정하세요.

업데이트된 키 자격 증명 모음을 사용하여 클러스터에서 KMS 활성화

업데이트된 프라이빗 키 자격 증명 모음을 사용하여 KMS를 활성화합니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup  --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $NewKEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID

KMS를 설정하면 엄호화 로그를 확인하는 키 자격 증명 모듬의 진단 설정을 활성화할 수 있습니다.

KMS 비활성화

KMS를 비활성화하기 전에 다음 Azure CLI 명령을 사용하여 KMS가 활성화되어 있는지 확인할 수 있습니다.

az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o table

결과를 통해 KMS가 활성화되어 있는 것으로 확인되면 다음 명령을 실행하여 클러스터에서 KMS를 비활성화합니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

다음 명령을 사용하여 모든 비밀을 업데이트합니다. 이 명령을 실행하지 않으면 이전에 만든 비밀이 계속 이전 키로 암호화되며, 키 자격 증명 모음에 대한 암호화 및 암호 해독 권한이 여전히 필요합니다. 대규모 클러스터의 경우 비밀을 네임스페이스로 세분화하거나 업데이트 스크립트를 만들 수 있습니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

KMS v2 지원

AKS 버전 1.27부터 KMS 기능을 활성화하면 KMS v2가 구성됩니다. KMS v2를 사용하면 이전 버전에서 지원하는 비밀이 2,000개로 제한되지 않습니다. 자세한 내용은 KMS V2 개선 사항을 참조하세요.

KMS v2로 마이그레이션

클러스터 버전이 1.27보다 오래되었으며 KMS를 이미 설정한 경우 클러스터 버전 1.27 이상으로 업그레이드가 차단됩니다. 다음 단계를 사용하여 KMS v2로 마이그레이션합니다.

  1. 클러스터에서 KMS를 비활성화합니다.
  2. 스토리지를 마이그레이션합니다.
  3. 클러스터를 버전 1.27 이상으로 업그레이드합니다.
  4. 클러스터에서 KMS를 활성화합니다.
  5. 스토리지를 마이그레이션합니다.

KMS를 비활성화하여 스토리지 마이그레이션

기존 클러스터에서 KMS를 비활성화하려면 --disable-azure-keyvault-kms 인수와 함께 az aks update 명령을 사용합니다.

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

저장소 마이그레이션

모든 비밀을 업데이트하려면 --all-namespaces 인수와 함께 kubectl get secrets 명령을 사용합니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

AKS 클러스터 업그레이드

AKS 클러스터를 업그레이드하려면 이 az aks upgrade 명령을 사용합니다. --kubernetes-version 인수를 사용하여 버전을 1.27.x 이상으로 설정합니다.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <AKS version>

예를 들면 다음과 같습니다.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version 1.27.1

스토리지 마이그레이션 후 KMS 활성화

클러스터에서 KMS 기능을 다시 활성화하면 비밀을 암호화할 수 있습니다. 이후 AKS 클러스터에서는 KMS v2를 사용합니다. KMS v2로 마이그레이션하지 않으려면 KMS가 활성화되어 있고 버전이 1.27 이상인 새 클러스터를 만들면 됩니다.

KMS v2용 스토리지 마이그레이션

KMS v2에서 모든 비밀을 다시 암호화하려면 --all-namespaces 인수와 함께 kubectl get secrets 명령을 사용합니다.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

KMS 관찰 가능성

AKS 리소스 json

AKS 리소스 json에서 KMS 구성은 다음을 통해 확인할 수 있습니다.

  1. az aks show 명령 사용
  2. Azure Portal을 통해

이 섹션에서는 securityProfile.azureKeyVaultKms 키 자격 증명 모음, 키, 현재 및 이전 키 버전을 포함한 KMS 구성을 보여 줍니다.

문제 진단 및 해결

KMS 플러그 인은 kube-apiserver Pod의 사이드카이므로 직접 액세스할 수 없습니다. KMS의 관찰 가능성을 개선하기 위해 다음을 통해 KMS 상태를 확인할 수 있습니다.

  1. AKS 클러스터의 Azure Portal 페이지 열기
  2. 으로 이동하여 Diagnose and solve problems 검색 KMS
  3. 탐지기에서 KMS KMS의 상태와 알려진 실패 시나리오에 있는 경우 확인할 수 있습니다.

KeyExpired: Operation encrypt is not allowed on an expired key 예를 들면 다음과 같습니다.

AKS KMS 플러그 인은 현재 BYO 키 자격 증명 모음 및 키만 허용하므로 키 수명 주기를 관리하는 것은 사용자의 책임입니다. 키가 만료되면 KMS 플러그 인이 기존 비밀의 암호를 해독하지 못합니다. 다음을 수행해야 합니다.

  1. KMS가 작동하도록 키 만료 날짜 연장
  2. 키 버전 회전