本页面介绍了如何使用 Google Cloud Organization Policy Service 自定义限制条件来限制对以下 Cloud Storage for Firebase 资源执行的特定操作:
firebasestorage.googleapis.com/DefaultBucket
如需详细了解组织政策,请参阅自定义组织政策。
组织政策和限制条件简介
借助 Google Cloud 组织政策服务,您可以对组织的资源进行程序化集中控制。作为组织政策管理员,您可以定义组织政策,这是一组称为限制条件的限制,会应用于 Google Cloud 资源层次结构中的 Google Cloud 资源及其后代。您可以在组织、文件夹或项目级层强制执行组织政策。
组织政策为各种 Google Cloud 服务提供内置的托管式限制。但是,如果您想要更精细地控制和自定义组织政策中受限的特定字段,还可以创建自定义限制条件并在组织政策中使用这些自定义限制条件。
政策继承
如果您对资源强制执行政策,默认情况下,该资源的后代会继承组织政策。例如,如果您对某个文件夹强制执行一项政策,Google Cloud 会对该文件夹中的所有项目强制执行该政策。如需详细了解此行为及其更改方式,请参阅层次结构评估规则。
此外,由于 Cloud Storage for Firebase 将文件存储在底层 Cloud Storage 存储桶中,因此对 Cloud Storage 资源强制执行的任何组织政策或自定义限制条件也适用于您的 Cloud Storage for Firebase 存储桶。
优势
- 安全和治理:对 Cloud Storage 存储桶预配实施集中式组织控制,以确保遵守数据驻留和费用管理护栏。
- 精细属性控制:根据特定资源属性(例如
storageClass或location)限制默认存储桶创建。
限制
将自定义组织政策与 Cloud Storage for Firebase 搭配使用时,存在以下限制:
- 不追溯执行:新强制执行的自定义限制条件不会应用于现有资源。除非现有默认存储桶被更新,否则不会对其进行评估。如需识别可能违反限制条件的现有资源,您可以使用试运行模式测试政策。
- 访问权限控制限制:自定义限制条件无法限制存储桶的访问控制列表 (ACL) 或 IAM 政策。
准备工作
在 Firebase 控制台中,选择或创建一个 Firebase 项目。
确保您的项目属于某个组织,并且您知道自己的组织 ID。
如需使用命令行设置和强制执行自定义限制条件,请安装 Google Cloud CLI (
gcloud)。自定义组织政策无法使用 Firebase CLI 进行管理。
所需的角色
如需获得管理自定义组织政策所需的权限,请让您的管理员为您授予组织的 Organization Policy Administrator (roles/orgpolicy.policyAdmin) IAM 角色。
Cloud Storage for Firebase 项受支持的资源
下表列出了您可以在自定义限制条件中引用的 Cloud Storage for Firebase 资源。您还可以引用 Cloud Storage 支持的资源,因为这些资源的自定义限制条件也适用于 Cloud Storage for Firebase 存储桶。
| 资源 | 支持的字段 |
|---|---|
firebasestorage.googleapis.com/DefaultBucket |
|
设置自定义限制条件
自定义限制条件是在 YAML 文件中,由实施组织政策的服务所支持的资源、方法、条件和操作定义的。自定义限制条件的条件使用通用表达式语言 (CEL) 进行定义。如需详细了解如何使用 CEL 在自定义限制条件中构建条件,请参阅创建和管理自定义限制条件的 CEL 部分。
控制台
如需创建自定义限制条件,请执行以下操作:
- 在 Google Cloud 控制台中,转到组织政策页面。
- 在项目选择器中,选择要为其设置组织政策的项目。
- 点击 自定义限制条件。
- 在显示名称框中,为限制条件输入一个人类可读名称。此名称会在出错提示中使用,并可用于识别和调试用途。请勿在显示名称中使用个人身份信息 (PII) 或敏感数据,因为此名称可能会在出错提示中公开。此字段最多可包含 200 个字符。
- 在限制条件 ID 框中,为新的自定义限制条件输入所需的 ID。自定义限制条件只能包含字母(包括大写和小写)或数字,例如
custom.restrictStorageClass。此字段最多可包含 70 个字符,不计算前缀 (custom.),例如organizations/123456789/customConstraints/custom.restrictStorageClass。请勿在限制条件 ID 中包含个人身份信息或敏感数据,因为该 ID 可能会在出错提示中公开。 - 在说明框中,输入人类可读的限制条件说明。当违反政策时,此说明将用作错误消息。请包含有关发生违规的原因以及如何解决违规问题的详细信息。请勿在说明中包含个人身份信息或敏感数据,因为该说明可能会在出错提示中泄露。此字段最多可包含 2000 个字符。
- 在资源类型框中,选择包含要限制的对象和字段的 REST 资源的名称,例如
firebasestorage.googleapis.com/DefaultBucket。大多数资源类型最多支持 20 个自定义限制条件。如果您尝试创建更多自定义限制条件,操作将会失败。 - 在强制执行方法下,选择是对 REST
CREATE方法强制执行限制条件,还是同时对CREATE和UPDATE方法强制执行限制条件。(注意:DefaultBucket仅支持CREATE)。 - 如需定义条件,请点击 修改条件。
- 在添加条件面板中,创建一个引用受支持服务资源的 CEL 条件,例如
resource.storageClass == 'STANDARD'。此字段最多可包含 1,000 个字符。如需详细了解 CEL 用法,请参阅通用表达式语言。 - 点击保存。
- 在添加条件面板中,创建一个引用受支持服务资源的 CEL 条件,例如
- 在操作下,选择在满足条件时是允许还是拒绝评估的方法。
拒绝操作意味着,如果条件计算结果为 true,则创建或更新资源的操作会被阻止。
允许操作意味着,仅当条件计算结果为 true 时,才允许执行创建或更新资源的操作。除了条件中明确列出的情况之外,其他所有情况都会被阻止。
- 点击创建限制条件。
gcloud
- 如需创建自定义限制条件,请使用以下格式创建 YAML 文件:
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.
- 为新的自定义限制条件创建 YAML 文件后,您必须对其进行设置,以使其可用于组织中的组织政策。如需设置自定义限制条件,请使用
gcloud org-policies set-custom-constraint命令:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
将
CONSTRAINT_PATH替换为自定义限制条件文件的完整路径。例如/home/user/customconstraint.yaml。 - 如需验证自定义限制条件是否存在,请使用
gcloud org-policies list-custom-constraints命令:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
强制执行自定义组织政策
如需强制执行限制条件,您可以创建引用该限制条件的组织政策,并将该组织政策应用于 Google Cloud 资源。
控制台
gcloud
- 如需创建包含布尔值规则的组织政策,请创建引用该限制条件的 YAML 政策文件:
name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
- 如需在试运行模式下强制执行组织政策,请运行以下带有
dryRunSpec标志的命令:gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
- 验证试运行模式下的组织政策按预期运行后,使用
org-policies set-policy命令和spec标志设置现行政策:gcloud org-policies set-policy POLICY_PATH --update-mask=spec
测试自定义组织政策
以下示例创建自定义限制条件和政策,要求所有新创建的默认存储桶避免使用 STANDARD 存储类别。您可以通过尝试执行该政策应禁止的操作来测试该政策。
创建限制条件
将以下文件保存为
constraint-restrict-storage-class.yaml:name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.将
ORGANIZATION_ID替换为您的组织 ID。应用限制条件:
gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yaml验证限制条件存在:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID输出类似于以下内容:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.restrictStorageClass DENY CREATE firebasestorage.googleapis.com/DefaultBucket Restrict Standard Storage Class ...
创建政策
将以下文件保存为
policy-restrict-storage-class.yaml:name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true将
PROJECT_ID替换为您的项目 ID。应用政策:
gcloud org-policies set-policy ~/policy-restrict-storage-class.yaml验证政策存在:
gcloud org-policies list --project=PROJECT_ID输出类似于以下内容:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.restrictStorageClass - SET CIqktscGELiZn6cC-
应用政策后,请等待大约两分钟,以便 Google Cloud 开始强制执行政策。
测试政策
尝试使用 Cloud Storage for Firebase REST API 创建默认存储桶,而不指定存储类别(默认为 STANDARD):
PROJECT_ID="PROJECT_ID"
TOKEN=$(gcloud auth print-access-token)
curl -X POST "https://firebasestorage.googleapis.com/v1beta/projects/${PROJECT_ID}/defaultBucket" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"location": "US-EAST1"}'
请求失败,并显示类似于以下内容的错误:
FAILED_PRECONDITION: Operation denied by org policy: ["customConstraints/custom.restrictStorageClass": "Deny creating buckets with STANDARD storage class."].
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: iam.googleapis.com
metadata:
customConstraints: customConstraints/custom.restrictStorageClass
reason: CUSTOM_ORG_POLICY_VIOLATION
常见用例的自定义组织政策示例
下表提供了一些常见自定义限制条件的语法示例。
| 说明 | 限制条件语法 |
|---|---|
| 限制创建具有 Standard Storage 存储类别的默认存储桶 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class. |
| 要求在特定位置创建默认存储桶 |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireDefaultBucketLocation resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.location != 'US-EAST1'" actionType: DENY displayName: Require US-EAST1 Location description: Deny creating default buckets outside the US-EAST1 location. |
后续步骤
- 详细了解Organization Policy Service。
- 详细了解如何创建和管理组织政策。
- 查看托管式组织政策限制条件的完整列表。