Bring Your Own Key (BYOK) mit verwalteten Azure-Datenträgern in Azure Kubernetes Service (AKS)

Azure verschlüsselt alle ruhenden Daten auf einem verwalteten Datenträger. Standardmäßig werden Daten mit von Microsoft verwalteten Schlüsseln verschlüsselt. Für mehr Kontrolle über Verschlüsselungsschlüssel können Sie vom Kunden verwaltete Schlüssel zur Verwendung für die Verschlüsselung im Ruhezustand sowohl für das Betriebssystem als auch für Datenfestplatten für Ihre AKS-Cluster bereitstellen.

Erfahren Sie mehr über kundenseitig verwaltete Schlüssel unter Linux und Windows.

Voraussetzungen

  • Sie müssen vorläufiges Löschen und den Schutz vor endgültigem Löschen für Azure Key Vault aktivieren, wenn Sie Key Vault zum Verschlüsseln von verwalteten Datenträgern verwenden.
  • Sie benötigen mindestens Version 2.11.1 der Azure-Befehlszeilenschnittstelle.
  • Die Verschlüsselung von Datenträgern und kundenseitig verwaltete Schlüssel werden in Kubernetes-Versionen 1.24 und höher unterstützt.
  • Wenn Sie sich dafür entscheiden, Ihre Schlüssel regelmäßig zu rotieren (zu ändern), finden Sie weitere Informationen unter Vom Kunden verwaltete Schlüssel und Verschlüsselung von Azure verwalteten Datenträgern.

Begrenzungen

  • Die Verschlüsselung eines Betriebssystemdatenträgers mit kundenseitig verwalteten Schlüsseln kann nur beim Erstellen eines AKS-Clusters aktiviert werden.

  • Virtuelle Knoten werden nicht unterstützt.

  • Wenn Sie einen für kurzlebige Betriebssystemdatenträger aktivierten Knotenpool mit vom Kunden verwalteten Schlüsseln verschlüsseln und den Schlüssel in Azure Key Vault drehen wollen, müssen Sie Folgendes tun:

    • Herunterskalieren der Anzahl der Knotenpools auf 0
    • Rotieren des Schlüssels
    • Heraufskalieren der Anzahl der Knotenpools auf die ursprüngliche Anzahl

Erstellen einer Azure Key Vault-Instanz

Verwenden Sie eine Azure Key Vault-Instanz zum Speichern Ihrer Schlüssel. Sie können optional das Azure-Portal verwenden, um kundenseitig verwaltete Schlüsseln mit Azure Key Vault zu konfigurieren.

Erstellen Sie eine neue Ressourcengruppe, erstellen Sie dann eine neue Key Vault-Instanz, und aktivieren Sie vorläufiges Löschen und den Schutz vor endgültigem Löschen. Stellen Sie sicher, dass Sie dieselben Regions- und Ressourcengruppennamen für jeden Befehl verwenden.

# 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

Erstellen einer DiskEncryptionSet-Instanz

Ersetzen Sie myKeyVaultName durch den Namen Ihres Schlüsseltresors. Sie benötigen außerdem einen in Azure Key Vault gespeicherten Schlüssel, um die folgenden Schritte auszuführen. Speichern Sie in dem Key Vault entweder Ihren vorhandenen Schlüssel, den Sie in den vorherigen Schritten erstellt haben, oder generieren Sie einen neuen Schlüssel und ersetzen Sie unten myKeyName durch den Namen Ihres Schlüssels.

# 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

Wichtig

Stellen Sie sicher, dass sich das DiskEncryptionSet in derselben Region befindet wie Ihr AKS-Cluster und dass die AKS-Cluster-Identität Lesezugriff auf das DiskEncryptionSet hat.

Gewähren des DiskEncryptionSet-Zugriffs auf den Schlüsseltresor

Verwenden Sie DiskEncryptionSet und Ressourcengruppen, die Sie in den vorherigen Schritten erstellt haben, und gewähren Sie der DiskEncryptionSet-Ressource Zugriff auf den 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

Erstellen eines neuen AKS-Clusters und Verschlüsseln des Betriebssystemdatenträgers

Erstellen Sie entweder eine neue Ressourcengruppe oder wählen Sie eine vorhandene Ressourcengruppe aus, die andere AKS-Cluster hostet, und verwenden Sie dann Ihren Schlüssel, um die mit dem Netzwerk verbundenen Betriebssystemdatenträger oder kurzlebigen Betriebssystemdatenträger zu verschlüsseln. Standardmäßig verwendet ein Cluster nach Möglichkeit kurzlebige Betriebssystemdatenträger in Verbindung mit der VM-Größe und der Größe des Betriebssystemdatenträgers.

Führen Sie den folgenden Befehl aus, um den DiskEncryptionSet-Wert abzurufen und eine Variable festzulegen:

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

Wenn Sie eine neue Ressourcengruppe für den Cluster erstellen möchten, führen Sie den folgenden Befehl aus:

az group create -n myResourceGroup -l myAzureRegionName

Um einen herkömmlichen Cluster mit an das Netzwerk angefügten und mit Ihrem Schlüssel verschlüsselten Betriebssystemdatenträgern zu erstellen, geben Sie das Argument --node-osdisk-type=Managed an.

az aks create -n myAKSCluster -g myResourceGroup --node-osdisk-diskencryptionset-id $diskEncryptionSetId --generate-ssh-keys --node-osdisk-type Managed

Um einen Cluster mit kurzlebigem Betriebssystemdatenträger zu erstellen, der mit Ihrem Schlüssel verschlüsselt ist, können Sie das Argument --node-osdisk-type=Ephemeral angeben. Sie müssen auch das Argument --node-vm-size angeben, da die Standard-VM-Größe zu klein ist und keine kurzlebigen Betriebssystemdatenträger unterstützt.

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

Wenn neue Knotenpools zum Cluster hinzugefügt werden, wird der vom Kunden verwaltete Schlüssel, der während des Erstellungsprozesses bereitgestellt wird, zur Verschlüsselung des Betriebssystemdatenträgers verwendet. Das folgende Beispiel zeigt, wie Sie einen neuen Knotenpool mit einem kurzlebigen Betriebssystemdatenträger einrichten.

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

Verschlüsseln Ihres AKS-Clusterdatenträgers für Daten

Wenn Sie bereits während der Clustererstellung einen Datenträgerverschlüsselungssatz bereitgestellt haben, ist das Verschlüsseln von Datenträgern mit demselben Datenträgerverschlüsselungssatz die Standardoption. Deshalb ist dieser Schritt optional. Wenn Sie jedoch Datenträger mit einem anderen Datenträgerverschlüsselungssatz verschlüsseln möchten, können Sie die folgenden Schritte ausführen.

Wichtig

Stellen Sie sicher, dass Sie über die richtigen AKS-Anmeldeinformationen verfügen. Die verwaltete Identität muss Mitwirkendenzugriff auf die Ressourcengruppe haben, in der das Diskencryptionset bereitgestellt wird. Andernfalls erhalten Sie eine Fehlermeldung, die darauf hinweist, dass die verwaltete Identität keine Berechtigungen hat.

Um der AKS-Cluster-Identität die Rolle Mitwirkende*r für das Festplattenverschlüsselungsset zuzuweisen, führen Sie die folgenden Befehle aus:

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

Erstellen Sie eine Datei namens byok-azure-disk.yaml, die folgende Informationen enthält. Ersetzen Sie myAzureSubscriptionId, myResourceGroup und myDiskEncrptionSetName durch Ihre Werte, und wenden Sie die YAML-Datei an. Stellen Sie sicher, dass Sie die Ressourcengruppe verwenden, in der Ihr DiskEncryptionSet bereitgestellt ist.

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

Führen Sie als Nächstes folgende Befehle aus, um Ihren AKS-Cluster zu aktualisieren:

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

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

Nächste Schritte

Lesen Sie Bewährte Methoden für AKS-Clustersicherheit.