Recentemente, me deparei com um desafio inesperado ao trabalhar com AWS EC2 Windows.
Criei uma Amazon Machine Image (AMI) criptografada da minha instância EC2 Windows e travei na hora de recuperar a senha de Administrator da instância iniciada a partir dessa AMI criptografada.
Foi uma surpresa, porque fugia da minha experiência habitual com AMIs não criptografadas. Resolvi a questão redefinindo a senha a partir de uma instância EC2 de recuperação.
Neste post, vou te mostrar o passo a passo de como superei esse desafio.
Criando a instância criptografada
Recentemente, precisei proteger a instância Windows com a qual eu estava trabalhando na AWS. A solução? Criar uma Amazon Machine Image (AMI) criptografada da instância.
Primeiro, gerei uma AMI da minha instância Windows. Para criptografá-la, copiei a AMI e apliquei a configuração de criptografia.


A partir da AMI criptografada, subi uma nova instância Windows.

Esperei a instância ficar em estado running e passar nos dois status checks antes de me conectar a ela.

Conectando ao EC2 Windows
Quando tentei obter a senha de Administrator do Windows, não rolou. Pela mensagem de erro, o motivo era a AMI customizada.

Usando o comando get-password-data do EC2, tentei recuperar os dados criptografados da senha. Notei que o campo PasswordData estava vazio. A documentação da AWS menciona que a geração e a criptografia da senha podem levar alguns minutos. Se você tentar recuperá-la antes de estar disponível, a saída retorna uma string vazia.
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"
}
Mas, depois de esperar um bom tempo, ficou claro que a instância não tinha a senha de Administrator.

Por que não há senha?
Ao iniciar uma instância Windows, é gerada uma senha exclusiva para a conta de Administrator. Essa senha é criptografada com o key pair informado no momento da inicialização. Para descriptografá-la, você precisa fornecer o arquivo do key pair correspondente.
Quando você cria uma AMI a partir de uma instância, os dados dos volumes EBS são salvos em novos snapshots EBS. Mas a senha da conta de Administrator não entra nesses snapshots. É uma medida de segurança para garantir que cada instância tenha uma senha exclusiva.
O serviço EC2Config ou os scripts EC2Launch (aplicáveis ao Windows Server 2016 e versões posteriores) geram a senha do Windows durante o boot. Isso só acontece na primeira inicialização da instância.
Se a senha não for gerada nas AMIs reempacotadas, não há como recuperá-la. Esse cenário pode aparecer quando o EC2SetPassword não é ativado antes de empacotar a AMI.
Foi exatamente por isso que eu não conseguia obter a senha de Administrator da minha instância criptografada.
Conforme a documentação da AWS:
Se a geração de senha estiver desativada e você não lembrar a senha da instância original, é possível redefinir a senha dessa instância.
Redefinindo a senha
Para redefinir a senha, precisamos desanexar o volume raiz da instância Windows e anexá-lo como volume secundário em uma instância temporária.
Vou chamar a instância que precisa da redefinição de senha de Broken Instance. E a instância temporária, de Recovery Instance.
Atenção: as duas instâncias precisam estar na mesma Availability Zone.
- Selecione a Broken Instance e escolha Actions, Instance state, Stop instance. Depois que o status mudar para Stopped, siga para o próximo passo.
- Anote o device mapping do volume raiz da Broken Instance (/dev/sda1).
- Desanexe o volume raiz da Broken Instance. Escolha Actions, Detach Volume. Quando o status do volume mudar para available, siga adiante.
- Suba uma instância temporária na mesma AZ da Broken Instance.
- Na página Launch an instance, em Network settings, selecione a Subnet em que a sua Broken Instance está.

- Em Configure storage, selecione Advanced.

- No campo Encrypted, mude de "Not encrypted" para "Encrypted".
- Selecione a chave KMS que você quer usar para criptografar o volume.

- Em Advanced, anexe um IAM instance profile. Confira se ele tem as permissões de KMS necessárias.

O instance profile contém uma role IAM. A instância usa as permissões dessa role para interagir com os volumes criptografados anexados.
5. Aguarde a Recovery Instance ficar em estado running, com os dois status checks passando.

6. No painel de navegação, clique em Volumes, selecione o volume que você desanexou da Broken Instance e escolha Actions, Attach Volume.

- Na caixa de diálogo Attach Volume, em Instances, selecione a Recovery Instance na lista.
- Em Device, digite
xvdf(se ainda não estiver preenchido) e clique em Attach.
**Redefinindo a senha de Administrator**
Conecte-se à Recovery Instance via RDP.
Abra uma janela do navegador e baixe a ferramenta EC2Rescue for Windows Server pelo link a seguir:
https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue\_latest.zip
Extraia o conteúdo e execute o EC2Rescue.exe.

- Leia o contrato de licença e aceite os termos clicando no botão I Agree.
Na tela Welcome to EC2Rescue, clique em Next.

Na tela Select mode, escolha Offline instance.

Na tela Select a disk, selecione o dispositivo xvdf e clique em Next.


Se aparecer o erro "The media is write protected", você vai precisar desativar essa proteção no disco.

Esse erro significa que o Windows está bloqueando alterações no disco. Use o utilitário Diskpart para limpar o atributo somente leitura. Veja como:
- Abra o Prompt de Comando como administrador.
- Digite
diskparte pressione Enter. - Digite
list diske pressione Enter. Vai aparecer a lista de todos os discos do sistema. - Digite
select disk X(substitua X pelo número do disco com problema) e pressione Enter. - Digite
attributes disk clear readonlye pressione Enter. Isso deve remover o atributo somente leitura do disco.


Depois que o volume carregar, clique em OK.
Na tela Select Offline Instance Option, escolha Diagnose and Rescue. Na tela Summary, revise as informações e clique em Next.

Na tela Detected possible issues, selecione Reset Administrator Password e clique em Next.

Na tela Confirm, escolha Rescue e depois OK.


Na tela Done, clique em Finish.

Confira o EC2 Rescue Log para ter certeza de que não houve mensagens de erro ou aviso.

Feche a ferramenta EC2Rescue for Windows Server, desconecte da instância temporária e volte para o console do Amazon EC2.
Reiniciando a instância
Desanexe o volume secundário (xvdf) da Recovery Instance. Reanexe o volume como volume raiz (/dev/sda1) na instância original.

Confirme se a instância está em execução e passando nos status checks antes de se conectar a ela.

Pronto: consegui obter a senha de administrator e acessar a instância criptografada via RDP. A mesma senha é retornada pelo comando EC2 get-password-data.

Não esqueça de encerrar a Recovery Instance e fazer a limpeza de outras instâncias que você não vá mais usar.