跳到主要内容
版本:3.10.x

访问控制列表(ACL)

访问控制列表(ACL)使用 consumer-restriction 插件限制 API 访问。该插件可以匹配消费者名称、消费者组 ID、服务 ID 或路由 ID,并同时支持允许列表和拒绝列表。以下示例使用默认且最常见的消费者名称匹配方式。

功能

  • 多种标识符类型:通过插件的 type 字段匹配消费者名称(默认)、消费者组 ID、服务 ID 或路由 ID。
  • 允许列表和拒绝列表:明确允许或拒绝来自所配置标识符的流量。
  • 插件集成:与身份认证插件(如 key-authjwt-auth)结合,使网关能够识别请求所属的消费者。
  • 细粒度控制:将 ACL 挂载到路由、服务或消费者。

前置条件

  1. 创建消费者(参阅教程:通过插件代理和管理 API 请求)。
  2. 通过凭证为消费者添加身份认证方式(如 key-auth)。
  3. 准备用于挂载路由的服务。以下示例假设已有名为 acl-service 的服务,请将其替换为你自己的服务。
  4. 按照从控制台获取令牌中的步骤获取令牌。

配置 ACL

要限制对路由的访问,请在路由上同时配置 consumer-restriction 插件和身份认证插件。

curl -k "https://localhost:7443/apisix/admin/routes/acl-restricted-route?gateway_group_id={gateway_group_id}" -X PUT \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "acl-restricted-route",
"service_id": "acl-service",
"paths": ["/restricted-api/*"],
"plugins": {
"key-auth": {},
"consumer-restriction": {
"whitelist": [
"authorized-consumer"
]
}
}
}'

{gateway_group_id} 替换为控制台的 Gateway Groups 页面中显示的网关组 ID(快速入门创建的网关组使用 default)。将 acl-service 替换为你的服务名称,并将 authorized-consumer 替换为要允许的消费者用户名。

关键配置参数

字段类型说明
typestringwhitelist/blacklist 条目所表示的对象。可选值为 consumer_name(默认)、consumer_group_idservice_idroute_id
whitelistarray[string]允许访问的标识符。接受的标识符类型由 type 决定。
blacklistarray[string]拒绝访问的标识符。接受的标识符类型由 type 决定。
rejected_codeinteger请求被拒绝时返回的 HTTP 状态码(默认为 403)。
rejected_msgstring请求被拒绝时返回的错误消息。

有关消费者名称匹配以外的配置模式,例如限制哪些消费者可以访问指定服务或路由,或限制每个消费者允许使用的 HTTP 方法,请参阅consumer-restriction 插件参考

实施模式

模式 1:为私有服务配置允许列表

使用 whitelist 只允许特定内部消费者或合作伙伴访问私有 API。其他所有已认证消费者都将被拒绝。

模式 2:将恶意消费者加入拒绝列表

使用 blacklist 阻止已被识别为可能恶意或违反使用条款的特定消费者,同时允许其他所有已认证消费者。

后续步骤