프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

 

 

AWS에서 private subnet의 자원 접근을 위해 사용하는 Bastion host도 결국 컴퓨팅 자원이기 때문에, 진입 취약점을 제공할 수 있다.

GCP는 Bastion Host를 사용하지 않더라도 IAP(Identity-Aware Proxy)라는 접근 서비스를 GCP가 제공해서 접근자의 식별을 대행해 준다.

 

 

https://cloud.google.com/blog/products/identity-security/cloud-iap-enables-context-aware-access-to-vms-via-ssh-and-rdp-without-bastion-hosts?hl=en

 

Cloud IAP enables context-aware access to VMs via SSH and RDP without bastion hosts | Google Cloud Blog

Cloud Identity-Aware Proxy’s TCP forwarding feature now allows secure SSH and RDP access to VMs without bastion hosts or VPN. It is now generally available.

cloud.google.com

https://cloud.google.com/blog/products/identity-security/cloud-iap-enables-context-aware-access-to-vms-via-ssh-and-rdp-without-bastion-hosts?hl=en

 

 

따라서 공인 IP가 없더라도 VM 인스턴스로의 SSH접근이 가능해진다.

 

자세히는 IAP가 터널링을 제공해 주어서, VM부터 접근 PC까지 SSH 암호화로 연결이 된다.

 

 

 

 

 

VPC와 방화벽 생성

 

일단 커스텀 VPC와 방화벽을 생성한다.

 

 

 

방화벽 규칙 만들자.

 

 

 

결국 VM에게는 SSH 접근이 되어야 하는 것이므로 ssh를 허용하는 방화벽 규칙이 필요하다.

 

 

 

소스 IP는 35.235.240.0/20로 제한한다.

 

 

이러한 설정을 한 이유는 IAP가 35.235.240.0/20 대역에서 22번 port에서 동작하기 때문이다.

VM은 실제 클라이언트를 몰라도 결국에 IAP가 연결해 주기 때문에  IAP의 IP 대역만 허용해 주면 된다.

 

 

 

VM 인스턴스 생성

 

public ip가 없는 VM인스턴스를 만들어주자.

 

 

 

 

 

Network interface를 세팅하자.

 

 

공인 IP를 없도록 만든다.

 

 

 

 

IAP 테스트

 

이제 SSH로 연결로 IAP 터널 테스트를 해보자.

 

아래 명령어로 연결한다.

gcloud compute ssh <VM이름> --zone <VM이 위치한 zone> --tunnel-through-iap

 

 

명령어를 실행하면 ssh 키를 생성하여 접근하게 된다.

 

 

접속이 완료되었지만, public internet과 연결되지 않았기 때문에 외부로 ping은 동작하지 않는다.

 

 

이런 경우 GCP의 다른 서비스 자원도 사용할 수 없게 된다.

이때 공인 IP가 없더라도 Google API를 사용할 수 있도록 해주는 것이 Private Google Access이다.

 

 

Google API로의 Access 설정

 

접근할 리소스인 cloud storage 버킷을 생성해 주자.

 

멀티 리전으로 선택해 주자.

멀티 리전을 선택한다고 용량 비용이 많이 나가진 않고, 얼마나 업로드와 다운로드하느냐에 따라 비용이 발생한다.

 

 

 

이런 식으로 생성하면 퍼블릭 액세스는 금지된다.

우리는 private access를 사용할 것이므로 액세스 금지를 유지한다.

 

이곳에 이미지 파일을 하나 업로드 해주자.

 

 

다시  IAP로 우리의 인스턴스에 접근해 보자.

gcloud compute ssh vm-internal --zone us-east1-c --tunnel-through-iap

 

여기서도 버킷 이름을 환경변수에 등록해 주고

export MY_BUCKET=< 버킷 이름 >

 

이미지 복사를 시도하면 접근을 하지 못한다.

gcloud storage cp gs://$MY_BUCKET/*.png

 


아직 private Google access 설정을 해주지 않았기 때문이다. 

 

private Google access는 서브넷 수준에서 사용할 수 있다.

사용 설정을 하면 해당 서브넷에 private IP 주소만 가지는 인스턴스가 default Gateway (0.0.0.0/0) 경로를 설정하여 Google API로 트래픽을 전송할 수 있습니다.

 

 

 

VPC로 이동해 서브넷을 편집해 주자.

 

 

 

이를 저장해 주면, 이제  storage로 접근 작업이 된다.

 

 

 

 

 

하지만 private Google access 어디까지나 Google의 서비스에만 접속할 수 있다.

여전히 private subnet에 존재하는 VM은 외부로 무언가 요청을 보낼 수 없다.

 

 

우리의 인스턴스는 업데이트도 할 수가 없다.

 

 

이를 해결하기 위해 AWS의 NAT Gateway와 같은 Gloud NAT를 설정해야 한다.

 

[GCP] Cloud NAT 구성하기

 

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함