Skip to content

Commit 6717202

Browse files
authored
DEV: document Redis 8 breaking changes to ACL handling (#1669)
* DEV: document Redis 8 breaking changes to ACL handling * Add more content.
1 parent d61ed5f commit 6717202

File tree

2 files changed

+83
-12
lines changed

2 files changed

+83
-12
lines changed

content/operate/oss_and_stack/management/security/acl.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -289,19 +289,19 @@ The following is a list of command categories and their meanings:
289289
* **bitmap** - Data type: all bitmap related commands.
290290
* **blocking** - Potentially blocking the connection until released by another
291291
command.
292-
* **bloom** - Data type: all Bloom filter related commands.
293-
* **cms** - Data type: count-min sketch related commands.
292+
* **bloom** - Data type: all Bloom filter related commands. <sup>[1](#cmd-note-1)</sup>
293+
* **cms** - Data type: count-min sketch related commands. <sup>[1](#cmd-note-1)</sup>
294294
* **connection** - Commands affecting the connection or other connections.
295295
This includes [`AUTH`](/commands/auth), [`SELECT`](/commands/select), [`COMMAND`](/commands/command), [`CLIENT`](/commands/client), [`ECHO`](/commands/echo), [`PING`](/commands/ping), etc.
296-
* **cuckoo** - Data type: all Cuckoo filter related commands.
296+
* **cuckoo** - Data type: all Cuckoo filter related commands. <sup>[1](#cmd-note-1)</sup>
297297
* **dangerous** - Potentially dangerous commands (each should be considered with care for
298298
various reasons). This includes [`FLUSHALL`](/commands/flushall), [`MIGRATE`](/commands/migrate), [`RESTORE`](/commands/restore), [`SORT`](/commands/sort), [`KEYS`](/commands/keys),
299299
[`CLIENT`](/commands/client), [`DEBUG`](/commands/debug), [`INFO`](/commands/info), [`CONFIG`](/commands/config), [`SAVE`](/commands/save), [`REPLICAOF`](/commands/replicaof), etc.
300300
* **fast** - Fast O(1) commands. May loop on the number of arguments, but not the number of elements in the key.
301301
* **geo** - Data type: all geospatial index related commands.
302302
* **hash** - Data type: all hash related commands.
303303
* **hyperloglog** - Data type: all hyperloglog related commands.
304-
* **json** - Data type: all JSON related commands.
304+
* **json** - Data type: all JSON related commands. <sup>[1](#cmd-note-1)</sup>
305305
* **keyspace** - Writing or reading from keys, databases, or their metadata
306306
in a type agnostic way. Includes [`DEL`](/commands/del), [`RESTORE`](/commands/restore), [`DUMP`](/commands/dump), [`RENAME`](/commands/rename), [`EXISTS`](/commands/exists), [`DBSIZE`](/commands/dbsize),
307307
[`KEYS`](/commands/keys), [`SCAN`](/commands/scan), [`EXPIRE`](/commands/expire), [`TTL`](/commands/ttl), [`FLUSHALL`](/commands/flushall), etc. Commands that may modify the keyspace,
@@ -311,18 +311,20 @@ The following is a list of command categories and their meanings:
311311
* **pubsub** - all pubsub related commands.
312312
* **read** - Reading from keys (values or metadata). Note that commands that don't interact with keys, will not have either `read` or `write`.
313313
* **scripting** - Scripting related.
314-
* **search** - All search related commands. Only ACL users with access to a superset of the key prefixes defined during index creation can create, modify, or read the index. For example, a user with the key ACL pattern `h:*` can create an index with keys prefixed by `h:*` or `h:p*`, but not keys prefixed by `h*`, `k:*`, or `k*`, because these prefixes may involve keys to which the user does not have access.
314+
* **search** - All search related commands. Only ACL users with access to a superset of the key prefixes defined during index creation can create, modify, or read the index. For example, a user with the key ACL pattern `h:*` can create an index with keys prefixed by `h:*` or `h:p*`, but not keys prefixed by `h*`, `k:*`, or `k*`, because these prefixes may involve keys to which the user does not have access. <sup>[1](#cmd-note-1)</sup>
315315
* **set** - Data type: all set related commands.
316316
* **sortedset** - Data type: all sorted set related commands.
317317
* **slow** - All commands that are not `fast`.
318318
* **stream** - Data type: all stream related commands.
319319
* **string** - Data type: all string related commands.
320-
* **tdigest** - Data type: all t-digest related commands.
321-
* **timeseries** - Data type: all time series related commands.
322-
* **topk** - Data type: all top-k related commands.
320+
* **tdigest** - Data type: all t-digest related commands. <sup>[1](#cmd-note-1)</sup>
321+
* **timeseries** - Data type: all time series related commands. <sup>[1](#cmd-note-1)</sup>
322+
* **topk** - Data type: all top-k related commands. <sup>[1](#cmd-note-1)</sup>
323323
* **transaction** - [`WATCH`](/commands/watch) / [`MULTI`](/commands/multi) / [`EXEC`](/commands/exec) related commands.
324324
* **write** - Writing to keys (values or metadata). Note that commands that don't interact with keys, will not have either `read` or `write`.
325325

326+
1. <a name="cmd-note-1"></a> See the [Redis 8 release notes]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisce/redisos-8.0-release-notes/#potentially-breaking-changes-to-acls" >}}) for more information about these command categories, which may introduce breaking changes to your Redis deployments.
327+
326328
NOTE: Redis can also show you a list of all categories and the exact commands each category includes using the Redis [`ACL CAT`](/commands/acl-cat) command.
327329
It can be used in two forms:
328330

content/operate/oss_and_stack/stack-with-enterprise/release-notes/redisce/redisos-8.0-release-notes.md

Lines changed: 73 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,8 @@ Stand alone RediSearch, RedisJSON, RedisTimeSeries, and RedisBloom modules are n
7171

7272
- See the [build instructions]({{< relref "/operate/oss_and_stack/install/build-stack" >}}) for information about building from source code.
7373
- New configuration file: `redis-full.conf`, loads Redis with all components,
74-
and contains new configuration parameters for Redis Query Engine and the new data structures .
75-
- New ACL categories: `@search`, `@json`, `@timeseries`, `@bloom`, `@cuckoo`, `@cms`, `@topk`, and `@tdigest`.
76-
- Commands are also included in the existing ACL categories such as `@read` and `@write`.
77-
74+
and contains new configuration parameters for Redis Query Engine and the new data structures.
75+
- New ACL categories: `@search`, `@json`, `@timeseries`, `@bloom`, `@cuckoo`, `@cms`, `@topk`, and `@tdigest` commands are also included in the existing ACL categories such as `@read` and `@write`. See [below]({{< relref "/operate/oss_and_stack/stack-with-enterprise/release-notes/redisce/redisos-8.0-release-notes/#potentially-breaking-changes-to-acls" >}}) for information about potentially breaking changes.
7876
- More than 30 performance and resource utilization improvements.
7977
- A new I/O threading implementation, which enables throughput increase on multi-core environments
8078
(set with the `io-threads` configuration parameter).
@@ -113,3 +111,74 @@ For more details, see the release notes for the [8.0-M01](https://github.com/red
113111
- [#13966](https://github.com/redis/redis/pull/13966), [#13932](https://github.com/redis/redis/pull/13932) `CLUSTER SLOTS` - TLS port update not reflected.
114112
- [#13958](https://github.com/redis/redis/pull/13958) `XTRIM`, `XADD` - incorrect lag due to trimming stream.
115113
- [#13931](https://github.com/redis/redis/pull/13931) `HGETEX` - wrong order of keyspace notifications.
114+
115+
### Potentially breaking changes to ACLs
116+
117+
{{< note >}}
118+
The following content is relevant to all Redis distributions (RS, RC, and ROS).
119+
{{< /note >}}
120+
121+
Redis 8 includes Redis Query Engine, as well as JSON, time series, Bloom filter, cuckoo filter, top-k, count-min sketch, and t-digest data types.
122+
The integration of these features into Redis also comes with improvements to Redis [ACL]({{< relref "/operate/oss_and_stack/management/security/acl" >}}) rules.
123+
124+
{{< warning >}}
125+
These ACL changes may introduce breaking changes for some users, which must be analyzed carefully.
126+
{{< /warning >}}
127+
128+
### Extension to the existing ACL categories
129+
130+
Before Redis 8, the existing ACL categories @read, @write, @dangerous, @admin, @slow, and @fast did not include commands for the Redis Query Engine and the JSON, time series, and probabilistic data structures.
131+
132+
Starting with Redis 8, Redis includes all Query Engine, JSON, time series, Bloom filter, cuckoo filter, top-k, count-min sketch, and t-digest commands in these existing ACL categories.
133+
134+
As a result:
135+
136+
- Existing ACL rules such as `+@read +@write` will allow access to more commands than in previous versions of Redis. Here are some examples:
137+
- A user with `+@read` access will be able to execute `FT.SEARCH`.
138+
- A user with `+@write` access will be able to execute `JSON.SET`.
139+
140+
- ACL rules such as `+@all -@write` will allow access to fewer commands than previous versions of Redis. For example:
141+
- A user with `+@all -@write` will not be able to execute `JSON.SET`.
142+
143+
Note that the `@all` category did not change, as it always included all the commands.
144+
145+
Additionally, ACL rules such as `+@read +JSON.GET` can now be simplified as `+@read` because `JSON.GET` is included in the `@read` category.
146+
147+
### Who is affected by this change?
148+
149+
Users who currently use the Redis Query Engine and/or the JSON, time series, or probabilistic data structures, and use custom ACL rules.
150+
151+
You should reanalyze your ACL rules to make sure they are aligned with your security and access control requirements.
152+
153+
### Redis 8 introduces the following data structure and processing engine ACL categories.
154+
155+
| New ACL commands category names | Included commands |
156+
| :---- | :---- |
157+
| `search` | All Redis Query Engine commands |
158+
| `json` | All JSON commands |
159+
| `timeseries` | All time series commands |
160+
| `bloom` | All Bloom filter commands |
161+
| `cuckoo` | All cuckoo filter commands |
162+
| `topk` | All top-k commands |
163+
| `cms` | All count-min sketch commands |
164+
| `tdigest` | All t-digest commands |
165+
166+
You can use these new categories in your ACL rules.
167+
168+
### Time series notes
169+
170+
The following time series commands retrieve data from all keys that match a given filter expression: `TS.MGET`, `TS.MRANGE`, and `TS.MREVRANGE`.
171+
172+
There can be a case where a user may have to only some of the matching keys. In such cases, the command’s result is an error message: “*current user doesn't have read permission to one or more keys that match the specified filter*”.
173+
174+
On the other hand, `TS.QUERYINDEX` does not require `@read` access to the keys that match the specified filter, as it accesses only time series metadata (name and labels) and not content (measurements).
175+
176+
### Redis Query Engine notes
177+
178+
The following Redis Query Engine commands may retrieve data from all keys that match the prefixes defined in the index (that is, all indexed documents, per-index):
179+
180+
- `FT.SEARCH`
181+
- `FT.AGGREGATE` (may be followed by `FT.CURSOR`)
182+
- `FT.PROFILE`
183+
184+
Only ACL users with access to a superset of the key prefixes defined during index creation can create, modify, or read the index. For example, a user with the key ACL pattern `h:*` can create an index with keys prefixed by `h:*` or `h:p*`, but not keys prefixed by `h*`, `k:*`, or `k*`, because these prefixes may involve keys to which the user does not have access.

0 commit comments

Comments
 (0)