遷移使用網路標記和服務帳戶的虛擬私有雲防火牆規則

虛擬私有雲 (VPC) 防火牆規則可以包含網路標記和來源服務帳戶。如要將含有網路標記和來源服務帳戶的虛擬私有雲防火牆規則遷移至全域網路防火牆政策,請執行下列工作:

  1. 評估您的環境
  2. 列出現有網路標記和服務帳戶
  3. 為每個網路標記和來源服務帳戶建立代碼
  4. 將網路標記和服務帳戶對應至您建立的標記
  5. 將標記繫結至虛擬機器 (VM) 執行個體
  6. 將虛擬私有雲防火牆規則遷移至全域網路防火牆政策
  7. 查看新的網路防火牆政策
  8. 完成遷移後工作

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

  5. Install the Google Cloud CLI.

  6. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  7. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Compute Engine API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  13. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  14. 確認您具備 Compute 安全性管理員角色 (roles/compute.securityAdmin)。
  15. 評估您的環境

    將虛擬私有雲防火牆規則遷移至全域網路防火牆政策前,請先評估現有環境和 Identity and Access Management (IAM) 角色與權限:

    1. 找出虛擬私有雲網路中的虛擬私有雲防火牆規則數量。
    2. 記下與每項虛擬私有雲防火牆規則相關聯的優先順序。
    3. 請確認您具備必要的 IAM 角色和權限,可建立、關聯、修改及查看全域網路防火牆政策
    4. 請確認您具備建立、更新及刪除安全代碼定義所需的 IAM 角色和權限。

      下表匯總建立及管理代碼所需的各種角色:

      角色名稱 執行的工作
      代碼管理員角色 (roles/resourcemanager.tagAdmin) 建立、更新及刪除標記定義。詳情請參閱「管理標記」。
      代碼檢視者角色 (roles/resourcemanager.tagViewer) 查看標記定義和附加至資源的標記。
      標記使用者角色 (roles/resourcemanager.tagUser) 新增及移除附加至資源的標記。

    列出現有的網路標記和服務帳戶

    判斷 VPC 防火牆規則是否使用任何網路標記或服務帳戶,並建立 JSON 檔案來儲存現有網路標記和服務帳戶的詳細資料。

    如要將網路中的網路標記和服務帳戶匯出至對應 JSON 檔案,請使用 compute firewall-rules migrate 指令搭配 --export-tag-mapping 旗標。

    gcloud beta compute firewall-rules migrate \
        --source-network=NETWORK_NAME \
        --export-tag-mapping \
        --tag-mapping-file=TAG_MAPPING_FILE
    

    更改下列內容:

    • NETWORK_NAME:包含要遷移的虛擬私有雲防火牆規則的虛擬私有雲網路名稱。
    • TAG_MAPPING_FILE:對應 JSON 檔案的名稱。

    如果 VPC 防火牆規則只包含服務帳戶,產生的 JSON 檔案也只會包含服務帳戶。同樣地,如果 VPC 防火牆規則只包含網路標記,產生的 JSON 檔案也只會包含網路標記。服務帳戶會加上 sa 前置字串,網路標記則不會。

    舉例來說,以下產生的 JSON 檔案包含網路代碼 sql-server 和服務帳戶 example@example.com

    {"sql-server": null, "sa:example@example.com": null}
    

    建立標記

    根據對應檔案中列出的網路標記和來源服務帳戶,您必須在網路中建立對應的安全標記。

    新的安全標記可取代網路標記和服務帳戶,並在遷移後保留原始網路設定。

    以代碼管理員角色的主體身分,為每個聯播網代碼和服務帳戶建立對應的安全代碼鍵/值組合

    gcloud resource-manager tags keys create TAG_KEY \
        --parent organizations/ORGANIZATION_ID \
        --purpose GCE_FIREWALL \
        --purpose-data network=PROJECT_ID/NETWORK_NAME
    
    gcloud resource-manager tags values create TAG_VALUE \
        --parent ORGANIZATION_ID/TAG_KEY
    

    更改下列內容:

    • TAG_KEY:標記鍵的名稱。
    • ORGANIZATION_ID:貴機構的 ID。
    • PROJECT_ID:您的專案 ID。
    • NETWORK_NAME:虛擬私有雲網路的名稱。
    • TAG_VALUE:要指派給標記鍵的值。

    舉例來說,如果您有網路標記為 sql-server 的虛擬私有雲防火牆規則,請建立對應的 sql-server:production 安全標記鍵/值組合。

    gcloud resource-manager tags keys create sql-server \
        --parent organizations/123456 \
        --purpose GCE_FIREWALL \
        --purpose-data network=test-project/test-network
    
    gcloud resource-manager tags values create production \
       --parent 123456/sql-server
    

    將網路標記和服務帳戶對應至標記

    為 VPC 防火牆規則使用的每個網路標記和服務帳戶建立受 IAM 管控的安全標記後,您必須在對應 JSON 檔案中,將標記對應至相應的網路標記和服務帳戶。

    編輯 JSON 檔案,將網路標記和服務帳戶對應至相應的安全標記。

    {"sql-server": "tagValues/yyyyy", "sa:example@example.com": "tagValues/zzzzz"}
    

    舉例來說,下列 JSON 檔案會將網路代碼 sql-server 對應至金鑰 sql-server 的代碼值,並將服務帳戶 example@example.com 對應至金鑰 example@example.com 的代碼值:

    {"sql-server": "tagValues/production", "sa:example@example.com": "tagValues/example"}
    

    將標記繫結至 VM

    根據標記對應 JSON 檔案,將新建立的安全標記繫結至已附加現有網路標記的 VM:

    1. 以代碼管理員角色的主體身分執行下列操作:

      1. 查看將安全代碼附加至 Google Cloud 資源的必要權限
      2. 將標記使用者角色指派給主體,該主體會使用安全標記並將標記繫結至 VM。
    2. 以具有「標記使用者」角色的主體身分,使用 compute firewall-rules migrate 指令並加上 --bind-tags-to-instances 旗標:

      gcloud beta compute firewall-rules migrate \
         --source-network=NETWORK_NAME \
         --bind-tags-to-instances \
         --tag-mapping-file=TAG_MAPPING_FILE
      

      更改下列內容:

      • NETWORK_NAME:虛擬私有雲網路的名稱。
      • TAG_MAPPING_FILE:對應 JSON 檔案的名稱。

    將虛擬私有雲防火牆規則遷移至全域網路防火牆政策

    將虛擬私有雲防火牆規則遷移至全域網路防火牆政策。使用 compute-firewall-rules migrate 指令

    gcloud beta compute firewall-rules migrate \
        --source-network=NETWORK_NAME \
        --target-firewall-policy=POLICY_NAME \
        --tag-mapping-file=TAG_MAPPING_FILE
    

    更改下列內容:

    • NETWORK_NAME:包含要遷移的虛擬私有雲防火牆規則的虛擬私有雲網路名稱。
    • POLICY_NAME:要在遷移期間建立的全域網路防火牆政策名稱。

    排除要遷移的防火牆規則

    如要排除特定防火牆規則,請使用 gcloud beta compute firewall-rules migrate 指令,並加上 --exclusion-patterns-file 旗標:

    gcloud beta compute firewall-rules migrate \
        --source-network=NETWORK_NAME \
        --target-firewall-policy=POLICY_NAME \
        --exclusion-patterns-file=EXCLUSION_PATTERNS_FILE
    

    更改下列內容:

    • NETWORK_NAME:虛擬私有雲網路的名稱,其中包含您要遷移的虛擬私有雲防火牆規則。
    • POLICY_NAME:遷移期間要建立的全域網路防火牆政策名稱。
    • EXCLUSION_PATTERNS_FILE:檔案名稱,其中包含定義要從遷移作業排除的虛擬私有雲防火牆命名模式的規則運算式。請務必指定檔案的完整路徑。系統會略過符合指定模式的防火牆規則。

      定義排除模式時,請注意下列事項:

      • 每個規則運算式都必須單獨一行,且代表單一防火牆命名模式。
      • 規則運算式開頭或結尾不含任何空白字元。

    查看排除的防火牆規則

    根據排除的防火牆規則命名模式,遷移工具不會遷移部分防火牆規則,例如 Google Kubernetes Engine (GKE) 防火牆規則。如要匯出排除的防火牆規則命名模式清單,請使用 gcloud beta compute firewall-rules migrate 指令搭配 --export-exclusion-patterns--exclusion-patterns-file 旗標。

    gcloud beta compute firewall-rules migrate \
        --source-network=NETWORK_NAME \
        --target-firewall-policy=POLICY_NAME \
        --exclusion-patterns-file=EXCLUSION_PATTERNS_FILE \
        --export-exclusion-patterns
    

    更改下列內容:

    • NETWORK_NAME:虛擬私有雲網路的名稱,其中包含您要遷移的虛擬私有雲防火牆規則。
    • POLICY_NAME:遷移期間要建立的全域網路防火牆政策名稱。
    • EXCLUSION_PATTERNS_FILE:匯出下列排除的防火牆規則命名模式的檔案路徑。

      gke-(.+)-ipv6-all
      gke-(.+)-(.+)-((master)|(vms)|(all)|(inkubelet)|(exkubelet)|(mcsd))
      k8s-fw-(l7-)?(.+)
      k8s-(.+)-((node)|(http)|(node-http))-hc
      (.+)-hc
      k8s2-(.+)-(.+)-(.+)-(.+)(-fw)?
      k8s2-(.+)-l4-shared-hc-fw
      gke((gw)|(mcg))1-l7-(.+)-(.+)
      

    如要遷移符合特定模式的排除防火牆規則,請從匯出的清單中移除該模式,然後執行 gcloud beta compute firewall-rules migrate 指令並搭配使用 --exclusion-patterns-file 標記。

    強制遷移,同時保留評估順序

    遷移期間,如果排除的防火牆規則評估順序介於使用者指定的防火牆規則評估順序之間,遷移就會失敗。這是因為排除的防火牆規則不會遷移,且遷移工具無法在新網路防火牆政策中保留使用者定義規則的原始評估順序。

    舉例來說,如果防火牆規則具有下列優先順序,遷移作業就會失敗。

    • 優先順序為 100 的使用者指定規則
    • 優先順序為 200 的排除規則
    • 優先順序為 300 的使用者指定規則

    如要強制遷移工具遷移使用者指定的規則,同時保留原始評估順序並忽略排除的防火牆規則,請使用 gcloud beta compute firewall-rules migrate 指令並加上 --force 旗標。

    gcloud beta compute firewall-rules migrate \
        --source-network=NETWORK_NAME \
        --target-firewall-policy=POLICY_NAME \
        --force
    

    更改下列內容:

    • NETWORK_NAME:虛擬私有雲網路的名稱,其中包含您要遷移的虛擬私有雲防火牆規則。
    • POLICY_NAME:遷移期間要建立的全域網路防火牆政策名稱。

    查看新的全域網路防火牆政策

    將新建立的政策與 VPC 網路建立關聯前,Google 建議您先檢查政策,確保遷移程序已正確完成。

    請確認下列事項:

    • 防火牆政策規則設定正確,且每個規則的下列規則元件都已正確遷移:

      • 相對優先順序
      • 流量方向
      • 相符時執行的動作
      • 記錄設定
      • 目標參數
      • 來源參數 (適用於輸入規則)
      • 目的地參數 (適用於輸出規則)
      • 通訊協定和通訊埠限制
    • 確認安全標記是否已附加至正確的 VM。使用 resource-manager tags bindings list 指令

      gcloud resource-manager tags bindings list \
          --location=ZONE_ID \
          --parent //compute.googleapis.com/projects/PROJECT_ID/zones/ZONE_ID/instances/INSTANCE_NAME \
          --effective
      

      更改下列內容:

      • ZONE_ID:VM 所在的可用區。
      • PROJECT_ID:您的專案 ID。
      • INSTANCE_NAME:VM 名稱。

    遷移後工作

    如要啟用及使用新的全域網路防火牆政策,請完成移轉後工作。詳情請參閱「遷移後工作」。

    後續步驟