Add capabilities to a role
Learn how to add capabilities to a role
In Vault, the ability of a user to execute a REST API operation or CLI command is determined by the capabilities associated with their role.
This guide shows how to define the capabilities for a role. It illustrates how to give a user their ability to create and view collections, using the CapCollectionsReader and CapCollectionsWriter capabilities, and create and view objects in a collection, using the CapDataReader and CapDataWriter capabilities.
Prerequisites
This guide uses the Dashboard user and the DashboardRole role created in Define users. To exercise the examples you also need an API token for the Dashboard user, the process for obtaining an API token is described in Regenerate user API key. You also need a copy of the IAM configuration file, the step to getting this file is described in Update the IAM configuration.
Walkthrough
You add capabilities to a role like this:
-
In the IAM configuration file, edit the section defining the role, such as
[roles.DashboardRole], to add the list of capabilities like this:[roles.DashboardRole]
capabilities = ["CapCollectionsReader", "CapCollectionsWriter", "CapDataReader", "CapDataWriter"]
policies = [] -
Apply the IAM configuration to Vault.
The role, DashboardRole, of the user, Dashboard, now has the required capabilities that allow it to create a new collection and delete a new collection. However, to successfully add objects and delete them from the collection, it is not sufficient to have the required capabilities CapDataReader and CapDataWriter.
This is because Vault implements policy management to control access to data in Vault and the role does not have any policies.
Demonstration
To demonstrate this, create a new collection called employees using the user Dashboard like this:
-
Create a file called
employees.jsoncontaining this text to describe the employees collection:{
"name": "employees",
"type": "PERSONS",
"properties": [
{
"description": "The email of the employee",
"name": "email",
"data_type_name": "EMAIL",
"is_unique": false,
"is_index": false,
"is_encrypted": true,
"is_nullable": false
},
{
"description": "The age of the employee",
"name": "age",
"data_type_name": "INTEGER",
"is_unique": false,
"is_index": false,
"is_encrypted": true,
"is_nullable": false
}
]
}In this example, the
employeescollection has only two properties:emailandage. -
Using the CLI, create the collection passing in the collection definition and the API token of the user
Dashboard:pvault collection add --collection-json @employees.json -
This succeeds because the
Dashboarduser has theCapCollectionsWritercapability. You get a response similar to this:employees PERSONS (
age INTEGER COMMENT 'The age of the employee',
email EMAIL COMMENT 'The email of the employee'
);
Now, attempt to add an object with the Dashboard user like this:
-
Create a file called
object.jsonand add this text that describes a new object for theemployeescollection:{
"email": "john@thecompany.com",
"age": 45
} -
Using the CLI, try to add the new object passing in the object definition and the API token of the user
Dashboard:pvault object add --collection employees --fields @object.json --authtoken APIKEY -
This operation fails. You see a response similar to this:
ERR Error code: PV1006, Status code: 403, Message: The operation is forbidden due to a policy access denial. For more details, view the logs., Context: map[username:Dashboard], Documentation: https://docs.piiano.com/api/error-codes#PV1006
To allow the user to add objects to the employees collection, you must define policies that enable that.