Removing orphan and deprecated doc page: api.rst
Change-Id: I35aee4890937bd427b94c9637045628dd5a032f4 Signed-off-by: Carlos Marin <ing.cma@gmail.com>
This commit is contained in:
parent
83e7caa02c
commit
c6bc39a3a9
@ -1,439 +0,0 @@
|
|||||||
=================================
|
|
||||||
Application Programming Interface
|
|
||||||
=================================
|
|
||||||
|
|
||||||
THESE DOCS ARE DEPRECATED AS OF APR 2015
|
|
||||||
########################################
|
|
||||||
|
|
||||||
|
|
||||||
This wiki page details the API for the latest Barbican release. In particular:
|
|
||||||
|
|
||||||
* `Endpoints & Versioning`_ - Brief discussion about Barbican's approach to
|
|
||||||
service URIs.
|
|
||||||
* `Secrets Resource`_ - Details storing, retrieving and deleting secrets.
|
|
||||||
* `Orders Resource`_ - Details the ordering facilities for Barbican, used
|
|
||||||
to generate secrets asynchronously.
|
|
||||||
* `Containers Resource`_ - Details storing, retrieving and deleting
|
|
||||||
containers.
|
|
||||||
* `Consumers Resource`_ - Details adding, removing and listing consumers
|
|
||||||
associated with container instances.
|
|
||||||
* `Examples`_ - Provides specific examples utilizing the secrets and
|
|
||||||
orders API.
|
|
||||||
|
|
||||||
Endpoints & Versioning
|
|
||||||
======================
|
|
||||||
|
|
||||||
The barbican service is assumed to be hosted on an SSL enabled, geographically
|
|
||||||
labelled endpoint. An example for a valid URI might look like the following:
|
|
||||||
|
|
||||||
https://dfw.secrets.api.rackspacecloud.com
|
|
||||||
|
|
||||||
Versioning will be achieved through a URI constant element, as shown in the
|
|
||||||
example below:
|
|
||||||
|
|
||||||
https://dfw.secrets.api.rackspacecloud.com/v1/
|
|
||||||
|
|
||||||
Regarding Role Based Access Control (RBAC) of Resources
|
|
||||||
=======================================================
|
|
||||||
|
|
||||||
Resource access in Barbican is subject to RBAC constraints, as detailed in
|
|
||||||
`this link`_.
|
|
||||||
RBAC failures will result in a 403 Forbidden response.
|
|
||||||
|
|
||||||
.. _`this link`: https://github.com/cloudkeep/barbican/wiki/Role-Based-Access-Control
|
|
||||||
|
|
||||||
Secrets Resource
|
|
||||||
================
|
|
||||||
|
|
||||||
Secrets Resource Moved to :doc:`Secrets Reference <api/reference/secrets>`
|
|
||||||
|
|
||||||
Orders Resource
|
|
||||||
===============
|
|
||||||
|
|
||||||
The ordering resource allows for the generation of secret material by Barbican.
|
|
||||||
The ordering object encapsulates the workflow and history for the creation of a
|
|
||||||
secret. This interface is implemented as an asynchronous process since the time
|
|
||||||
to generate a secret can vary depending on the type of secret.
|
|
||||||
|
|
||||||
POST
|
|
||||||
----
|
|
||||||
|
|
||||||
An example of an `orders` POST request is below.
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
POST v1/orders
|
|
||||||
|
|
||||||
Header: content-type=application/json
|
|
||||||
X-Project-Id: {project_id}
|
|
||||||
{
|
|
||||||
"type": "key",
|
|
||||||
"meta": {
|
|
||||||
"name": "secretname",
|
|
||||||
"algorithm": "AES",
|
|
||||||
"bit_length": 256,
|
|
||||||
"mode": "cbc",
|
|
||||||
"payload_content_type": "application/octet-stream"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Where the elements of the `meta` element match those of the `secret` POST
|
|
||||||
request above, but without the `payload` attributes. _Note however that unlike
|
|
||||||
with the `secrets` resource, the `algorithm`, `bit_length` and `mode`
|
|
||||||
attributes are validated, to ensure that a secret can be generated per these
|
|
||||||
specifications._ The `type` parameter selects the secret to generate: `key`
|
|
||||||
generates a symmetric key; `asymmetric` generates a public/private PKI key pair
|
|
||||||
(in a Container object); certificate` generates an SSL certificate (not
|
|
||||||
currently operational).
|
|
||||||
|
|
||||||
If the Content-Type in the HTTP header is not set to "application/json" then
|
|
||||||
the POST call will fail with an HTTP 415 error.
|
|
||||||
|
|
||||||
PUT
|
|
||||||
---
|
|
||||||
|
|
||||||
Currently nothing can be edited in an order.
|
|
||||||
|
|
||||||
GET - Individual Order
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
GET requests for an `order` will return a response such as in the example
|
|
||||||
below.
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
GET v1/orders/{order_id}
|
|
||||||
Headers: X-Project-Id: {project_id}
|
|
||||||
|
|
||||||
{
|
|
||||||
"type": "key",
|
|
||||||
"meta": {
|
|
||||||
"name": "secretname",
|
|
||||||
"algorithm": "aes",
|
|
||||||
"bit_length": 256,
|
|
||||||
"mode": "cbc",
|
|
||||||
"payload_content_type": "application/octet-stream"
|
|
||||||
},
|
|
||||||
"order_ref": "http://localhost:8080/v1/orders/f9b633d8-fda5-4be8-b42c-5b2c9280289e",
|
|
||||||
"secret_ref": "http://localhost:8080/v1/secrets/888b29a4-c7cf-49d0-bfdf-bd9e6f26d718",
|
|
||||||
"status": "ERROR",
|
|
||||||
"error_status_code": "400 Bad Request",
|
|
||||||
"error_reason": "Secret creation issue seen - content-encoding of 'bogus' not supported."
|
|
||||||
}
|
|
||||||
|
|
||||||
Where:
|
|
||||||
|
|
||||||
* **meta** - Secret parameters provided in the original order request. _Note
|
|
||||||
that this is not the same as retrieving a Secret resource per the `secrets`
|
|
||||||
resource, so elements such as a secret's `content_types` will not be
|
|
||||||
displayed. To see such details, perform a GET on the `secret_ref`._
|
|
||||||
* **type** - Secret type in the original order request.
|
|
||||||
* **order_ref** - URI to this order.
|
|
||||||
* **status** - Status of the order, one of PENDING, ACTIVE or ERROR. Clients
|
|
||||||
should poll the order for a status change to ACTIVE (in which case
|
|
||||||
`secret_ref` has the secret details) or ERROR (in which case `error_reason`
|
|
||||||
has the error reason, and 'error_status_code' has an HTTP-style status code).
|
|
||||||
* **secret_ref** - URI to the secret *once it is generated*. This field is not
|
|
||||||
available unless the status is ACTIVE.
|
|
||||||
* **error_status_code** - (optional) HTTP-style status code of the root cause
|
|
||||||
error condition, only if status is ERROR.
|
|
||||||
* **error_reason** - (optional) Details of the root cause error condition, only
|
|
||||||
if status is ERROR.
|
|
||||||
|
|
||||||
GET - List of Orders Per Project
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
Performing a GET on the orders resource with no UUID retrieves a batch of the
|
|
||||||
most recent orders per the requesting project, as per the example response
|
|
||||||
below. The `limit` and `offset` parameters function similar to the GET secrets
|
|
||||||
list detailed above.
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
GET http://localhost:9311/v1/orders?limit=3&offset=2
|
|
||||||
Headers: X-Project-Id: {project_id}
|
|
||||||
|
|
||||||
{
|
|
||||||
"orders": [
|
|
||||||
{
|
|
||||||
"status": "ACTIVE",
|
|
||||||
"secret_ref": "http://localhost:9311/v1/secrets/bf2b33d5-5347-4afb-9009-b4597f415b7f",
|
|
||||||
"updated": "2013-06-28T18:29:37.058718",
|
|
||||||
"created": "2013-06-28T18:29:36.001750",
|
|
||||||
"type": "key",
|
|
||||||
"meta": {
|
|
||||||
"name": "secretname",
|
|
||||||
"algorithm": "aes",
|
|
||||||
"bit_length": 256,
|
|
||||||
"mode": "cbc",
|
|
||||||
"payload_content_type": "application/octet-stream"
|
|
||||||
},
|
|
||||||
"order_ref": "http://localhost:9311/v1/orders/3100078a-6ab1-4c3f-ab9f-295938c91733"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"status": "ACTIVE",
|
|
||||||
"secret_ref": "http://localhost:9311/v1/secrets/fa71b143-f10e-4f7a-aa82-cc292dc33eb5",
|
|
||||||
"updated": "2013-06-28T18:29:37.058718",
|
|
||||||
"created": "2013-06-28T18:29:36.001750",
|
|
||||||
"type": "key",
|
|
||||||
"meta": {
|
|
||||||
"name": "secretname",
|
|
||||||
"algorithm": "aes",
|
|
||||||
"bit_length": 256,
|
|
||||||
"mode": "cbc",
|
|
||||||
"payload_content_type": "application/octet-stream"
|
|
||||||
},
|
|
||||||
"order_ref": "http://localhost:9311/v1/orders/30b3758a-7b8e-4f2c-b9f0-f590c6f8cc6d"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
The retrieved list of orders is ordered by oldest to newest `created` date.
|
|
||||||
|
|
||||||
Orders Summary
|
|
||||||
--------------
|
|
||||||
|
|
||||||
> https://.../v1/orders/
|
|
||||||
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| Method | Description |
|
|
||||||
+========+===================================================================+
|
|
||||||
| GET | Returns a list of all orders for a customer. |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| POST | Starts the process of creating a secret. This call will return |
|
|
||||||
| | immediately with a 202 OK and a link to the detail order object |
|
|
||||||
| | (see below). |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
|
|
||||||
> https://.../v1/orders/{order_uuid}
|
|
||||||
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| Method | Description |
|
|
||||||
+========+===================================================================+
|
|
||||||
| GET | Returns the detailed order data including a link to the secret |
|
|
||||||
| | generated as a result of the order (if available). |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| PUT | **Not yet supported**. Allows the editing of an order where |
|
|
||||||
| | allowed. |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| DELETE | Cancels an order. |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
|
|
||||||
Error Responses
|
|
||||||
~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
+------------------------+-------+-------------------------------------------+
|
|
||||||
| Action | Error | Notes |
|
|
||||||
| | Code | |
|
|
||||||
+========================+=======+===========================================+
|
|
||||||
| POST order with | 400 | Can include schema violations such as the |
|
|
||||||
| invalid data | | secret's mime-type not specified |
|
|
||||||
+------------------------+-------+-------------------------------------------+
|
|
||||||
| POST order with | 415 | Caused when the API doesn't support the |
|
|
||||||
| 'Content-Type' header | | specified Content-Type header |
|
|
||||||
| not supported | | |
|
|
||||||
+------------------------+-------+-------------------------------------------+
|
|
||||||
| POST secret with | 400 | Caused when no crypto plugin supports the |
|
|
||||||
| 'payload_content_type' | | payload_content_type requested |
|
|
||||||
| not supported | | |
|
|
||||||
+------------------------+-------+-------------------------------------------+
|
|
||||||
| GET order that doesn't | 404 | The supplied UUID doesn't match a order |
|
|
||||||
| exist | | in the data store |
|
|
||||||
+------------------------+-------+-------------------------------------------+
|
|
||||||
| DELETE order that | 404 | The supplied UUID doesn't match a order |
|
|
||||||
| doesn't exist | | in the data store |
|
|
||||||
+------------------------+-------+-------------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
Containers Resource
|
|
||||||
===================
|
|
||||||
|
|
||||||
Containers Resource Moved to :doc:`Containers Reference <api/reference/containers>`
|
|
||||||
|
|
||||||
Consumers Resource
|
|
||||||
==================
|
|
||||||
|
|
||||||
The consumers resource allows clients to register as interested in specific
|
|
||||||
container instances (as created per the previous section). Clients can then
|
|
||||||
query containers for the consumers that registered interest in them. Client
|
|
||||||
workflows could use this list (for example) to warn of attempts to remove
|
|
||||||
containers that have registered consumers. Note that Barbican allows containers
|
|
||||||
to be deleted even if there are registered consumers for them.
|
|
||||||
|
|
||||||
POST
|
|
||||||
----
|
|
||||||
|
|
||||||
An example of an `consumers` POST request is below.
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
POST v1/containers/888b29a4-c7cf-49d0-bfdf-bd9e6f26d718/consumers
|
|
||||||
|
|
||||||
Header: content-type=application/json
|
|
||||||
X-Project-Id: {project_id}
|
|
||||||
{
|
|
||||||
"name": "foo-service",
|
|
||||||
"URL": "https://www.fooservice.com/widgets/1234"
|
|
||||||
}
|
|
||||||
|
|
||||||
Where the `name` is typically the name of the remote service registering as a
|
|
||||||
consumer for this container instance, and 'URL' is typically a URL to a
|
|
||||||
resource in the remote service that utilizes the container's secrets somehow,
|
|
||||||
such as a load balancer that has a container's SSL certificate installed onto
|
|
||||||
it.
|
|
||||||
|
|
||||||
Note that subsequent POSTs to the same container instance with the same `name`
|
|
||||||
attribute will replace the previous URL registered for that `name`.
|
|
||||||
|
|
||||||
GET - List of Consumers Per Container Instance
|
|
||||||
----------------------------------------------
|
|
||||||
|
|
||||||
**Note: This feature seems to be broken currently, by not displaying the
|
|
||||||
navigation links per the example below.**
|
|
||||||
|
|
||||||
Performing a GET on a specific container resource returns a list of consumers
|
|
||||||
that registered with it. The `limit` and `offset` parameters function similar
|
|
||||||
to the GET secrets list detailed above.
|
|
||||||
|
|
||||||
.. code-block:: javascript
|
|
||||||
|
|
||||||
GET http://localhost:9311/v1/containers/888b29a4-c7cf-49d0-bfdf-bd9e6f26d718/consumers?limit=3&offset=2
|
|
||||||
Headers: X-Project-Id: {project_id}
|
|
||||||
|
|
||||||
{
|
|
||||||
"consumers": [
|
|
||||||
{
|
|
||||||
"name": "foo-service",
|
|
||||||
"URL": "https://www.fooservice.com/widgets/1234"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "barService",
|
|
||||||
"URL": "https://www.barservice.com/mythings/5678"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"next":"http://localhost:9311/v1/containers/888b29a4-c7cf-49d0-bfdf-bd9e6f26d718/consumers?limit=10&offset=10"
|
|
||||||
}
|
|
||||||
|
|
||||||
The retrieved list of consumers is ordered by oldest to newest `created` date.
|
|
||||||
|
|
||||||
Consumers Summary
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
> https://.../v1/containers/<container-UUID>/consumers
|
|
||||||
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| Method | Description |
|
|
||||||
+========+===================================================================+
|
|
||||||
| GET | Returns a list of all consumers registered for a container. |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| POST | Registers/adds consumer information to a container. |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
| DELETE | Removes a registered consumer by specifying its `name` and `URL` |
|
|
||||||
| | in the JSON payload. |
|
|
||||||
+--------+-------------------------------------------------------------------+
|
|
||||||
|
|
||||||
Examples
|
|
||||||
========
|
|
||||||
|
|
||||||
The following are example combinations, inspired by `this page`_.
|
|
||||||
|
|
||||||
.. _`this page`: http://stackoverflow.com/questions/11946920/http-content-negotiation-compression-use-base64-with-accept-encoding-content-en
|
|
||||||
|
|
||||||
The tables in this section are focused on the content-types and
|
|
||||||
content-encodings of the various REST verb flows, even though each flow might
|
|
||||||
have a different way to specify these values (either via http header settings
|
|
||||||
or JSON request field). The reason for this approach is that while each flow
|
|
||||||
has a different means to specify the mime-type and encoding, the values set for
|
|
||||||
them must still be consistent with valid mime-type or encoding selections.
|
|
||||||
|
|
||||||
One-Step UTF-8/ASCII Secret Create/Retrieve
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
+--------------------+---------------------------------------+-----------------------------+---------------------------------+
|
|
||||||
| Action | content-type | content-encoding | Result |
|
|
||||||
+====================+=======================================+=============================+=================================+
|
|
||||||
| POST secrets | `payload_content_type` = `text/plain` | `payload_content_encoding` | Supplied `payload` is encrypted |
|
|
||||||
| | | Not required/ignored | |
|
|
||||||
+--------------------+---------------------------------------+-----------------------------+---------------------------------+
|
|
||||||
| GET secrets (meta) | `Accept: application/json` | Not required/ignored | JSON metadata, with |
|
|
||||||
| | | | `Content-Types` set to |
|
|
||||||
| | | | `'default':'text/plain'` |
|
|
||||||
+--------------------+---------------------------------------+-----------------------------+---------------------------------+
|
|
||||||
| GET secrets | `Accept: text/plain` | Not required/ignored | Previous `payload` is decrypted |
|
|
||||||
| | | | and returned |
|
|
||||||
+--------------------+---------------------------------------+-----------------------------+---------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
One-Step Binary Secret Create/Retrieve
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+----------------------------------------+
|
|
||||||
| Action | content-type | content-encoding | Result |
|
|
||||||
+====================+=======================================+=======================================+========================================+
|
|
||||||
| POST secrets | `payload_content_type` = | `payload_content_encoding` = `base64` | Supplied `payload` is converted from |
|
|
||||||
| | `application/octet-stream` | | base64 to binary, then encrypted. |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+----------------------------------------+
|
|
||||||
| GET secrets (meta) | `Accept: application/json` | Not required/ignored | JSON metadata, with `Content-Types` |
|
|
||||||
| | | | set to |
|
|
||||||
| | | | `'default':'application/octet-stream'` |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+----------------------------------------+
|
|
||||||
| GET secrets | `Accept: application/octet-stream` | Not specified | Previous `payload` is decrypted and |
|
|
||||||
| (decrypted) | | | returned as raw binary, *even if the |
|
|
||||||
| | | | POST provided the data in `base64`*. |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+----------------------------------------+
|
|
||||||
|
|
||||||
Two-Step Binary Secret Create/Retrieve
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
+--------------------+------------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| Action | content-type | content-encoding | Result |
|
|
||||||
+====================+==========================================+=======================================+=======================================+
|
|
||||||
| POST secrets | `payload_content_type` | `payload_content_encoding` Not | Only metadata is created. If the |
|
|
||||||
| | Not required/ignored | required/ignored | `payload_content_type` or |
|
|
||||||
| | | | `payload_content_encoding` fields |
|
|
||||||
| | | | were provided, they are not used or |
|
|
||||||
| | | | saved with the metadata. The PUT |
|
|
||||||
| | | | request (next) will determine the |
|
|
||||||
| | | | secret's content type |
|
|
||||||
+--------------------+------------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| PUT secrets | `Content-Type: application/octet-stream` | `Content-Encoding: base64` | Supplied request body is *converted |
|
|
||||||
| (option #1 - as | | | from base64 to binary*, then |
|
|
||||||
| base64) | | | encrypted |
|
|
||||||
+--------------------+------------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| PUT secrets | `Content-Type: application/octet-stream` | Not specified | Supplied request body is encrypted as |
|
|
||||||
| (option #2 - as | | | is |
|
|
||||||
| binary) | | | |
|
|
||||||
+--------------------+------------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| GET secrets (meta) | `Accept: application/json` | Not required/ignored | JSON metadata, with `Content-Types` |
|
|
||||||
| | | | set to |
|
|
||||||
| | | | `'default':'application/octet-stream'`|
|
|
||||||
+--------------------+------------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| GET secrets | `Accept: application/octet-stream` | Not specified | Previous request is decrypted and |
|
|
||||||
| (decrypted) | | | returned as raw binary, *even if the |
|
|
||||||
| | | | PUT provided the data in `base64`*. |
|
|
||||||
+--------------------+------------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
|
|
||||||
|
|
||||||
Two-Step Plain-Text Secret Create/Retrieve
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| Action | content-type | content-encoding | Result |
|
|
||||||
+====================+=======================================+=======================================+=======================================+
|
|
||||||
| POST secrets | `payload_content_type` Not | `payload_content_encoding` Not | Only metadata is created. If the |
|
|
||||||
| | required/ignored | required/ignored | `payload_content_type` or |
|
|
||||||
| | | | `payload_content_encoding` fields |
|
|
||||||
| | | | were provided, they are not used or |
|
|
||||||
| | | | saved with the metadata. The PUT |
|
|
||||||
| | | | request (next) will determine the |
|
|
||||||
| | | | secret's content format |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| PUT secrets | `Content-Type: text/plain` | Not required/ignored | Supplied request body is encrypted as |
|
|
||||||
| | | | is |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| GET secrets (meta) | `Accept: application/json` | Not required/ignored | JSON metadata, with `Content-Types` |
|
|
||||||
| | | | set to `'default':'text/plain'` |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+---------------------------------------+
|
|
||||||
| GET secrets | `Accept: text/plain` | Not specified | Previous request is decrypted and |
|
|
||||||
| (decrypted) | | | returned as utf-8 text |
|
|
||||||
+--------------------+---------------------------------------+---------------------------------------+---------------------------------------+
|
|
Loading…
Reference in New Issue
Block a user