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

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

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

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

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

    FIPS 対応のオペレーティング システムで Edge for Private Cloud を使用している場合は、BouncyCastle FIPS キーストア(BCFKS)を使用します。BCFKS タイプのキーストアの使用方法については、以下の付録をご覧ください。

    以下の手順では、付録で説明されているように、keystore.node0truststore.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
      
    # Set the following in FIPS enabled operating systems
    # With FIPS, older TLS protocols are disabled, so set to TLSv1.2
    conf_cassandra_server_encryption_protocol=TLSv1.2
    # With FIPS, use BCFKS keystores
    conf_cassandra_server_encryption_store_type=BCFKS
      
  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. 証明書を別の 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

FIPS 対応オペレーティング システムの BCFKS キーストアの操作

FIPS 対応のオペレーティング システムを使用する場合は、BouncyCastle FIPS Keystores(BCFKS)を使用します。以降のセクションでは、BCFKS タイプのキーストアを操作する方法について説明します。キーストアを操作するその他の手順(ファイルの所有権、ファイルの場所など)は、この付録で説明したものと同じです。

BCFKS タイプのキーストアを生成するには、次のコマンドを使用します。

keytool -genkeypair -keyalg RSA -alias node0 -validity 365 -keystore keystore.node0 \
-storepass keypass -keypass keypass -v \
-dname "EMAILADDRESS=youremail@domain.com, CN=yourcn, OU=yourou, O=youro, L=yourl, C=yourc" \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

注: キーストアのパスワードと鍵のパスワードは同じにする必要があります。

注: Apigee から提供される bc-fips jar を使用できます。または、BouncyCastle のリポジトリから同じ jar をダウンロードすることもできます。BCFKS キーストアを生成する方法について詳しくは、BouncyCastle のドキュメントをご覧ください。

証明書を別の 1 つのファイルにエクスポートします。

keytool -export -v -alias node0 -file node0.cer -keystore keystore.node0 -storepass keypass \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS

生成された証明書 node0.cer をノードのトラストストアにインポートします。

keytool -import -v -alias node0 -file node0.cer -keystore truststore.node0 -storepass storepass \
-storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \
-providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS