セキュリティ監査は、データを保護し、セキュリティ違反の可能性を回避するためにすべての企業で必須ですが、定期的に多くのことをチェックする必要があるため、時間のかかる作業でもあります。その結果、一般に、企業はセキュリティチェックリストに従い、それをカバーするようにすべてを構成しますが、セキュリティ監査はありません。 「すべてが正常に機能している場合は、そのままにしてください」と言うかもしれません。実際、現在構成しているセキュリティポリシーが将来的に役立つこと、およびそれらに影響を与えるために何も変更されないことを信頼することはできません。このための解決策は、これらのセキュリティ監査を自動化するか、ユーザーフレンドリーな方法で定期的に行う方法を持つことです。
このブログでは、PostgreSQLに対してさまざまなセキュリティ監査を実行し、ClusterControlを使用してそれらを自動化する方法を説明します。
PostgreSQLのセキュリティ監査を行うために何が必要ですか?
PostgreSQLデータベースのセキュリティ目的で監査する最も重要なことのいくつかを見てみましょう。
-
通信:すべてのシステムの通信を暗号化する必要があり、トラフィックを着信するトラフィックのみに制限する必要がありますデータへの不正アクセスのリスクを軽減するために、既知のソースから。
-
データベースアクセス:データベースへの物理アクセスとリモートアクセスの両方を制限する必要があります。各ユーザーの既知のソースからの接続のみを許可するか、SSHまたはVPN接続を使用することで、リモートアクセスを制限できます。
-
ユーザーアカウント:非アクティブなユーザーを削除するなど、PostgreSQLのユーザーアカウントのセキュリティを向上させる方法はたくさんあります。 、必要な権限のみを付与するなど。
-
インストールと構成:必要なものだけをインストールするなど、PostgreSQLのインストールを保護するために行うべき変更がいくつかあります。パッケージ、デフォルトの資格情報と構成の変更など。
-
監査とログ記録:ログ記録ステートメントは、セキュリティの問題を検出したり、時間内にキャッチした場合にそれらを回避したりするのに役立ちます。 。標準のPostgreSQLロギング機能を使用できますが、pgAuditなどの拡張機能を使用してより詳細なロギングを行うこともできます。
-
アップグレード:パッチとセキュリティアップグレードを適用して、OSとデータベースを可能な限り最新の状態に保ちます。
-
クエリモニター:トラフィックをチェックして、異常なクエリやDoS攻撃を検出する必要があります。
-
監視:システムのステータスを知るには、適切な監視システムを導入する必要があります。これは、セキュリティの問題を見つけたり、回避したりするのに役立つ可能性があります。
何をチェックするかがわかったので、これらのタスクを自動化するオプションであるClusterControlを見てみましょう。
ClusterControlを使用したPostgreSQLのセキュリティ監査
PostgreSQLセキュリティ監査の場合、ClusterControlは、ユーザーフレンドリーなインターフェイスからデータベースを展開、管理、監視、およびスケーリングするのに役立つ管理および監視システムであるため、優れたオプションです。最高のオープンソースデータベーステクノロジーをサポートしており、新しいノードの追加とスケーリング、バックアップと復元の実行など、定期的に実行する必要のあるデータベースタスクの多くを自動化できます。
ClusterControlを使用して前述のセキュリティチェックをカバーする方法を見てみましょう。
セキュリティセクション(ClusterControl-> Select Cluster-> Securityタブ)で、SSL暗号化を有効にしてクライアントとサーバー間の接続を暗号化できます。
ClusterControlからノードへのアクセスも、キーペアを使用したパスワードなしのSSHを使用して保護されます。
ClusterControl UIからpg_hba.conf構成ファイルを変更することでPostgreSQLデータベースへのアクセスを制限できます(ClusterControl->クラスターの選択->管理->構成)。このようにして、次のオプションを指定できます。
-
タイプ:ここで最もよく使用されるオプションは、Unixドメインソケットの「ローカル」と「ホスト」です。プレーンまたはSSLで暗号化されたTCP/IPソケットの場合ですが、「hostssl」などの他のオプションがあります。
-
データベース:「all」、「sameuser」、「samerole」、「replication」、データベース名、またはデータベース名のコンマ区切りリスト。
-
ユーザー:「all」、ユーザー名、「+」で始まるグループ名、またはそのコンマ区切りのリスト。
-
アドレス:ホスト名、または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
ClusterControl UIからデータベースユーザーを管理できます(ClusterControl->[クラスターの選択]->[管理]->[ユーザー管理])。新しいユーザーを作成したり、既存のユーザーを編集および削除して、対応する特権をユーザーに割り当てたりすることができます。
新しいPostgreSQLクラスターをデプロイするか、既存のPostgreSQLクラスターをインポートできます。 PostgreSQLクラスターをClusterControlに追加すると、現在の構成を管理したり(ClusterControl->クラスターの選択->管理->構成)、クラスターに新しいノードを追加したりすることもできます。
展開中に、データベースポートや資格情報などのデータベース構成を変更できます。その後、ClusterControlは、新しいクラスターを展開するために必要なパッケージのみをインストールします。
ClusterControl UIで標準のPostgreSQLログを確認できます(ClusterControl->[クラスターの選択]->[ログ]->[システムログ])。または、ClusterControlからpgAudit拡張機能を有効にして、同じ場所で監査ログを確認することもできます。 。
マイナーアップグレードの場合、このタスクにClusterControlを使用できます。 UIにアクセスしてアップグレードを実行するか(ClusterControl->[クラスターの選択]->[管理]->[アップグレード])、または「パッケージのアップグレード」ClusterControl操作レポートを使用して、使用可能なパッケージを電子メールで受信するか、ClusterControlUIで確認できます。
クエリモニターセクションでは、データベーストラフィックを監視するための上位のクエリ、実行中のクエリ、クエリの外れ値、およびクエリ統計を見つけることができます。
ClusterControlを使用すると、事前定義されたダッシュボードのセットを使用してサーバーをリアルタイムで監視し、最も一般的なメトリックのいくつかを分析できます。
ClusterControlを使用すると、クラスターで使用可能なグラフをカスタマイズできます。また、エージェントベースの監視を有効にして、より詳細なダッシュボードを生成できます。
クラスター内のイベントを通知するアラートを作成したり、PagerDutyやSlackなどのさまざまなサービスと統合したりすることもできます。
ClusterControl UIにアクセスしてクラスターのステータスを確認したくない場合は、運用レポートを作成またはスケジュールできます。
運用レポートは、データベースのステータスに関する情報を提供します。これを使用して、環境を監査できます。これらのレポートはさまざまなチェックで構成され、さまざまな日常のDBAタスクに対応しています。 ClusterControl Operational Reportingの背後にある考え方は、データベースとそのプロセスのステータスを明確に理解するために、最も関連性の高いすべてのデータを1つのドキュメントにまとめてすばやく分析できるようにすることです。
「日次システムレポート」、「パッケージアップグレードレポート」、「スキーマ変更レポート」、「バックアップ」、「可用性」などのレポートをスケジュールでき、複数の電子メールで受信できます。アドレス。
ClusterControlCLIを使用したセキュリティ監査の自動化
ClusterControl CLIは、s9sとも呼ばれ、ClusterControlバージョン1.4.1で導入されたコマンドラインツールであり、ClusterControlシステムを使用してデータベースクラスターを操作、制御、および管理します。 ClusterControl CLIは、クラスター自動化の新しい扉を開き、Ansible、Puppet、Chefなどの既存のデプロイメント自動化ツールと簡単に統合できます。コマンドラインツールは、ClusterControlインストールでデフォルトで追加されたs9sと呼ばれるバイナリを実行することによって呼び出されます。
次のコマンドを使用して、クラスターで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
新しいクラスターを作成したり、新しいデータベースノードを追加したり、クラスター内の既存の構成を変更したりすることもできます。
$ 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
...
操作レポートを作成し、コマンドラインから確認できます。同じレポートがClusterControlUIで利用できます。
$ s9s report --cluster-id=ID --type=default --create
これらは、ClusterControlCLIを使用して実行できることの種類を確認するための基本的な例にすぎません。ツールの詳細については、公式ドキュメントを参照してください。
ハッキングされるリスクは常にありますが、上記の点を確認することで、PostgreSQLクラスターの脆弱性のギャップを埋めることができます。このタスクをはるかに簡単にするために、ClusterControl UIを使用するか、ClusterControlCLIを使用してチェックを自動化することもできます。また、Ansible、Puppetなどの外部ツールと統合することもできます。