ZooKeeper 用 SSL/TLS の設定
ThingWorx HA クラスタを使用している場合、ZooKeeper 用に SSL または TLS を設定できます。
ZooKeeper の設定
1. SSL または TLS をサポートするバージョンの ZooKeeper を実行していることを確認します。
2. SSL 証明書とトラストストアを取得します。次の手順を実行します。
1. ZooKeeper キーストアを作成します。
2. ZooKeeper キーストアの公開キーを使用して、ZooKeeper トラストストアを作成します。
* 
拡張子が JKS、PEM、および PKCS12(p12) の証明書のみを使用できます。
3. apache-zookeeper-[バージョン]-bin/conf に移動し、zoo.cfg を更新するか作成します。
4. 以下のエントリを追加します。
dataDir=/<path-to-zookeeper-data>/data
dataLogDir=/<path-to-zookeeper-datalog>/datalog
secureClientPort=2281
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
admin.enableServer=true
standaloneEnabled=false
quorumListenOnAllIPs=true
sslQuorum=true
ssl.clientAuth=none
ZooKeeper ノード間のクォーラムをアクティブ化するには、zoo.cfg ファイルで変数 sslQuorum=true を設定します。これらのノードは自動生成された SSL を使用してクォーラムをセキュリティ保護します。
ZooKeeper では、相互 TLS (mTLS) ではなく一方向 TLS が使用されます。ssl.clientAuth プロパティには、次の値を指定できます。
none - クライアント証明書は必要ありません (一方向 SSL)。
want - ZooKeeper によりクライアント証明書が要求されますが、強制されません。
need - ZooKeeper に有効なクライアント証明書 (完全な mTLS) が必要です。
5. zoo.cfgdataDir パスで指定したディレクトリで、各ノードそれぞれに myid という名前のファイルを作成します。このファイルには、ノードに対応する単一の数値 ID を含める必要があります。
ノード 1 に対しては、1 行目に 1 と入力し、ファイルを保存して閉じます。
各ノードでこの手順を繰り返します (ノード 2 には 2、ノード 3 には 3 のように入力)。
ファイルには数字のみを含め、余分な空白を含めないようにしてください。また、ZooKeeper サービスユーザー (通常は zookeeper) がファイルを読み取れることを確認してください。ID がコンフィギュレーションと一致しない場合、ノードはクラスタに含まれません。
6. zoo.cfg の最後に server.X=<hostname or IP>:<peerPort>:<electionPort> というフォーマットでエントリを追加します。
次は 3 ノードアンサンブルの例です。
# 3-Node ensemble configuration
# Format: server.X=<hostname or IP>:<peerPort>:<electionPort>
server.1=10.0.0.1:2888:3888
server.2=10.0.0.2:2888:3888
server.3=10.0.0.3:2888:3888
server.X の数値が各ノードの myid ファイルと一致していることを確認してください。dataDir ディレクトリと dataLogDir ディレクトリが存在し、ZooKeeper ユーザーに書き込み権があることが必要です。本番環境では、ディスク容量の増加を防ぐために、自動パージを強くお勧めします。
7. ZooKeeper 起動スクリプトを修正します。
Linux デプロイメントの場合:
<ZooKeeper へのパス>/bin/zkServer.sh を修正し、export SERVER_JVMFLAGS="..." を追加します。
Windows デプロイメントの場合:
Windows にデプロイする場合は、以下の調整された手順を実行します。
a. <path to zookeeper>/bin/zkServer.cmd を修正します。
b. export の代わりに、次のように set コマンドを使用します: set SERVER_JVMFLAGS=...
c. このスクリプトは、この変数を処理するように事前設定されていません。変数を宣言し、それを Java 起動コマンドで参照する必要があります。例:
export SERVER_JVMFLAGS="
-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
-Dzookeeper.ssl.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12
-Dzookeeper.ssl.keyStore.password=<certificate-password>
-Dzookeeper.ssl.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12
-Dzookeeper.ssl.trustStore.password=<truststore-password>
-Dzookeeper.ssl.quorum.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12
-Dzookeeper.ssl.quorum.keyStore.password=<certificate-password>
-Dzookeeper.ssl.quorum.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12
-Dzookeeper.ssl.quorum.trustStore.password=<truststore-password>
-Dzookeeper.ssl.quorum.hostnameVerification=false"
8. ZooKeeper を起動します。
./zkServer.sh start
9. ログで、コンフィギュレーションが正しいことを確認します。
tail -f apache-zookeeper-3.5.6-bin/logs/<zookeeper-log-file>
ThingWorx の設定
1. ZooKeeper の証明書をインスタンスにコピーするか、ThingWorx が実行されているマシンで使用可能であることを確認します。
* 
Tomcat ユーザーは証明書にアクセスできるか、証明書を ThingworxPlatform ディレクトリにコピーする必要があります。
2. platform-settings.json を修正して、ファイルの末尾に PlatformSettingsConfig と同じレベルのルートエレメントとして以下を追加します。
"ZookeeperSettings": {
"SSLEnabled": "true",
# If SSL is enabled, you must include the following; trust store is optional:
"KeyStorePath": "<path-to-zookeeper-certificates>/zookeeper.p12",
"KeyStorePass": "<certificate-password>",
"TrustStorePath": "<path-to-zookeeper-certificates>/truststore.p12",
"TrustStorePass": "<truststore-password>"
"SASLEnabled": "false",
# If SASL is enabled, you must include the following:
"JaasConfPath": "/tmp1/jaas.conf",
"Krb5ConfPath": "/tmp1/krb5.conf"
}
3. デフォルトの ZooKeeper ポート 2181 をサーチし、これをセキュリティ保護されたポート 2281 に置き換えます。
4. すべての CoordinatorHosts エントリと address-resolver > connection ports が更新されて zoo.cfgsecureClientPort の値と一致していることを確認します。
Ignite の設定
1. ZooKeeper キーストアとトラストストアを Ignite マシンにコピーするか、Ignite サーバーが動作しているマシンで使用可能であることを確認します。
2. 環境変数 ZOOKEEPER_CONNECTION を設定し、Ignite の起動に使用される環境変数 JVM_XOPTS を見つけて以下のように更新します。
# zookeeper1 represents the host name where zookeeper is available and 2281 the secure port from zoo.cfg
export ZOOKEEPER_CONNECTION=zookeeper1:2281,zookeeper2:2281,zookeeper3:2281
# update the JVM_XOPTS
JVM_XOPTS="-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty -Dzookeeper.client.secure=true -Dzookeeper.ssl.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12 -Dzookeeper.ssl.keyStore.password=<keystore-password> -Dzookeeper.ssl.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12 -Dzookeeper.ssl.trustStore.password=<truststore-password>"
接続サーバーの設定
1. ZooKeeper の証明書をインスタンスにコピーするか、接続サーバーが動作しているマシンで使用可能であることを確認します。
2. 接続サーバーのコンフィギュレーションファイルで、セキュリティ保護されたポートを使用するように cx-server.discovery.connectionString のポートを更新します。
たとえば、cx-server.discovery.connectionString = "{zookeeper-host}:2281" などです。
3. 環境変数 CONNECTION_SERVER_OPTS に以下のシステムプロパティを追加します。
4. ThingWorx で TLS を使用している場合は、そのための環境変数を設定します。詳細については、「Setting an Environment Variable When Using SSL/TLS」を参照してください。
例:
export CONNECTION_SERVER_OPTS="
-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
-Dzookeeper.client.secure=true
-Dzookeeper.ssl.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12
-Dzookeeper.ssl.keyStore.password=<keystore-password>
-Dzookeeper.ssl.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12
-Dzookeeper.ssl.trustStore.password=<truststore-password>"
ThingWorx セキュリティ管理ツールを使用したパスワードの暗号化
* 
すべてのコンポーネントでサーバーの設定を完了したら、パスワードを暗号化してセキュリティを強化することをお勧めします。
プレーンテキストのパスワードを platform-settings.json ファイルに挿入しないようにする場合、セキュリティツールを使用して twx-keystore 内のパスワードを暗号化できます。encrypt.zk.keystore.password を使用してキーストアのパスワードを暗号化し、encrypt.zk.truststore.password を使用して信頼ストアのパスワードを暗号化する必要があります。
./security-common-cli keystore.conf set encrypt.zk.keystore.password "ptcptc"
次に、ThingWorx がキーストアからパスワードを取得するように platform-settings.json ファイルを変更します。
"KeyStorePass": "encrypt.zk.keystore.password",
"TrustStorePass": "encrypt.zk.truststore.password"
次の手順
Ignite の設定を完了するには、以下のトピックを参照してください。
これは役に立ちましたか?