保留靜態外部 IP 位址

如果執行個體需要不變的固定外部 IP 位址,您可以透過下列其中一個選項為該執行個體取得靜態外部 IP 位址:

如果您的 Compute Engine 內部網路需要靜態 IP 位址,請改為參閱保留靜態內部位址相關說明。

Compute Engine 的所有 VM 執行個體均擁有多個網路介面,每個介面可同時擁有內部和外部 IP 位址。轉送規則可擁有外部 IP 位址 (為達到外部負載平衡),或是內部 IP 位址 (為達到內部負載平衡)。如要進一步瞭解 IP 位址,請參閱 IP 位址文件。

事前準備

保留新的靜態外部 IP 位址

靜態外部 IP 位址是保留給專案的外部 IP 位址,在您決定釋出位址之前,皆會予以保留。如果您有一組客戶或使用者用來存取服務的 IP 位址,您可保留該組 IP 位址,只供您的專案使用。您也可以把臨時的外部 IP 位址推送到靜態外部 IP 位址。

您可以保留以下兩種外部 IP 位址類型:

gcloud 指令列工具中或是透過 API 皆可保留靜態外部 IP 位址。在保留位址後,您可在執行個體建立作業中指派位址,或是指派給現有執行個體

限制

  • 同時間只有一個資源可以使用靜態外部 IP 位址。

  • 除非將 IP 位址與保留給該專案的靜態外部 IP 位址清單進行比較,否則無法判斷分配給資源後的 IP 位址是靜態還是臨時的位址。如要查看專案可用的靜態外部 IP 位址清單,請使用 addresses list 子指令。

  • 每個 VM 執行個體可擁有多個網路介面,但每個介面只能使用一組臨時或是靜態外部 IP 位址。

附註:網路介面可接收來自多個轉送規則的流量,這些規則可能適用於其他外部 IP 位址。數量不限的外部 IP 位址可透過這些轉送規則參照網路介面,但每個網路介面只能使用一組外部 IP 位址 (用來將封包數轉譯至網路介面內部 IP 位址)。

如要進一步瞭解負載平衡和轉送規則,請參閱負載平衡文件。

主控台

  1. 前往 GCP 主控台的保留靜態位址頁面。

    前往保留靜態位址頁面

  2. 選擇新位址的名稱。
  3. 指定為 IPv4IPv6 位址。IPv6 位址只限通用位址且只適用於 HTTP(S)、SSL Proxy 和 TCP Proxy 負載平衡器。
  4. 將此 IP 位址指定為地區或通用位址。如果您要為執行個體網路負載平衡器保留靜態 IP 位址,請選擇 [Regional] (區域)。如果您是為 HTTP(S)、SSL Proxy 或 TCP Proxy 負載平衡器保留靜態 IP 位址,請選擇 [Global] (通用)。
  5. 如果這是地區 IP 位址,請選擇要在其中建立位址的地區。
  6. (選用) 選取要連結 IP 的資源。
  7. 按一下 [Reserve] (保留) 來保留 IP。

gcloud

如要透過 gcloud compute 保留新的靜態外部 IP 位址,請使用 addresses create 子指令並指定您想保留的是地區或是通用 IP 位址:

gcloud compute addresses create [ADDRESS_NAME] \
    [--region [REGION] | --global ] \
    [--ip-version [IPV4 | IPV6]]

其中:

  • [ADDRESS_NAME] 是您要稱呼此位址的名稱。
  • 如要指定地區 IP 位址,請針對要求提供想要的 [REGION]。這應該是與 IP 位址所連結資源相同的地區。
  • 如果這是通用 IP 位址,請指定 --global 標記。如果您需要 IPv6 位址,請同時指定 --global--ip-version IPV6 標記。 IPv6 位址只限通用位址且只適用於 HTTP(S)、SSL Proxy 和 TCP Proxy 負載平衡器。

API

如要向 API 直接要求地區 IPv4 位址,請對以下 URI 發出 POST 要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses

要求內容應包含以下程式碼:

{
  name: "[ADDRESS_NAME]"
}

其中:

  • [ADDRESS_NAME] 是您要稱呼此位址的名稱。
  • [REGION] 是這項要求中的地區名稱。
  • [PROJECT_ID] 是這項要求的專案 ID。

針對全域靜態 IPv4 位址,請提出要求至:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses

要求內容應包含以下程式碼:

{
  name: "[ADDRESS_NAME]"
}

針對全域靜態 IPv6 位址,請提出要求至:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses

要求內容應包含以下程式碼:

{
  "name": "[ADDRESS_NAME]",
  "ipVersion": "IPV6"
}

將靜態外部 IP 位址指派給新的 VM 執行個體

當您建立 VM 執行個體時,系統會自動指派一組臨時外部 IP 位址。如果您不想要臨時的外部 IP 位址,可改為明確指派靜態外部 IP 位址給執行個體。

主控台

  1. 在 GCP 主控台中,前往「VM Instances」(VM 執行個體) 頁面。

    前往 VM 執行個體頁面

  2. 按一下 [建立執行個體]
  3. 在「Create a new instance」 (建立新執行個體) 頁面上,填入您要為執行個體 設定的屬性。
  4. 展開 [Management, security, disks, networking, sole tenancy] (管理、安全性、磁碟、網路、單獨租用) 區段。
  5. 按一下 [Networking] (網路)。
  6. 在「Network interfaces」(網路介面) 下方,按一下預設網路介面即可加以編輯。
  7. 在「External IP」(外部 IP) 區段下方的下拉式選單中,選取您保留的靜態外部 IP。
  8. 按一下 [Done] (完成) 即可將預設網路介面修改完畢。
  9. 按一下 [Create] (建立) 來建立執行個體。

gcloud

如要指派靜態外部 IP 位址,請在執行個體建立期間使用 --address 標記,並提供靜態外部 IP 位址:

gcloud compute instances create [INSTANCE_NAME] --address [IP_ADDRESS]

其中:

  • [INSTANCE_NAME] 是執行個體的名稱。
  • [IP_ADDRESS] 是要指派給執行個體的 IP 位址。請使用 IP 位址,而不是位址名稱。

API

在您建立新執行個體的要求中,請明確提供 networkInterfaces[].accessConfigs[].natIP 屬性和您想使用的外部 IP。例如:

{
  "name": "[INSTANCE_NAME]",
  "machineType": "zones/[ZONE]/machineTypes/[MACHINE_TYPE]",
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT",
      "natIP": "[IP_ADDRESS]"
     }],
    "network": "global/networks/default"
  }],
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/v20150818"
     }
   }]
 }

將外部 IP 位址變更或指派至現有執行個體

您可以透過修改執行個體的存取設定,將外部 IP 位址 (臨時或靜態) 變更或指派至現有執行個體。

執行個體可具備多個介面,而每個介面可擁有一組外部 IP 位址。如果執行個體已擁有外部 IP 位址,則必須先刪除舊的存取設定,再刪除該位址。接下來,您可以新增包含全新外部 IP 位址的新存取設定。

主控台

  1. 前往 GCP 主控台的 VM 執行個體頁面。

    前往 VM 執行個體頁面

  2. 點擊您要指派外部 IP 的執行個體名稱。系統隨即會顯示執行個體詳細資料頁面。
  3. 在執行個體詳細資料頁面上,完成以下步驟:

    1. 按一下 [Edit] (編輯)。
    2. 在「Network interfaces」(網路介面) 下方,按一下編輯按鈕。

      主控台的網路介面區段的螢幕擷圖

    3. 在「External IP」(外部 IP) 底下,選取一組要指派給執行個體的臨時或靜態外部 IP 位址。

      內部和外部 IP 選項的螢幕擷圖

    4. 按一下 [完成]

    5. 按一下 [儲存]

gcloud

  1. (選用) 保留靜態外部 IP 位址。

    如要指派靜態外部 IP 位址,則必須保留一組位址,並確保其他資源目前並未使用該位址。您可以視需要按照說明操作,選擇保留新的靜態外部 IP 位址或是取消指派靜態外部 IP 位址

    如果您打算使用臨時外部 IP 位址,則可以跳過此步驟,Compute Engine 會隨機指派一組臨時的外部 IP 位址。

  2. 刪除既有的存取設定。

    執行個體只能有一個存取設定。在您將新的存取設定指派給執行個體之前,請提出 gcloud compute instances describe 要求,確認執行個體是否已有存取設定:

    gcloud compute instances describe [INSTANCE_NAME]
    

    如果原本已有存取設定,則存取設定將透過以下格式顯示:

    networkInterfaces:
    - accessConfigs:
      - kind: compute#accessConfig
        name: external-nat
        natIP: 130.211.181.55
        type: ONE_TO_ONE_NAT
    

    在您新增存取設定名稱之前,必須使用 instances delete-access-config 子指令刪除現有存取設定:

    gcloud compute instances delete-access-config [INSTANCE_NAME] \
        --access-config-name "[ACCESS_CONFIG_NAME]"
    

    其中:

    • [INSTANCE_NAME] 是執行個體的名稱。
    • [ACCESS_CONFIG_NAME] 是要刪除的存取設定。請確實將完整名稱加入引號內。
  3. 新增外部 IP 位址。

    使用 instances add-access-config 子指令,新增外部 IP 位址:

    附註:請勿將 [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]"
    

推送臨時外部 IP 位址

如果您的執行個體擁有臨時的外部 IP 位址,而且您想將該 IP 永久指派給您的專案,請將該臨時外部 IP 位址推送到靜態外部 IP 位址。透過推送來保留臨時外部 IP 位址並不會導致 GCP 捨棄傳送至執行個體的封包。這種做法會直接或透過負載平衡器來納入傳送至執行個體的封包。

主控台

  1. 前往 GCP 主控台的外部 IP 位址頁面。

    前往「External IP addresses」(外部 IP 位址) 頁面

  2. 在「Type」(類型) 一欄,將您要推送的 IP 位址的位址類型變更為 [Static] (靜態)。
  3. 提供新的靜態 IP 位址名稱,然後按一下 [Reserve] (保留)。

gcloud

如要將臨時外部 IP 位址推送到靜態外部 IP 位址,請在建立新位址時利用 --addresses 標記提供臨時外部 IP 位址。您可使用 region 標記推送臨時地區 IP 位址,或使用 global 標記推送臨時通用 IP 位址。

gcloud compute addresses create [ADDRESS_NAME] \
  --addresses [IP_ADDRESS] \
  [--region [REGION] | --global]

其中:

  • [ADDRESS_NAME] 是您要稱呼此位址的名稱。
  • [IP_ADDRESS] 是您要推送的 IP 位址。
  • [REGION] 是地區 IP 位址所屬的地區。

API

如要推送臨時地區 IP 位址,請對以下 URI 發出 PUT 要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses

要求內容應包含以下程式碼:

{
  name: "[ADDRESS_NAME]",
  address: "[IP_ADDRESS]"
}

其中:

  • [ADDRESS_NAME] 是您要稱呼此位址的名稱。
  • [IP_ADDRESS] 是您要推送的 IP 位址。
  • [REGION] 是 IP 位址的所屬地區。
  • [PROJECT_ID] 是要求的專案 ID。

如要推送臨時通用 IP 位址,請對以下 URI 發出 PUT 要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses

要求內容應包含以下程式碼:

{
  name: "[ADDRESS_NAME]",
  address: "[IP_ADDRESS]"
}

其中:

  • [ADDRESS_NAME] 是您要稱呼此位址的名稱。
  • [IP_ADDRESS] 是您要推送的 IP 位址。
  • [PROJECT_ID] 是要求的專案 ID。

即使將外部 IP 位址推送為靜態外部 IP 位址,該外部 IP 位址仍會連結到該執行個體。如果您要將新推送的靜態外部 IP 位址指派給其他資源,必須從現有執行個體取消指派靜態外部 IP 位址

列出靜態外部 IP 位址

如要列出為專案保留的靜態外部 IP 位址,請執行 addresses list 或是向 API 提出 GET 要求。

主控台

前往 GCP 主控台的外部 IP 位址頁面,瀏覽您專案的 IP 位址清單。

前往外部 IP 位址頁面

gcloud

使用 gcloud 指令列工具:

gcloud compute addresses list

API

如要向 API 直接提出要求,請以空白要求內容對以下 URI 發出 GET 要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses

其中:

  • [REGION] 是這項要求中的地區名稱。
  • [PROJECT_ID] 是這項要求的專案 ID。

如要列出所有地區的所有位址,請對以下 URI 發出要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/aggregated/addresses

說明靜態外部 IP 位址

如要取得靜態外部 IP 位址資訊,您可以使用 gcloud compute addresses describe 指令並提供位址名稱,也能向 API 發出 GET 要求。

主控台

  1. 前往 GCP 主控台的外部 IP 位址頁面。

    前往外部 IP 位址頁面

  2. 按一下您要進一步瞭解的 IP 位址。

gcloud

如何使用 gcloud compute addresses describe

gcloud compute addresses describe [ADDRESS_NAME]

其中 [ADDRESS_NAME] 是您想要說明的外部 IP 位址名稱。

API

如要向 API 直接提出要求,請以空白要求內容對以下 URI 發出 GET 要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses/[ADDRESS_NAME]

其中:

  • [ADDRESS_NAME] 是 IP 位址的名稱。
  • [REGION] 是這項要求中的地區名稱。
  • [PROJECT_ID] 是這項要求的專案 ID。

取消指派靜態外部 IP 位址

如要取消指派靜態外部 IP 位址,只要刪除執行個體或刪除使用該位址的執行個體的存取設定即可。取消指派靜態外部 IP 位址可讓您將靜態外部 IP 位址重新指派給其他資源。

取消指派 IP 位址會將其從資源中刪除,但會留下為專案保留的 IP 位址。您可以執行 gcloud compute addresses list 要求,分辨靜態外部 IP 位址是否為使用中:

gcloud compute addresses list

回應格式如下:

NAME                 REGION      ADDRESS            STATUS
example-address      [REGION]    130.211.160.207    RESERVED
example-address-new  [REGION]    130.211.114.137    IN_USE

在此範例中,example-address-new 目前有人在使用。

如要刪除執行個體的存取設定並取消指派靜態外部 IP 位址,請按照下列步驟操作:

  1. 取得要刪除的存取設定名稱。如要取得名稱,請執行 gcloud compute instances describe 要求:

    gcloud compute instances describe [INSTANCE_NAME]
    

    其中的 [INSTANCE_NAME] 是執行個體的名稱。

    存取設定將透過以下格式顯示:

    networkInterfaces:
    - accessConfigs:
     - kind: compute#accessConfig
       name: external-nat
       natIP: 130.211.181.55
       type: ONE_TO_ONE_NAT
    
  2. 刪除存取設定。

    使用 instances delete-access-config 子指令:

    gcloud compute instances delete-access-config [INSTANCE_NAME] \
        --access-config-name "[ACCESS_CONFIG_NAME]"
    

    其中:

    • [INSTANCE_NAME] 是執行個體的名稱。
    • [ACCESS_CONFIG_NAME] 是要刪除的存取設定名稱。請確實將完整名稱加入引號內。
  3. 確認您的靜態外部 IP 位址現可存取,且標示為 RESERVED,而非 IN_USE

    gcloud compute addresses list
    

    例如:

    NAME                 REGION      ADDRESS            STATUS
    example-address      [REGION]    130.211.160.207    RESERVED
    example-address-new  [REGION]    130.211.114.137    RESERVED
    

既然您的靜態外部 IP 位址已可存取,您可以選擇將其指派給另一個執行個體

釋出靜態外部 IP 位址

如果您不再需要某組靜態外部 IP 位址,則可以釋出該位址,讓該位址返回一般 IP 集區,讓給其他 Compute Engine 使用者。

主控台

  1. 前往 GCP 主控台的外部 IP 位址頁面。

    前往外部 IP 位址頁面

  2. 找出您要釋出的 IP 位址,接著勾選旁邊的方塊。
  3. 點選 [釋出 IP 位址]。

gcloud

使用 gcloud 指令列工具:

gcloud compute addresses delete [ADDRESS_NAME]

其中 [ADDRESS_NAME] 是 IP 位址的名稱。

API

如要向 API 直接提出要求,請以空白要求內容對以下 URI 發出 DELETE 要求:

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/[REGION]/addresses/[ADDRESS_NAME]

其中:

  • [ADDRESS_NAME] 是 IP 位址的名稱。
  • [REGION] 是這項要求中的地區名稱。
  • [PROJECT_ID] 是這項要求的專案 ID。

在建立執行個體時,選擇內部 IP 位址

您可以在建立執行個體時,視需要指派內部 IP 位址給執行個體。IP 位址必須是執行個體子網路的有效 IP 位址,並且該位址必須尚未使用。除非您刪除執行個體 (這會將 IP 位址釋出回集區),否則 IP 位址仍會連結到該執行個體。如果您停止執行個體並重新啟動,則執行個體會保留同樣的內部 IP 位址。

如果您不指定 IP 位址,Compute Engine 會自動從子網路中分配一組位址。您可以使用 gcloud 指令列工具或 API,指定內部 IP 位址。

gcloud

gcloud 中執行:

gcloud compute instances create [INSTANCE_NAME]
     --private-network-ip [IP_ADDRESS]

其中:

  • [INSTANCE_NAME] 是您想要建立的執行個體的名稱。
  • [IP_ADDRESS] 是您要指派的 IP 位址。

如果您使用自訂子網路模式網路,則必須使用 --subnet [SUBNET] 參數另外指定子網路。

API

如要使用靜態內部 IP 位址建立執行個體,請使用 Compute Engine API。按照一般步驟提出要求以建立新執行個體,但必須為 networkInterfaces[].networkIP 屬性明確提供您要使用的內部 IP。例如:

{
  "name": "[INSTANCE_NAME]",
  "machineType": "zones/us-central1-f/machineTypes/f1-micro",
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT",
     }],
    "network": "global/networks/default",
    "networkIP": "[IP_ADDRESS]"
  }],
  "disks": [{
     "autoDelete": "true",
     "boot": "true",
     "type": "PERSISTENT",
     "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/v20150818"
     }
   }]
 }

其中:

  • [INSTANCE_NAME] 是執行個體的名稱。
  • [IP_ADDRESS] 是要指派給執行個體的 IP 位址。

如果您刪除具有指定 IP 位址的執行個體,則該位址將返回到未分配的位址集區。假如您在執行個體的壽命期間過後仍需要保留內部 IP 位址,可以保留靜態內部 IP 位址

停用 VM 執行個體的外部 IP 存取功能

針對某些工作負載,您可能會有包括安全性和網路限制的必要條件。舉例來說,您可能希望限制 VM 執行個體的外部 IP 位址存取功能,以防止資料外洩或維持網路隔離,這些都是許多客戶的常見和必要限制。透過行使機構政策,您現在可以使用政策限制停用外部 IP 存取,以便您輕鬆地管理機構或專案中 VM 執行個體的外部 IP 位址存取功能。

控制 VM 執行個體上的外部 IP 位址的限制如下:

constraints/compute.vmExternalIpAccess

如要使用該限制,請指定具有 allowedList 的政策 (其中 VM 執行個體可擁有外部 IP 位址)。如果未指定政策,則會允許所有 VM 執行個體使用所有外部 IP 位址。政策開始執行後,只有 allowedValues 清單中列出的 VM 執行個體可獲指派 (臨時或靜態) 外部 IP 位址,而機構或專案中未在政策中明確定義的其他 Compute Engine VM 執行個體則禁止使用外部 IP 位址。

系統會使用執行個體的網址在允許和拒絕清單中識別 VM:

projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]

相關規範

  • 您只能將此清單限制套用至 VM 執行個體。
  • 您無法回溯套用限制。在政策啟用前即具有外部 IP 位址的所有 VM 執行個體將保留其外部 IP 位址。
  • 此限制只能在同一項政策接受 allowedList 或是 deniedList,但無法兩者同時適用。
  • 執行個體的生命週期與完整性必須由具有適當權限的您或管理員來管理和維護。此限制只能驗證執行個體的網址,但無法防止許可清單中的 VM 遭到修改、刪除或重新建立。

權限

要在專案或機構層級設定限制,您必須已獲授予機構的 orgpolicy.policyAdmin 角色。

在機構層級設定政策限制

如要針對外部 IP 存取設定限制,首先需要您的機構 ID。

找出您的機構 ID

主控台

您也可以在 Google Cloud Platform 主控台中找到 ID:

  1. 登入 Google Cloud Platform 主控台
  2. 按一下專案選取器。

    機構和專案選取器的螢幕擷取畫面

  3. 選擇一個機構並找出機構 ID。

    機構 ID 的螢幕擷取畫面

gcloud

您可以執行以下 gcloud 指令來尋找數字 n 並找出 ID:

gcloud organizations list

gcloud 傳回的內容如下所示:

DISPLAY_NAME           ID
example-organization   29252605212

設定您的政策限制

主控台

  1. 前往機構政策頁面。

    前往「Organizational Policies」(機構政策) 頁面

  2. 如有必要,請從專案下拉式選單中選擇所需的機構。
  3. 點選 [Define Allowed External IPs for VM instances] (為 VM 執行個體定義允許的外部 IP)。
  4. 按一下 [Edit] (編輯) 即可編輯外部 IP 政策。如果您無法存取編輯工具,則表示您沒有適當的權限
  5. 選取 [CPU platform and GPU] (CPU 平台和 GPU),即可針對特定 VM 執行個體設定特定機構政策。

    自訂機構政策的螢幕擷取畫面

  6. 選擇所需 [Policy enforcement] (政策強制執行) 和 [Policy type] (政策類型)。

  7. 在「政策值」底下,選取 [自訂]

  8. 輸入 VM 執行個體的部分網址,然後按下 Enter 鍵。繼續輸入您需要的 VM 執行個體。

    新增 VM 執行個體至機構政策的螢幕擷取畫面

  9. 按一下 [Save] (儲存) 即可儲存變更。

gcloud

使用 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 位址的 VM 執行個體。如果執行個體未列在清單中,則暗示該執行個體可擁有外部 IP 位址。您只能指定 allowedValuesdeniedValues,但不得同時包含兩者。

然後,使用 gcloud 要求傳入檔案:

gcloud beta 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"
 }
}

API

使用 setOrgPolicy() API 來定義限制。您指定 allowedValue 清單中的 VM 則允許擁有外部 IP 位址。此外,您可以指定 deniedValues 清單,明確指出您想要禁止擁有外部 IP 位址的 VM 執行個體。如果執行個體未列在清單中,則暗示該執行個體可擁有外部 IP 位址。您只能指定 allowedValuesdeniedValues,但不得同時包含兩者。

舉例來說,以下要求會將 compute.vmExternalIpAccess 限制設到機構,其中允許機構內某些專案的 VM 執行個體擁有外部 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 清單也包含相同 VM,則該 VM 執行個體不得擁有外部 IP 位址。

主控台

按照在機構層級設定政策限制所記錄的相同程序進行,但要從專案選取器 (而不是從機構中) 選擇所需的專案。

專案選取器的螢幕擷取畫面

gcloud

使用 gcloud beta 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 位址。您只能指定 allowedValuesdeniedValues,但不得同時包含兩者。

接來,使用 gcloud 要求傳入檔案:

gcloud beta resource-manager org-policies set-policy my-policy.json --project example-project

API

使用 setOrgPolicy() API 來定義限制。您指定 allowedValue 清單中的 VM 則允許擁有外部 IP 位址。此外,您可以指定 deniedValues 清單,明確指出您想要禁止擁有外部 IP 位址的 VM 執行個體。如果執行個體未列在清單中,則暗示該執行個體可擁有外部 IP 位址。您只能指定 allowedValuesdeniedValues,但不得同時包含兩者。

舉例來說,以下要求會將 compute.vmExternalIpAccess 限制設到專案,允許特定的 VM 執行個體擁有外部 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]"
   ]
  }
 }
}

最佳做法

  • 如有這項限制,Google 建議您避免使用 deniedValues。如果您在 deniedValues 中定義值,這表示只有在 deniedValues 清單中的 VM 執行個體禁止使用外部 IP 位址。如果您想要精確控制哪些執行個體可擁有外部 IP 位址,這可能會是安全疑慮。如果您想從 allowedValues 清單移除某些執行個體,請更新現有政策以從 allowedList 移除執行個體,而不是從較低階層把執行個體納入 deniedValues 清單。

  • 如果您想對大部分的資源階層設定政策但要豁免某些專案,您可透過指定 restoreDefault 物件使用 setOrgPolicy 方法還原預設政策,允許專案中的所有 VM 與外部 IP 位址建立關聯。此預設設定不會影響專案當前的政策。

  • 將此機構政策與身分與存取權管理角色一起使用可完整控制您的環境。此政策僅適用於 VM 執行個體,但如果您要進一步管理和限制網路設備的外部 IP 位址,可以將 compute.networkAdmin 角色授予適合的對象。

  • 在已啟用政策的機構或專案中,Compute Engine 上運行的任何服務和產品都必須符合此機構政策。具體來說,Kubernetes Engine、Dataflow、Data Proc 以及 Cloud SQL 等服務都會受到此政策影響。如果這會造成問題,Google 建議您在未套用機構政策的不同專案中設定其他服務和產品,並在需要時使用跨專案網路

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件