建立及管理 Private Service Connect 介面

本頁面說明生產者網路管理員如何建立及管理 Private Service Connect 介面。服務供應商虛擬私有雲網路可透過 Private Service Connect 介面,啟動與用戶虛擬私有雲網路的連線。

事前準備

角色

如要取得建立 Private Service Connect 介面所需的權限,請要求管理員授予您專案的下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

Compute 執行個體管理員 (v1) 角色包含 compute.instances.pscInterfaceCreate 權限,這是建立 Private Service Connect 介面時的必要權限。

建立及設定 Private Service Connect 介面

如要建立及設定具有 Private Service Connect 介面的虛擬機器 (VM) 執行個體,請完成下列步驟。

建立具有 Private Service Connect 介面的 VM

建立 Private Service Connect 介面時,您會建立至少有兩個網路介面的 VM。第一個介面會連線至生產者子網路。第二個介面是 Private Service Connect 介面,用於要求連線至用戶網路中的網路連結

如果連線獲得接受, Google Cloud 會從網路連結指定的子網路,為 Private Service Connect 介面指派內部 IP 位址。

如果您建立的 Private Service Connect 介面參照的網路連結已設定為手動接受連線,且介面的專案不在網路連結的接受清單中,系統就會無法建立 Private Service Connect 介面的 VM。在這種情況下,請與消費者機構合作,將您的專案新增至接受清單,然後建立 Private Service Connect 介面。

建立 Private Service Connect 介面時,您可以選擇為其指派一或多個內部別名 IP 範圍。如果您打算指派別名 IP 範圍,請與消費者機構聯絡,決定適當的 IP 位址範圍。

如要指派別名 IP 範圍,請以 CIDR 標記法指定範圍的前置字串長度。將一或多個別名 IP 範圍指派給 Private Service Connect 介面時,Google Cloud 會從與網路連結相關聯的子網路主要 IP 位址範圍,分配別名 IP 範圍。Private Service Connect 介面的主要 IP 位址是從任何別名 IP 範圍外部分配。如果網路附件的子網路中沒有足夠的 IP 位址可分配主要 IP 位址和別名 IP 範圍,系統就會無法建立 Private Service Connect 介面的 VM。您可以說明介面的 VM,找出指派的特定 IP 位址。

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 點選「建立執行個體」

  3. 輸入名稱

  4. 選取與要連線的網路附件區域相符的區域

  5. 選取「區域」

  6. 點選「進階選項」

  7. 點選「網路」

  8. 在「Network interfaces」(網路介面) 專區中,按一下第一個網路介面 (即主要網路介面),然後執行下列操作:

    1. 選取主要網路介面的「Network」(網路)
    2. 選取主要網路介面的「子網路」。這個子網路必須與 Private Service Connect 介面的網路連結位於相同區域。
  9. 按一下「新增網路介面」

  10. 在「介面類型」部分,選取「Private Service Connect」

  11. 輸入「網路連結網址」

  12. 選取 IP 堆疊類型。如要建立雙重堆疊 Private Service Connect 介面,網路附件的子網路必須是雙重堆疊。

  13. 選用:如要新增別名 IP 範圍,請在「前置字串長度」方塊中輸入前置字串長度,例如 /30。如要新增多個別名 IP 範圍,請按一下「新增 IP 範圍」,然後輸入要新增的每個別名 IP 範圍的前置字元長度。

  14. 按一下 [完成]

  15. 點選「建立」

gcloud

如要建立僅支援 IPv4 的 Private Service Connect 介面 VM,請使用 instances create 指令

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \
    --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME'

更改下列內容:

  • INSTANCE_NAME:新執行個體的名稱
  • ZONE:新執行個體的可用區
  • MACHINE_TYPE:執行個體的機器類型,可以是預先定義自訂
  • IMAGE_PROJECT圖片的專案。舉例來說,如果您將 debian-10-buster-v20230809 指定為圖片,請將 debian-cloud 指定為圖片專案。您可以使用 gcloud compute images list 指令,查看可用映像檔、映像檔專案和映像檔系列清單。
  • IMAGE:公開映像檔的特定版本,例如 debian-10-buster-v20230809
  • PRODUCER_NETWORK:執行個體的網路。
  • PRODUCER_SUBNET:VM 主要網路介面的子網路。這個子網路必須與 Private Service Connect 介面的網路連結位於相同區域。
  • CONSUMER_PROJECT_ID:您要連結的消費者 ID。
  • ATTACHMENT_NAME:要連線的網路附件名稱。

如要為 Private Service Connect 介面同時指派 IPv4 和 IPv6 位址,請指定 stack-type='IPV4_IPv6'。介面參照的網路附件必須與雙重堆疊子網路建立關聯。

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \
    --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME,stack-type='IPV4_IPV6''

如要為 Private Service Connect 介面指派一或多個別名 IP 範圍,請指定要指派的每個別名 IP 範圍的前置字元長度:

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \
    --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME,aliases=ALIAS_IP_RANGE'

以 CIDR 標記法取代一或多個前置字元長度 ALIAS_IP_RANGE。您可以在以半形分號分隔的清單中加入多個前置字串長度,例如 /24;/28

API

如要建立具有僅限 IPv4 的 Private Service Connect 介面的 VM,請將 POST 要求傳送至 instances.insert 方法

POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances
{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK",
      "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
    },
    {
      "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME"
    }
  ]
}

更改下列內容:

  • PRODUCER_PROJECT_ID:生產者專案的 ID。
  • INSTANCE_ZONE:新執行個體的可用區。
  • MACHINE_TYPE_ZONE:機器類型的可用區。
  • MACHINE_TYPE:新 VM 的機器類型,可以是預先定義自訂
  • VM_NAME:新 VM 的名稱。
  • IMAGE_PROJECT:包含圖片的專案。舉例來說,如果將 debian-10-buster-v20200309 指定為圖片,請將 debian-cloud 指定為圖片專案。
  • IMAGE:特定版本的公開映像檔,例如 debian-10-buster-v20200309
  • PRODUCER_PROJECT_ID:介面專案的專案 ID。
  • PRODUCER_NETWORK:生產者虛擬私有雲網路的名稱。
  • SUBNET_REGION:主要網路介面子網路的區域。這個子網路必須與 Private Service Connect 介面的網路連結位於相同區域。
  • SUBNET:主要網路介面的子網路名稱。
  • CONSUMER_PROJECT_ID:消費者專案的 ID。
  • ATTACHMENT_REGION:網路連結的區域。
  • ATTACHMENT_NAME:網路附件的名稱。

如要為 Private Service Connect 介面同時指派 IPv4 和 IPv6 位址,請指定 "stack-type": "IPV4_IPv6"。介面參照的網路附件必須與雙重堆疊子網路建立關聯。

POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances
{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK",
      "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
    },
    {
      "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME",
      "stackType": "IPV4_IPV6"
    }
  ]
}

如要為 Private Service Connect 介面指派一或多個別名 IP 範圍,請指定要指派的每個別名 IP 範圍的前置字元長度。

POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances
{
  "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "disks": [
    {
      "initializeParams": {
        "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
      },
      "boot": true
    }
  ],
  "networkInterfaces": [
    {
      "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK",
      "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
    },
    {
      "aliasIpRanges": [
        {
          "ipCidrRange": "ALIAS_IP_RANGE"
        }
      ],
      "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME"
    }
  ]
}

ALIAS_IP_RANGE 替換為 CIDR 標記法中的前置字串長度,例如 /28。您可以在下列表單的 aliasIpRanges 清單中指定多個別名 IP 範圍:

"aliasIpRanges": [
  {
    "ipCidrRange": "/28"
  },
  {
    "ipCidrRange": "/30"
  }
]

如要進一步瞭解如何建立 VM 執行個體,請參閱「建立及啟動 VM 執行個體」。

允許 SSH 連線

請確認防火牆規則已設定為允許連入的 SSH 連線連至 Private Service Connect 介面的 VM。

找出 Private Service Connect 介面的名稱 Google Cloud

如要設定路由,您必須知道 Private Service Connect 介面的 Google Cloud 名稱。

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面:

    前往 VM 執行個體

  2. 按一下具有 Private Service Connect 介面的 VM 名稱。

  3. 在「網路介面」部分,找出並記下 Private Service Connect 介面的名稱,例如 nic1

gcloud

  1. 使用 compute instances describe 指令

    gcloud compute instances describe VM_NAME
      --zone=ZONE
    

    更改下列內容:

    • VM_NAME:具有 Private Service Connect 介面的 VM 名稱。
    • ZONE:VM 的可用區。
  2. 在指令輸出內容中,找出並記下 Private Service Connect 介面的 Google Cloud 名稱,例如 nic1

找出 Private Service Connect 介面的客體 OS 名稱

如要設定路由,您必須知道 Private Service Connect 介面的客體 OS 名稱,這與 Google Cloud中的介面名稱不同。

如要在 Debian VM 上找出介面名稱,請執行下列步驟。如要瞭解其他作業系統的 VM,請參閱作業系統的公開說明文件。

  1. 連線至 Private Service Connect 介面的 VM
  2. 執行下列指令:

    ip address
    

    在網路介面清單中,找出並記下與 Private Service Connect 介面 IP 位址相關聯的介面名稱,例如 ens5

找出 Private Service Connect 介面的閘道 IP

如要設定路由,您必須知道 Private Service Connect 介面預設閘道的 IP 位址。

  1. 連線至 Private Service Connect 介面的 VM

  2. 從介面的 VM 將下列 GET 要求傳送至相關聯的中繼資料伺服器

    curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/INTERFACE_NUMBER/gateway -H "Metadata-Flavor: Google" && echo
    

    INTERFACE_NUMBER 替換為Google Cloud 私人服務連線介面名稱的數字部分。舉例來說,如果介面名稱為 nic1,請使用 1 值。

新增消費者子網路的路徑

您必須為連線至 Private Service Connect 介面的每個消費者子網路,在 Private Service Connect 介面的預設閘道中新增路由。這可確保要前往消費者網路的流量會從 Private Service Connect 介面輸出。

以下步驟說明如何暫時更新使用 Debian 作業系統的 VM 路由表。如要永久更新表格,或在其他作業系統上更新路徑,請參閱作業系統的公開說明文件。

  1. 連線至 Private Service Connect 介面的 VM

  2. 請針對連線至 Private Service Connect 介面的每個消費者子網路,執行下列指令:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME
    

    更改下列內容:

建立含有 Private Service Connect 介面的執行個體範本

您可以建立包含 Private Service Connect 介面的執行個體範本

主控台

  1. 前往「Instance templates」(執行個體範本) 頁面。

    前往「Instance templates」(執行個體範本) 頁面

  2. 點選「建立執行個體範本」

  3. 在「Name」(名稱) 中輸入執行個體範本的名稱。

  4. 點選「進階選項」

  5. 點選「網路」

  6. 在「Network interfaces」(網路介面) 區段中,按一下展開箭頭。

  7. 為執行個體範本的主要網路介面選取「網路」和「子網路」

  8. 按一下 [完成]

  9. 按一下「新增網路介面」

  10. 按一下「Private Service Connect」

  11. 為 Private Service Connect 介面選取「網路」和「子網路」

  12. 按一下 [完成]

  13. 點選「建立」

gcloud

使用 instance-templates create 指令

gcloud compute instance-templates create NAME \
    --machine-type=MACHINE_TYPE \
    --network-interface=subnet=SUBNET \
    --region=REGION \
    --image-project=IMAGE_PROJECT \
    --image=IMAGE \
    --network-interface=network-attachment=projects/ATTACHMENT_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME

更改下列內容:

  • NAME:執行個體範本的名稱。
  • :使用這個執行個體範本建立的 VM 預先定義自訂機器類型,例如 f1-microMACHINE_TYPE
  • SUBNET:執行個體範本的子網路。使用這個執行個體範本建立 VM 時,系統會從這個子網路為 VM 的主要網路介面指派內部 IP 位址。
  • REGION:執行個體範本子網路的區域。
  • IMAGE_PROJECT圖片的專案。舉例來說,如果您將 debian-10-buster-v20230809 指定為圖片,請將 debian-cloud 指定為圖片專案。您可以使用 gcloud compute images list 指令,查看可用映像檔、映像檔專案和映像檔系列清單。
  • IMAGE:公開映像檔的特定版本,例如 debian-10-buster-v20230809
  • ATTACHMENT_PROJECT_ID:網路附件專案的 ID。
  • ATTACHMENT_REGION:網路附件的區域。
  • ATTACHMENT_NAME:網路附件的名稱。使用這個執行個體範本建立 VM 時,Private Service Connect 介面會要求連線至這個網路連結。

    您可以指定其他設定,例如映像檔名稱和開機磁碟大小。詳情請參閱「建立新的執行個體範本」。

API

instanceTemplates.insert 方法發出 POST 要求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
  "name": "NAME",
  "properties": {
    "disks": [
      {
        "boot": true,
        "initializeParams": {
          "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
        }
      }
    ],
    "machineType": "MACHINE_TYPE",
    "networkInterfaces": [
      {
        "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET"
      },
      {
        "networkAttachment": "projects/ATTACHMENT_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/NETWORK_ATTACHMENT"
      }
    ]
  }
}

更改下列內容:

  • PROJECT_ID:要在其中建立執行個體範本的專案 ID。
  • NAME:執行個體範本的名稱。
  • IMAGE_PROJECT圖片的專案。舉例來說,如果您將 debian-10-buster-v20230809 指定為圖片,請將 debian-cloud 指定為圖片專案。您可以使用 gcloud compute images list 指令,查看可用映像檔和映像檔專案的清單。
  • IMAGE:公開映像檔的特定版本,例如 debian-10-buster-v20230809
  • :使用這個執行個體範本建立的 VM 所用預先定義自訂機器類型,例如 f1-microMACHINE_TYPE
  • SUBNET_REGION:執行個體範本子網路的區域。
  • SUBNET:執行個體範本的子網路。使用這個執行個體範本建立 VM 時,系統會從這個子網路為 VM 的主要網路介面指派內部 IP 位址。
  • ATTACHMENT_PROJECT_ID:網路附件專案的 ID。
  • ATTACHMENT_REGION:網路附件的區域。
  • NETWORK_ATTACHMENT:網路附件的名稱。使用這個執行個體範本建立 VM 時,Private Service Connect 介面會要求連線至這個網路連結。

如要進一步瞭解如何建立執行個體範本,請參閱建立執行個體範本

搭配 VPC Service Controls 使用 Private Service Connect 介面

您可以搭配 VPC Service Controls 使用 Private Service Connect 介面。這樣一來,生產者虛擬私有雲網路就能透過消費者虛擬私有雲網路存取 Google API 和服務,而消費者機構則可享有 VPC Service Controls 的安全防護。

如要搭配 VPC Service Controls 使用 Private Service Connect 介面,必須更新 Private Service Connect 介面 VM 的路由表。將預設路徑換成可透過 Private Service Connect 介面將流量傳送至 Private Service Connect 介面預設閘道的路徑。

下列步驟會暫時更新使用 Debian 的 VM 的路由表。如要永久新增路徑,或更新其他作業系統的路徑,請參閱作業系統的公開說明文件。

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 按一下具有 Private Service Connect 介面的 VM 名稱。

  3. 執行下列指令:

    sudo ip route replace default via GATEWAY_IP dev OS_INTERFACE_NAME
    

    更改下列內容:

說明 Private Service Connect 介面

您可以描述 VM,查看其 Private Service Connect 介面的詳細資料。介面的 IP 位址、別名 IP 範圍、網路附件和消費者子網路會列在 VM 說明的網路介面部分。

主控台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

    前往 VM 執行個體

  2. 按一下具有 Private Service Connect 介面的 VM。

  3. 在「網路介面」部分,查看 Private Service Connect 介面的詳細資料。

gcloud

gcloud compute instances describe VM_NAME
    --zone=ZONE

更改下列內容:

  • VM_NAME:介面 VM 的名稱。
  • ZONE:VM 的可用區。

API

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

更改下列內容:

  • PROJECT_ID:VM 的專案 ID。
  • ZONE:VM 所在的可用區。
  • VM_NAME:VM 名稱。

刪除具有 Private Service Connect 介面的 VM

如要刪除 Private Service Connect 介面,必須刪除所連結的 VM 執行個體。詳情請參閱刪除執行個體

後續步驟