sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのセキュリティ監査の自動化

    セキュリティ監査は、データを保護し、セキュリティ違反の可能性を回避するためにすべての企業で必須ですが、定期的に多くのことをチェックする必要があるため、時間のかかる作業でもあります。その結果、一般に、企業はセキュリティチェックリストに従い、それをカバーするようにすべてを構成しますが、セキュリティ監査はありません。 「すべてが正常に機能している場合は、そのままにしてください」と言うかもしれません。実際、現在構成しているセキュリティポリシーが将来的に役立つこと、およびそれらに影響を与えるために何も変更されないことを信頼することはできません。このための解決策は、これらのセキュリティ監査を自動化するか、ユーザーフレンドリーな方法で定期的に行う方法を持つことです。

    このブログでは、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と呼ばれるバイナリを実行することによって呼び出されます。

    この強力なツールの例をいくつか見てみましょう。このために、ClusterControlCLIを使用して前述のセキュリティ監査タスクを実行する方法を説明します。

    コミュニケーション

    次のコマンドを使用して、クラスターで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*'
    監視 ここからシステムを監視するためのさまざまなオプションがあります。すべてのクラスターのステータスを確認したり、そのうちの1つを確認したり、アラームをリアルタイムで確認したりすることもできます。

    $  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などの外部ツールと統合することもできます。


    1. 関数内のSELECTまたはINSERTは競合状態になりやすいですか?

    2. MySQLの日付間の月の違い

    3. 正規表現でリストからn番目の値を選択し、nullを許可します

    4. VARCHARからINTへのキャスト-MySQL