978 단어
5 분
Hyper-V 환경을 Terraform으로 제어

윈도우 환경에서 Hyper-V를 테라폼으로 관리하는 방법에 대해 작성

회사 점심시간 짬내서 작성하는 거라 향후 재정리 필요.

만약에 윈도우가 프로가 아닌 커뮤니티, 일반 버전의 경우 Hyper-V 우회 설치가 필요하다. 이 부분은 버전 또는 상황에 따라 변경점이 존재할 수 있으니 직접 검색해서 확인해야한다.

테라폼 설치#

아마 테라폼이 설치되었다는 가정하에 작성하는 글이지만, 설치되지 않았다면 설치가 필요

1. 다운로드#

설치 시 유의사항은 AMD64 버전으로 설치하여야한다. 설치 후 압축 풀고 적당한 곳에 옮김

2. 환경 변수 설정#

이 부분도 환경 변수 편집 메뉴에서 해당 경로를 넣어주면 된다.

3. 테스트#

terraform 쳤을 때 명령어들 목록 나오면 성공. 아닌 경우 적용되지 않은 것이다.

계정 생성#

우선 로컬 계정은 안되는 경우가 있다. 마소 로그인 정책이라던지 Pin 로그인이라던지.. 뭔가 미스나는 부분이 있어서 계정은 깔끔하게 하나 파고 쓰고 지우는 편이 좋다.

Terminal window
# 1. 새 계정 비밀번호 설정
$Password = Read-Host -AsSecureString
# 2. tfadmin 로컬 계정 생성
New-LocalUser "tfadmin" -Password $Password -FullName "Terraform Admin"
# 3. 생성된 계정 관리자 권한 부여
Add-LocalGroupMember -Group "Administrators" -Member "tfadmin"

네트워크 구성#

외부 <-> 내부인 경우 https 구성해서 어찌어찌 만들 수 있을 거 같은데 내부 통신은 뭔가 안먹는다..

그냥 오픈하고 하는 편이 좋아보인다. 다른 방법이 있다면 댓글 남겨주세요.

Terminal window
# 1. 암호화되지 않은 트래픽 허용 (HTTP 통신 허용)
Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $true -Force
# 2. 기본 인증 및 NTLM 인증 활성화
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true -Force
Set-Item -Path WSMan:\localhost\Service\Auth\NTLM -Value $true -Force
# 3. 로컬 계정 원격 접속 시 관리자 권한(UAC) 박탈 방지
New-ItemProperty -Name LocalAccountTokenFilterPolicy -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -PropertyType DWord -Value 1 -Force
# 4. WinRM 서비스 재시작
Restart-Service WinRM

빈껍데기 생성#

뭐 OS 넣거나 하진 않았다. 그냥 생성해서 실행되나만 보려고 짠거다. 비밀번호 입력창의 경우 아까 계정 생성에서 넣었던 비밀번호 그대로 넣으면 된다.

단순 제어 설명이므로 테라폼 명령어는 생략한다. 실습을 마치면 삭제하는 거 잊지말자. 생성되었는 지 확인은 hyper-v 키면 바로 볼 수 있어서 이 점은 좋아보이긴하다.

terraform {
required_providers {
hyperv = {
source = "taliesins/hyperv"
version = ">= 0.1.0"
}
}
}
variable "win_password" {
description = "Windows 계정 비밀번호를 입력하세요: "
type = string
sensitive = true
}
provider "hyperv" {
user = "tfadmin"
password = var.win_password
host = "127.0.0.1"
port = 5985
https = false
insecure = true
use_ntlm = true
}
resource "hyperv_network_switch" "vm_switch" {
name = "Terraform_VSwitch"
notes = "Created by terrafrom"
}
resource "hyperv_machine_instance" "vm_instance" {
name = "Terraform_Test_VM"
generation = 2
memory_startup_bytes = 2 * 1024 * 1024 * 1024
static_memory = true
processor_count = 2
state = "Running"
network_adaptors {
name = "eth0"
switch_name = hyperv_network_switch.vm_switch.name
}
}

실습 후 삭제 처리#

안전한 방법이 발견되기 전까지는 이 방법을 일단 사용하여 진행한다.

다만, local에서 날림에도 불구하고 5분씩 걸리는 거 보면 좋은 방법 발견 전까지는 순수하게 연습용으로밖에 못쓸 것으로 보인다.

그냥 노트북에 리눅스 깔고 망 구성해서 하는 편이 더 좋아보인다.

계정 삭제#

Terminal window
Remove-LocalUser -Name "tfadmin"

원상 복구#

Terminal window
# 1. 암호화되지 않은 통신 차단
Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $false -Force
# 2. 기본 인증 차단
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $false -Force
# 3. 로컬 계정 UAC 필터링 정책 삭제
Remove-ItemProperty -Name LocalAccountTokenFilterPolicy -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Force
# 4. WinRM 서비스 재시작
Restart-Service WinRM
Hyper-V 환경을 Terraform으로 제어
https://blog.csyhorizon.dev/posts/2026/devops/terraform/windows/1/
저자
SY
게시일
2026-08-27
라이선스
CC BY-NC-ND 4.0