--- layout: docs page_title: Credential store resource description: >- Learn about using the credential store resource to store and retrieve credentials. Understand the Vault and static credential store attributes you can configure. --- ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ > [!IMPORTANT] > **Documentation Update:** Product documentation previously located in `/website` has moved to the [`hashicorp/web-unified-docs`](https://github.com/hashicorp/web-unified-docs) repository, where all product documentation is now centralized. Please make contributions directly to `web-unified-docs`, since changes to `/website` in this repository will not appear on developer.hashicorp.com. ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️ # Credential stores A credential store is a resource that can retrieve [credentials][] of differing types and differing access levels. It belongs to a [project][] and supports the [principle of least privilege](https://en.wikipedia.org/wiki/Principle_of_least_privilege) by providing mechanisms to limit the [credentials][] it can access to the minimum necessary for the project it is in. Credential stores contain either credential libraries or credentials, depending on the type: - Vault credential stores contain [credential libraries][]. Targets use credential libraries to issue credentials for sessions. - Static credential stores contain credentials, not credential libraries. When you use static credential stores, the credentials are stored directly in Boundary. ## Attributes A credential store has the following configurable attributes: - `name` - (optional) If set, the `name` must be unique within the credential store's project. - `description` - (optional) ### Vault credential store attributes A Vault credential store has the following additional attributes: - `address` - (required) The address of the Vault server. This should be a complete URL such as `https://127.0.0.1:8200`. - `token` - (required) A token used for accessing Vault. This token must meet the [Vault token requirements][token_requirements] described below. Each Vault credential store must be configured with a unique Vault token. - `ca_cert` - (optional) A PEM-encoded CA certificate to verify the Vault server's TLS certificate. - `tls_server_name` - (optional) Name to use as the SNI host when connecting to Vault via TLS. - `tls_skip_verify` - (optional) Disable verification of TLS certificates. Using this option is highly discouraged as it decreases the security of data transmissions to and from the Vault server. - `client_certificate` - (optional) A PEM-encoded client certificate to use for TLS authentication to the Vault server. - `client_certificate_key` - (optional) A PEM-encoded private key matching the client certificate from `client_certificate`. - `namespace` - (optional) A Vault [namespace][]. Requires Vault Enterprise. - `worker_filter` HCP/ENT - (optional) A [filter] used to control which workers can handle Vault requests. This allows the use of private Vault instances with Boundary. Workers deployed in the same network as a private Vault instance can access and relay Vault requests to Boundary controllers. A worker that matches the worker filter must exist before defining the Vault credential store, as it will perform the Vault calls needed to set up the credential store with Boundary. ### Static credential store attributes A static credential store has no type-specific attributes. ## Referenced by - [Credential library][] - [Credential][] - [Project][] ## Service API docs The following services are relevant to this resource: - [Credential store service](/boundary/api-docs/credential-store-service) [credential library]: /boundary/docs/domain-model/credential-libraries [credential libraries]: /boundary/docs/domain-model/credential-libraries [credential]: /boundary/docs/domain-model/credentials [credentials]: /boundary/docs/domain-model/credentials [project]: /boundary/docs/domain-model/scopes#projects ## Vault token requirements Each Vault credential store must be configured with a unique Vault token. The Vault tokens for all credential stores must be [periodic][], [renewable][], and an [orphan][]. All tokens must also have the capabilities of the [Vault Boundary controller policy][token_policy] described below. ### Vault policies The credential store's token must have the capabilities to issue credentials for each of its credential libraries plus the capabilities of the [Vault Boundary controller policy][token_policy] described below. We recommend creating a unique Vault policy for each Vault credential store that grants the minimum set of permissions needed by the credential store's libraries. We also recommend the [Vault Boundary controller policy][token_policy] be kept distinct from any other Vault policies. This allows each credential store to have a token that is configured with two polices: one shared by all credential stores and one unique to that credential store. This also allows a credential store to be created with the minimum permissions necessary at any point in time. The policy unique to a credential store can then be updated as needed when credential libraries are added and removed from the credential store. #### Vault Boundary controller policy The token Boundary receives must have the capabilities in the policy below. An explanation for each capability is documented above the written policy. ```hcl # Allow Boundary to read and verify the properties of the token. This is # provided by the "default" policy. path "auth/token/lookup-self" { capabilities = ["read"] } # Allow Boundary to renew the token. This is provided by the "default" # policy. path "auth/token/renew-self" { capabilities = ["update"] } # Allow Boundary to revoke the token when the credential store is updated # to use a new token or the credential store is deleted. This is provided # by the "default" policy. path "auth/token/revoke-self" { capabilities = ["update"] } # Allow Boundary to renew the credentials in active sessions. This is # provided by the "default" policy. path "sys/leases/renew" { capabilities = ["update"] } # Allow Boundary to revoke the credentials issued for a session when the # session is terminated. path "sys/leases/revoke" { capabilities = ["update"] } # Allow Boundary to read and verify the token's capabilities for each Vault # path used by the credential store. This is provided by the "default" # policy. path "sys/capabilities-self" { capabilities = ["update"] } ``` Follow the steps below to write this policy to Vault. Create the policy: ```shell-session $ cat > boundary-controller-policy.hcl <