Использование собственных ключей (BYOK) с управляемыми дисками Azure в Служба Azure Kubernetes (AKS)
Azure шифрует все данные на неактивных дисках. По умолчанию данные шифруются с помощью ключей, управляемых Майкрософт. Для дополнительного контроля над ключами шифрования можно предоставить ключи, управляемые клиентом. С их помощью можно шифровать неактивные данные в операционной системе и дисках кластеров AKS.
Подробнее о ключах, управляемых клиентом, в Linux и Windows.
Необходимые компоненты
- Необходимо включить обратимое удаление и защиту от очистки для Azure Key Vault при использовании Key Vault для шифрования управляемых дисков.
- Вам потребуется Azure CLI 2.11.1 или более поздней версии.
- Шифрование дисков данных и ключи, управляемые клиентом, поддерживаются в Kubernetes версии 1.24 и выше.
- Если вы решили периодически поворачивать (изменять) ключи, ознакомьтесь с ключами, управляемыми клиентом, и шифрованием управляемого диска Azure для получения дополнительных сведений.
Ограничения
Шифрование диска ОС с ключами, управляемыми клиентом, можно включить только при создании кластера AKS.
Виртуальные узлы не поддерживаются.
При шифровании временного пула узлов с поддержкой диска ОС с помощью ключей, управляемых клиентом, если вы хотите повернуть ключ в Azure Key Vault, необходимо:
- Уменьшение количества пула узлов до 0
- Смена ключа
- Масштабирование пула узлов до исходного количества.
Создайте экземпляр Azure Key Vault
Сохраните ключи в экземпляре Azure Key Vault. Вы также можете воспользоваться порталом Azure для настройки управляемых клиентом ключей с помощью 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
Внимание
Убедитесь, что DiskEncryptionSet находится в том же регионе, что и кластер AKS, а удостоверение кластера AKS имеет доступ на чтение к DiskEncryptionSet.
Предоставьте DiskEncryptionSet доступ к хранилищу ключей
Используйте DiskEncryptionSet и группы ресурсов, созданные на предыдущих шагах, и предоставьте ресурсу DiskEncryptionSet доступ к Azure Key Vault.
# 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 и зашифруйте диск ОС
Создайте новую группу ресурсов или выберите существующую группу ресурсов, включающая другие кластеры AKS, а затем используйте ключ для шифрования с помощью дисков ОС, подключенных к сети, или временных дисков ОС. По умолчанию кластер использует временный диск ОС, если это возможно в сочетании с размером виртуальной машины и размером диска ОС.
Выполните следующую команду, чтобы получить значение DiskEncryptionSet и задать переменную:
diskEncryptionSetId=$(az disk-encryption-set show --name mydiskEncryptionSetName --resource-group myResourceGroup --query "[id]" -o tsv)
Если вы хотите создать новую группу ресурсов для кластера, выполните следующую команду:
az group create --name myResourceGroup --location myAzureRegionName
Чтобы создать обычный кластер с помощью дисков ОС, подключенных к сети, зашифрованных с помощью ключа, можно сделать это, указав --node-osdisk-type=Managed
аргумент.
az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed
Чтобы создать кластер с временным диском ОС, зашифрованным с помощью ключа, можно сделать это, указав --node-osdisk-type=Ephemeral
аргумент. Также необходимо указать аргумент --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
При добавлении новых пулов узлов в кластер управляемый клиентом ключ, предоставленный во время создания, используется для шифрования диска ОС. В следующем примере показано, как развернуть новый пул узлов с эфемерным диском ОС.
az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral
Шифрование диска данных кластера AKS
Если вы уже предоставили набор шифрования дисков во время создания кластера, шифрование дисков данных с тем же набором шифрования дисков является параметром по умолчанию. Поэтому этот шаг является необязательным. Однако если вы хотите зашифровать диски данных с другим набором шифрования дисков, выполните следующие действия.
Внимание
Убедитесь, что у вас есть верные учетные данные AKS. Управляемому удостоверению потребуется доступ участника к группе ресурсов, в которой развернут ресурс diskencryptionset. В противном случае возникнет ошибка с сообщением, что у управляемого удостоверения нет необходимых разрешений.
Чтобы назначить удостоверение кластера AKS роль участника для набора 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