連線至虛擬私有雲網路

建議使用直接虛擬私有雲輸出,將流量傳送至虛擬私有雲網路,不需要連接器。

不過,如果無法使用直接虛擬私有雲輸出功能,您可以改為設定無伺服器虛擬私有雲存取連接器。本頁說明如何使用連接器,將 Cloud Run 服務或作業連線至虛擬私有雲網路,允許 Cloud Run 的輸出 (輸出) 流量流向 Compute Engine VM 執行個體、Memorystore 執行個體,以及任何其他具有內部 IP 位址的資源。

事前準備

  • 如果專案中沒有虛擬私有雲網路,請建立一個

  • 如果您使用共用虛擬私有雲,請參閱專門介紹產品無伺服器虛擬私有雲存取設定的說明文件。

  • 如果組織政策限制使用 Cloud Deployment Manager,您就無法建立或刪除無伺服器虛擬私有雲存取連接器。建立或刪除連接器需要使用 Deployment Manager 功能。

  • 如果專案已設定可信映像檔政策,請務必在 constraints/compute.trustedimageProjects 機構政策中允許 serverless-vpc-access-images 專案。

    連接器子網路需求

  • 每個連接器都需要專屬的PRIVATE子網路,並具備/28主要 IPv4 位址範圍。這個子網路無法供其他資源使用,例如 VM、Private Service Connect 或負載平衡器。建立連接器後,子網路就無法擴充。必須維持 /28 狀態。

  • 如要在服務專案中建立連接器,並使用主專案中的共用虛擬私有雲網路,共用虛擬私有雲網路的網路管理員必須先手動建立連接器的子網路,您才能建立連接器。

  • 如要判斷現有的手動建立子網路是否可供連接器使用,請說明該子網路:

    gcloud compute networks subnets describe SUBNET --region=REGION

    SUBNET 替換為子網路的名稱,並將 REGION 替換為包含子網路的區域。

    在輸出內容中,確認下列事項:

    • 子網路是正常的子網路。在 Google Cloud CLI 中,這表示 purpose 的值為 PRIVATE
    • 子網路的主要 IPv4 位址範圍 ipCidrRange/28
  • 如要在與連接器所用虛擬私有雲網路相同的專案中,建立無伺服器虛擬私有雲存取連接器,您可以先手動建立連接器的子網路,再建立連接器,也可以 Google Cloud 自動建立連接器的子網路。

    當 Google Cloud 為連接器建立子網路時,請注意下列事項:

    • 無論您使用 Google Cloud 主控台、Google Cloud CLI 或 Compute Engine API,列出子網路時,系統都不會顯示為連接器自動建立的子網路。

    • 無法說明連接器自動建立的子網路。

    • 自動建立的子網路會列在您說明虛擬私有雲網路時顯示的子網路清單中。

如要進一步瞭解子網路,包括如何列出現有子網路,判斷已使用的 IP 位址範圍,請參閱「使用子網路」。

限制

不支援 IPv6 流量。

建立連接器

如要將要求傳送至虛擬私有雲網路,並接收相應的回應,而不使用公開網際網路,可以採用無伺服器虛擬私有雲存取連接器。

如果連接器與虛擬私有雲網路位於同一專案,您可以透過現有子網路建立連接器,也可以建立連接器和新的子網路。

如果連接器位於服務專案中,並使用共用虛擬私有雲網路,則連接器和相關聯的虛擬私有雲網路會位於不同專案。如果連接器和虛擬私有雲網路位於不同專案中,共用虛擬私有雲網路管理員必須在共用虛擬私有雲網路中建立連接器的子網路,您才能建立連接器,必須使用現有子網路建立連接器。

如要進一步瞭解子網路需求,請參閱連接器子網路需求

如要瞭解連接器輸送量 (包括機器類型和資源調度),請參閱「輸送量和資源調度」。

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 建立連接器。

主控台

  1. 前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 總覽頁面。

    前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 頁面

  2. 按一下 [Create connector] (建立連接器)

  3. 在「Name」(名稱) 欄位中,輸入連接器的名稱,並符合 Compute Engine 命名慣例,且名稱長度不得超過 21 個字元,連字號 (-) 算兩個字元。

  4. 在「Region」(區域) 欄位中,選取連接器的區域。這必須與無伺服器服務的地區相符。

    如果服務或工作位於 us-centraleurope-west 區域,請使用 us-central1europe-west1

  5. 在「Network」(網路) 欄位中,選取要附加連接器的虛擬私人雲端網路。

  6. 在「Subnet」(子網路) 欄位中,選取下列其中一個選項:

    • 使用現有子網路建立連接器:在「子網路」欄位中選取現有子網路。

    • 建立連接器和新的子網路:在「子網路」欄位中選取「自訂 IP 範圍」。然後,在未使用的 /28 CIDR 中輸入第一個位址 (例如 10.8.0.0/28),做為連接器虛擬私有雲網路中新建立子網路的主要 IPv4 位址範圍。 Google Cloud 請確保 IP 範圍不會與連接器虛擬私有雲網路中的任何現有路徑衝突。新子網路的名稱開頭為「aet-」前置字串。

  7. (選用) 如要設定縮放選項,進一步控管連接器,請按一下「顯示縮放設定」,顯示縮放表單。

    1. 設定連接器的執行個體數量下限和上限,或使用預設值 (下限為 2,上限為 10)。如果流量用量需要,連接器會擴充至指定上限,但流量減少時,連接器不會縮減。你必須使用介於 210 之間的值。
    2. 在「Instance Type」(執行個體類型) 選單中,選擇要用於連接器的機器類型,或使用預設的 e2-micro。選擇執行個體類型時,請注意右側的費用側欄,其中會顯示頻寬和費用預估值。
  8. 點選「建立」

  9. 若連接器可供使用,其名稱旁邊會顯示一個綠色勾號。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. gcloud 元件更新到最新版本:

    gcloud components update
  3. 確認專案已啟用 Serverless VPC Access API:

    gcloud services enable vpcaccess.googleapis.com
  4. 使用下列任一選項建立連接器:

    如要瞭解詳情和選用引數,請參閱gcloud參考資料

    • 使用現有子網路建立連接器

      gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
       --region REGION \
       --subnet SUBNET_NAME \
       --subnet-project HOST_PROJECT_ID \
       --min-instances MIN \
       --max-instances MAX \
       --machine-type MACHINE_TYPE

      更改下列內容:

      • CONNECTOR_NAME:連接器的名稱,須符合 Compute Engine 命名慣例,且長度不得超過 21 個字元,連字號 (-) 算兩個字元。
      • REGION:連接器的區域,與無伺服器服務或作業的區域相符。如果您的服務或工作位於 us-centraleurope-west,請使用 us-central1europe-west1
      • SUBNET_NAME:現有子網路的名稱。
      • HOST_PROJECT_ID:共用虛擬私有雲主專案 ID。如果連接器和現有子網路位於同一個專案,請省略 --subnet-project 旗標。
      • MIN:連接器使用的執行個體數量下限。請使用介於 2(預設值) 和 9 之間的整數。
      • MAX:連接器可使用的執行個體數量上限。請使用介於 310 之間的整數 (預設值)。 如果連接器擴充至執行個體數量上限,就不會縮減
      • MACHINE_TYPE:必須是下列其中一項:f1-microe2-microe2-standard-4
    • 建立連接器和新的子網路

      gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
       --region REGION \
       --network VPC_NETWORK \
       --range IP_RANGE
       --min-instances MIN \
       --max-instances MAX \
       --machine-type MACHINE_TYPE

      更改下列內容:

      • CONNECTOR_NAME:連接器的名稱,須符合 Compute Engine 命名慣例,且長度不得超過 21 個字元,連字號 (-) 算兩個字元。
      • REGION:連接器的區域,與無伺服器服務或作業的區域相符。如果您的服務或工作位於 us-centraleurope-west,請使用 us-central1europe-west1
      • VPC_NETWORK:要附加連接器的虛擬私有雲網路名稱。連接器和虛擬私有雲網路必須位於同一專案中。
      • IP_RANGE:提供未使用的 /28 CIDR (例如 10.8.0.0/28),做為連接器虛擬私有雲網路中新子網路的主要 IPv4 位址範圍。 Google Cloud 請確保 IP 範圍不會與連接器虛擬私有雲網路中的任何現有路徑衝突。新子網路的名稱開頭為「aet-」前置字串。
      • MIN:連接器使用的執行個體數量下限。請使用介於 2(預設值) 和 9 之間的整數。
      • MAX:連接器可使用的執行個體數量上限。請使用介於 310 之間的整數 (預設值)。 如果連接器擴充至執行個體數量上限,就不會縮減
      • MACHINE_TYPE:必須是下列其中一項:f1-microe2-microe2-standard-4
  5. 先驗證您的連接器是否處於 READY 狀態,然後再使用:

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

    更改下列內容:

    • CONNECTOR_NAME:連接器名稱,也就是您在上一個步驟中指定的名稱。
    • REGION:連接器的區域,也就是您在上一個步驟中指定的區域。

    輸出內容應包含 state: READY 這一行。

  6. 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 模組建立虛擬私有雲網路和子網路,然後建立連接器。

    module "test-vpc-module" {
      source       = "terraform-google-modules/network/google"
      version      = "~> 11.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    = "~> 11.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
      ]
    }

設定無伺服器環境以使用連接器

建立無伺服器虛擬私有雲存取連接器後,請按照無伺服器環境的相關操作說明,設定無伺服器環境以使用該連接器:

設定 Cloud Run 以使用連接器

建立新服務部署新版本時,您可以使用 Google Cloud 控制台、Google Cloud CLI、YAML 檔案或 Terraform 資源,設定服務使用連接器。

控制台

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 從選單中選取「服務」,然後按一下「部署容器」來設定新服務。如要設定現有服務,請按一下該服務,然後點選「Edit and deploy new revision」(編輯及部署新修訂版本)

  3. 如要設定新服務,請填寫初始服務設定頁面,然後按一下「容器、磁碟區、網路與安全性」,展開服務設定頁面。

  4. 按一下「連結」分頁標籤。

    圖片

    • 在「VPC Connector」(虛擬私有雲連接器) 欄位中,選取要使用的連接器,或選取「None」(無),將服務與虛擬私有雲網路中斷連線。
  5. 按一下 [Create] (建立) 或 [Deploy] (部署)

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 如要在部署期間指定連接器,請使用 --vpc-connector 標記:

    gcloud run deploy SERVICE --image IMAGE_URL --vpc-connector CONNECTOR_NAME
    • SERVICE 改為您的服務名稱。
    • 取代 IMAGE_URL
    • CONNECTOR_NAME 替換為您的連結器名稱。如果連接器位於共用虛擬私有雲的主專案中,則必須是完整指定的名稱,例如:
      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 替換為您的連結器名稱。
  3. YAML

    1. 如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定

      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 替換為您的連結器名稱。如果連接器位於共用虛擬私有雲的主專案中,則必須是完整指定的名稱,例如:
        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"
      location = "us-west1"
    
      deletion_protection = false # set to "true" in production
    
      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 Run 函式以使用連接器

您可以透過 Google Cloud 控制台或 Google Cloud CLI,設定函式以使用連接器:

主控台

  1. 前往Google Cloud 控制台的 Cloud Run 函式總覽頁面:

    前往 Cloud Run functions

  2. 按一下 [建立函式]。或者,按一下現有函式前往其詳細資料頁面,然後按一下「編輯」

  3. 按一下「RUNTIME, BUILD AND CONNECTIONS SETTINGS」(執行階段、建構作業和連線設定),展開進階設定。

  4. 在「Egress settings」(輸出設定) 下方的「Connections」(連線) 分頁中,於「VPC connector」(虛擬私有雲連接器) 欄位輸入連接器名稱。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 使用 gcloud functions deploy 指令部署函式,並指定 --vpc-connector 標記:

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

    其中:

    • FUNCTION_NAME 是函式名稱。
    • CONNECTOR_NAME 是連接器名稱。 如果連接器位於共用虛擬私有雲的主專案中,則必須是完整指定的名稱,例如:
      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 網址擷取服務。

    根據預設,所有要求都會透過網址擷取服務轉送。這會導致對虛擬私有雲網路的請求失敗。如要停用這項預設設定,請參閱「停用網址擷取功能,避免處理所有外送要求」。

    如有需要,您仍可直接使用 urlfetch 程式庫處理個別要求,但我們不建議這麼做。

  2. 將無伺服器虛擬私有雲存取欄位新增至 app.yaml 檔案:

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

    更改下列內容:

    • PROJECT_ID 改成您的 Google Cloud 專案 ID。 如果連線器位於共用虛擬私有雲的主專案中,則必須是主專案的 ID。
    • REGION 改成連接器所在的地區。
    • CONNECTOR_NAME 改為您的連接器名稱。
  3. 部署服務:

    gcloud app deploy

    您重新部署服務後,即可傳送要求至內部 IP 位址,以存取虛擬私人雲端網路中的資源。

Java 8

  1. 停止使用 App Engine 網址擷取服務 URLFetchService

  2. 將無伺服器虛擬私有雲存取元素新增至服務的 appengine-web.xml 檔案:

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

    更改下列內容:

    • PROJECT_ID 改成您的 Google Cloud 專案 ID。 如果連線器位於共用虛擬私有雲的主專案中,則必須是主專案的 ID。
    • REGION 改成連接器所在的地區。
    • CONNECTOR_NAME 改為您的連接器名稱。
  3. 部署服務:

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

    您重新部署服務後,即可傳送要求至內部 IP 位址,以存取虛擬私人雲端網路中的資源。

Go 1.11

  1. 停止使用 App Engine 網址擷取服務。

    無伺服器虛擬私有雲存取不支援 URL 擷取,且使用 URL 擷取發出的要求會忽略無伺服器虛擬私有雲存取設定。請改用通訊端建立輸出連線。

  2. 將無伺服器虛擬私有雲存取欄位新增至 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 位址,以存取虛擬私人雲端網路中的資源。

所有其他執行階段

  1. 將無伺服器虛擬私有雲存取欄位新增至 app.yaml 檔案:

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

    更改下列內容:

    • PROJECT_ID 改成您的 Google Cloud 專案 ID。 如果連線器位於共用虛擬私有雲的主專案中,則必須是主專案的 ID。
    • REGION 改成連接器所在的地區。
    • CONNECTOR_NAME 改為您的連接器名稱。
  2. 部署服務:

    gcloud app deploy

    您重新部署服務後,即可傳送要求至內部 IP 位址,以存取虛擬私人雲端網路中的資源。

為連接器設定防火牆規則

服務專案中連接器所需的防火牆規則

如果您在獨立的虛擬私有雲網路中,或在共用虛擬私有雲網路的主專案中建立連接器, Google Cloud 會為連接器的運作建立所有必要的防火牆規則。詳情請參閱獨立虛擬私有雲網路或共用虛擬私有雲主專案中的連線器防火牆規則

不過,如果您在服務專案中建立連接器,且連接器以主專案中的共用虛擬私有雲網路為目標,則必須新增防火牆規則,允許連接器從下列範圍運作所需的流量:

這些範圍是由 Cloud Run、Cloud Run 函式和 App Engine 標準環境的基礎 Google 基礎架構使用。來自這些 IP 位址的所有要求都源自 Google 基礎架構,確保每個無伺服器資源只會與所連線的連接器通訊。

您也必須允許從連接器子網路到虛擬私有雲網路中資源的流量。

如要執行這些步驟,您必須擁有主機專案的下列其中一個角色:

如要進行基本設定,請套用規則,允許連線至共用虛擬私有雲網路的任何服務專案中的無伺服器資源,向網路中的任何資源傳送要求。

如要套用這些規則,請在主機專案中執行下列指令:

  1. 建立防火牆規則,允許來自 Google 無伺服器基礎架構和健康狀態檢查探測器的要求,連線至網路中的所有連接器。在這些指令中,UDP 和 TCP 通訊埠分別用做 Proxy 和 HTTP 健康狀態檢查。請勿變更指定的通訊埠。

    gcloud compute firewall-rules create serverless-to-vpc-connector \
        --allow tcp:667,udp:665-666,icmp \
        --source-ranges=35.199.224.0/19 \
        --direction=INGRESS \
        --target-tags vpc-connector \
        --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-to-serverless \
        --allow tcp:667,udp:665-666,icmp \
        --destination-ranges=35.199.224.0/19 \
        --direction=EGRESS \
        --target-tags vpc-connector \
        --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-health-checks \
        --allow tcp:667 \
        --source-ranges=35.191.0.0/16,35.191.192.0/18,130.211.0.0/22 \
        --direction=INGRESS \
        --target-tags vpc-connector \
        --network=VPC_NETWORK

    VPC_NETWORK 替換為要附加連接器的虛擬私有雲網路名稱。

  2. 在虛擬私有雲網路上建立輸入防火牆規則,允許來自以這個網路為目標的連接器要求:

    gcloud compute firewall-rules create vpc-connector-requests \
        --allow tcp,udp,icmp \
        --direction=INGRESS \
        --source-tags vpc-connector \
        --network=VPC_NETWORK

    這項規則可讓連接器存取網路中的所有資源。如要限制無伺服器環境可透過無伺服器虛擬私有雲存取連線的資源,請參閱「限制連接器 VM 對虛擬私有雲網路資源的存取權」。

為特定連接器建立防火牆規則

按照「服務專案中連接器的必要防火牆規則」一文中的程序操作,會產生適用於所有連接器的防火牆規則,包括目前的連接器和日後建立的連接器。如果不想這樣做,而是只想為特定連接器建立規則,可以設定規則的適用範圍,讓規則只套用至這些連接器。

如要將規則範圍限制為特定連接器,可以使用下列其中一種機制:

  • 網路標記:每個連接器都有兩個網路標記:vpc-connectorvpc-connector-REGION-CONNECTOR_NAME。 使用後者格式,可將防火牆規則的範圍限制為特定連接器。
  • IP 範圍:僅適用於輸出規則,不適用於輸入規則。您可以使用連接器子網路的 IP 範圍,將防火牆規則的範圍限制為單一虛擬私有雲連接器。

限制連接器 VM 存取虛擬私有雲網路資源

您可以使用虛擬私有雲防火牆規則防火牆政策中的規則,限制連接器存取目標虛擬私有雲網路中的資源。您可以使用下列任一策略來達成這些限制:

  • 建立輸入規則,目標代表您要限制連線 VM 存取的資源,來源則代表連線 VM。
  • 建立輸出規則,目標代表連接器 VM,目的地代表您要限制連接器 VM 存取的資源。

以下範例說明每種策略。

使用輸入規則限制存取權

選擇網路標記或 CIDR 範圍,控管虛擬私有雲網路的傳入流量。

網路標記

下列步驟說明如何建立輸入規則,根據連接器網路標記限制連接器對虛擬私有雲網路的存取權。

  1. 確認您具備插入防火牆規則的必要權限。 您必須具備下列任一身分與存取權管理 (IAM) 角色:

  2. 拒絕虛擬私有雲網路的連接器流量。

    在虛擬私有雲網路中建立優先順序低於 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:您要允許來自虛擬私有雲連接器的通訊協定。支援的通訊協定為 tcpudp。舉例來說,tcp:80,udp 允許 TCP 流量通過連接埠 80 和 UDP 流量。詳情請參閱 allow 旗標的說明文件。

      為確保安全和進行驗證,您也可以設定拒絕規則,封鎖下列不支援的通訊協定流量:ahallespicmpipipsctp

    • VPC_CONNECTOR_NETWORK_TAG:通用連接器網路代碼,可限制所有連接器 (包括日後建立的連接器) 的存取權;或是專屬網路代碼,可限制特定連接器的存取權。

      • 通用網路代碼: vpc-connector
      • 專屬網路標記: vpc-connector-REGION-CONNECTOR_NAME

        取代:

        • REGION:要限制的連接器區域
        • CONNECTOR_NAME:要限制的連接器名稱

      如要進一步瞭解連接器網路標記,請參閱「網路標記」。

    • VPC_NETWORK:虛擬私有雲網路的名稱

    • PRIORITY:介於 0 到 65535 的整數。例如,0 代表最高優先順序。

  3. 允許連接器流量傳送至應接收連接器流量的資源。

    使用 allowtarget-tags 旗標建立輸入防火牆規則,以虛擬私有雲網路中要讓虛擬私有雲連接器存取的資源為目標。將這項規則的優先順序設為低於上一步建立的規則。

    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:您要允許來自虛擬私有雲連接器的通訊協定。支援的通訊協定為 tcpudp。舉例來說,tcp:80,udp 允許 TCP 流量通過連接埠 80 和 UDP 流量。詳情請參閱 allow 旗標的說明文件。

    • VPC_CONNECTOR_NETWORK_TAG:如果您想限制所有連接器 (包括日後建立的連接器) 的存取權,請使用通用連接器網路代碼;如果您想限制特定連接器的存取權,請使用專屬網路代碼。這必須與您在上一個步驟中指定的網路標記相符。

      • 通用網路代碼: vpc-connector
      • 專屬網路標記: vpc-connector-REGION-CONNECTOR_NAME

        取代:

        • REGION:要限制的連接器區域
        • CONNECTOR_NAME:要限制的連接器名稱

      如要進一步瞭解連接器網路標記,請參閱「網路標記」。

    • VPC_NETWORK:虛擬私有雲網路的名稱

    • RESOURCE_TAG:您希望 VPC 連接器存取的 VPC 資源網路標記

    • PRIORITY:小於您在上一步設定優先順序的整數。舉例來說,如果您將上一個步驟中建立的規則優先順序設為 990,請嘗試設為 980。

如要進一步瞭解建立防火牆規則時的必要和選用旗標,請參閱 gcloud compute firewall-rules create 說明文件。

CIDR 範圍

下列步驟說明如何建立輸入規則,根據連接器的 CIDR 範圍,限制連接器對虛擬私有雲網路的存取權。

  1. 確認您具備插入防火牆規則的必要權限。 您必須具備下列任一身分與存取權管理 (IAM) 角色:

  2. 拒絕虛擬私有雲網路的連接器流量。

    在虛擬私有雲網路中建立優先順序低於 1000 的輸入防火牆規則,拒絕來自連線器 CIDR 範圍的輸入流量。這會覆寫無伺服器 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:您要允許來自虛擬私有雲連接器的通訊協定。支援的通訊協定為 tcpudp。舉例來說,tcp:80,udp 允許 TCP 流量通過連接埠 80 和 UDP 流量。詳情請參閱 allow 旗標的說明文件。

      為確保安全和進行驗證,您也可以設定拒絕規則,封鎖下列不支援的通訊協定流量:ahallespicmpipipsctp

    • VPC_CONNECTOR_CIDR_RANGE:要限制存取的連接器 CIDR 範圍

    • VPC_NETWORK:虛擬私有雲網路的名稱

    • PRIORITY:介於 0 到 65535 的整數。例如,0 代表最高優先順序。

  3. 允許連接器流量傳送至應接收連接器流量的資源。

    使用 allowtarget-tags 旗標建立輸入防火牆規則,以虛擬私有雲網路中要讓虛擬私有雲連接器存取的資源為目標。將這項規則的優先順序設為低於上一步建立的規則。

    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:您要允許來自虛擬私有雲連接器的通訊協定。支援的通訊協定為 tcpudp。舉例來說,tcp:80,udp 允許 TCP 流量通過連接埠 80 和 UDP 流量。詳情請參閱 allow 旗標的說明文件。

    • VPC_CONNECTOR_CIDR_RANGE:要限制存取權的連接器 CIDR 範圍

    • VPC_NETWORK:虛擬私有雲網路的名稱

    • RESOURCE_TAG:您希望 VPC 連接器存取的 VPC 資源網路標記

    • PRIORITY:小於您在上一步設定優先順序的整數。舉例來說,如果您將上一個步驟中建立的規則優先順序設為 990,請嘗試設為 980。

如要進一步瞭解建立防火牆規則時的必要和選用旗標,請參閱 gcloud compute firewall-rules create 說明文件。

使用輸出規則限制存取權

下列步驟說明如何建立輸出規則,限制連接器存取權。

  1. 請確認您具備插入防火牆規則的必要權限。您必須具備下列其中一個身分與存取權管理 (IAM) 角色:

  2. 拒絕連接器的輸出流量。

    在 Serverless VPC Access 連接器上建立輸出防火牆規則,防止連接器將輸出流量傳送至任何目的地 (已建立的回應除外)。

    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:您要允許來自虛擬私有雲連接器的通訊協定。支援的通訊協定為 tcpudp。舉例來說,tcp:80,udp 允許 TCP 流量通過連接埠 80 和 UDP 流量。詳情請參閱 allow 旗標的說明文件。

      為確保安全和進行驗證,您也可以設定拒絕規則,封鎖下列不支援的通訊協定流量:ahallespicmpipipsctp

    • VPC_CONNECTOR_NETWORK_TAG:通用 VPC 連接器網路標記,適用於所有現有 VPC 連接器和日後建立的 VPC 連接器。如要控管特定連接器,請使用專屬的虛擬私有雲連接器網路標記。

    • VPC_NETWORK:虛擬私有雲網路的名稱

    • PRIORITY:介於 0 到 65535 的整數。例如,0 代表最高優先順序。

  3. 如果目的地位於您希望連接器存取的 CIDR 範圍內,請允許輸出流量。

    使用 allowdestination-ranges 旗標建立防火牆規則,允許從連接器傳出流量至特定目的地範圍。將目的地範圍設為虛擬私有雲網路中資源的 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:您要允許來自虛擬私有雲連接器的通訊協定。支援的通訊協定為 tcpudp。舉例來說,tcp:80,udp 允許 TCP 流量通過連接埠 80 和 UDP 流量。詳情請參閱 allow 旗標的說明文件。

    • RESOURCE_CIDR_RANGE:要限制存取的連接器 CIDR 範圍

    • VPC_NETWORK:虛擬私有雲網路的名稱

    • VPC_CONNECTOR_NETWORK_TAG:通用 VPC 連接器網路標記,適用於所有現有 VPC 連接器和日後建立的 VPC 連接器。或者,如果您想控管特定連接器,請使用專屬的虛擬私有雲連接器網路標記。如果您在上一個步驟中使用專屬的聯播網代碼,請使用專屬的聯播網代碼。

    • PRIORITY:小於您在上一步設定優先順序的整數。舉例來說,如果您將上一個步驟中建立的規則優先順序設為 990,請嘗試設為 980。

如要進一步瞭解建立防火牆規則時的必要和選用標記,請參閱 gcloud compute firewall-rules create 的說明文件。

更新連接器

您可以使用 Google Cloud 控制台、Google Cloud CLI 或 API,更新及監控連結器的下列屬性:

  • 機器 (執行個體) 類型
  • 執行個體數量下限和上限
  • 近期輸送量、執行個體數量和 CPU 使用率

更新機器類型

主控台

  1. 前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 總覽頁面。

    前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 頁面

  2. 選取要編輯的連結器,然後按一下「編輯」

  3. 在「執行個體類型」清單中,選取偏好的機器 (執行個體) 類型。如要瞭解可用的機器類型,請參閱輸送量和擴充說明文件。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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. 遷移流量後,請刪除舊的連接器。

提高執行個體數量下限和上限

主控台

  1. 前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 總覽頁面。

    前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 頁面

  2. 選取要編輯的連結器,然後按一下「編輯」

  3. 在「執行個體下限」欄位中,選取偏好的執行個體數量下限。

    這個欄位的最小值是目前的值。這個欄位的最大可能值是「最多執行個體」欄位中的目前值減 1。舉例來說,如果「執行個體數量上限」欄位的值為 8,則「執行個體數量下限」欄位的值最多為 7。

  4. 在「Maximum instances」(執行個體數量上限) 欄位中,選取所需的執行個體數量上限。

    這個欄位的最小值是目前的值。這個欄位的最大可能值為 10。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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 的目前值。如要查看目前的值,請參閱「找出目前的屬性值」。
      • 這個欄位的最大可能值是目前的 max_instances 值減 1,因為 min_instances 必須小於 max_instances。舉例來說,如果 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. 前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 總覽頁面。

    前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 頁面

  2. 按一下要監控的連接器名稱。

  3. 選取要顯示的天數,範圍介於 1 到 90 天。

  4. 在「處理量」圖表中,將指標懸停在圖表上,即可查看連接器近期的處理量。

  5. 在「執行個體數量」圖表中,將指標懸停在圖表上,即可查看連接器最近使用的執行個體數量。

  6. 在「CPU Utilization」(CPU 使用率) 圖表中,將指標懸停在圖表上,即可查看連接器的近期 CPU 使用率。圖表會顯示第 50、第 95 和第 99 個百分位數的執行個體 CPU 使用率分布情形。

刪除連接器

刪除連接器之前,請務必先從仍使用該連接器的無伺服器資源中移除連接器。如果先刪除連接器,再從無伺服器資源中移除,之後就無法刪除虛擬私有雲網路。

如果共用 VPC 使用者在共用 VPC 主專案中設定連接器,可以使用 gcloud compute networks vpc-access connectors describe 指令列出含有使用特定連接器的無伺服器資源的專案。

如要刪除連接器,請使用 Google Cloud 控制台或 Google Cloud CLI:

主控台

  1. 前往Google Cloud 控制台的「Serverless VPC Access」(無伺服器虛擬私有雲存取) 總覽頁面:

    前往「Serverless VPC Access」(無伺服器虛擬私人雲端存取) 頁面

  2. 選取您要刪除的連接器。

  3. 點選「刪除」。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 使用下列 gcloud 指令刪除連接器:

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

    更改下列內容:

    • CONNECTOR_NAME,其中 CONNECTOR_NAME 是要刪除的連接器名稱
    • REGION 替換為連接器所在的地區

管理專案的自訂限制

本節說明如何為無伺服器虛擬私有雲存取連接器建立自訂限制,並在專案層級強制執行這些限制。如要瞭解自訂機構政策,請參閱建立及管理自訂機構政策

Google Cloud 機構政策可讓您透過程式集中控管機構資源。身為機構政策管理員,您可以定義機構政策,也就是一組稱為「限制」的限制,適用於Google Cloud 資源階層中的Google Cloud 資源和這些資源的子系。您可以在機構、資料夾或專案層級強制執行組織政策。

機構政策提供各種Google Cloud 服務的預先定義限制。不過,如要進一步自訂機構政策中受限制的特定欄位,也可以建立自訂機構政策。

優點

無伺服器虛擬私有雲存取可讓您使用無伺服器虛擬私有雲存取 API 中的大多數使用者設定欄位,編寫任意數量的自訂限制。舉例來說,您可以建立自訂限制,指定 Serverless VPC Access 連接器可使用的子網路。

套用後,如果要求違反強制執行自訂限制的政策,gcloud CLI 和無伺服器虛擬私有雲存取記錄中就會顯示錯誤訊息。錯誤訊息會包含限制 ID,以及違反自訂限制的說明。

政策繼承

根據預設,您強制執行的資源後代會沿用機構政策。舉例來說,如果您對資料夾強制執行政策, Google Cloud 系統會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為及如何變更,請參閱「階層評估規則」。

限制

系統不支援指定機型、執行個體數量下限或執行個體數量上限。

事前準備

請確認您知道機構 ID。

必要的角色

如要取得管理機構政策所需的權限,請要求管理員為您授予機構資源的機構政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

您或許還可透過自訂角色或其他預先定義的角色取得必要權限。

建立自訂限制

自訂限制是在 YAML 檔案中定義,當中包含您要強制執行機構政策的服務所支援的資源、方法、條件和動作。自訂限制的條件是使用一般運算語言 (CEL) 定義。如要進一步瞭解如何使用 CEL 在自訂限制中建構條件,請參閱「建立及管理自訂限制」一文的 CEL 一節。

如要為無伺服器虛擬私有雲存取自訂限制建立 YAML 檔案,請參閱下列範例:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- vpcaccess.googleapis.com/Connector
methodTypes:
- CREATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

更改下列內容:

  • ORGANIZATION_ID:您的機構 ID,例如 123456789

  • CONSTRAINT_NAME:新自訂限制的名稱。自訂限制條件必須以 custom. 開頭,且只能包含大寫英文字母、小寫英文字母或數字,例如 custom.defaultNetworkConstraint。這個欄位的長度上限為 70 個字元,不含前置字元。

  • CONDITION:針對支援服務資源的代表項目編寫的 CEL 條件。這個欄位的長度上限為 1000 個字元。例如:"resource.network == default"

  • ACTION:如果符合 condition,則要採取的動作。可以是 ALLOWDENY

  • DISPLAY_NAME:限制條件的易記名稱。這個欄位的長度上限為 200 個字元。

  • DESCRIPTION:違反政策時,要以錯誤訊息形式顯示的限制說明 (方便使用者閱讀),例如 "Require network to not be set to default." 這個欄位的長度上限為 2000 個字元。

如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。

設定自訂限制

為新的自訂限制建立 YAML 檔案後,您必須進行設定,才能在貴機構的機構政策中使用該檔案。如要設定自訂限制,請使用 gcloud org-policies set-custom-constraint 指令:
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH 替換為自訂限制檔案的完整路徑。例如:/home/user/customconstraint.yaml。 完成後,自訂限制就會顯示在 Google Cloud 機構政策清單中,做為機構政策使用。如要確認自訂限制存在,請使用 gcloud org-policies list-custom-constraints 指令:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID 替換為機構資源的 ID。 詳情請參閱「查看組織政策」。

強制執行自訂限制

如要強制執行限制,請建立參照該限制的機構政策,然後將該政策套用至 Google Cloud 資源。

控制台

  1. 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。

    前往「機構政策」

  2. 在專案選擇工具中,選取要設定機構政策的專案。
  3. 在「Organization policies」(機構政策) 頁面上的清單中選取限制條件,即可查看該限制條件的「Policy details」(政策詳情) 頁面。
  4. 如要設定資源的機構政策,請按一下「管理政策」
  5. 在「編輯政策」頁面中,選取「覆寫上層政策」
  6. 按一下「新增規則」
  7. 在「Enforcement」(強制執行) 區段中,選取是否要強制執行這項機構政策。
  8. 選用:如要根據標記設定機構政策條件,請按一下「新增條件」。請注意,如果為組織政策新增條件式規則,您必須至少新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定組織政策」。
  9. 按一下「測試變更」,模擬機構政策的影響。舊版受管理限制不支援政策模擬。詳情請參閱「 使用 Policy Simulator 測試組織政策變更」。
  10. 如要完成並套用機構政策,請按一下「設定政策」。這項政策最多需要 15 分鐘才會生效。

gcloud

如要建立含有布林值規則的機構政策,請建立參照限制的政策 YAML 檔案:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

取代下列項目:

  • PROJECT_ID:您要強制執行限制的專案。
  • CONSTRAINT_NAME:您為自訂限制定義的名稱。例如:custom.defaultNetworkConstraint

如要強制執行包含限制的機構政策,請執行下列指令:

    gcloud org-policies set-policy POLICY_PATH
    

POLICY_PATH 替換為機構政策 YAML 檔案的完整路徑。這項政策最多需要 15 分鐘才會生效。

測試自訂限制

如要測試限制輸入設定的範例,請在專案中部署連接器,並將網路設為 default

gcloud compute networks vpc-access connectors create org-policy-test \
    --project=PROJECT_ID \
    --region=REGION_ID \
    --network=default

輸出內容如下:

Operation denied by custom org policies: ["customConstraints/custom.defaultNetworkConstraint": "Require network to not be set to default."]

常見用途的自訂機構政策範例

下表提供自訂限制的範例,您可能會發現這些限制有助於使用無伺服器虛擬私有雲存取連接器:

說明 限制語法
要求無伺服器虛擬私有雲存取連接器只能使用特定網路。
    name: organizations/ORGANIZATION_ID/customConstraints/custom.allowlistNetworks
    resourceTypes:
    - vpcaccess.googleapis.com/Connector
    methodTypes:
    - CREATE
    condition: "resource.network == 'allowlisted-network'"
    actionType: ALLOW
    displayName: allowlistNetworks
    description: Require connectors to use a specific network.
說明 限制語法
要求無伺服器虛擬私有雲存取連接器只能存取特定子網路。
    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictSubnetForProject
    resourceTypes:
    - vpcaccess.googleapis.com/Connector
    methodTypes:
    - CREATE
    condition: "resource.subnet.name == 'allocated-subnet'"
    actionType: ALLOW
    displayName: restrictSubnetForProject
    description: This project is only allowed to use the subnet "allocated-subnet".

設定 Cloud Run 環境,改用直接虛擬私有雲,而非連接器

您可以啟用 Cloud Run 服務,將輸出 (輸出) 流量直接傳送至虛擬私有雲網路,以便存取 Compute Engine VM 執行個體、Memorystore 執行個體,以及任何其他具有內部 IP 位址的資源。

將服務設定為使用直接虛擬私有雲

使用直接虛擬私有雲輸出功能後,Cloud Run 服務就能將流量傳送至虛擬私有雲網路,不必使用無伺服器虛擬私有雲存取連接器。網路費用會與服務本身一樣,降至零。您也可以直接在 Cloud Run 服務修訂版本中新增網路標記,以進行更精細的網路安全設定,例如套用 VPC 防火牆規則

您可以使用Google Cloud 控制台、Google Cloud CLI、YAML 或 Terraform,透過服務設定 Direct VPC 輸出。

控制台

  1. 前往 Cloud Run

  2. 如要設定部署的新服務,請按一下「建立服務」。如要設定及部署現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  3. 如要設定新服務,請視需要填寫初始服務設定頁面,然後按一下「Container(s), Volumes, Networking, Security」(容器、磁碟區、網路、安全性),展開服務設定頁面。

  4. 按一下 [網路] 分頁標籤。

  5. 按一下「連線至虛擬私有雲,以傳出流量」

  6. 按一下「直接將流量傳送至虛擬私有雲」

  7. 在「Network」(網路) 欄位中,選取要傳送流量的虛擬私有雲網路。

  8. 在「Subnet」(子網路) 欄位中,選取服務接收 IP 位址的子網路。您可以在同一個子網路上部署多項服務。

  9. 選用:輸入要與服務建立關聯的網路標記名稱。網路標記是在修訂版本層級指定。每個服務修訂版本可以有不同的網路標記,例如 network-tag-2

  10. 在「流量轉送」中,選取下列其中一個選項:

    • 僅將傳至私人 IP 的要求轉送至虛擬私有雲:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • 將所有流量轉送至虛擬私有雲,透過虛擬私有雲網路傳送所有輸出流量。
  11. 按一下 [Create] (建立) 或 [Deploy] (部署)

  12. 如要確認服務是否位於虛擬私有雲網路中,請點選服務,然後按一下「網路」分頁標籤。網路和子網路會列在「VPC」資訊卡中。

    現在,您可以根據防火牆規則,從 Cloud Run 服務將要求傳送至虛擬私有雲網路上的任何資源。

gcloud

如要透過 Google Cloud CLI 部署 Cloud Run 服務,而不使用連接器,請執行下列步驟:

  1. gcloud 元件更新到最新版本:

    gcloud components update
  2. 確認已為專案啟用 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用下列指令部署 Cloud Run 服務:

    gcloud 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。網址格式為 LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • (選用) NETWORK,其中是您的虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果您只指定網路,子網路會使用與網路相同的名稱。
    • 選用: SUBNET 是子網路的名稱。子網路不得小於 /26。直接虛擬私有雲輸出支援 IPv4 範圍 RFC 1918RFC 6598 和 E 類。您可以在同一個子網路上部署或執行多項服務或工作,但現有連接器無法共用子網路。
    • 選用:以半形逗號分隔的NETWORK_TAG_NAMES網路標記名稱,這些標記會與服務建立關聯。如果是服務,網路標記是在修訂版本層級指定。每個服務修訂版本可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 具有 傳出設定值
      • all-traffic:透過虛擬私有雲網路傳送所有輸出流量。
      • private-ranges-only:只透過虛擬私有雲網路將流量傳送至內部位址。
    • REGION 改為服務的地區。
  4. 如要確認服務位於虛擬私有雲網路中,請執行下列指令:

    gcloud run services describe SERVICE_NAME \
    --region=REGION

    取代:

    • SERVICE_NAME 改為您的服務名稱。
    • REGION,其中包含您在上一個步驟中指定的服務區域。

    輸出內容應包含網路、子網路和輸出設定的名稱,例如:

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

現在,您可以根據防火牆規則,從 Cloud Run 服務將要求傳送至虛擬私有雲網路上的任何資源。

YAML

  1. 如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定

    gcloud run services describe SERVICE --format export > service.yaml
  2. 更新下列屬性:

    apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: SERVICE_NAME
        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,其中是您的虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果您只指定網路,子網路會使用與網路相同的名稱。
    • 選用: SUBNET 是子網路的名稱。子網路不得小於 /26。直接虛擬私有雲輸出支援 IPv4 範圍 RFC 1918RFC 6598 和 E 類。您可以在同一個子網路上部署或執行多項服務或工作,但現有連接器無法共用子網路。
    • 選用:NETWORK_TAG_NAMES,您要與服務建立關聯的網路標記名稱。如果是服務,網路標記是在修訂版本層級指定。每個服務修訂版本可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 具有 傳出設定值
      • all-traffic:透過虛擬私有雲網路傳送所有輸出流量。
      • private-ranges-only:只透過虛擬私有雲網路將流量傳送至內部位址。
    • IMAGE 改為服務容器映像檔的網址。

    您也可以指定更多設定,例如環境變數或記憶體上限。

  3. 使用下列指令建立或更新服務:

    gcloud run services replace service.yaml

Terraform

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

  1. 請將以下內容新增到您的 main.tf 檔案中:

    /**
     * Copyright 2024 Google LLC
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    # Example configuration of a Cloud Run service with direct VPC
    
    resource "google_cloud_run_v2_service" "default" {
      name     = "cloudrun-service"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        vpc_access {
          network_interfaces {
            network    = "default"
            subnetwork = "default"
            tags       = ["tag1", "tag2", "tag3"]
          }
        }
      }
    }
    

如要允許未經驗證的存取服務,可以公開服務

設定工作以使用直接虛擬私有雲

透過直接虛擬私有雲 egress,Cloud Run 作業可將流量傳送至虛擬私有雲網路,不必使用無伺服器虛擬私有雲存取連接器。您也可以直接在 Cloud Run 作業中新增網路標記,進一步提升網路安全性,例如套用 VPC 防火牆規則

您可以透過Google Cloud 主控台、Google Cloud CLI 或 YAML,為工作設定直接 VPC 輸出。

控制台

  1. 前往 Cloud Run

  2. 如要設定新工作,請按一下「Jobs」分頁,然後視需要填寫初始工作設定頁面。如要設定現有工作,請按一下該工作,然後按一下「編輯」

  3. 按一下「Container, Variables & Secrets, Connections, Security」(容器、變數和密鑰、連線、安全性),展開工作屬性頁面。

  4. 按一下「連結」分頁標籤。

  5. 按一下「連線至虛擬私有雲,以傳出流量」

  6. 按一下「直接將流量傳送至虛擬私有雲」

  7. 在「Network」(網路) 欄位中,選取要將流量傳送至的虛擬私有雲網路。

  8. 在「Subnet」(子網路) 欄位中,選取工作接收 IP 位址的子網路。您可以在同一個子網路上執行多項工作。

  9. 在「流量轉送」中,選取下列其中一個選項:

    • 僅將傳至私人 IP 的要求轉送至虛擬私有雲:僅透過虛擬私有雲網路將流量傳送至內部位址。
    • 將所有流量轉送至虛擬私有雲,透過虛擬私有雲網路傳送所有輸出流量。
  10. 選用:輸入要與服務建立關聯的網路標記名稱。網路標記是在修訂版本層級指定。每個服務修訂版本可以有不同的網路標記,例如 network-tag-2

  11. 選用:輸入要與工作建立關聯的網路標記名稱。如果是工作,網路標記是在執行層級指定。每次執行作業時,可以有不同的網路標記,例如 network-tag-2

  12. 按一下「建立」或「更新」

  13. 如要確認作業是否位於虛擬私有雲網路上,請按一下作業,然後按一下「Configuration」(設定) 分頁標籤。網路和子網路會列在「VPC」資訊卡中。

    現在您可以執行 Cloud Run 作業,並從作業將要求傳送至虛擬私有雲網路上的任何資源,但須遵守防火牆規則。

gcloud

如要透過 Google Cloud CLI 建立 Cloud Run 作業,但沒有連接器,請執行下列操作:

  1. gcloud 元件更新到最新版本:

    gcloud components update
  2. 確認已為專案啟用 Compute Engine API:

    gcloud services enable compute.googleapis.com
    
  3. 使用下列指令建立 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,其中是您的虛擬私有雲網路名稱。指定虛擬私有雲網路和/或子網路。如果只指定網路,子網路會使用與網路相同的名稱。
    • 選用: SUBNET 是子網路的名稱。子網路不得小於 /26。直接虛擬私有雲輸出支援 IPv4 範圍 RFC 1918RFC 6598 和 E 類。您可以在同一個子網路上部署或執行多項服務或工作,但現有連接器無法共用子網路。
    • 選用:NETWORK_TAG_NAMES 輸入要與工作建立關聯的聯播網代碼名稱。如果是作業,網路標記是在執行層級指定。每次執行作業時,可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 具有 傳出設定值
      • all-traffic:透過虛擬私有雲網路傳送所有輸出流量。
      • private-ranges-only:只透過虛擬私有雲網路將流量傳送至內部位址。
    • REGION 改成工作所在的區域。
  4. 如要確認作業是否位於虛擬私有雲網路中,請執行下列指令:

    gcloud run jobs describe JOB_NAME \
      --region=REGION
      

    取代:

    • JOB_NAME 改為您的工作名稱。
    • REGION,並將其替換為您在上一個步驟中指定的工作區域。

    輸出內容應包含網路和子網路的名稱,例如:

    VPC network:
      Network:       default
      Subnet:        default
    

現在您可以執行 Cloud Run 作業,並從作業將要求傳送至虛擬私有雲網路上的任何資源,但須遵守防火牆規則。

YAML

  1. 如果您要建立新工作,請略過這個步驟。 如要更新現有工作,請下載其 YAML 設定

    gcloud run jobs describe JOB_NAME --format export > job.yaml
  2. 更新下列屬性:

    apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: JOB_NAME
        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,且必須與子網路的區域相同。
    • (選用) NETWORK,其中是您的虛擬私有雲網路名稱。指定虛擬私有雲網路或子網路,或兩者皆指定。如果您只指定網路,子網路會使用與網路相同的名稱。
    • 選用: SUBNET 是子網路的名稱。子網路不得小於 /26。直接虛擬私有雲輸出支援 IPv4 範圍 RFC 1918RFC 6598 和 E 類。您可以在同一個子網路上部署或執行多項服務或工作,但現有連接器無法共用子網路。
    • 選用:NETWORK_TAG_NAMES 輸入要與工作建立關聯的聯播網代碼名稱。如果是作業,網路標記是在執行層級指定。每次執行作業時,可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 具有 傳出設定值
      • all-traffic:透過虛擬私有雲網路傳送所有輸出流量。
      • private-ranges-only:只透過虛擬私有雲網路將流量傳送至內部位址。
    • IMAGE,並提供工作容器映像檔的網址。
  3. 使用下列指令建立或更新作業:

    gcloud run jobs replace job.yaml

疑難排解

服務帳戶權限

如要在 Google Cloud 專案中執行作業,無伺服器虛擬私有雲存取會使用無伺服器虛擬私有雲存取服務代理人服務帳戶。這個服務帳戶的電子郵件地址格式如下:

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

根據預設,這個服務帳戶具有「無伺服器虛擬私有雲存取服務代理」角色 (roles/vpcaccess.serviceAgent)。如果變更這個帳戶的權限,無伺服器虛擬私有雲存取作業可能會失敗。

網路效能不佳或閒置 CPU 使用率偏高

為數千個執行個體使用單一連接器,可能會導致效能降低,並提高閒置 CPU 使用率。如要修正這個問題,請在多個連接器之間分片服務。

自訂 MTU 相關問題

如果自訂 MTU 發生問題,請確認您使用 Cloud Run 的預設 MTU 設定

錯誤

服務帳戶需要服務代理人角色錯誤

如果您使用「限制資源服務用量」機構政策限制封鎖 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,或將其新增至允許清單。

建立連接器時發生錯誤

如果您在建立連接器時發生錯誤,請嘗試下列方式:

  • 指定 RFC 1918 內部 IP 範圍時,請確保該範圍並未與虛擬私人雲端網路中已保留的 IP 位址重疊。
  • 授予專案權限,以從 ID 為 serverless-vpc-access-images 的專案中使用 Compute Engine VM 映像檔。如要進一步瞭解如何據此更新組織政策,請參閱「設定映像檔存取限制」一文。

無法存取資源

如果您已指定連接器,但仍無法存取虛擬私有雲網路中的資源,請確認虛擬私有雲網路中沒有優先順序低於 1000 的防火牆規則,會拒絕來自連接器 IP 位址範圍的輸入流量。

如果您在共用虛擬私有雲服務專案中設定連接器,請確保防火牆規則允許從無伺服器基礎架構連入連接器

連線遭拒錯誤

如果收到 connection refusedconnection timeout 錯誤,導致網路效能降低,可能是因為無伺服器應用程式的呼叫次數不受限制,連線數也隨之增加。如要限制每個執行個體使用的連線數上限,請使用支援連線集區的用戶端程式庫。如需如何使用連線集區的詳細範例,請參閱「管理資料庫連線」。

找不到資源錯誤

刪除虛擬私有雲網路或防火牆規則時,您可能會看到類似下列訊息:The resource "aet-uscentral1-subnet--1-egrfw" was not found.

如要瞭解這項錯誤和解決方法,請參閱虛擬私有雲防火牆規則說明文件中的「找不到資源錯誤」。

後續步驟