权限策略示例
本页按使用场景整理可复用的 API7 网关权限策略示例。每个示例都聚焦于常见的实际访问控制场景。有关确切的 JSON 架构和字段定义,请参阅权限策略和边界;有关允许的操作和资源的完整目录,请参阅权限策略操作和资源。
策略文档结构
通过 Admin API(POST /api/permission_policies)创建权限策略时,请求正文必须是完整的 PermissionPolicy 对象,包含 name、可选的 desc 和 labels,以及包裹 statement 数组的 policy_document:
{
"name": "production-readonly",
"desc": "Read-only access to production gateway groups.",
"labels": {
"team": "sre"
},
"policy_document": {
"statement": [
{
"effect": "allow",
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>"
],
"actions": [
"<.*>Get<.*>"
]
}
]
}
}
以下示例聚焦于 policy_document 部分,使每个示例简洁且便于比较。通过 Admin API 提交时,请将每个 statement 数组包裹在上方所示的信封结构中。
基本访问模式
API7 网关访问控制的常见起点:平台范围访问、只读可见性、网关组范围权限、拒绝优先规则以及基于标签的环境管理。
对所有资源的完全访问权限
此策略授予对 API7 网关中所有资源和操作的无限制访问权限。resources 和 actions 中的 <.*> 通配符表示“全部”。这是权限最宽松的策略,通常仅供超级管理员使用。
{
"statement": [
{
"resources": [
"<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
}
]
}
对所有资源的只读权限
此策略允许用户查看所有资源但不进行任何更改。actions 限制为包含 Get 的操作,通常对应只读操作。它适用于需要查看整个系统但不需要修改权限的角色。
{
"statement": [
{
"resources": [
"<.*>"
],
"actions": [
"<.*>Get<.*>"
],
"effect": "allow"
}
]
}
对特定网关组的只读权限
此策略授予对指定网 关组列表及其中服务的只读访问权限。它使用唯一的网关组 ID 标识每个资源。对于需要监控生产或测试等特定环境、但不能修改配置的用户而言,此策略非常适用。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaygroup/{gateway_group_id_1}",
"arn:api7:gateway:gatewaygroup/{gateway_group_id_2}"
],
"actions": [
"<.*>Get<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/{gateway_group_id_1}/service/<.*>",
"arn:api7:gateway:gatewaygroup/{gateway_group_id_2}/service/<.*>"
],
"actions": [
"<.*>Get<.*>"
],
"effect": "allow"
}
]
}
对特定网关组的完全访问权限
此策略授予对指定网关组及其关联服务的完整控制权。策略中的多个语句以“OR”关系组合,这意味着只要任一语句允许某项操作,该操作就会被允许。它适用于特定环境的管理员,例如生产运维团队。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaygroup/{gateway_group_id_1}",
"arn:api7:gateway:gatewaygroup/{gateway_group_id_2}"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/{gateway_group_id_1}/service/<.*>",
"arn:api7:gateway:gatewaygroup/{gateway_group_id_2}/service/<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
}
]
}
对特定网关组的完全访问权限 Except Consumer Credentials
此策略授予对指定网关组的广泛权限,但明确拒绝管理消费者凭证。它演示了“拒绝优先于允许”原则:对于相同资源和操作,deny 效果优先于任何 allow 语句。这是保护敏感消费者数据的重要安全措施。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaygroup/{gateway_group_id_1}",
"arn:api7:gateway:gatewaygroup/{gateway_group_id_2}"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/{gateway_group_id_1}/service/<.*>",
"arn:api7:gateway:gatewaygroup/{gateway_group_id_2}/service/<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>/consumer/<.*>"
],
"actions": [
"gateway:GetConsumerCredential",
"gateway:UpdateConsumerCredential",
"gateway:DeleteConsumerCredential"
],
"effect": "deny"
}
]
}
创建和管理生产网关组
此策略允许用户创建新的网关组,并完全管理标记为 production 的现有网关组。两个语句都在 gateway_group_label 上使用 MatchLabel 条件:第一个语句将管理范围限定为标记为 type: production 的现有网关组,第二个语句将创建范围限定为请求正文设置了相同 type: production 标签的请求,因此用户无法在指定范围外创建网关组。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>"
],
"actions": [
"<.*>"
],
"conditions": {
"gateway_group_label": {
"type": "MatchLabel",
"options": {
"key": "type",
"operator": "exact_match",
"value": "production"
}
}
},
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/*"
],
"actions": [
"gateway:CreateGatewayGroup"
],
"conditions": {
"gateway_group_label": {
"type": "MatchLabel",
"options": {
"key": "type",
"operator": "exact_match",
"value": "production"
}
}
},
"effect": "allow"
}
]
}
服务与插件操作
适用于跨网关组管理服务和自定义插件的运维人员的模式。
服务管理员
此策略面向服务管理员角色,该角色可以跨所有网关组管理指定服务。策略授予服务广泛权限,同时提供对网关组和全局插件规则的必要读取权限,以避免冲突。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>/service/<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>"
],
"actions": [
"gateway:GetGatewayGroup",
"gateway:GetGlobalPluginRule",
"gateway:GetPluginMetadata"
],
"effect": "allow"
}
]
}
或者,你可以使用标签,以更动态且可扩展的方式管理多个服务。此策略授予相同的服务管理权限,但使用 MatchLabel 条件将其应用于带有 team: enterprise 标签的所有服务。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>/service/<.*>"
],
"actions": [
"<.*>"
],
"conditions": {
"service_label": {
"type": "MatchLabel",
"options": {
"key": "team",
"operator": "exact_match",
"value": "enterprise"
}
}
},
"effect": "allow"
},
{
"resources": [
"arn:api7:gateway:gatewaygroup/<.*>"
],
"actions": [
"gateway:GetGatewayGroup"
],
"effect": "allow"
}
]
}
管理自定义插件
此策略授予管理网关设置中自定义插件的权限。它允许包含 CustomPlugin 的任何操作,从而完全控制自定义插件的生命周期。
{
"statement": [
{
"resources": [
"arn:api7:gateway:gatewaysetting/*"
],
"actions": [
"gateway:<.*>CustomPlugin<.*>"
],
"effect": "allow"
}
]
}
IAM 与治理
适用于 IAM 管理和治理控制的模式:角色管理访问权限、显式拒绝防护措施以及委派管理员的权限边界。
角色管理员
此策略面向负责用户和角色管理的角色管理员。它授予管理用户、角色和权限策略的完整权限,允许其邀请或删除用户、重置密码、设计自定义角色以及为用户分配角色。
{
"statement": [
{
"resources": [
"arn:api7:iam:user/<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:iam:role/<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:iam:permissionpolicy/<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
}
]
}
具有许可证更新限制的完全资源访问权限
此策略为用户提供对所有资源的广泛访问权限,同时明确拒绝更新许可证的权限。这是“拒绝优先于允许”规则的另一个示例,也是防止未经授权更改许可证等关键系统设置的常见安全实践。deny 语句确保即使用户对所有内容拥有完整的 allow 权限,特定的 UpdateLicense 操作也会被禁止。
{
"statement": [
{
"resources": [
"<.*>"
],
"actions": [
"<.*>"
],
"effect": "allow"
},
{
"resources": [
"arn:api7:iam:organization/*"
],
"actions": [
"iam:UpdateLicense"
],
"effect": "deny"
}
]
}
委派管理员的权限边界
权限边界是直接应用于用户的权限策略,用于限制该用户可能拥有的最大权限,而不受其所持角色影响。以下示例使用 AllOfStrings 条件,要求用户的 permission_boundaries 上下文