暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

[译文] PostgreSQL 的自动化安全审计

原创 Sebastian Insausti 2021-07-28
1031

安全审计是所有公司都必须进行的,以保护数据并避免任何可能的安全漏洞,但这也是一项耗时的任务,因为需要定期检查很多事情。一般来说,公司遵循安全检查表并配置所有内容以涵盖它,但他们没有安全审计。您可能会说,“如果一切正常,就保持原样”。实际上,您不能保证现在正在配置的安全策略将来会有用,并且没有任何变化会影响它们。对此的解决方案可能是自动化这些安全审计,或者有一种方法以用户友好的方式定期进行。

在这篇文章中,我们将看到如何为PostgreSQL执行不同的安全审计并使用ClusterControl进行自动化操作。

对 PostgreSQL 进行安全审计需要什么?

让我们看看在 PostgreSQL 数据库中出于安全目的审计的一些最重要的事情:

  • 通信:您所有系统中的通信都必须加密,并且您必须将流量限制为仅来自已知来源的流量,以降低未经授权访问您的数据的风​​险。

  • 数据库访问:您需要限制对数据库的物理访问和远程访问。可以通过仅允许来自每个用户的已知来源的连接,甚至使用 SSH 或 VPN 连接来限制远程访问。

  • 用户帐户:有很多方法可以提高 PostgreSQL 中用户帐户的安全性,例如删除非活动用户、仅授予必要的权限等。

  • 安装和配置:为了保护 PostgreSQL 安装,需要做一些更改,例如仅安装必要的包、更改默认凭据和配置等。

  • 审计和日志记录:日志记录语句可以帮助您检测安全问题,如果您及时发现它们,则可以避免它们。您可以使用标准的 PostgreSQL 日志记录工具,但您也可以使用 pgAudit 之类的扩展来获得更详细的日志记录。

  • 升级:通过应用补丁和安全升级,使您的操作系统和数据库尽可能保持最新。

  • Query Monitor:您应该检查流量以检测异常查询或DoS攻击。

  • 监控:要了解系统的状态,您需要有一个良好的监控系统。这对于发现安全问题甚至避免它们可能很有用。

现在我们知道要检查什么,让我们看看自动化这些任务的选择–ClusterControl。

使用 ClusterControl 对 PostgreSQL 进行安全审计

对于 PostgreSQL 安全审计,ClusterControl是一个不错的选择,因为它是一个管理和监控系统,可帮助您从用户友好的界面部署、管理、监控和扩展数据库。它支持顶级开源数据库技术,您可以自动执行许多必须定期执行的数据库任务,例如添加和扩展新节点、运行备份和恢复等。

让我们看看如何使用 ClusterControl 覆盖前面提到的安全检查。

通讯

在安全部分(ClusterControl -> Select Cluster -> Security 选项卡),您可以启用 SSL 加密来加密客户端和服务器之间的连接。

image.png

从 ClusterControl 到节点的访问也使用带密钥对的无密码 SSH 进行保护。

数据库访问

您可以通过从 ClusterControl UI(ClusterControl -> 选择集群 -> 管理 -> 配置)修改 pg_hba.conf 配置文件来限制对 PostgreSQL 数据库的访问。通过这种方式,您可以指定以下选项:

  • 类型:这里最常用的选项是“本地”用于 Unix 域套接字,“主机”用于普通或 SSL 加密的 TCP/IP 套接字,但还有其他选项,如“hostssl”等。

  • 数据库:它可以是“all”、“sameuser”、“samerole”、“replication”、数据库名称或以逗号分隔的数据库名称列表。

  • 用户:可以是“全部”、用户名、以“+”为前缀的组名或逗号分隔的列表。

  • 地址:主机名,或 IP 地址和 CIDR 掩码。

  • 方法:这里使用最多的是“trust”、“reject”、“md5”、“ident”和“peer”,但还有更多的选项,如“scram-sha-256”或“ldap”。

例子:

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

image.png

用户帐户

可以从 ClusterControl UI(ClusterControl -> 选择集群 -> 管理 -> 用户管理)管理您的数据库用户。您可以创建新用户,或编辑和删除现有用户,并为其分配相应的权限。

image.png

安装和配置

可以部署新的 PostgreSQL 集群或导入现有集群。将 PostgreSQL 集群添加到 ClusterControl 后,您可以管理当前配置(ClusterControl -> 选择集群 -> 管理 -> 配置),甚至可以向集群添加新节点。

image.png

在部署期间,您可以修改数据库配置,如数据库端口或凭据,然后 ClusterControl 将仅安装部署新集群所需的包。

审计和日志记录

可以在 ClusterControl UI(ClusterControl -> Select Cluster -> Logs -> System Logs)中检查标准 PostgreSQL 日志记录,甚至可以从 ClusterControl 启用 pgAudit 扩展并在同一位置检查审计日志记录。

image.png

升级

在小规模升级的情况下,您可以使用 ClusterControl 执行此任务。您可以访问 UI 并运行升级(ClusterControl -> 选择集群 -> 管理 -> 升级),或使用“包升级”ClusterControl 操作报告,通过电子邮件接收可用包或在 ClusterControl UI 中检查它们。

image.png

查询监视器

在查询监控部分,您可以找到热门查询、正在运行的查询、查询异常值和查询统计信息来监控您的数据库流量。

image.png

监控

ClusterControl 允许您使用一组预定义的仪表板实时监控您的服务器,以分析一些最常见的指标。

image.png

ClusterControl 允许您自定义集群中可用的图形,并且您可以启用基于代理的监控以生成更详细的仪表板。

image.png

还可以创建警报,通知您集群中的事件,或与不同的服务(如 PagerDuty 或 Slack)集成。

image.png

运营报告

如果您不想访问 ClusterControl UI 来检查集群的状态,您可以创建或安排操作报告。

操作报告为您提供有关您的数据库状态的信息,您可以使用这些信息来审核您的环境。这些报告包括不同的检查并处理各种日常 DBA 任务。ClusterControl Operational Reporting 背后的想法是将所有最相关的数据放入一个可以快速分析的单个文档中,以便清楚地了解数据库及其流程的状态。

您可以安排“每日系统报告”、“软件包升级报告”、“架构更改报告”、“备份”和“可用性”等报告,并且您可以通过多个电子邮件地址接收它们。

image.png

使用 ClusterControl CLI 自动执行安全审计

ClusterControl CLI,也称为 s9s,是ClusterControl 1.4.1 版本中引入的命令行工具,用于使用 ClusterControl 系统交互、控制和管理数据库集群。ClusterControl CLI 为集群自动化打开了一扇新的大门,您可以在其中轻松地将其与现有的部署自动化工具(如 Ansible、Puppet、Chef 等)集成。通过执行 ClusterControl 安装中默认添加的名为 s9s 的二进制文件来调用命令行工具。

让我们看一下这个强大工具的一些例子。为此,我们将了解如何使用 ClusterControl CLI 执行上述安全审计任务。

通讯

您可以使用以下命令在集群中启用 SSL 加密:

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

其中 ID 是集群 ID 号:您可以通过列出作业进程来监控此任务(以及其余任务)的进度。

$ s9s job --list

数据库访问

您可以检查数据库配置以验证允许的访问:

$ 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' ...

其中 ID 是集群 ID 号,IP_ADDRESS 和 PORT 是您的数据库 IP 地址和端口。

用户帐户

您可以列出集群中的用户帐户:

$ 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

其中 ID 是集群 ID 号。

安装和配置

您可以创建新集群、添加新数据库节点,甚至更改集群中的现有配置:

$ 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

其中 IP_ADDRESS 是您的数据库 IP 地址,您需要分别为您的数据库凭据和操作系统用户替换 DBUSER、DBPASSWORD 和 OSUSER。

审计和日志记录

您可以使用以下命令从命令行启用审计日志记录:

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

其中 ID 是集群 ID 号:然后,您可以使用审计日志信息检查日志。

升级

您可以创建报告以查看是否需要升级数据库或操作系统包。

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

其中 ID 是集群 ID 号:根据此报告,您可以安排维护时段来运行升级,也可以从 ClusterControl 中完成。

查询监视器

您可以检查节点上运行的进程,并按查询、源等对其进行过滤。

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

监控

从这里您有不同的选项来监控您的系统。您可以检查所有集群的状态,检查其中一个,甚至实时检查警报。

$ 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 ...

操作报告

您可以创建操作报告并从命令行检查它们。ClusterControl UI 中提供了相同的报告。

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

这些只是一些基本示例,用于了解您可以使用 ClusterControl CLI 执行的操作类型。关于该工具的更多信息,可以参考官方文档。

结论

始终存在被黑客入侵的风险,但您可以通过检查上述几点来缩小PostgreSQL集群上的漏洞差距。为了使这项任务更容易,您可以使用ClusterControl UI,甚至可以使用ClusterControl CLI 自动执行检查。它还可以与 Ansible、Puppet 等外部工具集成。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论