backport of commit 81a5e2ee65944c656b8ee7b9e2ed2c374821eef0 (#21498)

Co-authored-by: Yoko Hyakuna <yoko@hashicorp.com>
This commit is contained in:
hc-github-team-secure-vault-core 2023-06-28 12:00:09 -04:00 committed by GitHub
parent 855754e434
commit c97ada6e49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 112 additions and 56 deletions

View File

@ -8,9 +8,12 @@ description: >-
# Vault Enterprise Namespaces
## Overview
<Note>
-> **Note**: This feature is available in all versions of [Vault Enterprise](https://www.hashicorp.com/products/vault/).
This feature is available in all versions of [Vault
Enterprise](https://www.hashicorp.com/products/vault/).
</Note>
Many organizations implement Vault as a "service", providing centralized
management for teams within an organization while ensuring that those teams
@ -18,62 +21,26 @@ operate within isolated environments known as _tenants_.
There are two common challenges when implementing this architecture in Vault:
**Tenant Isolation**
- **Tenant isolation**
Frequently teams within a VaaS environment require strong isolation from other
users in their policies, secrets, and identities. Tenant isolation is typically a
result of compliance regulations such as [GDPR](https://gdpr.eu/), though it may
be necessitated by corporate or organizational infosec requirements.
Frequently teams within a VaaS environment require strong isolation from other
users in their policies, secrets, and identities. Tenant isolation is typically a
result of compliance regulations such as [GDPR](https://gdpr.eu/), though it may
be necessitated by corporate or organizational infosec requirements.
**Self-Management**
- **Self-management**
As new tenants are added, there is an additional human cost in the management
overhead for teams. Given that tenants will likely have different policies and
request changes at a different rate, managing a multi-tenant environment can
become very difficult for a single team as the number of tenants within that
organization grow.
As new tenants are added, there is an additional human cost in the management
overhead for teams. Given that tenants will likely have different policies and
request changes at a different rate, managing a multi-tenant environment can
become very difficult for a single team as the number of tenants within that
organization grow.
'Namespaces' is a set of features within Vault Enterprise that allows Vault
environments to support _Secure Multi-tenancy_ (or _SMT_) within a single Vault
infrastructure. Through namespaces, Vault administrators can support tenant isolation
for teams and individuals as well as empower delegated administrators to manage their
own tenant environment.
## Usage
API operations performed under a namespace can be done by providing the relative
request path along with the namespace path using the `X-Vault-Namespace` header.
Similarly, the namespace header value can be provided in full or partially when
reaching into nested namespaces. When provided partially, the remaining
namespace path must be provided in the request path in order to reach into the
desired nested namespace.
Alternatively, the fully qualified path can be provided without using the
`X-Vault-Namespace` header. In either scenario, Vault will construct the fully
qualified path from these two sources to correctly route the request to the
appropriate namespace.
For example, these three requests are equivalent:
1. Path: `ns1/ns2/secret/foo`
2. Path: `secret/foo`, Header: `X-Vault-Namespace: ns1/ns2/`
3. Path: `ns2/secret/foo`, Header: `X-Vault-Namespace: ns1/`
## Root only API Paths
There are certain API paths that can only be called from the root namespace:
- `sys/init`
- `sys/leader`
- `sys/health`
- `sys/metrics`
- `sys/config/group-policy-application`
- `sys/config/state`
- `sys/host-info`
- `sys/key-status`
- `sys/storage`
- `sys/storage/raft`
- `sys/quotas`
'Namespaces' is a set of features within Vault Enterprise that allows Vault
environments to support _Secure Multi-tenancy_ (or _SMT_) within a single Vault
infrastructure. Through namespaces, Vault administrators can support tenant isolation
for teams and individuals as well as empower delegated administrators to manage their
own tenant environment.
## Architecture
@ -100,7 +67,96 @@ identities. This behavior can be configured using the [group-policy-application]
can be set to allow policies to be applied irrespective of namespace hierarchy, allowing sharing
across any namespace.
## Usage
API operations performed under a namespace can be done by providing the relative
request path along with the namespace path using the `X-Vault-Namespace` header.
Similarly, the namespace header value can be provided in full or partially when
reaching into nested namespaces. When provided partially, the remaining
namespace path must be provided in the request path in order to reach into the
desired nested namespace.
Alternatively, the fully qualified path can be provided without using the
`X-Vault-Namespace` header. In either scenario, Vault will construct the fully
qualified path from these two sources to correctly route the request to the
appropriate namespace.
For example, these three requests are equivalent:
1. Path: `ns1/ns2/secret/foo`
2. Path: `secret/foo`, Header: `X-Vault-Namespace: ns1/ns2/`
3. Path: `ns2/secret/foo`, Header: `X-Vault-Namespace: ns1/`
<Tip>
See the [Commands (CLI) - namespace](/vault/docs/commands/namespace) page to
learn more about the `namespace` command and subcommands to create and manage
namespaces.
</Tip>
## Namespace naming restrictions
Consider the following namespace name restrictions:
- Cannot end with `/`
- Cannot contain spaces
- The `root` is the top-level namespace. You cannot create another namespace
named "root" under the `root` namespace
In addition, the following paths are reserved by Vault so that they cannot be
the namespace name.
- `sys/`
- `audit/`
- `auth/`
- `cubbyhole/`
- `identity/`
<Tip>
Refer to the [Namespace limits section of the Limits and
Maximums](/vault/docs/internals/limits#namespace-limits) documentation for the
limits associated with the Vault's storage backend.
To learn more about the recommended approach to structure your namespaces, read
the [Vault Namespace and Mount Structuring
Guide](/vault/tutorials/enterprise/namespace-structure) tutorial.
</Tip>
## Root-only API paths
There are certain API paths that can only be called from the **root** namespace:
- `sys/init`
- `sys/leader`
- `sys/health`
- `sys/metrics`
- `sys/config/group-policy-application`
- `sys/config/state`
- `sys/host-info`
- `sys/key-status`
- `sys/storage`
- `sys/storage/raft`
- `sys/quotas`
## Tutorial
Refer to the [Secure Multi-Tenancy with Namespaces](/vault/tutorials/enterprise/namespaces)
tutorial to learn how to use Vault as a Service to allow organizations(tenants) to manage their own secrets and policies.
Refer to the following tutorials to learn more about Vault namespaces:
- [Secure Multi-Tenancy with Namespaces](/vault/tutorials/enterprise/namespaces)
- [Secrets Management Across Namespaces without Hierarchical
Relationship](/vault/tutorials/enterprise/namespaces-secrets-sharing)
- [Vault Namespace and Mount Structuring
Guide](/vault/tutorials/enterprise/namespace-structure)
- [HCP Vault namespace
considerations](/vault/tutorials/cloud-ops/hcp-vault-namespace-considerations)
## API
Vault Enterprise namespace has a full HTTP API. Please see the [/sys/namespaces
API](/vault/api-docs/system/namespaces) for more details.