본문 바로가기
GCP

GCE(Google Compute Engine) IAP를 통해 접속

by misankim 2023. 4. 29.

GCE(Google Compute Engine) IAP를 통해 접속

 

https://cloud.google.com/compute/docs/connect/ssh-using-iap?hl=ko

 

 

# 인스턴스에 퍼블릭 아이피가 있는 경우

 

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project

 

 

# 인스턴스에 퍼블릭 아이피가 없는 경우

 

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project --tunnel-through-iap

 

iap 를 통해 접속 시 35.235.240.0/20 대역에 대한 tcp 22 포트 오픈하는 방화벽 룰 설정 필요

 

gcloud compute firewall-rules create allow-ssh-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20 \
  --network=premisan-test-network \
  --project=my-project

 

접속 문제 발생 시 트러블 슈팅 명령어

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project --tunnel-through-iap --troubleshoot

 

# vscode remote-ssh 플러그인으로 원격 서버 접속

-> gcloud compute ssh 커맨드를 일반 ssh 커맨드로 변환하기

-> --dry-run 옵션을 붙여 커맨드 실행 후 출력되는 커맨드를 실행

 

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project --tunnel-through-iap --troubleshoot

 

출력

/usr/bin/ssh -t -i /Users/premisan/.ssh/google_compute_engine -o CheckHostIP=no -o HashKnownHosts=no -o HostKeyAlias=compute.2928000009718790000 -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes -o UserKnownHostsFile=/Users/premisan/.ssh/google_compute_known_hosts -o "ProxyCommand /opt/homebrew/opt/python@3.11/bin/python3.11 /Users/premisan/google-cloud-sdk/lib/gcloud.py compute start-iap-tunnel premisan-test-centos %p --listen-on-stdin --project=my-project --zone=asia-northeast3-a --verbosity=warning" -o ProxyUseFdpass=no premisan@compute.2928000009718790000

 

출력된 커맨드에서 /usr/bin/ssh 를 ssh 로 수정하여 vscode remote-ssh 플러그인에서 호스트를 추가하면 아래처럼 ~/.ssh/config 파일에 호스트 정보가 추가됨

-> 혹은 아래 설정에서 Host 부분만 인스턴스 이름(premisan-test-centos)로 변경하여 ~/.ssh/config 파일에 추가 후 "ssh premisan-test-centos" 커맨드를 통해 ssh 접속 가능

 

Host compute.2928000009718790000
 HostName compute.2928000009718790000
 IdentityFile /Users/premisan/.ssh/google_compute_engine
 CheckHostIP no
 HashKnownHosts no
 HostKeyAlias compute.2928000009718790000
 IdentitiesOnly yes
 StrictHostKeyChecking yes
 UserKnownHostsFile /Users/premisan/.ssh/google_compute_known_hosts
 ProxyCommand /opt/homebrew/opt/python@3.10/bin/python3.10 /Users/premisan/google-cloud-sdk/lib/gcloud.py compute start-iap-tunnel premisan-test-centos %p --listen-on-stdin --project my-project --zone=asia-northeast3-a --verbosity=warning
 ProxyUseFdpass no
 User premisan

 

 

# 인스턴스에 파일 복사

 

https://cloud.google.com/compute/docs/instances/transfer-files?hl=ko#transfergcloud

https://cloud.google.com/sdk/gcloud/reference/compute/scp

 

로컬 -> 인스턴스

gcloud compute scp ./cronjob.yaml premisan-test-centos:/tmp/ --zone asia-northeast3-a --project my-project --tunnel-through-iap

 

로컬 -> 인스턴스(디렉토리와 모든 하위 경로 복사)

gcloud compute scp --recurse ./cronjob premisan-test-centos:/tmp/ --zone asia-northeast3-a --project my-project --tunnel-through-iap

 

인스턴스 -> 로컬

gcloud compute scp premisan-test-centos:/tmp/cronjob.yaml ./ --zone asia-northeast3-a --project my-project --tunnel-through-iap

 

 

# windows 인스턴스의 경우

 

https://cloud.google.com/iap/docs/using-tcp-forwarding?hl=ko#gcloud

 

gcloud compute start-iap-tunnel premisan-test-windows 3389 \
    --local-host-port=localhost:3389 \
    --zone=asia-northeast3-a \
    --project=my-project

 

터널링 프로세스 실행 후 localhost:3389 로 rdp 접속

 

iap 를 통해 접속 시 35.235.240.0/20 대역에 대한 tcp 3389 포트 오픈하는 방화벽 룰 설정 필요

 

gcloud compute firewall-rules create allow-rdp-ingress-from-iap \
  --direction=INGRESS \
  --action=allow \
  --rules=tcp:3389 \
  --source-ranges=35.235.240.0/20 \
  --network=premisan-test-network \
  --project=my-project

 

 

# tcp 터널링

 

gcloud compute start-iap-tunnel premisan-test-windows 3389 \
    --local-host-port=localhost:3389 \
    --zone=asia-northeast3-a \
    --project=my-project

 

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project -- -L 로컬_포트:원격_호스트:원격_포트

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project -- -L 8080:localhost:8080

gcloud compute ssh premisan-test-centos --zone=asia-northeast3-a --project=my-project -- -L 13306:10.0.0.100:3306