[AWS Windows] Windows EC2 비밀번호 복구 (EC2Config & EC2Rescue)
문제 상황
Windows EC2는 key pair를 해독한 비밀번호로 접속할 수 있다.
이런 윈도우 서버들에 Sysprep 설정을 하지 않은 채로 AMI를 뜬 후 복구를 하게 된다면, 암호를 사용할 수 없게 된다
따라서 윈도우 EC2는 AMI를 뜨기 전에 Sysprep을 설정해 비밀번호를 초기화 시켜놔야 한다
-> 참조 : [AWS Windows] Windows EC2 AMI 뜨기 전 Sysprep 설정 (비밀번호 초기화)
그러나 Sysprep 없이 이미 AMI를 떴더라도 복구 방법은 다 있다
해결 방법
암호를 복구해야 하는 AMI가 윈도우 2016 이전인 경우 :
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/ResettingAdminPassword_EC2Config.html
2016 이후인 경우 :
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/ResettingAdminPassword_EC2Launch.html
테스트 환경
- 암호 복구할 Window 2012 서버 (이하 w2012)
- 암호 복구할 Window 2019 서버 (이하 w2019)
- 위 두 서버의 암호 복구를 도와줄 임시 서버 (이하 temp)
복구 시작!
1. w2012, w2019 둘 다 stop 후 루트볼륨 Detach (루트볼륨은 stop해야지만 Dstach가 가능하다)
2. 두 루트볼륨을 모두 temp 서버에 Attach
w2012의 루트볼륨은 자동으로 마운트 되어있지만, w2019꺼는 Offline 상태다
아마 2016 이전의 window 루트 볼륨만 자동 마운트가 되는듯하다 (일단은 가설임)
2019 볼륨은 Offline 상태여도 되므로 이대로 진행하면 된다
3. w2012 복구
w2012의 루트(E)로 들어가서, 아래 경로의 config 파일을 찾아 연다
\Program Files\Amazon\Ec2ConfigService\Settings\config.xml
Ec2SetPassword
를 Enabled
로 수정해주면 끝이다
4. w2019 복구
EC2Rescue for Window Server 다운 : https://s3.amazonaws.com/ec2rescue/windows/EC2Rescue_latest.zip
위 압축파일을 temp서버에 넣고 압축을 풀어주고 EC2Rescue.exe
를 실행한다
I Agree > Next > Offline instance > w2019 디스크 선택 > Next > OK > OK
볼륨이 많아 헷갈린다면 볼륨을 Attach할 때 설정한 Device를 기준으로 찾으면 된다 (난 xvdg로 붙였음)
볼륨 로드가 완료되었다. Diagnose and Rescue > Next 를 누르면 아래와 같이 감지된 잠재적 문제 화면이 나온다
여기서 Reset Administrator Password 선택 후 Next > Rescue
성공! 먼가 Fail이 뜨더라도 그대로 다시 해보면 될 수도 있다
아무튼 둘 다 설정을 마쳤으니 다시 Password 설정이 가능한지 확인해보겠다
5. temp 서버 stop 후 w2012, w2019의 루트볼륨 Detach
6. w2012, w2019 각각의 서버에 볼륨 다시 Attach
이 때 Device name은 /dev/sda1
이라고 꼭 설정해줘야 한다 (루트라서)
7. 비밀번호 재설정 가능 여부 확인
w2012, w2019를 start 시키고 Connect > RDP client > Get password 눌러보면
두 서버 모두 pem키 해독 후 비밀번호를 받아올 수 있게 되었다
끝!
후기
왜 윈도우 버전이 높아지면서 더 귀찮아졌는가...파일 설치까지 해야되는게 좀 귀찮다
System Manager Run Command로 EC2Rescue 사용하는 방법도 있는 것 같지만 KMS 키도 필요하고 편해보이진 않다
https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2rw-ssm.html
2016 이하 버전은 자동 마운트에 Script 수정만 하면 되므로 RunCommand를 활용해 자동으로 수정시킬수도 있다
참조 : https://cloudest.oopy.io/posting/072
진짜 끝!