nodetool、dsetool、およびdse advrep用にSSLを設定する

SSL暗号化を使って、nodetool、dsetool、およびdse advrepを使用する。

nodetool、dsetool、およびdse advrepでSSLを使用するには、JMXのセットアップが必要です。

cassandra-env.sh

cassandra-env.shファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra-env.sh
tarボール・インストール installation_location/resources/cassandra/conf/cassandra-env.sh

始める前に

ローカルSSL証明書とキーストア・ファイルの使用」を完了します。さらに、クライアントとノード間の暗号化を構成します。
注: プロダクション環境では、jksファイルを使用してクラスター全体をセキュリティ保護します。単一ノードの開発環境では、より単純な単一ノード、ローカル・キーストア・ファイル、およびトラストストア・ファイルを使用できます。

手順

  1. サーバー側でJMX SSLを構成します。
    重要: クラスター内の各ノードで cassandra-env.sh ファイルにこの変更を加えてください。
    1. $LOCAL_JMX設定が存在する場合は、noに変更します。
      "$LOCAL_JMX" = "no"
    2. 以下の設定を追加します。
      注:起動時のシステム・プロパティの設定」で説明されているように、jvm.optionsファイルを使用することもできます。
      プロダクション環境:
      JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
                                  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=true"
                                  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true"
                                  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.protocols=<enabled-protocols>"
                                  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.cipher.suites=<enabled-cipher-suites>"
                                  
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/usr/local/lib/cassandra/conf/server-keystore.jks"
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=myKeyPass"
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=/usr/local/lib/cassandra/conf/server-truststore.jks"
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=truststorePass"
      開発環境:
      JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
                                  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=true"
                                  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true"
                                  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.protocols=<enabled-protocols>"
                                  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.cipher.suites=<enabled-cipher-suites>"
                                  
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=keystore.node0"
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=cassandra"
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=truststore.node0"
                                  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=cassandra"
      ここで、
      • com.sun.management.jmxremote.ssl=trueは、JMXのSSLを有効にします。
      • com.sun.management.jmxremote.ssl.need.client.auth=trueは、双方向の証明書認証を有効にします。
      • com.sun.management.jmxremote.registry.ssl=trueは、Java VMが起動した時点でSSLで保護されたRMIレジストリーを作成し、そのまま使用できる管理エージェントを構成します。
      • com.sun.management.jmxremote.registry.ssl=trueは、com.sun.management.jmxremote.ssl.need.client.auth=trueも有効にする必要があります。
      以下を行う必要があります。
      • keystoreファイルとtruststoreファイルの適切なパスを設定します。
      • これらのパスワードは、キーストアとトラストストアの生成時に設定したパスワードに設定します。
  2. DSEを再起動します
  3. クライアント設定を構成するには、コマンドが実行されるノードで以下の設定を使用して、ホームまたはクライアント・プログラム・ディレクトリーに.cassandra/nodetool-ssl.propertiesファイルを作成します。
    プロダクション環境:
    -Dcom.sun.management.jmxremote.ssl=true
                                -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
                                -Dcom.sun.management.jmxremote.registry.ssl=true  
                                -Djavax.net.ssl.keyStore=/usr/local/lib/dse/resources/dse/conf/.keystore
                                -Djavax.net.ssl.keyStorePassword=cassandra
                                -Djavax.net.ssl.trustStore=/usr/local/lib/cassandra/conf/.truststore
                                -Djavax.net.ssl.trustStorePassword=cassandra

    開発環境:

    -Djavax.net.ssl.keyStore=keystore.node0
                            -Djavax.net.ssl.keyStorePassword=cassandra
                            -Djavax.net.ssl.trustStore=truststore.node0
                            -Djavax.net.ssl.trustStorePassword=cassandra
                            -Dcom.sun.management.jmxremote.ssl.need.client.auth=true
                            -Dcom.sun.management.jmxremote.registry.ssl=true
任意の操作で暗号化された接続にSSLを使用して、nodetool、dsetool、およびdse advrepを使用するには、次の操作を行います。
  1. --sslオプションを使用してコマンドを起動します。
    nodetoolの例:
    nodetool --ssl command
    dsetoolの例:
    dsetool --ssl command
    dse advrepの例:
    dse advrep --ssl command
  2. 暗号化された接続に対して--sslオプションを使用してコマンドを起動し、すべての操作の認証と権限管理のためのユーザー名とパスワードを指定します。パスワードを入力してしない場合、入力するように求められます。
    nodetoolの例:
    nodetool --ssl -u username -pw password command
    dsetoolの例:
    dsetool --ssl -a jmx_username -b jmxpassword command
    dse advrepの例:
    dse advrep --ssl -u username -p password command