本文說明如何設定私人連線,讓虛擬私有雲網路或地端部署網路中的主機,連線至 VPC Service Controls 支援的 Google API 和服務。
建議您先熟悉 Private Google Access 概念、規格和網路設定,再閱讀本文。請參閱搭配使用 Private Google Access 與 VPC Service Controls 的拓撲圖範例。
事前準備
- 在 Google Cloud 控制台的API 和服務頁面中,啟用要存取的 API。
- 確認您具備建立或更新子網路的必要角色。具有網路管理員角色的專案擁有者、編輯者和 IAM 主體可建立或更新子網路及指派 IP 位址。如要進一步瞭解角色,請參閱 IAM 角色說明文件。
- 確認已為 Private Google Access 和地端部署主機的 Private Google Access 設定虛擬私有雲網路,同時支援自動和自訂模式的虛擬私有雲網路,不支援舊版網路。
- 確認虛擬私有雲網路中的 VM 執行個體具有私人 IP 位址 (沒有公開 IP 位址),且位於啟用 Private Google Access 的子網路中。
- 如果是地端部署主機,請確認您有現有 Cloud VPN 通道或 Cloud Interconnect 連線,連至虛擬私有雲網路。如要支援具有 IPv6 位址的地端部署主機,請參閱「IPv6 支援」。
程序總覽
如要設定私人連線,請完成下列任務:
- 設定
restricted.googleapis.comIP 位址範圍的路由。詳情請參閱「設定路由」。 - 設定防火牆規則,允許適當的流量傳向
restricted.googleapis.comIP 位址範圍。詳情請參閱「設定防火牆規則」。 - 設定 DNS,讓流向 Google API 的流量可解析為
restricted.googleapis.comIP 位址範圍。詳情請參閱「設定 DNS」。
restricted.googleapis.com 的 IPv6 支援
您可以使用 restricted.googleapis.com 網域的 IPv6 位址範圍存取 Google API:2600:2d00:0002:1000::/64。
如果您想使用 restricted.googleapis.com 網域,且用戶端使用 IPv6 位址,請考慮設定 IPv6 位址。如果 IPv6 用戶端也設定 IPv4 位址,則可使用 IPv4 位址連線至 Google API 和服務。並非所有服務都接受來自 IPv6 用戶端的流量。
如要讓地端部署環境中的 IPv6 用戶端使用 restricted.googleapis.com 存取 Google API,請設定與虛擬私有雲網路的連線,以支援 IPv6。如需詳細資訊,請參閱以下頁面:
地端部署用戶端可以從任何 IPv6 GUA 或 ULA 位址傳送要求,但 ULA 範圍 fda3:e722:ac3:cc00::/64 除外,因為該範圍保留供內部使用。
如要進一步瞭解 restricted.googleapis.com VIP,請參閱「設定 Private Google Access」。
直接連線至 API 和服務
部分 Google API 和服務支援從 Compute Engine 虛擬機器 (VM) 執行個體直接連線,略過 Google Front End (GFE),提供更優異的效能。
如要建立直接連線,您的路由和防火牆規則必須允許 IPv4 流量傳送至 34.126.0.0/18,以及 IPv6 流量傳送至 2001:4860:8040::/42。這些 IP 位址是 restricted.googleapis.com 網域的子集,支援 VPC Service Controls。此外,不需要為這些位址建立 DNS 記錄。
請注意,直接連線僅適用於 Google Cloud 資源,不支援地端部署主機。
設定前往 restricted.googleapis.com 的路由
雖然系統會針對相容且已設定的服務強制執行 VPC Service Controls,但無論您使用哪個網域,restricted.googleapis.com 都能進一步降低資料竊取風險。使用 restricted.googleapis.com 會拒絕存取 VPC Service Controls 不支援的 Google API 和服務。
無論是 Private Google Access 或地端部署主機的 Private Google Access,您的虛擬私有雲網路都必須包含 restricted.googleapis.com IP 位址範圍的路由,且下一個躍點為預設網際網路閘道。即使下一個躍點為預設網際網路閘道,傳送到 restricted.googleapis.com 的流量仍會保留在 Google 網路中。
如果虛擬私有雲網路沒有下一個躍點為預設網際網路閘道的預設路由,您可以建立自訂靜態路由,將目的地設為 restricted.googleapis.com IP 位址範圍,下一個躍點則設為預設網際網路閘道。如要禁止存取網際網路,必須移除下一個躍點為預設網際網路閘道的其他路由。
如要進一步瞭解如何使用虛擬私有雲路由,請參閱虛擬私有雲說明文件中的「使用路由」。
在虛擬私有雲網路中設定自訂靜態路由
新增自訂靜態路由,啟用對 VPC Service Controls 支援的 Google 代管服務的存取權。
gcloud compute routes create ROUTE_NAME \ --network=NETWORK_NAME \ --destination-range=DESTINATION_RANGE \ --next-hop-gateway=default-internet-gateway
更改下列內容:
ROUTE_NAME:自訂路由的名稱NETWORK_NAME:虛擬私有雲網路的名稱DESTINATION_RANGE:路由的目的地範圍- 如要將流量導向
restricted.googleapis.comVIP,請使用下列範圍:- IPv4 流量:
199.36.153.4/30 - IPv6 流量:
2600:2d00:0002:1000::/64
- IPv4 流量:
- 如要將流量導向允許直接連線的 API,請使用下列範圍:
- IPv4 流量:
34.126.0.0/18 - IPv6 流量:
2001:4860:8040::/42
- IPv4 流量:
- 如要將流量導向
向地端部署網路中的主機公告受限制路由
如果您使用「地端部署主機專用的 Private Google Access」,請設定路由,讓系統能透過 Cloud VPN 或 Cloud Interconnect 連線轉送 Google API 流量。如要向地端部署網路公告受限制 VIP 位址範圍,請使用 Cloud Router 自訂 advertisement 模式。只有可透過私人 IP 位址連上虛擬私有雲網路的地端部署主機,才能存取受限制 VIP 位址範圍。
您可以將這個自訂 advertised 路由新增至 Cloud Router (適用於路由器上的所有 BGP 工作階段),或特定的 BGP 工作階段 (適用於單一 Cloud VPN 通道或 VLAN 連結)。
只有在啟用 IPv6 的 BGP 工作階段中,才會 advertise IPv6 路由。
如要為現有 Cloud Router 上的所有 BGP 工作階段,建立受限制範圍的自訂 advertise 路由,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「Cloud Router」頁面。
選取要更新的 Cloud Router。
在 Cloud Router 的詳細資料頁面中選取 [編輯]。
展開 [公告路徑] 區段。
在「Routes」(路由) 欄位,選取「Create custom routes」(建立自訂路由)。
如要繼續公告 Cloud Router 可用的子網路,請選取「Advertise all subnets visible to the Cloud Router」(公告向 Cloud Router 公開的所有子網路)。啟用這個選項後即可模擬 Cloud Router 的預設行為。
如要新增 advertise 路由,請選取「Add custom route」(新增自訂路由)。
設定路由 advertisement。
- 來源:選取「Custom IP range」(自訂 IP 範圍)。
- IP 位址範圍:
- IPv4 連線:
199.36.153.4/30 - IPv6 連線:
2600:2d00:0002:1000::/64
- IPv4 連線:
- 說明:新增
Restricted Google APIs IPs的說明。
新增路由後,請選取「Save」(儲存)。
gcloud
執行 update 指令,使用 --set-advertisement-ranges 或 --add-advertisement-ranges 標記指定自訂 IP 範圍:
如要設定自訂 IP 範圍,請使用
--set-advertisement-ranges標記,即可取代所有現有的自訂 advertise 路由。以下範例會更新my-routerCloud Router,以 advertise 所有子網路和restricted.googleapis.comIP 位址範圍。gcloud compute routers update my-router \ --advertisement-mode CUSTOM \ --set-advertisement-groups ALL_SUBNETS \ --set-advertisement-ranges RANGES將
RANGES替換為您要使用的範圍:- IPv4 連線:
199.36.153.4/30 - IPv6 連線:
2600:2d00:0002:1000::/64 - 同時支援 IPv4 和 IPv6 連線:
199.36.153.4/30,2600:2d00:0002:1000::/64
- IPv4 連線:
如要將自訂 IP 範圍附加到現有 advertisement,請使用
--add-advertisement-ranges標記。請注意,Cloud Router 的 advertisement 模式必須先設為custom,才能使用這個標記。下列範例會將restricted.googleapis.comIP 位址範圍新增至 Cloud Router 的 advertisement:gcloud compute routers update my-router \ --add-advertisement-ranges RANGES將
RANGES替換為您要使用的範圍:- IPv4 連線:
199.36.153.4/30 - IPv6 連線:
2600:2d00:0002:1000::/64 - 同時支援 IPv4 和 IPv6 連線:
199.36.153.4/30,2600:2d00:0002:1000::/64
- IPv4 連線:
如要為現有 Cloud Router 的特定 BGP 工作階段,建立受限制範圍的自訂 advertise 路由,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「Cloud Router」頁面。
選取要更新的 BGP 工作階段所屬的 Cloud Router。
在 Cloud Router 的詳細資料頁面中,選取要更新的 BGP 工作階段。
在「BGP session details」(BGP 工作階段詳細資料) 頁面中選取「Edit」(編輯)。
在「Routes」(路由) 欄位,選取「Create custom routes」(建立自訂路由)。
選取 [公告 Cloud Router 可使用的所有子網路],繼續通告 Cloud Router 可用的子網路。啟用這個選項後即可模擬 Cloud Router 的預設行為。
選取 [新增自訂路徑] 以新增通告路徑。
設定路由 advertisement。
- 來源:選取「Custom IP range」(自訂 IP 範圍) 以指定自訂 IP 範圍。
- IP 位址範圍:
- IPv4 連線:
199.36.153.4/30 - IPv6 連線:
2600:2d00:0002:1000::/64
- IPv4 連線:
- 說明:新增
Restricted Google APIs IPs的說明。
新增路由完畢後,請選取「Save」(儲存)。
gcloud
執行 update-bgp-peer 指令,使用 --set-advertisement-ranges 或 --add-advertisement-ranges 標記指定自訂 IP 範圍。
如要設定自訂 IP 範圍,請使用
--set-advertisement-ranges標記,即可取代所有現有的自訂 advertise 路由。如果您要新增 IPv6 自訂範圍,且 BGP 工作階段已停用 IPv6 流量,可以使用
--enable-ipv6標記啟用流量。以下範例會更新
my-routerCloud Router 上的my-bgp-sessionBGP 工作階段,以 advertise 所有子網路和自訂 IP 範圍:gcloud compute routers update-bgp-peer my-router \ --peer-name my-bgp-session \ --advertisement-mode CUSTOM \ --set-advertisement-groups ALL_SUBNETS \ --set-advertisement-ranges RANGES將
RANGES替換為您要使用的範圍:- IPv4 連線:
199.36.153.4/30 - IPv6 連線:
2600:2d00:0002:1000::/64 - 同時支援 IPv4 和 IPv6 連線:
199.36.153.4/30,2600:2d00:0002:1000::/64
- IPv4 連線:
如要將自訂 IP 範圍附加到現有範圍,請使用
--add-advertisement-ranges標記。請注意,Cloud Router 的 advertisement 模式必須先設為custom,才能使用這個標記。如果您要新增 IPv6 自訂範圍,且 BGP 工作階段已停用 IPv6 流量,可以使用
--enable-ipv6標記啟用流量。下列範例會將受限制 VIP 位址範圍新增至 Cloud Router 的 advertisement:
gcloud compute routers update-bgp-peer my-router \ --peer-name my-bgp-session \ --add-advertisement-ranges RANGES將
RANGES替換為您要使用的範圍:- IPv4 連線:
199.36.153.4/30 - IPv6 連線:
2600:2d00:0002:1000::/64 - 同時支援 IPv4 和 IPv6 連線:
199.36.153.4/30,2600:2d00:0002:1000::/64
如要進一步瞭解自訂 advertisement 模式,請參閱「自訂 advertise 路由」。
- IPv4 連線:
設定防火牆規則
使用 Private Google Access 時,VM 執行個體會使用內部 IP 位址存取受保護的 Google API 資源,而不需要外部 IP 位址。不過,VM 執行個體仍可擁有外部 IP 位址,或以其他方式滿足網路連線能力需求。除了自訂 advertise 路由,您也可以建立防火牆規則來拒絕輸出流量,藉此限制虛擬私有雲網路中 VM 執行個體的輸出流量。
根據預設,只要適用路由存在,默示允許輸出防火牆規則就會允許 VM 執行個體向任何目的地傳送流量。您可以先建立輸出拒絕規則,封鎖所有傳出流量。然後建立優先順序較高的輸出規則,允許傳送至虛擬私有雲網路中的特定目的地,以及傳送至 restricted.googleapis.com IP 位址範圍的流量。所有與 restricted.googleapis.com 進行的通訊都會透過 TCP 通訊埠 443 完成。
如要允許來自 Google Cloud 的流量連線至 restricted.googleapis.com VIP,請為下列目的地新增防火牆規則:
- IPv4 流量:
199.36.153.4/30 - IPv6 流量:
2600:2d00:0002:1000::/64
如要允許來自 Google Cloud 的流量連線至允許直接連線的 API 和服務,請為下列目的地新增防火牆規則:
- IPv4 流量:
34.126.0.0/18 - IPv6 流量:
2001:4860:8040::/42
如要進一步瞭解如何使用虛擬私有雲防火牆規則,請參閱 Cloud Next Generation Firewall 說明文件中的「使用虛擬私有雲防火牆規則」。
設定地端部署防火牆規則,允許來自地端部署主機的流量傳向 restricted.googleapis.com IP 位址範圍。
- IPv4 流量:
199.36.153.4/30 - IPv6 流量:
2600:2d00:0002:1000::/64
地端部署網路不支援直接連線至 Google API 和服務。
設定 DNS
您可以為虛擬私有雲網路使用代管私人區域。Cloud DNS 私人 DNS 區域可讓您託管可透過已授權虛擬私有雲網路存取的 DNS 區域。如要設定從特定地端部署名稱伺服器轉送,可以使用 restricted.googleapis.com IP 位址範圍。接著,您可以為 googleapis.com 建立私人區域,並使用 DNS A 記錄對應 restricted.googleapis.com,以及為每個 *.googleapis.com 名稱設定適當的 CNAME 記錄。詳情請參閱「管理區域」。
如要進行地端部署存取,可以設定 Cloud DNS 傳入轉送政策,讓地端部署名稱伺服器查詢 Cloud DNS 代管私人區域。您也可以設定地端部署名稱伺服器,例如使用 BIND 的伺服器:
使用 Cloud DNS 設定 DNS
如要為虛擬私有雲網路中的 VM 執行個體、地端部署網路中的主機或兩者啟用 DNS 解析,請使用 Cloud DNS。如果您使用 Shared VPC,請參閱 Cloud DNS 說明文件中的「私人區域和 Shared VPC」。此外,如果您使用 Shared VPC,建議您將 Shared VPC 網路主機專案,納入與連線至該網路的專案相同的 service perimeter。
使用私人區域設定 Cloud DNS
您可以使用私人區域設定 Cloud DNS:
建立虛擬私有雲網路的代管私人區域。
gcloud dns managed-zones create ZONE_NAME \ --visibility=private \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \ --description=DESCRIPTION \ --dns-name=googleapis.com
更改下列內容:
ZONE_NAME:您要建立的區域名稱。例如,vpc。後續步驟都會使用這個名稱。PROJECT_ID:託管虛擬私有雲網路的專案 ID。NETWORK_NAME:虛擬私有雲網路的名稱。DESCRIPTION:代管區域的選用人類可讀說明。
啟動交易。
gcloud dns record-sets transaction start --zone=ZONE_NAME
將
ZONE_NAME替換為您在第一個步驟中建立的區域名稱。新增 DNS 記錄。
gcloud dns record-sets transaction add --name=*.googleapis.com. \ --type=CNAME restricted.googleapis.com. \ --zone=ZONE_NAME \ --ttl=300
將
ZONE_NAME替換為您在第一個步驟中建立的區域名稱。gcloud dns record-sets transaction add --name=restricted.googleapis.com. \ --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \ --zone=ZONE_NAME \ --ttl=300
將
ZONE_NAME替換為您在第一個步驟中建立的區域名稱。如要為
restricted.googleapis.com設定 IPv6 位址,請一併建立下列記錄集:gcloud dns record-sets transaction add --name=restricted.googleapis.com. \ --type=AAAA 2600:2d00:0002:1000:: \ --zone=ZONE_NAME \ --ttl=300
執行交易。
gcloud dns record-sets transaction execute --zone=ZONE_NAME
將
ZONE_NAME替換為您在第一個步驟中建立的區域名稱。選用。如要讓地端部署主機連上受限制 VIP,請完成下列步驟:
建立 DNS 政策並啟用傳入 DNS 轉送,讓虛擬私有雲網路的名稱解析服務可供地端部署網路中的系統使用。
gcloud dns policies create POLICY_NAME \ --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME \ --enable-inbound-forwarding \ --description=DESCRIPTION
更改下列內容:
POLICY_NAME:要建立的政策名稱。例如,apipolicy。PROJECT_ID:託管虛擬私有雲網路的專案 ID。NETWORK_NAME:虛擬私有雲網路的名稱。DESCRIPTION:代管區域的選用人類可讀說明。
在地端部署網路中,將地端部署 DNS 指向 Cloud DNS 轉送站 IP 位址。如要找出轉送站 IP 位址,請使用
compute addresses list指令:gcloud compute addresses list --filter='name ~ ^dns-forwarding.*' \ --format='csv[no-heading](address, subnetwork)'
使用 BIND 設定 DNS
如果您針對 DNS 解析使用 BIND,可以為其進行設定,將 Google API 要求解析為受限制 Google API。請使用下列 BIND 設定範例,該範例利用回應政策區域 (RPZ) 達成此行為:
在
/etc/bind/named.conf中新增下列程式碼:include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local";
在
/etc/bind/named.conf.options中新增下列程式碼:options { directory "/var/cache/bind"; dnssec-validation no; auth-nxdomain no; # conform to RFC 1035 listen-on-v6 { any; }; listen-on { any; }; response-policy { zone "googleapis.zone"; }; allow-query { any;}; };在
/etc/bind/named.conf.local中新增下列程式碼:include "/etc/bind/named.conf.default-zones";
zone "googleapis.zone" { type master; file "/etc/bind/db.googleapis.zone"; allow-query {none;}; };
在
/etc/bind/db.googleapis.zone中新增下列程式碼:$TTL 1H @ SOA LOCALHOST. noreply.localhost(1 1h 15m 30d 2h) NS LOCALHOST.*.googleapis.com CNAME restricted.googleapis.com. restricted.googleapis.com CNAME rpz-passthru.
在特殊情況下設定 DNS
如需在特殊情況下設定 DNS,請注意下列事項:
- 使用 Dataflow 時,系統不支援自訂 BIND。如要在搭配使用 Dataflow 和 VPC Service Controls 時自訂 DNS 解析,請使用 Cloud DNS 私人區域,而非自訂 BIND 伺服器。如要使用自己的地端部署 DNS 解析,請考慮使用Google Cloud DNS 轉送方法。
例如,如果您使用 Google Kubernetes Engine (GKE),可能也需要為
gcr.io設定 DNS。詳情請參閱「為 GKE 私人叢集設定 Container Registry」。