Поделиться через


Используйте свои ключи (BYOK) с управляемыми дисками Azure в службе Kubernetes Azure (AKS)

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

Use an Azure Key Vault instance to store your keys. Вы можете при необходимости использовать портал Azure для настройки ключей, управляемых клиентом, с помощью Azure Key Vault

Create a new resource group, then create a new Key Vault instance and enable soft delete and purge protection. Убедитесь, что вы используете одинаковые названия регионов и групп ресурсов для каждой команды.

# 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

Создайте экземпляр набора шифрования диска

Replace myKeyVaultName with the name of your key vault. You also need a key stored in Azure Key Vault to complete the following steps. Либо сохраните свой существующий ключ в Хранилище ключей, которое вы создали на предыдущих шагах, либо создайте новый ключ и замените myKeyName на имя вашего ключа.

Примечание.

For cross-account access support for customer-managed encryption keys, you need to create the DiskEncryptionSet for cross-tenant customer-managed keys as detailed in this guide. The remaining storage class configuration is the same as normal customer managed keys.

# 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.

Grant the DiskEncryptionSet access to key vault

Используйте 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-кластеры, затем используйте ваш ключ для шифрования, используя либо сетевые подключенные OS-диски, либо эфемерные OS-диски. По умолчанию кластер использует эфемерный диск ОС, когда это возможно, в сочетании с размером виртуальной машины и размером диска ОС.

Run the following command to retrieve the DiskEncryptionSet value and set a variable:

diskEncryptionSetId=$(az disk-encryption-set show --name mydiskEncryptionSetName --resource-group myResourceGroup --query "[id]" -o tsv)

Если вы хотите создать новую группу ресурсов для кластера, выполните следующую команду:

az group create --name myResourceGroup --location myAzureRegionName

To create a regular cluster using network-attached OS disks encrypted with your key, you can do so by specifying the --node-osdisk-type=Managed argument.

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. Encrypting existing PVCs requires detaching first before using the Azure Disks API/CLI to update the underlying disks, as shown in this related guide.

Encrypt your AKS cluster data disk

Если вы уже предоставили набор шифрования дисков во время создания кластера, шифрование дисков данных с тем же набором шифрования дисков является вариантом по умолчанию. Поэтому этот шаг является необязательным. Однако, если вы хотите зашифровать диски с данными другим набором шифрования дисков, вы можете следовать этим шагам.

Important

Ensure you have the proper AKS credentials. Управляемая идентификация должна иметь доступ на изменение в группу ресурсов, где развернут набор для шифрования дисков. В противном случае вы получите ошибку, указывающую на то, что управляемой идентификации не хватает разрешений.

To assign the AKS cluster identity the Contributor role for the diskencryptionset, execute the following commands:

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. Make sure to use the resource group where your DiskEncryptionSet is deployed.

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