按照網域設定身分限制

您可以透過「網域限定共用」功能,根據網域或機構資源限制資源共用。啟用網域限定共用後,只有屬於允許網域或機構的主體,才能在 Google Cloud 機構中獲派 IAM 角色。

您可以使用三種機構政策,依網域限制身分:

  • iam.managed.allowedPolicyMembers 代管限制
  • 參照iam.googleapis.com/AllowPolicy資源的自訂機構政策
  • iam.allowedPolicyMemberDomains舊版代管限制

事前準備

選擇要使用哪種方法實作網域限定共用功能。如要進一步瞭解每種方法的優缺點,請參閱「依網域限制共用的方法」。

必要的角色

如要取得強制執行網域限定共用功能所需的權限,請要求管理員授予您機構的組織政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

使用 iam.managed.allowedPolicyMembers 限制實施網域限定共用

主控台

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

    前往「機構政策」

  2. 從專案選擇工具中,選取要編輯機構政策的專案、資料夾或機構。隨即顯示「Organization policies」(機構政策) 頁面,其中列出可供這個資源使用的機構政策限制,並提供篩選功能。

  3. 從清單中選取「Restrict allowed policy members in IAM allow policies」(限制 IAM 允許政策中允許的政策成員) 受管理限制。

  4. 在「政策詳情」頁面中,按一下「管理政策」

  5. 在「編輯政策」頁面中,選取「覆寫上層政策」

  6. 選取「新增規則」,然後更新機構政策規則:

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

  8. 如要根據標記為機構政策設定條件,請按一下「新增條件」。如果您在組織政策中新增條件規則,就必須新增至少一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

  9. 在「Parameters」部分,設定應可在貴機構中獲授角色的成員和主體集,然後按一下「Save」

  10. 如要預覽機構政策變更的影響,請按一下「測試變更」。如要進一步瞭解如何測試機構政策變更,請參閱「使用 Policy Simulator 測試機構政策變更」。

  11. 如要在模擬測試模式下強制執行機構政策,請按一下「設定模擬測試政策」。詳情請參閱「以模擬執行模式建立機構政策」。

  12. 確認機構政策在試營運模式下運作正常後,請按一下「設定政策」,設定正式政策。

gcloud

  1. 建立 YAML 檔案來定義機構組織政策:

    name: organizations/ORG_ID/policies/CONSTRAINT_NAME
    spec:
    rules:
     - enforce: true
       parameters:
         allowedMemberSubjects:
           - ALLOWED_MEMBER_1
           - ALLOWED_MEMBER_2
         allowedPrincipalSets:
           - ALLOWED_PRINCIPAL_SET_1
           - ALLOWED_PRINCIPAL_SET_2
    

    更改下列內容:

    • ORG_ID:您 Google Cloud機構的數值 ID。

    • CONSTRAINT_NAME:要設定的限制名稱。

    • ALLOWED_MEMBER_1ALLOWED_MEMBER_2:應可獲派貴機構角色的成員。例如:user:example-user@example.com

    • ALLOWED_PRINCIPAL_SET_1ALLOWED_PRINCIPAL_SET_2:應可在貴機構中獲派角色的主體集。例如: //cloudresourcemanager.googleapis.com/organizations/0123456789012

    (選用) 如要根據標記設定機構政策條件,請在 rules 中新增 condition 區塊。如果為組織政策新增條件規則,至少須新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

  2. 使用 org-policies set-policy 指令和 spec 旗標設定政策:

    gcloud org-policies set-policy POLICY_PATH \
      --update-mask=spec
    

    POLICY_PATH 替換為機構政策 YAML 檔案的完整路徑。

如要瞭解如何在套用政策前,先以模擬測試模式測試政策,請參閱「以模擬測試模式建立組織政策」。

如要瞭解如何在強制執行政策前模擬政策,請參閱「使用 Policy Simulator 測試機構政策變更」一文。

REST

如要設定機構政策,請使用 organizations.policies.create 方法。

POST https://orgpolicy.googleapis.com/v2/{parent=organizations/ORGANIZATION_ID}/policies

要求 JSON 主體包含組織政策的定義。如果這項限制不支援參數,請省略 rules 下方的 parameters 區塊。

{
  "name": "organizations/ORG_ID/policies/CONSTRAINT_NAME",
  "spec": {
    "rules": [
      {
        "enforce": true,
        "parameters": {
          "allowedMemberSubjects": [
            "ALLOWED_MEMBER_1",
            "ALLOWED_MEMBER_2"
          ],
          "allowedPrincipalSets": [
            "ALLOWED_PRINCIPAL_SET_1",
            "ALLOWED_PRINCIPAL_SET_2"
          ]
        }
      }
    ]
  }
}

更改下列內容:

  • ORG_ID:您 Google Cloud機構的數值 ID。

  • CONSTRAINT_NAME:要設定的限制名稱。

  • ALLOWED_MEMBER_1ALLOWED_MEMBER_2:應可獲派貴機構角色的成員。例如:user:example-user@example.com

  • ALLOWED_PRINCIPAL_SET_1ALLOWED_PRINCIPAL_SET_2:應可在貴機構中獲派角色的主體集。例如: //cloudresourcemanager.googleapis.com/organizations/0123456789012

(選用) 如要根據標記設定機構政策條件,請在 rules 中新增 condition 區塊。如果為組織政策新增條件規則,至少須新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

如要瞭解如何在套用政策前,先以模擬測試模式測試政策,請參閱「以模擬測試模式建立組織政策」。

如要瞭解如何在強制執行政策前模擬政策,請參閱「使用 Policy Simulator 測試機構政策變更」一文。

使用自訂機構政策實施網域限制共用

  1. 建立自訂限制,限制可在機構中授予角色的主體:

    1. 使用 memberInPrincipalSet CEL 函式搭配機構主體集,限制角色授予對象為機構成員。如要瞭解如何找出機構 ID,請參閱「擷取機構資源 ID」。

      舉例來說,下列限制條件會將角色授予對象限制為貴機構的成員:

      name: organizations/ORG_ID/customConstraints/custom.allowInternalIdentitiesOnly
      methodTypes:
        - CREATE
        - UPDATE
      condition:
        "resource.bindings.all(
          binding,
          binding.members.all(member,
            MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID'])
          )
        )"
      actionType: ALLOW
      displayName: Only allow organization members to be granted roles
      
    2. 您可以視需要新增以邏輯運算子 (&&||!) 聯結的額外 CEL 函式,進一步調整限制。您可以新增下列任一函式:

      舉例來說,下列限制條件會將角色授予對象限制為貴機構的成員和 admin@example.com

      name: organizations/ORG_ID/customConstraints/custom.allowInternalIdentitiesOnly
      methodTypes:
        - CREATE
        - UPDATE
      condition:
        "resource.bindings.all(
          binding,
          binding.members.all(member,
            (
              MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID'])
              ||
              MemberSubjectMatches(member, ['user:admin@example.com'])
            )
          )
        )"
      actionType: ALLOW
      displayName: Only allow organization members and service agents to be granted roles
      
  2. 設定自訂限制:

    為新的自訂限制建立 YAML 檔案後,您必須進行設定,才能在貴機構的機構政策中使用該檔案。如要設定自訂限制,請使用 gcloud org-policies set-custom-constraint 指令:
    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    CONSTRAINT_PATH 替換為自訂限制檔案的完整路徑。例如:/home/user/customconstraint.yaml。 完成後,自訂限制就會顯示在 Google Cloud 機構政策清單中,做為機構政策使用。如要確認自訂限制存在,請使用 gcloud org-policies list-custom-constraints 指令:
    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    ORGANIZATION_ID 替換為機構資源的 ID。 詳情請參閱「查看機構政策」。
  3. 強制執行自訂機構政策:

    如要強制執行限制,請建立參照該限制的機構政策,然後將該政策套用至 Google Cloud 資源。

    控制台

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

      前往「機構政策」

    2. 在專案選擇工具中,選取要設定機構政策的專案。
    3. 在「Organization policies」(機構政策) 頁面上的清單中選取限制條件,即可查看該限制條件的「Policy details」(政策詳情) 頁面。
    4. 如要設定這項資源的機構政策,請按一下「管理政策」
    5. 在「編輯政策」頁面中,選取「覆寫上層政策」
    6. 按一下「新增規則」
    7. 在「Enforcement」(強制執行) 區段中,選取是否要強制執行這項機構政策。
    8. 選用:如要根據標記設定機構政策條件,請按一下「新增條件」。請注意,如果將條件式規則新增至組織政策,您必須新增至少一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定組織政策」。
    9. 按一下「測試變更」,模擬機構政策的影響。舊版受管理限制不支援政策模擬。詳情請參閱「 使用 Policy Simulator 測試組織政策變更」。
    10. 如要完成並套用機構政策,請按一下「設定政策」。這項政策最多需要 15 分鐘才會生效。

    gcloud

    如要建立含有布林值規則的機構政策,請建立參照限制的政策 YAML 檔案:

          name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
          spec:
            rules:
            - enforce: true
        

    取代下列項目:

    • PROJECT_ID:要強制執行限制的專案。
    • CONSTRAINT_NAME:要強制執行的限制名稱。例如:compute.disableAllIpv6

    如要強制執行包含限制的機構政策,請執行下列指令:

        gcloud org-policies set-policy POLICY_PATH
        

    POLICY_PATH 替換為機構政策 YAML 檔案的完整路徑。這項政策最多需要 15 分鐘才會生效。

使用 iam.allowedPolicyMemberDomains 限制實施網域限定共用

網域限制是舊版受管理限制,具有清單constraint_type。Google Workspace 客戶 ID 和機構資源 ID 可從網域限制 allowed_values 清單中新增或移除。 Google Cloud 網域限制條件不支援拒絕值,且機構政策無法儲存 denied_values 清單中的 ID。

機構政策會允許 allowed_values 中列出的所有與 Google Workspace 帳戶或機構資源相關聯的網域。機構政策會拒絕所有其他網域。

您可以根據支援資源清單中包含的任何資源,制定機構政策來強制執行網域限制。例如 Cloud Storage 值區、BigQuery 資料集或 Compute Engine VM。

主控台

如要設定包含網域限制的機構政策,請按照下列步驟操作:

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

    前往「機構政策」

  2. 在專案選擇工具中,選取要設定機構政策的機構資源。

  3. 在「機構政策」頁面,從限制清單中選取「網域限制共用」

  4. 在「政策詳情」頁面中,按一下「管理政策」

  5. 在「套用對象」下方,選取「覆寫上層政策」

  6. 點選「新增規則」

  7. 在「政策值」下方,選取「自訂」。

  8. 在「政策類型」下方,選取「允許」

  9. 在「自訂值」下方,在欄位中輸入機構資源 IDGoogle Workspace 客戶 ID

    輸入機構資源 ID 後,下列主體就能在您的機構中獲得角色:

    • 貴機構中的所有員工身分集區
    • 機構中任何專案的所有服務帳戶和工作負載身分池
    • 與貴機構資源相關聯的所有服務代理程式

    輸入 Google Workspace 客戶 ID 後,下列主體就能在貴機構中獲派角色:

    • 與 Google Workspace 客戶 ID 相關聯的所有網域中的所有身分
    • 貴機構中的所有員工身分集區
    • 機構中任何專案的所有服務帳戶和工作負載身分池
    • 與貴機構資源相關聯的所有服務代理程式
  10. 如要新增多個 ID,請按一下「新增政策值」建立額外欄位。

  11. 按一下 [完成]

  12. 如要根據標記設定網域限制條件,請按一下「新增條件」

    1. 在「Title」(名稱) 欄位中,輸入條件名稱。

    2. 在「說明」欄位中,為條件加上說明。說明會提供必要標記的相關資訊,以及這些標記對資源的影響。

    3. 您可以使用條件建立工具建立條件,規定必須有特定標記,限制才會生效。

      1. 在「條件建構工具」分頁的「條件類型」選單中, 選取「代碼」

      2. 選取條件的運算子。如要比對整個標記,請使用「相符」運算子。如要比對標記鍵和標記值,請使用「符合 ID」運算子。

      3. 如果選取「相符」運算子,請輸入標記的命名空間名稱值。如果您選取「符合 ID」運算子,請輸入鍵和值 ID。

      4. 按一下「新增」即可建立多個條件。如要新增其他條件,可以切換「And」,將條件邏輯設為要求所有條件都必須符合。您可以切換「或」,將條件式邏輯設為只要符合其中一個條件即可。

      5. 如要刪除運算式,請按一下條件欄位右側的大「X」X

      6. 編輯完條件後,按一下「儲存」

  13. 如要強制執行這項政策,請按一下「設定政策」

gcloud

政策可透過 Google Cloud CLI 進行設定。要建立包含網域限制的政策,請執行下列指令:

如要設定包含網域限制的機構政策,請執行下列指令:

gcloud org-policies set-policy POLICY_PATH

其中 POLICY_PATH 是機構政策 YAML 檔案的完整路徑,應如下所示:

name: organizations/ORGANIZATION_ID/policies/iam.allowedPolicyMemberDomains
spec:
  rules:
  - condition: # This condition applies to the values block.
      expression: "resource.matchTag('ORGANIZATION_ID/environment', 'dev')"
    values:
      allowedValues:
      - PRINCIPAL_SET
  - values:
      allowedValues:
      - PRINCIPAL_SET

更改下列內容:

  • ORGANIZATION_ID,其中包含要設定這項政策的機構資源 ID。
  • PRINCIPAL_SET 允許的 Cloud Identity 主體 ID,包括機構資源 ID。例如:is:principalSet://iam.googleapis.com/organizations/01234567890123

    如要允許其他身分,請使用 Google Workspace 客戶 ID。例如:is:C03g5e3bc

套用此機構政策後,允許政策只允許屬於 allowed_values 清單上機構資源 ID 或 Google Workspace 網域的身分。Google Workspace 人類使用者和群組必須是該機構資源的子項或該 Google Workspace 網域的一部分,且 IAM 服務帳戶必須是與指定 Google Workspace 網域相關聯的機構資源子項。

舉例來說,如果您建立的機構政策僅包含公司的 Google Workspace 客戶 ID,則從此只有該網域中的主體能加入允許政策中。

錯誤訊息示例

當嘗試新增不在 allowed_values 清單上的主體而違反iam.allowedPolicyMemberDomains舊版受管理限制時,作業將會失敗且會顯示錯誤訊息。

主控台

Screenshot of Console

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION:
One or more users named in the policy do not belong to a permitted customer.

擷取機構資源 ID

您可以使用 Google Cloud 控制台、gcloud CLI 或 Cloud Resource Manager API 取得機構資源 ID。

主控台

如要使用 Google Cloud 控制台取得機構資源 ID,請執行下列操作:

  1. 前往 Google Cloud 控制台:

    前往 Google Cloud 控制台

  2. 在頁面頂端的專案選擇工具中,選取您的機構資源。
  3. 按一下右側的「更多」,然後點選「設定」

「Settings」(設定) 頁面就會顯示您的機構資源 ID。

gcloud

如要找出機構資源 ID,請執行下列指令:

gcloud organizations list

這個指令會列出您所屬的所有機構資源,以及對應的機構資源 ID。

API

如要使用 Cloud Resource Manager API 尋找機構資源 ID,請使用 organizations.search() 方法,包括查詢網域。例如:

GET https://cloudresourcemanager.googleapis.com/v3/organizations:search{query=domain:altostrat.com}

回應中會有屬於 altostrat.com 的機構資源中繼資料,包括機構資源 ID。

取得機構資源 ID 後,您需要為所屬主體集使用正確的 ID。例如:

principalSet://iam.googleapis.com/organizations/01234567890123

如要進一步瞭解 IAM 主體 ID,請參閱主體 ID

擷取 Google Workspace 客戶 ID

用於網域限制的 Google Workspace 客戶 ID 可用兩種方式取得:

gcloud

您可以使用 gcloud organizations list 指令,查看擁有 resourcemanager.organizations.get 權限的所有機構:

gcloud organizations list

指令會回傳 DISPLAY_NAMEID (機構 ID) 及 DIRECTORY_CUSTOMER_ID。Google Workspace 客戶 ID 為 DIRECTORY_CUSTOMER_ID

API

可以使用 Google Workspace Directory API 取得 Google Workspace 客戶 ID。

以 Google Workspace 管理員身分登入後,您可以前往「Customers: get」API 方法說明文件,然後按一下「執行」。授權完成後,回應會顯示您的客戶 ID。

或者,您也可以使用 API 用戶端:

  1. 取得 https://www.googleapis.com/auth/admin.directory.customer.readonly 範圍的 OAuth 存取權杖。
  2. 執行下列指令,查詢 Google Workspace Directory API:

    curl -# -X GET "https://www.googleapis.com/admin/directory/v1/customers/customerKey" \
    -H "Authorization: Bearer $access_token" -H "Content-Type: application/json"
    

此指令將回傳包括客戶資訊的 JSON 回應。Google Workspace 客戶 ID 為 id

設定網域限定共用功能的例外狀況

部分 Google Cloud 服務會使用服務帳戶、服務代理程式和其他帳戶,代表您執行動作。網域限制共用功能可能會導致這些帳戶無法自動取得所需的 IAM 角色,進而導致特定動作失敗。

下表列出 Google Cloud 可能受到網域限制共用功能影響的動作。並列出需要自動授予角色的帳戶,這些動作才能順利完成。

如果您使用自訂機構政策或 iam.managed.allowedPolicyMembers 受管理限制條件,實作網域限定共用功能,請考慮將這些帳戶新增為網域限定共用限制條件的例外狀況。如要將帳戶新增為例外狀況,請將帳戶的主體 ID 新增至允許的成員清單。

如果您使用 iam.allowedPolicyMemberDomains 舊版受管理限制來實作網域限定共用,則可能需要強制帳戶存取權,這些帳戶才能執行所列動作。

動作 主體 ID
將 Google Analytics 360 連結至 BigQuery serviceAccount:analytics-processing-dev@system.gserviceaccount.com
為帳單帳戶啟用 BigQuery 記錄檔接收器 serviceAccount:bUNIQUE_ID@gcp-sa-loggingiam.gserviceaccount.com
啟用儲存空間存取記錄功能 serviceAccount:cloud-storage-analytics@google.com
啟用 Firebase API
  • serviceAccount:service-PROJECT_NUMBER@gcp-sa-firebase.iam.gserviceaccount.com
  • serviceAccount:firebase-service-account@firebase-sa-management.iam.gserviceaccount.com
將 Pub/Sub 當做 Google Chat 應用程式的端點 serviceAccount:chat-api-push@system.gserviceaccount.com
使用 Pub/Sub 接收 Google Play 的即時開發人員通知 serviceAccount:google-play-developer-notifications@system.gserviceaccount.com

Cloud Run 公用服務

Cloud Run 可讓您公開服務。 不過,如果您實作網域限定共用,貴機構外部的使用者就無法存取公開的 Cloud Run 服務。

如要允許使用者存取公開 Cloud Run 服務,您必須為 Cloud Run 服務停用 Cloud Run Invoker IAM 檢查。詳情請參閱「為服務停用 Cloud Run Invoker」。

公開分享其他資料

如果您使用自訂機構政策實作網域限定共用,可以為機構政策新增例外狀況,允許公開共用資料。

公開分享資料時,會涉及特殊主體 allUsersallAuthenticatedUsers。如果您在使用網域限制共用功能時,需要公開共用資料,則必須為這些主體新增例外狀況。只有在使用自訂機構政策實作網域限定共用時,才能新增例外狀況。

如要為 allUsersallAuthenticatedUsers 新增例外狀況,請在限制的條件運算式中使用 memberSubjectMatches CEL 函式。

舉例來說,下列條件運算式會將角色授予限制為機構「allUsers」和「allAuthenticatedUsers」的成員:

name: organizations/ORG_ID/customConstraints/custom.allowInternalAndSpecialIdentitiesOnly
methodTypes:
  - CREATE
  - UPDATE
condition:
  "resource.bindings.all(
    binding,
    binding.members.all(member,
      (
        MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID'])
        ||
        MemberSubjectMatches(member, ['allUsers', 'allAuthenticatedUsers'])
      )
    )
  )"
actionType: ALLOW
displayName: Only allow organization members, allusers, and allAuthenticatedUsers to be granted roles

帳戶強制存取

如果您需要強制執行違反網域限制的專案帳戶存取:

  1. 移除包括網域限制的機構政策。

  2. 授予帳戶存取專案的權限。

  3. 再次在機構政策中實施網域限制。

或者,您也可以將存取權授予包含相關服務帳戶的 Google 群組:

  1. 在允許的網域內建立一個 Google 群組。

  2. 使用 Google Workspace 管理員面板關閉該群組的網域限制

  3. 將服務帳戶新增至群組。

  4. 在允許政策中將存取權授予 Google 群組。