KerberosおよびMicrosoft Active Directory (AD)でのOracle NoSQL Databaseの使用方法
KerberosおよびMicrosoft Active DirectoryでOracle NoSQL Databaseを使用するには、次のようにします。
-
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」で示されている有効期間が正しいかどうかも確認します。 -
サービス・インスタンス・アカウントを作成し、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テストを実行し(次に説明します)、正しく構成されていることを確認します。
-
-
ユーザー・アカウントがサービス・プリンシパルのサービス・チケットを取得できるかどうか、およびサービス・キータブが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から正常にチケットを取得できません。
-
-
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
-
-
マルチノード環境でサービス・プリンシパルを管理します。
-
マルチノード環境では、すべてのノードに対して単一のサービス・プリンシパル
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
-
-
各ノードでストレージ・ノード・エージェント(SNA)を起動します。
注意:
SNAを開始する前に、環境変数
MALLOC_ARENA_MAX
を1
に設定します。MALLOC_ARENA_MAX
を1
に設定すると、メモリー使用量が指定されたヒープ・サイズに制限されます。nohup java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar start -root KVROOT&
セキュアな構成の新規作成されたストアの初回起動時には、アクセスを認証するための使用可能なユーザー定義がありません。不正アクセスのリスクを抑えるために、管理者によって許可されるのは実行中のホストからの接続のみとなります。このセキュリティ手段は、不正アクセスに対する完全な予防策にはなりません。KVStoreが動作するマシンへのローカル・アクセスを可能にしないことが重要です。また、完全認証なしで管理にアクセスできる期間を最小限にするために、次のステップを実行します。セキュアなストアの保守の詳細は、「構成の保護ガイドライン」を参照してください。
-
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
-
configure -name
コマンドを使用して、構成するKVStoreの名前を指定し、ストア・デプロイメントを完了します。詳細は、Oracle NoSQL Database管理者ガイドを参照してください。kv-> configure -name mystore Store configured: mystore ...
-
Microsoft Active Directoryにユーザー・アカウントを作成します。この例では、Active Directoryに
krbuser
が作成されます。 -
Oracle NoSQL Databaseでマッピング・ユーザーを作成します。ユーザー名は、KDCでの完全なプリンシパル名と一致する必要があります(レルム名を含む)。この場合、ユーザーkrbuserが定義されます。
kv-> execute 'CREATE USER "krbuser@TEST08.LOCAL" IDENTIFIED EXTERNALLY'
ユーザーの作成および管理の詳細は、「ユーザー管理」を参照してください。
-
この時点では、krbuserとしてストアに接続できます。ログインするには、資格証明キャッシュまたはキータブ・ファイルを使用するか、プリンシパル・パスワードを入力します。
-
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セキュリティ・プロパティを参照してください。