透過端點存取區域性 Google API
本文說明如何使用 Private Service Connect 端點,連線至支援的 Google API 的區域端點。
如要瞭解其他 Private Service Connect 設定,請參閱「Private Service Connect」。
必要的角色
如果您在與要連線的子網路相同的專案中建立端點,請參閱專案的必要角色。
如果您使用 Shared VPC,並在服務專案中建立端點,然後將其連線至主專案中的子網路,則需要下列角色:
- 在服務專案中授予專案的必要角色
- 在主專案中授予 Shared VPC 設定的其他必要角色
專案的必要角色
如要取得管理 Private Service Connect 端點的權限,請要求管理員授予您下列 IAM 角色:
-
建立、查看及刪除端點:專案的「Compute 網路管理員 」(
roles/compute.networkAdmin) -
為端點設定 DNS 項目:
DNS 管理員 (
roles/dns.admin) 專案
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
Shared VPC 設定的其他必要角色
如果您要在服務專案中建立端點,並使用主專案子網路的 IP 位址,除了專案的角色 (服務專案) 之外,還需要下列權限。
授予使用者帳戶的角色
如要取得管理 Private Service Connect 端點的權限,以便存取 Google API 的區域端點,請要求管理員授予您下列 IAM 角色:
-
建立、查看及刪除使用主機專案 IP 位址的端點:
- 服務專案的Compute 網路管理員 (
roles/compute.networkAdmin) - Compute 網路使用者 (
roles/compute.networkUser) 主機專案
- 服務專案的Compute 網路管理員 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備管理 Private Service Connect 端點所需的權限,可存取 Google API 的區域端點。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要管理可存取 Google API 區域端點的 Private Service Connect 端點,您必須具備下列權限:
-
如要建立、查看及刪除使用主機專案 IP 位址的端點,請按照下列步驟操作:
-
主專案的
compute.networks.use -
主專案的
compute.subnetworks.use
-
主專案的
要授予 Network Connectivity 服務帳戶的角色
為確保 service-PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com 具備管理 Private Service Connect 端點的必要權限,可存取 Google API 的區域端點,請要求管理員將下列 IAM 角色授予 service-PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備管理 Private Service Connect 端點所需的權限,可存取 Google API 的區域端點。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要管理可存取 Google API 區域端點的 Private Service Connect 端點,您必須具備下列權限:
-
如要建立、查看及刪除使用主機專案 IP 位址的端點,請按照下列步驟操作:
-
主專案的
compute.networks.get -
主專案的
compute.networks.use -
主專案的
compute.subnetworks.get -
主專案的
compute.subnetworks.use
-
主專案的
管理員或許還可透過自訂角色或其他預先定義的角色授予這些權限。service-PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com
事前準備
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
$ gcloud init
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
啟用 Compute Engine、Network Connectivity Center 和 Cloud DNS API。
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。此外,請啟用 API,以便透過 Private Service Connect 端點存取目標服務。舉例來說,如要存取
spanner.me-central2.rep.googleapis.com,請啟用 Cloud Spanner API。Private Service Connect 不會自動啟用任何 API。確認輸出防火牆規則允許流量傳送至端點。虛擬私有雲網路的預設防火牆設定含有隱含的允許輸出規則,因此允許這類流量。確認您未建立優先順序較高的輸出規則,導致流量遭到封鎖。
建立區域性 Private Service Connect 端點
您可以建立區域性 Private Service Connect 端點,將要求傳送至目標 Google API 的區域性端點。
如需支援的地區端點清單,請參閱「地區服務端點」。
控制台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「連結端點」。
在「目標」中,選取「Google API」。
在「範圍」清單中選取「區域」。
在「Region」(區域) 清單中,選取要使用的區域。
在「目標服務」清單中,選取要存取的服務。
在「端點名稱」中輸入端點名稱。
在「Network」(網路) 中,選取網路。
在「Subnetwork」(子網路) 中,選取子網路。
在「IP 位址」中,執行下列其中一項操作來設定 IP 位址:
- 選取「自動分配」,自動分配並預留新的靜態 IP 位址。
- 從清單中選取靜態 IP 位址。
- 按一下「建立 IP 位址」,預留新的靜態 IP 位址。
選用:如要讓端點可從虛擬私有雲網路的所有區域存取,請選取「啟用全域存取權」。
按一下「新增端點」。
gcloud
使用 gcloud network-connectivity regional-endpoints create 指令建立端點。
gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \
--region=REGION \
--address=ADDRESS \
--network=projects/PROJECT_ID/global/networks/NETWORK_NAME \
--subnetwork=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
--target-google-api=REP_DNS_NAME
如要讓其他區域的資源存取端點,請新增 --enable-global-access 旗標。
更改下列內容:
ENDPOINT_NAME:端點名稱。REGION:要在其中建立端點的區域。ADDRESS:要用於端點的 IPv4 或 IPv6 位址。如省略此欄位,系統會從子網路分配 IPv4 位址。請使用下列其中一種格式:- IPv4 位址,例如
10.0.0.2。 - IPv4 或 IPv6 位址資源 URI,例如
projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME。
- IPv4 位址,例如
PROJECT_ID:您要在其中建立端點的專案。NETWORK_NAME:端點的虛擬私有雲網路名稱。SUBNET_NAME:要將端點連線至的子網路。REP_DNS_NAME:您要連線的區域服務端點主機名稱。例如:spanner.me-central2.rep.googleapis.com。
API
使用 projects.locations.regionalEndpoints.create 方法建立端點。
HTTP 方法和網址:
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints?regionalEndpointId=ENDPOINT_NAME
{
"accessType": "REGIONAL",
"address": "ADDRESS",
"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
"subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
"targetGoogleApi": "REP_DNS_NAME"
}
更改下列內容:
PROJECT_ID:端點的專案 ID。REGION:要在其中建立端點的區域。ENDPOINT_NAME:端點名稱。ADDRESS:要用於端點的 IPv4 或 IPv6 位址。如省略此欄位,系統會分配子網路的 IPv4 位址。請使用下列其中一種格式:- IPv4 位址,例如
10.0.0.2。 - IPv4 或 IPv6 位址資源 URI,例如
projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME。
- IPv4 位址,例如
NETWORK_NAME:端點的虛擬私有雲網路名稱。SUBNET_NAME:要將端點連線至的子網路名稱。REP_DNS_NAME:要連線的區域服務端點主機名稱,例如spanner.me-central2.rep.googleapis.com。
在 Shared VPC 服務專案中建立區域 Private Service Connect 端點
如果您使用 Shared VPC,可以在服務專案中建立端點,並使用主專案子網路中的 IP 位址。您無法使用 Google Cloud 控制台建立這項設定,必須使用 gcloud CLI 或 API。
gcloud
使用
gcloud compute addresses create指令,保留靜態 IP 位址供區域端點使用。 使用靜態 IP 位址是 IPv4 的選用功能,但 IPv6 必須使用。在服務專案中建立位址資源,並指定主專案中的子網路。
gcloud compute addresses create ADDRESS_NAME \ --region=REGION \ --subnet=projects/HOST_PROJECT/regions/REGION/subnetworks/HOST_SUBNET \ --ip-version=IP_VERSION \ --project=SERVICE_PROJECT更改下列內容:
ADDRESS_NAME:要指派給保留 IP 位址的名稱。REGION:端點 IP 位址的區域。這個區域必須與服務生產者的服務連結所在的區域相同。HOST_PROJECT:主機專案的專案 ID。HOST_SUBNET:端點 IP 位址的子網路名稱。IP_VERSION:IP 位址的 IP 版本,可以是IPV4或IPV6。預設為IPV4。如要指定IPV6,IP 位址必須連線至具有內部 IPv6 位址範圍的子網路。SERVICE_PROJECT:服務專案的專案 ID
使用
gcloud network-connectivity regional-endpoints create指令在服務專案中建立區域端點。gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \ --region=REGION \ --address=ADDRESS \ --network=projects/HOST_PROJECT/global/networks/HOST_NETWORK \ --subnetwork=projects/HOST_PROJECT/regions/REGION/subnetworks/HOST_SUBNET \ --target-google-api=REP_DNS_NAME \ --project=SERVICE_PROJECT如要讓其他區域的資源存取端點,請新增
--enable-global-access旗標。更改下列內容:
ENDPOINT_NAME:端點名稱。REGION:要在其中建立端點的區域。ADDRESS:要用於端點的 IPv4 或 IPv6 位址。如省略此欄位,系統會從子網路分配 IPv4 位址。請使用下列其中一種格式:- IPv4 位址,例如
10.0.0.2。 - IPv4 或 IPv6 位址資源 URI。位址資源必須在服務專案中建立,而非主專案。例如:
projects/SERVICE_PROJECT/regions/REGION/addresses/ADDRESS_NAME。 HOST_PROJECT:主機專案的 ID。
- IPv4 位址,例如
HOST_NETWORK:主機專案中的虛擬私有雲網路名稱。HOST_SUBNET:要將端點連線至主專案的子網路。REP_DNS_NAME:您要連線的區域服務端點主機名稱。例如:spanner.me-central2.rep.googleapis.com。SERVICE_PROJECT:服務專案的專案 ID
API
預留靜態 IP 位址,用於區域端點。使用靜態 IP 位址是 IPv4 的選用設定,但 IPv6 必須使用。
在服務專案中建立位址資源,並指定主專案中的子網路。
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT/regions/REGION/addresses
{ "name": "ADDRESS_NAME", "addressType": "INTERNAL", "subnetwork": "projects/HOST_PROJECT/regions/REGION/subnetworks/HOST_SUBNET", "ipVersion": "IP_VERSION" }更改下列內容:
SERVICE_PROJECT:服務專案的 ID。REGION:端點的區域。這必須與您要連線的區域端點位於相同區域。ADDRESS_NAME:要指派給靜態 IP 位址的名稱。HOST_PROJECT:主機專案的 ID。HOST_SUBNET:要保留 IP 位址的 Shared VPC 網路子網路。IP_VERSION:IP 位址的 IP 版本,可以是IPV4或IPV6。預設為IPV4。如要指定IPV6,IP 位址必須連線至具有內部 IPv6 位址範圍的子網路。
使用
projects.locations.regionalEndpoints.create方法建立 Private Service Connect 端點。HTTP 方法和網址:
POST https://networkconnectivity.googleapis.com/v1/projects/SERVICE_PROJECT/locations/REGION/regionalEndpoints?regionalEndpointId=ENDPOINT_NAME
{ "accessType": "REGIONAL", "address": "ADDRESS", "network": "projects/HOST_PROJECT/global/networks/HOST_NETWORK", "subnetwork": "projects/HOST_PROJECT/regions/REGION/subnetworks/HOST_SUBNET", "targetGoogleApi": "REP_DNS_NAME" }更改下列內容:
SERVICE_PROJECT:服務專案的 ID。REGION:要在其中建立端點的區域。ENDPOINT_NAME:端點名稱。ADDRESS:要用於端點的 IPv4 或 IPv6 位址。如省略此欄位,系統會從子網路分配 IPv4 位址。請使用下列其中一種格式:- IPv4 位址,例如
10.0.0.2。 - IPv4 或 IPv6 位址資源 URI,例如
projects/SERVICE_PROJECT/regions/REGION/addresses/ADDRESS_NAME。
- IPv4 位址,例如
HOST_PROJECT:主機專案的 ID。HOST_NETWORK:主機專案中的網路名稱。HOST_SUBNET:要將端點連線至主機專案中的子網路名稱。REP_DNS_NAME:要連線的區域服務端點主機名稱。例如:spanner.me-central2.rep.googleapis.com。
列出端點
您可以列出所有已設定的端點。
控制台
前往 Google Cloud 控制台的「Private Service Connect」頁面。
按一下「已連線的端點」分頁標籤。
系統會顯示所有端點,包括以區域端點為目標的端點。
gcloud
使用 gcloud network-connectivity regional-endpoints list 指令。
gcloud network-connectivity regional-endpoints list \
--region=REGION
將 REGION 替換為要列出端點的區域。
API
請使用 projects.locations.regionalEndpoints.list 方法。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints
更改下列內容:
PROJECT_ID:端點的專案 ID。REGION:要列出端點的區域。
確認端點運作正常
在設定端點的虛擬私有雲網路和區域中,建立虛擬機器 (VM) 執行個體。在 VM 上執行下列指令,確認 Private Service Connect 端點是否正常運作。端點不會回應 ping (ICMP) 要求。
如要驗證 IPv4 端點,請按照下列步驟操作:
curl --connect-to REP_DNS_NAME:443:ADDRESS:443 \ 'https://REP_DNS_NAME/PATH'
如要驗證 IPv6 端點,請按照下列步驟操作:
curl -6 --connect-to REP_DNS_NAME:443:[ADDRESS]:443 \ 'https://REP_DNS_NAME/PATH'
更改下列內容:
REP_DNS_NAME:目標區域端點的公開 DNS 名稱,例如spanner.me-central2.rep.googleapis.com。ADDRESS:端點的 IP 位址。PATH:這個服務提供的資源路徑。舉例來說,許多服務都會提供導覽文件,路徑為$discovery/rest?version=v1。
下列範例要求會測試 IP 位址為 192.168.1.100 的端點,是否能從 me-central2 的區域端點要求 Cloud Spanner API 導覽文件。
curl --connect-to spanner.me-central2.rep.googleapis.com:443:192.168.1.100:443 \ 'https://spanner.me-central2.rep.googleapis.com/$discovery/rest?version=v1'
為端點建立私人 DNS 項目
您必須建立私人 DNS 項目,用戶端才能將要求導向 Private Service Connect 端點。
建議您建立與目標區域端點使用相同主機名稱的不公開區域:
SERVICE.REGION.rep.DOMAIN
並在該區域中建立頂點記錄。
舉例來說,如果 Private Service Connect 端點的目標是 spanner.me-central2.rep.googleapis.com,請為 spanner.me-central2.rep.googleapis.com 建立私人區域,其中包含 spanner.me-central2.rep.googleapis.com 的頂點記錄。在網域頂層節點中建立記錄,表示您可以存取其他區域端點的公開主機名稱,例如 logging.me-central2.rep.googleapis.com。
以下各節說明如何使用 Cloud DNS 建立私有區域和頂層 DNS 記錄。
建立私人區域
控制台
前往 Google Cloud 控制台的「Create a DNS zone」(建立 DNS 區域) 頁面。
在「Zone type」(區域類型) 中,選取「Private」(私人)。
在「Zone name」(區域名稱) 中輸入名稱。舉例來說,如果您的 Private Service Connect 端點指向
spanner.me-central2.rep.googleapis.com,請輸入spanner-me-central2-rep-googleapis-com。針對「DNS name」(DNS 名稱),指定目標區域端點的主機名稱,並在結尾加上半形句號。例如:
spanner.me-central2.rep.googleapis.com.。新增說明 (如有需要)。
在「Options」(選項) 下方選取「Default (private)」(預設 (私人))。
選取要顯示私人區域的虛擬私有雲網路。只有您選取的虛擬私有雲網路有權查詢該區域中的記錄。
點選「建立」。
gcloud
執行 dns managed-zones
create 指令:
gcloud dns managed-zones create ZONE_NAME \
--dns-name=REP_DNS_NAME. \
--networks=VPC_NETWORK_LIST \
--visibility=private \
--description="Private zone for REP_DNS_NAME"
更改下列內容:
ZONE_NAME:區域名稱,例如spanner-me-central2-rep-googleapis.com。DESCRIPTION:區域說明REP_DNS_NAME:區域的 DNS 尾碼,請使用目標區域端點主機名稱,例如spanner.me-central2.rep.googleapis.comVPC_NETWORK_LIST:以半形逗號分隔的虛擬私有雲網路清單,這些網路有權查詢該區域
API
使用 managedZones.create 方法傳送 POST 要求:
HTTP 方法和網址:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
JSON 要求主體:
{
"name": "ZONE_NAME",
"dnsName": "REP_DNS_NAME.",
"description": "DESCRIPTION",
"visibility": "private",
"privateVisibilityConfig": {
"kind": "dns#managedZonePrivateVisibilityConfig",
"networks": [
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "NETWORK_1_URL"
},
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "NETWORK_2_URL"
}
]
}
}
更改下列內容:
PROJECT_ID:DNS 區域的專案 ID。ZONE_NAME:您為這個區域端點建立的私人區域名稱。REP_DNS_NAME:要建立的記錄 FQDN;請使用目標區域端點主機名稱,例如spanner.me-central2.rep.googleapis.com。DESCRIPTION:DNS 區域的說明。NETWORK_1_URL和NETWORK_2_URL:經授權可查詢區域的虛擬私有雲網路完整網址,例如https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME。
將 DNS 記錄新增至區域
控制台
前往 Google Cloud 控制台的「Cloud DNS zones」(Cloud DNS 區域) 頁面。
按一下要新增記錄的代管區域名稱。
在「Zone details」(區域詳細資料) 頁面中,按一下「Add standard」(新增標準)。
在「Create record set」(建立記錄集) 頁面,將「DNS name」(DNS 名稱) 欄位留空。將這個欄位留空,即可在網域頂層建立資源記錄。
在「Resource record type」(資源記錄類型) 部分,選取「
A」。在「IPv4 address」(IPv4 位址) 欄位中,輸入或選取 Private Service Connect 端點的 IP 位址。
點選「建立」。
gcloud
使用 gcloud dns record-sets create 指令新增資源記錄集:
gcloud dns record-sets create REP_DNS_NAME \
--rrdatas=ADDRESS \
--type=RECORD_TYPE \
--ttl=TTL \
--zone=ZONE_NAME
更改下列內容:
REP_DNS_NAME:要建立的記錄 FQDN;請使用目標區域端點主機名稱,例如spanner.me-central2.rep.googleapis.com。ADDRESS:Private Service Connect 端點的 IP 位址。RECORD_TYPE:DNS 記錄類型,例如 IPv4 記錄為A,IPv6 記錄為AAAA。TTL:解析器快取這個資源記錄集的存留時間 (以秒為單位),例如300。ZONE_NAME:您為這個區域端點建立的私人區域名稱。
API
使用 resourceRecordSets.create 方法即可新增資源記錄集:
HTTP 方法和網址:
POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME/rrsets
JSON 要求主體:
{
"name": "REP_DNS_NAME.",
"type": "RECORD_TYPE",
"ttl": TTL,
"rrdatas": [ "ADDRESS" ]
}
更改下列內容:
PROJECT_ID:DNS 區域的專案 ID。ZONE_NAME:您為這個區域端點建立的私人區域名稱。REP_DNS_NAME:要建立的記錄 FQDN;請使用目標區域端點主機名稱,例如spanner.me-central2.rep.googleapis.com。RECORD_TYPE:DNS 記錄類型,例如 IPv4 記錄為A,IPv6 記錄為AAAA。TTL:解析器快取這個資源記錄集的存留時間 (以秒為單位),例如300。ADDRESS:Private Service Connect 端點的 IP 位址。
設定用戶端以使用私人端點名稱
您必須將用戶端設為使用私人 DNS 名稱,而非公開 DNS 名稱。如要瞭解如何設定用戶端或用戶端程式庫以使用自訂端點,請參閱相關說明文件。下列頁面包含一些常見用戶端的設定步驟:
Python:您可以在用戶端選項中設定
api_endpoint。前往:您可以在 ClientOptions 中設定
WithEndpoint。.NET:您可以在用戶端的建構工具類別中設定
Endpoint。Java:您可以在用戶端的設定類別中設定
setEndpoint。gcloud:您可以在 gcloud CLI 中設定
api_endpoint_overrides。
取得端點的詳細資訊
您可以查看端點的設定詳細資料。
gcloud
使用 gcloud network-connectivity regional-endpoints describe 指令。
gcloud network-connectivity regional-endpoints describe \
ENDPOINT_NAME --region=REGION
更改下列內容:
ENDPOINT_NAME:端點名稱。REGION:端點的區域。
API
使用 projects.locations.regionalEndpoints.get 指令。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME
更改下列內容:
PROJECT_ID:端點的專案 ID。REGION:要列出端點的區域。ENDPOINT_NAME:端點名稱。
更新全域存取權設定
您無法更新具有區域端點目標的 Private Service Connect 端點。如要變更端點的全域存取權設定,請刪除端點,然後建立新的端點,並套用所需的全域存取權設定。
刪除端點
您可以刪除端點。
gcloud
使用 gcloud network-connectivity regional-endpoints delete 指令。
gcloud network-connectivity regional-endpoints delete \
ENDPOINT_NAME --region=REGION
更改下列內容:
ENDPOINT_NAME:端點名稱。REGION:端點的區域。
API
使用 projects.location.regionalEndpoints.delete 指令。
DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME
更改下列內容:
PROJECT_ID:端點的專案 ID。REGION:端點的區域。ENDPOINT_NAME:端點名稱。
從混合式網路存取端點
連線至 Cloud Interconnect 的 VLAN 連結或 Cloud VPN 通道網路中的用戶端,可以存取 Private Service Connect 端點。 Google CloudVLAN 連結或 Cloud VPN 通道必須在與端點相同的虛擬私有雲網路 (或 Shared VPC 網路) 中終止。對等互連虛擬私有雲網路中的用戶端無法連線至端點。
如果設定全域存取權,來自 VLAN 連結或 Cloud VPN 通道的用戶端流量,就能抵達其他區域的端點。
VLAN 連結支援 Dataplane v1 和 Dataplane v2。如要進一步瞭解 Dataplane 版本,請參閱「Dataplane v2」。
您必須設定其他網路中的系統,才能查詢私人 DNS 區域。
如果您使用 Cloud DNS 實作私人 DNS 區域,請完成下列步驟:
在其他網路連線的虛擬私有雲網路中,建立傳入伺服器政策。
在 VLAN 連結或 Cloud VPN 通道所在的區域,找出其他網路所連線的 VPC 網路中傳入轉送器進入點。
在其他網路中設定系統和 DNS 名稱伺服器,將端點的 DNS 名稱轉送至與 VLAN 連結或 Cloud VPN 通道位於相同區域的傳入轉送器進入點,並連線至 VPC 網路。