docs: update DevOps/Hashicorp-Vault/vault-postgresql-users

main
Федоров Дмитрий 2024-08-01 15:52:20 +00:00 committed by Dmitriy Fedorov
parent f87057d69a
commit c3f5a1ebc1
1 changed files with 47 additions and 49 deletions

View File

@ -2,7 +2,7 @@
title: PostgreSQL через Vault - управление динамическими учетными записями title: PostgreSQL через Vault - управление динамическими учетными записями
description: description:
published: true published: true
date: 2024-08-01T15:34:42.498Z date: 2024-08-01T15:52:14.268Z
tags: vault, postgresql tags: vault, postgresql
editor: markdown editor: markdown
dateCreated: 2024-08-01T14:55:31.582Z 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. В рамках примера мы не будем его предоставлять никаких доступов. Для нас достаточно, чтобы мы могли подключиться и удостовериться, что пароль будет меняться. На данном шаге мы создадим пользователя, для которого и будем хранить секрет в Vault. В рамках примера мы не будем его предоставлять никаких доступов. Для нас достаточно, чтобы мы могли подключиться и удостовериться, что пароль будет меняться.
В той же командной оболочке postgresql вводим: В той же командной оболочке postgresql вводим:
```
=# CREATE USER dmosk WITH PASSWORD 'myPassword'; =# CREATE USER ksu WITH PASSWORD 'qwerty123';
```
*с помощью данной команды мы создадим пользователя dmosk с паролем myPassword.* *с помощью данной команды мы создадим пользователя ksu с паролем qwerty123.*
### Разрешаем подключение к СУБД ### Разрешаем подключение к СУБД
Нам необходимо разрешить подключаться к базе данных пользователю dmosk (создали на шаге 2) с локального компьютера и пользователю postgres с сервера Vault. Это делается посредством редактирования файла pg_hba.conf. Нам необходимо разрешить подключаться к базе данных пользователю ksu (создали на шаге 2) с локального компьютера и пользователю postgres с сервера Vault. Это делается посредством редактирования файла pg_hba.conf.
Но размещение этого файла может быть разным — это зависит от версии установленного PostgreSQL. Вводим команду: Но размещение этого файла может быть разным — это зависит от версии установленного PostgreSQL. Вводим команду:
``` ```
@ -60,10 +60,10 @@ $ psql
Данная команда нам покажет место размещения конфигурационного файла postgresql.conf — в этом же каталоге находятся и другие конфигурационные файлы. Например, если команда показала: Данная команда нам покажет место размещения конфигурационного файла postgresql.conf — в этом же каталоге находятся и другие конфигурационные файлы. Например, если команда показала:
``` ```
---------------------------------------- ----------------------------------------
/var/lib/pgsql/11/data/postgresql.conf /etc/postgresql/11/main/postgresql.conf
(1 row) (1 row)
``` ```
... то значит нужный нам файл в каталоге /var/lib/pgsql/11/data. ... то значит нужный нам файл в каталоге /etc/postgresql/11/main/.
Выходим из командной оболочки psql: Выходим из командной оболочки 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 строки: В данном файле мы должны добавить 2 строки:
``` ```
... ...
# "local" is for Unix domain socket connections only # "local" is for Unix domain socket connections only
local all dmosk md5 local all ksu md5
... ...
# IPv4 local connections: # 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 к виду: Приводим опцию listen_addresses к виду:
``` ```
@ -122,19 +122,15 @@ firewall-cmd --reload
На сервере с СУБД вводим: На сервере с СУБД вводим:
``` ```
psql -Udmosk -W template1 psql -Uksu -W template1
``` ```
* в данном примере мы подключаемся к локальному хосту под пользователем dmosk. * в данном примере мы подключаемся к локальному хосту под пользователем ksu.
Система запросит пароль — вводим тот, что задали при создании нашего пользователя. Мы должны попасть в оболочку psql. Система запросит пароль — вводим тот, что задали при создании нашего пользователя. Мы должны попасть в оболочку psql.
Теперь подключаемся по SSH на сервер Vault. Нам придется установить на него клиента postgresql. Теперь подключаемся по SSH на сервер Vault. Нам придется установить на него клиента postgresql.
а) На системы RPM (Rocky Linux, CentOS): На Deb (Ubuntu, Debian):
```
yum install postgresql
```
б) На Deb (Ubuntu, Debian):
``` ```
apt install postgresql 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. В итоге мы должны подключиться к серверу: Консоль у нас запросит пароль — вводим тот, что задали для пользователя postgres. В итоге мы должны подключиться к серверу:
``` ```
@ -183,18 +179,18 @@ Error enabling: Error making API request.
Создаем конфигурацию с опциями подключения к базе данных: Создаем конфигурацию с опциями подключения к базе данных:
``` ```
vault write database/config/postgresql \ vault write database/config/postgresql \
plugin_name=postgresql-database-plugin \ plugin_name=postgresql-database-plugin \
allowed_roles="postgresql-rotate,postgresql-create" \ 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" \ username="postgres" \
password="password" password="qwerty123"
``` ```
где: где:
- **database/config/postgresql** — путь в системе Vault к секрету. - **database/config/postgresql** — путь в системе Vault к секрету.
- **plugin_name** — плагин, который будем использоваться конфигурацией. - **plugin_name** — плагин, который будем использоваться конфигурацией.
- **allowed_roles** — для каких ролей будет использоваться данная конфигурация. Ниже по инструкции мы создадим 2 роли — для ротации паролей и для создания временных пользователей. - **allowed_roles** — для каких ролей будет использоваться данная конфигурация. Ниже по инструкции мы создадим 2 роли — для ротации паролей и для создания временных пользователей.
- **connection_url** — строка подключения к базе данных. В данном примере 192.168.0.15 — сервер PostgreSQL. - **connection_url** — строка подключения к базе данных. В данном примере 172.30.30.87 — сервер PostgreSQL.
- **username** — пользователь, под которым выполняется подключение к СУБД. - **username** — пользователь, под которым выполняется подключение к СУБД.
- **password** — пароль для пользователя, под которым выполняем подключение. - **password** — пароль для пользователя, под которым выполняем подключение.
@ -214,10 +210,10 @@ vault write database/config/postgresql \
Настройка задается с помощью static-roles. В нашем Vault вводим команду: Настройка задается с помощью static-roles. В нашем Vault вводим команду:
``` ```
vault write database/static-roles/postgresql-rotate \ vault write database/static-roles/postgresql-rotate \
db_name=postgresql \ db_name=postgresql \
rotation_statements="ALTER USER \"{{name}}\" WITH PASSWORD '{{password}}';" \ rotation_statements="ALTER USER \"{{name}}\" WITH PASSWORD '{{password}}';" \
username="dmosk" \ username="ksu" \
rotation_period=720h rotation_period=720h
``` ```
|* обратите внимание, что запрос rotation_statements важно написать именно так — первая кавычка двойная, вторая одинарная. |* обратите внимание, что запрос rotation_statements важно написать именно так — первая кавычка двойная, вторая одинарная.
|** в данном примере: |** в данном примере:
@ -242,22 +238,24 @@ vault read database/static-creds/postgresql-rotate
``` ```
Key Value Key Value
--- ----- --- -----
last_vault_rotation 2021-09-07T11:35:07.796668266+03:00 last_vault_rotation 2024-08-01T17:08:42.837263316+03:00
password Cai-dzsJDtKTLHSl6Bvt password O-Zl1M15Ze1FWzTtPZN1
rotation_period 720h rotation_period 720h
ttl 719h48m55s ttl 719h39m58s
username dmosk username ksu
``` ```
Где **Cai-dzsJDtKTLHSl6Bvt** — наш пароль от учетной записи dmosk. Где **O-Zl1M15Ze1FWzTtPZN1** — наш пароль от учетной записи ksu.
Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных: Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных:
``` ```
psql -Udmosk -W template1 psql -Uksu -W template1
``` ```
Мы должны подключиться с использованием пароля, который получили от Vault. Мы должны подключиться с использованием пароля, который получили от Vault.
## Создание временных пользователей в PostgreSQL ## Создание временных пользователей в PostgreSQL
Давайте теперь рассмотрим настройку, при которой Vault будет создавать временных пользователей. Для этого мы: Давайте теперь рассмотрим настройку, при которой Vault будет создавать временных пользователей.
Для этого мы:
- Создадим роль в Vault, которая будет создавать учетную запись в базе PostgreSQL. - Создадим роль в Vault, которая будет создавать учетную запись в базе PostgreSQL.
- Настроим файл pg_hba.conf для возможности подключаться к базе пользователям по паролю. - Настроим файл pg_hba.conf для возможности подключаться к базе пользователям по паролю.
@ -289,11 +287,11 @@ Success! Data written to: database/roles/postgresql-create
Готово. Готово.
### Настраиваем файл pg_hba.conf ### Настраиваем файл 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**; * напомню, что путь до нашего файла может быть другим — это зависит от операционной системы и версии 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" is for Unix domain socket connections only
local all dmosk md5 local all ksu md5
local all postgres peer local all postgres peer
local all all md5 local all all md5
##local all all peer ##local all all peer
@ -325,16 +323,16 @@ vault read database/creds/postgresql-create
``` ```
Key Value Key Value
--- ----- --- -----
lease_id database/creds/postgresql-create/HMkEz1q6zuaSeyDNBeC8nhDK lease_id database/creds/postgresql-create/dluf4Zt8DUn28jsEhAv6tqmE
lease_duration 1h lease_duration 1h
lease_renewable true lease_renewable true
password 9oAhg1VIEhleeRA7EU-U password SREUIRWI2D-IyGi5npN9
username v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720 username v-ldap-dfe-postgres-73SnRsVbtmVw86CAAlPy-1722523328
``` ```
Наши логин и пароль соответственно — **v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720** и **9oAhg1VIEhleeRA7EU-U**. Наши логин и пароль соответственно — **v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720** и **9oAhg1VIEhleeRA7EU-U**.
Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных: Перейдем на сервер с PostgreSQL и попробуем войти в СУБД с использованием этих данных:
``` ```
psql -U'v-root-postgres-0VO0sWprjEuCPZkZpu62-1631008720' -W template1 psql -U'v-ldap-dfe-postgres-73SnRsVbtmVw86CAAlPy-1722523328' -W template1
``` ```
Мы должны подключиться с использованием пароля, который получили от Vault. Мы должны подключиться с использованием пароля, который получили от Vault.