네트워크를 통한 Windows 인스턴스 커널 디버깅
네트워크를 통한 Windows 인스턴스 커널 디버깅
Elastic Network Adapter(ENA)용 KDNET 확장성 모듈(KDNET Extensibility Module)은 Amazon Elastic Compute Cloud 인스턴스에서 ENA를 통해 네트워크를 통한 Windows 커널 디버깅을 가능하게 하는 하드웨어 드라이버 지원 계층이에요. 이 확장성 모듈을 Windows 디버거(WinDbg)와 함께 사용해 Windows를 실행하는 EC2 인스턴스에서 커널 수준 디버깅을 수행할 수 있어요.
출처: 문서
본문
커널 디버깅은 EC2 Windows 인스턴스에서 블루 스크린 오류(BSOD), 드라이버 장애, 부팅 문제 같은 저수준 운영 체제 문제를 진단·해결하는 데 도움이 돼요.
목차
- 사전 요구 사항
- 1단계: 디버그 호스트에 Windows 디버깅 도구 설치하기
- 2단계: 디버그 대상 설정하기
- 3단계: 디버그 호스트에서 디버깅 세션 시작하기
- 4단계: 디버그 대상 재부팅하기
- 디버깅 후 디버그 설정 정리하기
- 제한 사항
- 추가 참고 사항
사전 요구 사항
시작하기 전에 다음이 있는지 확인하세요.
같은 서브넷에 있는 EC2 Windows 인스턴스 2개:
- 디버그 호스트(debug host) 인스턴스 — Windows 디버거(WinDbg)를 실행합니다.
- 디버그 대상(debug target) 인스턴스 — 디버깅하려는 인스턴스입니다.
인스턴스 실행에 대한 자세한 내용은 Amazon EC2 시작하기 문서를 참고하세요.
호스트와 대상 인스턴스의 보안 그룹은 KDNET 디버깅에 사용되는 포트(권장 범위: 50000–50039)의 인바운드·아웃바운드 UDP 트래픽을 허용해야 해요. 가장 간단한 설정 방법은 소스를 자체로 허용하는 인바운드 규칙이 있는 보안 그룹을 만든 다음, 그 보안 그룹을 두 인스턴스에 모두 연결하는 거예요. 자세한 내용은 Amazon VPC 사용 설명서의 보안 그룹 규칙 항목을 참고하세요.
디버그 대상 인스턴스는 다음 Windows 버전(또는 그 이상) 중 하나를 실행해야 해요.
- 빌드 번호 26100.7462(2025년 12월 패치)의 Windows Server 2025
- 빌드 번호 26100.7309의 Windows 11 24H2
- 빌드 번호 26200.7309의 Windows 11 25H2
참고 — ENA용 KDNET 확장성 모듈은 Windows의 일부로 배포되며 Windows 월간 누적 업데이트로만 업데이트할 수 있어요. 디버그 대상에 최신 Windows KB를 설치해 모듈의 최신 버전을 유지할 것을 권장해요.
모듈이 디버그 대상에 있는지 확인하려면 관리자 PowerShell 세션에서 다음 명령을 실행하세요.
Test-Path C:\Windows\system32\kd_02_1d0f.dll
명령이 True를 반환하면 모듈을 사용할 수 있어요.
1단계: 디버그 호스트에 Windows 디버깅 도구 설치하기
PowerShell 세션에서 다음 명령을 실행해 디버그 호스트 인스턴스에 Windows 디버깅 도구를 설치합니다.
winget install microsoft.windbg
자세한 설치 지침은 Microsoft 설명서의 Windows 디버거 설치 항목을 참고하세요.
설치 후 PowerShell 세션에서 다음 명령을 실행해 디버거가 작동하는지 확인합니다.
windbgx
WinDbg 창이 열려야 합니다. 열리면 설치가 성공한 것이므로 창을 닫아도 됩니다.
2단계: 디버그 대상 설정하기
참고 — 커널 디버깅이 활성화되면 디버깅 세션에 사용되는 ENA 디바이스는 디버거 트래픽 전용이에요. 디버깅 중에 디버그 대상 인스턴스의 인터넷 접근을 유지해야 한다면, 시작하기 전에 인스턴스에 두 번째 ENA를 연결하세요.
디버그 대상에서 관리자 PowerShell 세션을 열고 다음 단계로 커널 디버깅을 구성합니다.
- 인스턴스에 연결된 ENA 어댑터의 버스, 디바이스, 함수 번호를 나열하려면 다음 명령을 실행합니다.
Get-NetAdapter -Physical |
Where-Object -Property PnPDeviceID -Match -Value '^PCI\\VEN_1D0F&DEV_EC2[01]&' |
Get-NetAdapterHardwareInfo |
Select-Object InterfaceDescription, BusNumber, DeviceNumber, FunctionNumber |
Format-List
인스턴스에 ENA 어댑터가 여러 개 연결되어 있다면 다음 명령을 사용해 각 물리 어댑터를 프라이빗 IP 주소에 매핑합니다. 이 세부 정보는 AWS Management Console의 EC2 → Instances → [Instance ID] → Networking → Network interfaces에서 교차 확인할 수 있어요. 특정 디버깅을 위해 특정 네트워크 인터페이스 ID, 프라이빗 IP, 보안 그룹을 OS 수준 어댑터와 연관짓는 데 도움이 됩니다.
Get-NetAdapter -Physical |
Where-Object PnPDeviceID -Match '^PCI\\VEN_1D0F&DEV_EC2[01]&' |
ForEach-Object {
$adapter = $_
$hwInfo = $adapter | Get-NetAdapterHardwareInfo
$ipInfo = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4
[PSCustomObject]@{
InterfaceDescription = $adapter.InterfaceDescription
IPAddress = $ipInfo.IPAddress
BusNumber = $hwInfo.BusNumber
DeviceNumber = $hwInfo.DeviceNumber
FunctionNumber = $hwInfo.FunctionNumber
}
} | Format-List
출력에서 디버깅에 사용할 ENA 어댑터의 BusNumber, DeviceNumber, FunctionNumber 값을 기록해 두세요.
- 다음 명령으로 커널 디버깅을 구성합니다. 자리 표시자 값을 여러분의 특정 구성으로 바꾸세요.
bcdedit /debug on
bcdedit /set loadoptions FORCEHVTONOTSHAREDEBUGDEVICE
bcdedit /dbgsettings net hostip:host-private-ip port:port-number key:encryption-key busparams:b.d.f
참고 — 다음 명령을 실행해 기존
loadoptions가 있는지 확인하세요. 값이 반환되면 그 문자열을 복사해;FORCEHVTONOTSHAREDEBUGDEVICE를 추가하세요.(bcdedit /enum) -match "loadoptions"
여기서:
host-private-ip— 디버그 호스트 인스턴스의 프라이빗 IPv4 주소입니다. 인스턴스가 IPv6 전용 서브넷에서 실행된다면 Microsoft 설명서의 IPv6으로 KDNET 설정 항목을 참고해 KDNET과 함께 IPv6를 사용하는 방법을 알아보세요.port-number— 디버깅 세션에 사용할 포트입니다. 권장 범위는 50000–50039입니다(예:50000).encryption-key— 디버깅 연결을 암호화하는 데 사용되는 256비트 키로, 마침표로 구분된 64비트 값 4개로 지정됩니다. 각 64비트 값은 소문자 a–z와 숫자 0–9만 사용해 최대 13자까지 가능합니다. 특수 문자는 허용되지 않아요. 암호화 키 예시:1kdnet2keys3.4kdnet5keys6.7kdnet8keys9.10kdnet11ke.b.d.f— 디버깅에 사용하는 ENA 디바이스의 버스, 디바이스, 함수 번호로,bus.device.function형식(예:0.3.0)입니다.
팁 — Windows 부팅 프로세스를 디버깅하려면 다음 명령도 실행하세요.
bcdedit /bootdebug on
3단계: 디버그 호스트에서 디버깅 세션 시작하기
호스트에서 디버깅 트래픽을 허용하려면 WinDbg 애플리케이션 또는 특정 UDP 포트에 대한 방화벽 규칙을 만들 수 있어요.
옵션 1: WinDbg 애플리케이션 허용
다음 명령을 실행해 WinDbg 실행 파일을 승인합니다.
$WinDbgxPath = "$env:LocalAppData\Microsoft\WindowsApps\WinDbgX.exe"
New-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Action Allow -Program $WinDbgxPath
옵션 2: 특정 UDP 포트 허용
또는 커널 디버깅에 구성된 포트로의 인바운드 UDP 트래픽을 허용할 수 있습니다. port-number를 선택한 KDNET 포트로 바꾸세요.
$DebugPort = port-number
New-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection" -Direction Inbound -LocalPort $DebugPort -Protocol UDP -Action Allow
참고 — 방화벽 구성은 도메인 그룹 정책(GPO)에 의해 제한되거나 관리자 권한이 필요할 수 있어요. 명령이 실패하면 네트워크 관리자에게 문의하세요.
디버그 대상 구성과 일치하는 포트와 키로 WinDbg를 시작합니다. 사용 사례에 맞게 Microsoft WinDbg 명령줄 참조에 문서화된 추가 커널 디버깅 옵션을 지정할 수 있어요.
windbgx -k net:port=port-number,key=encryption-key
WinDbg가 열리고 디버그 대상이 연결되기를 기다립니다.
4단계: 디버그 대상 재부팅하기
디버그 대상에서 인스턴스를 다시 시작해 디버깅 연결을 시작합니다.
shutdown -r -t 0
디버그 대상이 다시 시작되면 디버그 호스트의 WinDbg가 대상에 자동으로 연결돼요. 이제 WinDbg를 사용해 커널 상태를 검사하고, 중단점을 설정하고, 문제를 진단할 수 있어요.
디버깅 후 디버그 설정 정리하기
디버그 대상에서
디버깅을 마친 후에는 디버그 대상에서 커널 디버깅 구성을 제거해 정상 부팅 동작을 복원합니다. 디버그 대상에서 관리자 PowerShell 세션을 열고 다음 명령을 실행합니다.
bcdedit /debug off
bcdedit /dbgsettings LOCAL
bcdedit /deletevalue loadoptions
FORCEHVTONOTSHAREDEBUGDEVICE 외에 기존 loadoptions가 있다면 원래 loadoptions로 bcdedit /set loadoptions를 실행해 설정을 복원해야 합니다.
부팅 디버깅을 활성화했다면 다음도 실행합니다.
bcdedit /bootdebug off
변경 사항을 적용하려면 인스턴스를 다시 시작합니다.
디버그 호스트에서
다음 명령을 실행해 방화벽 규칙을 제거합니다.
Remove-NetFirewallRule -DisplayName "Allow Inbound KDNET Connection"
제한 사항
ENA용 KDNET 확장성 모듈은 현재 다음을 지원하지 않아요.
- 8세대 비-metal x86_64 인스턴스 유형(예:
m8a.xlarge) - 7세대 48xlarge 비-metal x86_64 인스턴스 유형(예:
m7a.48xlarge) - u7i 인스턴스 유형
이 모듈은 현재 Secure Boot가 활성화된 인스턴스를 지원하지 않아요. 관리자 PowerShell 세션에서 Confirm-SecureBootUEFI를 실행해 상태를 확인할 수 있어요. 출력이 True라면 Secure Boot가 활성 상태입니다. 'TPM' 접두사가 있는 모든 Amazon 제공 이미지는 기본적으로 Secure Boot가 활성화되어 있다는 점을 유의하세요.
추가 참고 사항
디버거를 대상 인스턴스에 연결하는 데 문제가 발생하면 다음을 확인하세요.
- 이 안내서에 나열된 모든 사전 요구 사항(필요한 Windows Server 빌드 버전과 확장성 모듈 존재 여부)이 충족되었는지.
- 두 인스턴스에 연결된 보안 그룹이 구성된 디버깅 포트에서 두 인스턴스 사이의 트래픽을 허용하도록 올바르게 구성되었는지.
- 호스트 인스턴스의 Windows 방화벽 규칙이 구성된 포트에서 두 인스턴스 사이의 네트워크 트래픽을 차단하지 않는지.
추가 지침은 Microsoft 설명서의 KDNET 네트워크 커널 디버깅 수동 설정 항목을 참고하세요.
더 알아보기
- Windows 인스턴스 문제
- SAC로 Windows 문제 해결하기