Account Management
Creating a User Account
Create a user account by performing an HTTP POST or PUT with a
unique email address and username. Here’s an example:
curl -X POST http://localhost:8080/riak-cs/user \
-H 'Content-Type: application/json' \
--data '{"email":"foobar@example.com", "name":"foo bar"}' \
By default, only the admin user may create new user accounts. If you need to
create a user account without authenticating yourself, you must set
{anonymous_user_creation, true} in the Riak CS app.config.
The submitted user document may be either JSON or XML, but the type
should match the value of the Content-Type header used. Here are some
examples for JSON and XML input formats.
{
"email": "foobar@example.com",
"name": "foo bar"
}
<User>
<Email>foobar@example.com</Email>
<Name>foo bar</Name>
</User>
The response will be in JSON or XML, and resembles the following examples.
{
"email": "foobar@example.com",
"display_name": "foobar"
"key_id": "324ABC0713CD0B420EFC086821BFAE7ED81442C",
"key_secret": "5BE84D7EEA1AEEAACF070A1982DDA74DA0AA5DA7",
"name": "foo bar",
"id": "8d6f05190095117120d4449484f5d87691aa03801cc4914411ab432e6ee0fd6b",
"buckets": []
}
<User>
<Email>foobar@example.com</Email>
<DisplayName>foobar</DisplayName>
<KeyId>324ABC0713CD0B420EFC086821BFAE7ED81442C</KeyId>
<KeySecret>5BE84D7EEA1AEEAACF070A1982DDA74DA0AA5DA7</KeySecret>
<Name>foo bar</Name>
<Id>8d6f05190095117120d4449484f5d87691aa03801cc4914411ab432e6ee0fd6b</Id>
<Buckets></Buckets>
</User>
Once the user account exists, you can use the key_id and key_secret
to authenticate requests with Riak CS. To do that, add the key_id and
key_secret values to your s3cmd configuration file, which is located
by default in the ~/.s3cmd folder,
The canonical id represented by the id field can be used as an
alternative to an email address for user identification when granting or
revoking ACL permissions, for example with the --acl-grant or
--acl-revoke options to s3cmd setacl.
Retrieving User Account Information
A user may retrieve their account information by sending a properly
signed request to the riak-cs/user resource. Additionally, the admin
user may request the information for any individual user on the system
as part of their role as administrator. Users are only permitted to
retrieve information for their account.
Assuming the proper credentials were set in the .s3cfg file, an s3cmd
request to retrieve this information would look like this:
s3cmd get s3://riak-cs/user -
Using the admin credentials to retrieve another user’s info would look like this:
s3cmd -c ~./s3cfg-admin get s3://riak-cs/user/XQKMYF4UL_MMTDFD6NCN
In this example, XQKMYF4UL_MMTDFD6NCN is the key_id of the user
whose information the administrator wishes to retrieve.
Modifying User Account Information
Changing the User Account Name and Email Address
A user may use a PUT to /riak-cs/user to update the name and email
address associated with an account. The PUT must include a document
with a name and email field. JSON or XML formats are supported for this
document. Samples of each are shown below. The Content-Type header
should also be set appropriately. The admin user may also update a
user’s account via a PUT to /riak-cs/user/<user-key-id>. The value
for the email field must be a valid email address and must not be
already used by another user account in the system. Violation of either
condition results in an error response.
Sample JSON and XML status update documents:
{
"name": "foobaz",
"email": "foobaz@example.com"
}
<?xml version="1.0" encoding="UTF-8"?>
<UserUpdate>
<Name>foobaz</Name>
<Email>foobaz@example.com</Email>
</UserUpdate>
Enabling and Disabling a User Account
A user may use a PUT to /riak-cs/user to disabled their account. The
PUT must include a document with a status field whose value is
disabled. JSON or XML formats are supported for this document. Samples
of each are shown below. The Content-Type header should also be set
appropriately. The admin user may also disable or re-enable a user’s
account via a PUT to /riak-cs/user/<user-key-id>. Users may not
re-enable their own account once it is disabled.
Sample JSON and XML status update documents:
{
"status": "enabled"
}
<?xml version="1.0" encoding="UTF-8"?>
<UserUpdate>
<Status>disabled</Status>
</UserUpdate>
Issuing New User Credentials
The key_secret for a user account can be reissued by a PUT to
/riak-cs/user with the appropriate JSON or XML document. For admin
users, the PUT would be to /riak-cs/user/<key-id>.
The documents should resemble the following examples.
{
"new_key_secret": true
}
<?xml version="1.0" encoding="UTF-8"?>
<UserUpdate>
<NewKeySecret>true</NewKeySecret>
</UserUpdate>
The new_key_secret field (or NewKeySecret in XML) may be combined with
other user update fields in the same request. Currently, the only other
supported field is status, but more may be added in the future. Unsupported
fields are ignored.
Retrieving a List of All Users
The admin user may retrieve a list of all user accounts on the system.
This accomplished via a properly signed HTTP GET request to the
/riak-cs/users resource. Any non-admin user request for the user list
is rejected and a 403 Forbidden error is returned. This request does
not properly work with s3cmd, but can be performed using a less dogmatic
tool such as s3-curl.
You must modify the @endpoints variable in the s3curl.pl script to include
your Riak CS hostname so that the following example will return the list of
users.
A sample URL for a user listing request looks like this:
GET http://data.example.com/riak-cs/users -
An example using s3-curl that assumes properly specified credentials for
the admin user in the .s3curl configuration file with an id of
admin is as follows:
s3curl --id admin -- http://data.mystorage.me/riak-cs/users
By default, the listing of all users includes accounts that are both enabled and disabled. The list can be filtered to only include enabled or disabled accounts by using the status query parameter with a value of enabled or disabled respectively.
