a6-plugin-consumer-restriction
概述
Apache APISIX 的 consumer-restriction 插件可根据已认证消费者的身份,限制其访问路由或服务。它支持三种限制类型和三种匹配模式:黑名单、白名单和按方法限制。
优先级:2400
该插件在认证插件之后的 access 阶段运行。
前提条件
必须与认证插件(如 key-auth、basic-auth、jwt-auth、hmac-auth、wolf-rbac)配合使用,以识别消费者。
适用场景
- 限制特定路由仅供指定消费者访问。
- 实现分级访问控制,例如免费消费者和高级消费者。
- 控制每个消费者可以使用的 HTTP 方法。
- 限制消费者只能访问指定服务或路由。
插件配置参考
| 字段 | 类型 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|---|
type | string | 否 | consumer_name | 限制类型:consumer_name、consumer_group_id、service_id 或 route_id |
whitelist | 字符串数组 | 三者之一* | — | 允许的标识符 |
blacklist | 字符串数组 | 三者之一* | — | 拒绝的标识符 |
allowed_by_methods | 对象数组 | 三者之一* | — | 按消费者限制 HTTP 方法 |
allowed_by_methods[].user | string | 否 | — | 消费者用户名 |
allowed_by_methods[].methods | 字符串数组 | 否 | — | 允许的 HTTP 方法:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、CONNECT、TRACE、PURGE |
rejected_code | integer | 否 | 403 | 被拒绝请求的 HTTP 状态码(≥ 200) |
rejected_msg | string | 否 | "The {type} is forbidden." | 自定义拒绝消息 |
* 必须至少配置 whitelist、blacklist 或 allowed_by_methods 中的一项。
判定优先级
blacklist (highest) > whitelist > allowed_by_methods (lowest)
- **黑名单:**消费者匹配时,立即返回 403。
- **白名单:**消费者不在白名单中时会被拒绝,除非
allowed_by_methods允许该请求。 - **allowed_by_methods:**消费者使用的方法不在允许列表中时会被拒绝。