GCE(Google Compute Engine) IAP를 통해 접속
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