本頁面說明如何使用「組織政策服務」自訂限制條件,限制對下列 Google Cloud 資源執行的特定作業:
iam.googleapis.com/AllowPolicy
如要進一步瞭解組織政策,請參閱「自訂組織政策」。
關於組織政策和限制
Google Cloud 組織政策服務可讓您透過程式輔助,集中控管組織的資源。組織政策管理員可以定義組織政策,也就是一組稱為「限制」的限制條件,適用於Google Cloud 資源和這些資源在Google Cloud 資源階層中的子系。您可以在組織、資料夾或專案層級,強制執行組織政策。
組織政策提供各種 Google Cloud 服務的內建代管限制。不過,如要更精細地自訂組織政策中受限的特定欄位,您也可以建立「自訂限制」,並用於組織政策。
政策繼承
根據預設,您強制執行政策的資源子系會繼承組織政策。舉例來說,如果您對資料夾強制執行政策, Google Cloud 會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為及變更方式,請參閱「階層評估規則」。
優點
您可以透過參照 IAM 屬性的自訂組織政策,控管允許政策的修改方式。具體來說,您可以控管下列項目:
- 哪些人可以獲得角色
- 哪些人的角色可以撤銷
- 可授予的角色
- 可撤銷哪些角色
舉例來說,您可以禁止將含有 admin 字詞的角色授予電子郵件地址結尾為 @gmail.com 的主體。
限制
在模擬測試模式中,參照 IAM 屬性的自訂組織政策有一些限制。也就是說,涉及
setIamPolicy方法的違規稽核記錄可能缺少下列欄位:resourceNameserviceNamemethodName
系統不會針對所有與 IAM 相關的自訂組織政策違規事項產生稽核記錄。也就是說,如果自訂組織政策導致組織資源的
setIamPolicy作業失敗,Google Cloud 就不會為該事件產生稽核記錄。參照 IAM 屬性的自訂組織政策不會影響下列項目:
- Cloud Storage ACL 預設授予的權限。
- 自動授予 Cloud Storage 便利值和 BigQuery 預設資料集存取權的角色。
- 由預設允許政策授予的角色,例如專案建立者會自動獲得專案的擁有者角色 (
roles/owner)。
即使您有自訂組織政策,禁止授予擁有者角色 (
roles/owner),使用者仍可收到成為擁有者的邀請。不過,雖然自訂組織政策不會阻止傳送邀請,但會阻止受邀使用者取得擁有者角色。如果受邀使用者嘗試接受邀請,系統會顯示錯誤訊息,且不會授予擁有者角色。在 Google Cloud中執行某些動作 (例如建立資源或啟用 API) 時,系統會自動將角色授予服務代理或預設服務帳戶。如果動作涉及自動授予角色,而組織政策禁止授予該角色,則整個作業可能會失敗。
如果遇到這個問題,可以使用標記暫時停用限制,避免角色授予作業失敗。然後執行動作。動作完成後,請重新啟用限制。
事前準備
-
如要測試參照 IAM 資源的自訂組織政策,請建立新專案。在現有專案中測試這些組織政策,可能會干擾安全性工作流程。
必要的角色
如要取得管理組織政策所需的權限,請要求管理員授予您下列 IAM 角色:
- 組織的組織政策管理員 (
roles/orgpolicy.policyAdmin) -
測試本頁所述的組織政策:專案的專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備管理組織政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
必須具備下列權限,才能管理組織政策:。
-
orgpolicy.*組織 -
在專案
resourcemanager.projects.setIamPolicy測試本頁所述的組織政策
Identity and Access Management 支援的資源
IAM 支援 AllowPolicy 資源。這項資源具有 resources.bindings 屬性,會針對修改資源允許政策的所有方法傳回。所有修改資源允許政策的方法都以 setIamPolicy 結尾。
resource.bindings 屬性的結構如下,其中 BINDINGS 是在變更允許政策時修改的角色繫結陣列:
{
"bindings": {
BINDINGS
}
}
resource.bindings 中的每個繫結都具有下列結構,其中 ROLE 是角色繫結中的角色名稱,MEMBERS 則是從角色繫結中新增或移除的所有主體 ID 清單:
{
"role": "ROLE"
"members": {
MEMBERS
}
}
如要查看主體 ID 的格式,請參閱「主體 ID」。
您只能使用支援的函式評估 resource.bindings 屬性及其欄位。不支援其他運算子和函式,例如 ==、!=、in、contains、startsWith 和 endsWith。
支援的函式
您可以使用下列 CEL 函式,評估繫結中的個別角色和成員。
如要評估 bindings 陣列中的所有繫結,或 members 陣列中的所有成員,請使用 all 和 exists 巨集。詳情請參閱本頁的「用於評估清單的巨集」一節。
您也可以使用邏輯運算子 && (and) 和 || (or) 編寫多部分條件。
| 函式 | 說明 |
|---|---|
RoleNameMatches(
bool
|
如果角色
|
RoleNameStartsWith(
bool
|
如果角色
|
RoleNameEndsWith(
bool
|
如果角色
|
RoleNameContains(
bool
|
如果角色
|
MemberSubjectMatches(
bool
|
如果成員
如果
|
MemberSubjectStartsWith(
bool
|
如果成員
如果
|
MemberSubjectEndsWith(
bool
|
如果成員
如果
|
MemberInPrincipalSet(
bool
|
如果成員屬於至少一個列出的主體集,則傳回
|
MemberTypeMatches(
bool
|
如果成員是列出的主體類型之一,則傳回
|
評估清單的巨集
使用 all 和 exists 巨集,評估項目清單的條件運算式。
| 微距 | 說明 |
|---|---|
list.all(
bool
|
如果
這個巨集通常用於具有
|
list.exists(
bool
|
如果
這個巨集通常用於具有
|
含有巢狀清單的條件
一般來說,如果條件包含巢狀清單,則條件中的所有清單都應使用相同的巨集。
請見以下範例:
- 如果政策具有
actionTypeALLOW,請針對members清單和bindings清單使用all巨集,確保只有在所有修改後的繫結中,所有成員都符合條件時,才允許修改政策。 - 如果政策具有
actionTypeDENY,請針對members清單和bindings清單使用exists巨集,確保在任何修改後的繫結中,只要有「任何」成員符合條件,就不允許修改政策。
在單一條件中混用巨集,可能會導致條件無法按照預期運作。
舉例來說,假設您想禁止將角色授予 example.com 組織外部的成員,example.com 組織的 ID 為 123456789012。
為達成這個目標,您需要編寫下列條件:
不建議使用 - 條件設定錯誤
"resource.bindings.all(
binding,
binding.members.exists(member,
MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/123456789012'])
)
)"
這項條件似乎會防止將角色授予 example.com 組織以外的成員。不過,如果每個修改後的角色繫結中,有「任何」成員屬於 example.com 機構,條件就會評估為 true。因此,如果您將某個角色授予 example.com 組織中的成員,仍可將相同角色授予 example.com 組織外部的成員。
舉例來說,即使其中一個成員不在 example.com 組織中,下列繫結集的條件仍會評估為 true:
"bindings": [ { "members": [ "user:raha@altostrat.com", "user:jie@example.com" ], "role": "roles/resourcemanager.projectCreator" } ],
建議改用下列條件:
建議:正確設定的條件
"resource.bindings.all(
binding,
binding.members.all(member,
MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/123456789012'])
)
)"
對 members.bindings 陣列和 resource.bindings 陣列使用 all 巨集,可確保只有在所有繫結中的所有成員都位於 example.com 主體集時,條件才會評估為 true。
MemberTypeMatches 支援的主體類型
MemberTypeMatches 函式會要求您指定指定成員必須符合的主體類型。
下表列出可輸入的主體類型,以及該主體類型的說明。並列出與各主體類型對應的主體 ID。這些 ID 是 IAM 政策中使用的值。
| 主體類型 | 說明 | 主體 ID |
|---|---|---|
iam.googleapis.com/ |
個人 Google 帳戶。這類帳戶的電子郵件地址通常以 gmail.com 結尾。
|
user:USER_EMAIL_ADDRESS |
iam.googleapis.com/ |
Cloud Identity 或 Google Workspace 帳戶中的 Google 帳戶。這類帳戶也稱為 受管理使用者帳戶。 | user:USER_EMAIL_ADDRESS |
iam.googleapis.com/ |
由個人 Google 帳戶建立的
Google 群組。這些群組不屬於 Cloud Identity 或 Google Workspace 帳戶。這些群組的電子郵件地址通常會以 googlegroups.com 結尾。
|
group:GROUP_EMAIL_ADDRESS |
iam.googleapis.com/ |
由 Cloud Identity 或 Google Workspace 帳戶擁有的 Google 群組。 | group:GROUP_EMAIL_ADDRESS |
iam.googleapis.com/ |
Cloud Identity 或 Google Workspace 帳戶。 | domain:DOMAIN |
iam.googleapis.com/ |
員工身分集區中的單一主體。 | principal://iam.googleapis.com/ |
iam.googleapis.com/ |
主體集,包含員工身分集區中的一組身分。例如,包含員工身分集區中所有主體的主體集。 |
|
iam.googleapis.com/ |
workload identity 集區中的單一身分 | principal://iam.googleapis.com/projects/ |
iam.googleapis.com/ |
主體集,包含 workload identity pool 中的一組身分。例如,包含 workload identity pool 中所有主體的主體集。 |
|
iam.googleapis.com/ |
任何服務帳戶。服務帳戶是一種特殊類型的帳戶,代表工作負載而非人類使用者。
在 |
serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS |
iam.googleapis.com/ |
任何服務代理。服務代理是 Google Cloud 建立及管理的特殊服務帳戶。在專案中獲得角色後,服務代理可讓 Google Cloud 服務代您執行動作。 | serviceAccount:SERVICE_AGENT_EMAIL_ADDRESS |
iam.googleapis.com/ |
主體 allUsers 和 allAuthenticatedUsers。 |
|
iam.googleapis.com/ |
根據授予的角色定義的主體。這些主體也稱為「便利值」。 |
|
iam.googleapis.com/ |
具有內建身分的資源。 | 「單一資源的主體 ID」中列出的任何主體 ID。 |
iam.googleapis.com/ |
具有內建身分且共用特定特徵 (例如類型或祖系) 的資源。 | 「資源集的主體 ID」中列出的任何 ID。 |
iam.googleapis.com/AgenticIdentityPoolPrincipal |
單一代理身分。 |
|
iam.googleapis.com/AgenticIdentityPoolPrincipalSet |
包含一組代理身分的主體集。 |
範例: |
設定自訂限制
自訂限制是在 YAML 檔案中定義,其中包含您要強制執行組織政策的服務所支援的資源、方法、條件和動作。自訂限制的條件是使用一般運算語言 (CEL) 來定義。如要進一步瞭解如何使用 CEL 在自訂限制中建構條件,請參閱「建立及管理自訂限制」的 CEL 相關章節。
控制台
如要建立自訂限制,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
- 在專案挑選器中,選取要設定組織政策的專案。
- 按一下「 Custom constraint」(自訂限制)。
- 在「Display name」(顯示名稱) 方塊中,輸入人類可讀的限制名稱。這個名稱會用於錯誤訊息,可用於識別和偵錯。請勿在顯示名稱中使用個人識別資訊 (PII) 或機密資料,因為這類名稱可能會在錯誤訊息中曝光。這個欄位最多可包含 200 個字元。
-
在「Constraint ID」(限制 ID) 方塊中,輸入新自訂限制的 ID。自訂限制只能包含英文字母 (包括大小寫) 或數字,例如
custom.denyProjectIAMAdmin。這個欄位最多可包含 70 個字元,不含前置字元 (custom.),例如organizations/123456789/customConstraints/custom。請勿在限制 ID 中輸入 PII 或機密資料,因為錯誤訊息可能會顯示上述資訊。 - 在「Description」(說明) 方塊中,輸入人類可讀的限制說明。違反政策時,系統會將這段說明做為錯誤訊息顯示。請詳細說明違反政策的原因,以及如何解決違規問題。請勿在說明中輸入 PII 或機密資料,因為錯誤訊息可能會顯示上述資訊。這個欄位最多可輸入 2000 個字元。
-
在「Resource type」(資源類型) 方塊中,選取包含要限制的物件和欄位的 Google Cloud REST 資源名稱,例如
container.googleapis.com/Cluster。大多數資源類型最多支援 20 項自訂限制。如果嘗試建立更多自訂限制,作業會失敗。 -
在「Enforcement method」(強制執行方法) 下方,選取要對 REST
CREATE方法強制執行限制,還是同時對CREATE和UPDATE方法強制執行限制。如果使用UPDATE方法對違反限制的資源強制執行限制,組織政策會禁止對該資源進行變更,除非變更可解決違規問題。 - 如要定義條件,請按一下 「Edit condition」(編輯條件)。
-
在「Add condition」(新增條件) 面板中,建立參照支援服務資源的 CEL 條件,例如
resource.management.autoUpgrade == false。這個欄位最多可輸入 1000 個字元。如要進一步瞭解 CEL 的用法,請參閱 一般運算語言。如要進一步瞭解可在自訂限制中使用的服務資源,請參閱「 支援自訂限制的服務」。 - 按一下 [儲存]。
- 在「Action」下方,選取是否要在符合條件時允許或拒絕評估的方法。
- 按一下「Create constraint」(建立限制)。
如要查看各項服務支援的方法,請在「 支援自訂限制的服務」中找到該服務。
「拒絕」動作表示如果條件評估為 true,系統會禁止建立或更新資源。
「允許」動作表示只有在條件評估為 true 時,才允許建立或更新資源。除了條件中明確列出的情況外,其他所有情況都會遭到封鎖。
在每個欄位中輸入值後,右側會顯示這項自訂限制的對等 YAML 設定。
gcloud
- 如要建立自訂限制,請使用下列格式建立 YAML 檔案:
-
ORGANIZATION_ID:組織 ID,例如123456789。 -
CONSTRAINT_NAME:新自訂限制的名稱。自訂限制只能包含英文字母 (包括大小寫) 或數字,例如custom.denyProjectIAMAdmin。這個欄位最多可包含 70 個字元,不含前置字元 (custom.),例如organizations/123456789/customConstraints/custom。請勿在限制 ID 中輸入 PII 或機密資料,因為錯誤訊息可能會顯示上述資訊。 -
RESOURCE_NAME:內含要限制的物件和欄位的 Google Cloud資源完整名稱,例如:iam.googleapis.com/AllowPolicy。大多數資源類型最多支援 20 項自訂限制。如果嘗試建立更多自訂限制,作業會失敗。 -
methodTypes:強制執行限制的 REST 方法。可以是CREATE,或同時為CREATE和UPDATE。如果使用UPDATE方法對違反限制的資源強制執行限制,組織政策會禁止變更該資源,除非變更可解決違規問題。 -
CONDITION:針對支援服務資源表示法所撰寫的 CEL 條件。這個欄位最多可輸入 1000 個字元。例如:。resource.bindings.exists(binding, RoleNameMatches(binding.role, ['roles/resourcemanager.projectIamAdmin'])) -
ACTION:符合condition時採取動作。可能的值為ALLOW和DENY。 -
DISPLAY_NAME:人類可讀的限制名稱。這個名稱會用於錯誤訊息,可用於識別和偵錯。請勿在顯示名稱中使用 PII 或機密資料,因為這類名稱可能會在錯誤訊息中顯示。這個欄位最多可輸入 200 個字元。 -
DESCRIPTION:違反政策時,會以錯誤訊息形式顯示且易於理解的限制說明。這個欄位最多可包含 2000 個字元。 -
為新的自訂限制建立 YAML 檔案後,您必須加以設定,才能用於組織的組織政策。如要設定自訂限制,請使用
gcloud org-policies set-custom-constraint指令: -
如要確認是否存在自訂限制,請使用
gcloud org-policies list-custom-constraints指令:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: RESOURCE_NAME methodTypes: - CREATE
- UPDATE condition: "CONDITION" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
更改下列內容:
如要查看各項服務支援的方法,請在「 支援自訂限制的服務」中找到該服務。
如要進一步瞭解可編寫條件的資源,請參閱「支援的資源」。
「允許」動作代表如果條件評估為 true,則允許建立或更新資源。這也表示除了條件中明確列出的情況外,其他所有情況都會遭到封鎖。
「拒絕」動作是指如果條件評估結果為 true,系統就會禁止建立或更新資源。
gcloud org-policies set-custom-constraint CONSTRAINT_PATH
請將 CONSTRAINT_PATH 替換成自訂限制檔案的完整路徑,例如:/home/user/customconstraint.yaml。
這項作業完成後,自訂限制會顯示在 Google Cloud 組織政策清單中,供組織政策使用。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
將 ORGANIZATION_ID 替換為組織資源的 ID。
詳情請參閱「 查看組織政策」。
強制執行自訂組織政策
如要強制執行限制,請建立參照該限制的組織政策,然後將組織政策套用至 Google Cloud 資源。控制台
- 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。
- 在專案挑選器中,選取要設定組織政策的專案。
- 在「Organization policies」(組織政策) 頁面的清單中選取限制,即可查看該限制的「Policy details」(政策詳細資料) 頁面。
- 如要為這項資源設定組織政策,請按一下「Manage policy」(管理政策)。
- 在「Edit policy」(編輯政策) 頁面,選取「Override parent's policy」(覆寫上層政策)。
- 按一下「Add a rule」(新增規則)。
- 在「Enforcement」(強制執行) 部分,選取是否要強制執行這項組織政策。
- 選用:如要根據標記設定組織政策的條件,請按一下「Add condition」(新增條件)。請注意,如果為組織政策新增條件式規則,您必須至少新增一項無條件規則,否則無法儲存政策。詳情請參閱「 使用標記設定組織政策範圍」。
- 如要在模擬測試模式下強制執行組織政策,請按一下「Set dry run policy」(設定模擬測試政策)。詳情請參閱「 測試組織政策」。
- 確認組織政策在模擬測試模式下運作正常後,請按一下「Set policy」(設定政策),設定正式政策。
gcloud
- 如要建立含有布林值規則的組織政策,請建立參照限制的政策 YAML 檔案:
-
PROJECT_ID:要強制執行限制的專案。 -
CONSTRAINT_NAME:要為自訂限制定義的名稱,例如:custom.denyProjectIAMAdmin。 -
如要在模擬測試模式中強制執行組織政策,請執行下列指令並加上
dryRunSpec旗標: -
確認模擬測試模式中的組織政策運作正常後,請使用
org-policies set-policy指令和spec旗標設定正式政策:
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
更改下列內容:
gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
請將 POLICY_PATH 替換為組織政策 YAML 檔案的完整路徑。政策最多需要 15 分鐘才會生效。
gcloud org-policies set-policy POLICY_PATH --update-mask=spec
請將 POLICY_PATH 替換為組織政策 YAML 檔案的完整路徑。政策最多需要 15 分鐘才會生效。
測試自訂組織政策
您也可以選擇測試組織政策,方法是設定政策,然後嘗試執行政策應禁止的操作。
建立限制
將下列檔案儲存為
constraint-deny-project-iam-admin。name: organizations/ORG_ID/customConstraints/custom.denyProjectIAMAdmin resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameMatches(binding.role, ['roles/resourcemanager.projectIamAdmin']) && binding.members.exists(member, MemberSubjectMatches(member, ['user:EMAIL_ADDRESS']) ) )" actionType: DENY displayName: Do not allow EMAIL_ADDRESS to be granted the Project IAM Admin role.替換下列值:
ORG_ID:Google Cloud 組織的數字 ID。MEMBER_EMAIL_ADDRESS:要用來測試自訂限制的主體電子郵件地址。限制生效期間,您無法在強制執行限制的專案中,將專案 IAM 管理員角色 (roles/resourcemanager.projectIamAdmin) 授予這個主體。
套用限制:
gcloud org-policies set-custom-constraint ~/constraint-deny-project-iam-admin.yaml確認限制是否存在:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
建立政策
將下列檔案儲存為
policy-deny-project-iam-admin.yaml:name: projects/PROJECT_ID/policies/custom.denyProjectIamAdmin spec: rules: - enforce: true將
PROJECT_ID替換為專案 ID。套用政策:
gcloud org-policies set-policy ~/policy-deny-project-iam-admin.yaml確認政策是否存在:
gcloud org-policies list --project=PROJECT_ID
套用政策後,請等待約兩分鐘, Google Cloud 就會開始強制執行政策。
測試政策
請嘗試將專案 IAM 管理員角色 (roles/resourcemanager.projectIamAdmin) 授予您在自訂限制中加入電子郵件地址的主體。執行指令前,請先替換下列值:
PROJECT_ID:強制執行限制的 Google Cloud專案 IDEMAIL_ADDRESS:建立組織政策限制時指定的主體電子郵件地址。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL_ADDRESS --role=roles/resourcemanager.projectIamAdmin
輸出內容如下:
Operation denied by custom org policies: ["customConstraints/custom.denyProjectIAMAdmin": "EMAIL_ADDRESS can't be granted the Project IAM Admin role."]
常見用途的自訂組織政策範例
下表提供常見用途的一些自訂限制語法。
以下範例使用 CEL 巨集 all 和 exists。如要進一步瞭解這些巨集,請參閱「評估清單的巨集」。
| 說明 | 限制語法 |
|---|---|
| 禁止授予特定角色。 |
name: organizations/ORG_ID/customConstraints/custom.denyRole resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameMatches(binding.role, ['ROLE']) )" actionType: DENY displayName: Do not allow the ROLE role to be granted |
| 僅允許授予特定角色。 |
name: organizations/ORG_ID/customConstraints/custom.specificRolesOnly resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, RoleNameMatches(binding.role, ['ROLE_1', 'ROLE_2']) )" actionType: ALLOW displayName: Only allow the ROLE_1 role and ROLE_2 role to be granted |
禁止授予任何開頭為 roles/storage. 的角色。 |
name: organizations/ORG_ID/customConstraints/custom.dontgrantStorageRoles resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameStartsWith(binding.role, ['roles/storage.']) )" actionType: DENY displayName: Prevent roles that start with "roles/storage." from being granted |
防止撤銷名稱中含有 admin 的任何角色。 |
name: organizations/ORG_ID/customConstraints/custom.dontRevokeAdminRoles resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - REMOVE_GRANT condition: "resource.bindings.exists( binding, RoleNameContains(binding.role, ['admin']) )" actionType: DENY displayName: Prevent roles with "admin" in their names from being revoked |
| 僅允許將角色授予特定主體。 |
name: organizations/ORG_ID/customConstraints/custom.allowSpecificPrincipals resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, binding.members.all(member, MemberSubjectMatches(member, ['user:USER','serviceAccount:SERVICE_ACCOUNT']) ) )" actionType: ALLOW displayName: Only allow roles to be granted to USER and SERVICE_ACCOUNT |
| 防止特定主體的任何角色遭到撤銷。 |
name: organizations/ORG_ID/customConstraints/custom.denyRemovalOfSpecificPrincipals resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - REMOVE_GRANT condition: "resource.bindings.exists( binding, binding.members.exists(member, MemberSubjectMatches(member, ['user:USER_1','user:USER_2']) ) )" actionType: DENY displayName: Do not allow roles to be revoked from USER_1 or USER_2 |
禁止將角色授予電子郵件地址結尾為 @gmail.com 的主體。 |
name: organizations/ORG_ID/customConstraints/custom.dontGrantToGmail resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, binding.members.exists(member, MemberSubjectEndsWith(member, ['@gmail.com']) ) )" actionType: DENY displayName: Do not allow members whose email addresses end with "@gmail.com" to be granted roles |
| 只允許將特定角色授予特定主體。 |
name: organizations/ORG_ID/customConstraints/custom.allowSpecificRolesAndPrincipals resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, RoleNameMatches(binding.role, ['ROLE_1', 'ROLE_2']) && binding.members.all(member, MemberSubjectMatches(member, ['serviceAccount:SERVICE_ACCOUNT', 'group:GROUP']) ) )" actionType: ALLOW displayName: Only allow ROLE_1 and ROLE_2 to be granted to SERVICE_ACCOUNT and GROUP |
禁止將 Cloud Storage 角色授予 allUsers 和 allAuthenticatedUsers。 |
name: organizations/ORG_ID/customConstraints/custom.denyStorageRolesForPrincipalAllUsers resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.exists( binding, RoleNameStartsWith(binding.role, ['roles/storage.']) && binding.members.exists(member, MemberSubjectMatches(member, ['allUsers', 'allAuthenticatedUsers']) ) )" actionType: DENY displayName: Do not allow storage roles to be granted to allUsers or allAuthenticatedUsers |
| 防止機構外部的任何身分獲派角色。 |
name: organizations/ORG_ID/customConstraints/custom.allowInternaldentitiesOnly resourceTypes: iam.googleapis.com/AllowPolicy 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 |
| 僅允許將角色授予服務帳戶。 |
name: organizations/ORG_ID/customConstraints/custom.allowServiceAccountsOnly resourceTypes: iam.googleapis.com/AllowPolicy methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, binding.members.all(member, MemberTypeMatches(member, ['iam.googleapis.com/ServiceAccount']) ) )" actionType: ALLOW displayName: Only allow service accounts to be granted roles |
| 防止從角色繫結中移除 Google 代管服務代理。 |
name: organizations/ORG_ID/customConstraints/custom.denyRemovalOfGoogleManagedServiceAgents resource_types: iam.googleapis.com/AllowPolicy method_types: - REMOVE_GRANT condition: |- resource.bindings.all( binding, binding.members.all(member, MemberTypeMatches(member, ['iam.googleapis.com/ServiceAgent']) ) ) action_type: DENY display_name: Deny Removal Of Google-Managed Service Agents description: Restricts the removal of Google-managed service agents from role bindings. Please reach out to your organization admins for if you have any questions. |
條件式組織政策
您可以使用標記,為自訂組織政策設定條件。舉例來說,假設您編寫了下列自訂限制,禁止授予任何開頭為 roles/storage. 的角色:
name: organizations/ORG_ID/customConstraints/custom.dontgrantStorageRoles
resourceTypes: iam.googleapis.com/AllowPolicy
methodTypes:
- CREATE
- UPDATE
condition:
"resource.bindings.exists(
binding,
RoleNameStartsWith(binding.role, ['roles/storage.'])
)"
actionType: DENY
displayName: Prevent roles that start with "roles/storage." from being granted
如要依條件強制執行限制,您可以建立如下的組織政策:
name: organizations/ORG_ID/policies/custom.dontgrantStorageRoles
spec:
rules:
- condition:
expression: "resource.matchTag('ORG_ID/environment', 'dev')"
enforce: true
- enforce: false
這項組織政策會禁止將開頭為 roles/storage. 的角色,授予任何同時具有 environment=dev 標記的資源。