セキュリティ

共有持続性を使用する展開におけるセキュリティと可用性

共有持続性を使用する展開では、サーバー、データベース、ファイル共有間のネットワーク トラフィックはインストール後のデフォルトでは暗号化されていません。また、セントラル データベースの障害に対応するためデータベースの複製を設定することを検討すべき場合もあります。

データベース パスワードの整合性の維持

Qlik Sense 共有持続性を使用する展開で、パスワードの整合性を維持するための指針をいくつか紹介します。

  • 重要なのは、PostgreSQL のユーザーに関して、[パスワードの保存オプション] を無効にすることです。このオプションが有効化されると、パスワードがファイルに保存され、着信接続がパスワードなしでデータベースに接続できるようになります。
  • パスワードを変更するには、PostgreSQL データベースで次のクエリを実行します。

    ALTER USER <user> WITH PASSWORD '<newpassword>';

    パスワードの変更に成功すると、ALTER ROLE が表示されます。

    上記と同じ理由で、PostgreSQL のユーザー インターフェースではパスワードを変更しないでください。

  • md5 ハッシュを使用します。
  • パスワードに PASSWORD "、つまり空白文字列を設定しないでください。PostgreSQL で正しく処理されません。

データベース トラフィックの暗号化

Qlik Sense では SSL を使用したデータベース トラフィックの暗号化がサポートされていますが、共有持続性を使用した展開で SSL や MD5 によるパスワード保護を設定するには、手動による構成がいくつか必要です。

Note: Qlik Sense インストーラーでは、PostgreSQL への接続を確立する際に SSL 暗号化を使用できません。SSL 暗号化を有効にすると、インストールはすでにインストールされている PostgreSQL データベースを認識せず、その結果インストールを完了できません。回避方法: インストールまたはアップグレード時に SSL を一時的に無効にします。

次の手順を実行します。

  1. postgresql.conf で以下の値を編集します。

    listen_addresses = '*'
    port = 4432
    ssl = on
    ssl_cert_file = 'server.pem'
    ssl_key_file = 'server_key.pem'
    #ssl_ca_file = ''
    #ssl_crl_file = ''
  2. pg_hba.conf に次の行を追加します。

    hostssl all all all md5
  3. pg_hba.conf で、hostssl または host で始まる行をすべて削除します。
  4. server.pemserver_key.pem%PROGRAMDATA%\Qlik\Sense\Repository\Exported Certificates\.Local Certificates から %PROGRAMDATA%\Qlik\Sense\Repository\PostgreSQL\9.6 にコピーします。
  5. 接続文字列エディターを使用して、クラスターに属するセントラル ノードとすべてのリム ノードの repository.exe.config に以下の設定を行います。接続文字列エディターを開くには、C:\Program Files\Qlik\Sense\Repository\Util\QlikSenseUtil に移動し、管理者として QlikSenseUtil.exe ファイルを開きます。
  6. [接続文字列エディター] タブで [読み取り] をクリックし、Repository.exe ファイルの接続文字列を開きます。
  7. ‘Ssl Mode=Require;’ を次の接続文字列に追加します。
  8. <add name="QSR" connectionString="User ID=qliksenserepository;Password=’randompass’; Ssl Mode=Require;Host=fullhostname.com;Port=4432;Database=QSR;Pooling=true;Min Pool Size=0;Max Pool Size=90;Connection Lifetime=3600;Unicode=true;"providerName="Devart.Data.PostgreSql"/>
  9. [暗号化された config ファイルに値を保存する] をクリックして変更を保存します。
  10. すべての Qlik Sense サービスを起動し、すべて機能することを確認します。
  11. PostgreSQL の pgAdmin ツールを使用して認証を検証します。

    ユーザー postgres とユーザー qliksenserepository は、接続に有効なパスワードの入力が必要です。

データベース接続での TLS 1.2 のみの使用の強制

TLS 1.2 のみをサポートし、TLS 1.1 以前を使用した接続をブロックするようにデータベース接続を構成することができます。

次の手順を実行します。

  • 接続文字列にパラメータ-を追加します。"SSL TLS Protocol=1.2"

データベースの整合性を維持するため、以下の追加の構成変更をお勧めします。

  • リポジトリが動作しているサーバーからの接続のみを受け付けるようデータベースを構成する。
  • Postgresql.conf ファイルに次の行を追加することにより、弱い暗号スイートを拒否するよう、SSL を構成する。

    ssl_ciphers = 'DEFAULT:!LOW:!EXP:!eNULL:!aNULL:!MD5:!RC2:!RC4:!DES:@STRENGTH'

データベースの複製とフェールオーバー

このセクションでは、共有持続性環境でのデータベースの複製とフェールオーバーの設定方法について説明します。さらに、ファイル ストレージ コンテンツの複製も必要になります。セントラル データベースやセントラル ノードが停止した場合にスタンバイ ノードにフェールオーバーするために、1 つまたは複数のスタンバイ データベースを構成してプライマリ ノードのデータベースから複製をストリーミングできます。

Qlik Sense のインストールに関連するテキスト ファイルを編集する場合の手順は次のとおりです。

  1. ファイルをサーバーの別の場所にコピーします。
  2. ファイルを編集して、変更を保存します。
  3. 更新したファイルを元の場所にコピーします。

スタンバイ ノードへのフェールオーバー用の複製の設定

このセクションでは、1 つまたは複数のスタンバイ ノードに対する複製の非同期ストリーミングの設定方法について説明します。始める前に、環境が構成されで動作していることを確認したら、スタンバイ マシンに PostgreSQL をインストールします。

Note: この説明のパスは、専用マシンのデータベースとして使用されるデフォルトの PostgreSQL インストールに合わせたものです。Qlik Sense でインストールした PostgreSQL データベースを使用している場合、データベースは %ProgramData%\Qlik\Sense\Repository\PostgreSQL\<version>\ にインストールされるため、パスをそれに合わせる必要があります。

プライマリ データベース サーバーの構成

プライマリ データベース サーバー側の手順は以下のとおりです。

  1. %ProgramFiles%\PostgreSQL\9.6\data\postgresql.conf ファイルを開きます。

    次の設定項目を探して設定します。

    wal_level = replica
    max_wal_senders = 3
    wal_keep_segments = 8
    hot_standby = on
  2. 複製に使用できるユーザー アカウントを作成します。コマンド プロンプトで作成するには、以下のコマンドを実行します。ホスト名は必要に応じて変更し、適切なパスワードを指定します。パスワードの入力を求められることがありますが、これはインストール中に指定したパスワードです。

    "C:\Program Files\PostgreSQL\9.6\bin\psql.exe" -h <machinename> -p 4432 -W -c "CREATE USER replicator REPLICATION LOGIN ENCRYPTED PASSWORD 'secretpassword';" 
  3. %ProgramFiles%\PostgreSQL\9.6\data\pg_hba.conf ファイルを開きます。

    ファイルの末尾に次の行を追加します。

    host replication replicator 0.0.0.0/0md5

    必要に応じてサブネット アクセスをさらに制限することもできます。

  4. PostgreSQL サービスを再起動します。

スタンバイ データベース サーバーの構成

スタンバイ PostgreSQL データベース サーバー側の手順は以下のとおりです。

  1. Postgres サービスを停止します。
  2. %ProgramFiles%\PostgreSQL\9.6\data のすべてのコンテンツを削除します。
  3. 次のコマンドを、使用するプライマリ サーバー名に合わせて修正し、コマンド ラインから実行します。

    "C:\Program Files\PostgreSQL\9.6\bin\pg_basebackup.exe" -h <primaryServer> -D "C:\Program Files\PostgreSQL\9.6\data" -U replicator -v -P -p 4432

    ファイルの手動コピーに関する警告はすべて無視して構いません。

  4. テキスト エディタで recovery.conf という名前のファイルを作成し、%ProgramFiles%\PostgreSQL\9.6\data に置きます。
  5. recovery.conf を開き、以下のテキストを追加して、ホスト名とポートを修正します。

    standby_mode = 'on'
    primary_conninfo = 'host=< primaryServer > port=4432 user=replicator password=secretpassword'
    trigger_file = 'failover'
    recovery_target_timeline = 'latest'
  6. PostgreSQL サービスを起動します。

これでデータベースに接続してプライマリ ノードからストリーミングされているデータを読み取り専用モードで表示できるようになります。

手動でのデータベース フェールオーバー

プライマリ ノードのデータベースが停止した場合、スタンバイ ノードが引き継ぐ必要があります。

次の手順を実行します。

  1. 新しいプライマリ ノードになるスタンバイ ノードで、failover という名前のファイルを %ProgramFiles%\PostgreSQL\9.6\data フォルダーに作成します。

    Note: failover ファイルにはファイル拡張子をつけません。

    このファイルが、PostgreSQL を起動して復元を停止し、読み書きモードに移行します。また、PostgreSQLrecovery.conf のファイル名を recovery.done に変更してこの移行を反映させます。

  2. 各ノードで、リポジトリ データベース接続文字列を新しいデータベース ノードのホスト名または IP アドレスを指定するように変更します。接続文字列は、構成ファイルで暗号化されているため、接続文字列エディターを使って文字列を復号化し、編集してからもう一度文字列を暗号化する必要があります。

    1. 接続文字列エディターを開くには、C:\Program Files\Qlik\Sense\Repository\Util\QlikSenseUtil に移動し、管理者として QlikSenseUtil.exe ファイルを開きます。
    2. [接続文字列エディター] タブで [読み取り] をクリックし、Repository.exe ファイルの接続文字列を開きます。

      復号化されたデータベース接続文字列が表示されます。

    3. [ホスト] の値を新しいデータベース ノードのホスト名または IP アドレスで置き換えます。

    4. [暗号化された config ファイルに値を保存する] をクリックして変更を保存します。