ノード間暗号化では、クラスタ内のノード間で転送されるデータを TLS を使用して保護します。このページでは、Edge で TLS を使用した Cassandra ノード間暗号化を有効にする方法について説明します。 プライベート クラウドこれらの手順を行うには、Cassandra リングの詳細に精通している必要があります。
Cassandra のノード間暗号化を有効にする
Cassandra のノード間暗号化を有効にする手順は次のとおりです。
付録の手順に沿ってサーバー証明書を生成する 自己署名鍵と証明書を作成します。
FIPS 対応のオペレーティング システムで Edge for Private Cloud を使用している場合は、BouncyCastle FIPS Keystore(BCFKS)を使用します。BCFKS タイプのキーストアの使用方法については、以下の付録をご覧ください。
以降の手順では、付録で説明されているように、
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 # 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
- ファイル
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 |
キーストアと鍵の両方でキーパスが同じである必要があります。 |
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"
重要: 鍵のパスワードがキーストアのパスワードと同じであることを確認してください。
- 証明書を別の 1 つのファイルにエクスポートします。
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
」と入力します。 - opensl を使用して、鍵のない証明書の 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
FIPS 対応オペレーティング システムの BCFKS キーストアの操作
FIPS 対応のオペレーティング システムを使用する場合は、BouncyCastle FIPS キーストア(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 のドキュメントをご覧ください。
証明書を別のファイルにエクスポートします。
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