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

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

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

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

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

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

  2. /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
      
  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 暗号化サービスが開始されたかどうかを確認するには、システムログで次のメッセージを確認します。
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

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

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

  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_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    ここで、NEW_KEYSTORE_PATH はキーストア ファイルが配置されているディレクトリのパス、NEW_KEYSTORE_PASSWORD は付録で説明したように証明書の作成時に設定されたキーストアのパスワードです。

  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. 証明書を別のファイルにエクスポートします。
    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