PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Automatizando auditorias de segurança para PostgreSQL

As auditorias de segurança são obrigatórias em todas as empresas para proteger os dados e evitar possíveis violações de segurança, mas também é uma tarefa demorada, pois você precisa verificar muitas coisas periodicamente. O resultado é que, em geral, as empresas seguem um checklist de segurança e configuram tudo para cobri-lo, mas não possuem auditorias de segurança. Você pode dizer:“Se tudo está funcionando bem, apenas mantenha como está”. Bem, na verdade, você não pode confiar que as políticas de segurança que você está configurando agora serão úteis no futuro e que nada mudará para afetá-las. A solução para isso pode ser automatizar essas auditorias de segurança ou ter uma maneira de fazer isso periodicamente de maneira amigável.

Neste blog, veremos como realizar diferentes auditorias de segurança para PostgreSQL e automatizá-las usando o ClusterControl.

O que você precisa para fazer uma auditoria de segurança no PostgreSQL?

Vejamos algumas das coisas mais importantes para auditar para fins de segurança em um banco de dados PostgreSQL:

  • Comunicação:a comunicação em todos os seus sistemas deve ser criptografada, e você deve restringir o tráfego ao que vem apenas de fontes conhecidas para reduzir o risco de acesso não autorizado aos seus dados.

  • Acesso ao banco de dados:Você precisa restringir o acesso físico e remoto aos seus bancos de dados. O acesso remoto pode ser restrito permitindo conexões apenas de fontes conhecidas para cada usuário, ou mesmo usando conexões SSH ou VPN.

  • Contas de usuário:há muitas maneiras de melhorar a segurança de suas contas de usuário no PostgreSQL, como remover usuários inativos , concedendo apenas privilégios necessários, etc.

  • Instalação e configuração:Existem algumas mudanças a serem feitas para proteger sua instalação do PostgreSQL, como instalar apenas o necessário pacotes, alterando as credenciais e configuração padrão, etc.

  • Auditoria e registro:as instruções de registro podem ajudar você a detectar problemas de segurança ou evitá-los se detectá-los a tempo . Você pode usar o recurso de registro padrão do PostgreSQL, mas também pode usar uma extensão como pgAudit para obter um registro mais detalhado.

  • Atualizações:Mantenha seu sistema operacional e banco de dados o mais atualizado possível aplicando patches e atualizações de segurança.

  • Monitor de consultas:você deve verificar o tráfego para detectar consultas anormais ou ataques DoS.

  • Monitoramento:Para saber o status de seus sistemas, você precisará ter um bom sistema de monitoramento instalado. Isso pode ser útil para encontrar problemas de segurança ou até mesmo para evitá-los.

Agora que sabemos o que verificar, vejamos uma opção para automatizar essas tarefas - ClusterControl.

Auditorias de segurança para PostgreSQL com ClusterControl

Para auditorias de segurança do PostgreSQL, o ClusterControl é uma boa opção, pois é um sistema de gerenciamento e monitoramento que ajuda você a implantar, gerenciar, monitorar e dimensionar seus bancos de dados a partir de uma interface amigável. Ele tem suporte para as principais tecnologias de banco de dados de código aberto e você pode automatizar muitas das tarefas de banco de dados que precisa executar regularmente, como adicionar e dimensionar novos nós, executar backups e restaurações e muito mais.

Vamos ver como você pode cobrir as verificações de segurança mencionadas anteriormente usando o ClusterControl.

Comunicação

Na seção de segurança (ClusterControl -> Selecionar Cluster -> guia Segurança), você pode habilitar a Criptografia SSL para criptografar as conexões entre os clientes e o servidor.


O acesso do ClusterControl aos nós também é protegido usando SSH sem senha com um par de chaves.

Acesso ao banco de dados

Você pode restringir o acesso ao seu banco de dados PostgreSQL modificando o arquivo de configuração pg_hba.conf na interface do usuário do ClusterControl (ClusterControl -> Select Cluster -> Manage -> Configurations). Dessa forma, você pode especificar as seguintes opções:

  • Tipo:As opções mais usadas aqui são “local” para um soquete de domínio Unix e “host” para um soquete TCP/IP simples ou criptografado por SSL, mas existem outras opções como "hostssl" e muito mais.

  • Banco de dados:pode ser "all", "sameuser", "samerole", "replication", um nome do banco de dados ou uma lista separada por vírgulas de nomes de banco de dados.

  • Usuário:pode ser "todos", um nome de usuário, um nome de grupo prefixado com "+", ou uma lista separada por vírgulas.

  • Endereço:Nome do host ou um endereço IP e uma máscara CIDR.

  • Método:Os mais usados ​​aqui são "trust", "reject", "md5", "ident" , e "peer", mas há mais opções como "scram-sha-256" ou "ldap".

Exemplo:

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


Contas de usuário

Você pode gerenciar seus usuários de banco de dados a partir da interface do usuário do ClusterControl (ClusterControl -> Select Cluster -> Manage -> User Management). Você pode criar novos usuários ou editar e excluir os existentes e atribuir os privilégios correspondentes a eles.


Instalação e configuração

Você pode implantar um novo cluster PostgreSQL ou importar um existente. Com seu cluster PostgreSQL adicionado ao ClusterControl, você pode gerenciar a configuração atual (ClusterControl -> Select Cluster -> Manage -> Configuration), ou até mesmo adicionar novos nós ao cluster.


Durante a implantação, você pode modificar a configuração do banco de dados, como porta ou credenciais do banco de dados, e o ClusterControl instalará apenas os pacotes necessários para implantar seu novo cluster.

Auditoria e registro

Você pode verificar o log padrão do PostgreSQL na UI do ClusterControl (ClusterControl -> Select Cluster -> Logs -> System Logs) ou ainda habilitar a extensão pgAudit do ClusterControl e verificar o log de auditoria no mesmo local .


Atualizações

No caso de pequenas atualizações, você pode usar o ClusterControl para esta tarefa. Você pode acessar a UI e executar a atualização (ClusterControl -> Select Cluster -> Manage -> Upgrades), ou usar o Relatório Operacional ClusterControl “Package Upgrades” para receber os pacotes disponíveis por e-mail ou verificá-los na UI do ClusterControl.


Monitor de consultas

Na seção de monitoramento de consultas, você pode encontrar as principais consultas, consultas em execução, discrepâncias de consulta e estatísticas de consulta para monitorar o tráfego do banco de dados.


Monitoramento

ClusterControl permite monitorar seus servidores em tempo real com um conjunto predefinido de painéis para analisar algumas das métricas mais comuns.


ClusterControl permite personalizar os gráficos disponíveis no cluster e você pode habilitar o monitoramento baseado em agente para gerar painéis mais detalhados.


Você também pode criar alertas, que informam sobre eventos em seu cluster, ou integrar-se a diferentes serviços, como PagerDuty ou Slack.


Relatórios operacionais

Se você não quiser acessar a interface do usuário do ClusterControl para verificar o status de seus clusters, poderá criar ou agendar relatórios operacionais.

Os Relatórios Operacionais fornecem informações sobre o status do banco de dados, que você pode usar para auditar seu ambiente. Esses relatórios consistem em diferentes verificações e abordam várias tarefas diárias do DBA. A ideia por trás do ClusterControl Operational Reporting é colocar todos os dados mais relevantes em um único documento que pode ser analisado rapidamente para obter uma compreensão clara do status dos bancos de dados e seus processos.

Você pode agendar relatórios como "Relatório diário do sistema", "Relatório de atualização de pacote", "Relatório de alteração de esquema", "Backups" e "Disponibilidade" e recebê-los em mais de um e-mail Morada.


Usando a CLI do ClusterControl para automatizar auditorias de segurança

ClusterControl CLI, também conhecido como s9s, é uma ferramenta de linha de comando introduzida no ClusterControl versão 1.4.1 para interagir, controlar e gerenciar clusters de banco de dados usando o sistema ClusterControl. ClusterControl CLI abre uma nova porta para automação de cluster, onde você pode integrá-lo facilmente com ferramentas de automação de implantação existentes, como Ansible, Puppet, Chef, etc. A ferramenta de linha de comando é invocada executando um binário chamado s9s adicionado por padrão na instalação do ClusterControl.

Vejamos alguns exemplos dessa ferramenta poderosa. Para isso, veremos como realizar as tarefas de Auditoria de Segurança mencionadas usando a CLI do ClusterControl.

Comunicação

Você pode habilitar a criptografia SSL em seu cluster usando o seguinte comando:

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

Onde ID é o número de ID do cluster:você pode monitorar o andamento desta tarefa (e do restante das tarefas) listando o processo de trabalho.

$ s9s job --list

Acesso ao banco de dados

Você pode verificar a configuração do banco de dados para validar o acesso 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'
...

Onde ID é o número de ID do cluster, IP_ADDRESS e PORT são o endereço IP e a porta do banco de dados.

Contas de usuário

Você pode listar as contas de usuário que estão no cluster:

$ 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

Onde ID é o número de ID do cluster.

Instalação e configuração

Você pode criar novos clusters, adicionar novos nós de banco de dados ou até mesmo alterar as configurações existentes em seu cluster:

$ 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

Onde IP_ADDRESS é o endereço IP do banco de dados e você precisa substituir DBUSER, DBPASSWORD e OSUSER pelas credenciais do banco de dados e usuário do sistema operacional, respectivamente.

Auditoria e registro

Você pode habilitar o log de auditoria na linha de comando usando o seguinte comando:

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

Onde ID é o número de ID do cluster:então, você pode verificar os logs com as informações de log de auditoria.

Atualizações

Você pode criar relatórios para ver se precisa atualizar seus bancos de dados ou pacotes de sistemas operacionais.

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

Onde ID é o número de ID do Cluster:com base neste relatório, você pode agendar janelas de manutenção para executar as atualizações, e isso também pode ser feito no ClusterControl.

Monitor de consultas

Você pode verificar o processo em execução em seus nós e filtrá-los por consulta, origem e muito mais.

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


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

Monitoramento

Você tem diferentes opções para monitorar seus sistemas a partir daqui. Você pode verificar o status de todos os clusters, verificar um deles ou até mesmo verificar os alarmes em tempo 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
...

Relatórios de operação

Você pode criar Relatórios Operacionais e verificá-los na linha de comando. O mesmo relatório está disponível na interface do usuário do ClusterControl.

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

Estes foram apenas alguns exemplos básicos para ver o tipo de coisas que você pode realizar usando a CLI do ClusterControl. Para mais informações sobre a ferramenta, você pode consultar a documentação oficial.

Conclusão


Sempre existe o risco de ser hackeado, mas você pode fechar a lacuna de vulnerabilidade em seu cluster PostgreSQL verificando os pontos mencionados acima. Para tornar essa tarefa muito mais fácil, você pode usar a interface do usuário do ClusterControl ou até mesmo automatizar as verificações com a CLI do ClusterControl. Ele também pode ser integrado a ferramentas externas como Ansible, Puppet e muito mais.