从旧版鉴权策略迁移到 OPA
云开发原有的网关策略将逐步切换到 OPA。默认行为不变,平台已内置等价规则,无需任何操作。仅当在控制台上手动为角色关联过网关策略时,需参考下方手动操作或编写新策略。
一、给角色关联了预设策略
旧版网关鉴权提供了一组预设策略(每条策略本质是「对某个 resource_type 的允许 / 拒绝」),并将其关联到内部用户/外部用户/默认用户等角色上。切换到 OPA 后,需要重新关联预设策略并保存。
对于下列旧网关策略:

选择「新建策略」,为对应的资源和角色创建对应允许策略:

为每一条策略执行上述操作,检查无误后点击 保存。
二、自定义策略翻译到 Rego
对于手动编写的自定义策略,可参考下方描述迁移至新语法:
2.1 最小对照示例
网关鉴权声明的策略:
// 关联角色:外部用户
// 含义:放通外部用户对云函数的访问
{
"statement": [
{
"action": "functions:*", // action:声明作用域为 云函数 资源
"resource": "*",
"effect": "allow" // allow:声明操作为 放通
}
],
"version": "1.0"
}
等价 Rego:
package authz.user
default allow := false
# 含义:放通外部用户对云函数的访问
allow if {
# 两条条件之间为与关系,即同时满足才执行 allow(允许)操作
# 通过 auth_type 为 external 匹配外部用户
input.subject.auth_type == "external"
# 通过 resource_type 为 functions 匹配云函数
input.cloudbase.resource_type == "functions"
}
2.2 常见字段对照
下表中列出了旧版网关策略中的概念在 Rego 表达式中的对应表达式:
| 网关鉴权 | Rego 表达式示例 |
|---|---|
策略关联的角色为管理员 | input.subject.auth_type == "administrator" |
策略关联的角色为外部用户 | input.subject.auth_type == "external" |
策略关联的角色为内部用户 | input.subject.auth_type == "internal" |
策略关联的角色为匿名用户 | input.subject.auth_type == "anonymous" |
策略关联的角色为注册用户 | input.subject.auth_type in {"external", "internal"} |
策略关联的角色为所有用户 | not input.subject.auth_type == "unauthenticated" |
策略关联的角色为 <自定义角色> | "<角色名>" in input.subject.groups |
策略中关联的资源 <resource> | input.cloudbase.resource_type == "<resource>" |
策略中指定的域名 <host> | input.request.host == "<host>" |