您可以透過「網域限定共用」功能,根據網域或機構資源限制資源共用。啟用網域限定共用後,只有屬於允許網域或機構的主體,才能在 Google Cloud 機構中獲派 IAM 角色。
您可以使用三種機構政策,依網域限制身分:
iam.managed.allowedPolicyMembers
代管限制- 參照
iam.googleapis.com/AllowPolicy
資源的自訂機構政策 iam.allowedPolicyMemberDomains
舊版代管限制
事前準備
選擇要使用哪種方法實作網域限定共用功能。如要進一步瞭解每種方法的優缺點,請參閱「依網域限制共用的方法」。
必要的角色
如要取得強制執行網域限定共用功能所需的權限,請要求管理員授予您機構的組織政策管理員 (roles/orgpolicy.policyAdmin
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
使用 iam.managed.allowedPolicyMembers
限制實施網域限定共用
主控台
前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
從專案選擇工具中,選取要編輯機構政策的專案、資料夾或機構。隨即顯示「Organization policies」(機構政策) 頁面,其中列出可供這個資源使用的機構政策限制,並提供篩選功能。
從清單中選取「Restrict allowed policy members in IAM allow policies」(限制 IAM 允許政策中允許的政策成員) 受管理限制。
在「政策詳情」頁面中,按一下「管理政策」。
在「編輯政策」頁面中,選取「覆寫上層政策」。
選取「新增規則」,然後更新機構政策規則:
在「Enforcement」(強制執行) 下方,選取 [On] (開啟)。
如要根據標記為機構政策設定條件,請按一下「新增條件」。如果您在組織政策中新增條件規則,就必須新增至少一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。
在「Parameters」部分,設定應可在貴機構中獲授角色的成員和主體集,然後按一下「Save」。
如要預覽機構政策變更的影響,請按一下「測試變更」。如要進一步瞭解如何測試機構政策變更,請參閱「使用 Policy Simulator 測試機構政策變更」。
如要在模擬測試模式下強制執行機構政策,請按一下「設定模擬測試政策」。詳情請參閱「以模擬執行模式建立機構政策」。
確認機構政策在試營運模式下運作正常後,請按一下「設定政策」,設定正式政策。
gcloud
建立 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_1
、ALLOWED_MEMBER_2
:應可獲派貴機構角色的成員。例如:user:example-user@example.com
。ALLOWED_PRINCIPAL_SET_1
、ALLOWED_PRINCIPAL_SET_2
:應可在貴機構中獲派角色的主體集。例如://cloudresourcemanager.googleapis.com/organizations/0123456789012
。
(選用) 如要根據標記設定機構政策條件,請在
rules
中新增condition
區塊。如果為組織政策新增條件規則,至少須新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。使用
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_1
、ALLOWED_MEMBER_2
:應可獲派貴機構角色的成員。例如:user:example-user@example.com
。ALLOWED_PRINCIPAL_SET_1
、ALLOWED_PRINCIPAL_SET_2
:應可在貴機構中獲派角色的主體集。例如://cloudresourcemanager.googleapis.com/organizations/0123456789012
。
(選用) 如要根據標記設定機構政策條件,請在 rules
中新增 condition
區塊。如果為組織政策新增條件規則,至少須新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。
如要瞭解如何在套用政策前,先以模擬測試模式測試政策,請參閱「以模擬測試模式建立組織政策」。
如要瞭解如何在強制執行政策前模擬政策,請參閱「使用 Policy Simulator 測試機構政策變更」一文。
使用自訂機構政策實施網域限制共用
建立自訂限制,限制可在機構中授予角色的主體:
使用
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
您可以視需要新增以邏輯運算子 (
&&
、||
或!
) 聯結的額外 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
設定自訂限制:
為新的自訂限制建立 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。 詳情請參閱「查看機構政策」。強制執行自訂機構政策:
如要強制執行限制,請建立參照該限制的機構政策,然後將該政策套用至 Google Cloud 資源。控制台
- 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
- 在專案選擇工具中,選取要設定機構政策的專案。
- 在「Organization policies」(機構政策) 頁面上的清單中選取限制條件,即可查看該限制條件的「Policy details」(政策詳情) 頁面。
- 如要設定這項資源的機構政策,請按一下「管理政策」。
- 在「編輯政策」頁面中,選取「覆寫上層政策」。
- 按一下「新增規則」。
- 在「Enforcement」(強制執行) 區段中,選取是否要強制執行這項機構政策。
- 選用:如要根據標記設定機構政策條件,請按一下「新增條件」。請注意,如果將條件式規則新增至組織政策,您必須新增至少一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定組織政策」。
- 按一下「測試變更」,模擬機構政策的影響。舊版受管理限制不支援政策模擬。詳情請參閱「 使用 Policy Simulator 測試組織政策變更」。
- 如要完成並套用機構政策,請按一下「設定政策」。這項政策最多需要 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。
主控台
如要設定包含網域限制的機構政策,請按照下列步驟操作:
前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
在專案選擇工具中,選取要設定機構政策的機構資源。
在「機構政策」頁面,從限制清單中選取「網域限制共用」。
在「政策詳情」頁面中,按一下「管理政策」。
在「套用對象」下方,選取「覆寫上層政策」。
點選「新增規則」。
在「政策值」下方,選取「自訂」。
在「政策類型」下方,選取「允許」。
在「自訂值」下方,在欄位中輸入機構資源 ID 或 Google Workspace 客戶 ID。
輸入機構資源 ID 後,下列主體就能在您的機構中獲得角色:
- 貴機構中的所有員工身分集區
- 機構中任何專案的所有服務帳戶和工作負載身分池
- 與貴機構資源相關聯的所有服務代理程式。
輸入 Google Workspace 客戶 ID 後,下列主體就能在貴機構中獲派角色:
- 與 Google Workspace 客戶 ID 相關聯的所有網域中的所有身分
- 貴機構中的所有員工身分集區
- 機構中任何專案的所有服務帳戶和工作負載身分池
- 與貴機構資源相關聯的所有服務代理程式。
如要新增多個 ID,請按一下「新增政策值」建立額外欄位。
按一下 [完成]。
如要根據標記設定網域限制條件,請按一下「新增條件」。
在「Title」(名稱) 欄位中,輸入條件名稱。
在「說明」欄位中,為條件加上說明。說明會提供必要標記的相關資訊,以及這些標記對資源的影響。
您可以使用條件建立工具建立條件,規定必須有特定標記,限制才會生效。
在「條件建構工具」分頁的「條件類型」選單中, 選取「代碼」。
選取條件的運算子。如要比對整個標記,請使用「相符」運算子。如要比對標記鍵和標記值,請使用「符合 ID」運算子。
如果選取「相符」運算子,請輸入標記的命名空間名稱值。如果您選取「符合 ID」運算子,請輸入鍵和值 ID。
按一下「新增」即可建立多個條件。如要新增其他條件,可以切換「And」,將條件邏輯設為要求所有條件都必須符合。您可以切換「或」,將條件式邏輯設為只要符合其中一個條件即可。
如要刪除運算式,請按一下條件欄位右側的大「X」X。
編輯完條件後,按一下「儲存」。
如要強制執行這項政策,請按一下「設定政策」。
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
舊版受管理限制時,作業將會失敗且會顯示錯誤訊息。
主控台
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,請執行下列操作:
- 前往 Google Cloud 控制台:
- 在頁面頂端的專案選擇工具中,選取您的機構資源。
- 按一下右側的「更多」,然後點選「設定」。
「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_NAME
、ID
(機構 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 用戶端:
- 取得
https://www.googleapis.com/auth/admin.directory.customer.readonly
範圍的 OAuth 存取權杖。 執行下列指令,查詢 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 |
|
將 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」。
公開分享其他資料
如果您使用自訂機構政策實作網域限定共用,可以為機構政策新增例外狀況,允許公開共用資料。
公開分享資料時,會涉及特殊主體 allUsers
和 allAuthenticatedUsers
。如果您在使用網域限制共用功能時,需要公開共用資料,則必須為這些主體新增例外狀況。只有在使用自訂機構政策實作網域限定共用時,才能新增例外狀況。
如要為 allUsers
和 allAuthenticatedUsers
新增例外狀況,請在限制的條件運算式中使用 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
帳戶強制存取
如果您需要強制執行違反網域限制的專案帳戶存取:
移除包括網域限制的機構政策。
授予帳戶存取專案的權限。
再次在機構政策中實施網域限制。
或者,您也可以將存取權授予包含相關服務帳戶的 Google 群組:
在允許的網域內建立一個 Google 群組。
使用 Google Workspace 管理員面板關閉該群組的網域限制。
將服務帳戶新增至群組。
在允許政策中將存取權授予 Google 群組。