윈도우 환경에서 Hyper-V를 테라폼으로 관리하는 방법에 대해 작성
회사 점심시간 짬내서 작성하는 거라 향후 재정리 필요.
만약에 윈도우가 프로가 아닌 커뮤니티, 일반 버전의 경우 Hyper-V 우회 설치가 필요하다. 이 부분은 버전 또는 상황에 따라 변경점이 존재할 수 있으니 직접 검색해서 확인해야한다.
테라폼 설치
아마 테라폼이 설치되었다는 가정하에 작성하는 글이지만, 설치되지 않았다면 설치가 필요
1. 다운로드
설치 시 유의사항은 AMD64 버전으로 설치하여야한다. 설치 후 압축 풀고 적당한 곳에 옮김
2. 환경 변수 설정
이 부분도 환경 변수 편집 메뉴에서 해당 경로를 넣어주면 된다.
3. 테스트
terraform 쳤을 때 명령어들 목록 나오면 성공. 아닌 경우 적용되지 않은 것이다.
계정 생성
우선 로컬 계정은 안되는 경우가 있다. 마소 로그인 정책이라던지 Pin 로그인이라던지.. 뭔가 미스나는 부분이 있어서 계정은 깔끔하게 하나 파고 쓰고 지우는 편이 좋다.
# 1. 새 계정 비밀번호 설정$Password = Read-Host -AsSecureString
# 2. tfadmin 로컬 계정 생성New-LocalUser "tfadmin" -Password $Password -FullName "Terraform Admin"
# 3. 생성된 계정 관리자 권한 부여Add-LocalGroupMember -Group "Administrators" -Member "tfadmin"네트워크 구성
외부 <-> 내부인 경우 https 구성해서 어찌어찌 만들 수 있을 거 같은데 내부 통신은 뭔가 안먹는다..
그냥 오픈하고 하는 편이 좋아보인다. 다른 방법이 있다면 댓글 남겨주세요.
# 1. 암호화되지 않은 트래픽 허용 (HTTP 통신 허용)Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $true -Force
# 2. 기본 인증 및 NTLM 인증 활성화Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true -ForceSet-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분씩 걸리는 거 보면 좋은 방법 발견 전까지는 순수하게 연습용으로밖에 못쓸 것으로 보인다.
그냥 노트북에 리눅스 깔고 망 구성해서 하는 편이 더 좋아보인다.
계정 삭제
Remove-LocalUser -Name "tfadmin"원상 복구
# 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