sql >> Base de Datos >  >> RDS >> PostgreSQL

Automatización de auditorías de seguridad para PostgreSQL

Las auditorías de seguridad son imprescindibles en todas las empresas para proteger los datos y evitar posibles infracciones de seguridad, pero también es una tarea que requiere mucho tiempo, ya que es necesario comprobar muchas cosas periódicamente. El resultado es que, por lo general, las empresas siguen un checklist de seguridad y configuran todo para cubrirlo, pero no cuentan con auditorías de seguridad. Puede decir:"Si todo funciona bien, déjelo como está". Bueno, en realidad, no puede confiar en que las políticas de seguridad que está configurando ahora serán útiles en el futuro y que nada cambiará para afectarlas. La solución para esto podría ser automatizar estas auditorías de seguridad o tener una forma de hacerlo periódicamente de una manera fácil de usar.

En este blog, veremos cómo realizar diferentes Auditorías de Seguridad para PostgreSQL y automatizarlas usando ClusterControl.

¿Qué necesitas para hacer una auditoría de seguridad en PostgreSQL?

Veamos algunas de las cosas más importantes para auditar por motivos de seguridad en una base de datos PostgreSQL:

  • Comunicaciones:la comunicación en todos sus sistemas debe estar encriptada y debe restringir el tráfico a lo que viene solo de fuentes conocidas para reducir el riesgo de acceso no autorizado a sus datos.

  • Acceso a la base de datos:debe restringir el acceso tanto físico como remoto a sus bases de datos. El acceso remoto se puede restringir permitiendo conexiones solo de fuentes conocidas para cada usuario, o incluso usando conexiones SSH o VPN.

  • Cuentas de usuario:Hay muchas maneras de mejorar la seguridad de sus cuentas de usuario en PostgreSQL, como eliminar usuarios inactivos , otorgando solo los privilegios necesarios, etc.

  • Instalación y configuración:Hay algunos cambios que hacer para asegurar su instalación de PostgreSQL, como instalar solo lo necesario paquetes, cambiando las credenciales y la configuración por defecto, etc.

  • Auditoría y registro:las declaraciones de registro pueden ayudarlo a detectar problemas de seguridad o evitarlos si los detecta a tiempo . Puede usar la función de registro estándar de PostgreSQL, pero también puede usar una extensión como pgAudit para tener un registro más detallado.

  • Actualizaciones:mantenga su sistema operativo y su base de datos lo más actualizados posible mediante la aplicación de parches y actualizaciones de seguridad.

  • Monitor de consultas:debe verificar el tráfico para detectar consultas anormales o ataques DoS.

  • Monitoreo:para conocer el estado de sus sistemas, necesitará contar con un buen sistema de monitoreo. Esto podría ser útil para encontrar problemas de seguridad o incluso para evitarlos.

Ahora que sabemos qué verificar, veamos una opción para automatizar estas tareas:ClusterControl.

Auditorías de seguridad para PostgreSQL con ClusterControl

Para las auditorías de seguridad de PostgreSQL, ClusterControl es una buena opción, ya que es un sistema de administración y monitoreo que lo ayuda a implementar, administrar, monitorear y escalar sus bases de datos desde una interfaz fácil de usar. Es compatible con las principales tecnologías de base de datos de código abierto y puede automatizar muchas de las tareas de la base de datos que debe realizar regularmente, como agregar y escalar nuevos nodos, ejecutar copias de seguridad y restauraciones, y más.

Veamos cómo puede cubrir los controles de seguridad mencionados anteriormente utilizando ClusterControl.

Comunicaciones

En la sección de seguridad (ClusterControl -> Seleccionar clúster -> pestaña Seguridad), puede habilitar el cifrado SSL para cifrar las conexiones entre los clientes y el servidor.

 

El acceso desde ClusterControl a los nodos también está protegido mediante SSH sin contraseña con un par de claves.

Acceso a la base de datos

Puede restringir el acceso a su base de datos PostgreSQL modificando el archivo de configuración pg_hba.conf desde la interfaz de usuario de ClusterControl (ClusterControl -> Seleccionar clúster -> Administrar -> Configuraciones). De esta forma, puede especificar las siguientes opciones:

  • Tipo:Las opciones más utilizadas aquí son "local" para un socket de dominio Unix y "host" para un socket TCP/IP simple o cifrado con SSL, pero hay otras opciones como "hostssl" y más.

  • Base de datos:Puede ser "todos", "mismo usuario", "igual", "replicación", una nombre de la base de datos, o una lista separada por comas de nombres de bases de datos.

  • Usuario:Puede ser "todos", un nombre de usuario, un nombre de grupo con el prefijo "+", o una lista separada por comas de los mismos.

  • Dirección:nombre de host, o una dirección IP y una máscara CIDR.

  • Método:Los más utilizados aquí son "confiar", "rechazar", "md5", "ident" y "peer", pero hay más opciones como "scram-sha-256" o "ldap".

Ejemplo:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
  host  all             admindb         10.10.10.121/32         md5

Cuentas de usuario

Puede administrar los usuarios de su base de datos desde la interfaz de usuario de ClusterControl (ClusterControl -> Seleccionar clúster -> Administrar -> Administración de usuarios). Puede crear nuevos usuarios, o editar y eliminar los existentes, y asignarles los privilegios correspondientes.

Instalación y Configuración

Puede implementar un nuevo clúster de PostgreSQL o importar uno existente. Con su clúster de PostgreSQL agregado a ClusterControl, puede administrar la configuración actual (ClusterControl -> Seleccionar clúster -> Administrar -> Configuración), o incluso agregar nuevos nodos al clúster.

Durante la implementación, puede modificar la configuración de la base de datos, como el puerto de la base de datos o las credenciales, y luego ClusterControl instalará solo los paquetes necesarios para implementar su nuevo clúster.

Auditoría y registro

Puede verificar el registro estándar de PostgreSQL en la interfaz de usuario de ClusterControl (ClusterControl -> Seleccionar clúster -> Registros -> Registros del sistema) o incluso habilitar la extensión pgAudit desde ClusterControl y verificar el registro de auditoría en el mismo lugar .

Actualizaciones

En el caso de actualizaciones menores, puede usar ClusterControl para esta tarea. Puede acceder a la interfaz de usuario y ejecutar la actualización (ClusterControl -> Seleccionar clúster -> Administrar -> Actualizaciones), o utilizar el informe operativo de ClusterControl "Actualizaciones de paquetes" para recibir los paquetes disponibles por correo electrónico o comprobarlos en la interfaz de usuario de ClusterControl.

Supervisión de consultas

En la sección del monitor de consultas, puede encontrar las consultas principales, las consultas en ejecución, los valores atípicos de las consultas y las estadísticas de las consultas para monitorear el tráfico de su base de datos.

Monitoreo

ClusterControl le permite monitorear sus servidores en tiempo real con un conjunto predefinido de paneles para analizar algunas de las métricas más comunes.

ClusterControl le permite personalizar los gráficos disponibles en el clúster y puede habilitar el monitoreo basado en agentes para generar paneles más detallados.

También puede crear alertas, que le informan sobre eventos en su clúster, o integrarse con diferentes servicios como PagerDuty o Slack.

Informes operativos

Si no desea acceder a la interfaz de usuario de ClusterControl para comprobar el estado de sus clústeres, puede crear o programar informes operativos.

Los informes operativos le brindan información sobre el estado de su base de datos, que puede usar para auditar su entorno. Estos informes consisten en diferentes controles y abordan varias tareas diarias de DBA. La idea detrás de ClusterControl Operational Reporting es poner todos los datos más relevantes en un solo documento que pueda analizarse rápidamente para obtener una comprensión clara del estado de las bases de datos y sus procesos.

Puede programar informes como "Informe diario del sistema", "Informe de actualización del paquete", "Informe de cambio de esquema", "Copias de seguridad" y "Disponibilidad", y puede recibirlos en más de un correo electrónico dirección.

Uso de CLI de ClusterControl para automatizar auditorías de seguridad

ClusterControl CLI, también conocido como s9s, es una herramienta de línea de comandos introducida en ClusterControl versión 1.4.1 para interactuar, controlar y administrar clústeres de bases de datos mediante el sistema ClusterControl. ClusterControl CLI abre una nueva puerta para la automatización de clústeres donde puede integrarla fácilmente con herramientas de automatización de implementación existentes como Ansible, Puppet, Chef, etc. La herramienta de línea de comandos se invoca ejecutando un binario llamado s9s agregado de forma predeterminada en la instalación de ClusterControl.

Veamos algunos ejemplos de esta poderosa herramienta. Para ello, veremos cómo realizar las tareas de Auditoría de Seguridad mencionadas utilizando el CLI de ClusterControl.

Comunicaciones

Puede habilitar el cifrado SSL en su clúster con el siguiente comando:

$ s9s cluster --enable-ssl --cluster-id=ID

Donde ID es el número de identificación del clúster:puede monitorear el progreso de esta tarea (y el resto de las tareas) enumerando el proceso de trabajo.

$ s9s job --list

Acceso a la base de datos

Puede verificar la configuración de la base de datos para validar el acceso permitido:

$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config

GROUP OPTION NAME                  VALUE
-     data_directory               '/var/lib/pgsql/13/data'
-     hba_file                     '/var/lib/pgsql/13/data/pg_hba.conf'
-     ident_file                   '/var/lib/pgsql/13/data/pg_ident.conf'
-     listen_addresses             '*'
-     port                         5432
-     max_connections              100
-     ssl                          on
-     ssl_ca_file                  '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
-     ssl_cert_file                '/etc/ssl/postgresql_single/cluster_47/server.crt'
...

Donde ID es el número de identificación del clúster, IP_ADDRESS y PORT son la dirección IP y el puerto de su base de datos.

Cuentas de usuario

Puede enumerar las cuentas de usuario que están en el clúster:

$ s9s accounts --list --cluster-id=ID --long


NAME                            P CONN MAXC GRANTS
's9spostgresqlchk'@'%'          N    0    0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%'                  N    1    0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%'     N    0    0 INHERIT
...
'cmon_replication'@'%'          N    2    0 LOGIN,INHERIT,REPLICATION
'admindb'@'%'                   N    3    0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB

Donde ID es el número de identificación del clúster.

Instalación y Configuración

Puede crear nuevos clústeres, agregar nuevos nodos de base de datos o incluso cambiar las configuraciones existentes en su clúster:

$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log

Donde IP_ADDRESS es la dirección IP de su base de datos, y debe reemplazar DBUSER, DBPASSWORD y OSUSER para las credenciales de su base de datos y el usuario del sistema operativo, respectivamente.

Auditoría y registro

Puede habilitar el registro de auditoría desde la línea de comando usando el siguiente comando:

$ s9s cluster --setup-audit-logging --cluster-id=ID

Donde ID es el número de ID del clúster:luego, puede verificar los registros con la información de registro de auditoría.

Actualizaciones

Puede crear informes para ver si necesita actualizar sus bases de datos o paquetes de sistemas operativos.

$ s9s report --cluster-id=ID --type=upgrade --create

Donde ID es el número de ID del clúster:según este informe, puede programar ventanas de mantenimiento para ejecutar las actualizaciones, y también se puede hacer desde ClusterControl.

Supervisión de consultas

Puede verificar el proceso que se ejecuta en sus nodos y filtrarlos por consulta, fuente y más.

$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'


$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'

Monitoreo

Tiene diferentes opciones para monitorear sus sistemas desde aquí. Puede comprobar el estado de todos los clústeres, comprobar uno de ellos o incluso comprobar las alarmas en tiempo real.

$  s9s cluster --list --long



ID STATE   TYPE              OWNER  GROUP  NAME         COMMENT
 1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
 2 FAILURE galera            system admins PXC57        Cluster failure.
 3 STARTED replication       system admins MariaDB104   All nodes are operational.
 4 STARTED mongodb           system admins MongoDB42    All nodes are operational.
Total: 4


$ s9s alarm --cluster-name="PostgreSQL Cluster" --list

ID  CID SEVERITY COMPONENT TYPE              HOSTNAME        TITLE
263   1 CRITICAL Network   HostSshFailed     haproxy1    SSH failed
264   1 CRITICAL Network   HostSshFailed     haproxy2    SSH failed
265   1 CRITICAL Network   HostSshFailed     postgresql2 SSH failed
266   1 CRITICAL Network   HostSshFailed     postgresql3 SSH failed
...

Informes de operación

Puede crear informes operativos y consultarlos desde la línea de comandos. El mismo informe está disponible en la interfaz de usuario de ClusterControl.

$ s9s report --cluster-id=ID --type=default --create

Estos son solo algunos ejemplos básicos para ver el tipo de cosas que puede realizar con la CLI de ClusterControl. Para obtener más información sobre la herramienta, puede consultar la documentación oficial.

Conclusión

Siempre existe el riesgo de ser pirateado, pero puede cerrar la brecha de vulnerabilidad en su clúster de PostgreSQL al verificar los puntos mencionados anteriormente. Para hacer esta tarea mucho más fácil, puede utilizar la interfaz de usuario de ClusterControl o incluso automatizar las comprobaciones con la CLI de ClusterControl. También se puede integrar con herramientas externas como Ansible, Puppet y más.