VPC 네트워크에 연결

이 페이지에서는 서버리스 VPC 액세스를 사용하여 Cloud Run 서비스를 직접 VPC 네트워크에 연결하는 방법을 보여줍니다. 이렇게 하면 Compute Engine VM 인스턴스, Memorystore 인스턴스, 내부 IP 주소가 있는 기타 리소스에 액세스할 수 있습니다.

시작하기 전에

공유 VPC를 사용하는 경우 진행하기 전에 공유 VPC 네트워크에 연결을 참조하여 호스트 프로젝트를 구성합니다.

서버리스 VPC 액세스 커넥터 만들기

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

Google Cloud Console, gcloud 명령줄 도구 또는 Terraform을 사용하여 커넥터를 만들 수 있습니다.

Console

  1. 서버리스 VPC 액세스 API가 프로젝트에 사용 설정되어 있는지 확인합니다.

    API 사용 설정

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

    서버리스 VPC 액세스로 이동

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

  4. 이름 필드에 커넥터 이름을 입력합니다. Compute Engine 이름 지정 규칙을 준수해야 합니다.

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

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

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

  7. 서브네트워크 풀다운 메뉴를 클릭합니다.

    • 자체 서브넷을 사용하는 경우(공유 VPC에 필요) 커넥터에 사용할 /28 서브넷을 선택하세요.
    • 공유 VPC를 사용하지 않으며 커넥터가 명시적으로 서브넷을 만드는 대신 서브넷을 만들도록 하려면 풀다운 메뉴에서 커스텀 IP 범위를 선택합니다. 그런 다음 IP 범위 필드에 예약되지 않은 CIDR /28 내부 IP 범위의 첫 번째 주소를 입력합니다. 이 IP 범위는 VPC 네트워크에 예약된 기존 IP 주소와 겹치지 않아야 합니다. 예를 들어 10.8.0.0(/28)은 대부분의 새 프로젝트에서 작동합니다.

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

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

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

gcloud

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

    gcloud components update
    
  2. 서버리스 VPC 액세스 API가 프로젝트에 대해 사용 설정되어 있는지 확인합니다.

    gcloud services enable vpcaccess.googleapis.com
    
  3. 자체 서브넷(공유 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 이름 지정 규칙을 준수해야 합니다.
    • REGION: 커넥터의 리전으로, 서버리스 서비스의 리전과 일치해야 합니다. 서비스가 us-central 또는 europe-west 리전에 있으면 us-central1 또는 europe-west1을 사용합니다.
    • SUBNET: 다른 리소스에서 사용하지 않는 고유한 '/28' 전용 서브넷입니다. 제공해야 하는 값은 서브넷 이름입니다.
    • HOST_PROJECT_ID: 호스트 프로젝트 ID입니다. 공유 VPC를 사용하는 경우에만 제공합니다.
    • MIN: 커넥터에 사용할 최소 인스턴스 수입니다. 210 사이의 정수를 사용합니다. 기본값은 2입니다.
    • MAX: 커넥터에 사용할 최대 인스턴스 수입니다. 210 사이의 정수를 사용합니다. 기본값은 10입니다. 트래픽에 필요한 경우 커넥터는 [MAX] 인스턴스로 수평 확장되지만 다시 축소되지 않습니다.
    • MACHINE_TYPE: f1-micro, e2-micro 또는 e2-standard-4

      머신 유형 Mbps의 예상 처리량 범위 가격
      (커넥터 인스턴스 + 네트워크 이그레스 비용)
      f1-micro 100-500 f1-micro 가격
      e2-micro 200-1000 e2-micro 가격
      e2-standard-4 3200-16000 e2 표준 가격

    예를 들어 MACHINE_TYPEf1-micro로 설정하면 커넥터의 예상 처리량은 기본 MIN에서 100Mbps, 기본 MAX에서 500Mbps가 됩니다.

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

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

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

    다음을 바꿉니다.

    • CONNECTOR_NAME: 커넥터 이름입니다. Compute Engine 이름 지정 규칙을 준수해야 합니다.
    • 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은 대부분의 새 프로젝트에서 작동합니다.

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

  5. 커넥터를 사용하기 전에 커넥터가 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      = "~> 3.3.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"
  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 서비스를 구성해야 합니다. 새 서비스를 만들거나 새 버전을 배포할 때 Cloud Console, gcloud 명령줄 도구 또는 YAML 파일을 사용하면 이 작업을 수행할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

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

  3. 새 서비스를 구성하는 경우 필요에 따라 초기 서비스 설정 페이지를 작성한 후 다음 > 고급 설정을 클릭하여 서비스 구성 페이지에 연결합니다.

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

    이미지

  5. VPC 커넥터 필드에서 사용할 커넥터를 선택하거나 없음을 선택하여 VPC 네트워크에서 서비스 연결을 해제합니다.

  6. 만들기 또는 배포를 클릭합니다.

gcloud

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

gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
  • SERVICE를 서비스 이름으로 바꿉니다.
  • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: gcr.io/myproject/my-image:latest)로 바꿉니다.
  • 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 beta 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을 커넥터 이름으로 바꿉니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud beta run services replace service.yaml

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

방화벽 규칙을 사용하여 VPC 네트워크에 대한 커넥터의 액세스를 제한할 수 있습니다.

공유 VPC 네트워크에 연결할 경우 방화벽 규칙이 자동으로 생성되지 않습니다. 호스트 프로젝트에 대한 네트워크 관리자 역할이 있는 사용자는 호스트 프로젝트를 구성할 때 방화벽 규칙을 설정합니다.

독립형 VPC 네트워크에 연결할 때는 우선순위가 1,000인 암묵적 방화벽 규칙이 VPC 네트워크에 생성되어 커넥터의 서브넷이나 커스텀 IP 범위에서 VPC 네트워크의 모든 대상으로 이동하는 인그레스를 허용합니다. 암묵적인 방화벽 규칙은 Google Cloud Console에 표시되지 않으며 연결된 커넥터가 존재하는 경우에만 존재합니다. 커넥터가 VPC 네트워크의 모든 대상에 도달하지 않게 하려면 액세스를 제한할 수 있습니다.

커넥터 액세스를 제한하는 방법으로는 대상 리소스에 인그레스 규칙을 만들거나 VPC 커넥터에 이그레스 규칙을 만드는 방법이 있습니다.

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

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

네트워크 태그

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

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

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

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

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

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름입니다. 예를 들면 deny-vpc-connector입니다.
    • VPC_CONNECTOR_NETWORK_TAG: 향후 모든 커넥터를 포함하여 모든 커넥터에 대한 액세스를 제한하려는 경우 범용 커넥터 네트워크 태그 또는 특정 커넥터에 대한 액세스를 제한하려는 경우 고유한 네트워크 태그

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

        다음과 같이 바꿉니다.

        • REGION: 제한할 커넥터의 리전입니다.
        • CONNECTOR_NAME: 제한할 커넥터의 이름입니다.

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

    • VPC_NETWORK: VPC 네트워크의 이름입니다.

    • PRIORITY: 1~999의 정수입니다(해당 값 포함). 예를 들면 990입니다.

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

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

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOLS \
    --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입니다.
    • PROTOCOLS: VPC 커넥터에서 허용할 프로토콜입니다. 프로토콜은 대소문자를 구분하는 문자열 값인 tcp, udp, icmp, esp, ah, sctp 또는 IP 프로토콜 번호 중 하나 이상일 수 있습니다. 포트 기반 프로토콜(tcp, udp, sctp)의 경우 규칙이 적용되는 대상 포트나 포트 범위의 목록이 선택적으로 지정될 수 있습니다. 자세한 내용은 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 \
    --source-ranges=VPC_CONNECTOR_CIDR_RANGE \
    --direction=INGRESS \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름입니다. 예를 들면 deny-vpc-connector입니다.
    • VPC_CONNECTOR_CIDR_RANGE: 액세스를 제한하는 커넥터의 CIDR 범위입니다.
    • VPC_NETWORK: VPC 네트워크의 이름입니다.
    • PRIORITY: 1~999 사이의 정수입니다. 예를 들면 990입니다.
  3. 커넥터 트래픽을 수신할 리소스에 대한 커넥터 트래픽을 허용하세요.

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

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOLS \
    --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입니다.
    • PROTOCOLS: VPC 커넥터에서 허용할 프로토콜입니다. 프로토콜은 대소문자를 구분하는 문자열 값인 tcp, udp, icmp, esp, ah, sctp 또는 IP 프로토콜 번호 중 하나 이상일 수 있습니다. 포트 기반 프로토콜(tcp, udp, sctp)의 경우 규칙이 적용되는 대상 포트나 포트 범위의 목록이 선택적으로 지정될 수 있습니다. 자세한 내용은 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 \
    --direction=EGRESS \
    --target-tags=VPC_CONNECTOR_NETWORK_TAG \
    --network=VPC_NETWORK \
    --priority=PRIORITY
    

    다음을 바꿉니다.

    • RULE_NAME: 새 방화벽 규칙의 이름입니다. 예를 들면 deny-vpc-connector입니다.
    • VPC_CONNECTOR_NETWORK_TAG: 규칙을 모든 기존 VPC 커넥터와 나중에 생성되는 VPC 커넥터에 적용하려는 경우에는 범용 VPC 커넥터 네트워크 태그입니다. 또는 특정 커넥터를 제어하려는 경우에는 고유한 VPC 커넥터 네트워크 태그입니다.
    • VPC_NETWORK: VPC 네트워크의 이름입니다.
    • PRIORITY: 1~999 사이의 정수입니다. 예를 들면 990입니다.
  3. 대상이 커넥터에서 액세스하려는 CIDR 범위에 있으면 이그레스 트래픽을 허용합니다.

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

    gcloud compute firewall-rules create RULE_NAME \
    --allow=PROTOCOLS \
    --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입니다.
    • PROTOCOLS: VPC 커넥터에서 허용할 프로토콜입니다. 프로토콜은 대소문자를 구분하는 문자열 값인 tcp, udp, icmp, esp, ah, sctp 또는 IP 프로토콜 번호 중 하나 이상일 수 있습니다. 포트 기반 프로토콜(tcp, udp, sctp)의 경우 규칙이 적용되는 대상 포트나 포트 범위의 목록이 선택적으로 지정될 수 있습니다. 자세한 내용은 allow 플래그 문서를 참조하세요.
    • RESOURCE_CIDR_RANGE: 액세스를 제한하는 커넥터의 CIDR 범위입니다.
    • VPC_NETWORK: VPC 네트워크의 이름입니다.
    • VPC_CONNECTOR_NETWORK_TAG: 규칙을 모든 기존 VPC 커넥터와 나중에 생성되는 VPC 커넥터에 적용하려는 경우에는 범용 VPC 커넥터 네트워크 태그입니다. 또는 특정 커넥터를 제어하려는 경우에는 고유한 VPC 커넥터 네트워크 태그입니다. 이전 단계에서 고유한 네트워크 태그를 사용한 경우 해당 고유한 네트워크 태그를 사용합니다.
    • PRIORITY: 이전 단계에서 설정한 우선순위보다 작은 정수입니다. 예를 들어 이전 단계에서 만든 규칙의 우선순위를 990으로 설정하면 980을 시도합니다.

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

커넥터 관리

서비스에서 이그레스 트래픽 제어

기본적으로 내부 IP 주소 및 내부 DNS 이름에 대한 요청만 서버리스 VPC 액세스 커넥터를 통해 라우팅됩니다. 하지만 경우에 따라 서비스의 모든 아웃바운드 요청을 VPC 네트워크로 라우팅하려 할 수 있습니다. 예를 들어 아웃바운드 VPC 네트워크의 방화벽 규칙을 사용하여 Cloud Run 트래픽이 위험하거나 원치 않는 호스트에 도달하지 않게 하기 하려면 서버리스 VPC 액세스 커넥터를 통해 서비스에서 모든 아웃바운드 요청을 라우팅해야 합니다.

서비스에서 아웃바운드 요청 라우팅을 제어하기 위해서는 VPC 이그레스를 다음 옵션 중 하나로 설정할 수 있습니다.

  • VPC 커넥터를 통해 비공개 IP에 대한 요청만 라우팅: 기본값입니다. RFC 1918RFC 6598 IP 주소 범위 또는 내부 DNS 이름으로의 요청만 VPC 네트워크로 라우팅됩니다. 다른 모든 요청은 인터넷으로 직접 라우팅됩니다.
  • VPC 커넥터를 통해 모든 트래픽 라우팅: 서비스의 모든 아웃바운드 요청이 VPC 네트워크로 라우팅됩니다. 요청은 네트워크의 방화벽, DNS, 라우팅 규칙을 따릅니다.

새 서비스를 만들거나 새 버전을 배포할 때 Cloud Console, gcloud 명령줄 도구 또는 YAML 파일을 사용하여 VPC 이그레스 설정을 지정할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

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

  3. 새 서비스를 구성하는 경우 필요에 따라 초기 서비스 설정 페이지를 작성한 후 다음 > 고급 설정을 클릭하여 서비스 구성 페이지에 연결합니다.

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

    이미지

  5. VPC 커넥터를 선택한 후 VPC 커넥터를 통해 비공개 IP에 대한 요청만 라우팅 또는 VPC 커넥터를 통해 모든 트래픽 라우팅을 선택합니다.

  6. 만들기 또는 배포를 클릭합니다.

gcloud

이그레스 설정을 지정하려면 --vpc-egress 플래그를 사용합니다. 배포 중 이그레스 설정을 지정할 수 있습니다.

gcloud run deploy SERVICE \
--image IMAGE_URL \
--vpc-connector CONNECTOR_NAME \
--vpc-egress EGRESS_SETTING
  • SERVICE를 서비스 이름으로 바꿉니다.
  • IMAGE_URL을 컨테이너 이미지에 대한 참조(예: gcr.io/myproject/my-image:latest)로 바꿉니다.
  • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다.
  • EGRESS_SETTING이그레스 설정 값으로 바꿉니다.
    • all-traffic: 모든 아웃바운드 트래픽을 커넥터를 통해 전송합니다.
    • private-ranges-only: VPC 커넥터를 통해 내부 주소로만 트래픽을 전송합니다.

또한 기존 서비스를 업데이트하고 이그레스 설정을 변경할 수 있습니다.

gcloud run services update SERVICE --vpc-egress EGRESS_SETTING
  • SERVICE를 서비스 이름으로 바꿉니다.
  • 위에 나열된 대로 EGRESS_SETTING이그레스 설정 값으로 바꿉니다.

YAML

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

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

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

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/vpc-access-connector: CONNECTOR_NAME
            run.googleapis.com/vpc-access-egress: EGRESS_SETTING
    • SERVICE를 Cloud Run 서비스 이름으로 바꿉니다.
    • CONNECTOR_NAME을 커넥터 이름으로 바꿉니다. run.googleapis.com/vpc-access-connector 속성은 이그레스 설정을 지정할 때 필요합니다.
    • EGRESS_SETTING을 다음 중 하나로 바꿉니다.
      • all-traffic: 모든 아웃바운드 트래픽을 커넥터를 통해 전송합니다.
      • private-ranges-only: VPC 커넥터를 통해 내부 주소로만 트래픽을 전송합니다.
  3. 다음 명령어를 사용하여 서비스를 새 구성으로 바꿉니다.

    gcloud beta run services replace service.yaml

서버리스 VPC 액세스 커넥터 설정 보기

Cloud Console 또는 gcloud 명령줄 도구를 사용하여 서비스의 현재 서버리스 VPC 액세스 커넥터 설정을 볼 수 있습니다.

콘솔

  1. Cloud Run으로 이동

  2. 관심이 있는 서비스를 클릭하여 서비스 세부정보 페이지를 엽니다.

  3. 버전 탭을 클릭합니다.

  4. 오른쪽의 세부정보 패널의 연결 탭 아래에 서버리스 VPC 액세스 커넥터 설정이 나열됩니다.

gcloud

  1. 다음 명령어를 사용하세요.

    gcloud run services describe SERVICE
  2. 반환된 구성에서 서버리스 VPC 액세스 커넥터 설정을 찾습니다.

VPC 네트워크에서 서비스 연결 해제

Cloud Console 또는 gcloud 명령줄 도구를 사용하여 VPC 네트워크에서 서비스 연결을 해제할 수 있습니다.

콘솔

  1. Cloud Run으로 이동

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

  3. 새 서비스를 구성하는 경우 필요에 따라 초기 서비스 설정 페이지를 작성한 후 다음 > 고급 설정을 클릭하여 서비스 구성 페이지에 연결합니다.

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

    이미지

  5. VPC 커넥터 필드에서 없음을 선택하여 VPC 네트워크에서 서비스 연결을 해제합니다.

  6. 만들기 또는 배포를 클릭합니다.

gcloud

gcloud run services update 명령어를 다음 플래그와 함께 사용합니다.

gcloud run services update SERVICE --clear-vpc-connector
  • SERVICE를 서비스 이름으로 바꿉니다.

커넥터에 트래픽이 없고 연결이 끊겨도 요금은 계속 청구됩니다. 자세한 내용은 가격 책정을 참조하세요. 커넥터가 더 이상 필요하지 않으면 계속 결제되지 않도록 커넥터를 삭제해야 합니다.

커넥터 삭제

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

공유 VPC 호스트 프로젝트에서 커넥터를 설정(더 이상 권장되지 않음)하는 공유 VPC 사용자의 경우 gcloud compute networks vpc-access connectors describe 명령어를 사용하여 해당 커넥터를 사용하는 서비스가 있는 프로젝트를 나열할 수 있습니다.

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

Console

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

    서버리스 VPC 액세스로 이동

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

  3. 삭제를 클릭합니다.

gcloud

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

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

다음을 바꿉니다.

  • CONNECTOR_NAME을 삭제할 커넥터의 이름으로 바꿉니다.
  • REGION을 커넥터가 위치한 리전으로 바꿉니다.

문제 해결하기

서비스 계정 권한

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

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

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

오류

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

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

커넥터를 지정했지만 VPC 네트워크의 리소스에 계속 액세스할 수 없으면 다음을 수행합니다.

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

다음 단계