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

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

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

Cassandra ノード間暗号化を有効にするには、クラスタ内のすべてのノードで次の手順を行います。各ノードの公開証明書をすべてのノードに配布する必要があります。 これにより、各ノードのトラストストアに node0.cernode1.cer などの証明書が作成されます。各ノードのキーストアには独自の秘密鍵のみが格納されます。たとえば、node0 のキーストアには node0.pem のみが含まれます。各ノードで 1 つずつ暗号化を有効にする必要があります。

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. Stop the Cassandra service:
    /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 キーパスはキーストアと鍵で同じである必要があります。
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. 証明書を別のファイルにエクスポートします。
    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