Google Cloud 機構政策可讓您透過程式集中控管機構資源。身為機構政策管理員,您可以定義機構政策,也就是一組稱為限制的限制,適用於Google Cloud 資源和Google Cloud 資源階層中這些資源的子系。您可以在機構、資料夾或專案層級強制執行組織政策。
機構政策提供各種Google Cloud 服務的預先定義限制。不過,如要進一步自訂機構政策中受限制的特定欄位,也可以建立自訂機構政策。
優點
- 安全性、法規遵循與管理:您可以按照下列方式使用自訂機構政策:
- 如要強制執行安全規定,可以強制使用客戶自行管理的加密金鑰 (CMEK)。
- 建立或更新存放區時,您可以限制傳遞的任何欄位。
政策繼承
根據預設,機構政策會由您強制執行政策的資源子系繼承。舉例來說,如果您對資料夾強制執行政策, Google Cloud 系統會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為及如何變更,請參閱「階層評估規則」。
定價
機構政策服務 (包括預先定義和自訂機構政策) 免費提供。
事前準備
- 啟用 Artifact Registry 並安裝 Google Cloud CLI。
- (選用) 設定 gcloud CLI 指令的預設值。
- 如要使用客戶自行管理的加密金鑰 (CMEK) 加密存放區內容,請在 Cloud KMS 中建立並啟用存放區的金鑰。
- 請確認您知道機構 ID。
必要的角色
如要取得管理機構政策所需的權限,請要求管理員授予下列 IAM 角色:
-
機構政策管理員 (
roles/orgpolicy.policyAdmin
) 機構資源 -
如要測試機構政策,請按照下列步驟操作:
機構資源的 Artifact Registry 管理員 (
roles/artifactregistry.admin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義角色具備管理機構單位政策所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理組織政策,您必須具備下列權限:
-
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 一節。
Artifact Registry 支援套用至 REPOSITORY
資源 CREATE
和 UPDATE
方法的自訂限制。
建立自訂限制的 YAML 檔案,類似於下列範例:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- artifactregistry.googleapis.com/Repository
methodTypes:
- CREATE
- UPDATE
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
更改下列內容:
ORGANIZATION_ID
:您的機構 ID,例如123456789
。CONSTRAINT_NAME
:新自訂限制的名稱。自訂限制條件必須以custom.
開頭,且只能包含大寫英文字母、小寫英文字母或數字,例如 custom.enableDockerRemotes。這個欄位的長度上限為 70 個字元,不含前置字元,例如organizations/123456789/customConstraints/custom.enableDockerRemotes
。CONDITION
:針對支援服務資源的代表項目編寫的 CEL 條件。這個欄位的長度上限為 1000 個字元。如要進一步瞭解可用於編寫條件的資源 (例如(resource.mode == 'REMOTE' && resource.format == 'DOCKER') || (resource.mode != 'REMOTE')
),請參閱「支援的資源」。ACTION
:如果符合condition
,則要採取的動作。可以是ALLOW
或DENY
。DISPLAY_NAME
:限制條件的易記名稱。這個欄位的長度上限為 200 個字元。DESCRIPTION
:違反政策時,要以錯誤訊息形式顯示的限制說明。這個欄位的長度上限為 2000 個字元,例如All remote repositories must be Docker format.
如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。
設定自訂限制
為新的自訂限制建立 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.enableDockerRemotes
。
如要強制執行包含限制的機構政策,請執行下列指令:
gcloud org-policies set-policy POLICY_PATH
將 POLICY_PATH
替換為機構政策 YAML 檔案的完整路徑。這項政策最多需要 15 分鐘才會生效。
測試自訂機構政策
下列遠端存放區建立範例假設已建立自訂機構政策,並強制執行存放區建立作業,只允許建立 Docker 格式的遠端存放區。
嘗試在專案中建立 Python 遠端存放區:
gcloud artifacts repositories create REMOTE-REPOSITORY-NAME \
--project=PROJECT_ID \
--repository-format=python \
--location=LOCATION \
--description="DESCRIPTION" \
--mode=remote-repository \
--remote-repo-config-desc="REMOTE-REPOSITORY-DESCRIPTION" \
--disable-vulnerability-scanning \
--remote-python-repo=UPSTREAM
用來向上游存放區驗證的選用旗標:
--remote-username=USERNAME
--remote-password-secret-version=SECRET_VERSION
更改下列內容:
將
REMOTE-REPOSITORY-NAME
替換為存放區的名稱。專案中每個存放區位置的存放區名稱不得重複。將
PROJECT_ID
替換為專案 ID。如果省略這個標記,系統會使用目前或預設專案。LOCATION
,其中包含存放區的區域或多區域位置。如果您設定 default,可以省略這個旗標。如要查看支援的位置清單,請執行gcloud artifacts locations list
指令。DESCRIPTION
,並視需要提供存放區說明。 請勿輸入私密資料,因為存放區說明不會經過加密。REMOTE-REPOSITORY-DESCRIPTION
,並說明這個遠端存放區的外部存放區設定。USERNAME
(選用) 如果您使用驗證,請提供用於向上游存放區驗證的使用者名稱。SECRET_VERSION
(選用) 如果您使用驗證,請使用含有上游存放區密碼的祕密版本。UPSTREAM
,並預先設定上游名稱、Artifact Registry 存放區路徑,或上游存放區的使用者定義網址。
如果是 Artifact Registry 上游存放區,請將存放區路徑格式設為類似下列格式:projects/UPSTREAM_PROJECT_ID/locations/REGION/repositories/UPSTREAM_REPOSITORY
。
如要瞭解可用的預設上游和支援的使用者定義上游,請參閱「支援的格式」。--disable-vulnerability-scanning
:選用旗標,可將存放區設為停用自動安全漏洞掃描。--allow-vulnerability-scanning
:選用旗標,可將存放區設為允許自動安全漏洞掃描。詳情請參閱「啟用或停用自動掃描」。舉例來說,下列指令會在 Google Cloud 專案
my-project
的us-east1
區域中,建立名為my-repo
的遠端存放區,並使用使用者名稱my-username
和密碼版本projects/my-project/secrets/my-secret/versions/1
向上游存放區進行驗證。gcloud artifacts repositories create my-repo \ --project=my-project \ --repository-format=python \ --location=us-east1 \ --description="Remote Python repository" \ --mode=remote-repository \ --remote-repo-config-desc="PyPI" \ --remote-username=my-username \ --remote-password-secret-version=projects/my-project/secrets/my-secret/versions/1 \ --remote-python-repo=PYPI
輸出內容如下:
Operation denied by custom org policies: ["customConstraints/custom.enableDockerRemotes": "All remote repositories must be Docker format."]
Artifact Registry 支援的資源
Artifact Registry 支援自訂限制,適用於 repository 資源的建立和更新作業,但 labels
以外的所有欄位都適用。
常見用途的自訂機構政策範例
下表提供一些實用的自訂機構政策語法:
說明 | 限制語法 |
---|---|
禁止建立遠端存放區 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.disableRemotes resourceTypes: - artifactregistry.googleapis.com/Repository methodTypes: - CREATE condition: "resource.mode in ['STANDARD', 'VIRTUAL']" actionType: ALLOW displayName: Disable remote repository creation description: All repositories must be standard or virtual mode. |
強制執行 Docker 格式存放區的標記不可變更性 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade resourceTypes: - artifactregistry.googleapis.com/Repository methodTypes: - CREATE condition: "resource.format == 'DOCKER' && !resource.dockerConfig.immutableTags" actionType: DENY displayName: Enforce tag immutability description: All new Docker repositories must have tag immutability enabled. |
要求使用 CMEK 金鑰 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.enableAutoUpgrade resourceTypes: - artifactregistry.googleapis.com/Repository methodTypes: - CREATE condition: "resource.kmsKeyName.contains('projects/my-project/')" actionType: ALLOW displayName: Enforce the use of a CMEK key from my-project description: All repositories must be created with a CMEK key from my-project. |