open-vault/website/content/docs/concepts/namespace-api-lock.mdx
swayne275 0604c12f27
Namespace API Lock docs (#13064)
* add api lock doc

* add docs nav data

* Update website/content/api-docs/system/namespaces.mdx

Co-authored-by: Chris Capurso <christopher.capurso@gmail.com>

* update command doc

* clarify locked http status code

* add example exempt path

* further exempt clarification

* link api locked response

* add x-vault-namespace api example

* Update website/content/docs/concepts/namespace-api-lock.mdx

Co-authored-by: Loann Le <84412881+taoism4504@users.noreply.github.com>

* review suggestions

* few other small tweaks

Co-authored-by: Chris Capurso <christopher.capurso@gmail.com>
Co-authored-by: Loann Le <84412881+taoism4504@users.noreply.github.com>
2021-11-09 15:43:17 -07:00

86 lines
3.5 KiB
Plaintext

---
layout: docs
page_title: Namespace API Lock
description: Lock the Vault API on a per-namespace basis.
---
# Namespace Lock and Unlock
Vault makes the API available (unlocked) by default for all namespaces. In
this state, Vault can respond to all API/CLI ('API' from here on out) requests
as normal.
A Vault administrator can lock the API for particular namespaces. In this state,
Vault blocks all but a selected few API endpoints from responding to clients
operating in a locked namespace (or a descendant of a locked namespace). The
endpoints that do respond, the exempt paths, are largely the same as the Vault
unauthenticated paths. They are mainly used for checking the status of various
systems (e.g., `sys/health`), or for unlocking the API.
When the API is locked for a particular namespace, it is also locked for all
descendants of that namespace. If the API was already locked for a descendant,
that lock will remain, but Vault must be unlocked for the parent before
unlocking the descendant.
## Why?
Blocking access to much of Vault can be an important break-glass tool in the
event of unexpected behavior.
For HCP Vault, this provides functionality analogous to sealing Vault, without
the Vault administrator requesting that the Managed Service Provider seal/unseal
Vault.
This feature also becomes valuable for secure multitenancy in a variety of Vault
deployment strategies. You can restrict Vault access for just part of an
organization, without affecting adjacent parts of the business. If unexpected
behavior is detected in sub-organization A, an administrator can disable Vault
access for any entity under sub-organization A, without disabling access for
sub-organization B. Once the cause has been identified and resolved, the API can
be unlocked for sub-organization A.
## Locking
The API can be locked by running `vault namespace lock` (or via the API) while
operating in the namespace to lock. Optionally, a subpath can be provided to
lock a descendant of the current namespace.
An unlock key will be returned, which can be used to unlock the API for that
namespace. Preserve this key to unlock the API in the future.
When the API is locked for a namespace, it will also be locked for all
descendants of that namespace. If an authenticated client attempts to access
Vault from a locked namespace, the returned error will inform that client of the
locking namespace.
## Unlocking
The API can be unlocked by running `vault namespace unlock` (or via the API)
while operating in the namespace to unlock. Optionally, a subpath can be
provided to lock a descendant of the current namespace.
In general, an unlock key is required to unlock the API. This is the same as the
unlock key provided when the namespace was locked.
The unlock key requirement can be overriden by using a root token with the
unlock request. In this case, the unlock key does not need to be provided.
When the API is unlocked, it will also be unlocked for all descendants that were
locked with it. If a descendant namespace was previously locked, that lock will
remain in place.
## API Locked Response
If a request is made to a non-exempt path from a locked namespace, e.g. `nsA`,
Vault responds with an HTTP 503: Service Unavailable. It will also produce the
following error:
`API access to this namespace has been locked by an administrator - "nsA" must be unlocked to gain access.`
Similarly, the same error will return if a request is made in a descendant of
`nsA`.
## How does this work with replication?
API Lock status is replicated to all clusters, and observed at all nodes.