#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 | 출처 | |||||
1 | BigQuery API | 모든 제한된 서비스 | 서비스 계정 A | 모든 출처 | 없음 | OK |
2 | BigQuery API | 모든 제한된 서비스 | 서비스 계정 A | 프로젝트 | 없음 | NG |
3 | BigQuery API | 모든 제한된 서비스 | 서비스 계정 A | 프로젝트 | 모든 트래픽을 VPC 커넥터를 통해 라우팅 | OK |
4 | BigQuery API | 모든 제한된 서비스 | 서비스 계정 A | 프로젝트 | 사설 IP에 대한 요청만 VPC 커넥터를 통해 라우팅 | NG |
5 | BigQuery 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는 경계로 보호되지 않으므로 요청이 성공합니다.
- 참고 : VPC 액세스 가능한 서비스