新增網路標記

標記只是新增至資源中「tags」(標記) 欄位的字串,例如 Compute Engine 虛擬機器 (VM) 執行個體或執行個體範本代碼並非獨立資源,因此無法單獨建立。系統會將含有該字串的所有資源視為具有該標記。標記可讓您建立適用於特定 VM 執行個體的防火牆規則路徑

您可以在建立時將網路標記指派給新的 VM,或是稍後隨時編輯一系列的指派標記。您可以在不停止 VM 的情況下編輯網路標記。

規格

您指派給執行個體的網路標記會套用至執行個體的所有網路介面。網路標記僅適用於直接連結至執行個體網路介面的虛擬私有雲網路。即使為虛擬私有雲網路對等互連也是如此,因為對等網路為不同的網路。因此,網路標記仍然只有在執行個體網路介面所連結的網路中才具有意義。

網路標記可以使用小寫英文字母、數字和連字號,開頭須為小寫英文字母,結尾則須為小寫英文字母或數字。

權限

如要執行本頁所探討的工作,您必須具有下列的身分與存取權管理 (IAM) 角色。詳情請參閱 Compute Engine IAM 角色

工作 必要角色
在建立時將網路標記指派給新的執行個體 專案擁有者或編輯者「或」執行個體管理員
為現有的執行個體新增或移除網路標記
新增、移除或編輯防火牆規則 專案擁有者或編輯者「或」安全管理員

限制

以下限制適用於網路標記:

限制 說明
每個 VM 的標記數量上限 64 VM 的所有標記均不得重複。您最多可為每個 VM 指派 64 個不同的標記。
每個標記的字元數上限 63
標記可接受的字元 小寫字母、數字、破折號 此外:
• 標記的開頭必須為小寫字母。
• 標記的結尾必須為數字或小寫字母。

防火牆規則和路徑

網路標記可讓您將防火牆規則和路徑套用到某個特定執行個體或某一組執行個體:

  • 您可使用目標標記和來源標記建立適用於特定執行個體的防火牆規則。

  • 您可使用標記建立適用於特定執行個體的路徑。

防火牆規則的目標

Google Cloud 中的每個防火牆規則都必須有目標,目標會定義規則套用到哪些執行個體。預設目標為「網路中的所有執行個體」,但您可以使用目標標記或目標服務帳戶,將執行個體指定為目標。

「目標標記」會定義規則套用到哪些 VM。 Google Cloud 規則會套用至特定虛擬私有雲網路。適用於附加至該虛擬私有雲網路的任何執行個體,且與網路介面相關聯的主要內部 IP 位址,只要具有相符的網路標記即可。

輸入與輸出防火牆規則都有目標:

  • 輸入規則適用於進入虛擬私有雲網路的流量。如為輸入規則,目標為 Google Cloud中的「目的地」VM。

  • 輸出規則適用於離開虛擬私有雲網路的流量。如為輸出規則,目標為 Google Cloud中的「來源」VM。

設想有項輸入防火牆規則,可允許來自任何來源的 TCP 通訊埠 80 流量,並且具有 http-server 的目標標記。這項規則將會只套用到具有 http-server 網路標記的執行個體。也就是說,這些執行個體可允許通訊埠 80 上的傳入流量。

輸入防火牆規則的來源篩選器

建立「輸入」防火牆規則時,您必須指定來源。如要定義來源,您可以使用內部或外部 IP 位址的範圍,或是參照特定執行個體。執行個體則可以使用來源標記或來源服務帳戶加以指定。

套用至虛擬私有雲網路的輸入防火牆規則,「來源標記」會將流量來源定義為來自與網路介面相關聯的主要內部 IP 位址,而該網路介面已附加至虛擬私有雲網路,且適用於具有相符網路標記的任何執行個體。

您可以使用 IP 範圍和來源標記的組合,或是使用 IP 範圍和來源服務帳戶的組合。您不能在同一個規則中一起使用網路標記和服務帳戶。如需進一步瞭解來源標記和服務帳戶,請參閱依服務帳戶篩選與依網路標記篩選的比較

注意事項

使用含有來源標記的輸入防火牆規則時,可能會出現傳播延遲。這項延遲通常只有幾秒,但極少數情況下可能需要幾分鐘。進行下列變更時,傳入防火牆規則可能需要一段時間,才會套用至或從相關聯的執行個體中移除:

  • 啟動或停止執行個體,該執行個體具有與規則來源標記相關聯的標記
  • 啟動含有與規則目標標記相關聯標記的例項
  • 如果規則的來源或目標欄位使用標記,則無法新增或移除執行個體的標記
  • 在規則中新增或移除來源或目標標記

這項傳播延遲僅適用於使用來源標記的輸入規則。所有其他防火牆規則都會立即在執行個體上生效。舉例來說,使用來源 IP 位址範圍和目標標記的 Ingress 規則不會有傳播延遲。

與靜態路徑互動

建立靜態路徑時,您必須指定虛擬私有雲網路。接著,您可以指定標記,讓路徑只套用至指定 VPC 網路中,具有相符網路標記的 VM 所傳送的流量。

新增、查看及移除標記

建立 VM 執行個體時,您可以指定網路標記。您也可以為現有 VM 新增及移除標記。

在建立 VM 時新增標記

主控台

  1. 前往「VM 執行個體」頁面。
    前往「VM instances」(VM 執行個體) 頁面
  2. 點選「建立執行個體」
  3. 按一下「管理、安全性、磁碟、網路、單獨租用」,開啟該部分。
  4. 按一下 [網路] 分頁標籤。
  5. 在「網路標記」欄位中,指定一或多個以逗號分隔的標記。
  6. 填入 VM 的其他欄位。
  7. 點選「建立」

gcloud

如要將新標記指派給執行個體,請使用下列 gcloud 指令。

gcloud compute instances create INSTANCE_NAME \
    --zone ZONE \
    --tags TAGS \
    ...other parameters as needed.

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。
  • ZONE:執行個體的可用區。
  • TAGS:以逗號分隔的標記清單。

詳情請參閱gcloud說明文件

Terraform

您可以使用 Terraform 資源建立具有網路標記的 VM 執行個體。

resource "google_compute_instance" "default" {
  project      = var.project_id # Replace this with your project ID in quotes
  zone         = "southamerica-east1-b"
  name         = "backend-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    network = "default"
  }
  tags = ["health-check", "ssh"]
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

將標記新增至現有 VM

主控台

  1. 前往「VM 執行個體」頁面。
    前往「VM instances」(VM 執行個體) 頁面
  2. 按一下執行個體名稱。
  3. 在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下「Edit」(編輯)
  4. 在「Network tags」(網路標記) 區段中,指定一或多個以逗號分隔的標記。
  5. 按一下 [儲存]

gcloud

如要將新標記指派給執行個體,請使用下列 gcloud 指令。

gcloud compute instances add-tags INSTANCE_NAME \
    --zone ZONE \
    --tags TAGS

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。
  • ZONE:執行個體的可用區。
  • TAGS:以逗號分隔的標記清單。

詳情請參閱gcloud說明文件

查看代碼

主控台

  1. 前往「VM 執行個體」頁面。
    前往「VM instances」(VM 執行個體) 頁面
  2. 查看「網路標記」欄中的標記。

    如有需要,請按一下「資料欄顯示選項」,新增「網路標記」欄。

  3. 如要查看標記特定標記的執行個體,請在篩選器中選取「網路標記」屬性,然後輸入要篩選的標記。

gcloud

如要列出執行個體及其標記,請執行下列指令:

gcloud compute instances list --format='table(name,status,tags.list())'

如要列出標記特定標記的執行個體,請執行下列指令:

gcloud compute instances list --filter='tags:TAG_EXPRESSION'

更改下列內容:

  • TAG_EXPRESSION:要篩選的運算式。例如:tag1tag1 OR tag2tag1 AND tag2。如要進一步瞭解如何篩選輸出內容,請參閱 gcloud 主題篩選器

移除標記

主控台

  1. 前往「VM 執行個體」頁面。
    前往「VM instances」(VM 執行個體) 頁面
  2. 按一下執行個體名稱。
  3. 在「VM instance details」(VM 執行個體詳細資料) 頁面上,按一下「Edit」(編輯)
  4. 在「Network tags」(網路標記) 區段中,按一下移除圖示 (X) 以移除標記。
  5. 按一下 [儲存]

gcloud

如要從執行個體移除標記,請使用下列 gcloud 指令。

gcloud compute instances remove-tags INSTANCE_NAME \
    --zone ZONE \
    --tags TAGS

更改下列內容:

  • INSTANCE_NAME:執行個體的名稱。
  • ZONE:執行個體的可用區。
  • TAGS:以逗號分隔的標記清單。

詳情請參閱gcloud說明文件

直接 API 要求

您可以透過發出直接 API 要求的方式,設定與執行個體相關聯的網路標記。與使用 Google Cloud 控制台或 gcloud 指令不同,使用直接 API 要求更新標記並不會保留任何現有的標記。每當您以這種方式更新標記時,請確保您指定標記的完整組合,該組合應與執行個體相關聯。

如要使用直接 API 要求更新標記:

  1. 確認與標記相關聯的最新指紋。指紋可用來防止同時 API 要求造成的任何衝突。更新執行個體網路標記的程序與更新執行個體中繼資料類似。

    對執行個體執行 GET 要求,例如:

    GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance
    

    在回應中找出 tags.fingerprint 屬性:

    200 OK
    {
    ...
    "tags": {
     "items": [
     "http-server",
     "db-client"
     ],
     "fingerprint": "MW8EqhxILtc="
    },
    ...
    }
    

    您也可以使用 gcloud 指令取得 fingerprint,如下列範例所示:

    gcloud compute instances describe INSTANCE_NAME \
       --zone ZONE \
       --format="get(tags.fingerprint)"
  2. instance().setTags 方法發出 POST 要求。要求主體必須包含應與執行個體建立關聯的所有標記及 fingerprint 值。

    要求範例:

    POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/setTags
    {
     "items": [
      "http-server",
      "db-client",
      "allow-internet-access"
      ],
     "fingerprint": "MW8EqhxILtc="
    }
    

    回應範例:

    200 OK
    {
          "kind": "compute#operation",
          "id": "9251830049681941507",
          "name": "operation-1442414898862-51fde63aa57b1-422323e0-c439fb04",
          "zone": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f",
          "operationType": "setTags",
          "targetLink": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance",
          "targetId": "4392196237934605253",
          "status": "PENDING",
          "user": "user@example.com",
          "progress": 0,
    ...
    }
    

後續步驟