Cassandra ノード間暗号化を有効にする

ノード間暗号化では、クラスタ内のノード間で転送されるデータを TLS を使用して保護します。このページでは、Edge for Private Cloud で TLS を使用して Cassandra ノード間暗号化を有効にする方法について説明します。これらの手順を行うには、Cassandra リングの詳細に精通している必要があります。

Cassandra ノード間暗号化を有効にする

Cassandra ノード間暗号化を有効にする手順は次のとおりです。

  1. 付録の手順に沿ってサーバー証明書を生成し、自己署名鍵と証明書を作成します。

    これ以降の手順では、付録で説明されているように、keystore.node0truststore.node0、さらにキーストアとトラストストアのパスワードをすでに作成していることを前提としています。 次のステップに進む前の予備手順として、各ノードでキーストアとトラストストアを作成する必要があります。

  2. 次のプロパティを /opt/apigee/customer/application/cassandra.properties ファイルに追加します。ファイルが存在しない場合は作成します。
    conf_cassandra_internode_encryption=all
    conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_keystore_password=keypass
    conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_truststore_password=trustpass
    # Optionally set the following to enable 2-way TLS or mutual TLS
    # conf_cassandra_require_client_auth=true
  3. ファイル cassandra.properties の所有者を「apigee」ユーザーにします。
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

次の手順を Cassandra ノードごとに 1 つずつ実行します。こうすると、ユーザーにダウンタイムが生じることなく変更が反映されます。

  1. Cassandra サービスを停止します。
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Cassandra サービスを再起動します。
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. TLS 暗号化サービスが開始されたかどうかを判別するには、システムログで次のメッセージを探します。
    Starting Encrypted Messaging Service on TLS port

証明書のローテーションを行う

証明書をローテーションする手順は次のとおりです。

  1. 生成されたそれぞれの一意の鍵ペア用の証明書を既存の Cassandra ノードのトラストストアに追加し(付録を参照)、古い証明書と新しい証明書の両方が同じトラストストアに存在するようにします。
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    ここで、NEW_ALIAS はエントリを識別する一意の文字列、CERT は追加する証明書ファイルの名前、EXISTING_TRUSTSTORE は Cassandra ノード上の既存のトラストストアの名前です。

  2. scp などのコピー ユーティリティを使用して、クラスタ内のすべての Cassandra ノードにトラストストアを配布し、各ノードで使用中の既存のトラストストアを置き換えます。
  3. クラスタのローリング再起動を実行して新しいトラストストアを読み込み、新しい鍵の信頼を確立してから鍵を配置します。
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. クラスタ内の各 Cassandra ノードにある cassandra.properties ファイルで、以下のプロパティを新しいキーストア値に更新します。
    conf_cassandra_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
    
      

    where NEW_KEYSTORE_PATH is the path to the directory where the keystore file is located and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Cassandra サービスを停止します。
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  6. Cassandra サービスを再起動します。
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. すべてのノード間の通信が正常に確立されたら、次の Cassandra ノードに進みます。注: すべてのノード間の通信が正常に確立された場合にのみ、次のノードに進んでください。

付録

次の例は、ノード間暗号化の手順を行うのに必要なサーバー証明書を準備する方法を示しています。この例に示されているコマンドは、次のパラメータを使用します。

パラメータ 説明
node0 ノードを識別するための一意の文字列。
keystore.node0 キーストア名。このファイルが現在のディレクトリにあることを前提として、コマンドが実行されます。
keypass キーストアと鍵の両方で keypass を同じにする必要があります。
dname node0 の IP アドレスを 10.128.0.39 として指定します。
-validity このフラグに設定されている値により、生成された鍵ペアは 10 年間有効になります。
  1. 次のディレクトリに移動します。
    cd /opt/apigee/data/apigee-cassandra
  2. 次のコマンドを実行して、現在のディレクトリに 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"

    重要: 鍵のパスワードがキーストアのパスワードと同じであることを確認してください。

  3. 証明書を別の 1 つのファイルにエクスポートします。
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. apigee ユーザーだけがファイルを読み取れるようにし、他のユーザーが読み取れないようにする必要があります。
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. 生成された証明書 node0.cer をノードのトラストストアにインポートします。
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    上記のコマンドにより、パスワードを設定するよう求められます。これはトラストストア パスワードです。前に設定したキーストア パスワードとは異なる場合もあります。証明書を信頼するよう求めるプロンプトが表示されたら、「yes」と入力します。

  6. 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
  7. ノード間暗号化を行うには、node0.cer ファイルを各ノードにコピーして、各ノードのトラストストアにインポートします。
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. keytool -list を使用して、キーストア ファイルとトラストストア ファイルにある証明書を確認します。
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0