gcp-vm-init

GCP VM 초기 설정 자동화. 시스템 업데이트, 타임존, 방화벽, fail2ban, 스왑 설정.

SKILL.md

GitHub

GCP VM Initial Setup

GCP VM 초기 설정 자동화. 시스템 업데이트, 타임존, 방화벽, fail2ban, 스왑 설정.

Triggers

  • "VM 초기 설정", "VM 셋업", "서버 초기화"
  • "VM 보안 설정", "VM 기본 설정"
  • "initialize VM", "setup VM"

Workflow

1. 정보 수집

필수:

  • VM 이름 (필수)
  • 프로젝트 ID (기본: 현재 설정된 프로젝트)
  • 존 (기본: asia-northeast3-a)

선택:

  • 타임존 (기본: Asia/Seoul)
  • 스왑 크기 (기본: 2GB)
# 현재 프로젝트 확인
gcloud config get-value project

# VM 목록에서 선택
gcloud compute instances list --format="table(name,zone,status)"

2. SSH 접속 확인

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="echo 'SSH 접속 성공' && uname -a"

3. 시스템 업데이트

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="sudo apt update && sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y"

4. 타임존 설정

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="sudo timedatectl set-timezone Asia/Seoul && timedatectl"

5. UFW 방화벽 설정

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="sudo ufw allow OpenSSH && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw --force enable && sudo ufw status verbose"

6. fail2ban 설치

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="sudo DEBIAN_FRONTEND=noninteractive apt install -y fail2ban && sudo systemctl enable fail2ban && sudo systemctl start fail2ban && sudo systemctl status fail2ban --no-pager"

7. 스왑 설정

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab && free -h"

8. 기본 도구 확인

gcloud compute ssh VM_NAME --zone=ZONE --project=PROJECT \
  --command="echo '=== 설치된 도구 ===' && git --version && curl --version | head -1 && wget --version | head -1 && vim --version | head -1 && htop --version && tmux -V"

출력 형식

✅ VM 초기 설정 완료: [VM_NAME]

| 항목 | 상태 | 세부 |
|------|------|------|
| 시스템 업데이트 | ✅ | apt update/upgrade 완료 |
| 타임존 | ✅ | Asia/Seoul (KST) |
| UFW 방화벽 | ✅ | SSH(22), HTTP(80), HTTPS(443) 허용 |
| fail2ban | ✅ | SSH 무차별 공격 방지 활성화 |
| 스왑 | ✅ | 2GB 설정됨 |
| 기본 도구 | ✅ | git, curl, wget, vim, htop, tmux |

SSH 접속:
gcloud compute ssh [VM_NAME] --zone=[ZONE] --project=[PROJECT]

에러 처리

에러 해결
SSH 연결 실패 VM이 RUNNING 상태인지 확인, 방화벽 규칙 확인
권한 부족 sudo 권한 확인, 계정 인증 상태 확인
스왑 파일 존재 swapon --show로 확인 후 기존 스왑 사용
fail2ban 설치 실패 sudo apt update 재실행 후 재시도
타임존 설정 실패 `timedatectl list-timezones

고급 옵션

커스텀 타임존

# 타임존 목록 확인
timedatectl list-timezones | grep America

# 다른 타임존 설정
sudo timedatectl set-timezone America/New_York

스왑 크기 조정

# 4GB 스왑 (RAM 4GB 이상 VM용)
sudo fallocate -l 4G /swapfile

추가 포트 허용

# 커스텀 포트 허용 (예: 3000번)
sudo ufw allow 3000/tcp

참고

  • GCP Ubuntu 22.04 이미지는 git, curl, wget, vim, htop, tmux가 기본 설치됨
  • GCP 방화벽(네트워크)과 UFW(호스트) 이중 방어 권장
  • fail2ban은 기본 SSH jail만 활성화 (추가 설정 가능)
  • 스왑 크기: RAM 2GB 이하는 100%, 2-8GB는 50-100% 권장