您可以為虛擬機器 (VM) 和裸機執行個體指派靜態外部 IP 位址。您也可以變更、列出及釋出執行個體的靜態 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.
Terraform
To use the Terraform samples on this page in a local development environment, install and initialize the gcloud CLI, and then set up Application Default Credentials with your user credentials.
- 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.
For more information, see Set up authentication for a local development environment.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the 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.
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
必要的角色
如要取得設定及管理靜態 IP 位址所需的權限,請要求管理員為您授予專案的下列 IAM 角色:
-
如要建立及更新執行個體:
Compute 執行個體管理員 (v1) (
roles/compute.instanceAdmin.v1
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色包含設定及管理靜態 IP 位址所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要設定及管理靜態 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
- 如要在使用舊版網路時將外部 IP 位址指派給 VM,請在專案中使用
compute.networks.useExternalIp
- 如要為 VM 指定子網路,請在專案或所選子網路中使用
compute.subnetworks.use
- 如要在使用虛擬私有雲網路時將外部 IP 位址指派給 VM,請在專案或所選子網路上設定
compute.subnetworks.useExternalIp
- 如何為專案中的 VM:
compute.instances.setMetadata
設定 VM 執行個體中繼資料 - 如何為 VM 設定標記:
compute.instances.setTags
- 如何為 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 介面:
您無法取消指派或變更僅限 IPv6 網路介面的 VM 外部 IPv6 位址。不過,您可以將資源的臨時外部 IP 位址升級為靜態外部 IP 位址,這樣即使資源遭到刪除,您仍可保留該位址。
您無法變更靜態 IP 位址的名稱。
附註:網路介面可接收來自多個轉送規則的流量,這些規則可能適用於其他外部 IP 位址。數量不限的外部 IP 位址可透過這些轉送規則參照網路介面,但每個網路介面只能指派一個外部 IPv4 位址和一個外部 /96
IPv6 位址範圍。
如要進一步瞭解負載平衡和轉送規則,請參閱負載平衡文件。
查看可用的靜態外部 IP 位址
如要列出為專案保留的靜態外部 IP 位址,請按照下列步驟操作。
主控台
前往 Google Cloud 控制台的「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 堆疊類型」,選取「IPv4 和 IPv6 (雙重堆疊)」或「IPv6 (單一堆疊)」。
- 從「External IPv6 address」清單中選取新保留的外部 IPv6 位址。或者,您也可以選取「保留靜態外部 IPv6 位址」,然後保留新的靜態外部 IPv6 位址。
- 在「Network Service Tier」(網路服務級別) 部分,選取「Premium」(進階級)。
如要完成修改網路介面,請按一下「Done」。
繼續執行個體建立程序。
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_ONLY
IPV6_ADDRESS
:要指派給執行個體的 IPv6 位址。請使用預約的靜態外部 IP 位址,而不是位址名稱。
Terraform
您可以使用 google_compute_instance
資源指派外部 IP 位址。
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_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"
Go
Java
Python
變更或指派外部 IP 位址至現有執行個體
您可以變更臨時或靜態外部 IP 位址,或將這類位址指派至現有的 IPv4 或雙堆疊執行個體。僅支援 IPv6 執行個體。
運算執行個體可擁有多個介面。單層介面可以有一個外部 IP 位址。雙重堆疊介面可擁有一個外部 IPv4 位址和一個外部 IPv6 位址。如果執行個體已擁有外部 IP 位址,則必須先移除該位址。接著,您可以將新的外部 IP 位址指派給現有執行個體。
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下您要指派外部 IP 的執行個體名稱。系統隨即會顯示「Instance details」頁面。
在「執行個體詳細資料」頁面上,完成下列步驟:
- 按一下 [編輯]。
- 展開「Network interfaces」(網路介面)。
- 選取要指派給執行個體的必要外部 IP 位址。如果執行個體僅支援 IPv4,且您想要指派 IPv6 位址,則必須先將堆疊類型變更為雙重堆疊。
- 在「外部 IPv4 位址」部分,選取「臨時」或靜態外部 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 位址,讓只有特定運算執行個體可以使用這些位址。這個選項有助於防範資料外洩或維持網路隔離。您可以使用機構政策,將外部 IP 位址限制在特定執行個體,並設定限制來控制機構或專案中執行個體的外部 IP 位址使用情形。
控制執行個體外部 IP 位址的限制如下:
constraints/compute.vmExternalIpAccess
如要使用該限制,請指定具有 allowedList
的政策 (其中 VM 執行個體可擁有外部 IP 位址)。如果未指定政策,則會允許所有執行個體使用所有外部 IP 位址。政策生效後,只有 allowedValues
清單中列出的執行個體才能指派外部 IP 位址 (臨時或靜態),而組織或專案中未在政策中明確定義的其他 Compute Engine 執行個體,則禁止使用外部 IP 位址。
系統會使用執行個體的 URI 在允許和拒絕清單中識別執行個體:
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
限制外部 IP 位址的規格
- 您只能將此清單限制套用至執行個體。
- 您無法回溯套用限制。在啟用政策前即具有外部 IP 位址的所有執行個體,都會保留外部 IP 位址。
- 此限制只能在同一項政策接受
allowedList
或是deniedList
,但無法兩者同時適用。 - 執行個體的生命週期與完整性必須由具有必要權限的您或管理員來管理和維護。此限制只能驗證執行個體的 URI,但無法防止許可清單中的執行個體遭到修改、刪除或重新建立。
限制外部 IP 位址所需的權限
要在專案或機構層級設定限制,您必須已獲授予機構的 orgpolicy.policyAdmin
角色。
在機構層級設定政策限制
主控台
- 前往「機構政策」頁面。
- 如有需要,請從專案下拉式選單中選取所需機構。
- 按一下「Define allowed external IPs for VM instances」。
- 按一下 [Edit] (編輯) 即可編輯外部 IP 政策。如果您無法存取「編輯」工具,則表示您沒有適當的權限。
選取「自訂」,即可針對特定執行個體設定機構政策。
選取必要的「政策強制執行」和「政策類型」。
在「政策值」部分,選取「自訂」。
輸入執行個體的 URI。URI 必須採用下列格式:
projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME
按一下「New policy value」,然後視需要輸入執行個體的 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 定義限制。您指定的 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" ] } }
更改下列內容:
PROJECT_ID
:這項要求的專案 ID,例如example-project
。請注意,這與設定機構政策不同,後者需要機構數字 ID。ZONE
:執行個體的區域。INSTANCE_NAME
:執行個體的名稱。
此外,您可以指定 deniedValues
清單,明確指出您想要禁止擁有外部 IP 位址的 VM 執行個體。如果執行個體未列在清單中,則暗示該執行個體可擁有外部 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 位址的最佳做法
如有這項限制,請避免使用
deniedValues
清單。如果您在deniedValues
中定義值,這表示只有在deniedValues
清單中的執行個體禁止使用外部 IP 位址。如果您想要精確控制哪些執行個體可擁有外部 IP 位址,這可能會是安全疑慮。如果您想從allowedValues
清單移除某些執行個體,請更新現有政策以從allowedList
移除執行個體,而不是從較低階層把執行個體納入deniedValues
清單。如果您想對大部分的資源階層設定政策,但要豁免某些專案,請使用
setOrgPolicy
方法還原預設政策,方法是指定restoreDefault
物件,允許專案中的所有執行個體與外部 IP 位址建立關聯。預設設定不會影響專案目前的政策。將機構政策與身分與存取權管理角色一起使用,可完整控制您的環境。此政策僅適用於執行個體,但如果您要進一步管理和限制網路設備的外部 IP 位址,可以將
compute.networkAdmin
角色授予適合的對象。在已啟用政策的機構或專案中,Compute Engine 上運行的任何服務和產品都必須符合此機構政策。具體來說,Google Kubernetes Engine、Dataflow、Dataproc 以及 Cloud SQL 等服務都會受到此政策影響。如果這會造成問題,Google 建議您在未套用機構政策的不同專案中設定其他服務和產品,並在需要時使用共用虛擬私有雲。
管理靜態外部 IP 位址
以下各節說明如何管理執行個體的靜態外部 IP 位址。
判斷內部 IP 位址是否為臨時或靜態
在大多數情況下,靜態和臨時內部 IP 位址的行為和顯示方式都相同。不過,使用靜態內部 IP 位址後,即使您刪除並重新建立資源,也能為相同的資源一律使用同一個 IP 位址。一般來說,如果您停止或刪除資源,系統會釋出臨時 IP 位址。
如要判斷位址是靜態或臨時,請按照下列步驟操作:
前往 Google Cloud 控制台的「IP 位址」頁面。
在清單中找到該地址,然後查看「Type」欄中的 IP 位址類型。
取消指派靜態外部 IP 位址
取消指派 IP 位址會將其從資源中刪除,但會保留 IP 位址。取消指派 IP 位址後,您可以將 IP 位址重新指派給其他資源。這項程序適用於雙重堆疊執行個體,但不適用於僅支援 IPv6 的執行個體。
您也可以刪除執行個體來取消指派 IPv4 或 IPv6 位址。
主控台
前往 Google Cloud 控制台的「IP 位址」頁面。
按一下「外部 IP 位址」。
選取要取消指派的靜態 IP 位址。
按一下「查看動作」
,然後選取「重新指派至其他資源」選項。在「Attach to」下拉式清單中,選取「None」。
按一下 [確定]。
gcloud
如要確認靜態 IP 位址是否處於「使用中」狀態,請使用
gcloud compute addresses list
指令: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 位址,請參閱 VPC 說明文件中的「釋出靜態外部 IP 位址」。
後續步驟
- 進一步瞭解 IP 位址。
- 進一步瞭解網路和防火牆。
- 瞭解如何使用內部 DNS 處理 Compute Engine 執行個體。
- 查看 虛擬私有雲定價。