AWS — GCP간 VPN 연결을 통해 보안을 강화하고 비용을 절감하는 방법 — (2) GCP Private Service Connect와 GCP Private Access방법들

Derek.Kim
10 min readAug 5, 2023
  1. AWS-GCP VPN 연결 방법
  2. GCP Private Service Connect와 GCP Private Access방법들
  3. AWS에서 GCP Cloud DNS 사용
  4. GCP에서 AWS Route53 사용

위 글 중 두 번째 이야기입니다.

이전 블로그에서 AWS — GCP간 VPN 연결 방법에 대해서 소개했습니다. 하지만 VPN 연동만 했다고 바로 NAT Gateway를 타고 나가던 트래픽이 VPN 구간으로 이동하는 것이 아닙니다. IP기반으로 네트워크 통신을 할 수 있는 기반만 마련한 것입니다. 실제로 기존 경로를 VPN 구간으로 경로를 변경하기 위해서는 추가적인 작업이 필요합니다.

googleapis.com를 사용할 때 NAT Gateway를 사용하지 않게되면 비용 절감까지 달성할 수 있다.

먼저 첫 번째 시나리오에서 언급했던 AWS에서 GCP Managed Service(BigQuery, Pub/Sub 등)에 VPN을 통해 접근하기 위해서 아래 2가지 작업이 필요합니다.

  1. GCP Managed Service를 Private IP로 접근하기 위해 PSC(Private Service Connect)구성
  2. googleapis.com용 Private DNS Zone 설정과 PSC IP용 레코드 등록

먼저 그 중에서 GCP Private Service Connect를 포함한 GCP VPC에서 Google APIs(Managed Google Service)에 비공개 접근하는 방법들에 대해서 간략히 소개하겠습니다.

GCP Private Access options for Google APIs

1. Private Google Access

Private Google Access

PGA(Private Google Access)는 VPC 내의 자원들이 public ip 없이도 Google Apis에 접근하게 하기 위한 방법입니다.

  • PGA를 subnet에 Enable하면, 서브넷 내의 자원들은 public ip없이도 Google Apis에 접근할 수 있음
  • PGA설정 이후, private ip만 가진 VM은 Google APIs를 사용할 때, 인터넷 환경에 노출되지 않고 Google Apis에 접근함
  • googleapis.com 도메인에 대해 Google이 정해준 ip대역(199.36.153.8~11)으로 라우팅 되도록 DNS 설정을 해줘야 함
  • VM에 external ip가 있는 경우 PGA enable여부와 상관 없이 Google APIs에 접근 가능함

2. Private Service Connect

Private Service Connect

PSC(Private Service Connect)를 통해 Google APIs에 접근하거나 피어링이 되어 있지 않은 타 리소스에 public ip를 사용하지 않고도 접근할 수 있습니다.

  • PSC용으로 ip를 하나 할당하고, 해당 ip로 여러 Google APIs로 접근할 수 있게 만들 수 있음
  • Google APIs 뿐만 아니라, Apigee/GKE control plane와 같은 Google services, PSC가 지원되는 Third-party published services, Peering을 맺지 않아도 타 VPC의 자원과 연동할 수도 있음
  • PSC는 사용자의 internal IP로만 GCP 서비스에 접근할 수 있다는 점이 장점
  • AWS VPC Endpoints와 비슷한 서비스 (참고)
PSC IP를 통해 GCP Managed Service에 Private하게 접근

GCP APIs에 접근하기 위해 PGA와 PSC 두 방법 모두 사용할 수 있지만, AWS/GCP에서 Public IP를 사용하지 않고, 사용자가 할당한 IP로 Google의 Managed service에 접근해야 하므로, PSC(Private Service Connect)를 선택했습니다.

3. Private Service Access

Private Service Access

PSA(Private Service Access)를 통해 VPC에서 Google 및 타사 서비스에 비공개된 연결(피어링)을 통해 public ip를 사용하지 않고 타 VPC의 자원에 접근합니다.

  • Google이 관리하는 VPC내에 리소스가 private하게 위치하고, 사용자 VPC와 peering맺어서 접근하는 방식
  • PSA 방식으로 접근할 수 있는 서비스들이 정해져 있음(Vertex AI, Cloud SQL 등)
  • public IP 없이도 고객 VPC에서 직접 Cloud SQL 인스턴스와 통신할 수 있음

4. Serverless VPC Access

Serverless VPC Access

Serverless VPC Access를 통해 Cloud Run, App Engine, Cloud Functions와 같은 서버리스 제품들을 VPC와 직접 연결할 수 있습니다.

  • 서버리스 제품들(Cloud Run, App Engine, Cloud Functions 등)에서 직접 사용자 VPC내의 리소스와 private 통신할 수 있게 함
  • 사용자 VPC내의 리소스에 보내는 요청은 인터넷 환경에 노출되지 않고, 인터넷보다 latency가 훨씬 줄어듬

위 네가지 옵션 중 BigQuery, Pub/Sub, GCS등을 포함한 다양한 Google Managed Service에 접근할 때 사용되는 googleapis.com에 대한 연결을 AWS/GCP에서 Private하게 구성하기 위해서 PSC(Private Service Connect)를 선택했습니다.

Private Service Connect 설정

GCP에서 Private Service Connect를 설정하는 방법에 대해서 설명하겠습니다.

Private Service Connect 구성 방법

PSC 생성
  • GCP Network services > Private Service Connect 생성합니다.
  • All Google Apis 선택합니다.
  • Endpoints name은 원하는대로 설정합니다.
  • Network는 연동할 GCP VPC를 선택합니다.
PSC IP 설정
  • IP address도 자신이 원하는 IP address를 지정하면 되고, 만일 미리 생성해놓은 IP가 없을 경우 새로 만들면 됩니다.
  • AWS VPC Endpoints와는 다르게 VPC Subnet의 IP를 할당하는 것이 아니라, 연동할 VPC Subnet의 IP와 겹치지 않는 별도의 IP를 지정해야 합니다.

Private Service Connect DNS 설정

googleapis.com에 대한 Private DNS Zone 설정
  • GCP Network services > Cloud DNS > DNS zone을 생성합니다.
  • Zone type은 Private으로 설정하고, DNS Name을 googleapis.com으로 설정합니다. googleapis.com 도메인에 대한 public zone은 구글이 소유하고 있을 것입니다. Public Zone과 Private Zone이 겹칠 경우 Private Zone의 도메인이 우선됩니다.
  • Options는 Default(private)을 설정합니다.
  • 그리고 Private DNS Zone이기 때문에 특정 GCP VPC를 연동시킬 수 있습니다. PSC를 사용할 GCP VPC를 연동시킵니다.
  • *.googleapis.com 도메인이 PSC IP로 도메인 룩업될 수 있도록 레코드를 추가합니다.
GCP VPC에서 PSC IP를 통해 Google APIs에 접근
  • 방금 만든 PSC의 IP를 레코드에 등록하면, 이제 연동된 GCP VPC에서 googleapis.com 도메인을 이용할 때는 (GCP Managed Service에 접근할 때) Private Service Connect를 통해서 접근하게 됩니다.
  • AWS VPC endpoints 서비스와는 다르게 각 Managed Service별로 endpoint를 만들 필요가 없습니다. AWS는 Interface Endpoints를 만들 때, 리전별 Managed Service별로 인터페이스를 별도로 만들어줘야 합니다.

Private Service Connect를 AWS에서 사용할 수 있도록 GCP Cloud Router에서 PSC IP 광고

GCP Cloud Router에서 PSC IP를 포함한 대역 커스텀 광고
  • AWS에서도 해당 PSC ip에 대한 경로가 있어야 하기 때문에 VPN을 통해서 광고해줘야 합니다.
  • VPN세팅할 때 만들었었던, GCP Hybrid Connectivity > Cloud Router에 Custom ranges에 PSC ip가 포함되어 있는 대역을 광고해줍니다.
  • PSC ip가 GCP vpc의 subnet의 대역이 아니기 때문에, 별도로 Custom ranges로 광고해줘야 합니다.
PSC IP를 AWS에서 사용
  • AWS에서는 GCP로부터 광고받은 PSC IP에 대해서 TGW까지는 경로를 알고 있지만, aws 서브넷에 있는 자원들은 GCP PSC IP에 대한 경로를 모릅니다.
  • 따라서 연동시키려는 AWS 서브넷에 PSC IP에 대한 경로를 별도로 Static Routing으로 만들어줘야 합니다.
  • 그리고 AWS 서브넷에서도 googleapis.com 도메인 룩업을 했을 때, PSC IP를 받아올 수 있도록 설정해줘야 합니다.
  • googleapis.com 도메인을 위한 AWS Route53 Private Zone을 별도로 만들어서 VPC와 연동할 수도 있지만, 이미 만들어놓은 googleapis.com GCP Cloud DNS private zone을 AWS VPC에서도 사용하게 할 수 있기 때문에 이 방법에 대해서는 다음 글에서 정리해보겠습니다.

참고 문서

--

--

Derek.Kim

SRE who loves devops & Cloud GDE(Champion Innovator - Security and Networking)