windows OS 인스턴스의 초기 비밀번호에 대하여

EC2 windows OS의 비밀번호에 대한 내용을 기재한 포스팅입니다
2021.10.13

안녕하세요 클래스메소드의 수재입니다.
프로젝트 진행 중 EC2의 초기 비밀번호가 바뀌었다는 내용의 상담이 있었습니다.
이에 대하여 조사한 결과를 공유하고자 합니다.

우선은 결과부터

결과 먼저 말하자면 windows의 task scheduler에 있던 EC2 Launch의 task가 실행된 것이 원인이었습니다.
이 task에 Administrator 의 비밀번호를 초기화 하는 작업이 포함되어 있었습니다.
해당 글에서는 이게 어떤 task 이고 무슨 작업을 하는지 알아봅니다.

EC2의 초기 비밀번호

windows AMI를 사용하여 EC2를 작성하면 Administrator 유저의 작성과 함께 비밀번호가 생성됩니다.
이 비밀번호는 EC2의 목록에서 해당 인스턴스의 [연결]에서 [RDP 클라이언트] 를 통해 확인할 수 있습니다.

(6&v로 시작하는 Administrator의 초기 비밀번호를 확인할 수 있습니다)

이 초기 비밀번호를 정의하는 내용이 EC2 Launch의 작업에 포함되어 있습니다.

EC2 Launch v1

EC2Launch는 Windows Server 2016 이후 AMI에서 EC2Config 서비스를 대체한 Windows PowerShell 스크립트 세트입니다 -공식 문서

Windows OS AMI를 이용하는 EC2 인스턴스에서 실행되는 서비스입니다.
이전에는 EC2 Config 서비스를 통하여 이러한 작업을 하였지만 EC2 Launch가 해당 작업을 포함하여 관리하게 되었습니다.
현재는 EC2 Launch v2가 가장 최신 서비스입니다.
단, 해당 상담이 v1에서 일어난 상황이기 때문에 해당 글에서 설명하는 내용은 Launch v1이 기준입니다.

기본 디렉터리는 C:\ProgramData\Amazon\EC2-Windows\Launch이며 각 디렉터리의 목적은 공식 문서를 참고해주세요.

Launch의 초기화 작업은 Launchconfig.json에 지정되어 있습니다. Launch에서는 이 json을 참고하여 초기화 작업을 실행합니다.
Launchconfig.json에 설정 가능한 내용은 다음과 같습니다.

  • 컴퓨터 이름을 설정합니다.
  • 모니터가 항상 켜져 있도록 설정합니다.
  • 새로운 월페이퍼(wallpaper)를 설정합니다.
  • DNS 접미사 목록을 추가합니다.
  • 부팅 볼륨 크기를 확장합니다.
  • 관리자 암호를 설정합니다.

파일의 내용은 다음과 같습니다.

{
  "setComputerName": false,
  "setMonitorAlwaysOn": true,
  "setWallpaper": true,
  "addDnsSuffixList": true,
  "extendBootVolumeSize": true,
  "handleUserData": true,                      
  "adminPasswordType": "Random | Specify | DoNothing",
  "adminPassword":  "password that adheres to your security policy (optional)"
}

이 중 관리자 암호 설정(adminPasswordType)이 인스턴스의 비밀번호를 초기화 하는 작업입니다.
초기에는 이 옵션이 Random으로 지정되어 있기 때문에 인스턴스를 생성하면 임의의 비밀번호가 지정됩니다.

EC2 Launch와 task scheduler

보통은 인스턴스를 생성하고 이 비밀번호는 바뀌지 않습니다.
이유는 Launch를 실행시키는 task가 인스턴스가 생성된 후 기본적으로 비활성화 되기 때문입니다.

(인스턴스 생성 시에 한번 실행한 후 자동으로 disabled로 설정됩니다)

이 task를 활성화한 후 인스턴스를 재부팅해보겠습니다.
그리고 초기 비밀번호를 다시 확인해보면
iDZ로 시작하는 비밀번호로 바뀐 것을 확인할 수 있습니다.
이유는 위에 기재되어 있듯이 adminPasswordTypeRandom으로 지정되어 있기 때문입니다.

방지책

Launchconfig.jsonadminPasswordTypeDoNothing으로 설정하면 됩니다.
혹은 task 자체가 처음 인스턴스를 생성한 후에는 다시 실행되지 않기 때문에 task 자체를 삭제해도 됩니다.

EC2 Launch v2

EC2 Launch v2라면 설정 파일이 좀 다릅니다.
현재 지원되는 운영체제는 다음과 같습니다.

  • Windows Server 2019(장기 서비스 채널 및 연 2회 채널)
  • Windows Server 2016
  • Windows Server 2012 및 2012 R2

EC2 Launch의 작업들

EC2 Launch의 작업은 agent-config.yaml에 정의되어 있습니다.
작업을 설명하기 전 [Task, Stage, Frequency] 라는 개념을 알아 둘 필요가 있습니다.
우선 EC2 Launch는 Task에 정의된 작업을 실행합니다.
그리고 작업이 실행되는 타이밍은 Stage로 정의합니다.
Stage의 실행 순서는 다음과 같습니다.

  1. Boot(부팅)
  2. Network(네트워크)
  3. PreReady(사전 준비)
  4. PostReady(사후 준비)
  5. UserData

그리고 해당 task의 반복을 frequency로 정의합니다.

실행하는 작업은 v1과 조금 다릅니다. 목록은 공식 문서를 참고해주세요.

그 외

이번에는 windows의 event viewer 의 로그를 통하여 이유를 어느정도 추측할 수 있었습니다.
그리고 비밀번호가 바뀐 후에도 인스턴스의 키 페어를 가지고 있었기 때문에 비밀번호를 다시 취득할 수 있었습니다.

만약 키 페어도 없는 상황에 비밀번호가 바뀌어 버렸다면 비밀번호를 재설정 할 필요가 있습니다.
재설정을 위해서 AWS Systems Manager 또는 EC2Rescue를 사용하여 Administrator의 암호를 재설정할 수 있습니다.
자세한 내용은 아래의 공식 페이지를 확인해 주세요.
EC2 Windows 인스턴스에서 관리자 암호를 재설정하려면 어떻게 해야 합니까?

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용의 피드백은 must01940 지메일 로 보내주시면 감사합니다!