単一ノードのセキュア・デプロイメント

次の各例では、Oracle NoSQL Databaseの新規または既存の単一ホスト・デプロイメントにセキュリティを追加する方法を説明します。

新規インストールへのセキュリティの追加

Oracle NoSQL Databaseをセキュアにインストールするには、次のようにします。

  1. makebootconfigユーティリティを-store-securityオプションとともに実行して、セキュリティを備えた基本ストア構成を設定します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar makebootconfig \
    -root KVROOT -port 5000 \
    -host node01 -harange 5010,5020 \
    -store-security configure -pwdmgr pwdfile -capacity 1 
  2. この例では、-store-security configureが使用されるため、security configurationユーティリティがmakebootconfigプロセスの一部として実行され、キーストア・ファイルに使用するパスワードの入力が求められます。

    Enter a password for the Java KeyStore: 
  3. ストアのパスワードを入力してから、検証のために再入力します。この場合、パスワード・ファイルが使用され、securityconfigツールによって次のセキュリティ関連ファイルが自動生成されます。

    Enter a password for the Java KeyStore: ***********
    Re-enter the KeyStore password for verification: ***********
    Created files:
    security/client.trust
    security/client.security
    security/store.keys
    security/store.trust
    security/store.passwd
    security/security.xml 

    ノート:

    マルチホスト・ストア環境では、securityディレクトリおよびここに含まれるすべてのファイルを、ストレージ・ノードをホストする各サーバーにコピーする必要があります。

  4. ストレージ・ノード・エージェント(SNA)を起動します。

    ノート:

    SNAを開始する前に、環境変数MALLOC_ARENA_MAX1に設定します。MALLOC_ARENA_MAX1に設定すると、メモリー使用量が指定されたヒープ・サイズに制限されます。

    nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start -root KVROOT&

    セキュアな構成の新規作成されたストアの初回起動時には、アクセスを認証するための使用可能なユーザー定義がありません。不正アクセスのリスクを抑えるために、管理によって許可されるのは実行中のホストからの接続のみとなります。このセキュリティ手段は、不正アクセスに対する完全な予防策にはなりません。KVStoreが動作するマシンへのローカル・アクセスを可能にしないことが重要です。また、完全認証なしで管理にアクセスできる期間を最小限にするために、このステップの直後にステップ5、6および7を実行する必要があります。セキュアなストアの保守の詳細は、「構成の保護ガイドライン」を参照してください。

  5. KVStoreサーバー・ホスト(node01)上で、runadminをセキュリティ・モードで起動します。このためには、次のコマンドを使用します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar \
    runadmin -port 5000 -host node01 \
    -security KVROOT/security/client.security
    Logged in admin as anonymous 
  6. configure -nameコマンドを使用すると、構成するKVStoreの名前を指定できます。

    kv-> configure -name mystore
    Store configured: mystore 
    KVStoreに名前を付けた後、少なくとも1つのゾーンを作成できます。
    kv-> plan deploy-zone -name zone_name -rf 1 -type primary -wait

    各KVStoreは、管理データベースを持ちます。データベースの構成を続行するには、まずストレージ・ノードをデプロイしてから、同じノードに管理プロセスをデプロイする必要があります。

    ノードをデプロイする際、ゾーンID、ノードのネットワーク名、およびそのレジストリ・ポート番号を指定します。
    kv-> plan deploy-sn -znname zone_name -host hostname -port 5000 -wait
    ノードをデプロイしたら、deploy-adminコマンドを使用して、デプロイしたノードに管理プロセスを作成します。このコマンドには、ストレージ・ノードIDとオプションのプラン名が必要です。

    ノート:

    ノート: ストレージ・ノードIDはshow topologyコマンドを使用して取得できます。詳細は、show topologyを参照してください。
    kv-> plan deploy-admin -sn sn1 -wait
    構成プロセスの最後のステップは、ストア内の各ノードでレプリケーション・ノードを作成することです。これは、topology createコマンドおよびplan deploy-topologyコマンドを使用することで行います。
    kv-> topology create -name storeTopo -pool AllStorageNodes -partitions 150
    kv-> plan deploy-topology -name storeTopo -wait

    ストアは完全にインストールされ、構成されています。

  7. 管理ユーザーを作成します。パスワードは、パスワードの複雑度ポリシーに記載されているセキュリティ・ポリシーに準拠する必要があります。この場合、ユーザーrootが定義されます。

    kv-> execute 'CREATE USER root IDENTIFIED BY \"password\" ADMIN
    Statement completed successfully  

    ユーザーの作成および管理の詳細は、「ユーザー管理」を参照してください。

  8. 新規パスワード・ファイルを作成し、クライアントに対して管理ユーザー(root)としてのログインを許可するために必要な資格証明を格納します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig \
    pwdfile create -file KVROOT/security/login.passwd
    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig pwdfile secret \
    -file KVROOT/security/login.passwd -set -alias root
    Enter the secret value to store: ********
    Re-enter the secret value for verification: ********
    Secret created
    

    ノート:

    パスワードは、前のステップで管理用に設定したパスワードと一致する必要があります。

    ユーザーの作成および管理の詳細は、「ユーザー管理」を参照してください。

  9. この時点では、rootユーザーとしてストアに接続できます。ログインするには、-username <user> runadmin引数を使用するか、セキュリティ・ファイルに"oracle.kv.auth.username"プロパティを指定します。

    この例では、セキュリティ・ファイル(mylogin.txt)が使用されます。ログインするには、次のコマンドを使用します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar runadmin -port 5000 \
    -host localhost -security mylogin
    Logged in admin as root 

    ファイルmylogin.txtは、認証用に追加のプロパティ設定が含まれる、client.securityファイルのコピーである必要があります。このファイルには次のような内容が含まれます。

    oracle.kv.auth.username=root
    oracle.kv.auth.pwdfile.file=KVROOT/security/login.passwd
    oracle.kv.transport=ssl
    oracle.kv.ssl.trustStore=KVROOT/security/client.trust
    oracle.kv.ssl.protocols=TLSv1.2
    oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL) 

    ホスト名検証では、Oracle NoSQL Databaseサーバー・ホストが(SSL/TLSを使用してサーバーへの接続を試行する際に) SSLハンドシェイクで使用されると想定する名前をOracle NoSQL Databaseクライアントで指定できることに注意してください。

    標準構成を使用するセキュアなストアの場合、サーバー・ホスト自体の認証が必要となり、クライアントはSSLトラストストアを使用して、サーバーが信頼できるIDにより認証されることを確認します。さらに、ホスト名検証を使用することで、単に信頼できるいずれかのIDではなく、想定されるIDを使用してサーバー・ホストが認証されることも確実になります。

    この追加チェックは、トラストストアに複数の証明書が含まれているか、トラストストアに含まれる証明書が自己署名証明書またはリーフ証明書ではなくCA証明書である場合に有益です。いずれの場合も、トラストストアでは複数のIDを保証できます。ホスト検証では、ユーザーが、想定される特定のIDを指定できます。

    現在サポートされているホスト名検証は、dnmatch検証のみです。この検証は、dnmatch(distinguished-name)の形式で指定する必要があり、ここで、識別名はNoSQL DBサーバー証明書の識別名である必要があります。デフォルトのセキュリティ構成を使用している場合、この例のホスト名検証では、識別名がCN=NoSQLである証明書を使用してサーバーが認証を行う必要があることを指定しています。これは、デフォルトでシステムによって生成される、サーバー証明書で使用される名前です。

    検証は、サーバー証明書の識別名が、指定されたdnmatch式と一致するかどうかをチェックすることによって実行されます。この式では、java.util.regex.Patternで指定された正規表現が使用されます。dnmatchで指定される識別名は、属性値の正確な順序、大文字表記および空白を使用したRFC 1779形式である必要があります。RFC 1779は、CN、L、ST O、OU、C、STREETなど、識別名の有効な属性を定義しています。外部証明書の識別名に非標準属性(EMAILADDRESSなど)が含まれている場合、dnmatchに使用する式では、これらの属性名をRFC 1779形式で有効なOIDで置き換えるか、またはこれらの属性のチェックをスキップするために正規表現の特別な構成を使用する必要があります。ワイルド・カードを使用して、非標準識別名属性を含む証明書と一致させる場合、dnmatch式は、そのOID形式の属性名と適切に一致する必要があります。ユーザー・ログインを参照してください。

既存のインストールへのセキュリティの追加

既存のOracle NoSQL Databaseインストールにセキュリティを追加するには、次のようにします。

  1. KVStoreインスタンスを停止します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar stop \
    -root KVROOT
  2. securityconfigユーティリティを実行し、セキュリティを備えた基本ストア構成を設定します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig
  3. config createコマンドを-pwdmgrオプションとともに使用して、ストアへのアクセスに必要なパスワードの保持に使用されるメカニズムを指定します。この場合、Oracle Walletが使用されます。Oracle Walletは、Oracle NoSQL Database EEバージョンでのみ使用できます。CEデプロイメントでは、かわりにpwdfileオプションを使用する必要があります。

    config create -pwdmgr wallet -root KVROOT
    Enter a password for the Java KeyStore: 
  4. ストアのパスワードを入力してから、検証のために再入力します。構成ツールによって、いくつかのセキュリティ関連ファイルが自動生成されます。

    Enter a password for the Java KeyStore: ***********
    Re-enter the KeyStore password for verification: ***********
    Created files:
    security/security.xml
    security/store.keys
    security/store.trust
    security/store.wallet/cwallet.sso
    security/client.security
    security/client.trust  

    ノート:

    マルチホスト・ストア環境では、securityディレクトリおよびここに含まれるすべてのファイルを、ストレージ・ノードをホストする各サーバーにコピーする必要があります。

  5. config add-securityコマンドを使用して、作成したセキュリティ構成を追加します。

    security-> config add-security -root KVROOT
    -secdir security  -config config.xml
    Configuration updated. 

    ノート:

    このコマンドの実行中、securityconfigツールにより参照先ファイルの存在が検証され、セキュリティ構成を参照するために指定のブートストラップ構成ファイルが更新されます。このプロセスは通常、KVStoreインスタンスが停止した状態で実行されるものであり、ストアの各ストレージ・ノード上で実行される必要があります。

  6. ストレージ・ノード・エージェント(SNA)を起動します。

    ノート:

    SNAを開始する前に、環境変数MALLOC_ARENA_MAX1に設定します。MALLOC_ARENA_MAX1に設定すると、メモリー使用量が指定されたヒープ・サイズに制限されます。

    nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start -root KVROOT &
  7. KVStoreサーバー・ホスト(node01)上で、runadminをセキュリティ・モードで起動します。このためには、次のコマンドを使用します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar \
    runadmin -port 5000 -host node01 \
    -security KVROOT/security/client.security
    Logged in admin as anonymous.

    このコマンドにより、SSLが接続メソッドとして設定され、生成されたトラストストア・ファイル(client.security)のコピーが指定されます。SSLプロパティの詳細は、「SSL通信プロパティ」を参照してください。

  8. 管理ユーザーを作成します。パスワードは、パスワードの複雑度ポリシーに記載されているセキュリティ・ポリシーに準拠する必要があります。この場合、ユーザーrootが定義されます。

    kv-> execute 'CREATE USER root IDENTIFIED BY \"password\" ADMIN
    Statement completed successfully

    ユーザーの作成および管理の詳細は、「ユーザー管理」を参照してください。

  9. 新規ウォレット・ファイルを作成し、クライアントに対して管理ユーザー(root)としてのログインを許可するために必要な資格証明を格納します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig \
    wallet create -dir KVROOT/security/login.wallet
    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig wallet secret \
    -dir KVROOT/security/login.wallet -set -alias root
    Enter the secret value to store: ********
    Re-enter the secret value for verification: ********
    Secret created
    

    ノート:

    パスワードは、前のステップで管理用に設定したパスワードと一致する必要があります。

    ユーザーの作成および管理の詳細は、「ユーザー管理」を参照してください。

  10. この時点では、rootユーザーとしてストアに接続できます。ログインするには、-username <user> runadmin引数を使用するか、セキュリティ・ファイルに"oracle.kv.auth.username"プロパティを指定します。

    この例では、oracle.kv.securityプロパティが使用されます。ログインするには、次のコマンドを使用します。

    java -Xmx64m -Xms64m \
    -Doracle.kv.security=mylogin \
    -jar KVHOME/lib/kvstore.jar runadmin -port 5000 -host localhost
    Logged in admin as root

    ファイルmylogin.txtは、認証用に追加のプロパティ設定が含まれる、client.securityファイルのコピーである必要があります。このファイルには次のような内容が含まれます。

    oracle.kv.auth.username=root
    oracle.kv.auth.wallet.dir=KVROOT/security/login.wallet
    oracle.kv.transport=ssl
    oracle.kv.ssl.trustStore=KVROOT/security/client.trust
    oracle.kv.ssl.protocols=TLSv1.2
    oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL) 

    詳細は、「ユーザー・ログイン」を参照してください。