Vor Kurzem stand ich bei der Arbeit mit AWS EC2 Windows vor einer unerwarteten Hürde.
Ich hatte ein verschlüsseltes Amazon Machine Image (AMI) meiner Windows-EC2-Instanz erstellt – und kam dann nicht mehr weiter: Das Administrator-Passwort der aus diesem verschlüsselten AMI gestarteten Instanz ließ sich nicht abrufen.
Das hat mich überrascht, denn bei nicht verschlüsselten AMIs hatte ich solche Probleme nie. Am Ende ließ sich das Ganze lösen, indem ich das Passwort über eine Recovery-EC2-Instanz zurückgesetzt habe.
In diesem Blogbeitrag zeige ich Ihnen Schritt für Schritt, wie ich vorgegangen bin.
Verschlüsselte Instanz erstellen
Vor Kurzem musste ich meine Windows-Instanz auf AWS absichern. Die Lösung? Ein verschlüsseltes Amazon Machine Image (AMI) der Instanz erstellen.
Zunächst habe ich ein AMI meiner Windows-Instanz angelegt. Um das AMI zu verschlüsseln, habe ich es kopiert und dabei die Verschlüsselungseinstellung gesetzt.


Aus dem verschlüsselten AMI habe ich anschließend eine neue Windows-Instanz gestartet.

Bevor ich mich verbunden habe, habe ich gewartet, bis die Instanz im Status Running war und beide Status-Checks bestanden hatte.

Verbindung zur EC2-Windows-Instanz herstellen
Beim Versuch, das Windows-Administrator-Passwort abzurufen, kam ich nicht weiter. Laut Fehlermeldung lag das am benutzerdefinierten AMI.

Mit dem EC2-Befehl get-password-data habe ich versucht, die verschlüsselten Passwortdaten abzurufen. Das Feld PasswordData war jedoch leer. Laut AWS-Dokumentation kann es einige Minuten dauern, bis das Passwort generiert und verschlüsselt ist. Ruft man es vorher ab, liefert die Ausgabe einen leeren String zurück.
aws ec2 get-password-data --instance-id i-0ece1184ee316f9f2
--priv-launch-key ~/.ssh/windows.pem --region eu-west-1 --profile ciara
{
"InstanceId": "i-0ece1184ee316f9f2",
"PasswordData": "",
"Timestamp": "2023-11-02T17:34:27+00:00"
}
Auch nach längerer Wartezeit war klar: Die Instanz enthielt schlicht kein Administrator-Passwort.

Warum gibt es kein Passwort?
Beim Start einer Windows-Instanz wird ein eindeutiges Passwort für das Administrator-Konto erzeugt. Verschlüsselt wird es mit dem Schlüsselpaar, das beim Start der Instanz angegeben wurde. Zum Entschlüsseln benötigen Sie die zugehörige Schlüsselpaardatei.
Wenn Sie aus einer Instanz ein AMI erstellen, werden die Daten der EBS-Volumes in neuen EBS-Snapshots gesichert. Das Passwort des Administrator-Kontos ist darin jedoch nicht enthalten – eine Sicherheitsmaßnahme, damit jede Instanz ein eigenes, eindeutiges Passwort erhält.
Der EC2Config-Dienst bzw. die EC2Launch-Skripte (ab Windows Server 2016) erzeugen das Windows-Passwort beim Booten – allerdings nur beim allerersten Start einer Instanz.
Wird das Passwort bei wiederverpackten AMIs nicht erzeugt, lässt es sich nicht abrufen. Genau das passiert, wenn EC2SetPassword vor dem Bündeln des AMIs nicht aktiviert wurde.
Deshalb konnte ich das Administrator-Passwort meiner verschlüsselten Instanz nicht abrufen.
Laut AWS-Dokumentation gilt:
Wenn die Passwortgenerierung deaktiviert ist und Sie das Passwort der ursprünglichen Instanz nicht mehr kennen, können Sie das Passwort für diese Instanz zurücksetzen.
Passwort zurücksetzen
Zum Zurücksetzen des Passworts müssen wir das Root-Volume von der Windows-Instanz trennen und es als sekundäres Volume an eine temporäre Instanz anhängen.
Die Instanz, deren Passwort zurückgesetzt werden soll, nenne ich im Folgenden Broken Instance, die temporäre Instanz Recovery Instance.
Wichtig: Beide Instanzen müssen sich in derselben Availability Zone befinden.
- Wählen Sie die Broken Instance aus und klicken Sie auf Actions, Instance state, Stop instance. Sobald der Status auf Stopped wechselt, geht es weiter.
- Notieren Sie sich das Device Mapping des Root-Volumes der Broken Instance (/dev/sda1).
- Trennen Sie das Root-Volume von der Broken Instance über Actions, Detach Volume. Sobald der Volume-Status auf available wechselt, geht es weiter.
- Starten Sie eine temporäre Instanz in derselben AZ wie die Broken Instance.
- Wählen Sie auf der Seite "Launch an instance" unter Network settings das Subnet aus, in dem auch Ihre Broken Instance liegt.

- Klicken Sie unter Configure storage auf Advanced.

- Stellen Sie das Feld Encrypted von "Not encrypted" auf "Encrypted".
- Wählen Sie den KMS-Schlüssel, mit dem das Volume verschlüsselt werden soll.

- Hängen Sie unter Advanced ein IAM-Instance-Profil an. Achten Sie darauf, dass dieses Profil die nötigen KMS-Berechtigungen mitbringt.

Das Instance-Profil enthält eine IAM-Rolle. Über deren Berechtigungen interagiert die Instanz mit den angehängten verschlüsselten Volumes.
5. Warten Sie, bis die Recovery Instance im Status Running ist und beide Status-Checks bestanden hat.

6. Wählen Sie im Navigationsbereich Volumes, markieren Sie das von der Broken Instance getrennte Volume und klicken Sie dann auf Actions, Attach Volume.

- Wählen Sie im Dialog Attach Volume unter Instances die Recovery Instance aus der Liste.
- Tragen Sie unter Device
xvdfein (sofern nicht bereits vorausgefüllt) und klicken Sie auf Attach.
**Administrator-Passwort zurücksetzen**
Verbinden Sie sich per RDP mit der Recovery Instance.
Öffnen Sie ein Browserfenster und laden Sie das Tool EC2Rescue for Windows Server unter folgendem Link herunter:
https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue\_latest.zip
Entpacken Sie das Archiv und führen Sie EC2Rescue.exe aus.

- Lesen Sie die Lizenzvereinbarung und bestätigen Sie die Bedingungen mit "I Agree".
Klicken Sie im Begrüßungsfenster "Welcome to EC2Rescue" auf Next.

Wählen Sie im Bildschirm Select mode die Option Offline instance.

Wählen Sie im Bildschirm Select a disk das Gerät xvdf aus und klicken Sie auf Next.


Erscheint die Fehlermeldung "The media is write protected", müssen Sie zunächst den Schreibschutz des Datenträgers aufheben.

Diese Meldung bedeutet, dass Windows Änderungen am Datenträger blockiert. Mit dem Tool Diskpart entfernen Sie das Read-only-Attribut. So gehen Sie vor:
- Öffnen Sie die Eingabeaufforderung als Administrator.
- Geben Sie
diskpartein und drücken Sie Enter. - Geben Sie
list diskein und drücken Sie Enter. So erhalten Sie eine Liste aller Datenträger im System. - Geben Sie
select disk Xein (X durch die Nummer des betroffenen Datenträgers ersetzen) und drücken Sie Enter. - Geben Sie
attributes disk clear readonlyein und drücken Sie Enter. Damit sollte das Read-only-Attribut entfernt sein.


Sobald das Volume geladen ist, klicken Sie auf OK.
Wählen Sie im Bildschirm Select Offline Instance Option die Option Diagnose and Rescue. Prüfen Sie im Bildschirm Summary die Angaben und klicken Sie auf Next.

Wählen Sie im Bildschirm Detected possible issues die Option Reset Administrator Password und klicken Sie auf Next.

Klicken Sie im Bildschirm Confirm auf Rescue und anschließend auf OK.


Klicken Sie im Bildschirm Done auf Finish.

Werfen Sie einen Blick ins EC2 Rescue Log und prüfen Sie, dass keine Fehler oder Warnungen aufgetreten sind.

Schließen Sie EC2Rescue for Windows Server, trennen Sie die Verbindung zur temporären Instanz und kehren Sie zur Amazon-EC2-Konsole zurück.
Instanz neu starten
Trennen Sie das sekundäre Volume (xvdf) von der Recovery Instance. Hängen Sie es danach als Root-Volume (/dev/sda1) wieder an die ursprüngliche Instanz an.

Stellen Sie sicher, dass die Instanz läuft und alle Status-Checks bestanden hat, bevor Sie sich verbinden.

Anschließend konnte ich das Administrator-Passwort abrufen und mich per RDP mit der verschlüsselten Instanz verbinden. Dasselbe Passwort liefert auch der EC2-Befehl get-password-data.

Denken Sie daran, die Recovery Instance zu beenden und alle weiteren nicht mehr benötigten Instanzen aufzuräumen.