Používání vlastních klíčů (BYOK) se spravovanými disky Azure ve službě Azure Kubernetes Service (AKS)

Azure šifruje všechna neaktivní uložená data na spravovaném disku. Ve výchozím nastavení se data šifrují pomocí klíčů spravovaných Microsoftem. Pokud chcete mít větší kontrolu nad šifrovacími klíči, můžete pro clustery AKS zadat klíče spravované zákazníkem pro šifrování neaktivních uložených disků operačního systému i datových disků.

Přečtěte si další informace o klíčích spravovaných zákazníkem v Linuxu a Windows.

Požadavky

  • Při použití služby Key Vault k šifrování spravovaných disků musíte povolit ochranu obnovitelného odstranění a vyprázdnění služby Azure Key Vault .
  • Potřebujete Azure CLI verze 2.11.1 nebo novější.
  • Šifrování datových disků a klíče spravované zákazníkem jsou podporovány v Kubernetes verze 1.24 a vyšší.
  • Pokud se rozhodnete klíče pravidelně obměňovat (měnit), další informace najdete v tématu Klíče spravované zákazníkem a šifrování spravovaného disku Azure.

Omezení

  • Šifrování disku s operačním systémem pomocí klíčů spravovaných zákazníkem je možné povolit pouze při vytváření clusteru AKS.

  • Virtuální uzly nejsou podporované.

  • Při šifrování dočasného fondu uzlů s podporou disku s operačním systémem pomocí klíčů spravovaných zákazníkem, pokud chcete klíč otočit ve službě Azure Key Vault, musíte:

    • Vertikální snížení kapacity počtu fondů uzlů na 0
    • Otočení klíče
    • Vertikálně navyšte kapacitu fondu uzlů na původní počet.

Vytvoření instance služby Azure Key Vault

K uložení klíčů použijte instanci služby Azure Key Vault. Volitelně můžete pomocí webu Azure Portal nakonfigurovat klíče spravované zákazníkem pomocí služby Azure Key Vault.

Vytvořte novou skupinu prostředků a pak vytvořte novou instanci služby Key Vault a povolte obnovitelné odstranění a ochranu před vymazáním. Ujistěte se, že pro každý příkaz používáte stejné názvy oblastí a skupin prostředků.

# 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

Vytvoření instance DiskEncryptionSet

Nahraďte myKeyVaultName názvem vašeho trezoru klíčů. K provedení následujících kroků potřebujete také klíč uložený ve službě Azure Key Vault. Uložte stávající klíč do služby Key Vault, který jste vytvořili v předchozích krocích, nebo vygenerujte nový klíč a nahraďte myKeyName názvem vašeho klíče.

# 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

Důležité

Ujistěte se, že diskEncryptionSet je umístěný ve stejné oblasti jako cluster AKS a že identita clusteru AKS má přístup ke čtení diskEncryptionSet.

Udělení přístupu DiskEncryptionSet k trezoru klíčů

Použijte DiskEncryptionSet a skupiny prostředků, které jste vytvořili v předchozích krocích, a udělte prostředku DiskEncryptionSet přístup ke službě 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

Vytvoření nového clusteru AKS a šifrování disku s operačním systémem

Vytvořte novou skupinu prostředků nebo vyberte existující skupinu prostředků hostující jiné clustery AKS a pak pomocí klíče zašifrujte disky s operačním systémem připojené k síti nebo dočasný disk s operačním systémem. Ve výchozím nastavení cluster používá dočasný disk s operačním systémem, pokud je to možné ve spojení s velikostí virtuálního počítače a velikostí disku s operačním systémem.

Spuštěním následujícího příkazu načtěte hodnotu DiskEncryptionSet a nastavte proměnnou:

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

Pokud chcete vytvořit novou skupinu prostředků pro cluster, spusťte následující příkaz:

az group create --name myResourceGroup --location myAzureRegionName

Pokud chcete vytvořit běžný cluster pomocí disků s operačním systémem připojených k síti šifrovaných pomocí klíče, můžete to udělat zadáním argumentu --node-osdisk-type=Managed .

az aks create --name myAKSCluster --resource-group myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed

Pokud chcete vytvořit cluster s dočasným diskem s operačním systémem zašifrovaným klíčem, můžete to udělat zadáním argumentu --node-osdisk-type=Ephemeral . Musíte také zadat argument --node-vm-size , protože výchozí velikost virtuálního počítače je příliš malá a nepodporuje dočasný disk s operačním systémem.

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

Po přidání nových fondů uzlů do clusteru se klíč spravovaný zákazníkem poskytnutý během procesu vytvoření použije k šifrování disku s operačním systémem. Následující příklad ukazuje, jak nasadit nový fond uzlů s dočasným diskem s operačním systémem.

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RG_NAME --name $NODEPOOL_NAME --node-osdisk-type Ephemeral

Šifrování datového disku clusteru AKS

Pokud jste již při vytváření clusteru zadali sadu šifrování disku, je výchozí možností šifrování datových disků se stejnou sadou šifrování disků. Tento krok je proto volitelný. Pokud ale chcete šifrovat datové disky s jinou sadou šifrování disků, můžete postupovat podle těchto kroků.

Důležité

Ujistěte se, že máte správné přihlašovací údaje AKS. Spravovaná identita musí mít přístup přispěvatele ke skupině prostředků, ve které je nasazená sada diskencryptionset. V opačném případě se zobrazí chyba s návrhem, že spravovaná identita nemá oprávnění.

Pokud chcete přiřadit identitu clusteru AKS roli Přispěvatel pro diskencryptionset, spusťte následující příkazy:

aksIdentity=$(az aks show --resource-group $RG_NAME --name $CLUSTER_NAME --query "identity.principalId")
az role assignment create --role "Contributor" --assignee $aksIdentity --scope $diskEncryptionSetId

Vytvořte soubor s názvem byok-azure-disk.yaml , který obsahuje následující informace. Nahraďte myAzureSubscriptionId, myResourceGroup a myDiskEncrptionSetName hodnotami a použijte yaml. Ujistěte se, že používáte skupinu prostředků, ve které je nasazená sada 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}"

Potom spuštěním následujících příkazů aktualizujte cluster AKS:

# Get credentials
az aks get-credentials --name myAksCluster --resource-group myResourceGroup --output table

# Update cluster
kubectl apply -f byok-azure-disk.yaml

Další kroky

Kontrola osvědčených postupů pro zabezpečení clusteru AKS