連線至虛擬私有雲網路

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

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

事前準備

  • 如果專案中沒有 VPC 網路,請建立一個

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

  • 如果您有組織政策限制,導致無法使用 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,列出子網路時,都不會顯示自動建立的連接器子網路。

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

    • 描述 VPC 網路時,系統會顯示自動建立的子網路清單,其中就包含這些子網路。

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

限制

不支援 IPv6 流量。

建立連接器

如要將要求傳送至 VPC 網路,並在未使用公開網際網路的情況下接收對應的回應,您可以使用無伺服器虛擬私人雲端存取連接器。

如果連接器位於與其虛擬私有雲網路相同的專案中,您可以使用現有的子網路建立連接器,或是建立連接器和新的子網路。

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

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

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

您可以使用 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) 中輸入第一個位址,用於 Google Cloud 在連接器的虛擬私有雲網路中建立的新子網路的主要 IPv4 位址範圍。請確認 IP 範圍不會與連接器虛擬私有雲網路中的任何現有路徑衝突。新子網路的名稱開頭為「aet-」。

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

    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),做為連接器在 VPC 網路中 Google Cloud 建立的新子網路的主要 IPv4 位址範圍。請確認 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 這一行。

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      = "~> 10.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    = "~> 10.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. 從選單中選取「Services」(服務),然後按一下「Deploy container」(部署容器),即可設定新的服務。如果您要設定現有服務,請按一下該服務,然後點選「編輯並部署新修訂版本」

  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 替換為連接器的名稱。

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 函式

  2. 按一下 [建立函式]。或者,您也可以點選現有函式前往其詳細資料頁面,然後按一下「Edit」(編輯)

  3. 按一下「Runtime, Build and Connections Settings」展開進階設定。

  4. 在「傳出」設定下方的「連線」分頁中,在「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. 將「Serverless VPC Access」欄位新增至 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. 將「Serverless VPC Access」欄位新增至 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. 將「Serverless VPC Access」欄位新增至 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 通訊埠分別用於代理程式和 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 網路資源的存取權」。

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

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

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

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

限制連接器 VM 對 VPC 網路資源的存取權

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

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

以下範例說明各項策略。

使用輸入規則限制存取

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

網路標記

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

  1. 請確認您具備插入防火牆規則的必要權限。您必須具備下列任一 Identity and Access Management (IAM) 角色:

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

    在虛擬私有雲網路中建立優先順序低於 1000 的輸入防火牆規則,拒絕來自連接器網路標記的輸入。這會覆寫 Serverless VPC Access 預設在 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 標記,建立輸入防火牆規則,指定您希望 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:您想允許從虛擬私有雲連接器傳送的一或多個通訊協定。支援的通訊協定為 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. 請確認您具備插入防火牆規則的必要權限。您必須具備下列任一 Identity and Access Management (IAM) 角色:

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

    在 VPC 網路上建立優先順序低於 1000 的輸入防火牆規則,拒絕來自連接器 CIDR 範圍的輸入。這會覆寫 Serverless VPC Access 預設在 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 標記,建立輸入防火牆規則,指定您希望 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:您想允許從虛擬私有雲連接器傳送的一或多個通訊協定。支援的通訊協定為 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 連接器網路標記。

    • 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 連接器,或者,如果您想控管特定連接器,請使用專屬的 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. 在「Instance type」清單中,選取偏好的機器 (執行個體) 類型。如要瞭解可用的機器類型,請參閱吞吐量和調整規模說明文件。

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. 在「Minimum instances」欄位中,選取所需的執行個體數量下限。

    這個欄位最小可能的值是目前的值。這個欄位的最大值是「最大執行個體」欄位中的目前值減 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 使用率」圖表中,將游標懸停在圖表上,即可查看連接器最近的 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 加上要刪除的連接器名稱
    • REGION 連接器所在的地區

管理專案的自訂限制條件

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

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

機構政策為各種Google Cloud 服務提供預先定義的限制。不過,如果您想進一步控管機構政策中受限制的特定欄位,並且進一步細分及自訂這些欄位,也可以建立自訂機構政策。

優點

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

套用後,如果要求違反強制實施自訂限制的政策,gcloud CLI 和無伺服器 VPC Access 記錄中就會顯示錯誤訊息。錯誤訊息包含違反的自訂限制的限制 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. 在「Edit policy」頁面中,選取「Override parent's policy」
  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 服務,直接將傳出 (Outbound) 流量傳送至 VPC 網路,以便存取 Compute Engine VM 執行個體、Memorystore 執行個體,以及任何其他具有內部 IP 位址的資源。

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

直接虛擬私有雲輸出可讓 Cloud Run 服務在沒有無伺服器虛擬私有雲存取連接器的情況下,將流量傳送至虛擬私有雲網路。網路費用會隨著服務的調度率降至零。您也可以直接在 Cloud Run 服務修訂版本上新增網路標記,以便實施更精細的網路安全性,例如套用 VPC 防火牆規則

您可以使用Google Cloud 主控台、Google Cloud CLI、YAML 或 Terraform,為服務設定直接 VPC 出口。

控制台

  1. 前往 Cloud Run

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

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

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

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

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

  7. 在「Network」(網路) 欄位中,選取要傳送流量的 VPC 網路。

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

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

  10. 在「Traffic routing」(流量路由) 部分,選取下列其中一個選項:

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

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

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

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 和 Class E。您可以在同一個子網路上部署或執行多項服務或工作,但任何現有連接器都無法共用子網路。
    • 選用:NETWORK_TAG_NAMES,其中包含您要與服務建立關聯的網路標記名稱,以半形逗號分隔。對於服務,網路標記是在修訂版本層級指定。每個服務修訂版本都可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 搭配egress 設定值
      • all-traffic:透過虛擬私有雲網路傳送所有傳出流量。
      • private-ranges-only:只透過虛擬私有雲網路將流量傳送至內部位址。
    • REGION 改為服務的地區。
  4. 如要確認服務位於 VPC 網路中,請執行下列指令:

    gcloud run services describe SERVICE_NAME \
    --region=REGION

    取代:

    • SERVICE_NAME 改為您的服務名稱。
    • REGION 替換為您在上一個步驟中指定的服務地區。

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

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

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

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 和 Class E。您可以在同一個子網路上部署或執行多項服務或工作,但任何現有連接器都無法共用子網路。
    • 選用:NETWORK_TAG_NAMES 與您要與服務建立關聯的網路標記名稱。對於服務,網路標記是在修訂版本層級指定。每個服務修訂版本都可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 搭配egress 設定值
      • 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"]
          }
        }
      }
    }
    

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

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

直接 VPC egress 可讓 Cloud Run 工作在沒有無伺服器虛擬私有雲存取連接器的情況下,將流量傳送至 VPC 網路。您也可以直接在 Cloud Run 工作上新增網路標記,以便實施更精細的網路安全性,例如套用 VPC 防火牆規則

您可以使用Google Cloud 主控台、Google Cloud CLI 或 YAML,為工作設定 Direct VPC 出口。

控制台

  1. 前往 Cloud Run

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

  3. 按一下「容器、變數和密鑰、連線、安全性」,展開工作屬性頁面。

  4. 按一下「連線設定」分頁標籤。

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

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

  7. 在「Network」(網路) 欄位中,選取要傳送流量的 VPC 網路。

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

  9. 在「Traffic routing」(流量路由) 部分,選取下列其中一個選項:

    • 僅將傳至私人 IP 的要求轉送至虛擬私有雲,這樣系統就只會透過 VPC 網路傳送流量至內部位址。
    • 將所有流量轉送至虛擬私有雲,透過虛擬私有雲網路傳送所有出站流量。
  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 和 Class E。您可以在同一個子網路上部署或執行多項服務或工作,但任何現有連接器都無法共用子網路。
    • 選用:NETWORK_TAG_NAMES 可用來指定要與工作相關聯的網路標記名稱。針對工作,網路標記是在執行層級指定。每個工作執行作業都可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 搭配egress 設定值
      • 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 與 Cloud Run 工作所在的區域,該區域必須與子網路的區域相符。
    • NETWORK 替換為虛擬私人雲端網路的名稱。
    • SUBNET 替換為子網路名稱。子網路必須為 /26 或更大。直接虛擬私人雲端出口支援 IPv4 範圍 RFC 1918RFC 6598 和 Class E。您可以在同一個子網路上部署或執行多項服務或工作,但任何現有連接器都無法共用子網路。
    • 選用:NETWORK_TAG_NAMES 可用來指定要與工作相關聯的網路標記名稱。針對工作,網路標記是在執行層級指定。每個工作執行作業都可以有不同的網路標記,例如 network-tag-2
    • EGRESS_SETTING 搭配egress 設定值
      • 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.

如要瞭解這項錯誤及其解決方法,請參閱 VPC 防火牆規則說明文件中的「找不到資源的錯誤」。

後續步驟