您可以為虛擬機器 (VM) 和裸機執行個體指派靜態外部 IP 位址。您也可以變更、列出及釋出執行個體的靜態 IP 位址。如要預留靜態外部 IP 位址,請參閱「預留靜態外部 IP 位址」。
外部 IP 位址可以是靜態或暫時。如果執行個體需要不會變更的固定外部 IP 位址,請執行下列操作:
- 取得靜態外部 IP 位址。您可以預留新的外部 IP 位址,或升級現有的暫時性外部 IP 位址。
- 將預留 IP 位址指派給現有執行個體,或在建立新執行個體時指派。
如果您需要在內部 Compute Engine 網路上使用靜態 IP 位址,請改為參閱「保留靜態內部 IP 位址」。
如要瞭解如何預留靜態外部 IP 位址或建立全域外部 IP 位址,請參閱「預留靜態外部 IP 位址」。
事前準備
- 瞭解 IP 位址。
- 請參閱靜態外部 IP 位址的配額與限制。
- 請參閱外部 IP 位址定價。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上範例的預計用途分頁:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
- 設定預設區域和可用區。
-
安裝 Google Cloud CLI。
-
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用的是外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
Terraform
如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。
詳情請參閱「 設定本機開發環境的驗證機制」。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
必要的角色
如要取得設定及管理靜態 IP 位址所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
如要建立及更新執行個體:Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1) -
如要設定組織的政策限制:組織政策管理員 (
roles/orgpolicy.policyAdmin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備設定及管理靜態 IP 位址所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要設定及管理靜態 IP 位址,必須具備下列權限:
-
compute.instances.update -
compute.instances.updateNetworkInterface -
compute.instances.addAccessConfig -
compute.instances.deleteAccessConfig -
compute.networks.list -
compute.subnetworks.use -
compute.subnetworks.list -
如要建立執行個體,請按照下列步驟操作:
- 專案的
compute.instances.create權限 - 如要使用自訂映像檔建立 VM,請在映像檔上按一下
compute.images.useReadOnly - 如要使用快照建立 VM,請按一下快照上的
compute.snapshots.useReadOnly - 如要使用執行個體範本建立 VM,請按一下執行個體範本上的
compute.instanceTemplates.useReadOnly - 如要將舊版網路指派給 VM,請在專案中執行
compute.networks.use - 如要為 VM 指定靜態 IP 位址,請在專案中執行下列步驟:
compute.addresses.use - 如要在使用舊版網路時,為 VM 指派外部 IP 位址,請在專案中執行
compute.networks.useExternalIp - 如要為 VM 指定子網路,請在專案或所選子網路上執行
compute.subnetworks.use - 使用虛擬私有雲網路時,將外部 IP 位址指派給 VM:
compute.subnetworks.useExternalIp在專案或所選子網路上 - 如要為 VM 設定 VM 執行個體中繼資料,請在專案中執行下列指令:
compute.instances.setMetadata - 如要為 VM 設定標記,請在 VM 上執行下列步驟:
compute.instances.setTags - 如要為 VM 設定標籤,請在 VM 上執行下列指令:
compute.instances.setLabels - 如要設定 VM 使用的服務帳戶,請在 VM 上執行
compute.instances.setServiceAccount - 為 VM 建立新磁碟:在專案中按一下
compute.disks.create - 如要以唯讀或讀寫模式掛接現有磁碟,請按一下磁碟上的
compute.disks.use - 如要以唯讀模式連結現有磁碟,請按一下磁碟上的
compute.disks.useReadOnly
- 專案的
-
如要編輯組織政策,請按照下列步驟操作:
-
orgpolicy.policy.get -
orgpolicy.policies.create -
orgpolicy.policies.delete -
orgpolicy.policies.update
-
限制
一次只有一個資源可使用靜態外部 IP 位址。
每個運算執行個體可以有多個網路介面,且每個介面可根據其堆疊類型指派下列 IP 位址:
- 僅限 IPv4 的介面:
- 內部 IPv4 位址 (必要)
- 外部 IPv4 位址 (選用)
- 雙重堆疊 (IPv4 和 IPv6) 介面:
- 內部 IPv4 位址 (必要)
- 外部 IPv4 位址 (選用)
/96IPv6 位址範圍,內部或外部皆可,但不能同時提供兩者 (必要)
- 僅限 IPv6 的介面:
/96IPv6 位址範圍,內部或外部皆可,但不能同時提供兩者 (必要)
- 僅限 IPv4 的介面:
如果運算執行個體使用僅限 IPv6 的網路介面,您就無法取消指派或變更外部 IPv6 位址。不過,您可以將資源的臨時外部 IP 位址升級為靜態外部 IP 位址,這樣即使刪除資源,系統仍會保留該位址。
靜態 IP 位址的名稱無法變更。
附註:網路介面可接收來自多個轉送規則的流量,這些規則可能適用於其他外部 IP 位址。透過這些轉送規則,任意數量的外部 IP 位址都可以參照網路介面,但每個網路介面只能指派一個外部 IPv4 位址和一個外部 /96 IPv6 位址範圍。
如要進一步瞭解負載平衡和轉送規則,請參閱負載平衡文件。
查看可用的靜態外部 IP 位址
如要列出您為專案保留的靜態外部 IP 位址,請按照下列步驟操作。
控制台
前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。
按一下「外部 IP 位址」。
gcloud
使用 gcloud compute addresses list 指令:
如要列出所有 IP 位址,請使用下列指令:
gcloud compute addresses list
如要列出所有全域 IP 位址,請使用下列指令:
gcloud compute addresses list --global
如要列出指定區域中的所有區域性 IP 位址,請使用下列指令:
gcloud compute addresses list \ --regions=REGION將
REGION替換為要列出位址的區域。如要列出多個區域的位址,請指定以半形逗號分隔的區域名稱:gcloud compute addresses list \ --regions=REGION1,REGION2,..REGION_n_
API
如要列出區域性 IPv4 或 IPv6 位址,請呼叫
addresses.list方法:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
更改下列內容:
PROJECT_ID:這項要求的專案 IDREGION:這項要求的區域名稱
如要列出所有區域中的所有位址,請呼叫
addresses.aggregatedList方法:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses
如要列出全域 IPv4 或 IPv6 位址,請呼叫
globalAddresses.list方法:GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
更改下列內容:
PROJECT_ID:這項要求的專案 ID
Go
Java
Python
設定靜態外部 IP 位址
以下各節說明如何為執行個體設定靜態外部 IP 位址。
建立使用靜態外部 IP 位址的執行個體
預留靜態外部 IP 位址後,即可將其指派給執行個體。
控制台
前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。
如要為執行個體指派靜態外部 IP 位址,請執行下列操作:
點選導覽選單中的「Networking」(網路)。
在「網路介面」部分,使用下列選項指定執行個體所需的網路介面:
如要新增網路介面,請按一下「新增網路介面」。然後在「Network」(網路) 清單中選取網路。
如要刪除網路介面,請按一下「刪除」
選取下列選項之一:
如要指派靜態外部 IPv4 位址,請按照下列步驟操作:
- 展開網路介面。
- 從「外部 IPv4 位址」清單中選取 IP 位址。
如要指派靜態外部 IPv6 位址,請執行下列操作:
- 展開包含具有外部 IPv6 位址範圍的子網路的網路介面。
- 從「子網路」清單中選取該子網路。
- 在「IP stack type」(IP 堆疊類型),選取「IPv4 and IPv6 (dual-stack)」(IPv4 和 IPv6 (雙重堆疊)) 或「IPv6 (single-stack)」(IPv6 (單一堆疊))。
- 從「外部 IPv6 位址」清單中,選取新保留的外部 IPv6 位址。或者,選取「Reserve static external IPv6 address」(保留靜態外部 IPv6 位址),並保留新的靜態外部 IPv6 位址。
- 將「網路服務級別」設為「進階」。
如要完成修改網路介面,請按一下「完成」。
繼續執行個體建立程序。
gcloud
您可以建立執行個體,並指派已保留的靜態區域外部 IP 位址。
如要指派靜態外部 IPv4 位址,請按照下列步驟操作:
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --address=IPV4_ADDRESS如要指派靜態外部 IPv6 位址,請按照下列步驟操作:
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --subnet=SUBNET \ --stack-type=STACK_TYPE \ --external-ipv6-address=IPV6_ADDRESS \ --external-ipv6-prefix-length=96 \ --ipv6-network-tier=PREMIUM更改下列內容:
INSTANCE_NAME:運算執行個體的名稱。ZONE:要建立執行個體的可用區IPV4_ADDRESS:要指派給執行個體的 IPv4 位址。請使用預留的靜態外部 IP 位址,而非位址名稱。SUBNET:包含外部 IPv6 位址的子網路STACK_TYPE:執行個體的堆疊類型,可以是IPV4_IPV6(雙重堆疊) 或IPV6_ONLYIPV6_ADDRESS:要指派給執行個體的 IPv6 位址。請使用預留的靜態外部 IP 位址,而非位址名稱。
Terraform
您可以使用 google_compute_instance 資源指派外部 IP 位址。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
REST
如要將靜態外部 IPv4 位址指派給新的運算執行個體,請按照下列步驟操作:
在建立新執行個體的要求中,明確提供
networkInterfaces[].accessConfigs[].natIP屬性和要使用的外部 IPv4 位址,例如:{ "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "networkInterfaces": [{ "accessConfigs": [{ "type": "ONE_TO_ONE_NAT", "name": "External NAT", "natIP": "IPV4_ADDRESS" }], "network": "global/networks/default" }], "disks": [{ "autoDelete": "true", "boot": "true", "type": "PERSISTENT", "initializeParams": { "sourceImage": "SOURCE_IMAGE" } }] }更改下列內容:
INSTANCE_NAME:運算執行個體的名稱ZONE:要建立執行個體的可用區MACHINE_TYPE:選用。建立執行個體時要使用的機型資源完整或部分網址,格式如下:zones/ZONE/machineTypes/MACHINE_TYPEIPV4_ADDRESS:要指派給執行個體的 IPv4 位址。請使用預留的靜態外部 IP 位址,而非位址名稱。SOURCE_IMAGE:公開映像檔的特定版本,例如projects/debian-cloud/global/images/debian-10-buster-v20200309,或映像檔系列,例如projects/debian-cloud/global/images/family/debian-10
如要將靜態外部 IPv6 位址指派給新執行個體,請執行下列操作:
在建立新執行個體的要求中,明確提供
networkInterfaces[].ipv6AccessConfigs[].externalIpv6屬性和要使用的外部 IPv6 位址,例如:{ "name": "INSTANCE_NAME", "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "networkInterfaces": [{ "ipv6AccessConfigs": [{ "externalIpv6": "IPV6_ADDRESS", "externalIpv6PrefixLength": 96, "name": "external-ipv6-access-config", "networkTier": "PREMIUM", "type": "DIRECT_IPV6" }], "stackType": "STACK_TYPE", "subnetwork":"SUBNETWORK" }], "disks": [{ "autoDelete": "true", "boot": "true", "mode": "READ_WRITE", "type": "PERSISTENT", "initializeParams": { "sourceImage": "SOURCE_IMAGE" }, }], }更改下列內容:
INSTANCE_NAME:運算執行個體的名稱ZONE:要建立執行個體的可用區MACHINE_TYPE:選用。建立執行個體時要使用的機型資源完整或部分網址,格式如下:zones/ZONE/machineTypes/MACHINE_TYPEIPV6_ADDRESS:要指派給執行個體的 IPv6 位址。請使用預留的靜態外部 IP 位址,而非位址名稱。STACK_TYPE:執行個體的堆疊類型,可以是IPV4_IPV6(雙重堆疊) 或IPV6_ONLYSUBNET:包含外部 IPv6 位址的子網路SOURCE_IMAGE:公開映像檔的特定版本,例如"projects/debian-cloud/global/images/debian-10-buster-v20200309",或是映像檔系列,例如"projects/debian-cloud/global/images/family/debian-10"
Go
Java
Python
變更外部 IP 位址,或將該位址指派給現有執行個體
您可以變更或指派臨時或靜態外部 IP 位址,給現有的僅限 IPv4 或雙堆疊執行個體。僅支援 IPv6 的執行個體不支援這項程序。
運算執行個體可以有多個介面。單一堆疊介面可以有一個外部 IP 位址。雙重堆疊介面可以有一個外部 IPv4 位址和一個外部 IPv6 位址。如果執行個體已有外部 IP 位址,請先移除該位址。然後將新的外部 IP 位址指派給現有執行個體。
控制台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下要指派外部 IP 的執行個體名稱。「Instance details」(執行個體詳細資料) 頁面隨即顯示。
在「Instance details」(執行個體詳細資料) 頁面中,完成下列步驟:
- 按一下 [編輯]。
- 展開「網路介面」。
- 選取要指派給執行個體的外部 IP 位址。如果執行個體僅支援 IPv4,且您想指派 IPv6 位址,請先將堆疊類型變更為雙重堆疊。
- 在「External IPv4 address」(外部 IPv4 位址) 部分,選取「Ephemeral」(暫時) 或靜態外部 IPv4 位址。
- 在「外部 IPv6 位址」部分,選取「暫時 (自動)」、「暫時 (自訂)」或靜態外部 IPv6 位址。
- 按一下「完成」。
按一下 [儲存]。
gcloud
選用:保留靜態外部 IP 位址。
如要指派靜態外部 IP 位址,請務必保留位址,並確認該位址未供其他資源使用。如有需要,請按照操作說明預留新的靜態外部 IP 位址,或取消指派靜態外部 IP 位址。
如要使用臨時外部 IP 位址,可以略過這個步驟,Compute Engine 會隨機指派臨時外部 IP 位址。
如「取消指派靜態外部 IP 位址」一文所述,移除所有現有的 IP 位址指派。
指派新的外部 IP 位址。
如要指派 IPv4 位址,請使用
instances add-access-config子指令:注意:請勿將IP_ADDRESS替換為靜態 IP 位址名稱。請務必使用實際 IP 位址。gcloud compute instances add-access-config INSTANCE_NAME \ --access-config-name="ACCESS_CONFIG_NAME" --address=IP_ADDRESS
更改下列內容:
INSTANCE_NAME:執行個體的名稱。ACCESS_CONFIG_NAME:呼叫這項存取設定的名稱。請確實將完整名稱加入引號內。IP_ADDRESS:要新增的 IP 位址。
如要讓 Compute Engine 指派臨時外部 IP 位址,而非使用靜態外部 IP 位址,請省略
--address IP_ADDRESS屬性:gcloud compute instances add-access-config INSTANCE_NAME \ --access-config-name="ACCESS_CONFIG_NAME"
如要將執行個體變更為雙重堆疊,並指派 IPv6 位址,請使用
instance network-interfaces update子指令:gcloud compute instances network-interfaces update INSTANCE_NAME \ --network-interface=NIC \ --ipv6-network-tier=PREMIUM \ --stack-type=STACK_TYPE \ --external-ipv6-address=IPV6_ADDRESS \ --external-ipv6-prefix-length=96 \ --zone=ZONE
更改下列內容:
INSTANCE_NAME:執行個體的名稱。NIC:網路介面的名稱。STACK_TYPE:執行個體的堆疊類型,必須是IPV4_IPV6。您無法將堆疊類型變更為 IPV6_ONLY。IPV6_ADDRESS:要指派給執行個體的 IPv6 位址。指定/96範圍中的第一個 IPv6 位址。ZONE:執行個體的可用區。
REST
如要變更執行個體的外部 IPv4 或 IPv6 位址,請為該執行個體新增存取權設定。
如「取消指派靜態外部 IP 位址」一文所述,移除所有現有的 IP 位址指派。
對
instances.deleteAccessConfig方法提出POST要求,刪除現有的存取權設定。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/deleteAccessConfig
向
instances.addAccessConfig方法發出POST要求,為執行個體的網路介面新增存取權設定。如果是 IPv4 位址,請提出下列要求:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/addAccessConfig { "natIP": "IPV4_ADDRESS", "name": "ACCESS_CONFIG_NAME" }如果是 IPv6 位址,請將網路介面的
stackType更新為IPV4_IPV6,並更新networkInterfaces[].ipv6AccessConfigs[].externalIpv6屬性和要使用的外部 IPv6 位址。詳情請參閱「將靜態外部 IP 位址指派給新執行個體」。
Go
Java
Python
將外部 IP 位址限制為特定執行個體
針對某些工作負載,您可能會有包括安全性和網路限制的必要條件。舉例來說,您可能想限制外部 IP 位址,只允許特定 Compute Engine 執行個體使用。這個選項有助於防止資料竊取或維持網路隔離。
透過行使組織政策,您可以使用限制,將外部 IP 位址限制為特定執行個體,以便控管機構或專案中執行個體的外部 IP 位址使用情形。
控管執行個體外部 IP 位址的限制條件如下:
constraints/compute.vmExternalIpAccess
如未指定外部 IP 位址的組織政策,所有執行個體都會允許使用外部 IP 位址。如要使用這項限制,請指定組織政策,並採用下列其中一種設定:
- 指定空白
allowedValues清單,禁止所有運算執行個體擁有任何外部 IP 位址。 - 指定可擁有外部 IP 位址的運算執行個體
allowedValues清單。- 只有列在
allowedValues清單中的運算執行個體,才能獲派外部 IP 位址 (暫時或靜態)。 - 組織或專案中未在政策中明確定義的所有其他運算執行個體,都不得有外部 IP 位址。
- 只有列在
- 或者,您也可以指定
deniedValues清單,僅防止指定的運算執行個體擁有外部 IP 位址。請謹慎使用這種做法,尤其是當組織政策限制套用至專案時,會覆寫套用至上層資料夾或機構的限制。因為系統只會禁止deniedValues清單中指定的運算執行個體使用外部 IP 位址,所以專案中新建立的運算執行個體都可以使用外部 IP 位址。
在允許和拒絕清單中,執行個體是透過 URI 識別:
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
限制外部 IP 位址的規格
- 您只能將
compute.vmExternalIpAccess清單限制 套用至運算執行個體。 - 您無法回溯套用限制。在您啟用政策之前,所有具有外部 IP 位址的運算執行個體都會保留其外部 IP 位址。
- 這項限制接受
allowedValues或deniedValues清單,但同一政策中不能同時包含兩者。 - 您或具備必要權限的管理員可管理及維護運算執行個體的生命週期和完整性。這項限制只會驗證執行個體的 URI,不會防止允許清單中的執行個體遭到變更、刪除或重新建立。
限制外部 IP 位址的指南
請按照下列規範,允許或拒絕運算執行個體的外部 IP 位址:
如果您的安全性目標是只允許建立部分具有外部 IP 位址的運算執行個體,但禁止建立其他具有外部 IP 位址的執行個體,請在使用
constraints/compute.vmExternalIpAccess組織政策限制中的allowedValues清單或deniedValues清單時,留意下列事項:如要從
constraints/compute.vmExternalIpAccess組織政策限制中排除資源階層中的特定專案,請使用setOrgPolicy方法並指定restoreDefault。使用 Shared VPC 時,將
constraints/compute.vmExternalIpAccess組織政策限制套用至 Shared VPC 主專案,只會影響實際位於主專案中的運算執行個體。除非您對每個服務專案套用constraints/compute.vmExternalIpAccess組織政策限制,否則服務專案中的執行個體不會受到影響。搭配使用組織政策和 IAM 角色,進一步控管環境。這項政策僅適用於運算執行個體。如要進一步控管及限制網路裝置的外部 IP 位址,請只將
compute.networkAdmin角色授予適當人員。
搭配代管服務使用外部 IP 位址組織政策
constraints/compute.vmExternalIpAccess 組織政策限制會套用至新建立的運算執行個體,前提是該執行個體位於組織政策限制範圍內的專案。受影響的執行個體包括 Google Kubernetes Engine 節點、Dataflow 執行個體和 Managed Service for Apache Spark 執行個體,前提是這些執行個體是在您的專案中建立,且專案在該組織政策限制的範圍內。
使用私人服務連線的執行個體代管服務,是由位於服務生產者專案中的運算執行個體提供,這些專案與您的專案分開。代管服務的運算執行個體在服務生產者網路中具有網路介面,該網路會與您的虛擬私有雲網路對等互連。如果 constraints/compute.vmExternalIpAccess 組織政策限制適用於您的專案 (包含虛擬私有雲網路的專案),則組織政策限制不會對專案外部代管服務的運算執行個體產生任何影響。
部分代管服務提供類似功能的專屬機構組織政策限制,例如 Cloud SQL 的 constraints/sql.restrictPublicIp。
限制外部 IP 位址所需的權限
要在專案或機構層級設定限制,您必須已獲授予機構的 orgpolicy.policyAdmin 角色。
在機構層級設定政策限制
控制台
- 前往「機構政策」頁面。
- 如有需要,請從專案下拉式選單中選取所需機構。
在「Filter」(篩選器) 選單中,輸入文字
Define allowed。「政策」表格中應該會顯示兩列。
在表格的「名稱」欄中,按一下政策名稱,選取「為 VM 執行個體定義允許的外部 IP」政策。
在政策詳細資料頁面中,按一下「管理政策」,即可編輯外部 IP 政策。如果無法存取「Manage policy」(管理政策) 連結,代表您沒有適當的權限。
按一下「Manage Policy」(管理政策)。
「編輯政策」頁面隨即開啟。
在「適用於」部分,選取「覆寫上層政策」。
在「政策強制執行」部分,選擇「與上層合併」。
點選「新增規則」。
在「政策值」部分,選取「自訂」。
在「Policy type」(政策類型) ,選取組織政策應接受或拒絕指定值。
在「Custom value」(自訂值) 欄位中,輸入執行個體的 URI。 URI 必須採用下列格式:
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
如要新增更多運算執行個體,請按一下「新增值」,然後輸入其他執行個體的 URI。
如要強制執行這項政策,請按一下「設定政策」。
gcloud
如要設定外部 IP 存取權的限制,請先取得機構 ID。您可以執行 organizations list 指令,並在回應中尋找數字 ID,找出組織 ID:
gcloud organizations list
gcloud CLI 會以下列格式傳回組織清單:
DISPLAY_NAME ID example-organization1 29252605212 example-organization2 1234567890
使用 gcloud resource-manager org-policies set-policy 指令設定政策。您必須以 JSON 檔案形式提供政策。
建立下列格式的 JSON 檔案:
{
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
"allowedValues": [
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME",
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME",
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME"
]
}
}
更改下列內容:
PROJECT_ID:這項要求的專案 ID,例如example-project。請注意,這與設定組織政策不同,後者需要機構的數字 ID。ZONE:執行個體的可用區INSTANCE_NAME:執行個體的名稱
或者,您也可以指定 deniedValues 清單,明確指出要禁止哪些執行個體擁有外部 IP 位址。不在清單上的執行個體會隱含允許擁有外部 IP 位址。您可以選擇指定 allowedValues 或 deniedValues,但不能兩者同時指定。
然後將檔案連同要求一併傳送:
gcloud resource-manager org-policies set-policy MY_POLICY.JSON --organization=ORGANIZATION_ID
將 ORGANIZATION_ID 替換為組織的數字 ID。
如不希望任何執行個體擁有外部 IP 存取權,可以將 allValues 設為 DENY 來設定政策:
{
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
"allValues": "DENY"
}
}
REST
使用 setOrgPolicy() API 定義限制。您在 allowedValues 清單中指定的執行個體可以擁有外部 IP 位址。或者,您也可以指定 deniedValues 清單,明確禁止執行個體擁有外部 IP 位址。凡是不在清單中的執行個體,都會隱含允許擁有外部 IP 位址。你只能指定 allowedValues 或 deniedValues,但不能同時指定兩者。
舉例來說,以下是將 compute.vmExternalIpAccess 限制套用至機構的請求,允許機構內特定專案的執行個體擁有外部 IP 位址:
POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:setOrgPolicy
其中 ORGANIZATION_ID 是機構的數字 ID。
現在,請在要求主體中提供這項限制的政策:
{
"policy": {
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
"allowedValues": [
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME",
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME",
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME"
]
}
}
}如不希望任何執行個體擁有外部 IP 存取權,可以將 allValues 設為 DENY 來設定政策:
{
"policy": {
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
"allValues": "DENY"
}
}
}在專案層級設定政策
在專案層級設定的政策會覆寫機構層級的政策。舉例來說,如果組織層級在 allowedValues 清單中包含 example-vm-1,但專案層級的政策在 deniedValues 清單中包含相同的執行個體,則該執行個體不得擁有外部 IP 位址。
控制台
請按照「在機構層級設定政策限制」一文所述的相同程序操作,但請從專案選取器選擇專案,而非機構。
gcloud
使用 gcloud resource-manager org-policies set-policy 指令設定政策。您必須以 JSON 檔案形式提供政策。建立格式如下的 JSON 檔案:
{
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
"allowedValues": [
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME"
]
}
}更改下列內容:
PROJECT_ID:這項要求的專案 ID,例如example-project。請注意,這與設定組織政策不同,後者需要組織數字 ID。ZONE:執行個體的可用區。INSTANCE_NAME:執行個體的名稱。
或者,您也可以指定 deniedValues 清單,明確禁止清單中的執行個體擁有外部 IP 位址。凡是未列於清單中的執行個體,都會隱含允許擁有外部 IP 位址。你只能指定 allowedValues 或 deniedValues,但不能同時指定兩者。
然後將檔案連同要求一併傳送:
gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=example-project
REST
使用 setOrgPolicy API 定義限制。您指定的 allowedValues 清單中的執行個體可以有外部 IP 位址。或者,您也可以指定 deniedValues 清單,明確指出要禁止哪些執行個體擁有外部 IP 位址。凡是未列於清單中的執行個體,一律允許使用外部 IP 位址。您只能指定 allowedValues 或 deniedValues,不能同時指定兩者。
舉例來說,以下是針對專案設定 compute.vmExternalIpAccess 限制的要求,允許特定執行個體擁有外部 IP 位址:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setOrgPolicy
將 PROJECT_ID 替換為這項要求的專案 ID。
要求主體包含這項限制的政策:
{
"policy": {
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
"allowedValues": [
"projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME"
]
}
}
}
管理靜態外部 IP 位址
以下各節說明如何管理執行個體的靜態外部 IP 位址。
判斷外部 IP 位址是暫時還是靜態
在多數情況下,靜態和臨時外部 IP 位址的行為和顯示方式都相同。不過,使用靜態外部 IP 位址時,即使刪除並重新建立資源,您仍可為同一資源使用相同的 IP 位址。一般來說,如果您停止或刪除資源,系統就會釋出臨時 IP 位址。
如要判斷位址是靜態還是臨時,請按照下列步驟操作:
前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。
在清單中找出地址,然後查看「類型」欄,瞭解 IP 位址類型。
取消指派靜態外部 IP 位址
取消指派 IP 位址會將其從資源中移除,但會保留 IP 位址。取消指派 IP 位址後,您可以將 IP 位址重新指派給其他資源。這項程序適用於雙重堆疊執行個體,但不適用於僅支援 IPv6 的執行個體。
您也可以刪除執行個體,取消指派 IPv4 或 IPv6 位址。
控制台
前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。
按一下「外部 IP 位址」。
選取要取消指派的靜態 IP 位址。
按一下「查看動作」,然後選取「重新指派給其他資源」選項。
在「Attach to」(附加至) 下拉式選單中,選取「None」(無)。
按一下 [確定]。
gcloud
使用
gcloud compute addresses list指令,檢查是否使用靜態 IP 位址:gcloud compute addresses list
輸出結果會與下列內容相似:
NAME REGION ADDRESS STATUS example-address-ipv4 REGION 198.51.100.1 RESERVED example-address-new-ipv4 REGION 203.0.113.1 IN_USE example-address-ipv6 REGION 2001:db8:1:1:1:1:1:1 RESERVED example-address-new-ipv6 REGION 2001:db8:4:4:4:4:4:4 IN_USE
- 如果 IP 位址未使用,狀態會是
RESERVED。 - 如果 IP 位址正在使用中,狀態會是
IN_USE。
- 如果 IP 位址未使用,狀態會是
擷取使用 IP 位址的執行個體名稱:
gcloud compute addresses describe ADDRESS_NAME \ --region=REGION
更改下列內容:
ADDRESS_NAME:IPv6 位址資源的名稱。REGION:IPv6 位址資源的區域。
輸出結果會與下列內容相似:
address: IP_ADDRESS addressType: EXTERNAL ... region: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/addresses/ADDRESS_NAME status: IN_USE subnetwork: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET users: - https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances/INSTANCE_NAME
users欄位會顯示使用 IP 位址的執行個體名稱。從執行個體取消指派 IP 位址。
如要取消指派 IPv4 位址,請刪除執行個體的存取權設定檔:
取得要刪除的存取設定名稱。如要取得名稱,請使用
gcloud compute instances describe指令。將INSTANCE_NAME替換為執行個體名稱。gcloud compute instances describe INSTANCE_NAME
存取設定將透過以下格式顯示:
networkInterfaces: - accessConfigs: - kind: compute#accessConfig name: external-nat natIP: 203.0.113.1 type: ONE_TO_ONE_NAT使用
gcloud compute instances delete-access-config指令刪除存取設定:gcloud compute instances delete-access-config INSTANCE_NAME \ --access-config-name="ACCESS_CONFIG_NAME"
更改下列內容:
INSTANCE_NAME:執行個體的名稱。ACCESS_CONFIG_NAME:要刪除的存取權設定名稱。請務必在引號之間加入全名。
如要取消指派 IPv6 位址範圍,請使用
instance network-interfaces update指令:gcloud compute instances network-interfaces update INSTANCE_NAME \ --network-interface=nic0 \ --stack-type=IPV4_ONLY \ --zone=ZONE
更改下列內容:
INSTANCE_NAME:使用 IP 位址的執行個體名稱。ZONE:執行個體的可用區。
確認您的靜態外部 IP 位址現可存取,且標示為
RESERVED,而非IN_USE。gcloud compute addresses list \ --filter="ADDRESS_NAME AND region=REGION"
更改下列內容:
ADDRESS_NAME:IP 位址資源的名稱。REGION:IP 位址資源的區域。
既然您的靜態外部 IP 位址已可存取,您可以選擇將其指派給另一個執行個體。
REST
如要取消指派靜態外部 IPv4 或 IPv6 位址,請按照下列步驟操作:
如果是 IPv4 位址,請刪除附加至使用該位址的執行個體的存取權設定。
如要查看執行個體的存取設定詳細資料,請對
instances.get方法發出GET要求。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
向
instances.deleteAccessConfig方法提出POST要求,刪除現有的存取權設定。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/deleteAccessConfig
更改下列內容:
PROJECT_ID:這項要求的專案 IDZONE:執行個體所在的可用區INSTANCE_NAME:執行個體的名稱
如果是 IPv6 位址,請更新附加 IPv6 位址的執行個體網路介面堆疊類型。
向
instances.updateNetworkInterface方法發出PATCH要求。在要求主體中,將
stackType欄位的值更新為IPV4_ONLY。例如:
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/updateNetworkInterface { "networkInterfaces": [{ ... "stackType" : "IPV4_ONLY" ... }] }
Java
Python
釋出靜態外部 IP 位址
如果不再需要靜態外部 IPv4 或 IPv6 位址,可以刪除 IP 位址資源,釋出 IP 位址。刪除執行個體不會自動釋出靜態外部 IP 位址。不再需要靜態外部 IP 位址時,請務必手動釋出。
如要釋出靜態外部 IP 位址,請參閱虛擬私有雲說明文件中的「釋出靜態外部 IP 位址」。
後續步驟
- 進一步瞭解 IP 位址。
- 進一步瞭解網路和防火牆。
- 瞭解如何使用內部 DNS 定位 Compute Engine 執行個體。
- 查看虛擬私有雲定價。