跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

管理策略参考资源

最后更新 查看 MarkdownAgent 设置

使用 Policy reference 资源在策略之间共享代码和数据。你需要拥有在账户中管理 Cloud Workload Security 的访问权限。

创建 Rego 模块

Rego 模块在 lib. 下存储可重复使用的库代码。请在策略编辑器中编写每项策略的 policy. 包和 valid 规则。

  1. 在 Cloudflare 仪表板中,选择你的账户,然后前往 Cloud Workload Security > Policy reference > Rego modules。

    前往 Rego modules(Rego 模块) ↗
  2. 选择 Add Rego module 并输入 Module name。

  3. 在 Rego source 中输入库代码。此示例会检查请求是否关闭公共访问权限:

    Library moduletxt
    package lib.bucket_rules
    
    private if {
      input.http.request.body.enabled == false
    }

    Package path 根据源代码生成且为只读。

  4. 选择 Add Rego module 保存模块。

要在策略中调用此库,请导入它并引用其规则:

Policy sourcetxt
package policy.private_bucket

import data.lib.bucket_rules

default valid := false

valid if {
  bucket_rules.private
}

策略还需要一个筛选器来选择预期操作。请参阅配置策略。

创建 Rego 元数据

元数据用于存储可重复使用的 JSON 值。导入路径(例如 metadata.bucket_rules)会在 Rego 中将该值作为 data.metadata.bucket_rules 提供。

  1. 在 Cloudflare 仪表板中,前往 Cloud Workload Security > Policy reference > Rego metadata。

    前往 Rego metadata(Rego 元数据) ↗
  2. 选择 Add Rego metadata。输入 Name 和 Import path,格式为 metadata.<NAME>。

  3. 在 Data 中输入有效的 JSON。例如:

    {
      "require_private_buckets": true
    }
  4. 选择 Add Rego metadata 保存此值。

在此示例中,策略可以读取 data.metadata.bucket_rules.require_private_buckets。更新元数据即可更改共享值,无需编辑每项策略。

创建租户结构

租户结构用于描述 AWS 或 Cloudflare 资源层级。可选的 Package path 会将该层级提供给 Rego,例如 data.tenant.aws.production。

  1. 在 Cloudflare 仪表板中,前往 Cloud Workload Security > Policy reference > Tenant structures。

    前往 Tenant structures(租户结构) ↗
  2. 选择 Add tenant structure。输入 Name,并为 Application 选择 AWS 或 Cloudflare。

  3. (可选)使用 tenant.aws.<NAME> 或 tenant.cloudflare.<NAME> 输入 Package path,使其与所选应用相匹配。

  4. 在 Nodes 中选择 Import nodes 并选择一个 .json 文件。在 Table view 或 JSON view 中检查导入的节点。

  5. 选择 Add tenant structure 保存结构和节点。

节点导入格式

使用以每个节点原生资源 ID 为键的 JSON 对象。每个值包含 node_kind、可选的 name,以及子节点的 parent。不要在值内添加 native_id 字段。

以下 AWS 示例将一个账户置于根节点下。请将示例 ID 替换为你的资源 ID:

nodes.jsonjson
{
	"r-example": {
		"node_kind": "root",
		"name": "Example organization"
	},
	"123456789012": {
		"node_kind": "account",
		"name": "Production account",
		"parent": "r-example"
	}
}

AWS 支持 root、ou 和 account 节点。Cloudflare 支持 org、account 和 zone 节点。原生 ID 必须唯一,且每个父节点都必须存在于该结构中。

编辑节点

打开现有租户结构,即可在 Table view 中添加、编辑或删除节点。选择 Save 应用更改。JSON view 为只读。

策略会根据原生 ID 读取已挂载的节点。例如,data.tenant.aws.production.nodes["123456789012"] 会返回示例账户节点。

这篇文档对您有帮助吗?