GCP Serverless 제품을 사용 시, VPC 외부에 생성 되기에 VPC Connector를 이용한 연결이 필요하다.
아래는 Function 을 예시로 가이드를 진행한다.
Shared-VPC 환경 기준으로 설명하며, 2가지 방법이 있다.
서비스 프로젝트에 생성하는 것은 비용 분리 및 프로젝트별 리소스 분리가 가능하다.
호스트 프로젝트에 생성하는 것은 비용이 더 절약 가능하며 커넥터의 관리가 용이하다.
(커넥터는 미사용하더라도 생성된 수량만큼 비용이 지출됨)
-
호스트 프로젝트에 생성
(1) [HOST Project] Shared-VPC가 존재하는 프로젝트에서 Serverless VPC Access API enable
(2) [HOST Project] Serverless VPC access 메뉴에서 Connector 생성
(2-1) Shared-VPC로 생성
https://cloud.google.com/functions/docs/networking/shared-vpc-host-project?hl=ko#create-connector
(2-2) IAM에서 service-{서비스프로젝트Number}@gcf-admin-robot.iam.gserviceaccount.com 계정에 Serverless VPC Access User 권한 추가
(3) [Service Project] Function의 Connection 설정에서 Egress 설정 추가(4) [HOST Project] Connetor의 tag 는 다음과 같이 자동으로 설정.
Firewall Rule에 아래 Tag 중에 하나를 Egress Rule 로 등록(Tag -> 연결하고자하는 VPC Subnet)
- Connector Network Tag[개별 Tag 사용 권장]
범용 Tag: vpc-connector
개별 Tag: vpc-connector-{Region}-{Connector_name}
https://cloud.google.com/vpc/docs/configure-serverless-vpc-access#restrict-by-ingresshttps://cloud.google.com/functions/docs/networking/network-settings?hl=ko#route-egress-to-vpc
-
서비스 프로젝트에서 생성
(1) [Service Project] 서비스 프로젝트에서 Serverless VPC Access API enable
(2) [HOST Project] IAM에 서비스 프로젝트의 SA 권한 추가
IAM에서 아래의 두 SA계정에 Network User 권한 추가
service-{서비스프로젝트Number}@gcp-sa-vpcaccess.iam.gserviceaccount.com
{서비스프로젝트Number}@cloudservices.gserviceaccount.com(3) [HOST Project] /28 대역으로 Connector 용 서브넷 생성 및 Service Project 서브넷에 attach
- Subent 에 프로젝트 attach 추가 시 다음과 같은 권한 부여됨.(또는 수동으로 추가)
- VPC 내의 자원(ex.PSC)에 연결하고자 한다면 Private Google Access 를 on으로 해야한다.
{서비스프로젝트Number}-compute@developer.gserviceaccount.com
{서비스프로젝트Number}@cloudservices.gserviceaccount.com(4) [Service Project]Serverless VPC Access Connector 생성
- Region 은 Connector 와 동일.
- Networks shared with me 선택
- Network: Shared VPC 선택
- Subnet: (3)에서 생성한 Subnet 선택
- Show Scaling setting: 오토스케일링 설정 및 인스턴스 타입 설정
(5) [HOST Project] Firewall Rule 설정
Firewall Rule에 아래 Tag 중에 하나를 Egress Rule 로 등록(Tag -> 연결하고자하는 VPC Subnet)
- Connector Network Tag[개별 Tag 사용 권장]
범용 Tag: vpc-connector
개별 Tag: vpc-connector-{Region}-{Connector_name}
https://cloud.google.com/vpc/docs/configure-serverless-vpc-access#restrict-by-ingress
-
(5-1) 서비스 프로젝트에서 생성 시, 다음과 같이 서버리스에서 접근가능하게 방화벽 설정이 필요하다.
-
-
- INGRESS
Source: 107.178.230.64/26, 35.199.224.0/19, 130.211.0.0/22, 35.191.0.0/16, 108.170.220.0/23
target-tags: vpc-connector
port: tcp:667, udp:665-666, icmp- ENGRESS
Destination: 107.178.230.64/26, 35.199.224.0/19
taget-tags: vpc-connector
port: allow tcp:667, udp:665-666, icmp
-
-
(6) [Service Project] Function의 Connection 설정에서 Egress 설정
-
GCE 쿼터, logs 그리고 organization policy 확인하라는 오류 발생 시.
프로젝트의 조직정책에서 image 를 제한적으로 가져오게 하는 설정이 있을 수 있다.
raganization policy 에서 "Define trusted image projects" 항목에 "serverless-vpc-access-images" 프로젝트 ID를 추가하여 조치해볼 수 있다.
-
Function 생성할 때, "Caller is missing permission 'iam.serviceaccounts.actAs' on service account" 에러 발생 시.
생성을 시도하는 User가 Service Account를 사용할 수 있는 권한이 없을 때 발생한다.
생성을 시도하는 User에 "Service Account User" 권한 추가.