這個頁面說明如何使用組織政策服務自訂限制,限制下列 Cloud de Confiance by S3NS 資源的特定作業:
accesscontextmanager.googleapis.com/AccessPolicyaccesscontextmanager.googleapis.com/AccessLevelaccesscontextmanager.googleapis.com/AuthorizedOrgsDescaccesscontextmanager.googleapis.com/ServicePerimeter
如要進一步瞭解組織政策,請參閱這篇文章。
關於組織政策和限制
Cloud de Confiance 組織政策服務可讓您透過程式,集中控管組織的資源。組織政策管理員可以定義組織政策,也就是一組稱為「限制」的限制,適用於Cloud de Confiance 資源和這些資源在 Cloud de Confiance by S3NS 資源階層中的子系。您可以在組織、資料夾或專案層級強制執行組織政策。
組織政策為各種 Cloud de Confiance 服務提供內建的代管限制。不過,如要更精細地自訂組織政策中受限的特定欄位,您也可以建立「自訂限制」,並用於組織政策。
政策繼承
根據預設,您強制執行政策的資源子系會繼承組織政策。舉例來說,如果您對資料夾強制執行政策, Cloud de Confiance 會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為以及如何變更,請參閱這篇文章。
事前準備
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
-
Install the Google Cloud CLI.
-
設定 gcloud CLI 以使用您的聯合身分。
詳情請參閱「使用聯合身分登入 gcloud CLI」一文。
-
如要初始化 gcloud CLI,請執行下列指令:
gcloud init - 請確認您知道組織 ID。
ORGANIZATION_ID:您的組織 ID,例如123456789。CONSTRAINT_NAME:新自訂限制的名稱。自訂限制必須以custom.開頭,且只能包含大/小寫英文字母或數字,例如custom.disableCustomAccessLevels。這個欄位的長度上限為 70 個字元。RESOURCE_NAME:內含您要限制的物件或欄位的Cloud de Confiance 資源完整名稱,例如:accesscontextmanager.googleapis.com/AccessLevel。CONDITION:針對支援服務資源表示法所撰寫的 CEL 條件。這個欄位的長度上限為 1000 個字元。如要進一步瞭解可編寫條件的資源,請參閱這一節。例如"resource.basic.conditions.exists(c, has(c.devicePolicy))"。ACTION:符合condition時採取動作。 可能的值為ALLOW和DENY。DISPLAY_NAME:限制的易記名稱。這個欄位的長度上限為 200 個字元。DESCRIPTION:違反政策時,要以錯誤訊息形式顯示的限制說明。這個欄位的長度上限為 2000 個字元。- 前往 Cloud de Confiance 控制台的「Organization policies」(組織政策) 頁面。
- 在專案選擇工具中,選取要設定組織政策的專案。
- 在「Organization policies」(組織政策) 頁面上的清單中選取限制,即可查看該限制的「Policy details」(政策詳情) 頁面。
- 如要為這項資源設定組織政策,請按一下「Manage policy」(管理政策)。
- 在「Edit policy」(編輯政策) 頁面中,選取「Override parent's policy」(覆寫上層項目的政策)。
- 點按「Add a rule」(新增規則)。
- 在「Enforcement」(強制執行) 部分中,選取是否要強制執行這項組織政策。
- 選用:如要根據標記設定組織政策條件,請按一下「Add condition」(新增條件)。請注意,如果為組織政策新增條件式規則,您必須至少新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定組織政策」一文。
- 按一下「Test changes」(測試變更),模擬組織政策的影響。舊版代管限制不支援政策模擬功能。詳情請參閱「使用 Policy Simulator 測試組織政策變更」一文。
- 點按「Set policy」(設定政策),即可完成並套用組織政策。政策最多需要 15 分鐘才會生效。
-
PROJECT_ID:您要強制執行限制的專案。 -
CONSTRAINT_NAME:您為自訂限制定義的名稱,例如custom.disableCustomAccessLevels。 - 貴組織 ID
- 專案 ID
將下列檔案儲存為
constraint-disable_custom_access_level.yaml:name: organizations/ORGANIZATION_ID/customConstraints/custom.disableCustomAccessLevels resourceTypes: - accesscontextmanager.googleapis.com/AccessLevel methodTypes: - CREATE - UPDATE condition: "resource.basic.conditions.exists(c, has(c.devicePolicy))" actionType: DENY displayName: Deny basic access levels using `devicePolicy` description: Basic access levels must not use the `devicePolicy` attribute.請將
ORGANIZATION_ID替換成組織 ID。這項會定義限制,僅允許系統建立基本存取層級,並拒絕建立自訂存取層級的操作。
套用限制:
gcloud org-policies set-custom-constraint ~/constraint-disable_custom_access_level.yaml確認限制是否存在:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID輸出結果會與下列內容相似:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.disableCustomAccessLevels DENY CREATE accesscontextmanager.googleapis.com/AccessLevel Deny basic access levels using `devicePolicy` ...將下列檔案儲存為
policy-disable_custom_access_level.yaml:name: organizations/ORGANIZATION_ID/policies/custom.disableCustomAccessLevels spec: rules: - enforce: true請將
ORGANIZATION_ID替換成組織 ID。套用政策:
gcloud org-policies set-policy ~/policy-disable_custom_access_level.yaml確認政策是否存在:
gcloud org-policies list --organization=ORGANIZATION_ID輸出結果會與下列內容相似:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.disableCustomAccessLevels - SET COCsm5QGENiXi2E=將下列存取層級規格檔案儲存為
example_access_level.yaml:- devicePolicy: requireScreenlock: true建立存取層級:
gcloud access-context-manager levels create ACCESS_LEVEL_NAME --policy=ACCESS_POLICY_ID --title=ACCESS_LEVEL_TITLE --basic-level-spec=example_access_level.yaml更改下列內容:
ACCESS_LEVEL_NAME:存取層級的專屬名稱。ACCESS_POLICY_ID:貴組織存取權政策的 ID。ACCESS_LEVEL_TITLE:存取層級的簡短名稱。
想進一步瞭解如何建立基本存取層級,請參閱「建立基本存取層級」一文。
輸出結果會與下列內容相似:
ERROR: (gcloud.access-context-manager.levels.create) [USER] does not have permission to access accessPolicies instance [ACCESS_POLICY_ID] (or it may not exist): The caller does not have permission. This command is authenticated as USER which is the active account specified by the [core/account] property '@type': type.googleapis.com/google.rpc.DebugInfo detail: '[ORIGINAL ERROR] generic::permission_denied: com.google.apps.framework.request.ForbiddenException: The user is not authorized!'常見用途的自訂組織政策範例
下表提供一些常見自訂限制的語法範例。
說明 限制語法 停用範圍政策 name: organizations/ORGANIZATION_ID/customConstraints/custom.disableScopedPolicies resourceTypes: - accesscontextmanager.googleapis.com/AccessPolicy methodTypes: - CREATE - UPDATE condition: "size(resource.scopes) == 0" actionType: DENY displayName: Disable scoped policies description: Disables the creation of scoped policies.
停用自訂存取層級 name: organizations/ORGANIZATION_ID/customConstraints/custom.denyBasicAccessLevels resourceTypes: - accesscontextmanager.googleapis.com/AccessLevel methodTypes: - CREATE - UPDATE condition: "has(resource.custom)" actionType: ALLOW displayName: Disable custom access levels description: Disables the creation of custom access levels. Allows only basic access levels.
在自訂存取層級中停用 region_codename: organizations/ORGANIZATION_ID/customConstraints/custom.denyRegionCode resourceTypes: - accesscontextmanager.googleapis.com/AccessLevel methodTypes: - CREATE - UPDATE condition: "resource.custom.expr.expression.contains('region_code')" actionType: DENY displayName: Disable
region_codein custom access levels description: Disables the use ofregion_codeattribute in custom access levels.強制執行存取層級的詳細說明 name: organizations/ORGANIZATION_ID/customConstraints/custom.enforseVerboseDescriptioninAccessLevels resourceTypes: - accesscontextmanager.googleapis.com/AccessLevel methodTypes: - CREATE - UPDATE condition: "size(resource.description) < 50" actionType: DENY displayName: Enforce access level descriptions to have at least 50 characters description: Denies access levels with a short description. The access level description must be at least 50 characters long.
停用 perimeter bridge name: organizations/ORGANIZATION_ID/customConstraints/custom.denyBridgePerimeters resourceTypes: - accesscontextmanager.googleapis.com/ServicePerimeter methodTypes: - CREATE - UPDATE condition: "resource.perimeterType == 'PERIMETER_TYPE_BRIDGE'" actionType: DENY displayName: Disable perimeter bridges description: Disables the use of perimeter bridges. Instead, use ingress and egress rules.
VPC Service Controls 支援的資源
下表列出可在自訂限制中參照的 VPC Service Controls 資源。資源 欄位 accesscontextmanager.googleapis.com/AccessLevel resource.basic.combiningFunctionresource.basic.conditions.devicePolicy.allowedDeviceManagementLevelsresource.basic.conditions.devicePolicy.allowedEncryptionStatusesresource.basic.conditions.devicePolicy.osConstraints.minimumVersionresource.basic.conditions.devicePolicy.osConstraints.osTyperesource.basic.conditions.devicePolicy.osConstraints.requireVerifiedChromeOsresource.basic.conditions.devicePolicy.requireAdminApprovalresource.basic.conditions.devicePolicy.requireCorpOwnedresource.basic.conditions.devicePolicy.requireScreenlockresource.basic.conditions.ipSubnetworksresource.basic.conditions.membersresource.basic.conditions.negateresource.basic.conditions.regionsresource.basic.conditions.requiredAccessLevelsresource.custom.exprresource.descriptionresource.titleaccesscontextmanager.googleapis.com/AccessPolicy resource.parentresource.scopesresource.titleaccesscontextmanager.googleapis.com/AuthorizedOrgsDesc resource.assetTyperesource.authorizationDirectionresource.authorizationTyperesource.orgsaccesscontextmanager.googleapis.com/ServicePerimeter resource.descriptionresource.perimeterTyperesource.spec.accessLevelsresource.spec.egressPolicies.egressFrom.identitiesresource.spec.egressPolicies.egressFrom.identityTyperesource.spec.egressPolicies.egressFrom.sourceRestrictionresource.spec.egressPolicies.egressTo.externalResourcesresource.spec.egressPolicies.egressTo.operations.methodSelectors.methodresource.spec.egressPolicies.egressTo.operations.methodSelectors.permissionresource.spec.egressPolicies.egressTo.operations.serviceNameresource.spec.egressPolicies.egressTo.resourcesresource.spec.ingressPolicies.ingressFrom.identitiesresource.spec.ingressPolicies.ingressFrom.identityTyperesource.spec.ingressPolicies.ingressFrom.sources.accessLevelresource.spec.ingressPolicies.ingressFrom.sources.resourceresource.spec.ingressPolicies.ingressTo.operations.methodSelectors.methodresource.spec.ingressPolicies.ingressTo.operations.methodSelectors.permissionresource.spec.ingressPolicies.ingressTo.operations.serviceNameresource.spec.ingressPolicies.ingressTo.resourcesresource.spec.resourcesresource.spec.restrictedServicesresource.spec.vpcAccessibleServices.allowedServicesresource.spec.vpcAccessibleServices.enableRestrictionresource.status.accessLevelsresource.status.egressPolicies.egressFrom.identitiesresource.status.egressPolicies.egressFrom.identityTyperesource.status.egressPolicies.egressFrom.sourceRestrictionresource.status.egressPolicies.egressTo.externalResourcesresource.status.egressPolicies.egressTo.operations.methodSelectors.methodresource.status.egressPolicies.egressTo.operations.methodSelectors.permissionresource.status.egressPolicies.egressTo.operations.serviceNameresource.status.egressPolicies.egressTo.resourcesresource.status.ingressPolicies.ingressFrom.identitiesresource.status.ingressPolicies.ingressFrom.identityTyperesource.status.ingressPolicies.ingressFrom.sources.accessLevelresource.status.ingressPolicies.ingressFrom.sources.resourceresource.status.ingressPolicies.ingressTo.operations.methodSelectors.methodresource.status.ingressPolicies.ingressTo.operations.methodSelectors.permissionresource.status.ingressPolicies.ingressTo.operations.serviceNameresource.status.ingressPolicies.ingressTo.resourcesresource.status.resourcesresource.status.restrictedServicesresource.status.vpcAccessibleServices.allowedServicesresource.status.vpcAccessibleServices.enableRestrictionresource.titleresource.useExplicitDryRunSpec後續步驟
必要的角色
如要取得管理自訂組織政策所需的權限,請要求管理員授予您組織資源的組織政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。想進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」一文。
建立自訂限制
自訂限制是在 YAML 檔案中定義,其中包含您要強制執行組織政策的服務所支援的資源、方法、條件和動作。自訂限制的條件是使用一般運算語言 (CEL) 所定義。想進一步瞭解如何使用 CEL 在自訂限制中建構條件,請參閱「建立及管理自訂限制」一文的 CEL 一節。
如要建立自訂限制,請使用下列格式建立 YAML 檔案:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
更改下列內容:
想進一步瞭解如何建立自訂限制,請參閱這篇文章。
設定自訂限制
為新的自訂限制建立 YAML 檔案後,您必須加以設定,才能用於貴組織的組織政策。如要設定自訂限制,請使用gcloud org-policies set-custom-constraint 指令:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH 替換成自訂限制檔案的完整路徑,例如 /home/user/customconstraint.yaml。完成後,自訂限制就會顯示在 Cloud de Confiance by S3NS 組織政策清單中,供組織政策使用。如要確認是否存在自訂限制,請使用 gcloud org-policies list-custom-constraints 指令:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID 替換成組織資源的 ID。詳情請參閱「查看組織政策」一節。強制執行自訂組織政策
如要強制執行限制,請建立參照該限制的組織政策,然後將該政策套用至 Cloud de Confiance by S3NS 資源。控制台
gcloud
如要建立含有布林值規則的組織政策,請建立參照限制的政策 YAML 檔案:
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
更改下列內容:
如要強制執行包含限制的組織政策,請執行下列指令:
gcloud org-policies set-policy POLICY_PATH
將 POLICY_PATH 替換成組織政策 YAML 檔案的完整路徑。政策最多需要 15 分鐘才會生效。
測試自訂組織政策
下列範例會建立自訂限制和政策,拒絕特定組織中所有使用 devicePolicy 屬性的基本存取層級。
開始之前,請先確認您知曉下列資訊:
建立自訂限制
建立政策
套用政策後,請等待約兩分鐘, Cloud de Confiance 就會開始強制執行政策。