mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-11-04 04:28:08 +00:00 
			
		
		
		
	* Docs: PostgreSQL Docs added DB name note for connection_url. Relates to #12458. * Trigger CI Co-authored-by: Zlaticanin <zlaticaninmilena@gmail.com>
		
			
				
	
	
		
			96 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
---
 | 
						|
layout: docs
 | 
						|
page_title: PostgreSQL - Database - Secrets Engines
 | 
						|
description: |-
 | 
						|
  PostgreSQL is one of the supported plugins for the database secrets engine.
 | 
						|
  This plugin generates database credentials dynamically based on configured
 | 
						|
  roles for the PostgreSQL database.
 | 
						|
---
 | 
						|
 | 
						|
# PostgreSQL Database Secrets Engine
 | 
						|
 | 
						|
PostgreSQL is one of the supported plugins for the database secrets engine. This
 | 
						|
plugin generates database credentials dynamically based on configured roles for
 | 
						|
the PostgreSQL database, and also supports [Static
 | 
						|
Roles](/docs/secrets/databases#static-roles).
 | 
						|
 | 
						|
See the [database secrets engine](/docs/secrets/databases) docs for
 | 
						|
more information about setting up the database secrets engine.
 | 
						|
 | 
						|
The PostgreSQL secrets engine uses [pgx][pgxlib], the same database library as the
 | 
						|
[PostgreSQL storage backend](/docs/configuration/storage/postgresql). Connection string
 | 
						|
options, including SSL options, can be found in the [pgx][pgxlib] and
 | 
						|
[PostgreSQL connection string][pg_conn_docs] documentation.
 | 
						|
 | 
						|
## Capabilities
 | 
						|
 | 
						|
| Plugin Name                  | Root Credential Rotation | Dynamic Roles | Static Roles | Username Customization |
 | 
						|
| ---------------------------- | ------------------------ | ------------- | ------------ | ---------------------- |
 | 
						|
| `postgresql-database-plugin` | Yes                      | Yes           | Yes          | Yes (1.7+)             |
 | 
						|
 | 
						|
## Setup
 | 
						|
 | 
						|
1.  Enable the database secrets engine if it is not already enabled:
 | 
						|
 | 
						|
    ```shell-session
 | 
						|
    $ vault secrets enable database
 | 
						|
    Success! Enabled the database secrets engine at: database/
 | 
						|
    ```
 | 
						|
 | 
						|
    By default, the secrets engine will enable at the name of the engine. To
 | 
						|
    enable the secrets engine at a different path, use the `-path` argument.
 | 
						|
 | 
						|
1.  Configure Vault with the proper plugin and connection information:
 | 
						|
 | 
						|
    ```shell-session
 | 
						|
    $ vault write database/config/my-postgresql-database \
 | 
						|
        plugin_name="postgresql-database-plugin" \
 | 
						|
        allowed_roles="my-role" \
 | 
						|
        connection_url="postgresql://{{username}}:{{password}}@localhost:5432/database-name" \
 | 
						|
        username="vaultuser" \
 | 
						|
        password="vaultpass"
 | 
						|
    ```
 | 
						|
 | 
						|
1.  Configure a role that maps a name in Vault to an SQL statement to execute to
 | 
						|
    create the database credential:
 | 
						|
 | 
						|
    ```shell-session
 | 
						|
    $ vault write database/roles/my-role \
 | 
						|
        db_name="my-postgresql-database" \
 | 
						|
        creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
 | 
						|
            GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
 | 
						|
        default_ttl="1h" \
 | 
						|
        max_ttl="24h"
 | 
						|
    Success! Data written to: database/roles/my-role
 | 
						|
    ```
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
After the secrets engine is configured and a user/machine has a Vault token with
 | 
						|
the proper permission, it can generate credentials.
 | 
						|
 | 
						|
1.  Generate a new credential by reading from the `/creds` endpoint with the name
 | 
						|
    of the role:
 | 
						|
 | 
						|
    ```shell-session
 | 
						|
    $ vault read database/creds/my-role
 | 
						|
    Key                Value
 | 
						|
    ---                -----
 | 
						|
    lease_id           database/creds/my-role/2f6a614c-4aa2-7b19-24b9-ad944a8d4de6
 | 
						|
    lease_duration     1h
 | 
						|
    lease_renewable    true
 | 
						|
    password           SsnoaA-8Tv4t34f41baD
 | 
						|
    username           v-vaultuse-my-role-x
 | 
						|
    ```
 | 
						|
 | 
						|
## API
 | 
						|
 | 
						|
The full list of configurable options can be seen in the [PostgreSQL database
 | 
						|
plugin API](/api-docs/secret/databases/postgresql) page.
 | 
						|
 | 
						|
For more information on the database secrets engine's HTTP API please see the
 | 
						|
[Database secrets engine API](/api-docs/secret/databases) page.
 | 
						|
 | 
						|
[pgxlib]: https://pkg.go.dev/github.com/jackc/pgx/stdlib
 | 
						|
[pg_conn_docs]: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
 |