ノード間(またはノード間)暗号化は、TLS を使用してクラスタ内のノード間を移動するデータを保護します。このページでは、Edge for Private Cloud で TLS を使用して Cassandra のノード間暗号化を有効にする方法について説明します。これらの手順を行うには、Cassandra リングの詳細を理解している必要があります。
Cassandra ノード間暗号化を有効にする
Cassandra ノード間暗号化を有効にする手順は次のとおりです。
付録の手順に沿って、自己署名鍵と証明書を作成し、サーバー証明書を生成します。
次の手順では、付録で説明したように、
keystore.node0とtruststore.node0、キーストアとトラストストアのパスワードを作成済みであることを前提としています。次のステップに進む前に、各ノードでキーストアとトラストストアを予備ステップとして作成する必要があります。/opt/apigee/customer/application/cassandra.propertiesファイルに次のプロパティを追加します。ファイルが存在しない場合は作成します。conf_cassandra_server_encryption_internode_encryption=all conf_cassandra_server_encryption_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0 conf_cassandra_server_encryption_keystore_password=keypass conf_cassandra_server_encryption_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0 conf_cassandra_server_encryption_truststore_password=trustpass # Optionally set the following to enable 2-way TLS or mutual TLS conf_cassandra_server_encryption_require_client_auth=true- ファイル
cassandra.propertiesが apigee ユーザーによって所有されていることを確認します。chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
次の手順を各 Cassandra ノードで 1 つずつ実行して、ユーザーのダウンタイムを発生させることなく変更を有効にします。
- Cassandra サービスを停止します。
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Cassandra サービスを再起動します。
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- TLS 暗号化サービスが開始されたかどうかを確認するには、システムログで次のメッセージを確認します。
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
証明書のローテーションを行う
証明書をローテーションする手順は次のとおりです。
- 生成された一意の鍵ペア(付録を参照)ごとに証明書を既存の Cassandra ノードのトラストストアに追加し、古い証明書と新しい証明書の両方が同じトラストストアに存在するようにします。
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
ここで、
NEW_ALIASはエントリを識別する一意の文字列、CERTは追加する証明書ファイルの名前、EXISTING_TRUSTSTOREは Cassandra ノード上の既存のトラストストアの名前です。 - scp などのコピー ユーティリティを使用して、トラストストアをクラスタ内のすべての Cassandra ノードに配布し、各ノードで使用されている既存のトラストストアを置き換えます。
- クラスタのローリング再起動を実行して、新しいトラストストアを読み込み、新しいキーが配置される前に新しいキーの信頼を確立します。
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- クラスタ内の各 Cassandra ノードで、cassandra.properties ファイルの次のプロパティを新しいキーストア値に更新します。
conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
ここで、
NEW_KEYSTORE_PATHはキーストア ファイルが配置されているディレクトリのパス、NEW_KEYSTORE_PASSWORDは付録で説明したように証明書の作成時に設定されたキーストアのパスワードです。 - Cassandra サービスを停止します。
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Cassandra サービスを再起動します。
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- すべてのノード間で通信が正常に確立されたら、次の Cassandra ノードに進みます。注: すべてのノード間で通信が正常に確立された場合にのみ、次のノードに進みます。
付録
次の例では、ノード間暗号化の手順を実行するために必要なサーバー証明書を準備する方法について説明します。この例に示すコマンドでは、次のパラメータを使用します。
| パラメータ | 説明 |
|---|---|
node0 |
ノードを識別する一意の文字列。 |
keystore.node0 |
キーストア名。コマンドは、このファイルが現在のディレクトリにあることを前提としています。 |
keypass |
keypass は、キーストアと鍵の両方で同じである必要があります。 |
dname |
node0 の IP アドレスを 10.128.0.39 として識別します。 |
-validity |
このフラグに設定された値により、生成された鍵ペアは 10 年間有効になります。 |
- 次のディレクトリに移動します。
cd /opt/apigee/data/apigee-cassandra
- 次のコマンドを実行して、現在のディレクトリに
keystore.node0という名前のファイルを生成します。keytool -genkey -keyalg RSA -alias node0 -validity 3650 \ -keystore keystore.node0 -storepass keypass \ -keypass keypass -dname "CN=10.128.0.39, OU=None, \ O=None, L=None, C=None"
重要: 鍵のパスワードがキーストアのパスワードと同じであることを確認してください。
- 証明書を別のファイルにエクスポートします。
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- ファイルが apigee ユーザーのみが読み取り可能で、他のユーザーは読み取りできないことを確認します。
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- 生成された証明書
node0.cerをノードのトラストストアにインポートします。keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
上記のコマンドを実行すると、パスワードの設定を求められます。これはトラストストアのパスワードであり、前に設定したキーストアのパスワードとは異なる場合があります。証明書を信頼するよう求められたら、「
yes」と入力します。 - OpenSSL を使用して、鍵のない証明書の PEM ファイルを生成します。
cqlshは、生成された形式の証明書では機能しません。$ keytool -importkeystore -srckeystore keystore.node0 \ -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass \ keypass -deststorepass keypass $ openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem \ -passin pass:keypass $ openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:keypass
- ノード間暗号化の場合は、
node0.cerファイルを各ノードにコピーし、各ノードのトラストストアにインポートします。keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
keytool -listを使用して、キーストア ファイルとトラストストア ファイル内の証明書を確認します。$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0