KerberosによるOracle NoSQL Databaseのセキュア・インストールの実行

Kerberosは、新規または既存のOracle NoSQL Databaseセキュア・インストールに追加できます。

高いレベルで、Kerberosを使用するようにOracle NoSQL Databaseインストールを構成するには、まず、Oracle NoSQL DatabaseをKDCのサービス・プリンシパルとして登録し、各データベース・サーバー・ノードに対応するキータブ・ファイルを抽出する必要があります。次に、クライアントのログインを許可するには、ユーザー・プリンシパルをKDCに追加し、プリンシパルと同じ名前のマップ済ユーザー・アカウントをデータベースに作成する必要があります。最後に、CLIまたはkvclientドライバを介してログインを実行できます。

新規インストールへのKerberosの追加

Oracle NoSQL DatabaseをKerberos認証を使用してインストールするには、次のようにします。

ノート:

次の例では、KDC上に管理/管理プリンシパルを構成し、そのキータブ(kadm5.keytab)をOracle NoSQL Databaseストレージ・ノードに配布したことを前提としています。詳細は、Kerberos管理ユーティリティの構成を参照してください。

  1. Kerberosセキュリティを使用して基本ストア構成を設定するには、-store-security configureフラグおよび-external-auth kerberosフラグを指定してmakebootconfigユーティリティを実行します。

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

    Enter a password for the Java KeyStore: 
  3. ストアのパスワードを入力してから、検証のために再入力します。この場合、Oracle Walletが使用されます。Oracle WalletおよびKerberosのサポートは、Oracle NoSQL Database EEバージョンでのみ使用できます。

    Enter a password for the Java KeyStore: ***********
    Re-enter the KeyStore password for verification: *********** 
  4. この場合、-kadmin-keytabは、前に配布した管理/管理キータブ・ファイルを指します。認証されると、構成ツールによって、いくつかのセキュリティ関連ファイルが自動生成されます。

    Login Kerberos admin via 
    keytab /kerberos/kadm5.keytab
    Adding principal oraclenosql/node01.example.com@EXAMPLE.COM
    Authenticating as principal admin/admin with
    keytab /kerberos/kadm5.keytab
    Extracting keytab KVROOT/security/store.keytab
    Created files:
    security/security.xml
    security/store.keys
    security/store.trust
    security/store.wallet/cwallet.sso 
    security/store.keytab
    security/client.security 
    security/client.trust 
  5. マルチホスト・ストア環境では、securityディレクトリおよびここに含まれるすべてのファイルを、最初のノードから、ストレージ・ノードをホストする各サーバーにコピーし、内部クラスタ認証を設定する必要があります。たとえば、次のコマンドでは、現在のノード(node01)で別のノードを表示したりアクセスできることを前提としています。

    cp -R node01/KVROOT/security node02/KVROOT/
    cp -R node01/KVROOT/security node03/KVROOT/

    ノート:

    現在のノードで別のノードのファイルが表示されない場合にコピーを実行するには、セキュア・コピー・プロトコル(SCP)などのリモート・コピー・コマンドの使用が必要になる場合があります。

  6. 他の2つのノードでmakebootconfigを実行します。

    • Kerberosを追加し、個別のサービス・プリンシパルとキータブを作成します。

      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 6000 \ 
      -host node02 -harange 6010,6020 \
      -capacity 3 \
      -store-security configure \
      -external-auth kerberos \
      -instance-name node02.example.com \
      -kadmin-keytab /kerberos/kadm5.keytab \
      -admin-principal admin/admin 
      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 7000 \
      -host node03 -harange 7010,7020 \
      -capacity 3 \
      -store-security configure \
      -external-auth kerberos \
      -instance-name node03.example.com \
      -kadmin-keytab /kerberos/kadm5.keytab \
      -admin-principal admin/admin

      ノート:

      node2とnode3のサービス・プリンシパル名は、同じサービス名oraclenosqlを使用していますが、インスタンス名が異なります。これらのキータブ・ファイルは異なり、プリンシパルoraclenosql/node2.example.comおよびoraclenosql/node3.example.comのキーがそれぞれ含まれています。

    • ストアがすべてのノードで同じサービス・プリンシパルを使用している場合にKerberos認証を有効にするには、次のようにします。

      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 6000 \
      -host node02 -harange 6010,6020 \
      -capacity 3 \
      -store-security enable
      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 6000 \
      -host node03 -harange 6010,6020 \
      -capacity 3 \
      -store-security enable

      ノート:

      ステップ1で作成されたサービス・プリンシパルはoraclenosql/node01.example.comです。インスタンス名は、nosqlのような、より一般的なものに置き換えることができます。前述の例では、node02とnode03はすべて、新しいファイルを個別に作成することなく、同じサービス・プリンシパルとキータブ・ファイルを使用しています。

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

    ノート:

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

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

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

  8. 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 
  9. configure -nameコマンドを使用すると、構成するKVStoreの名前を指定できます。

    kv-> configure -name mystore
    Store configured: mystore 
  10. KDCでユーザー・プリンシパルを登録します。これを行うには、kadminまたはkadmin.localを使用します。
    kadmin.local: addprinc  krbuser@EXAMPLE.COM
    Enter password for principal: "krbuser@EXAMPLE.COM": ***********
    Re-enter password for principal: "krbuser@EXAMPLE.COM": ********** 
  11. KDCでユーザー・プリンシパルを登録した後、そのユーザーをOracle NoSQL Databaseで作成します。ユーザー名は、KDCでの完全なプリンシパル名と一致する必要があります(レルム名を含む)。この場合、ユーザーkrbuserが定義されます。

    kv-> execute 'CREATE USER "krbuser@EXAMPLE.COM" IDENTIFIED EXTERNALLY' 

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

  12. この時点では、krbuserとしてストアに接続できます。ログインするには、資格証明キャッシュまたはキータブ・ファイルを使用するか、プリンシパル・パスワードを入力します。

    この例では、キータブ・ファイルが使用されます。これを行うには、まず、kadmin.localを使用して、KDCホスト上のプリンシパルkrbuser@EXAMPLE.COMのキータブを抽出します。

    kadmin.local:  ktadd -k /tmp/mykeytab  krbuser@EXAMPLE.COM
    Entry for principal krbuser@EXAMPLE.COM added to 
    keytab WRFILE:/tmp/mykeytab. 
  13. krbuser@EXAMPLE.COMプリンシパルを使用してOracle NoSQL Databaseに自動的にログインするクライアント・マシンに、キータブ・ファイルをコピーします。

  14. Kerberosセキュリティ・プロパティ(キータブ・ファイルの場所を含む)を、セキュリティ・ファイルに指定するか、またはKVStoreConfigクラスを使用して、各クライアントで設定します。

    この例では、セキュリティ・ファイル(mylogin.txt)が使用されます。ログインするには、oracle.kv.securityプロパティを使用して、ファイルの場所を指定します。次に例を示します。

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

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

    oracle.kv.auth.kerberos.keytab = kerberos/mykeytab
    oracle.kv.auth.username = krbuser@EXAMPLE.COM 
    oracle.kv.auth.external.mechanism=kerberos
    oracle.kv.auth.kerberos.services=
                     node01:oraclenosql/node01.example.com@EXAMPLE.COM
    oracle.kv.auth.kerberos.mutualAuth=false 

    この場合、Oracle NoSQL Databaseではキータブを読み取り、パスワードを必要とせずにKerberosにログインします。

    Kerberosセキュリティ・プロパティの詳細は、Kerberosセキュリティ・プロパティを参照してください。

既存のセキュア・インストールへのKerberosの追加

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

ノート:

次の例では、KDC上に管理/管理プリンシパルを構成し、そのキータブ(kadm5.keytab)をOracle NoSQL Databaseストレージ・ノードに配布したことを前提としています。詳細は、Kerberos管理ユーティリティの構成を参照してください。

ノート:

Kerberosインストール/キータブが強力な暗号化タイプ(256ビットのキーによるAESなど)を使用するように構成される場合は、JCE Unlimited Strength Jurisdiction Policy Filesを取得して、JDK/JREにインストールする必要があります。これらのファイルはインストール内にすでに存在している場合があることに注意してください。その場合は、更新する必要があります。

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

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar stop \
    -root KVROOT
  2. config add-kerberosコマンドを使用して、Kerberos認証を追加します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig \
    config add-kerberos -root KVROOT \
    -secdir security \
    -admin-principal admin/admin
    
    Adding principal oraclenosql@EXAMPLE.COM
    Password for admin/admin: *******
    Created files:
       security/store.keytab
    Updated Kerberos configuration 

    ノート:

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

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

    ノート:

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

    nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start -root KVROOT&
  4. 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通信プロパティ」を参照してください。

  5. KDCでユーザー・プリンシパルを登録します。これを行うには、kadminまたはkadmin.localを使用します。
    kadmin.local: addprinc  krbuser@EXAMPLE.COM
    Enter password for principal: "krbuser@EXAMPLE.COM": ***********
    Re-enter password for principal: "krbuser@EXAMPLE.COM": ********** 
  6. KDCでユーザー・プリンシパルを登録した後、そのユーザーをOracle NoSQL Databaseで作成します。ユーザー名は、KDCでの完全なプリンシパル名と一致する必要があります(レルム名を含む)。この場合、ユーザーkrbuserが定義されます。

    kv-> execute 'CREATE USER "krbuser@EXAMPLE.COM" IDENTIFIED EXTERNALLY' 

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

  7. この時点では、krbuserとしてストアに接続できます。ログインするには、資格証明キャッシュまたはキータブ・ファイルを使用するか、プリンシパル・パスワードを入力します。

    この例では、キータブ・ファイルが使用されます。これを行うには、まず、kadmin.localを使用して、KDCホスト上のプリンシパルkrbuser@EXAMPLE.COMのキータブを抽出します。

    kadmin.local:  ktadd -k /tmp/mykeytab  krbuser@EXAMPLE.COM
    Entry for principal krbuser@EXAMPLE.COM added to 
    keytab WRFILE:/tmp/mykeytab. 
  8. krbuser@EXAMPLE.COMプリンシパルを使用してOracle NoSQL Databaseに自動的にログインする任意のクライアント・マシンに、キータブ・ファイルをコピーします。

  9. Kerberosセキュリティ・プロパティ(キータブ・ファイルの場所を含む)を、セキュリティ・ファイルに指定するか、またはKVStoreConfigクラスを使用して、各クライアントで設定します。

    この例では、セキュリティ・ファイル(mylogin.txt)が使用されます。ログインするには、oracle.kv.securityプロパティを使用して、ファイルの場所を指定します。次に例を示します。

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

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

    oracle.kv.auth.kerberos.keytab = kerberos/mykeytab
    oracle.kv.auth.username = krbuser@EXAMPLE.COM 
    oracle.kv.auth.external.mechanism=kerberos
    oracle.kv.auth.kerberos.services=
                     node01:oraclenosql/node01.example.com@EXAMPLE.COM
    oracle.kv.auth.kerberos.mutualAuth=false 

    この場合、Oracle NoSQL Databaseではキータブを読み取り、パスワードを必要とせずにKerberosにログインします。

    Kerberosセキュリティ・プロパティの詳細は、Kerberosセキュリティ・プロパティを参照してください。