透過端點存取區域性 Google API
本文說明如何使用 Private Service Connect 端點,連線至支援的 Google API 區域端點。
如要瞭解其他 Private Service Connect 設定,請參閱「Private Service Connect」。
角色
如要取得建立區域性 Private Service Connect 端點所需的權限,請管理員在虛擬私有雲網路上授予下列 IAM 角色:
-
Compute 網路管理員角色 (
roles/compute.networkAdmin
) -
DNS 管理員角色 (
roles/dns.admin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
事前準備
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
$ gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
Enable the Compute Engine, Network Connectivity Center, and Cloud DNS APIs.
此外,請啟用 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」(區域) 清單中,選取要使用的區域。
在「目標服務」清單中,選取要存取的服務。
在「端點名稱」中,輸入端點的名稱。
在「網路」中選取網路。
在「Subnetwork」(子網路) 中,選取子網路。
在「IP address」(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
。
列出端點
您可以列出所有已設定的端點。
主控台
前往 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 端點是否正常運作。端點不會回應連線偵測 (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 控制台的「建立 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.
。選用:新增說明。
在「選項」下方,選取「預設 (私人)」。
選取要顯示不公開區域的虛擬私有雲網路。只有您選取的虛擬私有雲網路,才能查詢區域中的記錄。
點選「建立」。
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.com
VPC_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 區域」頁面。
按一下要新增記錄的代管區域名稱。
在「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
。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
:端點名稱。
透過混合式網路存取端點
連線至 Google Cloud 的網路中的用戶端,可透過 Cloud Interconnect 或 Cloud VPN 通道的 VLAN 連結存取 Private Service Connect 端點。VLAN 連結或 Cloud VPN 通道必須在與端點相同的虛擬私有雲網路 (或共用虛擬私有雲網路) 中終止。對等互連虛擬私有雲網路中的用戶端無法連上端點。
如果設定全域存取權,來自 VLAN 連結或 Cloud VPN 通道的用戶端流量就能連線至其他區域的端點。
VLAN 連結支援 Dataplane v1 和 Dataplane v2。如要進一步瞭解 Dataplane 版本,請參閱「Dataplane v2」。
您必須在其他網路中設定系統,才能查詢私人 DNS 區域。
如果您使用 Cloud DNS 實作私人 DNS 區域,請完成下列步驟:
在其他網路連線的虛擬私有雲網路中,建立傳入伺服器政策。
找出 VLAN 連結或 Cloud VPN 通道所在區域的入埠轉送器進入點,也就是其他網路連線的虛擬私有雲網路。
在其他網路中設定系統和 DNS 名稱伺服器,將端點的 DNS 名稱轉送至與 VLAN 連結或 Cloud VPN 通道位於相同區域的傳入轉送器進入點,這些連結或通道會連線至虛擬私有雲網路。