Security
User Management
Riak TS security lets you to control authorization by creating, modifying, and deleting user characteristics and granting users selective access to Riak TS functionality. Users can be assigned one or more of the following characteristics:
usernamegroupspassword
You may also assign users characteristics beyond those listed above, such as listing email addresses or other information, but those values will carry no special significance for Riak TS.
The username cannot be changed once a user has been created.
Retrieve a Current User or Group List
A list of currently existing users can be accessed at any time:
riak-admin security print-users
The same goes for groups:
riak-admin security print-groups
Example output, assuming user named riakuser with an assigned
password:
+----------+--------+----------------------+------------------------------+
| username | groups | password | options |
+----------+--------+----------------------+------------------------------+
| riakuser | |983e8ae1421574b8733824| [] |
+----------+--------+----------------------+------------------------------+
All passwords are displayed in encrypted form in console output.
If the user riakuser were assigned to the group dev and a name of
lucius, the output would look like this:
+----------+----------------+----------------------+---------------------+
| username | groups | password | options |
+----------+----------------+----------------------+---------------------+
| riakuser | dev |983e8ae1421574b8733824| [{"name","lucius"}] |
+----------+----------------+----------------------+---------------------+
If you’d like to see which permissions have been assigned to
riakuser, you would need to use the print-grants command (see next section).
The security print-user or security print-group commands
can be used with a name as argument to see the same information as
above, except for only that user or group.
Permissions Grants For a Single User or Group
You can retrieve authorization information about a specific user or
group using the print-grants command, which takes the form of
riak-admin security print-grants <username>.
The output will look like this if the user riakuser has been
explicitly granted a riak_ts.get permission on the table
shopping_list and inherits a set of permissions from the admin
group:
Inherited permissions (user/riakuser)
+--------+----------+----------+----------------------------------------+
| group | type | table | grants |
+--------+----------+----------+----------------------------------------+
| admin | * | * | riak_ts.get, riak_ts.delete, |
| | | | riak_ts.put |
+--------+----------+----------+----------------------------------------+
Dedicated permissions (user/riakuser)
+----------+-------------+----------------------------------------+
| type | table | grants |
+----------+-------------+----------------------------------------+
| ANY |shopping_list| riak_ts.get |
+----------+-------------+----------------------------------------+
Cumulative permissions (user/riakuser)
+----------+-------------+----------------------------------------+
| type | table | grants |
+----------+-------------+----------------------------------------+
| * | * | riak_ts.get, riak_ts.delete, |
| | | riak_ts.put |
| ANY |shopping_list| riak_ts.get |
+----------+-------------+----------------------------------------+
The term admin is not a reserved term in Riak security. It
is used here only for illustrative purposes.
Because the same name can represent both a user and a group, a prefix
(user/ or group/) can be used before the name (e.g., print-grants
user/admin). If a name collides and no prefix is supplied, grants for
both will be listed separately.
Add Group
For easier management of permissions across several users, it is possible to create groups to be assigned to those users.
riak-admin security add-group admin
Add User
To create a user with the username riakuser, we use the add-user
command:
riak-admin security add-user riakuser
Using the command this way creates the user riakuser without any
characteristics beyond a username, which is the only attribute that you
must assign upon user creation.
You may also assign a password or other attributes to the user upon creation. Here, we’ll assign a password:
riak-admin security add-user riakuser password=Test1234
Assigning a Password and Altering Existing User Characteristics
While passwords and other characteristics can be set upon user creation,
it often makes sense to change user characteristics after the user has
already been created. Let’s say that the user riakuser was created
without a password (or created with a password that we’d like to
change). The alter-user command can be used to modify our riakuser
user:
riak-admin security alter-user riakuser password=opensesame
When creating or altering a user, any number of <option>=<value>
pairs can be appended to the end of the command. Any non-standard
options will be stored and displayed via the riak-admin security
print-users command.
riak-admin security alter-user riakuser name=bill age=47 fav_color=red
Now, the print-users command should return this:
+----------+--------+----------+--------------------------------------------------+
| username | groups | password | options |
+----------+--------+----------+--------------------------------------------------+
| riakuser | | |[{"fav_color","red"},{"age","47"},{"name","bill"}]|
+----------+--------+----------+--------------------------------------------------+
Usernames CANNOT be changed using the alter-user command.
If you attempt to do so by running alter-user riakuser
username=other-name, for example, this will add the
{"username","other-name"} tuple to riakuser’s options.
Managing Groups for a User
If we have a user jane_goodall and we’d like to assign her to the
admin group, we assign the value admin to the option groups:
riak-admin security alter-user jane_goodall groups=admin
If we’d like to make the user jane_goodall both an admin and an
archoverlord:
riak-admin alter-user jane_goodall groups=admin,archoverlord
There is no way to incrementally add groups; even if jane_goodall was
already an admin, it is necessary to list it again when adding the
archoverlord group. Thus, to remove a group from a user, use
alter-user and list all other groups.
If the user should be removed from all groups, use groups= with no
list:
riak-admin alter-user jane_goodall groups=
Managing Groups for Groups
Groups can be added to other groups for cascading permissions.
riak-admin alter-group admin groups=dev
Deleting a User or Group
If you’d like to remove a user, use the del-user command:
riak-admin security del-user riakuser
For groups, use the del-group command:
riak-admin security del-group admin
Adding or Deleting Multiple Users
The riak-admin security command does not currently allow you to
add or delete multiple users using a single command. Instead, they must
be added or deleted one by one.
Managing Permissions
Permission to perform a wide variety of operations against Riak TS can be
granted to, or revoked from, users via the grant and revoke
commands.
grant
The grant command takes one of the following forms:
riak-admin security grant <permissions> on any to all|{<user>|<group>[,...]}
riak-admin security grant <permissions> on <table> to all|{<user>|<group>[,...]}
revoke
The revoke command is essentially the same, except that to is
replaced with from of to:
riak-admin security revoke <permissions> on any from all|{<user>|<group>[,...]}
riak-admin security revoke <permissions> on <table> from all|{<user>|<group>[,...]}
Selecting any and all
If you select any, the permission (or set of permissions) is granted/revoked for all tables. If you specify a table only, then the permission is granted/revoked for all tables of that type.
Selecting all grants or revokes a permission (or set of permissions)
for all users in all groups. When specifying the user(s)/group(s) to apply a permission (or set of permissions), you may list any number of users or groups comma-separated with no whitespace. Here is an example of granting multiple permissions across all tables to multiple users:
riak-admin security grant riak_ts.get on any to jane,ahmed
If the same name is used for both a user and a group, the grant
command will ask for the name to be prefixed with user/ or group/
to disambiguate.
Riak TS Permissions
Permissions that can be granted for basic time series access functionality:
| Permission | Operation |
|---|---|
riak_ts.get |
Retrieve time series data via a single key |
riak_ts.put |
Write time series data via a single key or via a SQL INSERT statement |
riak_ts.delete |
Delete a single record via a key |
riak_ts.list_keys |
Stream a list of primary keys for a table |
riak_ts.coverage |
Return coverage information for a given query |
riak_ts.create_table |
Create a time series table |
riak_ts.query_select |
Retrieve data via a SQL SELECT statement |
riak_ts.describe_table |
Retrieve metadata about a single TS table |
riak_ts.show_tables |
Retrieve a list of TS tables |
riak_ts.query_explain |
Diagnostic information about how a query will be executed |
riak_ts.list_keys and riak_ts.show_tables are
both very expensive operations that should be performed very rarely and
never in production. Access to this functionality should be granted very
carefully.
For example, if you’d like to create a client account that is
allowed only to run GET and PUT requests on all tables:
riak-admin security add-user client
riak-admin security grant riak_ts.get,riak_ts.put on any to client
