KerberosおよびMicrosoft Active Directory (AD)でのOracle NoSQL Databaseの使用方法

KerberosおよびMicrosoft Active DirectoryでOracle NoSQL Databaseを使用するには、次のようにします。

  1. ADでKerberos構成krb5.confを更新します。

    Microsoft社のガイド(ここを参照)では、UNIXホスト上でKerberos構成ファイルを更新する方法の詳細について、ステップ3のEdit the file (/etc/krb5.conf) to refer to the Windows 2000 domain controller as the Kerberos KDCで詳しく説明しています。Kerberos構成ファイルを変更した後、ADのユーザー・アカウントを使用してkinitを実行し、構成が正しいことを確認します。

    たとえば、ADのドメインTEST08上にユーザー・アカウントkrbuser08があり、KDCレルム名がTEST08.LOCALであるとします。

    $ kinit krbuser08@TEST08.LOCAL
    Password for krbuser08@TEST08.LOCAL

    パスワードを指定すると、コマンドはエラーなしで値を返します。エラーは、構成に問題がある可能性があることを示します。kinitコマンドが正常に実行された場合は、klistを実行して、チケット・キャッシュにkrbuser08のTGTが含まれていることを確認します。

    $ klist
    Ticket cache: FILE:/tmp/krb5cc_500
    Default principal: krbuser08@TEST08.LOCAL
    
    Valid starting     Expires            Service principal
    08/12/16 11:45:03  08/12/16 21:45:11 krbtgt/TEST08.LOCAL@TEST08.LOCAL
           renew until 08/19/16 11:45:03

    klistにより、チケット・キャッシュ内のチケットが表示されます。このステップを実行し、「Default Principal」で記述されているプリンシパルkrbuser08を使用して、チケット発行チケットが正しく取得されているかどうかを確認します。「Service Principal」により各チケットが記述され、チケット発行チケットにはプライマリkrbtgtが含まれ、インスタンス名はKDCレルム名となっています。また、「Valid Starting」および「Expires」で示されている有効期間が正しいかどうかも確認します。

  2. サービス・インスタンス・アカウントを作成し、ADでキータブを生成します。

    Microsoft社のガイド(https://technet.microsoft.com/en-us/library/bb742433.aspx#EEAAを参照)では、Active Directoryの使用時にUNIXシステムで実行中のサービスをサポートする方法の詳細について詳しく説明しています。このドキュメントのステップに従って、Oracle NoSQL Database用のサービス・プリンシパルおよびキータブ・ファイルを生成します。すべてのホストで同じキータブ・ファイルを使用する予定の場合は、Microsoft社のガイドのステップ3を実行して、キータブ・ファイルをマージする必要はありません。

    たとえば、インスタンス名をnosqlに設定し、すべてのノードでこのキータブを使用できます。

    • Active Directory管理ツールを使用して、oraclenosqlという名前のユーザー・アカウントを作成します。

      ユーザー作成インタフェースで、このアカウントがサポートできるKerberos暗号化タイプを選択できます。ユーザー・アカウントは、デフォルトとしてデータ暗号化規格(DES)暗号化を使用できます。このアカウントについてその他の暗号化タイプを有効にするには、「Properties」インタフェースで、またはktpassユーティリティを使用して、手動で構成する必要があります。「User must change password at next logon」設定を無効にする必要があることに注意してください。

    • Windowsサーバーのktpassツールを使用して、IDマッピングを設定します。

      c:\ktpass -princ oraclenosql/nosql@TEST08.LOCAL 
      -mapuser oraclenosql -pass "*"-cypto DES-CBC-MD5 -ptype 
      KRB5_NT_PRINCIPAL -out c:\store.keytab

      DES復号化タイプを使用する場合、default_tkt_enctypesおよびdefault_tgs_enctypesだけでなく、allow_weak_crypto = trueもUNIXホストのkrb5.confファイルに追加することが必要になる場合があります。Oracle NoSQL Databaseのキータブのデフォルト名はstore.keytabであり、サービス・プリンシパルのデフォルトのサービス名はoraclenosqlです。

    • Oracle NoSQL Databaseで使用するUNIXホスト、キータブ・ファイルをコピーします。

      通常、セキュア・コピー・プロトコル(scp)またはPuTTYセキュア・コピー(PSCP)を使用してこのファイルをセキュアに転送するか、WindowsサーバーおよびUNIXホストが共有するFTPサーバーに、このファイルをアップロードします。サービス・プリンシパルとキータブを作成した後、UNIXホスト上でkinitテストを実行し(次に説明します)、正しく構成されていることを確認します。

  3. ユーザー・アカウントがサービス・プリンシパルのサービス・チケットを取得できるかどうか、およびサービス・キータブがkinitの実行により正しく生成されるかどうかをテストします。

    • ユーザー・アカウントがサービス・プリンシパルoraclenosqlのサービス・チケットを取得できるかどうかをテストします。

      $ kinit -S oraclenosql/nosql@TEST08.LOCAL krbuser08@TEST08.LOCAL
      Password for krbuser08@TEST08.LOCAL:
      $ klist
      Ticket cache: FILE:/tmp/krb5cc_500
      Default principal: krbuser08@TEST08.LOCAL
      
      Valid starting     Expires            Service principal
      08/12/16 11:50:55  08/12/16 21:51:00  oraclenosql/nosql@TEST08.LOCAL
             renew until 08/19/16 11:50:55

      チケット・キャッシュにoraclenosql/nosqlのサービス・チケットが含まれていない場合、または最初のコマンドでエラーが報告された場合は、アカウントが正しく作成されているかどうかを確認します。

    • kinit oraclenosqlを実行して、サービス・キータブが正しく生成されたかどうかをテストします。

      $ kinit -k -t store.keytab oraclenosql/nosql@TEST08.LOCAL
      $ klist
      Ticket cache: FILE:/tmp/krb5cc_500
      Default principal: oraclenosql/nosql@TEST08.LOCAL
      
      Valid starting     Expires            Service principal
      08/12/16 11:51:44  08/12/16 21:51:45 krbtgt/TEST08.LOCAL@TEST08.LOCAL
             renew until 08/19/16 11:51:44

      以前のテストと同様、Oracle NoSQL Databaseの構成を試行する前に、すべてのエラーを修正する必要があります。kinitユーティリティの一部のバージョンでは、Active Directoryでサービス・アカウントoraclenosqlに対して構成した暗号化タイプを使用してdefault_tkt_enctypesおよびdefault_tgs_enctypesを明示的に指定することが必要になる場合があります。そうしないと、kinitは、ADから正常にチケットを取得できません。

  4. Oracle NoSQL Databaseの構成を開始します。

    Oracle NoSQL DatabaseでUNIXのkadminツールは、ユーザーがサービス・プリンシパルを作成し、キータブ・ファイルを生成する場合に役立ちます。ただし、ADにはリモート管理ユーティリティ・サポートがないため、AD Kerberos環境では、このステップをスキップする必要があります。

    4.2より前のOracle NoSQL Databaseリリースでは、-kadmin-path-admin-principal makebootconfigの両方のコマンドライン・オプションの値として、noneを指定する必要があります。

    java -Xmx64m -Xms64m \
    -jar $KVHOME/lib/kvstore.jar makebootconfig -root kvroot \
    -port 5000 \
    -host node01.example.com -harange 5010,5020 \
    -store-security configure -kspwd password \
    -external-auth kerberos \
    -kadmin-path none \
    -admin-principal none \
    -instance-name nosql
    Adding principal oraclenosql/nosql
    IO error encountered: Cannot run program "none": error=13,
    Permission denied
    Created files
       KVROOT/security/client.security
       KVROOT/security/client.trust
       KVROOT/security/security.xml
       KVROOT/security/store.wallet/cwallet.sso
       KVROOT/security/store.keys
       KVROOT/security/store.trust

    正しいkadminパスが指定されていないため、この例ではIOエラーを無視できます。

    Oracle NoSQL Database 4.2以降のリリースでは、-kadmin-pathフラグの値としてnoneを指定することのみが必要です。

    java -Xmx64m -Xms64m \
    -jar $KVHOME/lib/kvstore.jar makebootconfig -root kvroot \
    -port 5000 \
    -host node01.example.com -harange 5010,5020 \
    -store-security configure -kspwd password \
    -external-auth kerberos \
    -kadmin-path none \
    -instance-name nosql

    kadminパスがNONEとして指定されているため、この例では、データベース・サーバーのキータブは作成されません。キータブを生成し、セキュリティ構成ディレクトリに手動でコピーする必要があります。

    Created files
       KVROOT/security/client.security
       KVROOT/security/client.trust
       KVROOT/security/security.xml
       KVROOT/security/store.wallet/cwallet.sso
       KVROOT/security/store.keys
       KVROOT/security/store.trust

    セキュリティ・ディレクトリの作成後、Kerberosパラメータが想定どおりに構成されていることを確認することは有益です。

    kvroot/securityのsecurity.xmlを確認し、次のパラメータを探します。

    • krbInstanceName

    • krbRealmName

    Oracle NoSQL Database 4.2以降のリリースでは、securityconfigツールを使用してパラメータを表示できます。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar securityconfig \
    config show -secdir kvroot/security
    ...
    krbInstanceName=nosql
    krbRealmName=TEST08.LOCAL
  5. マルチノード環境でサービス・プリンシパルを管理します。

    • マルチノード環境では、すべてのノードに対して単一のサービス・プリンシパルoraclenosql/nosqlを使用する場合、最初のセキュリティ・ディレクトリのコンテンツを他のノードに単純にコピーできます。たとえば、次のコマンドでは、現在のノード(node01)で別のノードを表示したりアクセスできることを前提としています。

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

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

      他の2つのノードでmakebootconfigを実行し、Kerberos認証を有効にします。

      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 5000 \
      -host node02 -harange 5010,5020 \
      -store-security enable
      
      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 5000 \
      -host node03 -harange 5010,5020 \
      -store-security enable

      注意:

      node02とnode03のサービス・プリンシパルは、oraclenosql/nosql@TEST08.LOCALとして構成されます。また、ステップ2で生成した同じキータブ・ファイルが使用されます。

    • 各ノードに個別のサービス・プリンシパルを設定するには、ステップ2を実行してADにサービス・アカウントを作成し、ノードごとに新しいキータブを生成します。たとえば、各ノードは、サービス・プリンシパルとそれに対応するキータブ・ファイルのインスタンス名としてホスト名を使用します。

      oracelnosql/node01@TEST08.LOCAL
      oracelnosql/node02@TEST08.LOCAL
      oracelnosql/node03@TEST08.LOCAL

      node01で作成したセキュリティ・ディレクトリを他のノードにコピーします。たとえば、次のコマンドでは、各ノードには、現在のノード(host01)からsshを使用してアクセスできると仮定します。

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

      注意:

      現在のノードで別のノードのファイルが表示されない場合は、scpなどのリモート・コピー・コマンドを使用して、これらのファイルをコピーすることが必要になる場合があります。

      ステップ2で生成されたnode2およびnode3のキータブ・ファイルを、セキュリティ構成ディレクトリのファイルと置き換えます。次に例を示します。

      cp store.keytab node02/KVROOT/security
      cp store.keytab node03/KVROOT/security

      注意:

      ステップ2で生成したすべてのキータブ・ファイルの名前は、デフォルトでstore.keytabになります。各ノードに適切なキータブ・ファイルが指定されていることを確認してください。klistツールを使用して各ノードのキータブ・ファイルをチェックし、ノードのサービス・プリンシパルの適切なキーが含まれていることを確認します。

      node02およびnode03でsecurityconfigツールを実行し、セキュリティ構成のインスタンス名を変更します。

      security -> config update -secdir KVROOT/security \
      -param krbInstanceName=node02
      
      security -> config update -secdir KVROOT/security \
      -param krbInstanceName=node03

      他の2つのノードでmakebootconfigを実行し、Kerberos認証を有効にします。

      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 5000 \
      -host node02 -harange 5010,5020 \
      -store-security enable
      
      java -Xmx64m -Xms64m \
      -jar KVHOME/lib/kvstore.jar makebootconfig \
      -root KVROOT -port 5000 \
      -host node03 -harange 5010,5020 \
      -store-security enable
  6. 各ノードでストレージ・ノード・エージェント(SNA)を起動します。

    注意:

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

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

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

  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
  8. configure -nameコマンドを使用して、構成するKVStoreの名前を指定し、ストア・デプロイメントを完了します。詳細は、Oracle NoSQL Database管理者ガイドを参照してください。

    kv-> configure -name mystore
    Store configured: mystore
    ... 
  9. Microsoft Active Directoryにユーザー・アカウントを作成します。この例では、Active Directoryにkrbuserが作成されます。

  10. Oracle NoSQL Databaseでマッピング・ユーザーを作成します。ユーザー名は、KDCでの完全なプリンシパル名と一致する必要があります(レルム名を含む)。この場合、ユーザーkrbuserが定義されます。

    kv-> execute 'CREATE USER "krbuser@TEST08.LOCAL" 
    IDENTIFIED EXTERNALLY' 

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

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

  12. 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
    krbuser@TEST08.LOCAL's kerberos password:
    Logged in admin as krbuser@TEST08.LOCAL
    kv-> 

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

    oracle.kv.auth.username = krbuser@TEST08.LOCAL 
    oracle.kv.auth.external.mechanism=kerberos
    oracle.kv.auth.kerberos.services=node01:oraclenosql/nosql@TEST08.LOCAL
    oracle.kv.transport=ssl
    oracle.kv.ssl.trustStore=KVROOT/security/client.trust
    oracle.kv.ssl.protocols=TLSv1.2,TLSv1.1,TLSv1
    oracle.kv.ssl.hostnameVerifier=dnmatch(CN\=NoSQL)

    この例では、ストア・ノードで単一のサービス・プリンシパルoraclenosql/nosqlが使用されています。キータブまたは資格証明キャッシュを指定しない場合、管理CLIにより、プリンシパル・パスワードの入力を求められます。

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