Merge "Adding documentation for ACLs operations."
This commit is contained in:
@@ -10,6 +10,7 @@ Quick Start
|
||||
|
||||
./quickstart/secrets
|
||||
./quickstart/containers
|
||||
./quickstart/acls
|
||||
|
||||
|
||||
API Reference
|
||||
@@ -20,3 +21,4 @@ API Reference
|
||||
|
||||
./reference/secrets
|
||||
./reference/containers
|
||||
./reference/acls
|
||||
|
||||
352
doc/source/api/quickstart/acls.rst
Normal file
352
doc/source/api/quickstart/acls.rst
Normal file
@@ -0,0 +1,352 @@
|
||||
*************************
|
||||
ACL API - Quick Start
|
||||
*************************
|
||||
|
||||
By default Barbican manages access to its resources (secrets, containers) on a per project
|
||||
level, whereby a user is allowed access to project resources based on the roles a user has
|
||||
in that project.
|
||||
|
||||
Some Barbican use cases prefer a more fine-grained access control for secrets and containers,
|
||||
such as at the user level. The Access Control List (ACL) feature supports this more restrictive
|
||||
access.
|
||||
|
||||
This guide will assume you will be using a local running development environment of Barbican.
|
||||
If you need assistance with getting set up, please reference the :doc:`development guide </setup/dev>`.
|
||||
|
||||
.. warning::
|
||||
|
||||
This ACL documentation is work in progress and may change in near future.
|
||||
|
||||
|
||||
ACL Definition
|
||||
##############
|
||||
|
||||
ACL defines a set of attributes which are used in policy-based authorization to determine
|
||||
access to a target resource. ACL definition is operation specific and is defined per
|
||||
secret or per container.
|
||||
|
||||
Currently only the 'read' operation is defined. This supports allowing users on the ACL for a
|
||||
secret to retrieve its metadata or to decrypt its payload. This also allows users on the ACL
|
||||
for a container to retrieve its list of secret references.
|
||||
|
||||
ACL allow a secret or a container to be marked private. Private secret/container means that only
|
||||
the user who created the secret/container can extract secret. Users with necessary roles on a
|
||||
secret/container project will not have access. To allow access to other users, their user ids
|
||||
need to be added in related ACL users list.
|
||||
|
||||
An operation specific ACL definition has following attribute:
|
||||
* `users`: Whitelist of users who are allowed access to target resource. In this case a user means
|
||||
a Keystone user id.
|
||||
* `creator-only`: Flag to mark a secret or a container private for an operation. Pass `true` to
|
||||
mark private.
|
||||
|
||||
To acommplish above mentioned behavior for a secret/container resource, having ACL data populated
|
||||
alone is not sufficient.
|
||||
|
||||
Following ACL rules are defined and used as `OR` in resource access policy:
|
||||
* ACL based access is allowed when token user is present in secret/container operation specific
|
||||
ACL user list e.g. token user present in `read` users list.
|
||||
* When secret/container resource is marked private, then project-level RBAC users access is not
|
||||
allowed.
|
||||
|
||||
.. note::
|
||||
|
||||
Currently Barbican default policy just makes use of `read` ACL data only. So only **GET**
|
||||
calls for a secret and a container resource will make use of ACL data. Other request methods on
|
||||
secret and container resource still uses project level RBAC checks in policy.
|
||||
|
||||
As per default policy rules, a user with `admin` role in a secret/container project or a user who
|
||||
has created the secret/container can manage ACL for that secret/container.
|
||||
|
||||
.. _default_implicit_acl:
|
||||
|
||||
Default ACL
|
||||
-----------
|
||||
|
||||
By default when no ACL is explicitly set on a secret or a container, then clients with necessary
|
||||
roles on secret's project or container's project can access it. This default access pattern translates
|
||||
to `creator-only` as False and no `users` in ACL settings. That's why every secret and container by
|
||||
default has following implicit ACL.
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"read":{
|
||||
"creator-only": false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Above default ACL is also returned on **GET** on secret/container **acl** resource when no
|
||||
explicit ACL is set on it.
|
||||
|
||||
|
||||
.. _set_acl:
|
||||
|
||||
How to Set/Replace ACL
|
||||
######################
|
||||
|
||||
The ACL for an existing secret or container can be modified via a **PUT** to the **acl** resource.
|
||||
This update completely replaces existing ACL settings for this secret or container.
|
||||
|
||||
|
||||
To set/replace an ACL for a secret:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X PUT -H 'content-type:application/json' \
|
||||
-H 'X-Auth-Token:b06183778aa64b17beb6215e60686a60' \
|
||||
-d '
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
"2d0ee7c681cc4549b6d76769c320d91f",
|
||||
"721e27b8505b499e8ab3b38154705b9e",
|
||||
"c1d20e4b7e7d4917aee6f0832152269b"
|
||||
],
|
||||
"creator-only":true
|
||||
}
|
||||
}' \
|
||||
http://localhost:9311/v1/secrets/15621a1b-efdf-41d8-92dc-356cec8e9da9/acl
|
||||
|
||||
Response (includes secret ACL reference):
|
||||
|
||||
HTTP/1.1 201 Created
|
||||
{"acl_ref": "http://localhost:9311/v1/secrets/15621a1b-efdf-41d8-92dc-356cec8e9da9/acl"}
|
||||
|
||||
|
||||
To set/replace an ACL for a container:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X PUT -H 'content-type:application/json' \
|
||||
-H 'X-Auth-Token:b06183778aa64b17beb6215e60686a60' \
|
||||
-d '
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
"2d0ee7c681cc4549b6d76769c320d91f",
|
||||
"721e27b8505b499e8ab3b38154705b9e",
|
||||
"c1d20e4b7e7d4917aee6f0832152269b"
|
||||
],
|
||||
"creator-only":true
|
||||
}
|
||||
}' \
|
||||
http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl
|
||||
|
||||
Response (includes container ACL reference):
|
||||
|
||||
HTTP/1.1 201 Created
|
||||
{"acl_ref": "http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl"}
|
||||
|
||||
To get more details on the create API you can reference the :ref:`Set Secret ACL <put_secret_acl>`
|
||||
or :ref:`Set Container ACL <put_container_acl>` documentation.
|
||||
|
||||
|
||||
.. _update_acl:
|
||||
|
||||
How to Update ACL
|
||||
#################
|
||||
|
||||
Existing ACL can be updated via **PUT** or **PATCH** methods on a given secret/container.
|
||||
**PUT** interaction replaces existing ACL with provided ACL data whereas **PATCH**
|
||||
interaction applies the provided changes on existing ACL of a secret or a container.
|
||||
|
||||
To replace an existing ACL for a container:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X PUT -H 'content-type:application/json' \
|
||||
-H 'X-Auth-Token:e1f540bc6def456dbb0f8c11f21a74ae' \
|
||||
-d '
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
"2d0ee7c681cc4549b6d76769c320d91f",
|
||||
"721e27b8505b499e8ab3b38154705b9e"
|
||||
],
|
||||
"creator-only":false
|
||||
}
|
||||
}' \
|
||||
http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl
|
||||
|
||||
Response (includes container ACL reference):
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl"}
|
||||
|
||||
|
||||
To remove all users from an existing ACL for a container (pass empty list in `users`):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X PUT -H 'content-type:application/json' \
|
||||
-H 'X-Auth-Token:e1f540bc6def456dbb0f8c11f21a74ae' \
|
||||
-d '
|
||||
{
|
||||
"read":{
|
||||
"users":[],
|
||||
"creator-only":false
|
||||
}
|
||||
}' \
|
||||
http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl
|
||||
|
||||
Response (includes container ACL reference):
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl"}
|
||||
|
||||
|
||||
To update only the creator-only flag for container ACL (use PATCH):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X PATCH -H 'content-type:application/json' \
|
||||
-H 'X-Auth-Token:e1f540bc6def456dbb0f8c11f21a74ae' \
|
||||
-d '
|
||||
{
|
||||
"read":{
|
||||
"creator-only":true
|
||||
}
|
||||
}' \
|
||||
http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl"}
|
||||
|
||||
|
||||
To update only the users list for secret ACL (use PATCH):
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X PATCH -H 'content-type:application/json' \
|
||||
-H 'X-Auth-Token:e1f540bc6def456dbb0f8c11f21a74ae' \
|
||||
-d '
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
"2d0ee7c681cc4549b6d76769c320d91f",
|
||||
"c1d20e4b7e7d4917aee6f0832152269b"
|
||||
],
|
||||
}
|
||||
}' \
|
||||
http://localhost:9311/v1/secrets/15621a1b-efdf-41d8-92dc-356cec8e9da9/acl
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "http://localhost:9311/v1/secrets/15621a1b-efdf-41d8-92dc-356cec8e9da9/acl"}
|
||||
|
||||
|
||||
|
||||
Container and Secret ACL(s) update operation are similar except `containers` resource is used
|
||||
instead of the `secrets` resource in URI. To get more details on ACL update APIs, you can reference
|
||||
the :ref:`Update Secret ACL <put_secret_acl>` , :ref:`Update Container ACL <put_container_acl>`
|
||||
, :ref:`Partial Update Secret ACL <patch_secret_acl>` or :ref:`Partial Update Container ACL
|
||||
<patch_container_acl>` documentation.
|
||||
|
||||
|
||||
.. _retrieve_acl:
|
||||
|
||||
How to Retrieve ACL
|
||||
###################
|
||||
|
||||
The ACL defined for a secret or container can be retrieved by using a **GET** operation on
|
||||
respective **acl** resource.
|
||||
The returned response contains ACL data.
|
||||
|
||||
To get secret ACL data:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X GET -H 'X-Auth-Token:b44636bff48c41bbb80f459df69c11aa' \
|
||||
http://localhost:9311/v1/secrets/15621a1b-efdf-41d8-92dc-356cec8e9da9/acl
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{
|
||||
"read":{
|
||||
"updated":"2015-05-12T20:08:47.644264",
|
||||
"created":"2015-05-12T19:23:44.019168",
|
||||
"users":[
|
||||
"c1d20e4b7e7d4917aee6f0832152269b",
|
||||
"2d0ee7c681cc4549b6d76769c320d91f"
|
||||
],
|
||||
"creator-only":true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
To get container ACL data:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X GET -H 'X-Auth-Token:b44636bff48c41bbb80f459df69c11aa' \
|
||||
http://localhost:9311/v1/containers/8c077991-d524-4e15-8eaf-bc0c3bb225f2/acl
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{
|
||||
"read":{
|
||||
"updated":"2015-05-12T20:05:17.214948",
|
||||
"created":"2015-05-12T19:47:20.018657",
|
||||
"users":[
|
||||
"721e27b8505b499e8ab3b38154705b9e",
|
||||
"c1d20e4b7e7d4917aee6f0832152269b",
|
||||
"2d0ee7c681cc4549b6d76769c320d91f"
|
||||
],
|
||||
"creator-only":true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
To get more details on ACL lookup APIs you can reference the :ref:`Get Secret ACL <get_secret_acl>` ,
|
||||
:ref:`Get Container ACL <get_container_acl>` documentation.
|
||||
|
||||
|
||||
.. _delete_acl:
|
||||
|
||||
How to Delete ACL
|
||||
#################
|
||||
|
||||
ACL defined for a secret or a container can be deleted by using the **DELETE** operation on their respective `acl`
|
||||
resource. There is no response content returned on successful deletion.
|
||||
|
||||
Delete operation removes existing ACL on a secret or a container if there. It can be treated as resetting a secret
|
||||
or a container to :ref:`Default ACL<default_implicit_acl>` setting. That's why invoking delete multiple times on
|
||||
this resource will not result in error.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
Request:
|
||||
|
||||
curl -X DELETE -H 'X-Auth-Token:b06183778aa64b17beb6215e60686a60' \
|
||||
http://localhost:9311/v1/secrets/50f5ed8e-004e-433a-939c-fa73c7fc81fd/acl
|
||||
|
||||
Response:
|
||||
|
||||
200 OK
|
||||
|
||||
|
||||
To get more details on ACL delete APIs, you can reference the :ref:`Delete Secret ACL <delete_secret_acl>` ,
|
||||
:ref:`Delete Container ACL <delete_container_acl>` documentation.
|
||||
670
doc/source/api/reference/acls.rst
Normal file
670
doc/source/api/reference/acls.rst
Normal file
@@ -0,0 +1,670 @@
|
||||
***********************
|
||||
ACL API - Reference
|
||||
***********************
|
||||
|
||||
.. note::
|
||||
|
||||
This feature is applicable only when Barbican is used in an authenticated
|
||||
pipeline i.e. integrated with Keystone.
|
||||
|
||||
.. note::
|
||||
|
||||
Currently the access control list (ACL) settings defined for a container
|
||||
are not propagated down to associated secrets.
|
||||
|
||||
.. warning::
|
||||
|
||||
This ACL documentation is work in progress and may change in near future.
|
||||
|
||||
|
||||
Secret ACL API
|
||||
===============
|
||||
|
||||
.. _get_secret_acl:
|
||||
|
||||
GET /v1/secrets/{uuid}/acl
|
||||
##########################
|
||||
Retrieve the ACL settings for a given secret.
|
||||
|
||||
If no ACL is defined for that secret, then :ref:`Default ACL<default_implicit_acl>` is returned.
|
||||
|
||||
Request/Response (With ACL defined):
|
||||
************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Request:
|
||||
|
||||
GET /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{
|
||||
"read":{
|
||||
"updated":"2015-05-12T20:08:47.644264",
|
||||
"created":"2015-05-12T19:23:44.019168",
|
||||
"users":[
|
||||
{user_id1},
|
||||
{user_id2},
|
||||
.....
|
||||
],
|
||||
"creator-only":{creator-only-flag}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Request/Response (With no ACL defined):
|
||||
***************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Request:
|
||||
|
||||
GET /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{
|
||||
"read":{
|
||||
"creator-only": false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successful request. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Secret not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
.. _put_secret_acl:
|
||||
|
||||
PUT /v1/secrets/{uuid}/acl
|
||||
##########################
|
||||
Create new or replaces existing ACL for a given secret.
|
||||
|
||||
This call is used to add new ACL for a secret. If the ACL is already set on a secret, this
|
||||
method will replace it with the requested ACL settings. In case of create (first new explicit
|
||||
ACL) or replace existing ACL, 200 is returned in both cases. To delete existing users from
|
||||
an ACL definition, pass empty list [] for `users`.
|
||||
|
||||
Returns an ACL reference in success case.
|
||||
|
||||
Attributes
|
||||
**********
|
||||
|
||||
The ACL resource detailed in this page allows access to individual secrets to be controlled.
|
||||
This access is configured via operations on those secrets. Currently only the 'read' operation
|
||||
(which includes GET REST actions) is supported.
|
||||
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| Attribute Name | Type | Description | Default |
|
||||
+============================+==========+===============================================+==========+
|
||||
| read | parent | ACL data for read operation. | None |
|
||||
| | element | | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| users | [string] | (optional) List of user ids. This needs to be | [] |
|
||||
| | | a user id as returned by Keystone. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| creator-only | boolean | (optional) Flag to mark a secret private so | `false` |
|
||||
| | | that the user who created the secret and | |
|
||||
| | | ``users`` specified in above list can only | |
|
||||
| | | access the secret. Pass `true` to mark the | |
|
||||
| | | secret private. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
|
||||
|
||||
Request/Response (Set ACL):
|
||||
***************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Request:
|
||||
|
||||
PUT /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
{user_id1},
|
||||
{user_id2},
|
||||
.....
|
||||
],
|
||||
"creator-only":{creator-only-flag}
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/secrets/{uuid}/acl"}
|
||||
|
||||
Request/Response (Replace ACL):
|
||||
******************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
PUT /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
{user_id1},
|
||||
{user_id2},
|
||||
.....
|
||||
],
|
||||
"creator-only":{creator-only-flag}
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/secrets/{uuid}/acl"}
|
||||
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successfully set/replaced secret ACL. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 400 | Bad Request. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Secret not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 415 | Unsupported Media Type. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
|
||||
.. _patch_secret_acl:
|
||||
|
||||
PATCH /v1/secrets/{uuid}/acl
|
||||
############################
|
||||
|
||||
Updates existing ACL for a given secret. This method can be used to apply partial changes on
|
||||
existing ACL settings. Client can update the `users` list and enable or disable `creator-only`
|
||||
flag for existing ACL. List of provided users replaces existing users if any. For an existing
|
||||
list of provided users from an ACL definition, pass empty list [] for `users`.
|
||||
|
||||
Returns an ACL reference in success case.
|
||||
|
||||
.. note::
|
||||
|
||||
PATCH API support will be changing in near future.
|
||||
|
||||
Attributes
|
||||
**********
|
||||
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| Attribute Name | Type | Description | Default |
|
||||
+============================+==========+===============================================+==========+
|
||||
| read | parent | ACL data for read operation. | None |
|
||||
| | element | | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| users | [string] | (optional) List of user ids. This needs to be | None |
|
||||
| | | a user id as returned by Keystone. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| creator-only | boolean | (optional) Flag to mark a secret private so | None |
|
||||
| | | that the user who created the secret and | |
|
||||
| | | ``users`` specified in above list can only | |
|
||||
| | | access the secret. Pass `true` to mark the | |
|
||||
| | | secret private. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
|
||||
Request/Response (Updating creator-only flag):
|
||||
**********************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
PATCH /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":
|
||||
{
|
||||
"creator-only":true
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/secrets/{uuid}/acl"}
|
||||
|
||||
|
||||
Request/Response (Removing all users from ACL):
|
||||
***********************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
PATCH /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":
|
||||
{
|
||||
"users":[]
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/secrets/{uuid}/acl"}
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successfully updated secret ACL. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 400 | Bad Request. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Secret not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 415 | Unsupported Media Type. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
.. _delete_secret_acl:
|
||||
|
||||
DELETE /v1/secrets/{uuid}/acl
|
||||
##############################
|
||||
|
||||
Delete ACL for a given secret. No content is returned in the case of successful
|
||||
deletion.
|
||||
|
||||
Request/Response:
|
||||
*****************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
DELETE /v1/secrets/{uuid}/acl
|
||||
Headers:
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successfully deleted secret ACL. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Secret not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
Container ACL API
|
||||
==================
|
||||
|
||||
.. _get_container_acl:
|
||||
|
||||
GET /v1/containers/{uuid}/acl
|
||||
#############################
|
||||
Retrieve the ACL settings for a given container.
|
||||
|
||||
If no ACL is defined for that container, then :ref:`Default ACL<default_implicit_acl>` is returned.
|
||||
|
||||
Request/Response (With ACL defined):
|
||||
************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Request:
|
||||
|
||||
GET /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{
|
||||
"read":{
|
||||
"updated":"2015-05-12T20:08:47.644264",
|
||||
"created":"2015-05-12T19:23:44.019168",
|
||||
"users":[
|
||||
{user_id1},
|
||||
{user_id2},
|
||||
.....
|
||||
],
|
||||
"creator-only":{creator-only-flag}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Request/Response (With no ACL defined):
|
||||
***************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Request:
|
||||
|
||||
GET /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 200 OK
|
||||
{
|
||||
"read":{
|
||||
"creator-only": false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successful request. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Container not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
.. _put_container_acl:
|
||||
|
||||
PUT /v1/containers/{uuid}/acl
|
||||
#############################
|
||||
Create new or replaces existing ACL for a given container.
|
||||
|
||||
This call is used to add new ACL for an container. If the ACL is already set on a container,
|
||||
this method will replace it with the requested ACL settings. In case of create (first new explicit
|
||||
ACL) or replace existing ACL, 200 is returned in both cases. To delete existing users from
|
||||
an ACL definition, pass empty list [] for `users`.
|
||||
|
||||
Returns an ACL reference in success case.
|
||||
|
||||
Attributes
|
||||
**********
|
||||
|
||||
The ACL resource detailed in this page allows access to individual containers to be controlled.
|
||||
This access is configured via operations on those containers. Currently only the 'read' operation
|
||||
(which includes GET REST actions) is supported.
|
||||
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| Attribute Name | Type | Description | Default |
|
||||
+============================+==========+===============================================+==========+
|
||||
| read | parent | ACL data for read operation. | None |
|
||||
| | element | | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| users | [string] | (optional) List of user ids. This needs to be | [] |
|
||||
| | | a user id as returned by Keystone. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| creator-only | boolean | (optional) Flag to mark a container private | `false` |
|
||||
| | | so that the user who created the container and| |
|
||||
| | | ``users`` specified in above list can only | |
|
||||
| | | access the container. Pass `true` to mark the | |
|
||||
| | | container private. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
|
||||
|
||||
Request/Response (Set ACL):
|
||||
***************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Request:
|
||||
|
||||
PUT /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
{user_id1},
|
||||
{user_id2},
|
||||
.....
|
||||
],
|
||||
"creator-only":{creator-only-flag}
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
|
||||
HTTP/1.1 201 Created
|
||||
{"acl_ref": "https://{barbican_host}/v1/containers/{uuid}/acl"}
|
||||
|
||||
Request/Response (Replace ACL):
|
||||
******************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
PUT /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":{
|
||||
"users":[
|
||||
{user_id1},
|
||||
{user_id2},
|
||||
.....
|
||||
],
|
||||
"creator-only":{creator-only-flag}
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/containers/{uuid}/acl"}
|
||||
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successfully set/replaced container ACL. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 400 | Bad Request. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Container not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 415 | Unsupported Media Type. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
|
||||
.. _patch_container_acl:
|
||||
|
||||
PATCH /v1/containers/{uuid}/acl
|
||||
###############################
|
||||
|
||||
Update existing ACL for a given container. This method can be used to apply partial changes
|
||||
on existing ACL settings. Client can update `users` list and enable or disable `creator-only`
|
||||
flag for existing ACL. List of provided users replaces existing users if any. For an existing
|
||||
list of provided users from an ACL definition, pass empty list [] for `users`.
|
||||
|
||||
Returns an ACL reference in success case.
|
||||
|
||||
.. note::
|
||||
|
||||
PATCH API support will be changing in near future.
|
||||
|
||||
Attributes
|
||||
**********
|
||||
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| Attribute Name | Type | Description | Default |
|
||||
+============================+==========+===============================================+==========+
|
||||
| read | parent | ACL data for read operation. | None |
|
||||
| | element | | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| users | [string] | (optional) List of user ids. This needs to be | None |
|
||||
| | | a user id as returned by Keystone. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
| creator-only | boolean | (optional) Flag to mark a container private | None |
|
||||
| | | so that the user who created the container and| |
|
||||
| | | ``users`` specified in above list can only | |
|
||||
| | | access the container. Pass `true` to mark the | |
|
||||
| | | container private. | |
|
||||
+----------------------------+----------+-----------------------------------------------+----------+
|
||||
|
||||
Request/Response (Updating creator-only flag):
|
||||
**********************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
PATCH /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":
|
||||
{
|
||||
"creator-only":true
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/containers/{uuid}/acl"}
|
||||
|
||||
|
||||
Request/Response (Removing all users from ACL):
|
||||
***********************************************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
PATCH /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
Content-Type: application/json
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Body:
|
||||
{
|
||||
"read":
|
||||
{
|
||||
"users":[]
|
||||
}
|
||||
}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
{"acl_ref": "https://{barbican_host}/v1/containers/{uuid}/acl"}
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successfully updated container ACL. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 400 | Bad Request. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Container not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 415 | Unsupported Media Type. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
|
||||
.. _delete_container_acl:
|
||||
|
||||
DELETE /v1/containers/{uuid}/acl
|
||||
################################
|
||||
|
||||
Delete ACL for a given container. No content is returned in the case of successful
|
||||
deletion.
|
||||
|
||||
Request/Response:
|
||||
*****************
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
DELETE /v1/containers/{uuid}/acl
|
||||
Headers:
|
||||
X-Auth-Token: {token_id}
|
||||
|
||||
Response:
|
||||
HTTP/1.1 200 OK
|
||||
|
||||
|
||||
HTTP Status Codes
|
||||
*****************
|
||||
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| Code | Description |
|
||||
+======+=============================================================================+
|
||||
| 200 | Successfully deleted container ACL. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 401 | Missing or Invalid X-Auth-Token. Authentication required. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 403 | User does not have have permission to access this resource. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
| 404 | Container not found for the given UUID. |
|
||||
+------+-----------------------------------------------------------------------------+
|
||||
Reference in New Issue
Block a user