The consumer-restriction
makes corresponding access restrictions based on different objects selected.
Name | Type | Requirement | Default | Valid | Description |
---|---|---|---|---|---|
type | string | optional | consumer_name | ["consumer_name", "service_id"] | According to different objects, corresponding restrictions, support consumer_name , service_id . |
whitelist | array[string] | required | Choose one of the two with blacklist , only whitelist or blacklist can be enabled separately, and the two cannot be used together. |
||
blacklist | array[string] | required | Choose one of the two with whitelist , only whitelist or blacklist can be enabled separately, and the two cannot be used together. |
||
rejected_code | integer | optional | 403 | [200,...] | The HTTP status code returned when the request is rejected. |
For the type
field is an enumerated type, it can be consumer_name
or service_id
. They stand for the following meanings:
- consumer_name: Add the
username
ofconsumer
to a whitelist or blacklist (supporting single or multiple consumers) to restrict access to services or routes. - service_id: Add the
id
of theservice
to a whitelist or blacklist (supporting one or more services) to restrict access to the service. It needs to be used in conjunction with authorized plugins.
The following is an example. The consumer-restriction
plugin is enabled on the specified route to restrict consumer access.
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
"username": "jack1",
"plugins": {
"basic-auth": {
"username":"jack2019",
"password": "123456"
}
}
}'
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
{
"username": "jack2",
"plugins": {
"basic-auth": {
"username":"jack2020",
"password": "123456"
}
}
}'
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"plugins": {
"basic-auth": {},
"consumer-restriction": {
"whitelist": [
"jack1"
]
}
}
}'
Test Plugin
Requests from jack1:
curl -u jack2019:123456 http://127.0.0.1:9080/index.html
HTTP/1.1 200 OK
...
Requests from jack2:
curl -u jack2020:123456 http://127.0.0.1:9080/index.html -i
HTTP/1.1 403 Forbidden
...
{"message":"The consumer_name is forbidden."}
The service_id
method needs to be used together with the authorization plug-in. Here, the key-auth authorization plug-in is taken as an example.
- Create two services.
curl http://127.0.0.1:9080/apisix/admin/services/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"upstream": {
"nodes": {
"127.0.0.1:1980": 1
},
"type": "roundrobin"
},
"desc": "new service 001"
}'
curl http://127.0.0.1:9080/apisix/admin/services/2 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"upstream": {
"nodes": {
"127.0.0.1:1980": 1
},
"type": "roundrobin"
},
"desc": "new service 002"
}'
- Bind the
consumer-restriction
plugin on theconsumer
(need to cooperate with an authorized plugin to bind), and add theservice_id
whitelist list.
curl http://127.0.0.1:9080/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"username": "new_consumer",
"plugins": {
"key-auth": {
"key": "auth-jack"
},
"consumer-restriction": {
"type": "service_id",
"whitelist": [
"1"
],
"rejected_code": 403
}
}
}'
- Open the
key-auth
plugin on the route and bind theservice_id
to1
.
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"service_id": 1,
"plugins": {
"key-auth": {
}
}
}'
Test Plugin
curl http://127.0.0.1:9080/index.html -H 'apikey: auth-jack' -i
HTTP/1.1 200 OK
...
The service_id
in the whitelist column allows access, and the plug-in configuration takes effect.
- Open the
key-auth
plugin on the route and bind theservice_id
to2
.
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"service_id": 2,
"plugins": {
"key-auth": {
}
}
}'
Test Plugin
curl http://127.0.0.1:9080/index.html -H 'apikey: auth-jack' -i
HTTP/1.1 403 Forbidden
...
{"message":"The service_id is forbidden."}
It means that the service_id
that is not in the whitelist is denied access, and the plug-in configuration takes effect.
When you want to disable the consumer-restriction
plugin, it is very simple,
you can delete the corresponding json configuration in the plugin configuration,
no need to restart the service, it will take effect immediately:
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"uri": "/index.html",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:1980": 1
}
},
"plugins": {
"basic-auth": {}
}
}'
The consumer-restriction
plugin has been disabled now. It works for other plugins.