Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

EC2Rescue all'opera: come recuperare le password perse sulle istanze Windows AWS

By Ciara-CloudDec 7, 20236 min read

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Di recente mi sono trovato ad affrontare un imprevisto lavorando con AWS EC2 Windows.

Avevo creato un'Amazon Machine Image (AMI) cifrata della mia istanza Windows EC2 e mi sono bloccato nel momento in cui non sono riuscito a recuperare la password Administrator dell'istanza avviata da quell'AMI cifrata.

È stata una sorpresa, perché si discostava da quanto avevo sperimentato fino a quel momento con le AMI non cifrate. Sono poi riuscito a risolvere reimpostando la password tramite un'istanza EC2 di ripristino.

In questo articolo vi illustro i passaggi che ho seguito per superare l'ostacolo.

Creare un'istanza cifrata

Di recente ho avuto la necessità di mettere in sicurezza l'istanza Windows con cui stavo lavorando su AWS. La soluzione? Creare un'Amazon Machine Image (AMI) cifrata dell'istanza.

Per prima cosa ho generato un'AMI dell'istanza Windows. Per cifrarla l'ho copiata applicando l'impostazione di cifratura.

Dall'AMI cifrata ho avviato una nuova istanza Windows.

Prima di connettermi, ho atteso che l'istanza passasse allo stato running e superasse entrambi gli status check.

Connessione a EC2 Windows

Quando ho provato a recuperare la password Administrator di Windows non ci sono riuscito. Il messaggio di errore indicava come causa l'AMI personalizzata.

Ho quindi provato a recuperare i dati cifrati della password con il comando EC2 get-password-data, ma il campo PasswordData risultava vuoto. La documentazione AWS specifica che la generazione e la cifratura della password possono richiedere alcuni minuti: se si tenta di recuperarla prima che sia disponibile, l'output restituisce una stringa vuota.


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

Tuttavia, dopo un po' di attesa, è apparso chiaro che l'istanza non conteneva la password Administrator.

Perché la password non c'è?

L'avvio di un'istanza Windows genera una password univoca per l'account Administrator, cifrata con la coppia di chiavi specificata al momento del lancio. Per decifrarla è necessario disporre del file della chiave corrispondente.

Quando si crea un'AMI a partire da un'istanza, i dati presenti sui volumi EBS vengono salvati in nuovi snapshot EBS. La password dell'account Administrator, però, non viene inclusa: è una misura di sicurezza pensata per garantire che ogni istanza abbia una password univoca.

Il servizio EC2Config o gli script EC2Launch (validi per Windows Server 2016 e versioni successive) generano la password Windows durante il boot, ma soltanto al primo avvio dell'istanza.

Se la password non viene generata nelle AMI ricreate (rebundled), non è più recuperabile. Questo accade quando EC2SetPassword non è attivato prima del bundling dell'AMI.

Ecco perché non riuscivo a ottenere la password Administrator della mia istanza cifrata.

Come riportato nella documentazione AWS:

Se la generazione della password è disabilitata e non si ricorda la password dell'istanza originale, è possibile reimpostare la password per questa istanza.

Reimpostare la password

Per reimpostare la password occorre scollegare il volume root dall'istanza Windows e collegarlo come volume secondario a un'istanza temporanea.

Per comodità, chiamerò Broken Instance l'istanza che richiede il reset della password e Recovery Instance quella temporanea.

Attenzione: entrambe devono trovarsi nella stessa Availability Zone.

  1. Selezionare la Broken Instance e scegliere Actions, Instance state, Stop instance. Quando lo stato passa a Stopped, procedere al passaggio successivo.
  2. Annotare il device mapping del volume root della Broken Instance (/dev/sda1).
  3. Scollegare il volume root dalla Broken Instance scegliendo Actions, Detach Volume. Quando lo stato del volume diventa available, procedere al passaggio successivo.
  4. Avviare un'istanza temporanea nella stessa AZ della Broken Instance.
  • Nella pagina Launch an instance, in Network settings selezionare la Subnet in cui si trova la Broken Instance.

  • In Configure storage selezionare Advanced.

  • Nel campo Encrypted modificare 'Not encrypted' in 'Encrypted'.
  • Selezionare la chiave KMS con cui cifrare il volume.

  • In Advanced collegare un IAM instance profile, verificando che disponga dei permessi KMS necessari.

L'instance profile contiene un ruolo IAM i cui permessi vengono usati dall'istanza per interagire con i volumi cifrati collegati.

5. Attendere che la Recovery Instance sia in stato running e che entrambi gli status check risultino superati.

6. Nel pannello di navigazione scegliere Volumes, selezionare il volume scollegato dalla Broken Instance e quindi Actions, Attach Volume.

  • Nella finestra di dialogo Attach Volume, in Instances, selezionare la Recovery Instance dall'elenco.
  • In Device, digitare xvdf (se non è già presente) e scegliere Attach.

**Reimpostare la password Administrator**

Connettersi alla Recovery Instance tramite RDP.

Aprire una finestra del browser e scaricare lo strumento EC2Rescue for Windows Server dal seguente link:

https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue\_latest.zip

Estrarre il contenuto ed eseguire EC2Rescue.exe.

  • Leggere il contratto di licenza e accettarne i termini facendo clic sul pulsante I Agree.

Nella schermata Welcome to EC2Rescue selezionare Next.

Nella schermata Select mode scegliere Offline instance.

Nella schermata Select a disk, selezionare il dispositivo xvdf e scegliere Next.

Se compare l'errore 'The media is write protected', occorre disattivare la protezione sul disco.

L'errore segnala che Windows sta impedendo le modifiche al disco. Per rimuovere l'attributo di sola lettura si utilizza l'utility Diskpart. Ecco come procedere:

  • Aprire il Prompt dei comandi come amministratore.
  • Digitare diskpart e premere Invio.
  • Digitare list disk e premere Invio per visualizzare l'elenco di tutti i dischi del sistema.
  • Digitare select disk X (sostituendo X con il numero del disco interessato) e premere Invio.
  • Digitare attributes disk clear readonly e premere Invio: in questo modo si rimuove l'attributo di sola lettura.

Una volta caricato il volume, scegliere OK.

Nella schermata Select Offline Instance Option scegliere Diagnose and Rescue. Nella schermata Summary verificare le informazioni e scegliere Next.

Nella schermata Detected possible issues, selezionare Reset Administrator Password e scegliere Next.

Nella schermata Confirm, scegliere Rescue e poi OK.

Nella schermata Done, scegliere Finish.

Consultare l'EC2 Rescue Log per accertarsi che non siano comparsi errori o messaggi di avviso.

Chiudere lo strumento EC2Rescue for Windows Server, disconnettersi dall'istanza temporanea e tornare alla console di Amazon EC2.

Riavviare l'istanza

Scollegare il volume secondario (xvdf) dalla Recovery Instance e ricollegarlo all'istanza originale come volume root (/dev/sda1).

Prima di connettersi, verificare che l'istanza sia in esecuzione e che superi gli status check.

A questo punto sono finalmente riuscito a ottenere la password Administrator e ad accedere via RDP all'istanza cifrata. La stessa password si ottiene anche con il comando EC2 get-password-data.

Ricordatevi di terminare la Recovery Instance e di rimuovere eventuali altre istanze non più necessarie.