Blog

Behebung von ARM-Bereitstellungsfehlern bei der Verschlüsselung von Linux-Festplatten

Peter Groenewegen

Aktualisiert Oktober 21, 2025
4 Minuten

Bei der Ausführung von ARM-Vorlagen für die Bereitstellung von Linux mit Festplattenverschlüsselung auf Azure bin ich auf einige Fehler gestoßen. Die Fehler traten auf, wenn ich dieselbe Vorlage mehrmals ausführte. In diesem Beitrag erkläre ich die Fehler und wie ich sie behoben habe.

Error: ... is not a valid versioned Key Vault Secret URL Der erste Fehler, auf den ich gestoßen bin, hängt mit der Rückmeldung der Verschlüsselungserweiterung (.instanceView.statuses[0].message) zusammen. Die Ergebnismeldung enthält die Key Vault Sercet Url, wenn die Verschlüsselung erfolgreich war. Wenn ich die gleiche Vorlage immer wieder ausführe, erscheinen die folgenden Meldungen:

"Nachricht": "{rn "Fehler": {rn "code": "InvalidParameter",rn "target": "encryptionSettings.diskEncryptionKey.secretUrl",rn "message": "Encryption succeeded for all volumes" ist keine gültige versionierte Key Vault Secret URL. Sie sollte das Format https:// haben. <vaultEndpoint>/secrets/<secretName>/<secretVersion>. "rn }rn}
"Nachricht": "{rn "Fehler": {rn "code": "InvalidParameter",rn "target": "encryptionSettings.diskEncryptionKey.secretUrl",rn "message": "Encryption succeeded for data volumes ist keine gültige versioned Key Vault Secret URL. Sie sollte das Format https:// haben. /Geheimnisse//. "rn }rn}"

Die Ursache für die Meldung ist, dass die Rückmeldung für zwei verschiedene Zwecke verwendet wird:

  1. Rückgabe der geheimen URL des Key Vault
  2. ausführliche Meldungen zurückgeben

Wenn die Erweiterung das erste Mal ausgeführt wird, ist der Rückgabewert die geheime URL des Schlüsseltresors. Wenn die Verschlüsselung abgeschlossen ist, gibt die Erweiterung die ausführliche Meldung zurück, dass die Verschlüsselung erfolgreich war. Die ausführliche Meldung unterbricht die nächste ARM-Vorlage, die die Verschlüsselungsinformationen auf die VM-Konfiguration anwendet.

Idempotente Provisionierung und Konfiguration Wenn Sie eine idempotente Provisionierung und Konfiguration für die Provisionierung erstellen, können Sie Ihre Releases jederzeit erneut ausführen. ARM-Vorlagen sind idempotent. Das bedeutet, dass das Ergebnis jedes Mal, wenn sie ausgeführt werden, genau dasselbe ist. Die Konfiguration wird auf das festgelegt, was Sie in Ihren Definitionen konfiguriert haben. Da die Definitionen deklarativ sind, müssen Sie nicht über die Schritte nachdenken, wie Sie zum Ziel kommen; das System findet das für Sie heraus. Siehe Infrastructure as Code und VSTS

Ich möchte, dass die Erweiterung mir das gleiche Ergebnis liefert, wenn ich die Vorlage mehrmals ausführe (idempotent). Aufgrund der ausführlichen Meldung musste ich eine Lösung finden, um meine Vorlagen erneut anwenden zu können, ohne Fehlermeldungen über die erfolgreiche Festplattenverschlüsselung zu erhalten. Die Lösung bestand darin, den Parameter sequenceVersion für die Festplattenverschlüsselungserweiterung jedes Mal, wenn Sie die ARM-Vorlage ausführen, auf einen neuen Wert zu setzen. sequenceVersion: Sequenzversion des BitLocker-Vorgangs. Erhöhen Sie diese Versionsnummer jedes Mal, wenn ein Festplattenverschlüsselungsvorgang auf derselben VM durchgeführt wird(Dokumentation) Legen Sie die sequenceVersion fest Die Dokumentation zur sequenceVersion legt nahe, dass es sich um eine Zahl handelt, aber es kann alles sein (solange es sich von der letzten Zeichenkette unterscheidet). Leider können Sie in einer ARM-Vorlage keine zufällige Zeichenkette erzeugen, denn das würde die idempotente Eigenschaft verletzen. Um dieses Problem zu lösen, verwende ich einen kleinen Trick, um eine eindeutige Zeichenfolge in meiner Bereitstellungsvorlage zu erzeugen, ohne einen zusätzlichen Parameter hinzuzufügen. Jede Bereitstellung in unserer VSTS-Pipeline erhält einen eindeutigen Namen. Ich habe diesen Namen verwendet, um eine eindeutige Zeichenfolge zu erzeugen:

"Wert":"[uniqueString(resourceGroup().id, deployment().name)]"

Der Name des Deployments ist bei jedem Deployment (Ressourcengruppen-Deployment-Task VSTS) unterschiedlich, z.B.: xxxx-20161208-1436, dies kann genutzt werden, um eindeutige Strings zu erzeugen. Die Funktion deployment().name gibt den Namen der aktuellen Vorlage zurück. Sie müssen sich also in der obersten Vorlage befinden, wenn Sie verknüpfte Vorlagen verwenden, und den Namen von dort aus übergeben. Fehler: Failed to get status file [Errno 2] No such file or directory: ... Wenn Sie die Vorlage mit einer neuen sequenceVersion erneut ausführen, bevor Sie die VM neu gestartet haben (wenn ein Neustart erforderlich ist). Sie erhalten eine neue Fehlermeldung:

"Meldung": "VM hat einen Fehler bei der Verarbeitung der Erweiterung 'AzureDiskEncryptionForLinux' gemeldet. Fehlermeldung: "Failed to get status file [Errno 2] No such file or directory: '/var/lib/waagent/Microsoft.Azure.Security.AzureDiskEncryptionForLinux-0.1.0.999239/status/1.status'"

Um diesen Fehler zu beheben, müssen Sie, wie in der Meldung angedeutet, die VM neu starten. In diesem Beitrag erfahren Sie, wie Sie dies tun können. Fazit Nachdem Sie die eindeutige Zeichenfolge auf die sequenceVersion angewendet haben, funktionieren die Einsätze weiterhin. Das Einzige, worauf Sie achten müssen, ist, dass Sie Ihre VMs neu starten, wenn sie sich im Zustand VMRestartPending befinden.

Verfasst von

Peter Groenewegen

Contact

Let’s discuss how we can support your journey.