連線至虛擬私人雲端網路

本頁面說明如何使用無伺服器虛擬私有雲存取,將標準環境中的 App Engine 服務直接連線至虛擬私有雲網路,以便存取 Compute Engine VM 執行個體、Memorystore 執行個體,以及任何其他具有內部 IP 位址的資源。

事前準備

建立 Serverless VPC Access 連接器

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

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

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

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

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

您可以使用 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 這一行。

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      = "~> 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
  ]
}

將服務設定為使用連接器

建立 Serverless VPC Access 連接器後,您必須設定 App Engine 應用程式中要連線至虛擬私有雲網路的每個服務。

如要為應用程式中的服務指定連接器:

  1. 在服務的 app.yaml 檔案中新增 vpc_access_connector 欄位:

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

    其中 PROJECT_ID 是您的專案 ID, Google Cloud 是連接器所在的區域,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 說明文件。

管理連接器

控管服務的輸出流量

根據預設,只有傳送至內部 IP 位址和內部 DNS 名稱的要求,會透過無伺服器虛擬私有雲存取連接器轉送。您可以在 app.yaml 檔案中指定服務的輸出設定。

輸出設定與網址擷取服務不相容。 使用 urlfetch 程式庫會忽略輸出設定,且要求不會透過無伺服器虛擬私有雲存取連接器傳送。

如要設定 App Engine 服務的出站流量行為,請按照下列步驟操作:

  1. 在服務的 app.yaml 檔案中,將 egress_setting 屬性新增至 vpc_access_connector 欄位:

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

    取代:

    • PROJECT_ID 替換為您的 Google Cloud 專案 ID
    • REGION 改成連接器所在的地區
    • CONNECTOR_NAME 改為連接器名稱
    • EGRESS_SETTING,並搭配下列其中一個值:
      • private-ranges-only預設值。只有對 RFC 1918RFC 6598 IP 位址範圍或內部 DNS 名稱的要求,才會轉送到您的虛擬私有雲網路。所有其他要求都會直接轉送至網際網路。
      • all-traffic 服務的所有輸出要求都會轉送至虛擬私有雲網路。要求隨後會受到虛擬私有雲網路的防火牆、DNS 和路由規則限制。 請注意,將所有輸出要求轉送至虛擬私有雲網路,會增加 Serverless VPC Access 連接器處理的輸出量,並可能產生費用
  2. 部署服務:

    gcloud app deploy
    

中斷服務與虛擬私有雲網路的連線

如要中斷服務與 VPC 網路的連線,請從 app.yaml 檔案中移除 vpc_access_connector 欄位,然後重新部署服務。

即使連接器沒有流量且已中斷連線,仍會產生費用。詳情請參閱「定價」。如果不再需要連結器,請務必刪除連結器,以免持續產生費用。

更新連接器

您可以使用 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) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

建立自訂限制

自訂限制是在 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".

疑難排解

服務帳戶權限

如要在 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.

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

後續步驟