使用 Policy reference 资源在策略之间共享代码和数据。你需要拥有在账户中管理 Cloud Workload Security 的访问权限。
Rego 模块在 lib. 下存储可重复使用的库代码。请在策略编辑器中编写每项策略的 policy. 包和 valid 规则。
-
在 Cloudflare 仪表板中,选择你的账户,然后前往 Cloud Workload Security > Policy reference > Rego modules。
前往 Rego modules(Rego 模块) ↗ -
选择 Add Rego module 并输入 Module name。
-
在 Rego source 中输入库代码。此示例会检查请求是否关闭公共访问权限:
Library moduletxt package lib.bucket_rules private if { input.http.request.body.enabled == false }Package path 根据源代码生成且为只读。
-
选择 Add Rego module 保存模块。
要在策略中调用此库,请导入它并引用其规则:
package policy.private_bucket
import data.lib.bucket_rules
default valid := false
valid if {
bucket_rules.private
}策略还需要一个筛选器来选择预期操作。请参阅配置策略。
元数据用于存储可重复使用的 JSON 值。导入路径(例如 metadata.bucket_rules)会在 Rego 中将该值作为 data.metadata.bucket_rules 提供。
-
在 Cloudflare 仪表板中,前往 Cloud Workload Security > Policy reference > Rego metadata。
前往 Rego metadata(Rego 元数据) ↗ -
选择 Add Rego metadata。输入 Name 和 Import path,格式为
metadata.<NAME>。 -
在 Data 中输入有效的 JSON。例如:
{ "require_private_buckets": true } -
选择 Add Rego metadata 保存此值。
在此示例中,策略可以读取 data.metadata.bucket_rules.require_private_buckets。更新元数据即可更改共享值,无需编辑每项策略。
租户结构用于描述 AWS 或 Cloudflare 资源层级。可选的 Package path 会将该层级提供给 Rego,例如 data.tenant.aws.production。
-
在 Cloudflare 仪表板中,前往 Cloud Workload Security > Policy reference > Tenant structures。
前往 Tenant structures(租户结构) ↗ -
选择 Add tenant structure。输入 Name,并为 Application 选择 AWS 或 Cloudflare。
-
(可选)使用
tenant.aws.<NAME>或tenant.cloudflare.<NAME>输入 Package path,使其与所选应用相匹配。 -
在 Nodes 中选择 Import nodes 并选择一个
.json文件。在 Table view 或 JSON view 中检查导入的节点。 -
选择 Add tenant structure 保存结构和节点。
使用以每个节点原生资源 ID 为键的 JSON 对象。每个值包含 node_kind、可选的 name,以及子节点的 parent。不要在值内添加 native_id 字段。
以下 AWS 示例将一个账户置于根节点下。请将示例 ID 替换为你的资源 ID:
{
"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"] 会返回示例账户节点。