목표 : GCP에서 빠르게 Windows VM 생성
Cloud Shell에서 바로 실행하여 Windows VM을 생성하여 테스트에 사용하기 위함
- 스크립트 실행
VPC, Subnet, Zone, 머신타입을 입력받습니다.

- 방화벽 정책 생성

- VM생성

- 윈도우 사용자 및 비밀번호 설정

위 캡쳐에서는 VM생성시간이 오래걸려, 비밀번호 설정에 실패했습니다.
자동으로 패스워드 리셋 명령어를 출력하도록 했으며, “gcloud compute reset-windows-password vm명 --zone asia-northeast3-a --user admin” 실행하면 아래와 같이 IP, Passowrd, username이 리셋되어 출력됩니다.

- 쉘스크립트
#!/bin/bash
# ==============================================================================
# GCP 윈도우(Windows) VM 생성 스크립트
#
# 기능:
# 1. 사용자로부터 VM 이름, 리전, VPC/서브넷 등 정보를 입력받습니다.
# 2. RDP(3389) 접속을 위한 방화벽 규칙을 생성합니다.
# 3. 윈도우 서버 VM(Desktop Experience)을 생성합니다.
# 4. VM의 관리자 비밀번호 설정을 안내하고 접속 정보를 출력합니다.
# ==============================================================================
# --- 색상 정의 (출력용) ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${BLUE}=== GCP 윈도우 VM 생성 스크립트 시작 ===${NC}"
# --- 1. 기본 정보 입력 ---
echo -e "\n${YELLOW}[1/5] 윈도우 VM 정보 입력${NC}"
# 이전 VPN 테스트의 '온프레미스' VPC를 기본값으로 제안합니다.
read -p "VM을 생성할 VPC 이름 [vpn-vpc-2]: " VPC_NAME
VPC_NAME=${VPC_NAME:-vpn-vpc-2}
read -p "VM을 생성할 서브넷 이름 [subnet-2]: " SUBNET_NAME
SUBNET_NAME=${SUBNET_NAME:-subnet-2}
read -p "새 윈도우 VM의 이름 [windows-dev-vm]: " INSTANCE_NAME
INSTANCE_NAME=${INSTANCE_NAME:-windows-dev-vm}
read -p "VM을 생성할 Zone (예: asia-northeast3-a) [asia-northeast3-a]: " ZONE
ZONE=${ZONE:-asia-northeast3-a}
# 윈도우는 e2-medium보다 높은 사양이 권장됩니다.
read -p "VM의 머신 타입 [e2-standard-2]: " MACHINE_TYPE
MACHINE_TYPE=${MACHINE_TYPE:-e2-standard-2}
# --- 2. 윈도우 RDP 방화벽 설정 ---
echo -e "\n${YELLOW}[2/5] 윈도우 RDP 방화벽 설정${NC}"
echo "VM에 RDP(원격 데스크톱)로 접속하기 위해 방화벽(TCP:3389)을 설정합니다."
read -p "접속을 허용할 IP 주소 (본인의 공인 IP, 모르면 0.0.0.0/0) [0.0.0.0/0]: " SOURCE_IP
SOURCE_IP=${SOURCE_IP:-0.0.0.0/0}
if [ "$SOURCE_IP" == "0.0.0.0/0" ]; then
echo -e "${YELLOW}경고: 모든 IP에서 RDP 접속을 허용합니다. 보안에 유의하세요.${NC}"
fi
FIREWALL_RULE_NAME="allow-rdp-${INSTANCE_NAME}"
RDP_TAG="rdp-access-${INSTANCE_NAME}"
echo "방화벽 규칙($FIREWALL_RULE_NAME)을 생성 중..."
gcloud compute firewall-rules create $FIREWALL_RULE_NAME \
--network=$VPC_NAME \
--action=ALLOW \
--direction=INGRESS \
--rules=tcp:3389 \
--source-ranges=$SOURCE_IP \
--target-tags=$RDP_TAG
if [ $? -ne 0 ]; then
echo -e "${RED}오류: 방화벽 규칙 생성에 실패했습니다.${NC}"
exit 1
fi
echo -e "${GREEN}방화벽 규칙 생성이 완료되었습니다.${NC}"
# --- 3. 윈도우 VM 생성 ---
echo -e "\n${YELLOW}[3/5] 윈도우 VM 생성${NC}"
echo "'$INSTANCE_NAME' VM 생성을 시작합니다. (시간이 몇 분 정도 소요될 수 있습니다)"
# 윈도우 서버 2022 (GUI 포함) 이미지를 사용합니다.
IMAGE_PROJECT="windows-cloud"
IMAGE_FAMILY="windows-2022" # 'core'가 아닌 GUI(Desktop Experience) 버전
gcloud compute instances create $INSTANCE_NAME \
--zone=$ZONE \
--machine-type=$MACHINE_TYPE \
--network=$VPC_NAME \
--subnet=$SUBNET_NAME \
--image-project=$IMAGE_PROJECT \
--image-family=$IMAGE_FAMILY \
--boot-disk-size=50GB \
--tags=$RDP_TAG
if [ $? -ne 0 ]; then
echo -e "${RED}오류: 윈도우 VM 생성에 실패했습니다.${NC}"
# 실패 시 방금 만든 방화벽 규칙 롤백
gcloud compute firewall-rules delete $FIREWALL_RULE_NAME --quiet
exit 1
fi
echo -e "${GREEN}VM 생성이 완료되었습니다.${NC}"
# --- 4. 윈도우 사용자 및 비밀번호 설정 ---
echo -e "\n${YELLOW}[4/5] 윈도우 사용자 및 비밀번호 설정${NC}"
read -p "윈도우 VM에서 사용할 사용자 이름을 입력하세요 [admin]: " USERNAME
USERNAME=${USERNAME:-admin}
echo -e "\n${RED}중요: 지금부터 윈도우 비밀번호 설정 프로세스를 시작합니다.${NC}"
echo "잠시 후 VM이 준비되면, 새 비밀번호가 화면에 출력됩니다."
echo "표시되는 ${GREEN}비밀번호를 즉시 복사하여 안전한 곳에 보관${NC}하세요!"
echo -e "${YELLOW}준비가 되었으면 Enter 키를 눌러 계속하세요...${NC}"
read -p ""
# 이 명령어는 대화형으로 비밀번호를 생성하고 보여줍니다.
gcloud compute reset-windows-password $INSTANCE_NAME \
--zone=$ZONE \
--user=$USERNAME
if [ $? -ne 0 ]; then
echo -e "${RED}오류: 비밀번호 설정에 실패했습니다. VM이 아직 부팅 중일 수 있습니다.${NC}"
echo "잠시 후 'gcloud compute reset-windows-password $INSTANCE_NAME --zone $ZONE --user $USERNAME' 명령어를 수동으로 실행해 보세요."
exit 1
fi
echo -e "\n${GREEN}비밀번호 설정이 완료되었습니다.${NC} (화면에 표시된 비밀번호를 복사했는지 확인하세요)"
# --- 5. 접속 정보 안내 ---
echo -e "\n${YELLOW}[5/5] 접속 정보 안내${NC}"
# VM의 IP 주소 가져오기
echo "VM의 IP 주소를 조회 중입니다..."
EXTERNAL_IP=$(gcloud compute instances describe $INSTANCE_NAME --zone $ZONE --format='get(networkInterfaces[0].accessConfigs[0].natIP)')
INTERNAL_IP=$(gcloud compute instances describe $INSTANCE_NAME --zone $ZONE --format='get(networkInterfaces[0].networkIP)')
echo -e "\n${GREEN}=== 윈도우 VM 설정이 성공적으로 완료되었습니다. ===${NC}"
echo "Windows 원격 데스크톱(RDP) 클라이언트를 사용하여 아래 정보로 접속하세요."
echo "-----------------------------------------------------"
echo -e " - 공인 IP (External IP): ${YELLOW}$EXTERNAL_IP${NC}"
echo -e " - 사용자 이름 (Username): ${YELLOW}$USERNAME${NC}"
echo -e " - 비밀번호 (Password): ${YELLOW}(방금 전 화면에 표시된 비밀번호)${NC}"
echo "-----------------------------------------------------"
echo -e " - 내부 IP (Internal IP): $INTERNAL_IP"
echo -e " - RDP 방화벽 규칙: $FIREWALL_RULE_NAME"
echo -e "\n${RED}테스트가 완료되면, VM과 방화벽 규칙을 삭제하여 비용이 과금되지 않도록 하세요.${NC}"
echo -e "VM 삭제: ${YELLOW}gcloud compute instances delete $INSTANCE_NAME --zone $ZONE${NC}"
echo -e "방화벽 삭제: ${YELLOW}gcloud compute firewall-rules delete $FIREROW_RULE_NAME${NC}"
'Cloud > GCP' 카테고리의 다른 글
| GCP HA VPN 생성 스크립트 (terrform + gcloud) (0) | 2025.10.21 |
|---|---|
| GCP 의 PSC 사용시 On-Premise DNS 설정방안 (0) | 2025.10.10 |
| GCP 프로젝트의 VPC 와 종속된 리소스 삭제 스크립트 (1) | 2025.09.18 |
| Gemini CLI 인증 방안에 따른 차이점 (2) | 2025.08.25 |
| Google Calendar 기반 GCE(VM) Managed Instance Group 오토스케일 자동화 (4) | 2025.08.18 |
| GCP VPN과 PSC를 통한 Vertex AI (Gemini-API) Private 연결 가이드 (2) | 2025.08.12 |
| Slack 기반 GCE Managed Instance Group 오토스케일링 자동화 구축 가이드 (Pub/Sub 연동, 상태 알림 포함) (4) | 2025.08.08 |