서버리스 VPC 액세스 구성

서버리스 VPC 액세스를 사용하면 Google Cloud의 서버리스 환경(Cloud Run(완전 관리형), Cloud Functions, App Engine 표준 환경)에서 VPC 네트워크에 직접 연결할 수 있습니다. 이렇게 연결하면 서버리스 환경에서 Compute Engine VM 인스턴스, Memorystore 인스턴스, 내부 IP 주소가 있는 다른 리소스에 액세스할 수 있습니다. 예를 들어 다음과 같은 경우 유용할 수 있습니다.

  • Memorystore를 사용하여 서버리스 서비스의 데이터를 저장합니다.
  • 서버리스 워크로드는 Compute Engine VM에서 실행되는 타사 소프트웨어를 사용합니다.
  • Compute Engine의 관리형 인스턴스 그룹에서 백엔드 서비스를 실행한 상태에서 공개 인터넷에 노출되지 않고 이 백엔드와 통신하기 위해 서버리스 환경이 필요합니다.
  • 서버리스 환경은 Cloud VPN을 통해 온프레미스 데이터베이스의 데이터에 액세스해야 합니다.

VPC 네트워크에 연결하면 RFC 1918RFC 6598에서 정의된 대로 서버리스 환경에서 내부 DNS 이름 및 내부 IP 주소에 요청을 보낼 수 있습니다. 이러한 내부 주소는 Google Cloud 서비스에서만 액세스할 수 있습니다. 내부 주소를 사용하면 공개 인터넷에 리소스가 노출되지 않고 서비스 간의 통신 지연 시간이 단축됩니다.

서버리스 VPC 액세스는 요청이 서버리스 환경에서만 시작되도록 허용합니다. VM에서 시작된 요청은 서버리스 서비스의 외부 주소를 사용해야 합니다. 자세한 내용은 비공개 Google 액세스를 참조하세요.

서버리스 VPC 액세스는 공유 VPCCloud Interconnect, Cloud VPN, VPC 네트워크 피어링을 통해 연결된 네트워크와의 통신을 지원합니다. 서버리스 VPC 액세스는 기존 네트워크를 지원하지 않습니다.

서버리스 VPC 액세스 연결

서버리스 VPC 액세스는 커넥터라는 리소스를 토대로 합니다. 커넥터는 서버리스 환경과 VPC 네트워크 간의 트래픽을 처리합니다. Google Cloud 프로젝트에서 커넥터를 생성할 때 특정 VPC 네트워크 및 리전에 연결합니다. 그런 다음 아웃바운드 네트워크 트래픽에 커넥터를 사용하도록 서버리스 서비스를 구성할 수 있습니다.

커넥터를 만들 때 IP 범위도 할당합니다. 커넥터를 통해 VPC 네트워크로 전송된 트래픽은 이 범위의 주소에서 시작됩니다. IP 범위는 VPC 네트워크에 아직 예약되지 않은 CIDR /28 범위여야 합니다. 우선순위가 1,000인 묵시적인 방화벽 규칙이 VPC 네트워크에 생성되어 커넥터의 IP 범위에서 네트워크의 모든 대상으로 이동하는 인그레스를 허용합니다.

서버리스 VPC 액세스는 커넥터를 통해 전송된 트래픽의 양에 따라 커넥터 처리량을 100Mbps 단위로 증분하여 자동 프로비저닝합니다. 자동으로 프로비저닝된 처리량은 확장만 가능하며 축소되지는 않습니다. 커넥터는 항상 200Mbps 이상을 프로비저닝하며 처리량을 1,000Mbps까지 확장할 수 있습니다. 커넥터를 만들 때 처리량 확장 한도를 구성할 수 있습니다. 특히 트래픽 버스트가 짧은 경우 커넥터를 통한 실제 처리량이 프로비저닝된 처리량을 초과할 수 있습니다.

서버리스 VPC 액세스 커넥터에는 사용량에 따라 월별 요금이 부과됩니다. 자세한 내용은 가격 책정을 참조하세요.

서버리스 VPC 액세스 예시(확대하려면 클릭)
서버리스 VPC 액세스 예시(확대하려면 클릭)

다음 사항을 참고하세요.

  • 공유 VPC를 사용하지 않는 한 커넥터는 커넥터와 연결되는 서버리스 서비스와 동일한 프로젝트 및 리전에 있어야 합니다. 커넥터를 만들 수 있는 리전 목록은 지원되는 리전을 참조하세요.
  • 내부 IP 주소 및 내부 DNS 이름으로 가는 트래픽은 커넥터를 통해 라우팅됩니다. 기본적으로 외부 IP 주소에 대한 트래픽은 인터넷을 통해 라우팅됩니다.
  • 여러 서버리스 서비스에 동일한 커넥터를 사용할 수 있습니다.
  • 리전 간 액세스를 허용하는 리소스의 경우 커넥터는 트래픽을 전송하는 리소스와 다른 리전에 있을 수 있습니다. 커넥터의 이그레스에 대해 요금이 청구됩니다. 가격 책정을 참조하세요.

커넥터 만들기

커넥터를 만들려면 다음 Cloud Console 또는 gcloud 명령줄 도구를 사용합니다.

Console

  1. Serverless VPC Access API가 프로젝트에 대해 사용 설정되어 있는지 확인합니다.

    API 사용 설정

  2. 서버리스 VPC 액세스 개요 페이지로 이동합니다.

    서버리스 VPC 액세스로 이동

  3. 커넥터 만들기를 클릭합니다.

  4. 이름 필드에 커넥터 이름을 입력합니다.

  5. 리전 필드에서 커넥터의 리전을 선택합니다. 이 필드는 서버리스 서비스의 리전과 일치해야 합니다. 지원되는 리전을 참조하세요.

  6. 네트워크 필드에서 커넥터를 연결할 VPC 네트워크를 선택합니다.

  7. 예약되지 않은 CIDR /28 IP 범위의 첫번째 주소를 IP 범위 필드에 입력합니다. 이 IP 범위는 VPC 네트워크에 예약된 기존 IP 주소와 겹치지 않아야 합니다. 예를 들어 10.8.0.0(/28)은 대부분의 새 프로젝트에서 작동합니다.

  8. (선택사항) 커넥터의 처리량을 추가로 제어하려는 경우 최소 처리량최대 처리량 필드를 수정합니다.

  9. 만들기를 클릭합니다.

사용할 준비가 되면 커넥터 이름 옆에 녹색 체크표시가 나타납니다.

gcloud

  1. gcloud 구성요소를 최신 버전으로 업데이트합니다.

    gcloud components update
    
  2. Serverless VPC Access API가 프로젝트에 대해 사용 설정되어 있는지 확인합니다.

    gcloud services enable vpcaccess.googleapis.com
    
  3. 다음 명령어로 커넥터를 만듭니다.

    gcloud compute networks vpc-access connectors create [CONNECTOR_NAME] \
    --network [VPC_NETWORK] \
    --region [REGION] \
    --range [IP_RANGE]
    

    각 항목의 의미는 다음과 같습니다.

    • [CONNECTOR_NAME]은 커넥터 이름입니다.
    • [VPC_NETWORK]는 커넥터를 연결할 VPC 네트워크입니다.
    • [REGION]은 커넥터 리전입니다. 이 필드는 서버리스 서비스의 리전과 일치해야 합니다. 지원되는 리전을 참조하세요.
    • [IP_RANGE]는 예약되지 않은 CIDR /28 내부 IP 범위입니다. 이 IP 범위는 VPC 네트워크에 예약된 기존 IP 주소와 겹치지 않아야 합니다. 예를 들어 10.8.0.0/28은 대부분의 새 프로젝트에서 작동합니다.

    처리량 제어와 선택적 인수를 비롯한 자세한 내용은 gcloud 참조를 확인하세요.

  4. 커넥터를 사용하기 전에 커넥터가 READY 상태인지 확인합니다.

    gcloud compute networks vpc-access connectors describe [CONNECTOR_NAME] --region [REGION]
    

    출력에는 state: READY 줄이 포함되어야 합니다.

커넥터 삭제

커넥터를 삭제하기 전에 서비스에서 커넥터를 아직 사용하고 있는지 확인합니다. 서비스에서 커넥터를 분리하는 방법에 대한 자세한 내용은 관련 제품 문서를 참조하세요. 서버리스 VPC 액세스 커넥터가 아직 연결되어 있는 경우 VPC 네트워크를 삭제할 수 없습니다. VPC 네트워크를 삭제하기 전에 연결된 모든 커넥터를 삭제해야 합니다.

커넥터를 삭제하려면 Cloud Console 또는 gcloud 명령줄 도구를 사용하세요.

Console

  1. 서버리스 VPC 액세스 개요 페이지로 이동합니다.

    서버리스 VPC 액세스로 이동

  2. 삭제할 커넥터를 선택합니다.

  3. 삭제를 클릭합니다.

gcloud

커넥터를 삭제하려면 다음 gcloud 명령어를 사용하세요.

gcloud compute networks vpc-access connectors delete [CONNECTOR_NAME] --region [REGION]

각 항목의 의미는 다음과 같습니다.

  • [CONNECTOR_NAME]은 삭제할 커넥터의 이름입니다.
  • [REGION]은 커넥터가 위치한 리전입니다.

공유 VPC 네트워크 사용

조직에서 공유 VPC를 설정한 경우 공유 VPC 네트워크에 연결할 수 있도록 공유 VPC 서비스 프로젝트에서 다음 설정을 완료하여 서버리스 환경을 사용 설정합니다.

  1. 공유 VPC 호스트 프로젝트의 관리자는 호스트 프로젝트 내에 서버리스 VPC 액세스 커넥터를 만들고 공유 VPC 네트워크에 이를 연결해야 합니다.
  2. 해당하는 경우 호스트 프로젝트 관리자는 호스트 프로젝트에서 서버리스 VPC 액세스 사용자 IAM 역할을 다음 계정에 부여해야 합니다.

    • Cloud Run: 서비스 프로젝트의 Cloud Run 서비스 에이전트(service-SERVICE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com)
    • Cloud Functions: 서비스 프로젝트의 Cloud Functions 서비스 에이전트(service-SERVICE_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com)
    • App Engine: 서비스 프로젝트에서 App Engine 배포를 수행하는 개인 또는 서비스 계정

    서비스 프로젝트의 서버리스 환경은 이 IAM 역할을 통해 호스트 프로젝트의 커넥터를 사용할 수 있습니다.

    Console

    1. 공유 VPC 호스트 프로젝트의 IAM 페이지로 이동합니다.

      IAM으로 이동

    2. 추가를 클릭합니다.

    3. 새 구성원 필드에 해당 계정의 이메일 주소를 입력합니다(위의 내용 참조).

    4. 역할 필드에서 서버리스 VPC 액세스 사용자를 선택합니다.

    5. 저장을 클릭합니다.

    gcloud

    다음 명령어를 사용하여 공유 VPC 호스트 프로젝트에 대한 권한을 부여합니다.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member MEMBER \
    --role roles/vpcaccess.user
    

    여기서 HOST_PROJECT_ID는 공유 VPC 호스트 프로젝트의 ID이고 MEMBER는 적절한 계정의 이메일 주소입니다(위의 내용 참조). 계정 유형에 따라 MEMBER 프리픽스를 user: 또는 serviceAccount:로 사용합니다.

    필요에 따라 여러 계정에 이 과정을 반복합니다.

이 설정이 완료되면 공유 VPC 서비스 프로젝트의 연결된 서버리스 환경이 공유 VPC 네트워크에 연결하기 위해 호스트 프로젝트의 커넥터를 지정할 수 있습니다. 자세한 내용은 커넥터를 사용하도록 서비스 구성을 참조하세요.

커넥터를 사용하도록 서비스 구성

커넥터를 만든 후 커넥터를 사용하도록 서버리스 서비스를 구성할 수 있습니다. 커넥터를 사용하도록 서비스를 구성하는 방법은 제품에 따라 다릅니다. 자세한 내용은 관련 가이드를 참조하세요.

서비스가 VPC 네트워크에 연결되면 내부 IP 주소 또는 DNS 이름으로 요청을 전송하여 VM 인스턴스 및 기타 내부 리소스에 연결할 수 있습니다.

지원되는 서비스

서버리스 VPC 액세스를 사용하여 다음 서비스에서 VPC 네트워크에 연결할 수 있습니다.

지원되는 리전

다음 리전에서 서버리스 VPC 액세스 커넥터를 만들 수 있습니다.

  • asia-east2
  • asia-northeast1
  • asia-south1
  • australia-southeast1
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west6
  • northamerica-northeast1
  • southamerica-east1
  • us-central1
  • us-east1
  • us-east4
  • us-west2
  • us-west3
  • us-west4

선별된 IAM 역할

다음 표에서는 서버리스 VPC 액세스와 관련된 ID 및 액세스 관리(IAM) 역할을 설명합니다. 각 역할과 관련된 권한 목록은 IAM 문서의 서버리스 VPC 액세스 역할을 참조하세요.

역할 설명
서버리스 VPC 액세스 관리자
roles/vpcaccess.admin
모든 서버리스 VPC 액세스 리소스에 대한 전체 액세스 권한입니다.
서버리스 VPC 액세스 사용자
roles/vpcaccess.user
서버리스 VPC 액세스 커넥터의 사용자입니다.
서버리스 VPC 액세스 뷰어
roles/vpcaccess.viewer
모든 서버리스 VPC 액세스 리소스의 뷰어입니다.

서비스 계정

Cloud 프로젝트에서 작업을 수행하기 위해 서버리스 VPC 액세스 서비스는 서버리스 VPC 액세스 서비스 에이전트 서비스 계정을 사용합니다. 이 서비스 계정의 이메일 주소 형식은 다음과 같습니다.

service-PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com

기본적으로 이 서비스 계정에는 서버리스 VPC 액세스 서비스 에이전트 역할(roles/vpcaccess.serviceAgent)이 있습니다. 이 계정의 권한을 변경하면 서버리스 VPC 액세스 작업이 실패할 수 있습니다.

감사 로깅

서버리스 VPC 액세스 감사 로깅 정보를 참조하세요.

가격 책정

서버리스 VPC 액세스는 다음과 같이 가격이 책정됩니다.

리소스 가격
서버리스 VPC 액세스 커넥터 커넥터에 자동으로 프로비저닝된 100Mbps 처리량당 1개 f1-micro 인스턴스로 청구됨
서버리스 환경에서 대상으로 네트워크 이그레스 Compute Engine 네트워킹 요율에 따라 요금이 청구됨

Cloud Console에서 결제 보고서를 라벨 키 serverless-vpc-access로 필터링하면 서버리스 VPC 액세스 비용을 확인할 수 있습니다.

문제 해결

커넥터를 만드는 중에 오류가 발생하면 다음을 시도하여 커넥터를 다시 만듭니다.

  • VPC 네트워크의 기존 IP 주소 예약과 겹치지 않는 RFC 1918 내부 IP 범위를 지정합니다.
  • ID가 serverless-vpc-access-images인 프로젝트에서 Compute Engine VM 이미지 사용 권한을 프로젝트에 부여합니다. 이에 맞게 조직 정책을 업데이트하는 방법은 이미지 액세스 제약조건 설정을 참조하세요.
  • VM에서 IP 전달을 사용 설정하도록 constraints/compute.vmCanIpForward 조직 정책을 설정합니다.

서버리스 서비스의 커넥터를 지정했지만 VPC 네트워크의 리소스에 액세스할 수 없으면 다음을 시도하세요.

  • 1,000보다 앞선 우선순위가 지정된 VPC 네트워크에 커넥터의 IP 범위에서 들어오는 인그레스를 거부하는 방화벽 규칙이 없는지 확인합니다.