Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Настройка политики генерации паролей для секретных механизмов

StarVault поддерживает настраиваемую генерацию паролей, определяемую политикой паролей. Политика содержит правила и требования, которым должен соответствовать пароль, и может предоставлять этот пароль непосредственно через новую конечную точку или через механизмы секретов.

В учебном пособии по динамическим секретам вы настроили StarVault на генерацию динамических учетных данных для базы данных PostgreSQL. В этом руководстве вы узнаете, как настроить StarVault на генерацию паролей, соответствующих стандартам вашей организации.

Если вы не знаете, как настроить StarVault для динамических учетных данных, прочтите руководство по движку секретов базы данных, прежде чем начать.

1. Описание сценария использования

В Orion soft существует политика паролей, которая должна использоваться для всех приложений. Механизм секретов базы данных StarVault генерирует пароли, которые соответствуют шаблону по умолчанию.

Механизмы секретов с поддержкой политик паролей:

  • Active Directory

  • LDAP

  • RabbitMQ

  • Все базы данных

Вы можете изменить стандартный шаблон, чтобы он подходил для таких критериев, как:

  • Длина, которая меньше или превышает длину по умолчанию

  • Различные наборы символов

  • Частота символов

  • Требования к расположению символов

  • Запрещенные повторы

  • Запрещенные слова из словаря

Созадем пользовательскую политику паролей, которая будет соответствовать стандартам безопасности Orion soft. Требования к паролям следующие:

  • Длина 20 символов

  • Несколько наборов символов

  • Должно быть минимальное количество символов из каждого набора

2. Требования к инфраструктуре

Для реализации сценария, описанного в данном руководстве, вам необходимо:

  • Установленный StarVault;

  • Развернутая база данных Postgres.

3. Требования к политике

В рамках данного руководства вы можете использовать свой root токен для работы с StarVault. Однако рекомендуется использовать root токен только для первоначальной настройки или в чрезвычайных ситуациях. В качестве лучшей практики используйте токены с соответствующим набором политик в зависимости от вашей роли в организации.

Для выполнения всех задач, продемонстрированных в этом руководстве, вам нужна политика для оперативной группы, позволяющая настраивать механизм секретов базы данных и управлять политиками паролей.

3.1. Политика администратора StarVault

Данная политика позволяет настраивать механизм секретов базы данных и управлять политиками паролей.

# Mount the database secret engine
path "sys/mounts/database"
{
  capabilities = [ "create", "update", "delete" ]
}

# Manage leases for the database secrets engine readonly role
path "sys/policies/password/example/generate"
{
  capabilities = [ "read" ]
}

# Generate a password using the example password policy
path "sys/policies/password/example"
{
  capabilities = [ "read", "create", "delete", "update", "list" ]
}

# Configure the database secrets engine and create roles
path "database/*"
{
  capabilities = [ "create", "read", "update", "delete", "list" ]
}

Если вы не знакомы с политиками, пройдите учебное пособие по политикам.

4. Создайте лабораторию


  1. Разверните контейнер PostgreSQL

    docker run -d \
      --name learn-postgres \
      --env POSTGRES_USER=root \
      --env POSTGRES_PASSWORD=rootpassword \
      --env POSTGRES_DB=postgres \
      --publish 5432:5432 \
      --restart unless-stopped \
      postgres:latest
  2. Выполните следующие команды для настройки роли.

    docker exec -it learn-postgres psql -U root -d postgres -c "CREATE ROLE ro NOINHERIT;"
    docker exec -it learn-postgres psql -U root -d postgres -c "GRANT SELECT ON ALL TABLES IN SCHEMA public TO ro;"
  3. Разверните контейнер StarVault

    docker run \
      --name learn-starvault \
      --env 'VAULT_DEV_ROOT_TOKEN_ID=root' \
      --env 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' \
      --publish 8200:8200 \
      --restart unless-stopped \
      --detach \
      hub.orionsoft.ru/public/starvault:v1.3.1 server -dev
  4. Экспортируйте переменную окружения для starvault CLI, чтобы обратиться к серверу StarVault.

    $ export STARVAULT_ADDR='http://127.0.0.1:8200'
  5. Экспортируйте переменную окружения для starvault CLI, чтобы аутентифицироваться на сервере StarVault.

    $ export STARVAULT_TOKEN=<token>
  6. Включите механизм секретов database.

    $ starvault secrets enable database
  7. Настройте механизм секретов database.

    $ starvault write database/config/postgres \
        plugin_name=postgresql-database-plugin \
        connection_url="postgresql://{{username}}:{{password}}@172.17.0.2:5432/postgres?sslmode=disable" \
        allowed_roles="readonly" \
        username="root" \
        password="rootpassword" \
        max_open_connections=4 \
        max_idle_connections=0 \
        max_connection_lifetime="0s"
  8. Создайте роль для механизма секретов database.

    $ starvault write database/roles/readonly \
        db_name=postgres \
        creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' INHERIT;" \
        creation_statements="GRANT ro TO \"{{name}}\";" \
        default_ttl="1h" \
        max_ttl="24h"

StarVault и PostgreSQL запущены и настроены. Вы готовы продолжить обучение.


5. Запрос учетных данных с политикой паролей по умолчанию

Каждый поддерживаемый механизм секретов имеет политику паролей по умолчанию, которая генерирует пароли.

Сгенерируйте учетные данные для роли readonly.

starvault read database/creds/readonly
Пример вывода:
Key Value

---

-----

lease_id

database/creds/readonly/5ZJXSIyWN5k4A8u6AMZs5I0s

lease_duration

1h

lease_renewable

true

password

-LL23iRQqsAD0YmS1eq3

username

v-token-readonly-xboXz3doC1jBe9ntlKaA-1737490496

В учетных данных отображаются созданные username и password. Созданный пароль соответствует политике паролей по умолчанию для механизма секретов.

6. Определение политики паролей


  1. Создайте файл политики с именем example_policy.hcl.

    $ tee example_policy.hcl <<EOF
    length=20
    
    rule "charset" {
      charset = "abcdefghijklmnopqrstuvwxyz"
      min-chars = 1
    }
    
    rule "charset" {
      charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      min-chars = 1
    }
    
    rule "charset" {
      charset = "0123456789"
      min-chars = 1
    }
    
    rule "charset" {
      charset = "!@#$%^&*"
      min-chars = 1
    }
    EOF

    Политики используют язык конфигурации HCL. Поле length устанавливает длину возвращаемого пароля в 20 символов. Каждая строфа правил определяет набор символов и минимальное количество повторений этих символов в генерируемом пароле. Эти правила являются совокупными, поэтому каждое из них добавляет больше требований к генерируемому паролю.

  2. Создайте политику паролей StarVault с именем example и правилами политики паролей, определенными в файле example_policy.hcl.

    $ starvault write sys/policies/password/example policy=@example_policy.hcl
    Success! Data written to sys/polices/password/example

    Эта политика доступна для генерации пароля напрямую или с помощью ссылки в example при настройке поддерживаемых механизмов секретов.

  3. Сгенерируйте пароль из example политики паролей.

    $ starvault read sys/policies/password/example/generate
    Key Value

    ---

    -----

    password

    #v!RQDHxHunJ1TUmCyys

    Созданный пароль соответствует требованиям:

    • длина 20 символов

    • не менее 1 прописного символа

    • не менее 1 строчного символа

    • не менее 1 цифры

    • не менее 1 символа


7. Настройка пользовательской политики паролей


  1. Выведите текущую конфигурацию механизма секретов базы данных

    $ starvault read database/config/postgres
    Key Value

    ---

    -----

    allowed_roles

    [readonly]

    connection_details

    map[connection_url:postgresql://{{username}}:{{password}}@172.17.0.2:5432/postgres?sslmode=disable max_connection_lifetime:0s max_idle_connections:0 max_open_connections:4 username:root]

    password_policy

    n/a

    plugin_name

    postgresql-database-plugin

    plugin_version

    n/a

    root_credentials_rotate_statements

    []

    verify_connection

    true

    Первоначально настроенный механизм секретов не содержит политики паролей.

  2. Настройте механизм секретов на использование политики паролей example.

    $ starvault write database/config/postgres password_policy="example"
    Success! Data written to: database/config/postgres
  3. Просмотрите обновленную конфигурацию механизма секретов базы данных.

    $ starvault read database/config/postgres
    Пример вывода:
    Key Value

    ---

    -----

    allowed_roles

    [readonly]

    connection_details

    map[connection_url:postgresql://{{username}}:{{password}}@172.17.0.2:5432/postgres?sslmode=disable max_connection_lifetime:0s max_idle_connections:0 max_open_connections:4 username:root]

    password_policy

    example

    …​snip…​

    Сейчас механизмы секретов генерируют пароли, соответствующие политике паролей example.

  4. Сгенерируйте учетные данные для роли readonly с помощью политики паролей example.

    $ starvault read database/creds/readonly
    Key Value

    ---

    -----

    `lease_id `

    database/creds/readonly/AppmaMdS5mtMPwaZOnNnX2O9

    lease_duration

    1h

    lease_renewable

    true

    password

    ba8oWN@106l6uffb*GbY

    username

    v-token-readonly-W1guRN3Sr2SEw4Oj0uJU-1737491327

    В учетных данных отображаются созданные username и password. Созданный password соответствует example политики паролей, определенному в конфигурации механизма секретов.


8. Очистка


  1. Остановите контейнеры.

    $ docker stop learn-postgres learn-starvault
  2. Снимите настройки переменных окружения.

    $ unset STARVAULT_ADDR STARVAULT_TOKEN
  3. Удалите файл политики паролей example_policy.hcl.

    $ rm example_policy.hcl

9. Резюме

Вы запросили учетные данные у механизма секретов базы данных, который сгенерировал учетные данные с политикой паролей по умолчанию. Затем вы определили политику паролей и сгенерировали пароль. Наконец, вы обновили конфигурацию механизма секретов, чтобы использовать пользовательскую политику паролей.