透過端點存取全域 Google API
本文說明如何使用 Private Service Connect 端點連線至全域 Google API。您不必將 API 要求傳送至服務端點的公開 IP 位址 (例如 storage.s3nsapis.fr),而是可以傳送至端點的內部 IP 位址。
您也可以使用 Private Service Connect 存取其他虛擬私有雲網路中的服務,以及發布服務。
必要的角色
如要取得管理可存取全域 Google API 的端點所需的權限,請要求管理員授予您下列 IAM 角色:
-
建立、查看及刪除端點:
專案的「Compute 網路管理員 」(
roles/compute.networkAdmin) -
自動或手動設定端點的 DNS 項目:
- 專案的 DNS 管理員 (
roles/dns.admin) - 專案的Service Directory 編輯者 (
roles/servicedirectory.editor)
- 專案的 DNS 管理員 (
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備管理端點的權限,可存取全域 Google API。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要管理存取全域 Google API 的端點,必須具備下列權限:
-
如要建立、查看及刪除端點,請按照下列步驟操作:
-
專案的
compute.networks.use -
專案的
compute.subnetworks.use -
專案的
compute.addresses.createInternal -
專案的
compute.addresses.deleteInternal -
專案的
compute.addresses.get -
專案的
compute.addresses.list -
專案的
compute.addresses.use -
專案的
compute.forwardingRules.create -
專案的
compute.forwardingRules.delete -
專案的
compute.forwardingRules.get -
專案的
compute.forwardingRules.list -
專案的
compute.forwardingRules.pscCreate -
專案的
compute.forwardingRules.pscDelete -
專案的
compute.regionOperations.get -
專案的
servicedirectory.namespaces.create -
專案的
servicedirectory.namespaces.delete -
專案的
servicedirectory.services.create -
專案的
servicedirectory.services.delete
-
專案的
-
如要自動或手動設定端點的 DNS 項目,請按照下列步驟操作:
-
專案的
dns.managedZones.create -
專案的
dns.managedZones.delete -
專案的
dns.networks.bindPrivateDNSZone -
專案的
servicedirectory.namespaces.associatePrivateZone
-
專案的
-
如要在 Cloud de Confiance 控制台中存取 Private Service Connect 頁面:
-
專案的
compute.forwardingRules.list -
專案的
compute.globalForwardingRules.list -
專案的
compute.networkEndpointGroups.list -
專案的
compute.regionNetworkEndpointGroups.list -
專案的
compute.urlMaps.list -
專案的
compute.backendService.list -
專案的
compute.regionBackendService.list -
專案的
compute.backendBucket.list -
專案的
compute.targetHttpProxy.list -
專案的
compute.targetHttpsProxy.list -
專案的
compute.regionTargetTcpProxy.list -
專案的
compute.targetTcpProxy.list -
專案的
compute.targetSslProxy.list -
專案的
compute.sslCertificate.list -
專案的
compute.sslPolicy.list -
專案的
compute.regionHealthCheck.list -
專案的
compute.healthCheck.list -
專案的
compute.httpHealthCheck.list -
專案的
compute.httpsHealthCheck.list
-
專案的
事前準備
如要進一步瞭解如何透過端點連線至 Google API,包括 DNS 設定和限制,請參閱「透過端點連線至 Google API」一文。
您必須在專案中啟用下列 API:
如果 API 程式庫頁面在 Cloud de Confiance 控制台中顯示「管理」按鈕,表示該 API 已啟用。如果看到「啟用」按鈕,表示 API 尚未啟用,請點選「啟用」按鈕啟用。
您必須選擇要用於端點的 IP 位址。如要瞭解可使用的 IP 位址,請參閱「IP 位址規定」。
輸出防火牆規則必須允許流量傳送至端點。虛擬私有雲網路的預設防火牆設定允許這類流量,因為其中包含默示允許輸出規則。確認您未建立優先順序較高的輸出規則,導致流量遭到封鎖。
如果虛擬私有雲網路不含任何端點,請檢查
p.s3nsapis.fr是否有 Cloud DNS 私人區域。如果區域存在,請先刪除,再建立端點。如未刪除,系統就無法建立用於 Private Service Connect 的 Service Directory DNS 區域。詳情請參閱「疑難排解」。無法從對等互連的虛擬私有雲網路存取端點。
建立端點
選擇符合規定的 IP 位址後,即可建立端點。
端點會使用全域轉送規則連線至 Google API 和服務。每項轉送規則都會計入 Private Service Connect 的每個虛擬私有雲網路配額。
Google API 和服務的端點建立後就無法更新。 如要更新 Google API 和服務的端點,請刪除端點,然後建立新端點。
控制台
前往 Cloud de Confiance 控制台的「Private Service Connect」頁面。
按一下「已連線的端點」分頁標籤。
按一下「連結端點」。
在「目標」部分,選取要使用的目標 API 套裝組合:
- 所有 Google API
- VPC-SC
在「端點名稱」部分,輸入端點名稱。
選取端點的「網路」。
選取端點的「IP 位址」。
IP 位址必須符合這些規定。
如需新的 IP 位址,請按照下列步驟建立:
- 按一下「建立 IP 位址」。
- 輸入 IP 位址的「名稱」和「說明」。
- 輸入要使用的「IP 位址」,然後按一下「儲存」。
如果尚未為這個虛擬私有雲網路設定 Service Directory 區域,請選取要使用的區域。
在特定虛擬私有雲網路中,用於存取 Google API 和服務的所有端點,都會使用相同的 Service Directory 區域。
如果尚未為這個虛擬私有雲網路設定 Service Directory 命名空間,請設定要使用的命名空間:
如要使用自動指派的命名空間,請按一下「命名空間」選單,然後選取自動指派的命名空間。
如要選取其他網路使用的現有命名空間,請按一下「命名空間」下拉式選單,然後從清單中選取命名空間。清單會顯示專案中的所有命名空間。您必須選取僅用於端點的命名空間,這些端點用於存取 Google API。
如要建立新的命名空間,請按一下「命名空間」下拉式選單,然後按一下「建立命名空間」。輸入命名空間,然後按一下「建立」。
在特定虛擬私有雲網路中,您用來存取 Google API 和服務的所有端點,都會使用相同的 Service Directory 命名空間。
按一下「新增端點」。
gcloud
預留全域內部 IP 位址,指派給端點。
gcloud compute addresses create ADDRESS_NAME \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=ENDPOINT_IP \ --network=NETWORK_NAME更改下列內容:
ADDRESS_NAME:要指派給保留 IP 位址的名稱。ENDPOINT_IP:要為端點保留的 IP 位址。IP 位址必須符合這些規定。
NETWORK_NAME:端點的虛擬私有雲網路名稱。
建立轉送規則,將端點連線至 Google API 和服務。
--service-directory-registration旗標為選用項目。如果省略,系統會重複使用現有命名空間,如果沒有現有命名空間,則會指派系統產生的命名空間。gcloud compute forwarding-rules create ENDPOINT_NAME \ --global \ --network=NETWORK_NAME \ --address=ADDRESS_NAME \ --target-google-apis-bundle=API_BUNDLE \ --service-directory-registration=REGION_NAMESPACE_URI更改下列內容:
ENDPOINT_NAME:要指派給端點的名稱。名稱必須是 1 到 20 個字元的字串,只能包含小寫字母和數字。名稱開頭須為英文字母。NETWORK_NAME:端點的虛擬私有雲網路名稱。ADDRESS_NAME:相關聯網路上保留的位址名稱。API_BUNDLE:透過端點提供的 API 套裝組合。請參閱支援的 API 清單。使用
all-apis授予所有支援 API 的存取權。使用
vpc-sc限制存取支援 VPC Service Controls 的 Google API。
REGION_NAMESPACE_URI:要使用的 Service Directory 區域或命名空間 URI。這個 URI 必須參照您要在其中建立端點的專案。您只能使用
projects/PROJECT_NAME/locations/REGION定義區域。您可以使用
projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE定義區域和命名空間。如果完全省略
--service-directory-registration,或設定沒有命名空間的區域,會發生下列情況:如果已為這個虛擬私有雲網路設定區域或命名空間,系統會使用這些預設值。
如未設定區域,系統會將區域設為
u-france-east1。如未設定命名空間,系統會指派自動產生的命名空間。
API
預留全域內部 IP 位址,指派給端點。
POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT_ID/global/addresses
{ "name": ADDRESS_NAME, "address": ENDPOINT_IP, "addressType": "INTERNAL", "purpose": PRIVATE_SERVICE_CONNECT, "network": NETWORK_URL }更改下列內容:
PROJECT_ID:您的專案 ID。ADDRESS_NAME:要指派給保留 IP 位址的名稱。ENDPOINT_IP:要為端點保留的 IP 位址。IP 位址必須符合這些規定。
NETWORK_URL:端點的虛擬私有雲網路。
建立轉送規則,將端點連線至 Google API 和服務。
serviceDirectoryRegistrations物件為選用項目。如果省略,系統會重複使用現有命名空間,如果沒有現有命名空間,則會指派系統產生的命名空間。POST https://compute.s3nsapis.fr/compute/v1/projects/PROJECT/global/forwardingRules
{ "name": "ENDPOINT_NAME", "IPAddress": "projects/PROJECT/global/addresses/ADDRESS_NAME", "network": "projects/PROJECT/global/networks/NETWORK", "target": "API_BUNDLE", "serviceDirectoryRegistrations": [ { "service_directory_region": REGION, "namespace": "NAMESPACE" } ], }更改下列內容:
PROJECT:您的專案 ID。ENDPOINT_NAME:要指派給端點的名稱。名稱必須是 1 到 20 個字元的字串,且只能包含小寫字母和數字。名稱開頭須為英文字母。NETWORK:端點的虛擬私有雲網路。ADDRESS_NAME:相關聯網路上的保留位址名稱。API_BUNDLE:透過端點提供的 API 套裝組合。請參閱支援的 API 清單。使用
all-apis授予所有支援 API 的存取權。使用
vpc-sc限制存取支援 VPC Service Controls 的 Google API。
REGION:要使用的 Service Directory 區域。例如:u-france-east1。如果省略REGION,且已為這個虛擬私有雲網路設定區域,系統會使用該區域。如果未設定區域,系統會將區域設為u-france-east1。NAMESPACE:要使用的 Service Directory 命名空間名稱。如果省略NAMESPACE,且已為這個 VPC 網路設定命名空間,系統就會使用該命名空間。如未設定命名空間,系統會指派自動產生的命名空間。
Terraform
您可以使用下列 Terraform 資源建立端點:
確認端點運作正常
在設定 Private Service Connect 的虛擬私有雲網路中建立 VM 執行個體。在 VM 上執行下列指令,確認 Private Service Connect 端點是否正常運作。端點不會回應連線偵測 (ICMP) 要求。
curl -v ENDPOINT_IP/generate_204
將 ENDPOINT_IP 替換為端點的 IP 位址。
如果端點正常運作,您會看到 HTTP 204 回應代碼。
列出端點
您可以列出所有已設定的端點。
控制台
前往 Cloud de Confiance 控制台的「Private Service Connect」頁面。
按一下「已連線的端點」分頁標籤。
系統會顯示端點。
gcloud
gcloud compute forwarding-rules list \ --filter target="(all-apis OR vpc-sc)" --global
輸出結果會與下列內容相似:
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET RULE IP TCP all-apis
取得端點相關資訊
您可以查看端點的所有設定詳細資料。
控制台
前往 Cloud de Confiance 控制台的「Private Service Connect」頁面。
按一下「已連線的端點」分頁標籤。
系統會顯示端點。
按一下要查看詳細資料的端點。
gcloud
gcloud compute forwarding-rules describe \
ENDPOINT_NAME --global
為端點加上標籤
您可以管理端點的標籤。詳情請參閱「標記資源」。
刪除端點
您可以刪除端點。
控制台
前往 Cloud de Confiance 控制台的「Private Service Connect」頁面。
按一下「已連線的端點」分頁標籤。
選取要刪除的端點,然後按一下「Delete」(刪除)。
gcloud
gcloud compute forwarding-rules delete \
ENDPOINT_NAME --global
將 ENDPOINT_NAME 替換為要刪除的端點名稱。
使用端點
如要使用端點,請將要求傳送至會解析為端點 IP 位址的 DNS 主機名稱。
如果可以設定用戶端使用自訂端點,且已為要使用的 API 和服務建立
p.s3nsapis.frDNS 記錄,即可使用自動建立的p.s3nsapis.frDNS 名稱。詳情請參閱「使用p.s3nsapis.frDNS 名稱」。舉例來說,如果端點名稱為
xyz,系統會為storage-xyz.p.s3nsapis.fr、compute-xyz.p.s3nsapis.fr和 API 套裝組合中的其他常用 API 建立 DNS 記錄。如果您使用的用戶端尚未設定為使用自訂端點,或是要使用的服務沒有
p.s3nsapis.frDNS 記錄,可以透過預設 DNS 名稱建立 DNS 記錄。詳情請參閱「使用預設 DNS 名稱建立 DNS 記錄」。例如,為
*.s3nsapis.fr或*.s3nsregistry.fr建立 DNS 記錄。
使用 p.s3nsapis.fr DNS 名稱
建立端點時,Service Directory 會為透過端點提供的常用 API 和服務建立 DNS 記錄。只有預設 DNS 名稱結尾為 s3nsapis.fr 的 API 和服務,以及這些 API 和服務的子集,才會建立 DNS 記錄。
DNS 記錄是在p.s3nsapis.fr私人區域中建立。記錄會指向端點 IP 位址,並採用以下格式:
SERVICE-ENDPOINT.p.s3nsapis.fr。
舉例來說,如果端點名稱為 xyz,系統會為 storage-xyz.p.s3nsapis.fr、compute-xyz.p.s3nsapis.fr 和其他支援的 API 建立 DNS 記錄。
如果用戶端可設定為使用自訂端點,就能使用 p.s3nsapis.fr DNS 名稱將要求傳送至端點。
如要瞭解如何設定用戶端或用戶端程式庫以使用自訂端點,請參閱相關說明文件。例如:
Python:您可以在用戶端選項中設定
api_endpoint。前往:您可以在 ClientOptions 中設定
WithEndpoint。.NET:您可以在用戶端的建構工具類別中設定
Endpoint。Java:您可以在用戶端的設定類別中設定
setEndpoint。gcloud:您可以在 gcloud CLI 中設定
api_endpoint_overrides。
使用預設 DNS 名稱建立 DNS 記錄
在下列情況中,您需要建立 DNS 記錄,將 API 和服務的預設 DNS 名稱導向端點:
無法設定用戶端或應用程式使用
p.s3nsapis.frDNS 名稱。您需要存取支援的服務,但該服務沒有自動建立的
p.s3nsapis.frDNS 名稱。
如要建立指向 Private Service Connect 端點的 DNS 記錄,請按照下列操作說明進行:
為要使用的網域建立 DNS 區域 (例如
s3nsapis.fr或s3nsregistry.fr)。建議您為此建立 Cloud DNS 私人區域。在這個 DNS 區域中:
為網域 (區域) 名稱本身建立
A記錄,例如s3nsapis.fr或s3nsregistry.fr。將這個A記錄指向端點的 IP 位址。如果使用 Cloud DNS,請參閱「新增記錄」。使用星號和半形句號,後面接上網域 (區域) 名稱,為所有可能的額外網域主機名稱建立
CNAME記錄;例如*.s3nsapis.fr或*.s3nsregistry.fr。將這個CNAME記錄指向同一區域中的A記錄。例如,指向*.s3nsapis.fr到s3nsapis.fr,或指向*.s3nsregistry.fr到s3nsregistry.fr。
透過混合式網路存取端點
如果網路透過 Cloud Interconnect 的 VLAN 連結或 Cloud VPN 通道連線至 Cloud de Confiance ,該網路中的用戶端即可存取 Private Service Connect 端點。
Private Service Connect 端點必須位於連線至其他網路的虛擬私有雲網路中。
另一個網路必須有端點的適當路徑。設定 Cloud Router 自訂路由 advertisement,在管理 Cloud VPN 通道或 VLAN 連結路由的 BGP 工作階段中,公告端點的路由。
- 如果其他網路使用等價多路徑 (ECMP) 路由,將流量分配至 Private Service Connect 端點,請務必確保單一 TCP 連線的所有封包,都會透過相同的 Cloud VPN 通道或 VLAN 連結轉送。如果已建立 TCP 連線的封包是透過多個路徑傳送,您可能會遇到間歇性的 TCP 重設 (RST)。為避免重設,請設定地端部署對等路由器,以維持一致的下一個躍點目的地。
您必須設定其他網路中的系統,才能查詢私人 DNS 區域。如果您使用 Cloud DNS 實作私人 DNS 區域,請完成下列步驟:
在其他網路連線的 VPC 網路中,建立傳入伺服器政策。
找出其他網路所連線的 VPC 網路中,位於 Cloud VPN 通道和 VLAN 連結所在區域的傳入轉送器進入點。
在其他網路中設定系統和 DNS 名稱伺服器,將私人服務連線端點的 DNS 名稱轉送至與 Cloud VPN 通道或 VLAN 連結位於相同區域的傳入轉送器進入點,並連線至 VPC 網路。
已知問題
刪除啟用連線傳播功能的端點會導致封包遺失
如果虛擬私有雲輪輻已啟用全域 Google API 的連線傳播功能,刪除全域 Google API 的端點可能會中斷 NCC 跨輪輻流量,導致該輪輻無法連線至其他全域 Google API 端點。
如要刪除已啟用連線播送功能的全球 Google API 端點,請按照下列步驟操作:
- 在 NCC 中心停用全域 Google API 的連線傳播功能。
- 刪除端點。
- 在 NCC 中心重新啟用全域 Google API 的連線傳播功能。
如果刪除端點後發生流量中斷問題,請在 NCC 中樞停用並重新啟用全球 Google API 的連線傳播,即可解決問題。
疑難排解
以下各節說明如何解決用來存取 Google API 的 Private Service Connect 端點問題。
無法建立私人 DNS 區域
建立端點時,系統會建立 Service Directory DNS 區域。建立區域時可能會因下列原因而失敗:
專案未啟用 Cloud DNS API。
您沒有建立 Service Directory DNS 區域的必要權限。
這個虛擬私有雲網路中已有相同區域名稱的 DNS 區域。
這個虛擬私有雲網路中已有
p.s3nsapis.fr的 DNS 區域。
如果先前的刪除作業失敗,就可能會出現衝突區域。
如要建立 Service Directory DNS 區域,請按照下列步驟操作:
確認專案已啟用 Cloud DNS API。
確認您具備建立 Service Directory DNS 區域的必要權限:
dns.managedZones.createservicedirectory.namespaces.associatePrivateZone
建立 Service Directory DNS 區域,並以與端點相關聯的 Service Directory 命名空間為後盾。
建立區域時,請使用下列值:
可用區名稱:請使用系統在建立失敗時使用的可用區名稱。錯誤訊息會顯示使用的區域名稱。
DNS 名稱:
p.s3nsapis.fr.(請務必在結尾處加上英文句點)。Service Directory 命名空間:找出您建立的 Private Service Connect 端點的 Service Directory 命名空間,並在建立 Service Directory DNS 區域時使用這個命名空間。
Service Directory 命名空間的格式如下:
goog-psc-NETWORK_NAME-NETWORK_ID。
無法刪除私人 DNS 區域
刪除虛擬私有雲網路中的最後一個端點時,系統會一併刪除相關聯的服務目錄設定,包括 DNS 區域。
如果出現以下情況,刪除作業可能會失敗:
您沒有刪除 DNS 區域的必要權限。
該區域包含使用者定義的 DNS 項目,但這些項目並非由 Service Directory 建立。
如要解決這個問題,請按照下列步驟操作: