diff --git a/DevOps/Hashicorp-Vault/vault-postgresql-users.md b/DevOps/Hashicorp-Vault/vault-postgresql-users.md index 31a29c7..08ed65e 100644 --- a/DevOps/Hashicorp-Vault/vault-postgresql-users.md +++ b/DevOps/Hashicorp-Vault/vault-postgresql-users.md @@ -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. В итоге мы должны подключиться к серверу: ``` @@ -183,18 +179,18 @@ 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 \ - username="postgres" \ - password="password" +plugin_name=postgresql-database-plugin \ +allowed_roles="postgresql-rotate,postgresql-create" \ +connection_url=postgresql://{{username}}:{{password}}@172.30.30.87:5432/postgres?sslmode=disable \ +username="postgres" \ +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** — пароль для пользователя, под которым выполняем подключение. @@ -214,10 +210,10 @@ vault write database/config/postgresql \ Настройка задается с помощью static-roles. В нашем Vault вводим команду: ``` vault write database/static-roles/postgresql-rotate \ - db_name=postgresql \ - rotation_statements="ALTER USER \"{{name}}\" WITH PASSWORD '{{password}}';" \ - username="dmosk" \ - rotation_period=720h +db_name=postgresql \ +rotation_statements="ALTER USER \"{{name}}\" WITH PASSWORD '{{password}}';" \ +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. \ No newline at end of file