您可以將靜態外部 IP 位址指派給虛擬機器 (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 進行驗證:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
如要建立及更新執行個體:
Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1
) -
執行個體的
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
權限 - 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中設定
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
權限
- 專案的
一次只有一個資源可使用靜態外部 IP 位址。
IP 位址分配給資源後,就無法判斷是靜態還是臨時位址。您可以將 IP 位址與保留給該專案的靜態外部 IP 位址清單進行比較。如要查看專案可用的靜態外部 IP 位址清單,請使用
gcloud compute addresses list
子指令。每個 VM 都可以有多個網路介面,且每個介面可根據堆疊類型指派下列 IP 位址:
- 僅限 IPv4 的介面:
- 內部 IPv4 位址 (必要)
- 外部 IPv4 位址 (選用)
- 雙重堆疊 (IPv4 和 IPv6) 介面:
- 內部 IPv4 位址 (必要)
- 外部 IPv4 位址 (選用)
/96
IPv6 位址範圍 (內部或外部,但不能同時使用兩者) (必要)
- 僅限 IPv6 的介面 (搶先版):
/96
IPv6 位址範圍 (內部或外部,但不能同時使用兩者) (必要)
- 僅限 IPv4 的介面:
如果 VM 只有 IPv6 網路介面,您就無法取消指派或變更外部 IPv6 位址。不過,您可以將資源的臨時外部 IP 位址升級為靜態外部 IP 位址,這樣即使資源遭到刪除,您仍可保留該位址。
您無法變更靜態 IP 位址的名稱。
前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。
按一下「外部 IP 位址」。
如要列出所有 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_
如要列出區域性 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前往 Google Cloud 控制台的「Create an instance」(建立執行個體) 頁面。
如要將靜態外部 IP 位址指派給執行個體,請按照下列步驟操作:
在導覽選單中,按一下「網路」。
在「網路介面」部分,使用下列選項指定執行個體所需的網路介面:
如要新增網路介面,請按一下「新增網路介面」。然後在「Network」(網路) 清單中選取網路。
如要刪除網路介面,請按一下
「刪除」。
選取下列選項之一:
如要指派靜態外部 IPv4 位址,請按照下列步驟操作:
- 展開網路介面。
- 從「External IPv4 address」(外部 IPv4 位址) 清單中選取 IP 位址。
如要指派靜態外部 IPv6 位址,請按照下列步驟操作:
- 展開包含具有外部 IPv6 位址範圍的子網路的網路介面。
- 從「子網路」清單中選取該子網路。
- 針對「IP 堆疊類型」,選取「IPv4 和 IPv6 (雙重堆疊)」或「IPv6 (單一堆疊)」。
- 從「External IPv6 address」(外部 IPv6 位址) 清單中,選取新保留的外部 IPv6 位址。或者,選取「保留靜態外部 IPv6 位址」,並保留新的靜態外部 IPv6 位址。
- 在「Network Service Tier」(網路服務級別) 部分,選取「Premium」(進階級)。
如要完成修改網路介面,請按一下「Done」(完成)。
繼續執行個體建立程序。
如要指派靜態外部 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_ONLY
IPV6_ADDRESS
:要指派給執行個體的 IPv6 位址。請使用保留的靜態外部 IP 位址,而不是位址名稱。
如要將靜態外部 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_TYPE
IPV4_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_TYPE
IPV6_ADDRESS
:要指派給執行個體的 IPv6 位址。請使用預留的靜態外部 IP 位址,而不是位址名稱。STACK_TYPE
:執行個體的堆疊類型,可為IPV4_IPV6
(雙重堆疊) 或IPV6_ONLY
SUBNET
:包含外部 IPv6 位址的子網路SOURCE_IMAGE
:公開映像檔的特定版本,例如"projects/debian-cloud/global/images/debian-10-buster-v20200309"
,或是映像檔系列,例如"projects/debian-cloud/global/images/family/debian-10"
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下要指派外部 IP 的執行個體名稱。系統隨即會顯示「執行個體詳細資料」頁面。
在「執行個體詳細資料」頁面上,完成下列步驟:
- 按一下 [編輯]。
- 展開「網路介面」。
- 選取要指派給執行個體的外部 IP 位址。
如果執行個體僅支援 IPv4,且您想指派 IPv6 位址,請先將堆疊類型變更為雙重堆疊。
- 在「外部 IPv4 位址」部分,選取「臨時」或靜態外部 IPv4 位址。
- 在「外部 IPv6 位址」部分,選取「臨時」或靜態外部 IPv6 位址。
- 按一下 [完成]。
按一下 [儲存]。
選用:保留靜態外部 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
:執行個體的區域。
如取消指派靜態外部 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 位址指派給新的執行個體。
- 您只能將此清單限制套用至執行個體。
- 您無法回溯套用限制。在您啟用政策前即具有外部 IP 位址的所有執行個體,將保留其外部 IP 位址。
- 此限制只能在同一項政策接受
allowedList
或是deniedList
,但無法兩者同時適用。 - 執行個體的生命週期與完整性必須由具有必要權限的您或管理員來管理和維護。此限制只能驗證執行個體的 URI,但無法防止許可清單中的執行個體遭到修改、刪除或重新建立。
- 前往「Organizational Policies」(機構政策) 頁面。
- 如有必要,請從專案下拉式選單中選取所需機構。
- 按一下「為 VM 執行個體定義允許的外部 IP」。
- 按一下 [Edit] (編輯) 即可編輯外部 IP 政策。如果您無法存取編輯工具,則表示您沒有適當的權限。
選取「自訂」,即可為特定執行個體設定機構政策。
選取所需的「政策強制執行」和「政策類型」。
在「政策值」部分,選取「自訂」。
輸入執行個體的 URI。URI 必須採用下列格式:
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
按一下「新政策值」,然後視需要輸入執行個體的 URI。
按一下「儲存」即可套用限制。
PROJECT_ID
:這項要求的專案 ID,例如example-project
。請注意,這與設定機構政策不同,後者需要機構數字 ID。ZONE
:執行個體的區域INSTANCE_NAME
:執行個體名稱PROJECT_ID
:這項要求的專案 ID,例如example-project
。請注意,這與設定機構政策不同,後者需要機構數字 ID。ZONE
:執行個體的區域。INSTANCE_NAME
:執行個體的名稱。如有這項限制,請避免使用
deniedValues
清單。如果您在deniedValues
清單中定義值,這表示只有在deniedValues
清單中的執行個體禁止使用外部 IP 位址。如果您想要精確控制哪些執行個體可擁有外部 IP 位址,這可能會是安全疑慮。如果想從allowedValues
清單移除某些執行個體,請更新現有政策以從allowedList
移除執行個體,而不是從較低階層把執行個體納入deniedValues
清單。如果您想對大部分的資源階層設定政策但要豁免某些專案,請透過指定
restoreDefault
物件使用setOrgPolicy
方法還原預設政策,允許專案中的所有執行個體與外部 IP 位址建立關聯。專案當前的政策不會受到預設設定影響。將機構政策與 IAM 角色一起使用,可完整控管您的環境。這項政策僅適用於執行個體,但如果您要進一步管理和限制網路設備的外部 IP 位址,可以將
compute.networkAdmin
角色授予適合的對象。在已啟用政策的機構或專案中,Compute Engine 上運行的任何服務和產品都必須符合此機構政策。具體來說,Google Kubernetes Engine、Dataflow、Dataproc 以及 Cloud SQL 等服務都會受到此政策影響。如果這會造成問題,Google 建議您在未套用機構政策的不同專案中設定其他服務和產品,並在需要時使用共用 VPC。
前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。
在清單中找到該地址,並查看「類型」欄中的 IP 位址類型。
前往 Google Cloud 控制台的「IP addresses」(IP 位址) 頁面。
按一下「外部 IP 位址」。
選取要取消指派的靜態 IP 位址。
按一下「查看動作」
,然後選取「重新指派給其他資源」選項。在「Attach to」(附加至) 下拉式清單中,選取「None」(無)。
按一下 [確定]。
使用
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 位址資源的區域。
如為 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" ... }] }
- 進一步瞭解 IP 位址。
- 進一步瞭解網路和防火牆。
- 瞭解如何使用內部 DNS 處理 Compute Engine 執行個體。
- 查看虛擬私有雲定價。
Terraform
如要在本機開發環境中使用本頁的 Terraform 範例,請安裝並初始化 gcloud CLI,然後使用使用者憑證設定應用程式預設憑證。
詳情請參閱 Set up authentication for a local development environment。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
必要的角色
如要取得設定及管理靜態 IP 位址所需的權限,請要求管理員將專案的下列 IAM 角色授予您:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色具備設定及管理靜態 IP 位址所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要設定及管理靜態 IP 位址,您必須具備下列權限:
限制
附註:網路介面可接收來自多個轉送規則的流量,這些規則可能適用於其他外部 IP 位址。數量不限的外部 IP 位址可透過這些轉送規則參照網路介面,但每個網路介面只能指派一組外部 IPv4 位址和一組外部
/96
IPv6 位址範圍。如要進一步瞭解負載平衡和轉送規則,請參閱負載平衡文件。
查看可用的靜態外部 IP 位址
如要列出為專案保留的靜態外部 IP 位址,請按照下列步驟操作。
主控台
gcloud
使用
gcloud compute addresses list
指令:API
Go
Java
Python
設定靜態外部 IP 位址
下列各節說明如何為執行個體設定靜態外部 IP 位址。
建立使用靜態外部 IP 位址的執行個體
保留靜態外部 IP 位址後,即可將其指派給執行個體。
主控台
gcloud
您可以建立執行個體,並指派已保留的靜態地區外部 IP 位址。
Terraform
您可以使用
google_compute_instance
資源指派外部 IP 位址。REST
Go
Java
Python
變更或指派現有執行個體的外部 IP 位址
您可以變更臨時或靜態外部 IP 位址,或將這類位址指派至現有的 IPv4 專用或雙重堆疊執行個體。僅支援 IPv6 的執行個體不支援此程序。
運算執行個體可以有多個介面。單一堆疊介面可以有一個外部 IP 位址。雙重堆疊介面可有一個外部 IPv4 位址和一個外部 IPv6 位址。如果執行個體已擁有外部 IP 位址,則必須先移除該位址。然後,您可以將新的外部 IP 位址指派給現有執行個體。
主控台
gcloud
REST
如要變更執行個體的外部 IPv4 或 IPv6 位址,請為該執行個體新增存取設定。
Go
Java
Python
限制特定執行個體的外部 IP 位址
針對某些工作負載,您可能會有包括安全性和網路限制的必要條件。舉例來說,您可能會限制外部 IP 位址,只允許特定運算執行個體使用。這個選項有助於防止資料遭竊或維持網路隔離。透過行使機構政策,您可以使用限制,將外部 IP 位址限制為特定執行個體,以便管理機構或專案中執行個體的外部 IP 位址使用情形。
控制執行個體上的外部 IP 位址的限制如下:
constraints/compute.vmExternalIpAccess
如要使用該限制,請指定具有
allowedList
的政策 (其中執行個體可擁有外部 IP 位址)。如果未指定政策,則會允許所有執行個體使用所有外部 IP 位址。政策生效後,只有allowedValues
清單中的執行個體可以獲派外部 IP 位址 (臨時或靜態),而機構或專案中未在政策中明確定義的其他 Compute Engine 執行個體,則禁止使用外部 IP 位址。系統會使用執行個體的 URI 在允許和拒絕清單中識別執行個體:
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
限制外部 IP 位址的規格
限制外部 IP 位址所需的權限
要在專案或機構層級設定限制,您必須已獲授予機構的
orgpolicy.policyAdmin
角色。在機構層級設定政策限制
主控台
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" ] } }
更改下列內容:
此外,您可以指定
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 定義限制。您指定的allowedValue
清單中的執行個體則允許擁有外部 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" ] } }
更改下列內容:
此外,您可以指定
deniedValues
清單,明確指出您想要禁止擁有外部 IP 位址的執行個體。如果執行個體未列在清單中,則暗示該執行個體可擁有外部 IP 位址。您可以選擇指定allowedValues
或deniedValues
,但不能兩者同時指定。接著,使用要求傳入檔案:
gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=example-project
REST
使用
setOrgPolicy
API 定義限制。您指定的allowedValue
清單中的執行個體則允許擁有外部 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 位址。一般來說,如果您停止或刪除資源,系統會釋出臨時 IP 位址。
如要判斷位址是靜態還是臨時,請按照下列步驟操作:
取消指派靜態外部 IP 位址
取消指派 IP 位址會將其從資源中刪除,但會留下保留的 IP 位址。取消指派 IP 位址後,您可以將該 IP 位址重新指派給其他資源。這項程序適用於雙重堆疊執行個體,但不適用於僅支援 IPv6 的執行個體。
您也可以刪除執行個體,取消指派 IPv4 或 IPv6 位址。
主控台
gcloud
既然您的靜態外部 IP 位址已可存取,您可以選擇將其指派給另一個執行個體。
REST
如要取消指派靜態外部 IPv4 或 IPv6 位址,請按照下列步驟操作:
Java
Python
釋出靜態外部 IP 位址
如果不再需要靜態外部 IPv4 或 IPv6 位址,可以刪除 IP 位址資源來釋出 IP 位址。刪除執行個體不會自動釋出靜態外部 IP 位址。因此,您不再需要靜態外部 IP 位址時,請以手動方式釋出。
如要釋出靜態外部 IP 位址,請參閱 VPC 說明文件中的「釋出靜態外部 IP 位址」一文。
後續步驟
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-09 (世界標準時間)。
-