Overview of Redis ACLs in Redis Enterprise Software
An overview of Redis ACLs, syntax, and ACL command support in Redis Enterprise Software.
Redis access control lists (Redis ACLs) allow you to define named permissions for specific Redis commands, keys, and pub/sub channels. You can use defined Redis ACLs for multiple databases and roles.
Predefined Redis ACLs
Redis Enterprise Software provides one predefined Redis ACL named Full Access. This ACL allows all commands on all keys and cannot be edited.
Redis ACL syntax
Redis ACLs are defined by a Redis syntax where you specify the commands or command categories that are allowed for specific keys.
Commands and categories
Redis ACL rules can allow or block specific Redis commands or command categories.
-
+
includes commands -
-
excludes commands -
+@
includes command categories -
-@
excludes command categories
The following example allows all read
commands and the SET
command:
+@read +SET
Module commands have several ACL limitations:
-
Redis modules do not have command categories.
-
Other command category ACLs, such as
+@read
and+@write
, do not include Redis module commands.+@all
is the only exception because it allows all Redis commands. -
You have to include individual module commands in a Redis ACL rule to allow them.
For example, the following Redis ACL rule allows read-only commands and the RediSearch commands
FT.INFO
andFT.SEARCH
:+@read +FT.INFO +FT.SEARCH
Key patterns
To define access to specific keys or key patterns, use the following prefixes:
-
~
or%RW~
allows read and write access to keys. -
%R~
allows read access to keys. -
%W~
allows write access to keys.
%RW~
, %R~
, and %W~
are only supported for databases with Redis version 7.2 or later.
The following example allows read and write access to all keys that start with "app1" and read-only access to all keys that start with "app2":
~app1* %R~app2*
Pub/sub channels
The &
prefix allows access to pub/sub channels (only supported for databases with Redis version 6.2 or later).
To limit access to specific channels, include resetchannels
before the allowed channels:
resetchannels &channel1 &channel2
Selectors
Selectors let you define multiple sets of rules in a single Redis ACL (only supported for databases with Redis version 7.2 or later). A command is allowed if it matches the base rule or any selector in the Redis ACL.
-
(<rule set>)
creates a new selector. -
clearselectors
deletes all existing selectors for a user. This action does not delete the base ACL rule.
In the following example, the base rule allows GET key1
and the selector allows SET key2
:
+GET ~key1 (+SET ~key2)
Default pub/sub permissions
Redis database version 6.2 introduced pub/sub ACL rules that determine which pub/sub channels a user can access.
The configuration option acl-pubsub-default
, added in Redis Enterprise Software version 6.4.2, determines the cluster-wide default level of access for all pub/sub channels. Redis Enterprise Software uses the following pub/sub permissions by default:
-
For versions 6.4.2 and 7.2,
acl-pubsub-default
is permissive (allchannels
or&*
) by default to accommodate earlier Redis versions. -
In future versions,
acl-pubsub-default
will change to restrictive (resetchannels
). Restrictive permissions block all pub/sub channels by default, unless explicitly permitted by an ACL rule.
If you use ACLs and pub/sub channels, you should review your databases and ACL settings and plan to transition your cluster to restrictive pub/sub permissions in preparation for future Redis Enterprise Software releases.
Prepare for restrictive pub/sub permissions
To secure pub/sub channels and prepare your cluster for future Redis Enterprise Software releases that default to restrictive pub/sub permissions:
-
Upgrade Redis databases:
-
For Redis Enterprise Software version 6.4.2, upgrade all databases in the cluster to Redis DB version 6.2.
-
For Redis Enterprise Software version 7.2, upgrade all databases in the cluster to Redis DB version 7.2 or 6.2.
-
-
Create or update ACLs with permissions for specific channels using the
resetchannels &channel
format. -
Associate the ACLs with relevant databases.
-
Set default pub/sub permissions (
acl-pubsub-default
) to restrictive. See Change default pub/sub permissions for details. -
If any issues occur, you can temporarily change the default pub/sub setting back to permissive. Resolve any problematic ACLs before making pub/sub permissions restrictive again.
When you change the cluster's default pub/sub permissions to restrictive, &*
is added to the Full Access ACL. Before you make this change, consider the following:
-
Because pub/sub ACL syntax was added in Redis 6.2, you can't associate the Full Access ACL with database versions 6.0 or lower after this change.
-
The Full Access ACL is not reverted if you change
acl-pubsub-default
to permissive again. -
Every database with the default user enabled uses the Full Access ACL.
Change default pub/sub permissions
As of Redis Enterprise version 6.4.2, you can configure acl_pubsub_default
, which determines the default pub/sub permissions for all databases in the cluster. You can set acl_pubsub_default
to the following values:
-
resetchannels
is restrictive and blocks access to all channels by default. -
allchannels
is permissive and allows access to all channels by default.
To make default pub/sub permissions restrictive:
-
Upgrade all databases in the cluster to Redis version 6.2 or later.
-
Set the default to restrictive (
resetchannels
) using one of the following methods:-
New Cluster Manager UI (only available for Redis Enterprise versions 7.2 and later):
-
Navigate to Access Control > Settings > Pub/Sub ACLs and select Edit.
-
For Default permissions for Pub/Sub ACLs, select Restrictive, then Save.
-
-
rladmin tune cluster acl_pubsub_default resetchannels
-
Update cluster policy REST API request:
PUT /v1/cluster/policy { "acl_pubsub_default": "resetchannels" }
-
ACL command support
Redis Enterprise Software does not support certain Redis ACL commands. Instead, you can manage access controls from the Cluster Manager UI.
Command | Supported |
---|---|
ACL CAT | ✅ Supported |
ACL DELUSER | ❌ Not supported |
ACL DRYRUN | ✅ Supported |
ACL GENPASS | ❌ Not supported |
ACL GETUSER | ✅ Supported |
ACL HELP | ✅ Supported |
ACL LIST | ✅ Supported |
ACL LOAD | ❌ Not supported |
ACL LOG | ❌ Not supported |
ACL SAVE | ❌ Not supported |
ACL SETUSER | ❌ Not supported |
ACL USERS | ✅ Supported |
ACL WHOAMI | ✅ Supported |
Redis ACLs also have the following differences in Redis Enterprise Software:
-
The
MULTI
,EXEC
,DISCARD
commands are always allowed, but ACLs are enforced onMULTI
subcommands. -
Nested selectors are not supported.
For example, the following selectors are not valid in Redis Enterprise:
+GET ~key1 (+SET (+SET ~key2) ~key3)
-
Key and pub/sub patterns do not allow the following characters:
'(', ')'
-
The following password configuration syntax is not supported:
'>', '<', '#!', 'resetpass'
To configure passwords in Redis Enterprise Software, use one of the following methods:
-
rladmin cluster reset_password
:rladmin cluster reset_password <user email>
-
REST API
PUT /v1/users
request and providepassword
-