Delen via


Bring Your Own Keys (BYOK) met Door Azure beheerde schijven in Azure Kubernetes Service (AKS)

Azure versleutelt alle gegevens in een beheerde schijf-at-rest. Standaard worden gegevens versleuteld met door Microsoft beheerde sleutels. Voor meer controle over versleutelingssleutels kunt u door de klant beheerde sleutels opgeven om te gebruiken voor versleuteling-at-rest voor zowel het besturingssysteem als de gegevensschijven voor uw AKS-clusters.

Meer informatie over door de klant beheerde sleutels in Linux en Windows.

Vereisten

  • U moet voorlopig verwijderen en opschonen voor Azure Key Vault inschakelen wanneer u Key Vault gebruikt om beheerde schijven te versleutelen.
  • U hebt Azure CLI versie 2.11.1 of hoger nodig.
  • Gegevensschijfversleuteling en door de klant beheerde sleutels worden ondersteund in Kubernetes-versies 1.24 en hoger.
  • Als u ervoor kiest om uw sleutels periodiek te roteren (wijzigen), raadpleegt u Door de klant beheerde sleutels en versleuteling van azure managed disk voor meer informatie.

Beperkingen

  • Versleuteling van een besturingssysteemschijf met door de klant beheerde sleutels kan alleen worden ingeschakeld bij het maken van een AKS-cluster.

  • Virtuele knooppunten worden niet ondersteund.

  • Wanneer u een tijdelijke knooppuntgroep van het besturingssysteem versleutelt met door de klant beheerde sleutels, moet u het volgende doen als u de sleutel in Azure Key Vault wilt draaien:

    • Het aantal knooppuntgroepen omlaag schalen naar 0
    • De sleutel draaien
    • Schaal de knooppuntgroep omhoog naar het oorspronkelijke aantal.

Een Azure Key Vault-exemplaar maken

Gebruik een Azure Key Vault-exemplaar om uw sleutels op te slaan. U kunt eventueel Azure Portal gebruiken om door de klant beheerde sleutels te configureren met Azure Key Vault

Maak een nieuwe resourcegroep en maak vervolgens een nieuw Key Vault-exemplaar en schakel voorlopig verwijderen en beveiliging tegen opschonen in. Zorg ervoor dat u voor elke opdracht dezelfde regio- en resourcegroepnamen gebruikt.

# 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

Een exemplaar van een DiskEncryptionSet maken

Vervang myKeyVaultName door de naam van uw sleutelkluis. U hebt ook een sleutel nodig die is opgeslagen in Azure Key Vault om de volgende stappen uit te voeren. Sla uw bestaande sleutel op in de sleutelkluis die u in de vorige stappen hebt gemaakt, of genereer een nieuwe sleutel en vervang myKeyName door de naam van uw sleutel.

# 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

Belangrijk

Zorg ervoor dat de DiskEncryptionSet zich in dezelfde regio bevindt als uw AKS-cluster en dat de AKS-clusteridentiteit leestoegang heeft tot de DiskEncryptionSet.

De DiskEncryptionSet toegang verlenen tot de sleutelkluis

Gebruik de DiskEncryptionSet en resourcegroepen die u in de vorige stappen hebt gemaakt en ververleent de DiskEncryptionSet-resource toegang tot de 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

Een nieuw AKS-cluster maken en de besturingssysteemschijf versleutelen

Maak een nieuwe resourcegroep of selecteer een bestaande resourcegroep die als host fungeert voor andere AKS-clusters en gebruik vervolgens uw sleutel om te versleutelen met behulp van besturingssysteemschijven die zijn gekoppeld aan het netwerk of tijdelijke besturingssysteemschijf. Een cluster maakt standaard gebruik van tijdelijke besturingssysteemschijf, indien mogelijk in combinatie met vm-grootte en schijfgrootte van het besturingssysteem.

Voer de volgende opdracht uit om de waarde DiskEncryptionSet op te halen en een variabele in te stellen:

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

Als u een nieuwe resourcegroep voor het cluster wilt maken, voert u de volgende opdracht uit:

az group create --name myResourceGroup --location myAzureRegionName

Als u een normaal cluster wilt maken met behulp van besturingssysteemschijven die zijn versleuteld met uw sleutel, kunt u dit doen door het --node-osdisk-type=Managed argument op te geven.

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

Als u een cluster wilt maken met tijdelijke besturingssysteemschijf die is versleuteld met uw sleutel, kunt u dit doen door het --node-osdisk-type=Ephemeral argument op te geven. U moet ook het argument --node-vm-size opgeven omdat de standaard-VM-grootte te klein is en geen tijdelijke besturingssysteemschijf ondersteunt.

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

Wanneer er nieuwe knooppuntgroepen aan het cluster worden toegevoegd, wordt de door de klant beheerde sleutel gebruikt voor het versleutelen van de besturingssysteemschijf. In het volgende voorbeeld ziet u hoe u een nieuwe knooppuntgroep implementeert met een tijdelijke besturingssysteemschijf.

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

Uw AKS-clustergegevensschijf versleutelen

Als u tijdens het maken van een cluster al een schijfversleutelingsset hebt opgegeven, is het versleutelen van gegevensschijven met dezelfde schijfversleutelingsset de standaardoptie. Daarom is deze stap optioneel. Als u echter gegevensschijven wilt versleutelen met een andere schijfversleutelingsset, kunt u deze stappen volgen.

Belangrijk

Zorg ervoor dat u over de juiste AKS-referenties beschikt. De beheerde identiteit moet inzendertoegang hebben tot de resourcegroep waar de diskencryptionset wordt geïmplementeerd. Anders krijgt u een foutmelding met de suggestie dat de beheerde identiteit geen machtigingen heeft.

Voer de volgende opdrachten uit om de AKS-clusteridentiteit toe te wijzen aan de rol Inzender voor de 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

Maak een bestand met de naam byok-azure-disk.yaml met de volgende informatie. Vervang myAzureSubscriptionId, myResourceGroup en myDiskEncrptionSetName door uw waarden en pas de yaml toe. Zorg ervoor dat u de resourcegroep gebruikt waarin uw DiskEncryptionSet is geïmplementeerd.

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}"

Voer vervolgens de volgende opdrachten uit om uw AKS-cluster bij te werken:

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

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

Volgende stappen

Best practices voor AKS-clusterbeveiliging bekijken