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 -l myAzureRegionName -n myResourceGroup

# Create an Azure Key Vault resource in a supported Azure region
az keyvault create -n myKeyVaultName -g myResourceGroup -l 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 -n myDiskEncryptionSetName  -l myAzureRegionName  -g 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 -n myDiskEncryptionSetName  -g myResourceGroup --query "[identity.principalId]" -o tsv)

# Update security policy settings
az keyvault set-policy -n myKeyVaultName -g 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 de besturingssysteemschijven met netwerkkoppeling of tijdelijke besturingssysteemschijf te versleutelen. 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 -n mydiskEncryptionSetName -g myResourceGroup --query "[id]" -o tsv)

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

az group create -n myResourceGroup -l 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 -n myAKSCluster -g 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 -n myAKSCluster -g 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 -g $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 -g $RG_NAME -n $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