GCP Serverless 제품을 사용 시, VPC 외부에 생성 되기에 VPC Connector를 이용한 연결이 필요하다.

아래는 Function 을 예시로 가이드를 진행한다.

Shared-VPC 환경 기준으로 설명하며, 2가지 방법이 있다.

서비스 프로젝트에 생성하는 것은 비용 분리 및 프로젝트별 리소스 분리가 가능하다.

호스트 프로젝트에 생성하는 것은 비용이 더 절약 가능하며 커넥터의 관리가 용이하다.

(커넥터는 미사용하더라도 생성된 수량만큼 비용이 지출됨)

 

  1. 호스트 프로젝트에 생성

    (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-ingress

    https://cloud.google.com/functions/docs/networking/network-settings?hl=ko#route-egress-to-vpc

     

  2. 서비스 프로젝트에서 생성

    (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
     

  3. (5-1) 서비스 프로젝트에서 생성 시, 다음과 같이 서버리스에서 접근가능하게 방화벽 설정이 필요하다.

    1. https://cloud.google.com/functions/docs/networking/shared-vpc-service-projects?hl=ko#firewall-rules-shared-vpc

      - 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


  4. (6) [Service Project] Function의 Connection 설정에서 Egress 설정

    https://cloud.google.com/functions/docs/networking/shared-vpc-service-projects?hl=ko

 

  • 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" 권한 추가.