VPC 네트워크에 연결

이 페이지에서는 Cloud Run 서비스 또는 작업을 VPC 네트워크에 연결하여 Cloud Run에서 Compute Engine VM 인스턴스, Memorystore 인스턴스, 내부 IP 주소가 있는 기타 리소스에 이그레스(아웃바운드) 트래픽을 허용하는 방법을 보여줍니다.

서버리스 VPC 액세스 커넥터를 구성하거나 커넥터가 필요 없는 직접 VPC 이그레스(미리보기)를 사용하여 서비스 또는 작업이 VPC 네트워크로 트래픽을 전송하도록 사용 설정할 수 있습니다.

시작하기 전에

제한사항

IPv6 트래픽은 지원되지 않습니다.

커넥터 만들기

공개 인터넷을 사용하지 않고 VPC 네트워크에 요청을 보내고 이에 대한 응답을 수신하려면 서버리스 VPC 액세스 커넥터를 사용해야 합니다.

Google Cloud 콘솔, Google Cloud CLI 또는 Terraform을 사용하여 커넥터를 만들 수 있습니다.

콘솔

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

    서버리스 VPC 액세스로 이동

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

  3. 이름 필드에 커넥터 이름을 입력합니다. Compute Engine 이름 지정 규칙을 따라야 하며 21자(영문 기준) 미만이고 하이픈(-)이 2자로 계산되는 추가 제한사항이 적용됩니다.

  4. 리전 필드에서 커넥터의 리전을 선택합니다. 이 리전은 서버리스 서비스의 리전과 일치해야 합니다.

    서비스 또는 작업이 us-central 또는 europe-west 리전에 있으면 us-central1 또는 europe-west1을 사용합니다.

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

  6. 서브넷 메뉴를 클릭합니다. 모든 커넥터에는 커넥터 인스턴스를 배치할 자체 /28 서브넷이 필요합니다. 서브넷은 VM, Private Service Connect 또는 부하 분산기와 같은 다른 리소스에서는 사용할 수 없습니다.

    • 자체 서브넷을 사용해야 하는 공유 VPC를 사용하는 경우 사용되지 않은 /28 서브넷을 선택합니다. 서브넷이 Private Service Connect 또는 Cloud Load Balancing에 사용되지 않는지 확인하려면 gcloud CLI에서 다음 명령어를 실행하여 purpose 서브넷이 PRIVATE인지 확인합니다.

      gcloud compute networks subnets describe SUBNET
      
      다음과 같이 바꿉니다.

      • SUBNET: 서브넷 이름
    • 공유 VPC를 사용하지 않는 경우 커넥터의 서브넷을 만들거나 커넥터가 메뉴에서 커스텀 IP 범위를 선택하여 서브넷을 만듭니다.

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

    • 생성된 서브넷이 숨겨지며 방화벽 규칙 및 NAT 구성에서 이를 사용할 수 없습니다.

    • Google Cloud 콘솔에서 현재 예약된 IP 범위를 확인합니다.

    • 서브넷 작업을 자세히 알아보세요.

  7. (선택사항) 커넥터를 추가로 제어하기 위해 확장 옵션을 설정하려면 확장 설정 표시를 클릭하여 확장 양식을 표시합니다.

    1. 커넥터의 최소 및 최대 인스턴스 수를 설정하거나 기본값 2(최소)와 10(최대)을 사용합니다. 커넥터는 트래픽 사용량이 필요하면 지정된 최대 수로 확장되지만 트래픽이 감소하면 커넥터가 다시 확장되지 않습니다. 210 사이의 값을 사용해야 합니다.
    2. 인스턴스 유형 메뉴에서 커넥터에 사용할 머신 유형을 선택하거나 기본 e2-micro를 사용합니다. 대역폭과 비용 추정을 표시하는 인스턴스 유형을 선택하는 경우 오른쪽에 있는 비용 사이드바를 확인합니다.
  8. 만들기를 클릭합니다.

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

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

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

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

    gcloud services enable vpcaccess.googleapis.com
    
  4. 자체 서브넷을 사용해야 하는 공유 VPC를 사용하는 경우 다음 명령어를 사용하여 커넥터를 만듭니다.

    gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --region REGION \
    --subnet SUBNET \
    # If you are not using Shared VPC, omit the following line.
    --subnet-project HOST_PROJECT_ID \
    # Optional: specify minimum and maximum instance values between 2 and
    10, default is 2 min, 10 max.
    --min-instances MIN \
    --max-instances MAX \
    # Optional: specify machine type, default is e2-micro
    --machine-type MACHINE_TYPE
    

    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름. Compute Engine 이름 지정 규칙을 따라야 하며 21자(영문 기준) 미만이고 하이픈(-)이 2자로 계산되는 추가 제한사항이 적용됩니다.
    • REGION: 커넥터의 리전으로, 서버리스 서비스 또는 작업의 리전과 일치해야 합니다. 서비스 또는 작업이 us-central 또는 europe-west 리전에 있으면 us-central1 또는 europe-west1을 사용합니다.
    • SUBNET: 사용되지 않은 /28 서브넷의 이름입니다.
      • 서브넷은 커넥터에서만 사용되어야 합니다. VM, Private Service Connect 또는 부하 분산기와 같은 다른 리소스에서는 사용될 수 없습니다.
      • 서브넷이 Private Service Connect 또는 Cloud Load Balancing에 사용되지 않는지 확인하려면 gcloud CLI에서 다음 명령어를 실행하여 purpose 서브넷이 PRIVATE인지 확인합니다.
        gcloud compute networks subnets describe SUBNET
        
        다음과 같이 바꿉니다.
        • SUBNET: 서브넷 이름입니다.
      • 서브넷 작업을 자세히 알아보세요.
    • HOST_PROJECT_ID: 호스트 프로젝트 ID입니다. 공유 VPC를 사용하는 경우에만 제공합니다.
    • MIN: 커넥터에 사용할 최소 인스턴스 수. 29 사이의 정수를 사용합니다. 기본값은 2입니다. 커넥터 확장에 대한 자세한 내용은 처리량 및 확장을 참조하세요.
    • MAX: 커넥터에 사용할 최대 인스턴스 수. 310 사이의 정수를 사용합니다. 기본값은 10입니다. 트래픽에 필요한 경우 커넥터는 [MAX] 인스턴스로 수평 확장되지만 다시 축소되지 않습니다. 커넥터 확장에 대한 자세한 내용은 처리량 및 확장을 참조하세요.
    • MACHINE_TYPE: f1-micro, e2-micro 또는 e2-standard-4. 머신 유형 및 확장을 포함한 커넥터 처리량에 대한 자세한 내용은 처리량 및 확장을 참조하세요.

    자세한 내용과 선택적 인수는 gcloud 참조를 확인하세요.

  5. 공유 VPC를 사용하지 않으며 기존 서브넷을 사용하는 대신 커스텀 IP 범위를 제공하려면 다음 명령어를 사용하여 커넥터를 만듭니다.

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

    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름. Compute Engine 이름 지정 규칙을 따라야 하며 21자(영문 기준) 미만이고 하이픈(-)이 2자로 계산되는 추가 제한사항이 적용됩니다.
    • VPC_NETWORK: 커넥터를 연결할 VPC 네트워크
    • REGION: 커넥터의 리전입니다. 서버리스 서비스 또는 작업의 리전과 일치해야 합니다. 서비스 또는 작업이 us-central 또는 europe-west 리전에 있으면 us-central1 또는 europe-west1을 사용합니다.
    • IP_RANGE: 예약되지 않은 내부 IP 네트워크이며, 할당되지 않은 공간의 /28이 필요합니다. 제공된 값은 CIDR 표기법(10.8.0.0/28)의 네트워크입니다. 이 IP 범위는 VPC 네트워크에 예약된 기존 IP 주소와 겹치지 않아야 합니다. 예를 들어 10.8.0.0/28은 대부분의 새 프로젝트에서 작동합니다. 이 범위에 생성된 서브넷은 숨겨져 있으며 방화벽 규칙 및 NAT 구성에서 사용할 수 없습니다.

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

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

    gcloud compute networks vpc-access connectors describe CONNECTOR_NAME \
    --region REGION
    

    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름이며, 이전 단계에서 지정한 이름입니다.
    • REGION: 커넥터의 리전이며, 이전 단계에서 지정한 리전입니다.

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

Terraform

Terraform 리소스를 사용하여 vpcaccess.googleapis.com API를 사용 설정할 수 있습니다.

resource "google_project_service" "vpcaccess-api" {
  project = var.project_id # Replace this with your project ID in quotes
  service = "vpcaccess.googleapis.com"
}

Terraform 모듈을 사용하여 VPC 네트워크 및 서브넷을 만든 후 커넥터를 만들 수 있습니다.

module "test-vpc-module" {
  source       = "terraform-google-modules/network/google"
  version      = "~> 9.0"
  project_id   = var.project_id # Replace this with your project ID in quotes
  network_name = "my-serverless-network"
  mtu          = 1460

  subnets = [
    {
      subnet_name   = "serverless-subnet"
      subnet_ip     = "10.10.10.0/28"
      subnet_region = "us-central1"
    }
  ]
}

module "serverless-connector" {
  source     = "terraform-google-modules/network/google//modules/vpc-serverless-connector-beta"
  version    = "~> 9.0"
  project_id = var.project_id
  vpc_connectors = [{
    name        = "central-serverless"
    region      = "us-central1"
    subnet_name = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
    # host_project_id = var.host_project_id # Specify a host_project_id for shared VPC
    machine_type  = "e2-standard-4"
    min_instances = 2
    max_instances = 7
    }
    # Uncomment to specify an ip_cidr_range
    #   , {
    #     name          = "central-serverless2"
    #     region        = "us-central1"
    #     network       = module.test-vpc-module.network_name
    #     ip_cidr_range = "10.10.11.0/28"
    #     subnet_name   = null
    #     machine_type  = "e2-standard-4"
    #     min_instances = 2
    #   max_instances = 7 }
  ]
  depends_on = [
    google_project_service.vpcaccess-api
  ]
}

커넥터를 사용하도록 서버리스 환경 구성

서버리스 VPC 액세스 커넥터를 만든 후 서버리스 환경의 안내에 따라 커넥터를 사용하도록 서버리스 환경을 구성합니다.

커넥터를 사용하도록 Cloud Run 구성

새 서비스를 만들거나 새 버전을 배포할 때 Google Cloud 콘솔, Google Cloud CLI, YAML 파일, Terraform 리소스를 사용하여 커넥터를 사용하도록 서비스를 구성할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Cloud Run으로 이동합니다.

    Cloud Run으로 이동

  2. 배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 원하는 대로 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 연결 탭을 클릭합니다.

    이미지

    • VPC 커넥터 필드에서 사용할 커넥터를 선택하거나 없음을 선택하여 VPC 네트워크에서 서비스의 연결을 해제합니다.
  5. 만들기 또는 배포를 클릭합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 배포 중에 커넥터를 지정하려면 --vpc-connector 플래그를 사용합니다.

    gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
    • SERVICE를 서비스 이름으로 바꿉니다.
    • IMAGE_URL을 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다. 커넥터가 공유 VPC의 호스트 프로젝트에 있는 경우 완전히 지정된 이름이어야 합니다. 예를 들면 다음과 같습니다.
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      여기서 HOST_PROJECT_ID는 호스트 프로젝트의 ID이고, CONNECTOR_REGION은 커넥터 리전이며, CONNECTOR_NAME은 커넥터에 지정한 이름입니다.

    기존 서비스의 커넥터를 연결, 업데이트, 삭제하려면 필요에 따라 다음 플래그 중 하나와 함께 gcloud run services update 명령어를 사용하세요.

    예를 들어 커넥터를 연결하거나 업데이트하려면 다음을 실행합니다.

    gcloud run services update SERVICE --vpc-connector CONNECTOR_NAME
    • SERVICE를 서비스 이름으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다.

YAML

YAML 형식으로 정리된 결과를 생성하는 gcloud run services describe --format export 명령어를 사용하면 기존 서비스 구성을 다운로드해서 볼 수 있습니다. 그런 다음 아래 설명된 필드를 수정하고 gcloud run services replace 명령어를 사용하여 수정된 YAML을 업로드할 수 있습니다. 설명된 대로 필드만 수정해야 합니다.

  1. 구성을 보고 다운로드하려면 다음을 실행합니다.

    gcloud run services describe SERVICE --format export > service.yaml
  2. 최상위 spec 속성 아래의 annotations 속성에서 run.googleapis.com/vpc-access-connector 속성을 추가하거나 업데이트합니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
    • SERVICE를 Cloud Run 서비스 이름으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다. 커넥터가 공유 VPC의 호스트 프로젝트에 있는 경우 완전히 지정된 이름이어야 합니다. 예를 들면 다음과 같습니다.
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      여기서 HOST_PROJECT_ID는 호스트 프로젝트의 ID이고, CONNECTOR_REGION은 커넥터 리전이며, CONNECTOR_NAME은 커넥터에 지정한 이름입니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud beta run services replace service.yaml

Terraform

Terraform 리소스를 사용하여 서비스를 만들고 커넥터를 사용하도록 구성할 수 있습니다.

# Cloud Run service
resource "google_cloud_run_v2_service" "gcr_service" {
  name     = "mygcrservice"
  provider = google-beta
  location = "us-west1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        limits = {
          cpu    = "1000m"
          memory = "512Mi"
        }
      }
      # the service uses this SA to call other Google Cloud APIs
      # service_account_name = myservice_runtime_sa
    }

    scaling {
      # Limit scale up to prevent any cost blow outs!
      max_instance_count = 5
    }

    vpc_access {
      # Use the VPC Connector
      connector = google_vpc_access_connector.connector.id
      # all egress from the service should go through the VPC Connector
      egress = "ALL_TRAFFIC"
    }
  }
}

커넥터를 사용하도록 Cloud Functions 구성

Google Cloud 콘솔 또는 Google Cloud CLI에서 커넥터를 사용하도록 함수를 구성할 수 있습니다.

콘솔

  1. Google Cloud 콘솔의 Cloud Functions 개요 페이지로 이동합니다.

    Cloud Functions로 이동

  2. 함수 만들기를 클릭합니다. 또는 기존 함수를 클릭하여 세부정보 페이지로 이동하고 수정을 클릭합니다.

  3. 실행 시간, 빌드 및 연결 설정을 클릭하여 고급 설정을 펼칩니다.

  4. 이그레스 설정의 연결 탭에서 VPC 커넥터 필드에 커넥터 이름을 입력합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. gcloud functions deploy 명령어를 사용하여 함수를 배포하고 --vpc-connector 플래그를 지정합니다.

    gcloud functions deploy FUNCTION_NAME \
    --vpc-connector CONNECTOR_NAME \
    FLAGS...
    

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

    • FUNCTION_NAME은 함수의 이름입니다.
    • CONNECTOR_NAME은 커넥터의 이름입니다. 커넥터가 공유 VPC의 호스트 프로젝트에 있는 경우 완전히 지정된 이름이어야 합니다. 예를 들면 다음과 같습니다.
      projects/HOST_PROJECT_ID/locations/CONNECTOR_REGION/connectors/CONNECTOR_NAME
      여기서 HOST_PROJECT_ID는 호스트 프로젝트의 ID이고, CONNECTOR_REGION은 커넥터 리전이며, CONNECTOR_NAME은 커넥터에 지정한 이름입니다.
    • FLAGS...함수 배포 중에 전달한 다른 플래그를 나타냅니다.

커넥터를 통해 라우팅할 수 있는 요청을 추가로 제어하려면 이그레스 설정을 참조하세요.

커넥터를 사용하도록 App Engine 구성

Python 2

  1. App Engine URL Fetch 서비스의 사용을 중단합니다.

    기본적으로 모든 요청은 URL Fetch 서비스를 통해 라우팅됩니다. 그러면 VPC 네트워크에 대한 요청이 실패합니다. 이 기본값을 사용 중지하려면 URL Fetch를 사용 중지하여 모든 아웃바운드 요청 처리를 참조하세요.

    필요한 경우 개별 요청에 직접 urlfetch 라이브러리를 직접 사용할 수 있지만 권장하지 않습니다.

  2. 서버리스 VPC 액세스 필드를 app.yaml 파일에 추가합니다.

    vpc_access_connector:
     name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다. 커넥터가 공유 VPC의 호스트 프로젝트에 있는 경우 호스트 프로젝트의 ID여야 합니다.
    • REGION을 커넥터가 있는 리전으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다.
  3. 서비스를 배포합니다.

    gcloud app deploy

    서비스를 배포한 후에는 내부 IP 주소로 요청을 보내 VPC 네트워크의 리소스에 액세스할 수 있습니다.

자바 8

  1. App Engine URL Fetch 서비스 URLFetchService의 사용을 중단합니다.

  2. 서버리스 VPC 액세스 요소를 서비스의 appengine-web.xml 파일에 추가합니다.

    <vpc-access-connector>
    <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name>
    </vpc-access-connector>
    

    다음을 바꿉니다.

    • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다. 커넥터가 공유 VPC의 호스트 프로젝트에 있는 경우 호스트 프로젝트의 ID여야 합니다.
    • REGION을 커넥터가 있는 리전으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다.
  3. 서비스를 배포합니다.

    gcloud app deploy WEB-INF/appengine-web.xml

    서비스를 배포한 후에는 내부 IP 주소로 요청을 보내 VPC 네트워크의 리소스에 액세스할 수 있습니다.

Go 1.11

  1. App Engine URL Fetch 서비스의 사용을 중단합니다.

    서버리스 VPC 액세스는 URL Fetch를 지원하지 않으며 URL Fetch를 사용하여 수행한 요청은 서버리스 VPC 액세스 설정을 무시합니다. 대신 소켓을 사용하여 아웃바운드 연결을 수행합니다.

  2. 서버리스 VPC 액세스 필드를 app.yaml 파일에 추가합니다.

    vpc_access_connector:
     name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다.
    • REGION을 커넥터가 있는 리전으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다.
  3. 서비스를 배포합니다.

    gcloud app deploy

    서비스를 배포한 후에는 내부 IP 주소로 요청을 보내 VPC 네트워크의 리소스에 액세스할 수 있습니다.

다른 모든 런타임

  1. 서버리스 VPC 액세스 필드를 app.yaml 파일에 추가합니다.

    vpc_access_connector:
     name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
    

    다음을 바꿉니다.

    • PROJECT_ID를 Google Cloud 프로젝트 ID로 바꿉니다. 커넥터가 공유 VPC의 호스트 프로젝트에 있는 경우 호스트 프로젝트의 ID여야 합니다.
    • REGION을 커넥터가 있는 리전으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다.
  2. 서비스를 배포합니다.

    gcloud app deploy

    서비스를 배포한 후에는 내부 IP 주소로 요청을 보내 VPC 네트워크의 리소스에 액세스할 수 있습니다.

커넥터 없이 Cloud Run 환경 구성

Cloud Run 서비스를 사용 설정하여 이그레스(아웃바운드) 트래픽을 VPC 네트워크로 직접 전송하여 Compute Engine VM 인스턴스, Memorystore 인스턴스, 내부 IP 주소가 있는 기타 모든 리소스에 액세스할 수 있습니다.

커넥터 없이 서비스 구성

직접 VPC 이그레스를 사용하면 Cloud Run 서비스가 서버리스 VPC 액세스 커넥터 없이 VPC 네트워크로 트래픽을 전송할 수 있습니다. 네트워크 비용은 서비스 자체와 마찬가지로 0으로 조정됩니다. Cloud Run 서비스 버전에서 직접 네트워크 태그를 사용하여 네트워크 보안을 더욱 세분화할 수 있습니다.

Google Cloud 콘솔, Google Cloud CLI, YAML을 사용하여 서비스와 함께 직접 VPC 이그레스를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 배포할 새 서비스를 구성하려면 서비스 만들기를 클릭합니다. 기존 서비스를 구성하고 배포하는 경우 서비스를 클릭한 후 새 버전 수정 및 배포를 클릭합니다.

  3. 새 서비스를 구성하는 경우 필요에 따라 초기 서비스 설정 페이지를 작성한 후 컨테이너, 볼륨, 네트워킹, 보안을 클릭하여 서비스 구성 페이지를 펼칩니다.

  4. 네트워킹 탭을 클릭합니다.

  5. 아웃바운드 트래픽을 위해 VPC에 연결을 클릭합니다.

  6. VPC로 직접 트래픽 전송을 클릭합니다.

  7. 네트워크 필드에서 트래픽을 전송할 VPC 네트워크를 선택합니다.

  8. 서브넷 필드에서 서비스가 IP 주소를 수신할 서브넷을 선택합니다. 동일한 서브넷에 여러 서비스를 배포할 수 있습니다.

  9. 선택사항: 서비스 또는 연결할 네트워크 태그의 이름을 입력합니다. 네트워크 태그는 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.

  10. 트래픽 라우팅에 다음 중 하나를 선택합니다.

    • VPC 네트워크를 통해 내부 주소로만 트래픽을 전송하도록 비공개 IP에 대한 요청만 VPC로 라우팅합니다.
    • VPC 네트워크를 통해 모든 아웃바운드 트래픽을 전송하려면 모든 트래픽을 VPC로 라우팅합니다.
  11. 만들기 또는 배포를 클릭합니다.

  12. 서비스가 VPC 네트워크에 있는지 확인하려면 서비스를 클릭한 후 네트워킹 탭을 클릭합니다. 네트워크와 서브넷은 VPC 카드에 나열됩니다.

    이제 방화벽 규칙에서 허용하는 대로 Cloud Run 서비스에서 VPC 네트워크의 모든 리소스로 요청을 전송할 수 있습니다.

gcloud

Google Cloud CLI에서 커넥터 없이 Cloud Run 서비스를 배포하려면 다음 안내를 따르세요.

  1. 프로젝트에 Compute Engine API가 사용 설정되었는지 확인합니다.

    gcloud services enable compute.googleapis.com
    
  2. 다음 명령어를 사용하여 Cloud Run 서비스를 배포합니다.

    gcloud beta run deploy SERVICE_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION
    

    다음과 같이 바꿉니다.

    • SERVICE_NAME을 Cloud Run 서비스 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/hello:latest)로 바꿉니다. Artifact Registry를 사용하는 경우 저장소 REPO_NAME이 이미 생성되어 있어야 합니다. URL의 형식은 REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG입니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다. 서브넷은 /26 이상이어야 합니다. 직접 VPC 이그레스는 IPv4 범위 RFC 1918, RFC 6598, 클래스 E를 지원합니다. 동일한 서브넷에서 여러 서비스 또는 작업을 배포하거나 실행할 수 있지만 서브넷은 기존 커넥터에서 공유할 수 없습니다.
    • 선택사항: NETWORK_TAG_NAMES를 서비스와 연결할 네트워크 태그의 쉼표로 구분된 이름으로 바꿉니다. 서비스의 경우 네트워크 태그가 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.
    • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • REGION을 서비스 리전으로 바꿉니다.
  3. 서비스가 VPC 네트워크에 있는지 확인하려면 다음 명령어를 실행합니다.

    gcloud beta run services describe SERVICE_NAME \
    --region=REGION
    

    다음과 같이 바꿉니다.

    • SERVICE_NAME을 서비스 이름으로 바꿉니다.
    • REGION을 이전 단계에서 지정한 서비스의 리전으로 바꿉니다.

    출력에는 네트워크, 서브넷, 이그레스 설정의 이름이 포함되어야 합니다. 예를 들면 다음과 같습니다.

    VPC access:
      Network:       default
      Subnet:        subnet
      Egress:        private-ranges-only
    

이제 방화벽 규칙에서 허용하는 대로 Cloud Run 서비스에서 VPC 네트워크의 모든 리소스로 요청을 전송할 수 있습니다.

YAML

YAML 파일에 서비스 사양을 저장한 후 gcloud CLI를 사용하여 배포할 수 있습니다.

  1. 다음 콘텐츠로 새 service.yaml 파일을 만듭니다.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE_NAME
      annotations:
        run.googleapis.com/launch-stage: BETA
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
            run.googleapis.com/vpc-access-egress: EGRESS_SETTING
        spec:
          containers:
          - image: IMAGE

    다음과 같이 바꿉니다.

    • SERVICE_NAME을 Cloud Run 서비스 이름으로 바꿉니다. 서비스 이름은 49자 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • REGION을 Cloud Run 서비스의 리전으로 바꿉니다. 이 리전은 서브넷 리전과 일치해야 합니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다. 서브넷은 /26 이상이어야 합니다. 직접 VPC 이그레스는 IPv4 범위 RFC 1918, RFC 6598, 클래스 E를 지원합니다. 동일한 서브넷에서 여러 서비스 또는 작업을 배포하거나 실행할 수 있지만 서브넷은 기존 커넥터에서 공유할 수 없습니다.
    • 선택사항: NETWORK_TAG_NAMES를 서비스에 연결할 네트워크 태그의 이름으로 바꿉니다. 서비스의 경우 네트워크 태그가 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.
    • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • IMAGE를 서비스 컨테이너 이미지의 URL로 바꿉니다.

    또한 환경 변수 또는 메모리 제한과 같은 추가 구성을 지정할 수 있습니다.

  2. 다음 명령어를 실행하여 새 서비스를 배포합니다.

    gcloud run services replace service.yaml
  3. 선택적으로 서비스에 대한 인증되지 않은 액세스를 허용하려면 서비스를 공개로 설정합니다.

기존 서비스 구성을 다운로드하거나 확인해야 할 경우에는 다음 명령어를 사용해서 결과를 YAML 파일로 저장합니다.

gcloud run services describe SERVICE --format export > service.yaml

서비스 구성 YAML 파일에서 필요에 따라 모든 spec.template 하위 속성을 수정하여 버전 설정을 업데이트한 후 새 버전을 배포합니다.

gcloud run services replace service.yaml

커넥터 없이 작업 구성

직접 VPC 이그레스를 사용하면 Cloud Run 작업이 서버리스 VPC 액세스 커넥터 없이 VPC 네트워크로 트래픽을 전송할 수 있습니다.

Google Cloud 콘솔, Google Cloud CLI, YAML을 사용하여 작업과 함께 직접 VPC 이그레스를 구성할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 새 작업을 구성하는 경우 작업 탭을 클릭하고 원하는 대로 초기 작업 설정 페이지를 작성합니다. 기존 작업을 구성하는 경우 작업을 클릭한 후 수정을 클릭합니다.

  3. 컨테이너, 변수 및 보안 비밀, 연결, 보안을 클릭하여 작업 속성 페이지를 펼칩니다.

  4. 연결 탭을 클릭합니다.

  5. 아웃바운드 트래픽을 위해 VPC에 연결을 클릭합니다.

  6. VPC로 직접 트래픽 전송을 클릭합니다.

  7. 네트워크 필드에서 트래픽을 전송할 VPC 네트워크를 선택합니다.

  8. 서브넷 필드에서 작업이 IP 주소를 수신할 서브넷을 선택합니다. 동일한 서브넷에서 여러 작업을 실행할 수 있습니다.

  9. 트래픽 라우팅에 다음 중 하나를 선택합니다.

    • VPC 네트워크를 통해 내부 주소로만 트래픽을 전송하도록 비공개 IP에 대한 요청만 VPC로 라우팅합니다.
    • VPC 네트워크를 통해 모든 아웃바운드 트래픽을 전송하려면 모든 트래픽을 VPC로 라우팅합니다.
  10. 선택사항: 서비스 또는 연결할 네트워크 태그의 이름을 입력합니다. 네트워크 태그는 버전 수준에서 지정됩니다. 각 서비스 버전은 network-tag-2와 같은 다른 네트워크 태그를 가질 수 있습니다.

  11. 선택사항: 작업에 연결할 네트워크 태그의 이름을 입력합니다. 작업의 경우 네트워크 태그는 실행 수준에서 지정됩니다. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.

  12. 만들기 또는 업데이트를 클릭합니다.

  13. 작업이 VPC 네트워크에 있는지 확인하려면 작업을 클릭한 다음 구성 탭을 클릭합니다. 네트워크와 서브넷은 VPC 카드에 나열됩니다.

    이제 방화벽 규칙에서 허용하는 대로 Cloud Run 작업을 실행하고 VPC 네트워크의 모든 리소스로 작업의 요청을 전송할 수 있습니다.

gcloud

Google Cloud CLI에서 커넥터 없이 Cloud Run 작업을 만들려면 다음 안내를 따르세요.

  1. 프로젝트에 Compute Engine API가 사용 설정되었는지 확인합니다.

    gcloud services enable compute.googleapis.com
    
  2. 다음 명령어를 사용하여 Cloud Run 작업을 만듭니다.

    gcloud run jobs create JOB_NAME \
    --image=IMAGE_URL \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-tags=NETWORK_TAG_NAMES \
    --vpc-egress=EGRESS_SETTING \
    --region=REGION
    

    다음과 같이 바꿉니다.

    • JOB_NAME을 Cloud Run 작업 이름으로 바꿉니다.
    • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: us-docker.pkg.dev/cloudrun/container/job:latest)로 바꿉니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다. 서브넷은 /26 이상이어야 합니다. 직접 VPC 이그레스는 IPv4 범위 RFC 1918, RFC 6598, 클래스 E를 지원합니다. 동일한 서브넷에서 여러 서비스 또는 작업을 배포하거나 실행할 수 있지만 서브넷은 기존 커넥터에서 공유할 수 없습니다.
    • 선택사항: NETWORK_TAG_NAMES를 작업에 연결할 네트워크 태그의 이름으로 바꿉니다. 작업의 경우 네트워크 태그는 실행 수준에서 지정됩니다. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.
    • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • REGION을 작업의 리전으로 바꿉니다.
  3. 작업이 VPC 네트워크에 있는지 확인하려면 다음 명령어를 실행합니다.

    gcloud run jobs describe JOB_NAME \
      --region=REGION
      

    다음과 같이 바꿉니다.

    • JOB_NAME을 작업 이름으로 바꿉니다.
    • REGION을 이전 단계에서 지정한 작업의 리전으로 바꿉니다.

    출력에는 다음과 같이 네트워크와 서브넷의 이름이 포함됩니다.

    VPC network:
      Network:       default
      Subnet:        default
    

이제 방화벽 규칙에서 허용하는 대로 Cloud Run 작업을 실행하고 VPC 네트워크의 모든 리소스로 작업의 요청을 전송할 수 있습니다.

YAML

YAML 파일에 작업 사양을 저장한 후 gcloud CLI를 사용하여 배포할 수 있습니다.

  1. 다음 콘텐츠로 새 job.yaml 파일을 만듭니다.

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB_NAME
      annotations:
        run.googleapis.com/launch-stage: BETA
      labels:
        cloud.googleapis.com/location: REGION
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]'
            run.googleapis.com/vpc-access-egress: EGRESS_SETTING
        spec:
          containers:
          - image: IMAGE

    다음과 같이 바꿉니다.

    • JOB_NAME을 Cloud Run 작업 이름으로 바꿉니다. 작업 이름은 49자 이하여야 하며 리전 및 프로젝트별로 고유해야 합니다.
    • REGION을 Cloud Run 작업의 리전으로 바꿉니다. 이 리전은 서브넷의 리전과 일치해야 합니다.
    • NETWORK를 VPC 네트워크의 이름으로 바꿉니다.
    • SUBNET을 서브넷 이름으로 바꿉니다. 서브넷은 /26 이상이어야 합니다. 직접 VPC 이그레스는 IPv4 범위 RFC 1918, RFC 6598, 클래스 E를 지원합니다. 동일한 서브넷에서 여러 서비스 또는 작업을 배포하거나 실행할 수 있지만 서브넷은 기존 커넥터에서 공유할 수 없습니다.
    • 선택사항: NETWORK_TAG_NAMES를 작업에 연결할 네트워크 태그의 이름으로 바꿉니다. 작업의 경우 네트워크 태그는 실행 수준에서 지정됩니다. 각 작업 실행에는 network-tag-2와 같은 다른 네트워크 태그가 있을 수 있습니다.
    • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 VPC 네트워크를 통해 전송합니다.
      • private-ranges-only: VPC 네트워크를 통해 내부 주소로만 트래픽을 전송합니다.
    • IMAGE를 작업 컨테이너 이미지의 URL로 바꿉니다.
  2. 다음 명령어를 실행하여 새 작업을 배포합니다.

    gcloud run jobs replace job.yaml

기존 작업 구성을 다운로드하거나 확인해야 할 경우에는 다음 명령어를 사용해서 결과를 YAML 파일로 저장합니다.

gcloud run jobs describe JOB --format export > job.yaml

작업 구성 YAML 파일에서 버전 설정을 업데이트할 수 있도록 필요에 따라 spec.template 하위 속성을 수정한 후 다시 배포합니다.

gcloud run jobs replace job.yaml

VPC 리소스에 대한 액세스 권한

서버리스 인프라에서 커넥터로 인그레스 허용

커넥터 VM은 Google Cloud 외부 IP 주소 범위 35.199.224.0/19에서 패킷을 수신할 수 있어야 합니다. Cloud Run, Cloud Functions, App Engine의 서비스가 패킷을 커넥터로 전송할 수 있도록 기본 Google 서버리스 인프라에서 이 범위를 사용합니다.

서버리스 VPC 액세스는 커넥터가 대상 VPC 네트워크와 동일한 프로젝트에 있을 때 35.199.224.0/19의 패킷을 허용하여 커넥터 VM에 적용되는 인그레스 허용 방화벽 규칙을 만듭니다. 커넥터가 독립형 VPC 네트워크를 대상으로 하는 경우 또는 커넥터가 공유 VPC 네트워크를 대상으로 하고 커넥터가 호스트 프로젝트에 있는 경우 커넥터와 대상 VPC 네트워크는 동일한 프로젝트에 있습니다.

공유 VPC 서비스 프로젝트에서 커넥터를 만드는 경우 공유 VPC 호스트 프로젝트의 보안 관리자 또는 프로젝트 소유자는 35.199.224.0/19의 패킷을 허용하는 커넥터 VM에 적용 가능한 인그레스 허용 방화벽 규칙을 만들어야 합니다. 다음은 인그레스 허용 VPC 방화벽 규칙의 예시입니다.

gcloud compute firewall-rules create RULE_NAME \
--action=ALLOW \
--rules=TCP \
--source-ranges=35.199.224.0/19 \
--target-tags=VPC_CONNECTOR_NETWORK_TAG \
--direction=INGRESS \
--network=VPC_NETWORK \
--priority=PRIORITY \
--project=PROJECT_ID

다음을 바꿉니다.

  • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 allow-vpc-connector-ingress입니다.
  • VPC_CONNECTOR_NETWORK_TAG: 범용 커넥터 네트워크 태그 vpc-connector를 사용하여 VPC 네트워크의 모든 커넥터에 규칙을 적용할 수 있습니다. 또는 커넥터와 관련된 네트워크 태그를 사용할 수 있습니다. 특정 네트워크 태그의 형식은 vpc-connector-REGION-CONNECTOR_NAME과 같으며, 여기서 REGION은 커넥터의 Google Cloud 리전이고 CONNECTOR_NAME은 이름입니다.
  • VPC_NETWORK: 커넥터가 대상으로 하는 VPC 네트워크의 이름입니다.
  • PRIORITY: 0~65535 사이의 정수. 예를 들어 0은 가장 높은 우선순위입니다.
  • PROJECT_ID: 커넥터가 대상으로 하는 VPC 네트워크가 포함된 프로젝트의 프로젝트 ID입니다.

커넥터 VM 액세스 VPC 네트워크 리소스 제한

VPC 방화벽 규칙 또는 방화벽 정책의 규칙을 사용하여 대상 VPC 네트워크의 리소스에 대한 커넥터의 액세스를 제한할 수 있습니다. 다음 전략 중 하나를 사용하여 이러한 제한을 수행할 수 있습니다.

  • 대상이 커넥터 VM 액세스를 제한하려는 리소스를 나타내고 소스가 커넥터 VM을 나타내는 인그레스 규칙을 만듭니다.
  • 대상이 커넥터 VM을 나타내고 대상이 커넥터 VM 액세스를 제한하려는 리소스를 나타내는 이그레스 규칙을 만듭니다.

다음 예시에서는 각 전략을 보여줍니다.

인그레스 규칙을 사용하여 액세스 제한

네트워크 태그나 CIDR 범위를 선택하여 VPC 네트워크로 들어오는 트래픽을 제어합니다.

네트워크 태그

다음 단계에서는 커넥터 네트워크 태그를 기준으로 VPC 네트워크에 대한 커넥터의 액세스를 제한하는 인그레스 규칙을 만드는 방법을 설명합니다.

  1. 방화벽 규칙을 삽입하는 데 필요한 권한이 있는지 확인하세요. 다음 Identity and Access Management(IAM) 역할 중 하나가 있어야 합니다.

  2. VPC 네트워크에서 커넥터 트래픽을 거부하세요.

    커넥터 네트워크 태그에서 인그레스를 거부하려면 VPC 네트워크에서 우선순위가 1000보다 낮은 인그레스 방화벽 규칙을 만듭니다. 이렇게 하면 기본적으로 서버리스 VPC 액세스가 VPC 네트워크에서 만드는 암시적 방화벽 규칙이 재정의됩니다.

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 deny-vpc-connector입니다.

    • PROTOCOL: VPC 커넥터에서 허용할 하나 이상의 프로토콜. 지원되는 프로토콜은 tcp 또는 udp입니다. 예를 들어 tcp:80,udp는 포트 80을 통한 TCP 트래픽 및 UDP 트래픽을 허용합니다. 자세한 내용은 allow 플래그 문서를 참조하세요.

      보안 및 검증을 위해 지원되지 않는 프로토콜 ah, all, esp, icmp, ipip, sctp에 대한 트래픽을 차단하도록 거부 규칙을 구성할 수도 있습니다.

    • VPC_CONNECTOR_NETWORK_TAG: 향후 모든 커넥터를 포함하여 모든 커넥터에 대한 액세스를 제한하려는 경우 범용 커넥터 네트워크 태그 또는 특정 커넥터에 대한 액세스를 제한하려는 경우 고유한 네트워크 태그

      • 범용 네트워크 태그: vpc-connector
      • 고유 네트워크 태그: vpc-connector-REGION-CONNECTOR_NAME

        다음과 같이 바꿉니다.

        • REGION: 제한할 커넥터의 리전
        • CONNECTOR_NAME: 제한할 커넥터의 이름

      커넥터 네트워크 태그에 대한 자세한 내용은 네트워크 태그를 참조하세요.

    • VPC_NETWORK: VPC 네트워크의 이름

    • PRIORITY: 0~65535 사이의 정수. 예를 들어 0은 가장 높은 우선순위입니다.

  3. 커넥터 트래픽을 수신할 리소스에 대한 커넥터 트래픽을 허용하세요.

    allowtarget-tags 플래그를 사용하여 VPC 커넥터에서 액세스할 VPC 네트워크의 리소스를 타겟팅하는 인그레스 방화벽 규칙을 만듭니다. 이 규칙의 우선순위를 이전 단계에서 만든 규칙의 우선순위보다 낮은 값으로 설정합니다.

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-tags=VPC_CONNECTOR_NETWORK_TAG \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 allow-vpc-connector-for-select-resources입니다.

    • PROTOCOL: VPC 커넥터에서 허용할 하나 이상의 프로토콜. 지원되는 프로토콜은 tcp 또는 udp입니다. 예를 들어 tcp:80,udp는 포트 80을 통한 TCP 트래픽 및 UDP 트래픽을 허용합니다. 자세한 내용은 allow 플래그 문서를 참조하세요.

    • VPC_CONNECTOR_NETWORK_TAG: 향후 모든 커넥터를 포함하여 모든 커넥터에 대한 액세스를 제한하려는 경우 범용 커넥터 네트워크 태그 또는 특정 커넥터에 대한 액세스를 제한하려는 경우 고유한 네트워크 태그. 이 태그는 이전 단계에서 지정한 네트워크 태그와 일치해야 합니다.

      • 범용 네트워크 태그: vpc-connector
      • 고유 네트워크 태그: vpc-connector-REGION-CONNECTOR_NAME

        다음과 같이 바꿉니다.

        • REGION: 제한할 커넥터의 리전
        • CONNECTOR_NAME: 제한할 커넥터의 이름

      커넥터 네트워크 태그에 대한 자세한 내용은 네트워크 태그를 참조하세요.

    • VPC_NETWORK: VPC 네트워크의 이름

    • RESOURCE_TAG: VPC 커넥터에서 액세스할 VPC 리소스의 네트워크 태그

    • PRIORITY: 이전 단계에서 설정한 우선순위보다 작은 정수. 예를 들어 이전 단계에서 만든 규칙의 우선순위를 990으로 설정하면 980을 시도합니다.

방화벽 규칙을 만드는 데 사용되는 필수 및 선택적 플래그에 대한 자세한 내용은 gcloud compute firewall-rules create 문서를 참조하세요.

CIDR 범위

다음 단계에서는 커넥터의 CIDR 범위를 기준으로 VPC 네트워크에 대한 커넥터의 액세스를 제한하는 인그레스 규칙을 만드는 방법을 설명합니다.

  1. 방화벽 규칙을 삽입하는 데 필요한 권한이 있는지 확인하세요. 다음 Identity and Access Management(IAM) 역할 중 하나가 있어야 합니다.

  2. VPC 네트워크에서 커넥터 트래픽을 거부하세요.

    커넥터의 CIDR 범위에서 인그레스를 거부하려면 VPC 네트워크에서 우선순위가 1000보다 낮은 인그레스 방화벽 규칙을 만듭니다. 이렇게 하면 기본적으로 서버리스 VPC 액세스가 VPC 네트워크에서 만드는 암시적 방화벽 규칙이 재정의됩니다.

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 deny-vpc-connector입니다.

    • PROTOCOL: VPC 커넥터에서 허용할 하나 이상의 프로토콜. 지원되는 프로토콜은 tcp 또는 udp입니다. 예를 들어 tcp:80,udp는 포트 80을 통한 TCP 트래픽 및 UDP 트래픽을 허용합니다. 자세한 내용은 allow 플래그 문서를 참조하세요.

      보안 및 검증을 위해 지원되지 않는 프로토콜 ah, all, esp, icmp, ipip, sctp에 대한 트래픽을 차단하도록 거부 규칙을 구성할 수도 있습니다.

    • VPC_CONNECTOR_CIDR_RANGE: 액세스를 제한하는 커넥터의 CIDR 범위

    • VPC_NETWORK: VPC 네트워크의 이름

    • PRIORITY: 0~65535 사이의 정수. 예를 들어 0은 가장 높은 우선순위입니다.

  3. 커넥터 트래픽을 수신할 리소스에 대한 커넥터 트래픽을 허용하세요.

    allowtarget-tags 플래그를 사용하여 VPC 커넥터에서 액세스할 VPC 네트워크의 리소스를 타겟팅하는 인그레스 방화벽 규칙을 만듭니다. 이 규칙의 우선순위를 이전 단계에서 만든 규칙의 우선순위보다 낮은 값으로 설정합니다.

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --target-tags=RESOURCE_TAG \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 allow-vpc-connector-for-select-resources입니다.

    • PROTOCOL: VPC 커넥터에서 허용할 하나 이상의 프로토콜. 지원되는 프로토콜은 tcp 또는 udp입니다. 예를 들어 tcp:80,udp는 포트 80을 통한 TCP 트래픽 및 UDP 트래픽을 허용합니다. 자세한 내용은 allow 플래그 문서를 참조하세요.

    • VPC_CONNECTOR_CIDR_RANGE: 액세스를 제한하는 커넥터의 CIDR 범위

    • VPC_NETWORK: VPC 네트워크의 이름

    • RESOURCE_TAG: VPC 커넥터에서 액세스할 VPC 리소스의 네트워크 태그

    • PRIORITY: 이전 단계에서 설정한 우선순위보다 작은 정수. 예를 들어 이전 단계에서 만든 규칙의 우선순위를 990으로 설정하면 980을 시도합니다.

방화벽 규칙을 만드는 데 사용되는 필수 및 선택적 플래그에 대한 자세한 내용은 gcloud compute firewall-rules create 문서를 참조하세요.

이그레스 규칙을 사용하여 액세스 제한

다음 단계에서는 커넥터 액세스를 제한하는 이그레스 규칙을 만드는 방법을 설명합니다.

  1. 방화벽 규칙을 삽입하는 데 필요한 권한이 있는지 확인하세요. 다음 Identity and Access Management(IAM) 역할 중 하나가 있어야 합니다.

  2. 커넥터의 이그레스 트래픽을 거부하세요.

    서버리스 VPC 액세스 커넥터에서 설정된 응답을 제외한 발신 트래픽을 대상으로 보내지 않도록 이그레스 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create RULE_NAME \
    --action=DENY \
    --rules=PROTOCOL \
    --direction=EGRESS \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 deny-vpc-connector입니다.

    • PROTOCOL: VPC 커넥터에서 허용할 하나 이상의 프로토콜. 지원되는 프로토콜은 tcp 또는 udp입니다. 예를 들어 tcp:80,udp는 포트 80을 통한 TCP 트래픽 및 UDP 트래픽을 허용합니다. 자세한 내용은 allow 플래그 문서를 참조하세요.

      보안 및 검증을 위해 지원되지 않는 프로토콜 ah, all, esp, icmp, ipip, sctp에 대한 트래픽을 차단하도록 거부 규칙을 구성할 수도 있습니다.

    • VPC_CONNECTOR_NETWORK_TAG: 규칙을 모든 기존 VPC 커넥터와 나중에 생성되는 VPC 커넥터에 적용하려는 경우에는 범용 VPC 커넥터 네트워크 태그. 또는 특정 커넥터를 제어하려는 경우에는 고유한 VPC 커넥터 네트워크 태그입니다.

    • VPC_NETWORK: VPC 네트워크의 이름

    • PRIORITY: 0~65535 사이의 정수. 예를 들어 0은 가장 높은 우선순위입니다.

  3. 대상이 커넥터에서 액세스하려는 CIDR 범위에 있으면 이그레스 트래픽을 허용합니다.

    allowdestination-ranges 플래그를 사용하여 특정 대상 범위의 커넥터에서 이그레스 트래픽을 허용하는 방화벽 규칙을 만듭니다. 대상 범위를 커넥터에서 액세스할 VPC 네트워크의 리소스 CIDR 범위로 설정합니다. 이 규칙의 우선순위를 이전 단계에서 만든 규칙의 우선순위보다 낮은 값으로 설정합니다.

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOL \
    --destination-ranges=RESOURCE_CIDR_RANGE \
    --direction=EGRESS \
    --network=VPC_NETWORK \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름. 예를 들면 allow-vpc-connector-for-select-resources입니다.

    • PROTOCOL: VPC 커넥터에서 허용할 하나 이상의 프로토콜. 지원되는 프로토콜은 tcp 또는 udp입니다. 예를 들어 tcp:80,udp는 포트 80을 통한 TCP 트래픽 및 UDP 트래픽을 허용합니다. 자세한 내용은 allow 플래그 문서를 참조하세요.

    • RESOURCE_CIDR_RANGE: 액세스를 제한하는 커넥터의 CIDR 범위

    • VPC_NETWORK: VPC 네트워크의 이름

    • VPC_CONNECTOR_NETWORK_TAG: 규칙을 모든 기존 VPC 커넥터와 나중에 생성되는 VPC 커넥터에 적용하려는 경우에는 범용 VPC 커넥터 네트워크 태그. 또는 특정 커넥터를 제어하려는 경우에는 고유한 VPC 커넥터 네트워크 태그입니다. 이전 단계에서 고유한 네트워크 태그를 사용한 경우 해당 고유한 네트워크 태그를 사용합니다.

    • PRIORITY: 이전 단계에서 설정한 우선순위보다 작은 정수. 예를 들어 이전 단계에서 만든 규칙의 우선순위를 990으로 설정하면 980을 시도합니다.

방화벽 규칙을 만드는 데 사용되는 필수 및 선택적 플래그에 대한 자세한 내용은 gcloud compute firewall-rules create 문서를 참조하세요.

커넥터 업데이트

Google Cloud 콘솔, Google Cloud CLI, API를 사용하여 커넥터의 다음 속성을 업데이트 및 모니터링할 수 있습니다.

  • 머신(인스턴스) 유형
  • 최소 및 최대 인스턴스 수
  • 최근 처리량, 인스턴스 수, CPU 사용률

머신 유형 업데이트

콘솔

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

    서버리스 VPC 액세스로 이동

  2. 수정할 커넥터를 선택하고 수정을 클릭합니다.

  3. 인스턴스 유형 목록에서 원하는 머신(인스턴스) 유형을 선택합니다. 사용 가능한 머신 유형에 대한 자세한 내용은 처리량 및 확장에 대한 문서를 참조하세요.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 커넥터 머신 유형을 업데이트하려면 터미널에서 다음 명령어를 실행합니다.

    gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --machine-type=MACHINE_TYPE
    
    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름
    • REGION: 커넥터 리전의 이름
    • MACHINE_TYPE: 선호하는 머신 유형. 사용 가능한 머신 유형에 대한 자세한 내용은 처리량 및 확장에 대한 문서를 참조하세요.

최소 및 최대 인스턴스 수 줄이기

최소 및 최대 인스턴스 수를 줄이려면 다음을 수행해야 합니다.

  1. 선호하는 값으로 새 커넥터를 만듭니다.
  2. 새 커넥터를 사용하도록 서비스 또는 함수를 업데이트합니다.
  3. 트래픽이 이동되면 이전 커넥터를 삭제합니다.

자세한 내용은 서버리스 VPC 액세스 커넥터 만들기를 참조하세요.

최소 및 최대 인스턴스 수 증가

콘솔

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

    서버리스 VPC 액세스로 이동

  2. 수정할 커넥터를 선택하고 수정을 클릭합니다.

  3. 최소 인스턴스 필드에서 선호하는 최소 인스턴스 수를 선택합니다.

    이 필드에서 사용할 수 있는 최솟값은 현재 값입니다. 이 필드에서 사용할 수 있는 최댓값은 최대 인스턴스 필드의 현재 값에서 1을 뺀 값입니다. 예를 들어 최대 인스턴스 필드 값이 8인 경우 최소 인스턴스 필드에서 사용 가능한 최댓값은 7입니다.

  4. 최대 인스턴스 필드에서 선호하는 최대 인스턴스 수를 선택합니다.

    이 필드에서 사용할 수 있는 최솟값은 현재 값입니다. 이 필드에서 사용할 수 있는 최댓값은 10입니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

  2. 커넥터의 최소 또는 최대 인스턴스 수를 늘리려면 터미널에서 다음 명령어를 실행합니다.

    gcloud beta compute networks vpc-access connectors update CONNECTOR_NAME --region=REGION --min-instances=MIN_INSTANCES --max-instances=MAX_INSTANCES
    
    다음을 바꿉니다.

  • CONNECTOR_NAME: 커넥터 이름
  • REGION: 커넥터 리전의 이름
  • MIN_INSTANCES: 선호하는 최소 인스턴스 수.
    • 이 필드에서 사용할 수 있는 최솟값은 min_instances의 현재 값입니다. 현재 값을 찾으려면 현재 속성 값 찾기를 참조하세요.
    • min_instancesmax_instances보다 작아야 하므로 이 필드에서 사용할 수 있는 최댓값은 현재 max_instances 값에서 1을 뺀 값입니다. 예를 들어 max_instances가 8이면 이 필드에서 사용할 수 있는 최댓값은 7입니다. 커넥터가 기본값인 max-instances 10을 사용할 경우 이 필드에서 사용할 수 있는 최댓값은 9입니다. max-instances의 값을 찾으려면 현재 속성 값 찾기를 참조하세요.
  • MAX_INSTANCES:

    • 이 필드에서 사용할 수 있는 최솟값은 max_instances의 현재 값입니다. 현재 값을 찾으려면 현재 속성 값 찾기를 참조하세요.
    • 이 필드에서 사용할 수 있는 최댓값은 10입니다.

    최소 인스턴스 수만 늘리고 최댓값은 높이고 싶지 않은 경우에도 최대 인스턴스 수를 지정해야 합니다. 반대로 최대 인스턴스 수만 업데이트하고 최솟값은 업데이트하지 않으려면 최소 인스턴스 수를 지정해야 합니다. 인스턴스의 최소 또는 최대 수를 현재 값으로 유지하려면 현재 값을 지정합니다. 현재 값을 찾으려면 현재 속성 값 찾기를 참조하세요.

현재 속성 값 찾기

커넥터의 현재 속성 값을 찾으려면 터미널에서 다음을 실행합니다.

gcloud compute networks vpc-access connectors describe CONNECTOR_NAME --region=REGION --project=PROJECT
다음을 바꿉니다.

  • CONNECTOR_NAME: 커넥터 이름
  • REGION: 커넥터 리전의 이름
  • PROJECT: Google Cloud 프로젝트 이름

커넥터 사용량 모니터링

커넥터 설정 조정 시기를 결정하는 데 도움이 되는 시간별 사용량을 모니터링합니다. 예를 들어 CPU 사용률이 급증하면 좋은 결과를 얻기 위해 인스턴스 최대 개수 증가를 시도할 수 있습니다. 또는 처리량을 최대치로 설정한 경우 더 큰 머신 유형으로 전환할 수 있습니다.

Google Cloud 콘솔을 사용하여 시간 경과에 따른 커넥터의 처리량, 인스턴스 수, CPU 사용률 측정항목에 대한 차트를 표시하려면 다음 안내를 따르세요.

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

    서버리스 VPC 액세스로 이동

  2. 모니터링할 커넥터 이름을 클릭합니다.

  3. 1~90일 중에서 표시할 일수를 선택합니다.

  4. 처리량 차트에서 차트 위로 마우스를 가져가 커넥터의 최근 처리량을 확인합니다.

  5. 인스턴스 수 차트에서 차트 위로 마우스를 가져가 커넥터가 최근에 사용한 인스턴스 수를 확인합니다.

  6. CPU 사용률 차트에서 차트 위로 마우스를 가져가서 커넥터의 최근 CPU 사용량을 확인합니다. 차트에는 50번째, 95번째, 99번째 백분위수의 인스턴스에 분산된 CPU 사용량이 표시됩니다.

커넥터 삭제

커넥터를 삭제하기 전에 연결된 서비스 또는 작업이 없는지 확인합니다.

공유 VPC 호스트 프로젝트에서 커넥터를 설정하는 공유 VPC 사용자의 경우 gcloud compute networks vpc-access connectors describe 명령어를 사용하여 해당 커넥터를 사용하는 서비스 또는 작업이 있는 프로젝트를 나열할 수 있습니다.

커넥터를 삭제하려면 Google Cloud 콘솔 또는 Google Cloud CLI를 사용하세요.

콘솔

  1. Google Cloud 콘솔에서 서버리스 VPC 액세스 개요 페이지로 이동합니다.

    서버리스 VPC 액세스로 이동

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

  3. 삭제를 클릭합니다.

gcloud

  1. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

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

    gcloud compute networks vpc-access connectors delete CONNECTOR_NAME --region=REGION
    

    다음을 바꿉니다.

    • CONNECTOR_NAME: 삭제할 커넥터의 이름
    • REGION: 커넥터가 위치한 리전

문제 해결

서비스 계정 권한

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

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

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

오류

서비스 계정에 서비스 에이전트 역할 필요 오류

리소스 서비스 사용량 제한 조직 정책 제약조건을 사용하여 Cloud Deployment Manager(deploymentmanager.googleapis.com)를 차단하면 다음 오류 메시지가 표시될 수 있습니다.

Serverless VPC Access service account (service-<PROJECT_NUMBER>@gcp-sa-vpcaccess.iam.gserviceaccount.com) needs Serverless VPC Access Service Agent role in the project.

조직 정책을 설정하여 차단 목록에서 Deployment Manager를 삭제하거나 허용 목록에 추가합니다.

커넥터 생성 오류

커넥터를 만드는 중에 오류가 발생하면 다음을 시도해 보세요.

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

리소스에 액세스할 수 없음

커넥터를 지정했지만 여전히 VPC 네트워크의 리소스에 액세스할 수 없는 경우 VPC 네트워크에 커넥터의 IP 주소 범위에서 인그레스를 거부하는 우선순위가 1000 이하인 우선순위를 가진 방화벽 규칙이 없는지 확인합니다.

공유 VPC 서비스 프로젝트에서 커넥터를 구성하는 경우 방화벽 규칙이 서버리스 인프라에서 커넥터로의 인그레스를 허용해야 합니다.

연결 거부 오류

네트워크 성능을 저하시키는 connection refused 오류가 발생하면 서버리스 애플리케이션의 호출 전반에 걸쳐 무제한으로 연결이 증가할 수 있습니다. 인스턴스당 사용되는 최대 연결 수를 제한하려면 연결 풀을 지원하는 클라이언트 라이브러리를 사용합니다. 연결 풀 사용 방법에 대한 자세한 예시는 데이터베이스 연결 관리를 참조하세요.

리소스를 찾을 수 없음 오류

VPC 네트워크 또는 방화벽 규칙을 삭제할 때 다음과 비슷한 메시지가 표시될 수 있습니다. The resource "aet-uscentral1-subnet--1-egrfw" was not found.

이 오류 및 해결 방법에 대한 자세한 내용은 VPC 방화벽 규칙 문서의 리소스를 찾을 수 없음 오류를 참조하세요.

다음 단계