EC2Config로 Windows Sysprep을 사용해 AMI 만들기

EC2Config로 Windows Sysprep을 사용해 AMI 만들기 (Create an AMI using Windows Sysprep with EC2Config)

EC2Config 서비스가 설치된 인스턴스에서 이미지를 만들면, EC2Config가 이미지를 준비하는 동안 특정 작업을 수행해요. 여기에는 Windows Sysprep 작업이 포함돼요.

출처: 문서

본문

Windows Sysprep 동작 (Windows Sysprep actions)

이미지를 준비할 때 Windows Sysprep과 EC2Config 서비스는 다음 동작을 수행해요.

  • EC2 Service Properties 대화 상자에서 Shutdown with Sysprep을 선택하면 시스템이 ec2config.exe -sysprep 명령을 실행해요.
  • EC2Config 서비스가 BundleConfig.xml 파일의 내용을 읽어요. 이 파일은 기본적으로 C:\Program Files\Amazon\Ec2ConfigService\Settings 디렉터리에 있어요.

BundleConfig.xml 파일에는 다음 설정이 포함되어 있고, 변경할 수 있어요.

  • AutoSysprep – Windows Sysprep을 자동으로 사용할지 여부를 나타내요. EC2 Service Properties 대화 상자에서 Windows Sysprep을 실행한다면 이 값을 바꿀 필요가 없어요. 기본값은 No예요.
  • SetRDPCertificate – 원격 데스크톱 서버용 자체 서명 인증서를 설정해요. 이렇게 하면 RDP(Remote Desktop Protocol)로 안전하게 인스턴스에 연결할 수 있어요. 새 인스턴스가 인증서를 사용해야 한다면 Yes로 바꾸세요. Windows Server 2012 인스턴스는 자체 인증서를 생성할 수 있어서 이 설정을 쓰지 않아요. 기본값은 No예요.
  • SetPasswordAfterSysprep – 새로 시작한 인스턴스에 임의의 비밀번호를 설정하고, 사용자 시작 키로 암호화한 뒤 콘솔에 출력해요. 새 인스턴스에 임의의 암호화된 비밀번호를 설정하지 않으려면 No로 바꾸세요. 기본값은 Yes예요.
  • PreSysprepRunCmd – 실행할 명령의 위치예요. 기본적으로 C:\Program Files\Amazon\Ec2ConfigService\Scripts\BeforeSysprep.cmd에 있어요.

시스템이 BeforeSysprep.cmd를 실행하면 다음과 같이 레지스트리 키를 만들면서 RDP를 비활성화해요.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f

RDP 연결을 비활성화하는 건 필요한 보안 조치예요. Windows Sysprep 실행 후 첫 부팅 세션에는 RDP가 연결을 허용하고 Administrator 비밀번호가 비어 있는 짧은 시간이 있기 때문이에요.

EC2Config 서비스는 다음 명령을 실행해 Windows Sysprep을 호출해요.

sysprep.exe /unattend: "C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /generalize /shutdown

일반화 단계 (Generalize phase)

도구가 컴퓨터 이름과 SID 같은 이미지별 정보와 구성을 제거해요. 인스턴스가 도메인 구성원이면 도메인에서 제거돼요. sysprep2008.xml 응답 파일에는 이 단계에 영향을 주는 다음 설정이 포함돼 있어요.

  • PersistAllDeviceInstalls – Windows Setup이 장치를 제거하고 다시 구성하는 것을 막아 이미지 준비 과정을 빠르게 해요. Amazon AMI는 특정 드라이버가 필요하고 그 드라이버를 다시 감지하는 데 시간이 걸리기 때문이에요.
  • DoNotCleanUpNonPresentDevices – 현재 없는 장치의 Plug and Play 정보를 유지해요.

Windows Sysprep은 AMI를 만들 준비를 하면서 OS를 종료해요. 시스템은 새 인스턴스를 시작하거나 원래 인스턴스를 시작해요.

특수화 단계 (Specialize phase)

시스템이 컴퓨터 이름과 SID 같은 OS별 요구사항을 생성해요. 또한 sysprep2008.xml 응답 파일에 지정한 구성에 따라 다음 동작을 수행해요.

  • CopyProfile – Windows Sysprep이 기본 제공 Administrator 프로필을 포함한 모든 사용자 프로필을 삭제하도록 구성할 수 있어요. 이 설정은 기본 제공 Administrator 계정을 유지해서 그 계정에 대한 맞춤 설정이 새 이미지로 전달되게 해요. 기본값은 True예요.
    • CopyProfile은 기본 프로필을 기존 로컬 관리자 프로필로 교체해요. Windows Sysprep 실행 후 로그인하는 모든 계정은 첫 로그인 시 그 프로필과 내용의 복사본을 받아요.
    • 새 이미지로 전달할 특정 사용자 프로필 맞춤 설정이 없다면 이 설정을 False로 바꾸세요. Windows Sysprep이 모든 사용자 프로필을 제거해서 시간과 디스크 공간을 절약해요.
  • TimeZone – 기본적으로 시간대가 협정 세계시(UTC)로 설정돼요.
  • synchronous command order 1 – 시스템이 Administrator 계정을 활성화하고 비밀번호 요구사항을 지정하는 다음 명령을 실행해요.
    net user Administrator /ACTIVE:YES /LOGONPASSWORDCHG:NO /EXPIRES:NEVER /PASSWORDREQ:YES
    
  • synchronous command order 2 – 시스템이 관리자 비밀번호를 무작위화해요. ec2setpassword 설정을 활성화하지 않았다면 Windows Sysprep 완료 후 인스턴스에 접근하지 못하게 하는 보안 조치예요.
    C:\Program Files\Amazon\Ec2ConfigService\ScramblePassword.exe" -u Administrator
    
  • synchronous command order 3 – 시스템이 다음 명령을 실행해요.
    C:\Program Files\Amazon\Ec2ConfigService\Scripts\SysprepSpecializePhase.cmd
    
    이 명령은 RDP를 다시 활성화하는 다음 레지스트리 키를 추가해요.
    reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
    

OOBE 단계 (OOBE phase)

EC2Config 서비스 응답 파일로 시스템은 다음 구성을 지정해요.

  • <InputLocale>en-US</InputLocale>
  • <SystemLocale>en-US</SystemLocale>
  • <UILanguage>en-US</UILanguage>
  • <UserLocale>en-US</UserLocale>
  • <HideEULAPage>true</HideEULAPage>
  • <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
  • <NetworkLocation>Other</NetworkLocation>
  • <ProtectYourPC>3</ProtectYourPC>
  • <BluetoothTaskbarIconEnabled>false</BluetoothTaskbarIconEnabled>
  • <TimeZone>UTC</TimeZone>
  • <RegisteredOrganization>Amazon.com</RegisteredOrganization>
  • <RegisteredOwner>Amazon</RegisteredOwner>

참고: 일반화(generalize)와 특수화(specialize) 단계 동안 EC2Config 서비스는 OS 상태를 모니터링해요. EC2Config가 OS가 Sysprep 단계에 있다고 감지하면 시스템 로그에 다음 메시지를 게시해요.

EC2ConfigMonitorState: 0 Windows is being configured. SysprepState=IMAGE_STATE_UNDEPLOYABLE

OOBE 단계가 끝나면 시스템이 C:\Windows\Setup\Scripts\SetupComplete.cmd에서 SetupComplete.cmd를 실행해요. 2015년 4월 이전의 Amazon 공용 AMI에서는 이 파일이 비어 있었고 아무것도 실행하지 않았어요. 2015년 4월 이후 공용 AMI에서는 파일에 다음 값이 포함돼 있어요: call "C:\Program Files\Amazon\Ec2ConfigService\Scripts\PostSysprep.cmd".

시스템은 PostSysprep.cmd를 실행하며 다음 작업을 수행해요.

  • 로컬 Administrator 비밀번호가 만료되지 않도록 설정해요. 비밀번호가 만료되면 관리자가 로그인하지 못할 수 있어요.
  • 설치되어 있다면 MSSQLServer 머신 이름을 AMI와 동기화되도록 설정해요.

Sysprep 이후 (Post Sysprep)

Windows Sysprep이 완료되면 EC2Config 서비스가 콘솔 출력에 다음 메시지를 보내요.

Windows sysprep configuration complete.
Message: Sysprep Start
Message: Sysprep End

EC2Config는 이어서 다음 작업을 수행해요.

  • config.xml 파일의 내용을 읽고 활성화된 모든 플러그인을 나열해요.
  • 모든 "Before Windows is ready" 플러그인을 동시에 실행해요: Ec2SetPassword, Ec2SetComputerName, Ec2InitializeDrives, Ec2EventLog, Ec2ConfigureRDP, Ec2OutputRDPCert, Ec2SetDriveLetter, Ec2WindowsActivate, Ec2DynamicBootVolumeSize.
  • 끝나면 인스턴스 시스템 로그에 "Windows is ready" 메시지를 보내요.
  • 모든 "After Windows is ready" 플러그인을 동시에 실행해요: Amazon CloudWatch Logs, UserData, AWS Systems Manager(Sysyems Manager).

Windows 플러그인에 대한 자세한 내용은 "Use the EC2Config service to perform tasks during EC2 legacy Windows operating system instance launch"를 참고하세요.

EC2Config 서비스로 Windows Sysprep 실행하기 (Run Windows Sysprep with the EC2Config service)

표준화된 AMI를 만들려면 다음 절차를 따라요.

  1. Amazon EC2 콘솔에서 복제할 AMI를 찾거나 만드세요.
  2. Windows 인스턴스를 시작하고 연결하세요.
  3. 인스턴스를 맞춤 구성하세요.
  4. EC2Config 서비스 응답 파일에 구성 설정을 지정해요: C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml
  5. Windows Start 메뉴에서 All Programs, EC2ConfigService Settings를 선택해요.
  6. Ec2 Service Properties 대화 상자에서 Image 탭을 선택해요.
  7. Administrator 비밀번호 옵션을 선택한 뒤 Shutdown with Sysprep 또는 Shutdown without Sysprep을 선택해요. EC2Config가 선택한 비밀번호 옵션에 따라 설정 파일을 편집해요.
    • Random – EC2Config가 비밀번호를 생성해 사용자 키로 암호화한 뒤 콘솔에 표시해요. 첫 시작 후에는 이 설정을 비활성화해서, 인스턴스를 재부팅하거나 중지·시작해도 이 비밀번호가 유지되게 해요.
    • Specify – 비밀번호가 암호화되지 않은 형태(평문)로 Windows Sysprep 응답 파일에 저장돼요. 다음에 Windows Sysprep을 실행할 때 Administrator 비밀번호를 설정해요. 지금 종료하면 비밀번호가 즉시 설정되고, 서비스가 다시 시작되면 Administrator 비밀번호가 제거돼요. 나중에 검색할 수 없으므로 이 비밀번호를 반드시 기억하세요.
    • Keep Existing – Windows Sysprep 실행이나 EC2Config 재시작 시 Administrator 계정의 기존 비밀번호를 바꾸지 않아요. 나중에 검색할 수 없으므로 기억해야 해요.
  8. OK를 선택해요. Windows Sysprep을 실행하고 인스턴스를 종료할지 확인하는 메시지가 뜨면 Yes를 선택해요. EC2Config가 Windows Sysprep을 실행하고, 로그아웃된 뒤 인스턴스가 종료돼요. EC2 콘솔의 Instances 페이지에서 인스턴스 상태가 Running → Stopping → Stopped로 바뀌는 걸 볼 수 있어요. 이 시점부터 이 인스턴스로 AMI를 만들어도 안전해요.

명령줄에서 수동으로 Windows Sysprep 도구를 호출할 수도 있어요.

"%programfiles%\amazon\ec2configservice\"ec2config.exe -sysprep"

참고: CMD 셸이 이미 C:\Program Files\Amazon\EC2ConfigService\ 디렉터리에 있다면 명령의 큰따옴표는 필요 없어요. 다만 Ec2ConfigService\Settings 폴더에 지정한 XML 파일 옵션이 올바른지 매우 주의해야 해요. 그렇지 않으면 인스턴스에 연결하지 못할 수 있어요. 설정 파일에 대한 자세한 내용과 명령줄에서 Windows Sysprep을 구성·실행하는 예시는 각각 "EC2Config settings files"와 Ec2ConfigService\Scripts\InstallUpdates.ps1을 참고하세요.

더 알아보기