이 문서에서는 AKS(Azure Kubernetes Service)에서 Kubernetes 비밀에 KMS(키 관리 서비스) 데이터 암호화를 사용하도록 설정하는 방법을 보여 줍니다. KMS 암호화는 Azure Key Vault 키를 사용하여 etcd에 저장된 Kubernetes 비밀을 암호화합니다.
AKS는 다음 두 가지 주요 관리 옵션을 지원합니다.
- PMK(플랫폼 관리형 키) : AKS는 암호화 키를 자동으로 만들고 관리합니다. 이 옵션은 자동 키 회전을 사용하여 가장 간단한 설정을 제공합니다.
- CMK(고객 관리형 키) : 사용자 고유의 Azure Key Vault 및 암호화 키를 만들고 관리합니다. 이 옵션은 키 수명 주기에 대한 모든 권한을 제공하고 고객 관리형 키를 의무화하는 규정 준수 요구 사항을 충족합니다.
암호화 개념 및 키 옵션에 대한 자세한 내용은 AKS에 대한 미사용 데이터 암호화 개념을 참조하세요.
중요합니다
AKS 미리 보기 기능은 셀프 서비스에서 사용할 수 있습니다(옵트인 방식). 미리 보기는 "있는 그대로" 및 "사용 가능한 상태로" 제공되며 서비스 수준 계약 및 제한적 보증에서 제외됩니다. AKS 미리 보기의 일부는 고객 지원팀에서 최선을 다해 지원합니다. 따라서 이러한 기능은 프로덕션 용도로 사용할 수 없습니다. 자세한 내용은 다음 지원 문서를 참조하세요.
필수 조건
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- 이 문서에는 Azure CLI 버전 2.73.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
- Azure CLI 확장 버전
aks-preview이상이 필요합니다.- 아직
aks-preview확장을 갖고 있지 않다면,az extension add명령을 사용하여 이 확장을 설치하세요.az extension add --name aks-preview - 이미
aks-preview확장이 있다면, 업데이트하여 이 확장이az extension update명령을 사용하여 최신 버전이 있는지 확인하게 하세요.az extension update --name aks-preview
- 아직
-
kubectlCLI 도구가 설치되었습니다.
기능 플래그 등록
플랫폼 관리형 키와 함께 KMS 데이터 암호화를 사용하려면 구독에 기능 플래그를 KMSPMKPreview 등록합니다.
명령을 사용하여 기능 플래그를 등록합니다
az feature register.az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview또한
az feature show명령을 사용하여 등록 상태를 확인합니다. 상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview상태가 등록됨으로 표시되면 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을
az provider register새로 고칩니다.az provider register --namespace Microsoft.ContainerService
환경 변수 설정하기
배포에 대한 환경 변수를 설정합니다. 자리 표시자 값을 사용자 자신만의 값으로 바꿉니다.
# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"
# Set subscription
az account set --subscription $SUBSCRIPTION_ID
# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION
플랫폼 관리형 키 암호화 사용
AKS는 플랫폼 관리형 키를 사용하여 Azure Key Vault 및 암호화 키를 자동으로 만들고 관리합니다. 키 회전은 플랫폼에서 자동으로 처리됩니다.
플랫폼 관리형 키를 사용하여 새 AKS 클러스터 만들기
플랫폼 관리형 키를 사용하여 KMS 암호화를 사용하여 새 AKS 클러스터를 만듭니다.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--generate-ssh-keys
기존 클러스터에서 플랫폼 관리형 키 사용
기존 AKS 클러스터에서 플랫폼 관리형 키를 사용하여 KMS 암호화를 사용하도록 설정합니다.
비고
클러스터에서 Kubernetes 버전 1.33 이상을 실행해야 합니다.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled
KMS 구성 확인
KMS 암호화를 사용하도록 설정한 후 구성을 확인합니다.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
출력에는 KMS 구성이 포함됩니다.
{
"kubernetesResourceObjectEncryptionProfile": {
"infrastructureEncryption": "Enabled"
}
}
프라이빗 키 저장소를 사용하여 고객 관리형 키 암호화를 활성화
보안 강화를 위해 공용 네트워크 액세스가 사용하지 않도록 설정된 프라이빗 키 자격 증명 모음을 사용할 수 있습니다. AKS는 신뢰할 수 있는 서비스 방화벽 예외를 통해 프라이빗 키 자격 증명 모음에 액세스합니다. 이 섹션에서는 프라이빗 키 자격 증명 보관소를 사용하여 고객 관리형 키를 구성하는 방법을 설명합니다.
키 자격 증명 모음 및 키를 신뢰할 수 있는 서비스 액세스를 사용하여 만들기
비고
이 섹션에서는 처음에 공용 네트워크 액세스를 사용하여 키 자격 증명 모음을 만든 다음 신뢰할 수 있는 서비스 바이패스로 방화벽을 사용하도록 설정하는 방법을 보여 줍니다. 이 방법은 설명용으로만 사용됩니다. 프로덕션 환경에서는 시작부터 키 볼트를 프라이빗으로 설정하고 관리해야 합니다. 프라이빗 키 자격 증명 모음 관리에 대한 지침은 Azure Key Vault 네트워크 보안을 참조하세요.
활성화된 Azure RBAC를 사용하여 키 자격 증명 모음을 만드세요.
export KEY_VAULT_NAME="<your-key-vault-name>" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --enable-rbac-authorization true \ --public-network-access Enabled # Get the key vault resource ID export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)Key Vault Crypto Officer 역할을 자신에게 할당하여 키를 만듭니다.
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 $KEY_VAULT_RESOURCE_ID키 볼트에 키를 만듭니다.
export KEY_NAME="<your-key-name>" az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME # Get the key ID (without version for automatic rotation) export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv) export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')신뢰할 수 있는 서비스 우회와 함께 키 볼트 방화벽을 사용하도록 설정합니다.
az keyvault update \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --default-action Deny \ --bypass AzureServices이 매개 변수는
--default-action Deny공용 네트워크 액세스를 차단하며--bypass AzureServices, 이 매개 변수를 사용하면 신뢰할 수 있는 Azure 서비스(AKS 포함)가 키 자격 증명 모음에 액세스할 수 있습니다.
사용자 할당 관리 ID 만들기
클러스터에 대한 사용자 할당 관리 ID를 만듭니다.
export IDENTITY_NAME="<your-identity-name>" az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP # Get the identity details export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)관리 ID에 필요한 역할을 할당합니다.
# Assign Key Vault Crypto User role for encrypt/decrypt operations az role assignment create \ --role "Key Vault Crypto User" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID # Assign Key Vault Contributor role for key management az role assignment create \ --role "Key Vault Contributor" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID
고객 관리형 키(프라이빗)를 사용하여 새 AKS 클러스터 만들기
고객이 관리하는 키와 프라이빗 키 저장소를 사용하여 KMS 암호화가 적용된 새 AKS 클러스터를 만드십시오.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Private \
--assign-identity $IDENTITY_RESOURCE_ID \
--generate-ssh-keys
기존 클러스터에서 고객 관리형 키 사용(프라이빗)
기존 AKS 클러스터에서 프라이빗 키 자산 저장소를 사용하여 고객 관리형 키로 KMS 암호화를 사용하도록 설정합니다.
비고
클러스터에서 Kubernetes 버전 1.33 이상을 실행해야 합니다.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Private \
--assign-identity $IDENTITY_RESOURCE_ID
KMS 구성 확인
KMS 암호화를 사용하도록 설정한 후 구성을 확인합니다.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
출력에는 KMS 구성이 포함됩니다.
{
"azureKeyVaultKms": {
"enabled": true,
"keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
"keyVaultNetworkAccess": "Private",
"keyVaultResourceId": "<key-vault-resource-id>"
},
"kubernetesResourceObjectEncryptionProfile": {
"infrastructureEncryption": "Enabled"
}
}
공개 키 자격 증명 보관소를 사용하여 고객이 관리하는 키 암호화를 사용 설정
고객 관리형 키를 사용하여 고유한 Azure Key Vault 및 암호화 키를 만들고 관리합니다. 이 섹션에서는 공용 키 자산 보관소를 사용하여 고객 관리형 키를 구성하는 방법을 보여 줍니다.
키 자격 증명 모음 및 키 만들기
활성화된 Azure RBAC를 사용하여 키 자격 증명 모음을 만드세요.
export KEY_VAULT_NAME="<your-key-vault-name>" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --enable-rbac-authorization true \ --public-network-access Enabled # Get the key vault resource ID export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)Key Vault Crypto Officer 역할을 자신에게 할당하여 키를 만듭니다.
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 $KEY_VAULT_RESOURCE_ID키 볼트에 키를 만듭니다.
export KEY_NAME="<your-key-name>" az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME # Get the key ID (without version for automatic rotation) export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv) export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
사용자 할당 관리 ID 만들기
클러스터에 대한 사용자 할당 관리 ID를 만듭니다.
export IDENTITY_NAME="<your-identity-name>" az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP # Get the identity details export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)관리 ID에 필요한 역할을 할당합니다.
# Assign Key Vault Crypto User role for encrypt/decrypt operations az role assignment create \ --role "Key Vault Crypto User" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID # Assign Key Vault Contributor role for key management az role assignment create \ --role "Key Vault Contributor" \ --assignee-object-id $IDENTITY_OBJECT_ID \ --assignee-principal-type "ServicePrincipal" \ --scope $KEY_VAULT_RESOURCE_ID
고객 관리형 키를 사용하여 새 AKS 클러스터 만들기
고객 관리형 키를 사용하여 KMS 암호화를 사용하여 새 AKS 클러스터를 만듭니다.
az aks create \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kubernetes-version 1.33.0 \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Public \
--assign-identity $IDENTITY_RESOURCE_ID \
--generate-ssh-keys
기존 클러스터에서 고객 관리형 키 사용
기존 AKS 클러스터에서 고객 관리형 키를 사용하여 KMS 암호화를 사용하도록 설정합니다.
비고
클러스터에서 Kubernetes 버전 1.33 이상을 실행해야 합니다.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Public \
--assign-identity $IDENTITY_RESOURCE_ID
KMS 구성 확인
KMS 암호화를 사용하도록 설정한 후 구성을 확인합니다.
az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'
출력에는 KMS 구성이 포함됩니다.
{
"azureKeyVaultKms": {
"enabled": true,
"keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
"keyVaultNetworkAccess": "Public",
"keyVaultResourceId": "<key-vault-resource-id>"
},
"kubernetesResourceObjectEncryptionProfile": {
"infrastructureEncryption": "Enabled"
}
}
키 관리 옵션 간 마이그레이션
플랫폼 관리형 키와 고객 관리형 키 간에 마이그레이션할 수 있습니다.
플랫폼 관리형 키에서 고객 관리형 키로 마이그레이션
플랫폼 관리형 키에서 고객 관리형 키로 마이그레이션하려면 먼저 고객 관리형 키 섹션에 설명된 대로 키 자격 증명 모음, 키 및 관리 ID를 설정한 다음 업데이트 명령을 실행합니다.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--enable-azure-keyvault-kms \
--azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
--azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
--azure-keyvault-kms-key-vault-network-access Public \
--assign-identity $IDENTITY_RESOURCE_ID
고객 관리형 키에서 플랫폼 관리형 키로 마이그레이션
고객 관리형 키에서 플랫폼 관리형 키로 마이그레이션하려면 다음을 수행합니다.
az aks update \
--name $CLUSTER_NAME \
--resource-group $RESOURCE_GROUP \
--kms-infrastructure-encryption Enabled \
--disable-azure-keyvault-kms
키 회전
KMS 데이터 암호화를 사용하면 키 관리 옵션에 따라 키 회전이 다르게 처리됩니다.
- 플랫폼 관리형 키: 키 회전은 자동으로 수행됩니다. 아무 작업도 필요하지 않습니다.
- 고객 관리형 키: Azure Key Vault에서 키 버전을 회전하는 경우 KMS 컨트롤러는 주기적으로(6시간마다) 회전을 감지하고 새 키 버전을 사용합니다.
비고
레거시 KMS 환경과 달리 이 새로운 구현을 사용하면 키 회전 후 비밀을 수동으로 다시 암호화할 필요가 없습니다. 플랫폼은 이를 자동으로 처리합니다.