6.6. Настройки безопасности #
6.6.1. Настройка пользователя операционной системы #
Для работы pgpro-otel-collector достаточно прав непривилегированного пользователя. Однако в некоторых случаях для сбора журналов экземпляра СУБД может потребоваться доступ на чтение к каталогу журналов и файлам журналов со стороны операционной системы.
6.6.1.1. Настройка доступа для чтения журналов СУБД #
Для чтения журналов достаточно использовать группу, от имени которой запущен экземпляр СУБД. Для этого группе нужно выдать доступ на чтение файлов журнала и затем в эту же группу поместить пользователя, от имени которого запущен коллектор. Как правило, это группа postgres.
Добавьте права на чтение для группы (путь к каталогу может отличаться):
sudo chmod g+rx /var/log/postgresql/ sudo chmod g+r /var/log/postgresql/*
Добавьте пользователя
otelcolв группуpostgres:sudo usermod --groups=postgres otelcol
Теперь коллектор может читать существующие файлы журналов.
Дополнительно требуется настроить конфигурацию экземпляра СУБД таким образом, чтобы новые файлы журналов создавались с нужными правами доступа. Это достигается путём изменения параметра log_file_mode и перезагрузки конфигурации. Параметр можно изменить напрямую через файл конфигурации, с помощью ALTER SYSTEM или используя средства автоматизации и IaC (Infrastructure as Code, инфраструктура как код).
В примере ниже изменение выполняется через подключение к экземпляру СУБД и использование ALTER SYSTEM.
psql -U postgres -c 'ALTER SYSTEM SET log_file_mode TO "0640"' psql -U postgres -c 'SELECT pg_reload_conf()'
6.6.2. Настройка пользователя экземпляра СУБД #
Настройка пользователя СУБД включает следующие шаги:
Создание и настройка привилегий пользователя СУБД, от имени которого коллектор будет подключаться к экземпляру СУБД.
Настройка HBA-правил авторизации, которые будут разрешать коллектору подключаться к экземпляру СУБД.
Настройка дополнительных прав на запуск функций; шаг является необязательным и требуется только если вы действительно хотите включить сбор соответствующих данных.
6.6.2.1. Создание и настройка пользователя #
Задайте пароль при создании пользователя:
sudo -u postgres createuser --pwprompt otelcol
Для настройки прав подключитесь к экземпляру СУБД и выполните следующую команду:
GRANT pg_monitor TO otelcol;
6.6.2.2. Настройка правил HBA #
При использовании плагинов, требующих подключения к другим БД (сбор таблиц, индексов, раздувания), правила HBA (Host-Based Authentication, аутентификация на основе хоста) необходимо согласовать с правилами коллектора:
Базы данных, перечисленные в настройках плагина, должны быть разрешены в конфигурации HBA.
Если коллектор настроен на сбор данных со всех БД, то и правила HBA должны разрешать подключение ко всем БД.
СУБД PostgreSQL поддерживает большое количество методов аутентификации. При настройке правил HBA следует ориентироваться на метод, используемый в вашем случае.
Пример настройки доступа к БД postgres с помощью метода scram-sha-256:
vi pg_hba.conf local postgres otelcol scram-sha-256 host postgres otelcol 127.0.0.1/32 scram-sha-256
В этом примере возможности подключения ограничены только одной базой postgres. В случае, когда коллектор настроен на сбор данных с других БД, в конфигурацию HBA необходимо внести соответствующие разрешающие правила.
После внесения изменений перезагрузите конфигурацию экземпляра СУБД:
sudo -u postgres psql -c 'SELECT pg_reload_conf()'
6.6.2.3. Настройка дополнительных прав #
Различные типы собираемых данных требуют доступа к различным внутренним функциям системы. Доступ к этим функциям ограничен для обычных пользователей, так как они могут раскрывать конфиденциальную информацию. Поэтому предоставление доступа должно согласовываться с политиками безопасности компании.
За информацией о правах доступа, необходимых для бесперебойной работы, обратитесь к Разделу 3.1.
6.6.3. Настройка коллектора #
6.6.3.1. Подключение к экземпляру СУБД #
Параметры подключения к экземпляру СУБД регулируются в конфигурации ресивера postgrespro файла конфигурации коллектора. Учётные данные пользователя должны быть указаны в параметрах endpoint, database, username и password (пароль можно передать через переменную окружения):
receivers:
postgrespro:
transport: tcp
endpoint: localhost:5432
database: postgres
username: otelcol
password: ${env:POSTGRESQL_PASSWORD}6.6.4. Настройка TLS #
Для экспортёров можно настроить TLS (Transport Layer Security, защита транспортного уровня). Каждый экспортёр можно настраивать отдельно, но формат настройки будет одинаковым для всех. За подробной информацией обратитесь к документации OpenTelemetry.
Пример конфигурации экспортёра otlphttp:
exporters:
otlphttp:
endpoint: "https://ppem.example.org"
tls:
insecure: false
ca_file: server.crt
cert_file: client.crt
key_file: client.key
min_version: "1.1"
max_version: "1.2"6.6.5. Настройка списков разрешений и запретов #
Списки разрешений и запретов обеспечивают гибкое управление сбором метрик из отдельных баз данных и объектов. Это особенно полезно в случаях, когда в соответствии с политиками безопасности требуется ограничить доступ к одним базам данных, а к другим разрешить.
Глобальные списки разрешений и запретов можно настроить для плагинов на уровне ресивера. Ниже приведён общий пример такой конфигурации:
receivers:
postgrespro:
acl:
databases:
allow:
- name: postgres
schemas:
- name: public
tables:
- name: table
- name: table_index
indexes:
- name: index1
- name: index2
functions:
- name: function1
deny:
- name: db
schemas:
- name: schema
tables:
- name: tableЗдесь:
Раздел
acl.allowопределяет, из каких баз данных (и вложенных объектов) плагины будут собирать данные по умолчанию.Раздел
acl.denyопределяет, из каких баз данных и объектов pgpro-otel-collector запрещается сбор метрик.
Рассмотрим конкретный пример, как сделать так, чтобы данные не собирались из базы zabbix:
receivers:
postgrespro:
max_threads: 3
collection_interval: 60s
initial_delay: 1s
transport: tcp
endpoint: localhost:5432
database: postgres
username: postgres
password: ${env:POSTGRESQL_PASSWORD}
metrics: null
acl:
databases:
allow:
- name: postgres
deny:
- name: zabbix
plugins:
activity:
enabled: true
bgwriter:
enabled: true
locks:
enabled: true
version:
enabled: true
wal:
enabled: true
cache:
enabled: trueВ этом примере метрики собираются из базы данных postgres по умолчанию, а сбор из базы данных zabbix запрещён вне зависимости от других настроек.
У отдельных плагинов может быть свой раздел настройки databases:
tables:
enabled: true
databases:
- name: demoВ этом случае игнорируется раздел acl.allow, но ограничения из раздела acl.deny действуют.