AKS(Azure Kubernetes Service)에서 Azure 관리 디스크를 사용하여 BYOK(Bring Your Own Key)
Azure는 미사용 관리 디스크의 모든 데이터를 암호화합니다. 기본적으로 데이터는 Microsoft 관리형 키로 암호화됩니다. 암호화 키를 추가로 제어하기 위해 AKS 클러스터의 OS 및 데이터 디스크에서 모두 미사용 암호화에 사용할 고객 관리형 키를 제공할 수 있습니다.
Linux 및 Windows용 고객 관리형 키에 대해 자세히 알아보세요.
필수 조건
- Key Vault를 사용하여 관리 디스크를 암호화할 때 Azure Key Vault에 일시 삭제 및 제거 방지를 사용하도록 설정해야 합니다.
- Azure CLI 버전 2.11.1 이상이 필요합니다.
- 데이터 디스크 암호화 및 고객 관리형 키는 Kubernetes 버전 1.24 이상에서 지원됩니다.
- 키를 주기적으로 회전(변경)하도록 선택하는 경우 자세한 내용은 고객 관리형 키 및 Azure 관리 디스크 암호화를 참조하세요.
제한 사항
AKS 클러스터를 만들 때만 고객 관리형 키를 사용하여 OS 디스크를 암호화할 수 있습니다.
가상 노드는 지원되지 않습니다.
고객 관리형 키를 사용하여 임시 OS 디스크 지원 노드 풀을 암호화할 때 Azure Key Vault에서 키를 회전하려면 다음을 수행해야 합니다.
- 노드 풀 수를 0으로 스케일 다운
- 키 회전
- 노드 풀을 원래 개수로 스케일 업.
Azure Key Vault 인스턴스 만들기
Azure Key Vault 인스턴스를 사용하여 키를 저장합니다. 필요에 따라 Azure Portal을 사용하여 Azure Key Vault로 고객 관리형 키를 구성할 수 있습니다.
새 ‘리소스 그룹’을 만든 다음 새 Key Vault 인스턴스를 만들고 일시 삭제 및 제거 방지를 사용하도록 설정합니다. 각 명령에 동일한 지역 및 리소스 그룹 이름을 사용해야 합니다.
# Optionally retrieve Azure region short names for use on upcoming commands
az account list-locations
# Create new resource group in a supported Azure region
az group create --location myAzureRegionName --name myResourceGroup
# Create an Azure Key Vault resource in a supported Azure region
az keyvault create --name myKeyVaultName --resource-group myResourceGroup --location myAzureRegionName --enable-purge-protection true
DiskEncryptionSet의 인스턴스 만들기
myKeyVaultName을 키 자격 증명 모음의 이름으로 바꿉니다. 또한 다음 단계를 완료하기 위해서는 Azure Key Vault에 저장된 키가 필요합니다. 이전 단계에서 만든 Key Vault에 기존 키를 저장하거나 새 키를 생성하고 myKeyName을 키 이름으로 바꿉니다.
# Retrieve the Key Vault Id and store it in a variable
keyVaultId=$(az keyvault show --name myKeyVaultName --query "[id]" -o tsv)
# Retrieve the Key Vault key URL and store it in a variable
keyVaultKeyUrl=$(az keyvault key show --vault-name myKeyVaultName --name myKeyName --query "[key.kid]" -o tsv)
# Create a DiskEncryptionSet
az disk-encryption-set create --name myDiskEncryptionSetName --location myAzureRegionName --resource-group myResourceGroup --source-vault $keyVaultId --key-url $keyVaultKeyUrl
Important
DiskEncryptionSet가 AKS 클러스터와 동일한 지역에 있고 AKS 클러스터 ID에 DiskEncryptionSet에 대한 읽기 액세스 권한이 있는지 확인합니다.
키 자격 증명 모음에 DiskEncryptionSet 액세스 권한 부여
이전 단계에서 만든 DiskEncryptionSet 및 리소스 그룹을 사용하여 Azure Key Vault에 대한 DiskEncryptionSet 리소스 액세스 권한을 부여합니다.
# Retrieve the DiskEncryptionSet value and set a variable
desIdentity=$(az disk-encryption-set show --name myDiskEncryptionSetName --resource-group myResourceGroup --query "[identity.principalId]" -o tsv)
# Update security policy settings
az keyvault set-policy --name myKeyVaultName --resource-group myResourceGroup --object-id $desIdentity --key-permissions wrapkey unwrapkey get
새 AKS 클러스터 만들기 및 OS 디스크를 암호화
새 리소스 그룹을 만들거나 다른 AKS 클러스터를 호스팅하는 기존 리소스 그룹을 선택한 다음, 키를 사용하여 네트워크 연결 OS 디스크 또는 임시 OS 디스크를 사용하여 암호화합니다. 기본적으로 클러스터는 가능한 경우 VM 크기 및 OS 디스크 크기와 함께 임시 OS 디스크를 사용합니다.
다음 명령을 실행하여 DiskEncryptionSet 값을 검색하고 변수를 설정합니다.
diskEncryptionSetId=$(az disk-encryption-set show --name mydiskEncryptionSetName --resource-group myResourceGroup --query "[id]" -o tsv)
클러스터에 대한 새 리소스 그룹을 만들려면 다음 명령을 실행합니다.
az group create --name myResourceGroup --location myAzureRegionName
키로 암호화된 네트워크 연결 OS 디스크를 사용하여 일반 클러스터를 만들려면 --node-osdisk-type=Managed
인수를 지정하면 됩니다.
az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed
키로 암호화된 임시 OS 디스크가 있는 클러스터를 만들려면 --node-osdisk-type=Ephemeral
인수를 지정하면 됩니다. 또한 기본 vm 크기가 너무 작고 임시 OS 디스크를 지원하지 않으므로 --node-vm-size
인수를 지정해야 합니다.
az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Ephemeral --node-vm-size Standard_DS3_v2
새 노드 풀이 클러스터에 추가되면 만들기 프로세스 중에 제공된 고객 관리형 키가 OS 디스크를 암호화하는 데 사용됩니다. 다음 예에서는 임시 OS 디스크를 사용하여 새 노드 풀을 배포하는 방법을 보여 줍니다.
az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral
AKS 클러스터 데이터 디스크 암호화
클러스터 만드는 동안 디스크 암호화 집합을 이미 제공한 경우 동일한 디스크 암호화 집합으로 데이터 디스크를 암호화하는 것이 기본 옵션입니다. 따라서 이 단계는 선택 사항입니다. 그러나 다른 디스크 암호화 집합을 사용하여 데이터 디스크를 암호화하려는 경우 다음 단계를 수행할 수 있습니다.
Important
적절한 AKS 자격 증명을 보유해야 합니다. 관리 ID에는 diskencryptionset가 배포되는 리소스 그룹에 대한 기여자 액세스 권한이 있어야 합니다. 그렇지 않으면 관리 ID에 권한이 없음을 알리는 오류가 표시됩니다.
AKS 클러스터 ID에 diskencryptionset에 대한 기여자 역할을 할당하려면 다음 명령을 실행합니다.
aksIdentity=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query "identity.principalId")
az role assignment create --role "Contributor" --assignee $aksIdentity --scope $diskEncryptionSetId
다음 정보를 포함하는 byok-azure-disk.yaml이라는 파일을 만듭니다. myAzureSubscriptionId, myResourceGroup 및 myDiskEncrptionSetName을 해당하는 값으로 바꾸고 yaml을 적용합니다. DiskEncryptionSet가 배포되는 리소스 그룹을 사용해야 합니다.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: byok
provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
parameters:
skuname: StandardSSD_LRS
kind: managed
diskEncryptionSetID: "/subscriptions/{myAzureSubscriptionId}/resourceGroups/{myResourceGroup}/providers/Microsoft.Compute/diskEncryptionSets/{myDiskEncryptionSetName}"
다음으로, 아래의 명령을 실행하여 AKS 클러스터를 업데이트합니다.
# Get credentials
az aks get-credentials --name myAksCluster --resource-group myResourceGroup --output table
# Update cluster
kubectl apply -f byok-azure-disk.yaml
다음 단계
Azure Kubernetes Service