Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure шифрует все данные на управляемых дисках в состоянии покоя. По умолчанию данные шифруются с использованием ключей, управляемых Microsoft. Для большего контроля над ключами шифрования вы можете предоставить ключи, управляемые клиентом, для использования при шифровании в состоянии покоя как для дисков ОС, так и для дисков данных в ваших кластерах AKS.
Узнайте больше о ключах, управляемых клиентом, на Linux и Windows.
Prerequisites
- Вы должны включить мягкое удаление и защиту от очистки для Azure Key Vault при использовании Key Vault для шифрования управляемых дисков.
- Вам понадобится версия 2.11.1 или более поздняя версия Azure CLI.
- Шифрование дисковых данных и ключи, управляемые заказчиком, поддерживаются на версиях Kubernetes 1.24 и выше.
- Если вы решили периодически поворачивать (изменять) ключи, ознакомьтесь с ключами, управляемыми клиентом, и шифрованием управляемого диска Azure для получения дополнительных сведений .
Limitations
Шифрование диска ОС с использованием ключей, управляемых клиентом, может быть включено только при создании кластера AKS.
Виртуальные узлы не поддерживаются.
При шифровании эфемерного пула узлов с поддержкой диска ОС с помощью ключей, управляемых клиентом, если вы хотите повернуть ключ в Azure Key Vault, можно рассмотреть два варианта:
Немедленное применение нового CMK
- Уменьшите количество узлов в пуле до 0.
- Смена ключа.
- Увеличьте пул узлов до изначального количества.
Постепенное использование нового CMK
- Разрешить обновления образа узла AKS или обновления версий для естественного внедрения нового CMK с течением времени.
- До тех пор, пока все узлы в пуле не будут обновлены, существующий CMK будет продолжать функционировать без нарушений.
- После завершения процесса обновления на всех узлах новый CMK вступает в силу без проблем.
Создайте экземпляр 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
Создайте экземпляр набора шифрования диска
Замените myKeyVaultName именем хранилища ключей. Для выполнения следующих действий вам также потребуется ключ , хранящийся в Azure Key Vault. Либо сохраните свой существующий ключ в Хранилище ключей, которое вы создали на предыдущих шагах, либо создайте новый ключ и замените myKeyName на имя вашего ключа.
Примечание.
Для поддержки доступа между учетными записями для ключей шифрования, управляемых клиентом, необходимо создать DiskEncryptionSet для ключей, управляемых клиентом, как описано в этом руководстве. Оставшаяся конфигурация класса хранилища совпадает с обычными ключами, управляемыми клиентом.
# 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)
# Retrieve the Key Vault resource ID and set a variable
keyVaultId=$(az keyvault show --name myKeyVaultName --resource-group myResourceGroup --query "id" -o tsv)
# Grant the DiskEncryptionSet identity access to Key Vault
az role assignment create --assignee-object-id $desIdentity --assignee-principal-type ServicePrincipal --role "Key Vault Crypto Service Encryption User" --scope $keyVaultId
Создайте новый кластер AKS и зашифруйте диск с операционной системой
Либо создайте новую группу ресурсов, либо выберите существующую группу ресурсов, в которой размещены другие AKS-кластеры, затем используйте ваш ключ для шифрования, используя либо сетевые подключенные 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
Чтобы создать обычный кластер с помощью дисков ОС, подключенных к сети, зашифрованных с помощью ключа, можно сделать это, указав --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
Важно
Набор шифрования диска (DiskEncryptionSet), который мы ранее применяли к классу хранилища, шифрует только новые PVC. Для шифрования существующих PVC необходимо сначала отключиться перед использованием API дисков Azure или CLI для обновления базовых дисков, как показано в этом руководстве.
Шифрование диска данных кластера AKS
Если вы уже предоставили набор шифрования дисков во время создания кластера, шифрование дисков данных с тем же набором шифрования дисков является вариантом по умолчанию. Поэтому этот шаг является необязательным. Однако, если вы хотите зашифровать диски с данными другим набором шифрования дисков, вы можете следовать этим шагам.
Важно
Убедитесь, что у вас есть правильные учетные данные AKS. Для удостоверения кластера AKS требуется доступ читателя к DiskEncryptionSet. В противном случае появляется сообщение об ошибке о том, что у управляемой идентификации нет необходимых разрешений.
Чтобы назначить управляемому удостоверению кластера AKS роль "Читатель" для DiskEncryptionSet, выполните следующие команды:
aksIdentity=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query "identity.principalId" -o tsv)
az role assignment create --role "Reader" --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
Следующие шаги
Обзор лучших практик для обеспечения безопасности кластера AKS