將可用區 DNS 設為新專案的預設值

本文說明如何更新內部 DNS 政策,以便在新專案中使用可用區 DNS。區域性 DNS 可隔離區域內的服務中斷情形,避免執行個體建立和自動修復等重要服務受到影響,進而提升應用程式可靠性。

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證程序會確認您的身分,以便授予 Cloud de Confiance by S3NS 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,不需要設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設區域和可用區。
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」一節。

必要的角色

如要取得查看全機構內部 DNS 使用情形及更新預設政策所需的權限,請要求管理員授予您下列 IAM 角色:

  • 檢查預設全域 DNS 政策: 資料夾或機構的機構政策管理員 (roles/orgpolicy.policyAdmin)
  • 判斷資料夾是否已準備好遷移至區域性 DNS: 在資料夾或機構上瀏覽 (roles/browser)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備查看全組織內部 DNS 使用情況,以及更新預設政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

必須具備下列權限,才能查看組織內部的 DNS 用量,以及更新預設政策:

  • 設定組織政策限制: orgpolicy.*
  • 判斷資料夾是否可以遷移至區域性 DNS:
    • resourcemanager.folders.get
    • resourcemanager.folders.list
    • resourcemanager.organizations.get
    • resourcemanager.projects.get
    • resourcemanager.projects.list
  • 檢查全域 DNS 名稱和 VM 中繼資料:compute.projects.get

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

設定總覽

如果您設定組織政策來覆寫預設的內部 DNS 類型,新建立的專案預設會使用區域性 DNS。組織政策不會影響已啟用 Compute Engine API 的現有專案。如要將現有專案改用區域性 DNS,請參閱將現有專案改用區域性 DNS。

建議您在機構層級強制執行可用區 DNS 政策。這種做法可確保貴組織內建立的所有新專案都會使用可用區 DNS,進而提升可靠性和韌性。不過,您可能需要將某些資料夾排除在這項組織層級政策之外。如果資料夾內的新專案依附於與區域性 DNS 不相容的現有專案,就必須豁免資料夾。

在組織層級強制執行可用區 DNS 政策的程序包含下列步驟:

  1. 收集專案和資料夾清單:彙整機構內所有專案及其相關聯資料夾的清單。
  2. 找出要豁免的資料夾:找出含有步驟 1 中不相容專案的資料夾。這些資料夾必須暫時不受區域性 DNS 政策限制。
  3. 設定組織政策:在組織層級強制執行區域 DNS 政策。
  4. 豁免特定資料夾:對步驟 3 中識別的資料夾套用豁免。這樣一來,他們就能繼續使用全域 DNS,同時處理當中不相容的專案。

這種做法可確保新專案使用區域性 DNS,提升可靠性,同時也能配合舊專案的現有依附元件,這些專案可能還無法立即遷移。

限制

在整個機構中啟用區域性 DNS 名稱,可將區域性 DNS 設定套用至其他服務中的執行個體,例如:

請檢查應用程式是否使用任何這類服務,並使用查詢分析功能找出與區域性 DNS 的相容性問題,瞭解與這些應用程式相關聯的資料夾和專案。

檢查貴機構是否預設使用全域 DNS

貴機構的預設 DNS 設定取決於兩個因素:

  • 機構建立日期:

    • 2018 年 9 月 6 日後建立:組織預設使用可用區 DNS。因此無需採取進一步行動。
    • 在 2018 年 9 月 6 日前建立:貴機構預設使用全域 DNS。建議您改用區域性 DNS。
  • 機構政策限制的存在和強制執行:

    即使貴機構是在 2018 年 9 月 6 日前建立,管理員也可能強制執行政策,規定機構內所有新專案都必須使用區域性 DNS。如要檢查是否有這類政策,可以使用 Cloud de Confiance 控制台或 Google Cloud CLI。

控制台

  1. 前往控制台的「IAM & Admin」(IAM 與管理)>「Identity & Organization」(身分與機構) 頁面。

    前往「身分識別與機構」

  2. 查看機構的註冊日期。

    「身分識別與機構」控制台頁面的螢幕截圖,顯示註冊完成日期。

  3. 如果組織是在 2018 年 9 月 6 日前建立,請檢查是否有組織政策限制,將所有新建立專案的預設 DNS 類型設為可用區 DNS。

    1. 前往 Cloud de Confiance 控制台的「IAM & Admin」(IAM 與管理) >「Organization Policies」(組織政策) 頁面。
    2. 在「Filter」欄位中輸入 constraints/compute.setNewProjectDefaultToZonalDNSOnly。
    3. 如果已設定限制,請按一下名稱「將新專案的內部 DNS 設定設為僅限可用區 DNS」。
    4. 在「Policy details」(政策詳細資料) 頁面中,查看「Status」(狀態)。
      • 如果狀態為「已強制執行」,則在機構中建立的所有新專案,預設內部 DNS 類型都是區域性 DNS。
      • 否則,專案的預設 DNS 類型仍會由機構建立時間決定。
    5. 如果未為組織設定限制,專案的預設 DNS 類型會由組織建立日期決定。

gcloud

使用 organizations describe 指令和 resource-manager org-policies list 指令,判斷組織的預設 DNS 類型。

  1. 檢查機構 creationTime 中繼資料值。

    gcloud organizations describe ORGANIZATION_ID
    

    將 ORGANIZATION_ID 替換為組織 ID 號碼或組織網域名稱。

  2. 如果貴機構是在 2018 年 9 月 6 日前建立,請判斷是否已設定組織政策限制,將所有新建立專案的預設 DNS 類型設為區域性 DNS。

    gcloud resource-manager org-policies list --organization=ORGANIZATION_ID \
       --filter="constraints/compute"
    

    在輸出內容中尋找 constraints/compute.setNewProjectDefaultToZonalDNSOnly。

    1. 如果存在這項限制,且 Status 為 Enforced,則在機構中建立的所有新專案預設都會使用區域性 DNS。
    2. 如果限制不存在或未強制執行,則預設 DNS 類型會依組織的建立日期決定,如第一個步驟所述。

判斷資料夾或機構中的哪些專案使用全域 DNS

如要判斷哪些專案使用全域 DNS,建議您使用 BigQuery 建立資料表,列出貴機構的相關專案及其專案中繼資料。接著就能使用這個資料表執行查詢

  1. 建立 BigQuery 資料集。
  2. 將機構的資產中繼資料匯出至 BigQuery 資料表。

    1. 確認已啟用 Cloud Asset Inventory API。
    2. 設定使用 Cloud Asset Inventory API 所需的權限。
    3. 使用下列 gcloud CLI 指令匯出 compute.googleapis.com/Project 資產:

      gcloud asset export \
         --content-type resource \
         --organization 'ORGANIZATION_ID' \
         --bigquery-table 'projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME' \
         --asset-types='compute.googleapis.com/Project' \
         --output-bigquery-force
      

      更改下列內容:

      • ORGANIZATION_ID:組織 ID 號碼
      • PROJECT_ID:專案 ID
      • DATASET_ID:BigQuery 資料集名稱
      • TABLE_NAME:要匯出中繼資料的表格。如果資料表不存在,BigQuery 會建立資料表。
  3. 前往Cloud de Confiance 控制台的「BigQuery」BigQuery頁面。

  4. 選取「 撰寫新查詢」。

  5. 在查詢編輯器文字區域中,輸入下列 GoogleSQL 查詢,然後按一下「Run」(執行)。

    SELECT
      JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting,
      count(*) as project_count
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    GROUP BY 1
    

    更改下列內容:

    • PROJECT_ID:專案 ID
    • DATASET_ID:BigQuery 資料集名稱
    • TABLE_NAME:包含匯出中繼資料的資料表 (來自步驟 2)。

    如果專案的 vmDnsSetting 值為 ZONAL_ONLY,則已設定區域 DNS。否則專案預設會使用全域 DNS。

  6. 選用:如要查看每個專案的 vmDnsSetting 詳細資料,請輸入下列 GoogleSQL 查詢,然後點選 「執行」。

    SELECT
      SUBSTR(name,35) as project_id,
      JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    

判斷資料夾是否適合遷移

這個步驟會使用 bash 指令碼和上節中建立的 BigQuery 資料表,判斷資料夾是否適合遷移。

  • 如果所有專案在過去 30 天內,都沒有與區域性 DNS 不相容的查詢,資料夾就可遷移。
  • 如果資料夾尚未準備好遷移,指令碼會傳回資料夾中的專案 ID,指出這些專案導致資料夾無法遷移。結果清單中的專案尚未與區域 DNS 相容,因此需要採取額外行動。

操作步驟如下:

  1. 取得資料夾 ID。如果不知道資料夾 ID,請按照下列步驟操作:
    1. 前往 Cloud de Confiance 控制台的 「Managed resources」(代管資源) 頁面。
    2. 套用篩選器 Name:FOLDER_NAME,取得資料夾 ID。
  2. 查詢匯出compute.Project assets資料的 BigQuery 資料表。

    如需建立 BigQuery 資料表的說明,請參閱「判斷資料夾或機構中的哪些專案使用全域 DNS」。

    輸入下列 GoogleSQL 查詢,然後點選「執行」:

    SELECT
      SUBSTR(name,35) AS project_id,
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    WHERE CONTAINS_SUBSTR(ancestors, 'FOLDER_NUMBER')
    

    更改下列內容:

    • PROJECT_ID:專案 ID
    • DATASET_ID:BigQuery 資料集名稱
    • TABLE_NAME:包含匯出中繼資料的資料表
    • FOLDER_NUMBER:資料夾 ID 編號
  3. 複製專案 ID 清單,並儲存至檔案。

  4. 執行下列 bash 指令碼。指令碼會逐一檢查已儲存檔案中的專案 ID,判斷資料夾是否可以遷移。

#!/bin/bash
inaccessible_projects=()
unready_projects=()

for project in $(cat ~/FILENAME | tr '\n' ' '); do
  echo -e "Checking project $project..."
  ERROR=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query"   -H "Authorization: Bearer $(gcloud auth print-access-token)"   -H "Accept: application/json"   -H "Content-Type: application/json"   --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}'   --compressed | jq --raw-output '.error'`
  if ! [[ "$ERROR" -eq "null" ]]; then
    inaccessible_projects+=($project)
    continue
  fi
  QUERY_COUNT=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query"   -H "Authorization: Bearer $(gcloud auth print-access-token)"   -H "Accept: application/json"   -H "Content-Type: application/json"   --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}'   --compressed | jq --raw-output '.timeSeriesData[0].pointData[0].values[0].int64Value'`
  if [[ "$QUERY_COUNT" -ne "null" ]] && [[ "$QUERY_COUNT" -ne "0" ]]; then
    unready_projects+=($project)
  fi
done

error_len=${#inaccessible_projects[@]}
unready_len=${#unready_projects[@]}

echo -e "$error_len projects were inaccessible"
echo -e "$unready_len projects were not ready for migration"

if [ $error_len -ne 0 ]; then
  echo "Unable to access the following projects:"
  for project in "${inaccessible_projects[@]}"; do
    echo "$project"
  done
fi
if [ $unready_len -ne 0 ]; then
  echo "The following projects are not ready for migration:"
  for project in "${unready_projects[@]}"; do
    echo "$project"
  done
fi

if (( $error_len + $unready_len > 0 )); then
  echo "This folder is NOT ready for gDNS -> zDNS migration."
else
  echo "This folder is ready for gDNS -> zDNS migration."
fi

將 FILENAME 替換成您儲存專案 ID 清單的檔案名稱。

向專案擁有者說明遷移準備分析結果:

無法遷移至區域性 DNS 的豁免資料夾

如要將資料夾排除在組織政策之外,請完成下列步驟,將資料夾層級政策的強制執行選項設為 Off。

  1. 以 Google Workspace 或 Cloud Identity 超級管理員身分登入 Cloud de Confiance 控制台。
  2. 前往控制台的「Organization policies」(組織政策) 頁面。

    前往「Organization policies」(組織政策)

  3. 按一下「選取」,然後選取要從組織政策中排除的資料夾。

    Cloud de Confiance 控制台會在一或多個頁面上,顯示該資料夾的機構政策限制清單。

  4. 如要找出強制執行區域性 DNS 的組織政策限制,請按照下列步驟操作:

    1. 按一下「Filter」(篩選)。
    2. 選取「名稱」。
    3. 將篩選器名稱設為「Sets the internal DNS setting for new projects to Zonal DNS Only」(將新專案的內部 DNS 設定設為僅限可用區 DNS)。
  5. 按一下組織政策限制名稱,開啟「政策詳細資料」頁面。

  6. 按一下 [編輯]。

  7. 在「Edit」(編輯) 頁面選取 [Customize] (自訂)。

  8. 在「Enforcement」(強制執行) 下方,選取「Off」(關閉),停用限制強制執行功能。也就是說,資料夾中所有專案的預設內部 DNS 類型,取決於機構的建立日期。

  9. 按一下 [儲存]。

如要進一步瞭解如何自訂組織政策限制,請參閱 Resource Manager 說明文件中的「自訂布林限制的政策」。

新專案預設強制執行可用區 DNS

請按照下列步驟,為資料夾或機構設定組織政策。

  1. 以 Google Workspace 或 Cloud Identity 超級管理員身分登入 Cloud de Confiance 控制台。

  2. 前往控制台的「Organization policies」(組織政策) 頁面。

    前往「Organization policies」(組織政策)

  3. 選取要查看組織政策的資料夾或機構。 Cloud de Confiance 控制台會顯示可用的組織政策限制清單。清單可能橫跨多個頁面。

  4. 如要找出強制執行區域性 DNS 的政策,請按一下「篩選」並選取「名稱」,然後將篩選器名稱設為「將新專案的內部 DNS 設定設為僅限區域性 DNS」。

  5. 按一下政策名稱,即可查看詳細資料。

    政策詳細資料頁面提供限制和限制套用方式的相關資訊。

    根據預設,資料夾或機構的強制執行狀態為未定義。 不過,如果上層資料夾已定義強制執行,則會從最接近的已定義強制執行的上層資料夾繼承強制執行。詳情請參閱「瞭解階層評估」。

  6. 如要自訂組織政策,請按一下「編輯」。

  7. 在編輯頁面中,選取「自訂」。

  8. 在「Enforcement」(強制執行) 下方,選取「On」 (開啟)。

    這會將組織中所有新專案的預設內部 DNS 類型設為區域性 DNS。

  9. 按一下 [儲存]。

如要驗證組織政策變更,請在資料夾或機構下建立新專案,然後建立並啟動 VM 執行個體,並檢查 VM 是否已啟用區域 DNS。

如果工作負載內建的 DNS 名稱查詢需要使用全域 DNS 才能解析,您可以停用強制執行功能,在機構或資料夾層級還原這項變更。

改回使用組織或資料夾的全域 DNS

如要讓機構或資料夾恢復使用全域 DNS,請停止強制執行可用區 DNS 的機構政策。操作步驟如下。

  1. 在機構或資料夾層級停用組織政策 constraints/compute.setNewProjectDefaultToZonalDNSOnly。如要瞭解如何修改這項政策,請參閱「根據預設,對新專案強制執行可用區 DNS」。

    將「Sets the internal DNS setting for new projects to Zonal DNS Only」(將新專案的內部 DNS 設定設為僅限可用區 DNS) 的強制執行狀態設為「Off」(關閉)。

  2. 如要改回為整個組織使用全域 DNS,請確認組織中沒有任何資料夾強制執行組織政策 constraints/compute.setNewProjectDefaultToZonalDNSOnly。

  3. 如要確認專案和執行個體是否已設定全域 DNS,請參閱「判斷資料夾或機構中的哪些專案使用全域 DNS」。

後續步驟