Cloud Run functions에서 VPC Service Controls 경계 내로의 액세스를 허용하는 방법

구글 인사이트

by Sangmi Park

#VPC 서비스 제어 #Cloud Run functions #보안 #Google Cloud

Google Cloud (이전 GCP)의 Cloud Run functions (이전 Cloud Functions)에서 VPC Service Controls 경계의 리소스에 액세스하는 방법에 대해 설명합니다.

소개

이 문서에서는 Cloud Run functions에서 VPC Service Controls로 보호되는 Google Cloud 프로젝트의 리소스에 액세스하는 방법과 어떤 설정으로 액세스가 성공 또는 실패하는지 설명합니다.

 
VPC 서비스 제어

VPC Service Controls는 Google Cloud에서 제공하는 보안 서비스입니다. 서비스 경계라는 논리적 경계를 만들고 경계를 가로 지르는 API 요청을 제한합니다.

이 기사는 Ingress rules(내향 규칙) 등 VPC Service Controls의 기본 설정 항목에 대해서는 이해하고 있는 전제로 쓰여져 있습니다.

 
Cloud Run functions

Cloud Run functions는 Google Cloud에서 제공하는 서버리스 컴퓨팅 서비스입니다. 인프라를 구축하거나 관리하지 않고도 프로그램을 실행할 수 있습니다.

포인트

본 글에서 가장 전하고 싶은 포인트는 다음과 같습니다.

VPC Service Controls의 Ingress rule(내향 규칙)에서 소스 프로젝트를 지정하는 경우 Cloud Run functions는 VPC를 통해 요청을 제출해야 합니다.

액세스 성공 여부

다음과 같은 검증 환경을 준비했습니다.

  • VPC Service Controls로 보호되는 Google Cloud 프로젝트
  • 프로젝트 내에 Cloud Run functions 및 BigQuery 테이블 제공
  • Cloud Run functions는 ‘서비스 계정 A’를 연결합니다.
  • Cloud Run functions에서 BigQuery 테이블에 액세스하는 상황을 가정합니다.

이 환경에서 VPC Service Controls 및 Cloud Run functions 설정을 변경하면서 다양한 패턴으로 액세스 성공 여부를 확인했습니다.

No.VPC 서비스 제어Cloud Run functions액세스 결과
제한된 서비스VPC 액세스 가능 서비스Ingress rules의 API 클라이언트 FROM 속성네트워크 하향 설정
ID출처
1BigQuery API모든 제한된 서비스서비스 계정 A모든 출처없음OK
2BigQuery API모든 제한된 서비스서비스 계정 A프로젝트없음NG
3BigQuery API모든 제한된 서비스서비스 계정 A프로젝트모든 트래픽을 VPC 커넥터를 통해 라우팅OK
4BigQuery API모든 제한된 서비스서비스 계정 A프로젝트사설 IP에 대한 요청만 VPC 커넥터를 통해 라우팅NG
5BigQuery API없음서비스 계정 A프로젝트모든 트래픽을 VPC 커넥터를 통해 라우팅NG
6없음없음서비스 계정 A프로젝트모든 트래픽을 VPC 커넥터를 통해 라우팅NG
7없음없음서비스 계정 A프로젝트없음OK

VPC를 통한 요청이 필요한 이유

다음과 같은 검증 환경을 준비했습니다.

  • VPC Service Controls로 보호되는 Google Cloud 프로젝트
  • 프로젝트 내에 Cloud Run functions 및 BigQuery 테이블 제공
  • Cloud Run functions는 ‘서비스 계정 A’를 연결합니다.
  • Cloud Run functions에서 BigQuery 테이블에 액세스하는 상황을 가정합니다.

VPC Service Controls는 원칙적으로 경계를 넘는 액세스를 모두 차단합니다.

Ingress rules (내향 규칙)를 사용하면 특정 소스 (특정 IP 주소 또는 Google Cloud 프로젝트)를 연결하는 특정 ID (Google 계정 및 서비스 계정)에 대한 액세스를 예외적으로 허용할 수 있습니다.

따라서 Ingress rules에서 ID를 Cloud Run functions에 연결한 ‘서비스 계정 A’에 소스를 Cloud Run functions가 속한 Google Cloud 프로젝트 로 만들면 경계 내 액세스가 성공한 것처럼 인식됩니다.

그러나 위의 경우 Cloud Run functions에서 액세스가 실패합니다.

이는 Google Cloud의 공식 문서에 명시되어 있지 않지만 Cloud Run functions의 실행 기반이 사용자가 관리하는 Google Cloud 프로젝트와는 별도이기 때문이라고 추측할 수 있습니다.

따라서 해당 프로젝트에서 액세스할 수 있도록 Cloud Run functions를 VPC에 연결해야 합니다.

이것은 다음 공식 문서에서도 언급됩니다.

VPC 액세스 가능 서비스

또한 Cloud Run functions가 VPC를 통해 VPC Service Controls의 경계에 액세스하게 하려면 VPC 액세스 가능 서비스(VPC Accessible services)라는 설정 항목의 값을 알아야 합니다. 는 경계 내의 VPC 네트워크에서 액세스할 수 있는 서비스를 제어하는 ​​항목입니다.

이 항목에서 명시적으로 액세스할 서비스가 허용되지 않으면 Cloud Run functions에서 액세스가 실패합니다.

이전 표의 No. 6은 VPC 내부의 액세스이지만 “VPC의 액세스 가능한 서비스”에서 허용되지 않는 API에 요청하려고하므로 요청이 실패했습니다. 반대로 No.7은 VPC 외부의 요청입니다. 있고 BigQuery API는 경계로 보호되지 않으므로 요청이 성공합니다.

 
문의하기 베스픽 구독하기
궁금한 점이 있다면 클릭해주세요.