docs: update DevOps/Hashicorp-Vault/vault-postgresql-users
parent
f87057d69a
commit
c3f5a1ebc1
|
|
@ -2,7 +2,7 @@
|
|||
title: PostgreSQL через Vault - управление динамическими учетными записями
|
||||
description:
|
||||
published: true
|
||||
date: 2024-08-01T15:34:42.498Z
|
||||
date: 2024-08-01T15:52:14.268Z
|
||||
tags: vault, postgresql
|
||||
editor: markdown
|
||||
dateCreated: 2024-08-01T14:55:31.582Z
|
||||
|
|
@ -37,21 +37,21 @@ $ psql
|
|||
|
||||
Вводим:
|
||||
```
|
||||
=# ALTER USER postgres PASSWORD 'password';
|
||||
=# ALTER USER postgres PASSWORD 'qwerty123';
|
||||
```
|
||||
*в данном примере мы задаем пароль password для пользователя postgres.*
|
||||
*в данном примере мы задаем пароль qwerty123 для пользователя postgres.*
|
||||
|
||||
### Создаем нового пользователя
|
||||
На данном шаге мы создадим пользователя, для которого и будем хранить секрет в Vault. В рамках примера мы не будем его предоставлять никаких доступов. Для нас достаточно, чтобы мы могли подключиться и удостовериться, что пароль будет меняться.
|
||||
|
||||
В той же командной оболочке postgresql вводим:
|
||||
|
||||
=# CREATE USER dmosk WITH PASSWORD 'myPassword';
|
||||
|
||||
*с помощью данной команды мы создадим пользователя dmosk с паролем myPassword.*
|
||||
```
|
||||
=# CREATE USER ksu WITH PASSWORD 'qwerty123';
|
||||
```
|
||||
*с помощью данной команды мы создадим пользователя ksu с паролем qwerty123.*
|
||||
|
||||
### Разрешаем подключение к СУБД
|
||||
Нам необходимо разрешить подключаться к базе данных пользователю dmosk (создали на шаге 2) с локального компьютера и пользователю postgres с сервера Vault. Это делается посредством редактирования файла pg_hba.conf.
|
||||
Нам необходимо разрешить подключаться к базе данных пользователю ksu (создали на шаге 2) с локального компьютера и пользователю postgres с сервера Vault. Это делается посредством редактирования файла pg_hba.conf.
|
||||
|
||||
Но размещение этого файла может быть разным — это зависит от версии установленного PostgreSQL. Вводим команду:
|
||||
```
|
||||
|
|
@ -60,10 +60,10 @@ $ psql
|
|||
Данная команда нам покажет место размещения конфигурационного файла postgresql.conf — в этом же каталоге находятся и другие конфигурационные файлы. Например, если команда показала:
|
||||
```
|
||||
----------------------------------------
|
||||
/var/lib/pgsql/11/data/postgresql.conf
|
||||
/etc/postgresql/11/main/postgresql.conf
|
||||
(1 row)
|
||||
```
|
||||
... то значит нужный нам файл в каталоге /var/lib/pgsql/11/data.
|
||||
... то значит нужный нам файл в каталоге /etc/postgresql/11/main/.
|
||||
|
||||
Выходим из командной оболочки psql:
|
||||
```
|
||||
|
|
@ -75,26 +75,26 @@ $ exit
|
|||
```
|
||||
И вводим:
|
||||
```
|
||||
vi /var/lib/pgsql/11/data/pg_hba.conf
|
||||
vi /etc/postgresql/11/main/pg_hba.conf
|
||||
```
|
||||
*где /var/lib/pgsql/11/data — путь, который мы получили с помощью sql-команды SHOW config_file.*
|
||||
*где /etc/postgresql/11/main/ — путь, который мы получили с помощью sql-команды SHOW config_file.*
|
||||
|
||||
В данном файле мы должны добавить 2 строки:
|
||||
```
|
||||
...
|
||||
# "local" is for Unix domain socket connections only
|
||||
local all dmosk md5
|
||||
local all ksu md5
|
||||
...
|
||||
# IPv4 local connections:
|
||||
host all postgres 192.168.1.20/32 md5
|
||||
host all postgres 172.30.5.19/32 md5
|
||||
...
|
||||
```
|
||||
|
||||
*где 192.168.1.20 — IP-адрес предполагаемого сервера Vault, с которого мы будем подключаться под пользователем postgres.*
|
||||
*где 172.30.5.19 — IP-адрес предполагаемого сервера Vault, с которого мы будем подключаться под пользователем postgres.*
|
||||
|
||||
Открываем конфигурационный файл:
|
||||
```
|
||||
vi /var/lib/pgsql/11/data/postgresql.conf
|
||||
vi /etc/postgresql/11/main/postgresql.conf
|
||||
```
|
||||
Приводим опцию listen_addresses к виду:
|
||||
```
|
||||
|
|
@ -122,19 +122,15 @@ firewall-cmd --reload
|
|||
|
||||
На сервере с СУБД вводим:
|
||||
```
|
||||
psql -Udmosk -W template1
|
||||
psql -Uksu -W template1
|
||||
```
|
||||
* в данном примере мы подключаемся к локальному хосту под пользователем dmosk.
|
||||
* в данном примере мы подключаемся к локальному хосту под пользователем ksu.
|
||||
|
||||
Система запросит пароль — вводим тот, что задали при создании нашего пользователя. Мы должны попасть в оболочку psql.
|
||||
|
||||
Теперь подключаемся по SSH на сервер Vault. Нам придется установить на него клиента postgresql.
|
||||
|
||||
а) На системы RPM (Rocky Linux, CentOS):
|
||||
```
|
||||
yum install postgresql
|
||||
```
|
||||
б) На Deb (Ubuntu, Debian):
|
||||
На Deb (Ubuntu, Debian):
|
||||
```
|
||||
apt install postgresql
|
||||
```
|
||||
|
|
@ -142,9 +138,9 @@ apt install postgresql
|
|||
|
||||
Вводим:
|
||||
```
|
||||
psql -h192.168.1.15 -Upostgres -W
|
||||
psql -h172.30.30.87 -Upostgres -W
|
||||
```
|
||||
*в данном примере мы подключимся к серверу 192.168.1.15 под учетной записью postgres.*
|
||||
*в данном примере мы подключимся к серверу 172.30.30.87 под учетной записью postgres.*
|
||||
|
||||
Консоль у нас запросит пароль — вводим тот, что задали для пользователя postgres. В итоге мы должны подключиться к серверу:
|
||||
```
|
||||
|
|
@ -185,16 +181,16 @@ Error enabling: Error making API request.
|
|||
vault write database/config/postgresql \
|
||||
plugin_name=postgresql-database-plugin \
|
||||
allowed_roles="postgresql-rotate,postgresql-create" \
|
||||
connection_url=postgresql://{{username}}:{{password}}@192.168.0.15:5432/postgres?sslmode=disable \
|
||||
connection_url=postgresql://{{username}}:{{password}}@172.30.30.87:5432/postgres?sslmode=disable \
|
||||
username="postgres" \
|
||||
password="password"
|
||||
password="qwerty123"
|
||||
```
|
||||
где:
|
||||
|
||||
- **database/config/postgresql** — путь в системе Vault к секрету.
|
||||
- **plugin_name** — плагин, который будем использоваться конфигурацией.
|
||||
- **allowed_roles** — для каких ролей будет использоваться данная конфигурация. Ниже по инструкции мы создадим 2 роли — для ротации паролей и для создания временных пользователей.
|
||||
- **connection_url** — строка подключения к базе данных. В данном примере 192.168.0.15 — сервер PostgreSQL.
|
||||
- **connection_url** — строка подключения к базе данных. В данном примере 172.30.30.87 — сервер PostgreSQL.
|
||||
- **username** — пользователь, под которым выполняется подключение к СУБД.
|
||||
- **password** — пароль для пользователя, под которым выполняем подключение.
|
||||
|
||||
|
|
@ -216,7 +212,7 @@ vault write database/config/postgresql \
|
|||
vault write database/static-roles/postgresql-rotate \
|
||||
db_name=postgresql \
|
||||
rotation_statements="ALTER USER \"{{name}}\" WITH PASSWORD '{{password}}';" \
|
||||
username="dmosk" \
|
||||
username="ksu" \
|
||||
rotation_period=720h
|
||||
```
|
||||
|* обратите внимание, что запрос rotation_statements важно написать именно так — первая кавычка двойная, вторая одинарная.
|
||||
|
|
@ -242,22 +238,24 @@ vault read database/static-creds/postgresql-rotate
|
|||
```
|
||||
Key Value
|
||||
--- -----
|
||||
last_vault_rotation 2021-09-07T11:35:07.796668266+03:00
|
||||
password Cai-dzsJDtKTLHSl6Bvt
|
||||
last_vault_rotation 2024-08-01T17:08:42.837263316+03:00
|
||||
password O-Zl1M15Ze1FWzTtPZN1
|
||||
rotation_period 720h
|
||||
ttl 719h48m55s
|
||||
username dmosk
|
||||
ttl 719h39m58s
|
||||
username ksu
|
||||
|
||||
```
|
||||
Где **Cai-dzsJDtKTLHSl6Bvt** — наш пароль от учетной записи dmosk.
|
||||
Где **O-Zl1M15Ze1FWzTtPZN1** — наш пароль от учетной записи ksu.
|
||||
|
||||
Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных:
|
||||
```
|
||||
psql -Udmosk -W template1
|
||||
psql -Uksu -W template1
|
||||
```
|
||||
Мы должны подключиться с использованием пароля, который получили от Vault.
|
||||
|
||||
## Создание временных пользователей в PostgreSQL
|
||||
Давайте теперь рассмотрим настройку, при которой Vault будет создавать временных пользователей. Для этого мы:
|
||||
Давайте теперь рассмотрим настройку, при которой Vault будет создавать временных пользователей.
|
||||
Для этого мы:
|
||||
|
||||
- Создадим роль в Vault, которая будет создавать учетную запись в базе PostgreSQL.
|
||||
- Настроим файл pg_hba.conf для возможности подключаться к базе пользователям по паролю.
|
||||
|
|
@ -289,11 +287,11 @@ Success! Data written to: database/roles/postgresql-create
|
|||
Готово.
|
||||
|
||||
### Настраиваем файл pg_hba.conf
|
||||
Ранее в инструкции мы настраивали данный файл, чтобы обеспечить возможность подключения к базе пользователям dmosk и postgresql. Но при создании динамических учетных записей, логины будут разные — необходимо разрешить парольный вход для всех пользователей.
|
||||
Ранее в инструкции мы настраивали данный файл, чтобы обеспечить возможность подключения к базе пользователям ksu и postgresql. Но при создании динамических учетных записей, логины будут разные — необходимо разрешить парольный вход для всех пользователей.
|
||||
|
||||
Открываем файл:
|
||||
```
|
||||
vi /var/lib/pgsql/11/data/pg_hba.conf
|
||||
vi /etc/postgresql/11/main/pg_hba.conf
|
||||
```
|
||||
* напомню, что путь до нашего файла может быть другим — это зависит от операционной системы и версии postgresql. Посмотреть расположение конфигурационных файлов можно sql-командой **SHOW config_file**;
|
||||
|
||||
|
|
@ -301,7 +299,7 @@ vi /var/lib/pgsql/11/data/pg_hba.conf
|
|||
```
|
||||
...
|
||||
# "local" is for Unix domain socket connections only
|
||||
local all dmosk md5
|
||||
local all ksu md5
|
||||
local all postgres peer
|
||||
local all all md5
|
||||
##local all all peer
|
||||
|
|
@ -325,16 +323,16 @@ vault read database/creds/postgresql-create
|
|||
```
|
||||
Key Value
|
||||
--- -----
|
||||
lease_id database/creds/postgresql-create/HMkEz1q6zuaSeyDNBeC8nhDK
|
||||
lease_id database/creds/postgresql-create/dluf4Zt8DUn28jsEhAv6tqmE
|
||||
lease_duration 1h
|
||||
lease_renewable true
|
||||
password 9oAhg1VIEhleeRA7EU-U
|
||||
username v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720
|
||||
password SREUIRWI2D-IyGi5npN9
|
||||
username v-ldap-dfe-postgres-73SnRsVbtmVw86CAAlPy-1722523328
|
||||
```
|
||||
Наши логин и пароль соответственно — **v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720** и **9oAhg1VIEhleeRA7EU-U**.
|
||||
|
||||
Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных:
|
||||
```
|
||||
psql -U'v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720' -W template1
|
||||
psql -U'v-ldap-dfe-postgres-73SnRsVbtmVw86CAAlPy-1722523328' -W template1
|
||||
```
|
||||
Мы должны подключиться с использованием пароля, который получили от Vault.
|
||||
Loading…
Reference in New Issue