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

HTTP API плагина базы данных Cassandra

Плагин базы данных Cassandra является одним из поддерживаемых плагинов для движка секретов базы данных. Этот плагин динамически генерирует учетные данные базы данных на основе настроенных ролей для базы данных Cassandra.

Данный движок может использовать внешние X.509 сертификаты в рамках TLS или проверки подписи. Проверка подписей по X.509 сертификатам, использующим SHA-1, устарела и больше не может использоваться без обходного пути. Дополнительную информацию смотрите в FAQ по устареванию.

1. Настроить соединение

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

Метод Путь

POST

/database/config/:name

2. Параметры

  • hosts (string: <обязательный>) – указывает набор хостов Cassandra, разделенных запятыми, к которым нужно подключиться.

  • port (int: 9042) – указывает порт по умолчанию, который будет использоваться, если не указан в URI хоста. По умолчанию используется порт передачи Cassandra по умолчанию — 9042.

  • username (string: <обязательный>) – указывает имя пользователя для доступа с правами суперпользователя.

  • password (string: <обязательный>) – указывает пароль, соответствующий данному имени пользователя.

  • tls (bool: true) – указывает, следует ли использовать TLS при подключении к Cassandra.

  • insecure_tls (bool: false) – указывает, следует ли пропустить проверку сертификата сервера при использовании TLS.

  • tls_server_name (string: "") – указывает имя, используемое в качестве SNI-хоста при подключении к серверу Cassandra через TLS.

  • pem_bundle (string: "") – указывает объединенные PEM блоки, содержащие сертификат и закрытый ключ; сертификат, закрытый ключ и сертификат выдачи ЦА; или только сертификат ЦА. Может быть указан только один из pem_bundle или pem_json.

  • pem_json (string: "") – указывает JSON, содержащий сертификат и закрытый ключ; сертификат, закрытый ключ и сертификат выдачи ЦА; или только сертификат ЦА. Значение в этом поле должно быть закодированным JSON-объектом. Для удобства формат такой же, как и вывод команды issue из движка секретов pki; смотрите документацию по pki. Может быть указан только один из pem_bundle или pem_json.

Пример pem_json:
{
  "certificate": "<клиентский сертификат в формате PEM>",
  "private_key": "<закрытый ключ в формате PEM>",
  "ca_chain": ["<ЦА в формате PEM>", "<Дополнительный PEM для цепочки ЦА, если необходимо"]
}

Если вы используете CLI StarVault, проще всего записать JSON в файл, а затем указать путь:

starvault write database/config/cassandra-example <...другие поля> pem_json=@/путь/к/файлу.json
  • skip_verification (bool: false) - пропустить проверки прав, когда соединение с Cassandra создается впервые. Эти проверки гарантируют, что StarVault сможет создавать роли, но могут быть ресурсоемкими в кластерах с большим количеством ролей.

  • protocol_version (int: 2) – указывает версию протокола CQL для использования.

  • connect_timeout (string: "5s") – указывает тайм-аут, который будет использован как для соединений, так и в общем.

  • local_datacenter (string: "") – если установлено, включает политику выбора хостов, которая будет отдавать приоритет и использовать хосты, находящиеся в локальном датацентре, перед хостами во всех других датацентрах (например, dc-01).

  • socket_keep_alive (string: "0s") – период keep-alive для активного сетевого соединения. Если ноль, keep-alive не включены.

  • consistency (string: "") – указывает вариант согласованности, который следует использовать. См. определение gocql для допустимых вариантов.

  • username_template (string) - шаблон, описывающий, как генерируются динамические имена пользователей.

Шаблон имени пользователя по умолчанию
{{ printf "v_%s_%s_%s_%s" (.DisplayName | truncate 15) (.RoleName | truncate 15) (random 20) (unix_time) | truncate 100 | replace "-" "_" | lowercase }}
Таблица 1. Пример имен пользователей:

DisplayName

token

RoleName

myrolename

Имя пользователя

v_token_myrolename_uszt1n4cyhal4m0xtgx3_1614294836

Таблица 2. Пример имен пользователей:

DisplayName

amuchlonger_dispname

RoleName

role-name-with-dashes

Имя пользователя

v_amuchlonger_dis_role_name_with__s0t9xb0jsab9nqz7yj40_1614294836

2.1. Принцип работы TLS

  • Если tls установлен в true, соединение будет использовать TLS; это происходит автоматически, если установлены pem_bundle, pem_json или insecure_tls.

  • Если insecure_tls установлен в true, соединение не будет выполнять проверку сертификата сервера; это также устанавливает tls в true.

  • Если только issuing_ca установлен в pem_json, или единственный сертификат в pem_bundle является сертификатом ЦА, предоставленный сертификат ЦА будет использоваться для проверки сертификата сервера; в противном случае будут использоваться системные сертификаты ЦА.

  • Если certificate и private_key установлены в pem_bundle или pem_json, клиентская аутентификация будет включена для соединения.

pem_bundle должен состоять из соединенного PEM блока закрытого ключа и клиентского сертификата, сертификата ЦА, или обоих. pem_json должен содержать ту же информацию; для удобства формат JSON такой же, как и вывод команды issue из движка секретов PKI.

Пример тела запроса:
{
  "plugin_name": "cassandra-database-plugin",
  "allowed_roles": "readonly",
  "hosts": "cassandra1.local",
  "username": "user",
  "password": "pass"
}
Пример запроса:
$ curl \
    --header "X-Vault-Token: ..." \
    --request POST \
    --data @payload.json \
    http://127.0.0.1:8200/v1/cassandra/config/connection

3. Операторы

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

3.1. Параметры

Следующие операторы используются этим плагином. Если они не упоминаются в этом списке, плагин не поддерживает этот тип оператора.

  • creation_statements (list: []) – указывает SQL операторы базы данных, выполняемые для создания и настройки пользователя. Должен быть строкой, разделенной точкой с запятой, строкой, закодированной в base64, строковым массивом JSON с сериализацией или строкой JSON с сериализацией, закодированной в base64. Значения {{username}} и {{password}} будут подставлены. Если не указано, по умолчанию используется обычная программа создания пользователя, которая создает не суперпользователя.

  • revocation_statements (list: []) – указывает SQL операторы базы данных, которые будут выполняться для отзыва пользователя. Должен быть строкой, разделенной точкой с запятой, строкой, закодированной в base64, строковым массивом JSON с сериализацией, или строкой JSON с сериализацией, закодированной в base64. Значение {{username}} будет подставлено. Если не указано, по умолчанию используется обычный оператор удаления пользователя.

  • rollback_statements (list: []) – указывает SQL операторы базы данных, которые будут выполнены для отката операции создания в случае ошибки. Должен быть строкой, разделенной точкой с запятой, строкой, закодированной в base64, строковым массивом JSON с сериализацией, или строкой JSON с сериализацией, закодированной в base64. Значение {{username}} будет подставлено. Если не указано, по умолчанию используется обычный оператор удаления пользователя.

  • root_rotation_statements (list: []) - указывает операторы базы данных, которые будут выполнены при ротации пароля пользователя root. Должен быть строкой, разделенной точкой с запятой, строкой, закодированной в base64, строковым массивом JSON с сериализацией, или строкой JSON с сериализацией, закодированной в base64. Значение {{username}} будет подставлено. Если не указано, по умолчанию используется обычный оператор изменения пользователя.