機構政策提供各種Google Cloud 服務的預先定義限制。不過,如要進一步自訂機構政策中受限制的特定欄位,也可以建立自訂機構政策。
優點
您可以使用自訂機構政策,允許或拒絕對服務帳戶和服務帳戶金鑰執行特定作業。舉例來說,您可以設定政策,拒絕建立具有特定來源的金鑰,導致任何建立具有該來源金鑰的要求失敗,並向使用者傳回錯誤。
政策繼承
根據預設,機構政策會由您強制執行政策的資源子系繼承。舉例來說,如果您對資料夾強制執行政策, Google Cloud 系統會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為及如何變更,請參閱「階層評估規則」。
事前準備
- 請確認您知道機構 ID。
-
如要測試參照 IAM 資源的自訂機構政策,請建立新專案。在現有專案中測試這些機構政策,可能會中斷安全性工作流程。
-
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
-
必要的角色
如要取得管理機構政策所需的權限,請要求管理員為您授予機構的機構政策管理員 (roles/orgpolicy.policyAdmin
) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這個預先定義的角色具備管理機構政策所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理組織政策,您必須具備下列權限:
-
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
建立自訂限制
自訂限制是在 YAML 檔案中定義,當中包含您要強制執行機構政策的服務所支援的資源、方法、條件和動作。自訂限制的條件是使用一般運算語言 (CEL) 定義。如要進一步瞭解如何使用 CEL 在自訂限制中建構條件,請參閱「建立及管理自訂限制」一文的 CEL 一節。
如要建立自訂限制的 YAML 檔案,請按照下列步驟操作:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- iam.googleapis.com/RESOURCE_TYPE
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
更改下列內容:
ORGANIZATION_ID
:您的機構 ID,例如123456789
。CONSTRAINT_NAME
:新自訂限制的名稱。自訂限制條件必須以custom.
開頭,且只能包含大寫英文字母、小寫英文字母或數字,例如 custom.denyServiceAccountCreation。這個欄位的長度上限為 70 個字元,不含前置字元,例如organizations/123456789/customConstraints/custom
。RESOURCE_TYPE
:包含您要限制的物件和欄位的 Identity and Access Management API REST 資源名稱 (而非 URI)。例如 ServiceAccount。CONDITION
:針對支援服務資源的代表項目編寫的 CEL 條件。這個欄位的長度上限為 1000 個字元。如要進一步瞭解可編寫條件的資源,請參閱「支援的資源」。例如:"resource.description.contains('INVALID_DESCRIPTION')"
。ACTION
:如果符合condition
,則要採取的動作。可以是ALLOW
或DENY
。DISPLAY_NAME
:限制條件的易記名稱。這個欄位的長度上限為 200 個字元。DESCRIPTION
:違反政策時,要以錯誤訊息形式顯示的限制說明。這個欄位的長度上限為 2000 個字元。
如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。
設定自訂限制
為新的自訂限制建立 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
:您為自訂限制定義的名稱。例如:custom.denyServiceAccountCreation
。
如要強制執行包含限制的機構政策,請執行下列指令:
gcloud org-policies set-policy POLICY_PATH
將 POLICY_PATH
替換為機構政策 YAML 檔案的完整路徑。這項政策最多需要 15 分鐘才會生效。
測試自訂機構政策
(選用) 您可以設定機構政策,然後嘗試執行政策應禁止的動作,藉此測試政策。
本節說明如何測試下列機構政策限制:
name: organizations/ORG_ID/customConstraints/custom.denyServiceAccountCreation
resourceTypes: iam.googleapis.com/ServiceAccount
methodTypes:
- CREATE
- UPDATE
condition:
"resource.description.contains('INVALID_DESCRIPTION')"
actionType: DENY
displayName: Do not allow service account with INVALID_DESCRIPTION to be created.
如要測試這項自訂限制,請按照下列步驟操作:
將限制複製到 YAML 檔案中,並替換下列值:
ORG_ID
:您Google Cloud 機構的數值 ID。INVALID_DESCRIPTION
:您要用來測試自訂限制的說明。限制生效期間,系統不會在您強制執行限制的專案中,建立說明含有這個字串的服務帳戶。
請嘗試建立服務帳戶,並加入您在自訂限制中提供的說明。執行指令前,請先取代下列值:
SERVICE_ACCOUNT_NAME
:服務帳戶名稱INVALID_DESCRIPTION
:要檢查服務帳戶說明中是否含有無效字串DISPLAY_NAME
:要在 Google Cloud 控制台中顯示的服務帳戶名稱
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \ --description="INVALID_DESCRIPTION" --display-name="DISPLAY_NAME"
輸出內容如下:
Operation denied by custom org policy: ["customConstraints/custom.denyServiceAccountCreation": "Do not allow service account with INVALID_DESCRIPTION to be created."]
身分與存取權管理支援的資源和作業
建立或更新帳戶或金鑰時,可以使用下列服務帳戶和服務帳戶金鑰自訂限制欄位。
- 服務帳戶
resource.description
resource.displayName
resource.name
- 格式:
projects/PROJECT_ID/serviceAccounts/UNIQUE_ID
- 格式:
- 服務帳戶金鑰
resource.keyOrigin
resource.keyType
resource.name
- 格式:
projects/PROJECT_ID/serviceAccounts/UNIQUE_ID/keys/KEY_ID
- 格式:
常見用途的自訂機構政策範例
下表提供常見用途的一些自訂限制語法:
如要進一步瞭解可在自訂限制條件中使用的 CEL 巨集,請參閱「一般運算語言」。
說明 | 限制語法 |
---|---|
停用服務帳戶建立功能。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.disableServiceAccountCreation resourceTypes: - iam.googleapis.com/ServiceAccount methodTypes: - CREATE condition: "True" actionType: DENY displayName: Deny all service account creation. |
停用服務帳戶金鑰建立功能。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.disableServiceAccountKeyCreation resourceTypes: - iam.googleapis.com/ServiceAccountKey methodTypes: - CREATE condition: "resource.keyType == USER_MANAGED && resource.keyOrigin == GOOGLE_PROVIDED" actionType: DENY displayName: Deny all service account key creation. |
停用服務帳戶金鑰上傳功能。 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.disableServiceAccountKeyUpload resourceTypes: - iam.googleapis.com/ServiceAccountKey methodTypes: - CREATE condition: "resource.keyType == USER_MANAGED && resource.keyOrigin == USER_PROVIDED" actionType: DENY displayName: Deny all service account key uploads. |