GCP 환경에서 직접 VM에 외부에서 접근하는 것은 보안상 위험이 있어, 안전한 방법을 찾게 되었습니다. 특히, Cloud IAP(Identity-Aware Proxy)를 활용해 외부 IP 오픈 없이도 SSH 접속을 가능하게 하려는 요구가 있었고, 이를 위해 Bastion Host를 설정하게 되었습니다. Bastion Host는 관리용 VM으로 최소한의 보안 구성을 갖추어 내부 자원에 대한 안전한 접근 통로 역할을 합니다.
1. Bastion Host VM 설정
VM 생성 방법
- Compute Engine → VM 인스턴스 → ‘인스턴스 만들기’ 선택
주요 설정 값
- 이름: bastion-host-dev
- 리전/존: 서비스 환경과 동일한 리전 선택 (예: asia-northeast3-a)
- 머신 타입: e2-medium (1vCPU, 4GB RAM)
- 부팅 디스크: Debian GNU/Linux 11 (기본값)
- 네트워크: 전용 VPC 또는 default VPC 사용
- 방화벽:
- HTTP, HTTPS 체크 해제
- IAP를 통한 SSH 터널링 허용 (35.235.240.0/20 대역의 22번 포트 Ingress 허용)
추가 설정
- Metadata
- enable-oslogin=TRUE
- 보안
- Project-wide SSH keys 비활성화
- OS Login 2단계 인증(2FA) 활성화
2. Bastion Host Service 계정 생성
서비스 계정 생성
- IAM & Admin → 서비스 계정 → '서비스 계정 만들기'
- 이름: bastion-host-sa
- 역할:
- Compute Instance Admin (v1)
- Service Account User
VM에 서비스 계정 연결
- Bastion Host VM 수정 → 서비스 계정 → bastion-host-sa 선택
3. 로컬에서 Bastion Host로 접속
접속 명령어
gcloud compute ssh bastion-host-dev \
--project=[PROJECT_ID] \
--zone=asia-northeast3-a \
--tunnel-through-iap
- --tunnel-through-iap 옵션으로 Cloud IAP를 통한 보안 터널링
- 접속 전 gcloud auth login, gcloud config set project [PROJECT_ID] 필수
4. Bastion Host에서 Dev VM 접속
Bastion Host 내부에서 Dev VM으로 SSH 접속
ssh [DEV_VM_USER]@[DEV_VM_INTERNAL_IP]
- [DEV_VM_INTERNAL_IP]는 같은 VPC 내 프라이빗 IP 주소 사용
- Bastion Host와 Dev VM은 서로 통신 가능해야 함 (VPC/Subnet 설정 확인)
5. Bastion Host를 Proxy로 Cloud SQL MySQL 접속
Cloud SQL Auth Proxy 설치
curl -o cloud-sql-proxy https://dl.google.com/cloudsql/cloud-sql-proxy.linux.amd64
chmod +x cloud-sql-proxy
sudo mv cloud-sql-proxy /usr/local/bin/
Proxy 실행
cloud-sql-proxy [INSTANCE_CONNECTION_NAME] \
--private-ip \
--port=3306
- [INSTANCE_CONNECTION_NAME]: project:region:instance 형식
- --private-ip 옵션 필수 (Private IP로 연결)
로컬에서 Bastion Host를 통한 DB 접속
mysql -h 127.0.0.1 -P 3306 -u [DB_USER] -p
- localhost로 접속하면 Bastion Host를 통해 Cloud SQL과 연결됨
이렇게 설정하면 외부 노출 없이 Bastion Host를 통한 안전한 접속 경로를 구축할 수 있습니다. 추가로, Bastion Host에는 최소한의 권한만 부여하고, 정기적인 접속 로그 점검이 권장됩니다.
'Cloud' 카테고리의 다른 글
Teams 휴가 시스템 구축 - Microsoft 365 (Automate 자동화, Power Apps 연동) (1) | 2025.07.10 |
---|---|
[GCP] Google Cloud Armor 적용 (feat. Custom Error page - Cloud Storage) (0) | 2025.03.23 |
Certbot 으로 Let’s encrypted 무료 https SSL 적용 - AWS Node.js (1) | 2024.08.03 |