第2章 Apache Karaf コンテナーのセキュリティー保護
概要
Apache Karaf コンテナーは、JAAS を使用してセキュリティー保護されています。JAAS レルムを定義することで、ユーザー資格情報の取得に使用されるメカニズムを設定できます。デフォルトのロールを変更することで、コンテナーの管理インターフェイスへのアクセスを調整することもできます。
2.1. JAAS 認証 リンクのコピーリンクがクリップボードにコピーされました!
概要
Java Authentication and Authorization Service (JAAS) は、Java アプリケーションに認証を実装するための一般的なフレームワークを提供します。認証の実装はモジュール式であり、個々の JAAS モジュール (またはプラグイン) が認証の実装を提供します。
JAAS の背景情報については、JAAS リファレンスガイド を参照してください。
2.1.1. デフォルトの JAAS レルム リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Karaf コンテナー内のデフォルト JAAS レルムのユーザーデータを管理する方法について説明します。
デフォルトの JAAS レルム リンクのコピーリンクがクリップボードにコピーされました!
Karaf コンテナーには事前定義された JAAS レルムである karaf
レルムがあります。これはデフォルトで、コンテナーのすべての側面をセキュアにするために使用されます。
アプリケーションを JAAS と統合する方法 リンクのコピーリンクがクリップボードにコピーされました!
独自のアプリケーションで karaf
レルムを使用できます。karaf
を、使用する JAAS レルムの名前として設定するだけです。
デフォルトの JAAS ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
Karaf コンテナーを初めて起動する場合、karaf
デフォルトレルムを使用するように設定されています。このデフォルト設定では、karaf
レルムは 5 つの JAAS ログインモジュールをデプロイし、同時に有効にします。デプロイされたログインモジュールを表示するには、以下のように jaas:realms
コンソールコマンドを入力します。
ユーザーがログインしようとすると、リスト順に 5 つのモジュールで認証されます。各モジュールのフラグ値は、認証が成功するためにモジュールが正常に完了する必要があるかどうかを指定します。フラグ値は、モジュールの完了後に認証プロセスを停止するか、または次のモジュールに進むかも指定します。
Optional
フラグは、5 つの認証モジュールすべてに設定されます。Optional
フラグ設定により、現在のモジュールが正常に完了するかどうかにかかわらず、認証プロセスが常に 1 つのモジュールから次のモジュールに渡されます。Karaf JAAS レルムのフラグ値はハードコーディングされており、変更できません。フラグの詳細については、表2.1「JAAS モジュールを定義するためのフラグ」 を参照してください。
Karaf コンテナーでは、プロパティーログインモジュールと公開鍵ログインモジュールの 両方 が有効になっています。JAAS はユーザーを認証するときに、まずプロパティーログインモジュールを使用してユーザーを認証しようとします。それが失敗すると、公開鍵ログインモジュールを使用してユーザーの認証を試みます。そのモジュールも失敗すると、エラーが発生します。
2.1.1.1. 認証監査ロギングモジュール リンクのコピーリンクがクリップボードにコピーされました!
Karaf コンテナーのデフォルトモジュールのリスト内では、最初の 2 つのモジュールのみがユーザー ID の確認に使用されます。残りのモジュールは、成功したログイン試行と失敗したログイン試行の監査証跡をログに記録するために使用されます。デフォルトのレルムには、次の監査ロギングモジュールが含まれています。
- org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
-
このモジュールは、
etc/org.ops4j.pax.logging.cfg
ファイル内の Pax ロギングインフラストラクチャーに設定されたロガーを使用して、認証の試行に関する情報を記録します。詳細については、JAAS Log Audit Login Module を参照してください。 - org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
- このモジュールは、認証の試行に関する情報を、指定したファイルに直接記録します。ロギングインフラストラクチャーは使用しません。詳細については、JAAS File Audit Login Module を参照してください。
- org.apache.karaf.jaas.modules.audit.EventAdminAuditLoginModule
- このモジュールは、OSGi Event Admin サービスを使用して認証の試行を追跡します。
プロパティーログインモジュールでのユーザーの設定 リンクのコピーリンクがクリップボードにコピーされました!
プロパティーログインモジュールは、ユーザー名/パスワードのクレデンシャルをフラットファイル形式で保存するために使用されます。プロパティーログインモジュールで新規ユーザーを作成するには、テキストエディターを使用して InstallDir/etc/users.properties
ファイルを開き、以下の構文の行を追加します。
Username=Password[,UserGroup|Role][,UserGroup|Role]...
Username=Password[,UserGroup|Role][,UserGroup|Role]...
たとえば、パスワード topsecret
およびロール admin
で jdoe
ユーザーを作成するには、以下のようなエントリーを作成します。
jdoe=topsecret,admin
jdoe=topsecret,admin
admin
ロールは、jdoe
ユーザーに完全な管理権限を付与します。
プロパティーログインモジュールでのユーザーグループの設定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーに直接ロールを割り当てる代わりに (またはそれに加えて)、プロパティーログインモジュールの user groups にユーザーを追加するオプションもあります。プロパティーログインモジュールでユーザーグループを作成するには、テキストエディターを使用して InstallDir/etc/users.properties
ファイルを開き、以下の構文で行を追加します。
_g_\:GroupName=Role1,Role2,...
_g_\:GroupName=Role1,Role2,...
たとえば、ロール group
および admin
で admingroup
ユーザーグループを作成するには、以下のようなエントリーを作成します。
_g_\:admingroup=group,admin
_g_\:admingroup=group,admin
以下のユーザーエントリーを作成して、majorclanger
ユーザーを admingroup
に追加します。
majorclanger=secretpass,_g_:admingroup
majorclanger=secretpass,_g_:admingroup
公開鍵ログインモジュールの設定 リンクのコピーリンクがクリップボードにコピーされました!
公開鍵ログインモジュールは、SSH 公開鍵のクレデンシャルをフラットファイル形式で保存するために使用されます。公開鍵ログインモジュールで新規ユーザーを作成するには、テキストエディターを使用して InstallDir/etc/keys.properties
ファイルを開き、以下の構文の行を追加します。
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
たとえば、以下のエントリーを 1 行で InstallDir/etc/keys.properties
ファイルに追加することで、admin
ロールで jdoe
ユーザーを作成できます。
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
ここで、id_rsa.pub
ファイルの内容をすべて挿入しないでください。公開鍵自体を表す記号のブロックだけを挿入します。
公開鍵ログインモジュールでのユーザーグループの設定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザーに直接ロールを割り当てる代わりに (またはそれに加えて)、公開鍵ログインモジュールの user groups にユーザーを追加するオプションもあります。公開鍵ログインモジュールでユーザーグループを作成するには、テキストエディターを使用して InstallDir/etc/keys.properties
ファイルを開き、以下の構文の行を追加します。
_g_\:GroupName=Role1,Role2,...
_g_\:GroupName=Role1,Role2,...
たとえば、ロール group
および admin
で admingroup
ユーザーグループを作成するには、以下のようなエントリーを作成します。
_g_\:admingroup=group,admin
_g_\:admingroup=group,admin
以下のユーザーエントリーを作成して、jdoe
ユーザーを admingroup
に追加します。
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,_g_:admingroup
保存されたパスワードの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、パスワードはプレインテキスト形式で InstallDir/etc/users.properties
ファイルに保存されます。このファイルでパスワードを保護するには、管理者のみが読み取ることができるように users.properties
ファイルのファイル権限を設定する必要があります。追加の保護を提供するために、オプションで、メッセージダイジェストアルゴリズムを使用して保存されたパスワードを暗号化できます。
パスワード暗号化機能を有効にするには、InstallDir/etc/org.apache.karaf.jaas.cfg
ファイルを編集して、コメントで説明されているように暗号化プロパティーを設定します。たとえば、次の設定では、MD5 メッセージダイジェストアルゴリズムを使用した基本的な暗号化が有効になります。
org.apache.karaf.jaas.cfg
ファイルの暗号化設定は、Karaf コンテナーのデフォルトの karaf
レルムのみに適用されます。カスタムレルムには影響しません。
パスワード暗号化の詳細については、「保存されたパスワードの暗号化」 を参照してください。
デフォルトレルムのオーバーライド リンクのコピーリンクがクリップボードにコピーされました!
JAAS レルムをカスタマイズする場合、最も便利なアプローチは、より高いランクの karaf
レルムを定義してデフォルトの karaf
レルムをオーバーライドすることです。これにより、すべての Red Hat Fuse セキュリティーコンポーネントがカスタムレルムを使用するように切り替わります。カスタム JAAS レルムを定義およびデプロイする方法の詳細については、「JAAS レルムの定義」 を参照してください。
2.1.2. JAAS レルムの定義 リンクのコピーリンクがクリップボードにコピーされました!
OSGi コンテナーで JAAS レルムを定義する場合、従来の JAAS ログイン設定 ファイルに定義を置くことは できません。代わりに、OSGi コンテナーは、Blueprint 設定ファイルで JAAS レルムを定義するために特別な jaas:config
要素を使用します。このように定義された JAAS レルムは、コンテナーにデプロイされた すべて のアプリケーションバンドルで利用できるようになり、コンテナー全体で JAAS セキュリティーインフラストラクチャーを共有できるようになります。
Namespace リンクのコピーリンクがクリップボードにコピーされました!
jaas:config
要素は、http://karaf.apache.org/xmlns/jaas/v1.0.0
名前空間で定義されています。JAAS レルムを定義するときは、例2.1「JAAS ブループリント名前空間」 に示された行を含める必要があります。
例2.1 JAAS ブループリント名前空間
xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0"
JAAS レルムの設定 リンクのコピーリンクがクリップボードにコピーされました!
jaas:config
要素の構文は 例2.2「ブループリント XML での JAAS レルムの定義」 に示されています。
例2.2 ブループリント XML での JAAS レルムの定義
要素は次のように使用されます。
jaas:config
JAAS レルムを定義します。この要素は以下の属性を持ちます。
-
name
— JAAS レルムの名前を指定します。 -
rank
— JAAS レルム間で命名の競合を解決するためのオプションのランクを指定します。2 つ以上の JAAS レルムが同じ名前で登録されている場合、OSGi コンテナーは常に最高ランクのレルムインスタンスを選択します。デフォルトのレルムkaraf
を上書きする場合は、以前にインストールされたkaraf
レルムをすべてオーバーライドするように、rank
を100
以上に設定する必要があります。
-
jaas:module
現在のレルムで JAAS ログインモジュールを定義します。
jaas:module
には以下の属性があります。-
className
— JAAS ログインモジュールの完全修飾クラス名。指定されたクラスは、バンドルクラ出力ダーから利用可能である必要があります。 flags
— ログイン操作の成功または失敗時に何が起こるかを決定します。表2.1「JAAS モジュールを定義するためのフラグ」 では、有効な値について説明しています。Expand 表2.1 JAAS モジュールを定義するためのフラグ 値 説明 required
このログインモジュールの認証は成功する必要があります。成功または失敗に関係なく、常にこのエントリーの次のログインモジュールに進みます。
requisite
このログインモジュールの認証は成功する必要があります。成功した場合は、次のログインモジュールに進みます。失敗した場合は、残りのログインモジュールを処理せずにすぐに戻ります。
sufficient
このログインモジュールの認証は成功する必要はありません。成功した場合は、残りのログインモジュールを処理せずにすぐに戻ります。失敗した場合は、次のログインモジュールに進みます。
任意
このログインモジュールの認証は成功する必要はありません。成功または失敗に関係なく、常にこのエントリーの次のログインモジュールに進みます。
jaas:module
要素の内容は、JAAS ログインモジュールインスタンスの初期化に使用されるプロパティー設定のスペース区切りリストです。特定のプロパティーは JAAS ログインモジュールによって決定され、適切な形式にする必要があります。注記レルムに複数のログインモジュールを定義できます。
-
標準 JAAS ログインプロパティーから XML への変換 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Fuse は、標準の Java ログイン設定ファイルと同じプロパティーを使用しますが、Red Hat Fuse では少し異なる方法で指定する必要があります。JAAS レルムの定義に対する Red Hat Fuse のアプローチと標準の Java ログイン設定ファイルアプローチを比較するには、例2.3「標準 JAAS プロパティー」 に示すログイン設定を変換する方法を考慮します。これは、Red Hat Fuse プロパティーログインモジュールクラス PropertiesLoginModule
を使用して PropertiesLogin
レルムを定義します。
例2.3 標準 JAAS プロパティー
PropertiesLogin { org.apache.activemq.jaas.PropertiesLoginModule required org.apache.activemq.jaas.properties.user="users.properties" org.apache.activemq.jaas.properties.group="groups.properties"; };
PropertiesLogin {
org.apache.activemq.jaas.PropertiesLoginModule required
org.apache.activemq.jaas.properties.user="users.properties"
org.apache.activemq.jaas.properties.group="groups.properties";
};
Blueprint ファイルの jaas:config
要素を使用した、同等の JAAS レルム定義を 例2.4「ブループリント JAAS プロパティー」 に示します。
例2.4 ブループリント JAAS プロパティー
ブループリント設定の JAAS プロパティーに二重引用符を使用しないでください。
例 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Fuse は、JAAS 認証データを X.500 サーバーに保存するためのアダプターも提供します。例2.5「JAAS レルムの設定」 は、ldap://localhost:10389 にある LDAP サーバーに接続する Red Hat Fuse の LDAPLoginModule
クラスを使用するよう、LDAPLogin
レルムを定義します。
例2.5 JAAS レルムの設定
LDAP ログインモジュールの詳細な説明と使用例については、「JAAS LDAP ログインモジュール」 を参照してください。
2.1.3. JAAS プロパティーログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
JAAS プロパティーログインモジュールは、ユーザーデータをフラットファイル形式で保存します (オプションで、保存されたパスワードはメッセージダイジェストアルゴリズムを使用して暗号化できます)。ユーザーデータは、単純なテキストエディターを使用して直接編集することも、jaas:*
コンソールコマンドを使用して管理することもできます。
たとえば、Karaf コンテナーはデフォルトで JAAS プロパティーログインモジュールを使用し、関連するユーザーデータを InstallDir/etc/users.properties
ファイルに保存します。
サポートされている認証情報 リンクのコピーリンクがクリップボードにコピーされました!
JAAS プロパティーログインモジュールはユーザー名/パスワードのクレデンシャルを認証し、認証されたユーザーに関連付けられたロールのリストを返します。
実装クラス リンクのコピーリンクがクリップボードにコピーされました!
次のクラスは、JAAS プロパティーのログインモジュールを実装します。
org.apache.karaf.jaas.modules.properties.PropertiesLoginModule
- JAAS ログインモジュールを実装します。
org.apache.karaf.jaas.modules.properties.PropertiesBackingEngineFactory
-
OSGi サービスとして公開する必要があります。このサービスは、Apache Karaf シェルから
jaas:*
コンソールコマンドを使用してユーザーデータを管理できるようにします( Apache Karaf Console Referenceを参照)。
オプション リンクのコピーリンクがクリップボードにコピーされました!
JAAS プロパティーログインモジュールは、次のオプションをサポートしています。
users
- ユーザープロパティーファイルの場所。
ユーザープロパティーファイルの形式 リンクのコピーリンクがクリップボードにコピーされました!
ユーザープロパティーファイルは、プロパティーログインモジュールのユーザー名、パスワード、およびロールデータを保存するために使用されます。各ユーザーは、ユーザープロパティーファイルの 1 行で表されます。この行の形式は、次のとおりです。
Username=Password[,UserGroup|Role][,UserGroup|Role]...
Username=Password[,UserGroup|Role][,UserGroup|Role]...
このファイルでは、ユーザーグループを定義することもできます。各ユーザーグループは、次の形式の 1 行で表されます。
_g_\:GroupName=Role1[,Role2]...
_g_\:GroupName=Role1[,Role2]...
たとえば、次のように、ユーザー bigcheese
および guest
、ならびにユーザーグループ admingroup
および guestgroup
を定義できます。
ブループリント設定のサンプル リンクのコピーリンクがクリップボードにコピーされました!
以下の Blueprint 設定は、プロパティーログインモジュールを使用して新しい karaf
レルムを定義する方法を示しています。ここで、rank
属性を 200
に設定すると、デフォルトの karaf
レルムが上書きされます。
必ず、BackingEngineFactory
Bean を OSGi サービスとしてエクスポートし、jaas:*
コンソールコマンドがユーザーデータを管理できるようにします。
2.1.4. JAAS OSGi 設定ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
概要 リンクのコピーリンクがクリップボードにコピーされました!
JAAS OSGi 設定ログインモジュールは、OSGi Config Admin Service を利用してユーザーデータを保管します。このログインモジュールは、JAAS プロパティーのログインモジュールとかなり似ていますが (たとえばユーザーエントリーの構文は同じ)、ユーザーデータを取得するメカニズムは OSGi Config Admin Service に基づいています。
ユーザーデータは、対応する OSGi 設定ファイル etc/PersistentID.cfg
を作成するか、OSGi Config Admin Service によってサポートされる任意の設定方法を使用して直接編集できます。ただし、jaas:*
コンソールのコマンドはサポートされません。
サポートされている認証情報 リンクのコピーリンクがクリップボードにコピーされました!
JAAS OAGi 設定ログインモジュールはユーザー名/パスワードのクレデンシャルを認証し、認証されたユーザーに関連付けられたロールのリストを返します。
実装クラス リンクのコピーリンクがクリップボードにコピーされました!
次のクラスは、JAASOSGi 設定ログインモジュールを実装します。
org.apache.karaf.jaas.modules.osgi.OsgiConfigLoginModule
- JAAS ログインモジュールを実装します。
OSGi 設定ログインモジュールのバッキングエンジンファクトリーはありません。つまり、jaas:*
コンソールコマンドを使用してこのモジュールを管理することはできません。
オプション リンクのコピーリンクがクリップボードにコピーされました!
JAAS OSGi 設定ログインモジュールは、以下のオプションをサポートします。
pid
- ユーザーデータを含む OSGi 設定の 永続 ID。OSGi Config Admin 規格で、永続 ID は関連する設定プロパティーのセットを参照します。
設定ファイルの場所 リンクのコピーリンクがクリップボードにコピーされました!
設定ファイルの場所は、永続 ID PersistentID
の設定が以下のファイルに保存される通常の慣例に従います。
InstallDir/etc/PersistentID.cfg
InstallDir/etc/PersistentID.cfg
設定ファイルの形式 リンクのコピーリンクがクリップボードにコピーされました!
PersistentID.cfg
設定ファイルは、OSGi config ログインモジュールにユーザー名、パスワード、およびロールデータを保存するために使用されます。各ユーザーは、設定ファイル内の 1 行で表されます。この行の形式は、次のとおりです。
Username=Password[,Role][,Role]...
Username=Password[,Role][,Role]...
JAAS OSGi 設定ログインモジュールでは、ユーザーグループはサポートされて いません。
ブループリント設定のサンプル リンクのコピーリンクがクリップボードにコピーされました!
以下の Blueprint 設定は、OSGi 設定ログインモジュールを使用して新しい karaf
レルムを定義する方法を示しています。ここで、rank
属性を 200
に設定すると、デフォルトの karaf
レルムが上書きされます。
この例では、ユーザーデータはファイル InstallDir/etc/org.jboss.example.osgiconfigloginmodule.cfg
に保存され、jaas:*
コンソールを使用して設定を編集することはできません。
2.1.5. JAAS 公開鍵ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
JAAS 公開鍵ログインモジュールは、ユーザーデータをフラットファイル形式で保存します。このファイル形式は、単純なテキストエディターを使用して直接編集できます。ただし、jaas:*
コンソールのコマンドはサポートされません。
たとえば、Karaf コンテナーはデフォルトで JAAS パブリックキーログインモジュールを使用し、関連するユーザーデータを InstallDir/etc/keys.properties
ファイルに保存します。
サポートされている認証情報 リンクのコピーリンクがクリップボードにコピーされました!
JAAS 公開鍵ログインモジュールは、SSH 鍵の認証情報を認証します。ユーザーがログインしようとすると、SSH プロトコルは保存されている公開鍵を使用してユーザーにチャレンジします。ユーザーは、チャレンジに答えるために、対応する秘密鍵を所有している必要があります。ログインが成功すると、ログインモジュールはユーザーに関連付けられているロールのリストを返します。
実装クラス リンクのコピーリンクがクリップボードにコピーされました!
次のクラスは、JAAS 公開鍵ログインモジュールを実装します。
org.apache.karaf.jaas.modules.publickey.PublickeyLoginModule
- JAAS ログインモジュールを実装します。
公開鍵ログインモジュールのバッキングエンジンファクトリーはありません。つまり、jaas:*
コンソールコマンドを使用してこのモジュールを管理することはできません。
オプション リンクのコピーリンクがクリップボードにコピーされました!
JAAS 公開鍵ログインモジュールは、次のオプションをサポートしています。
users
- 公開鍵ログインモジュールのユーザープロパティーファイルの場所。
鍵プロパティーファイルの形式 リンクのコピーリンクがクリップボードにコピーされました!
keys.properties
ファイルは、公開鍵ログインモジュールのユーザー名、公開鍵、およびロールデータを保存するために使用されます。各ユーザーは、鍵プロパティーファイルの 1 行で表されます。この行の形式は、次のとおりです。
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
Username=PublicKey[,UserGroup|Role][,UserGroup|Role]...
ここで PublicKey は、SSH キーペアの公開鍵の部分です (通常は UNIX システムの ~/.ssh/id_rsa.pub
にあるユーザーのホームディレクトリーにあります) 。
たとえば、admin
ロールでユーザー jdoe
を作成するには、以下のようなエントリーを作成します。
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
jdoe=AAAAB3NzaC1kc3MAAACBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnfqimFQ8E+4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAAAAFQCXYFCPFSMLzLKSuYKi64QL8Fgc9QAAAnEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6EwoFhO3zwkyjMim4TwWeotifI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWfBpKLZl6Ae1UlZAFMO/7PSSoAAACBAKKSU2PFl/qOLxIwmBZPPIcJshVe7bVUpFvyl3BbJDow8rXfskl8wO63OzP/qLmcJM0+JbcRU/53Jj7uyk31drV2qxhIOsLDC9dGCWj47Y7TyhPdXh/0dthTRBy6bqGtRPxGa7gJov1xm/UuYYXPIUR/3x9MAZvZ5xvE0kYXO+rx,admin
ここで、id_rsa.pub
ファイルの内容をすべて挿入しないでください。公開鍵自体を表す記号のブロックだけを挿入します。
このファイルでは、ユーザーグループを定義することもできます。各ユーザーグループは、次の形式の 1 行で表されます。
_g_\:GroupName=Role1[,Role2]...
_g_\:GroupName=Role1[,Role2]...
ブループリント設定のサンプル リンクのコピーリンクがクリップボードにコピーされました!
以下の Blueprint 設定は、パブリックキーログインモジュールを使用して新しい karaf
レルムを定義する方法を示しています。ここで、rank
属性を 200
に設定すると、デフォルトの karaf
レルムが上書きされます。
この例では、ユーザーデータはファイル InstallDir/etc/keys.properties
に保存され、jaas:*
コンソールを使用して設定を編集することはできません。
2.1.6. JAAS JDBC ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
概要 リンクのコピーリンクがクリップボードにコピーされました!
JAAS JDBC ログインモジュールを使用すると、Java Database Connectivity (JDBC) を使用してデータベースに接続し、ユーザーデータをデータベースバックエンドに格納できます。したがって、JDBC をサポートする任意のデータベースを使用してユーザーデータを格納できます。ユーザーデータを管理するには、ネイティブデータベースクライアントツールまたは jaas:*
コンソールコマンドのいずれかを使用できます (バッキングエンジンは設定済みの SQL クエリーを使用して関連データベースの更新を実行します) 。
複数のログインモジュールを各ログインモジュールと組み合わせて、認証コンポーネントと認可コンポーネントの両方を提供できます。たとえば、デフォルトの PropertiesLoginModule
と JDBCLoginModule
を組み合わせてシステムにアクセスできるようにすることができます。
JAAS JDBC ログインモジュールでは、ユーザーグループはサポートされて いません。
サポートされている認証情報 リンクのコピーリンクがクリップボードにコピーされました!
JAAS JDBC ログインモジュールは、ユーザー名/パスワードのクレデンシャルを認証し、認証されたユーザーに関連付けられたロールのリストを返します。
実装クラス リンクのコピーリンクがクリップボードにコピーされました!
次のクラスは、JAASJDBC ログインモジュールを実装します。
org.apache.karaf.jaas.modules.jdbc.JDBCLoginModule
- JAAS ログインモジュールを実装します。
org.apache.karaf.jaas.modules.jdbc.JDBCBackingEngineFactory
-
OSGi サービスとして公開する必要があります。このサービスは、Apache Karaf シェルから
jaas:*
コンソールコマンドを使用してユーザーデータを管理できるようにします (olink:FMQCommandRef/Consolejaas を参照)。
オプション リンクのコピーリンクがクリップボードにコピーされました!
JAAS JDBC ログインモジュールは、次のオプションをサポートしています。
- datasource
OSGi サービスまたは JNDI 名として指定された JDBC データソース。次の構文を使用して、データソースの OSGi サービスを指定できます。
osgi:ServiceInterfaceName[/ServicePropertiesFilter]
osgi:ServiceInterfaceName[/ServicePropertiesFilter]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServiceInterfaceName は、データソースの OSGi サービス (通常は
javax.sql.DataSource
) によってエクスポートされるインターフェイスまたはクラスです。複数のデータソースを Karaf コンテナー内の OSGi サービスとしてエクスポートできるため、通常、必要な特定のデータソースを選択するためにフィルター ServicePropertiesFilter を指定する必要があります。OSGi サービスのフィルターは、サービスプロパティー設定に適用され、LDAP フィルター構文から借用した構文に従います。
- query.password
-
ユーザーのパスワードを取得する SQL クエリー。クエリーには 1 つの疑問符
?
を含めることができます。これは、実行時にユーザー名に置き換えられます。 - query.role
-
ユーザーのロールを取得する SQL クエリー。クエリーには 1 つの疑問符
?
を含めることができます。これは、実行時にユーザー名に置き換えられます。 - insert.user
-
新しいユーザーエントリーを作成する SQL クエリー。クエリーには 2 つの疑問符
?
を含めることができます。最初の疑問符はユーザー名に置き換えられ、2 つ目の疑問符は実行時にパスワードに置き換えられます。 - insert.role
-
ユーザーエントリーにロールを追加する SQL クエリー。クエリーには 2 つの疑問符
?
を含めることができます。最初の疑問符はユーザー名に置き換えられ、2 つ目の疑問符は実行時にロールに置き換えられます。 - delete.user
-
ユーザーエントリーを削除する SQL クエリー。クエリーには 1 つの疑問符
?
を含めることができます。これは、実行時にユーザー名に置き換えられます。 - delete.role
-
ユーザーエントリーからロールを削除する SQL クエリー。クエリーには 2 つの疑問符
?
を含めることができます。最初の疑問符はユーザー名に置き換えられ、2 つ目の疑問符は実行時にロールに置き換えられます。 - delete.roles
-
ユーザーエントリーから複数のロールを削除する SQL クエリー。クエリーには 1 つの疑問符
?
を含めることができます。これは、実行時にユーザー名に置き換えられます。
JDBC ログインモジュールの設定例 リンクのコピーリンクがクリップボードにコピーされました!
JDBC ログインモジュールを設定するには、次の主な手順を実行します。
データベーステーブルの作成 リンクのコピーリンクがクリップボードにコピーされました!
JDBC ログインモジュールを設定する前に、ユーザーデータを格納するためにバッキングデータベースにユーザー users テーブルと roles テーブルを設定する必要があります。たとえば、以下の SQL コマンドは、適切な users
テーブルと roles
テーブルの作成方法を示しています。
users
テーブルにはユーザー名/パスワードデータが格納され、roles
テーブルはユーザー名を 1 つ以上のロールに関連付けます。
データソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
JDBC ログインモジュールで JDBC データソースを使用するには、データソースインスタンスを作成し、データソースを OSGi サービスとしてエクスポートするのが正しい方法です。そうすることで、JDBC ログインモジュールは、エクスポートされた OSGi サービスを参照することにより、データソースにアクセスできるようになります。たとえば、Blueprint ファイルに以下のようなコードを使用して、MySQL データソースインスタンスを作成し、OSGi サービス (javax.sql.DataSource
型) として公開できます。
上記のブループリント設定は、OSGi バンドルとして Karaf コンテナーにパッケージ化およびインストールする必要があります。
データソースを OSGi サービスとして指定 リンクのコピーリンクがクリップボードにコピーされました!
データソースがインスタンス化され、OSGi サービスとしてエクスポートされると、JDBC ログインモジュールを設定する準備が整います。特に、JDBC ログインモジュールの datasource
オプションは、以下の構文を使用してデータソースの OSGi サービスを参照できます。
osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
osgi:javax.sql.DataSource/(osgi.jndi.service.name=jdbc/karafdb)
ここで、javax.sql.DataSource
はエクスポートされた OSGi サービスのインターフェイスタイプで、フィルター (osgi.jndi.service.name=jdbc/karafdb)
は、osgi.jndi.service.name
サービスプロパティーに値 jdbc/karafdb
を持つ特定の javax.sql.DataSource
インスタンスを選択します。
たとえば、以下の Blueprint 設定を使用して、サンプル MySQL データソースを参照する JDBC ログインモジュールで karaf
レルムをオーバーライドできます。
上記の設定に示されている SQL ステートメントは、実際にはこれらのオプションのデフォルト値です。したがって、これらの SQL ステートメントと一致するユーザーテーブルとロールテーブルを作成する場合は、オプション設定を省略して、デフォルトに依存することができます。
JDBCLoginModule を作成する他に、前述の Blueprint 設定も JDBCBackingEngineFactory
インスタンスをインスタンス化し、エクスポートします。これにより、jaas:*
コンソールコマンドを使用してユーザーデータを管理できます。
2.1.7. JAAS LDAP ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
概要 リンクのコピーリンクがクリップボードにコピーされました!
JAAS LDAP ログインモジュールを使用すると、ユーザーデータを LDAP データベースに保存できます。保存されたユーザーデータを管理するには、標準の LDAP クライアントツールを使用します。ただし、jaas:*
コンソールのコマンドはサポートされません。
Red Hat Fuse での LDAP の使用に関する詳細は、LDAP Authentication Tutorial を参照してください。
ユーザーグループは、JAAS LDAP ログインモジュールではサポートされて いません。
サポートされている認証情報 リンクのコピーリンクがクリップボードにコピーされました!
JAAS LDAP 設定ログインモジュールはユーザー名/パスワードのクレデンシャルを認証し、認証されたユーザーに関連付けられたロールのリストを返します。
実装クラス リンクのコピーリンクがクリップボードにコピーされました!
次のクラスは、JAAS LDAP ログインモジュールを実装します。
org.apache.karaf.jaas.modules.ldap.LDAPLoginModule
- JAAS ログインモジュールを実装します。Karaf コンテナーにプリロードされているため、バンドルをインストールする必要はありません。
LDAP ログインモジュールのバッキングエンジンファクトリーはありません。つまり、jaas:*
コンソールコマンドを使用してこのモジュールを管理することはできません。
オプション リンクのコピーリンクがクリップボードにコピーされました!
JAAS LDAP ログインモジュールは、次のオプションをサポートしています。
認証
LDAP サーバーにバインドする際に使用する認証方法を指定します。有効な値は以下のとおりです。
-
simple
— ユーザー名とパスワード認証でバインドします。connection.username
およびconnection.password
プロパティーを設定する必要があります。 none
— 匿名でバインドします。この場合、connection.username
プロパティーおよびconnection.password
プロパティーは割り当て解除できます。注記ディレクトリーサーバーへの接続は、検索を実行するためにのみ使用されます。この場合、認証されたバインドよりも高速であるため、匿名バインドがよく使用されます (ただし、ファイアウォールの背後に配置するなどして、ディレクトリーサーバーが十分に保護されていることも確認する必要があります)。
-
connection.url
LDAP URL (ldap://Host:Port) を使用してディレクトリーサーバーの場所を指定します。オプションでこの URL を修飾するには、スラッシュ
/
とその後にディレクトリーツリーの特定ノードの DN を追加します。この接続で SSL セキュリティーを有効にするには、URL でldaps:
スキームを指定する必要があります (例: ldaps://Host:Port)。スペース区切りリストで複数の URL を指定することもできます。次に例を示します。connection.url=ldap://10.0.0.153:2389 ldap://10.10.178.20:389
connection.url=ldap://10.0.0.153:2389 ldap://10.10.178.20:389
Copy to Clipboard Copied! Toggle word wrap Toggle overflow connection.username
-
ディレクトリーサーバーへの接続を開くユーザーの DN を指定します。たとえば、
uid=admin,ou=system
です。DN に空白が含まれる場合、LDAPLoginModule
は解析できません。唯一の解決策は、空白を含む DN 名の前後に二重引用符を追加してから、引用符をエスケープする blackslash を追加することです。たとえば、uid=admin,ou=\"system index\"
になります。 connection.password
-
connection.username
からの DN と一致するパスワードを指定します。ディレクトリーサーバーでは通常、パスワードは対応するディレクトリーエントリーのuserPassword
属性として保存されます。 context.com.sun.jndi.ldap.connect.pool
-
true
の場合、LDAP 接続の接続プールを有効にします。デフォルトはfalse
です。 context.com.sun.jndi.ldap.connect.timeout
- LDAP サーバーへの TCP 接続を作成するためのタイムアウトをミリ秒単位で指定します。デフォルト値は無限になっているため、接続試行がハングアップする可能性があるため、このプロパティーを明示的に設定することをお勧めします。
context.com.sun.jndi.ldap.read.timeout
- LDAP 操作の読み取りタイムアウトをミリ秒単位で指定します。デフォルト値は無限になっているため、このプロパティーを明示的に設定することをお勧めします。
context.java.naming.referral
LDAP 参照 は、一部の LDAP サーバーでサポートされている間接参照の形式です。LDAP 参照は、1 つ以上の URL を含む LDAP サーバーのエントリーです (通常、別の LDAP サーバーの 1 つ以上のノードを参照します)。
context.java.naming.referral
プロパティーを使用すると、フォローする参照を有効または無効にすることができます。次のいずれかの値に設定できます。-
follow
は、参照をフォローします (LDAP サーバーによってサポートされることを前提とします)。 -
ignore
は、すべての参照を通知せずに無視します。 -
throw
は、リファールに遭遇するたびにPartialResultException
を出力します。
-
disableCache
-
このプロパティーを
true
に設定すると、ユーザーおよびロールキャッシュを無効にできます。デフォルトはfalse
です。 initial.context.factory
-
LDAP サーバーへの接続に使用されるコンテキストファクトリーのクラスを指定します。これは常に
com.sun.jndi.ldap.LdapCtxFactory
に設定する必要があります。 role.base.dn
-
ロールエントリーを検索する DIT のサブツリーの DN を指定します。たとえば、
ou=groups,ou=system
となります。 role.filter
ロールの検索に使用される LDAP 検索フィルターを指定します。これは、
role.base.dn
によって選択されるサブツリーに適用されます。たとえば、(member=uid=%u)
となります。LDAP 検索操作に渡される前に、値は次のように文字列置換を受けます。-
%u
は、受信クレデンシャルから抽出されたユーザー名に置き換えられます。 -
%dn
は、LDAP サーバーの対応するユーザーの RDN に置き換えられます (user.filter
フィルターとの照合によって検出されます)。 -
%fqdn
は、LDAP サーバーの対応するユーザーの DN に置き換えられます (user.filter
フィルターとの照合によって検出されます)。
-
role.mapping
LDAP グループと JAAS ロールの間のマッピングを指定します。マッピングが指定されていない場合、デフォルトで各 LDAP グループは同じ名前の対応する JAAS ロールにマッピングされます。ロールマッピングは、次の構文で指定されます。
ldap-group=jaas-role(,jaas-role)*(;ldap-group=jaas-role(,jaas-role)*)*
ldap-group=jaas-role(,jaas-role)*(;ldap-group=jaas-role(,jaas-role)*)*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各 LDAP グループ
ldap-group
は Common Name (CN) によって指定されます。たとえば、LDAP グループ
admin
、devop
、およびtester
の場合は、以下のように JAAS ロールにマップできます。role.mapping=admin=admin;devop=admin,manager;tester=viewer
role.mapping=admin=admin;devop=admin,manager;tester=viewer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow role.name.attribute
-
ロール/グループの名前を含むロールエントリーの属性タイプを指定します。このオプションを省略すると、ロール検索機能は事実上無効になります。(例:
cn
)。 role.search.subtree
-
ロールエントリー検索範囲に、
role.base.dn
によって選択されたツリーのサブツリーが含まれるかどうかを指定します。true
の場合、ロールルックアップは再帰的 (SUBTREE
) になります。false
の場合、ロールルックアップは最初のレベルでのみ実行されます (ONELEVEL
)。 ssl
-
LDAP サーバーへの接続が SSL を使用して保護されているかどうかを指定します。
connection.url
が SSL ldaps:// で始まる場合は、このプロパティーに関係なく使用されます。 ssl.provider
- LDAP 接続に使用する SSL プロバイダーを指定します。指定しない場合、デフォルトの SSL プロバイダーが使用されます。
ssl.protocol
-
SSL 接続に使用するプロトコルを指定します。SSLv3 プロトコルが使用されないようにするには (POODLE 脆弱性)、このプロパティーを
TLSv1
に設定する 必要があります。 ssl.algorithm
-
トラストストアマネージャーが使用するアルゴリズムを指定します。たとえば、
PKIX
です。 ssl.keystore
-
LDAP クライアント自身の X.509 証明書を格納するキーストアの ID (LDAP サーバーで SSL クライアント認証が有効になっている場合にのみ必要)。キーストアは、
jaas:keystore
要素を使用してデプロイする必要があります (「Apache DS のサンプル設定」を参照)。 ssl.keyalias
-
LDAP クライアント独自の X.509 証明書のキーストアエイリアス (
ssl.keystore
によって指定されたキーストアに複数の証明書が保存される場合にのみ必要)。 ssl.truststore
-
LDAP サーバーの証明書を検証するために使用される信頼できる CA 証明書を格納するキーストアの ID (LDAP サーバーの証明書チェーンは、トラストストア内の証明書の 1 つによって署名されている必要があります)。キーストアは、
jaas:keystore
要素を使用してデプロイする必要があります。 user.base.dn
-
ユーザーエントリーを検索するための DIT のサブツリーの DN を指定します。たとえば、
ou=users,ou=system
です。 user.filter
ユーザーの認証情報の検索に使用される LDAP 検索フィルターを指定します。これは、
user.base.dn
によって選択されるサブツリーに適用されます。たとえば、(uid=%u)
です。LDAP 検索操作に渡される前に、値は次のように文字列置換を受けます。-
%u
は、受信クレデンシャルから抽出されたユーザー名に置き換えられます。
-
user.search.subtree
-
ユーザーエントリー検索範囲に、
user.base.dn
によって選択されたツリーのサブツリーが含まれるかどうかを指定します。true
の場合、ユーザールックアップは再帰的 (SUBTREE
) になります。false
の場合、ユーザールックアップは最初のレベル (ONELEVEL
) でのみ実行されます。
Apache DS のサンプル設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の Blueprint 設定は、LDAP ログインモジュールを使用して新しい karaf
レルムを定義する方法を示しています。ここで、rank
属性を 200
に設定すると、デフォルトの karaf
レルムが上書きされ、LDAP ログインモジュールは Apache ディレクトリーサーバーに接続されます。
SSL を有効にするには、connection.url
設定で ldaps
スキームを使用する必要があります。
Poodle 脆弱性 (CVE-2014-3566) から保護するには、ssl.protocol
を TLSv1
(以降) に設定する必要があります。
さまざまなディレクトリーサーバーのフィルター設定 リンクのコピーリンクがクリップボードにコピーされました!
ディレクトリーサーバー間の最も重要な違いは、LDAP ログインモジュールでのフィルターオプションの設定に関連しています。正確な設定は、最終的には DIT の設定によって異なりますが、次の表は、さまざまなディレクトリーサーバーに必要な一般的なロールフィルター設定を示しています。
ディレクトリーサーバー | 一般的なフィルター設定 |
---|---|
389-DS Red Hat DS |
user.filter=(&(objectClass=InetOrgPerson)(uid=%u)) role.filter=(uniquemember=%fqdn)
|
MS Active Directory |
user.filter=(&(objectCategory=person)(samAccountName=%u)) role.filter=(uniquemember=%fqdn)
|
Apache DS |
user.filter=(uid=%u) role.filter=(member=uid=%u)
|
OpenLDAP |
user.filter=(uid=%u) role.filter=(member:=uid=%u)
|
上記の表では、オプション設定が Blueprint XML ファイルに組み込まれるため、&
記号 (論理 And 演算子を表す) は &
としてエスケープ処理されます。
2.1.8. JAAS ログ監査ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
ログインモジュール org.apache.karaf.jaas.modules.audit.LogAuditLoginModule
は、認証試行の堅牢なロギングを提供します。最大ファイルサイズの設定、ログローテーション、ファイル圧縮、フィルターリングなどの標準的なログ管理機能をサポートしています。これらのオプションの設定は、ロギング設定ファイルで確立します。
デフォルトでは、認証監査ロギングは無効になっています。ロギングを有効にするには、ロギング設定と監査設定を定義してから、2 つをリンクする必要があります。ロギング設定では、ファイルアペンダー プロセスと ロガー プロセスのプロパティーを指定します。ファイルアペンダーは、認証イベントに関する情報を指定されたファイルに公開します。ロガーは、認証イベントに関する情報を取得し、指定したアペンダーがそれを利用できるようにするメカニズムです。標準の Karaf Log4j ロギング設定ファイル etc/org.ops4j.pax.logging.cfg
でロギング設定を定義します。
監査設定により、監査ロギングとロギングフラストラクチャーへのリンクが使用可能になります。監査設定は、etc/org.apache.karaf.jaas.cfg
ファイルに定義します。
アペンダー設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、標準の Karaf Log4j 設定ファイル (etc/org.ops4j.pax.logging.cfg
) は、AuditRollingFile
という名前の監査ロギングアペンダーを定義します。
次のサンプル設定ファイルの抜粋は、${karaf.data}/security/audit.log
で監査ログファイルに書き込むアペンダーのプロパティーを示しています。
アペンダーを使用するには、アペンダーがログファイルに公開するための情報を提供するロガーを設定する必要があります。
ロガー設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Karaf Log4j 設定ファイル (etc/org.ops4j.pax.logging.cfg
) は、org.apache.karaf.jaas.modules.audit
という名前の監査ロガーを定義します。次のサンプル設定ファイルの抜粋では、認証イベントに関する情報を、AuditRollingFile
という名前のアペンダーに提供するようにデフォルトロガーが設定されています。
log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit log4j2.logger.audit.level = INFO log4j2.logger.audit.additivity = false log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile
log4j2.logger.audit.name = org.apache.karaf.jaas.modules.audit
log4j2.logger.audit.level = INFO
log4j2.logger.audit.additivity = false
log4j2.logger.audit.appenderRef.AuditRollingFile.ref = AuditRollingFile
log4j2.logger.audit.appenderRef.AuditRollingFile.ref
の値は、etc/org.ops4j.pax.logging.cfg
の Audit file appender
セクションの log4j2.appender.audit.name
の値と一致する必要があります。
2.1.8.1. 認証監査ロギングの有効化 リンクのコピーリンクがクリップボードにコピーされました!
ロギング設定を確立した後、監査ロギングをオンにして、ロギング設定を監査設定に接続できます。
監査ロギングを有効にするには、以下の行を etc/org.apache.karaf.jaas.cfg
に挿入します。
audit.log.enabled = true audit.log.logger = <logger.name> audit.log.level = <level>
audit.log.enabled = true
audit.log.logger = <logger.name>
audit.log.level = <level>
<logger.name>
は、org.jboss.fuse.audit
や com.example.audit
など、Apache Log4J ライブラリーと Log4J2 ライブラリーによって確立される標準のロガー (カテゴリー) 名のドット区切り形式を表します。<level>`
は、WARN
、INFO
、TRACE
、DEBUG
などのログレベル設定を表します。
たとえば、以下のサンプル監査設定ファイルにある以下の抜粋で、監査ログが有効になり、org.apache.karaf.jaas.modules.audit
という名前の監査ロガーを使用するように設定されます。
audit.log.enabled = true audit.log.logger = org.apache.karaf.jaas.modules.audit audit.log.level = INFO
audit.log.enabled = true
audit.log.logger = org.apache.karaf.jaas.modules.audit
audit.log.level = INFO
audit.log.logger
の値は、Karaf Log4j 設定ファイル (etc/org.ops4j.pax.logging.cfg
) の log4j2.logger.audit.name
の値と一致する必要があります。
ファイルを更新すると、Apache Felix ファイルインストールバンドルが変更を検出し、Apache Felix 設定管理サービス ( Config Admin) の設定を更新します。次に、Config Admin からの設定がロギングインフラストラクチャーに渡されます。
設定ファイルを更新するための Apache Karaf シェルコマンド リンクのコピーリンクがクリップボードにコピーされました!
<FUSE_HOME>/etc
の設定ファイルは直接編集するか、Apache Karaf config:*
コマンドを実行して、Config Admin を更新できます。
config*
コマンドを使用して設定を更新すると、Apache Felix File Install バンドルは変更について通知され、関連する etc/*.cfg
ファイルが自動的に更新されます。
例: config
コマンドを使用した JAAS レルムのプロパティーの一覧表示
JAAS レルムのプロパティーを一覧表示するには、シェルプロンプトから次のコマンドを入力します。
config:property-list --pid org.apache.karaf.jaas
このコマンドは、次の例のとおり、レルムの現在のプロパティーを返します。
例: config
コマンドを使用した監査ログレベルの変更
レルムの監査ログレベルを DEBUG
に変更するには、シェルプロンプトで、config:property-set --pid org.apache.karaf.jaas audit.log.level DEBUG
を入力します。
変更が有効であることを確認するには、再度プロパティーをリストして、audit.log.level
の値を確認します。
2.1.9. JAAS ファイル監査ログインモジュール リンクのコピーリンクがクリップボードにコピーされました!
認証モジュール org.apache.karaf.jaas.modules.audit.FileAuditLoginModule
は、認証試行の堅牢なロギングを提供します。ファイル監査ログインモジュールは、指定されたファイルに直接書き込みます。Pax ロギングインフラストラクチャーに依存しないため、設定は簡単です。ただし、ログ監査ログインモジュール とは異なり、パターンフィルターリングやログファイルローテーションなどのログ管理機能はサポートされていません。
FileAuditLoginModule
で監査ロギングを有効にするには、以下の行を etc/org.apache.karaf.jaas.cfg
に挿入します。
audit.file.enabled = true audit.file.file = ${karaf.data}/security/audit.log
audit.file.enabled = true
audit.file.file = ${karaf.data}/security/audit.log
通常、ファイル監査ログインモジュール と ログ監査ログインモジュール の両方を使用して監査ログを設定することはありません。両方のモジュールでログを有効にする場合、一意のターゲットログファイルを使用するように各モジュールを設定することで、データの損失を回避できます。
2.1.10. 保存されたパスワードの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、JAAS ログインモジュールはパスワードをプレインテキスト形式で保存します。ファイルのアクセス許可を適切に設定することでこのようなデータを保護でき、そのように保護する必要もありますが、パスワードを (メッセージダイジェスト アルゴリズムを使用して) 非表示形式で保存することで、パスワードをさらに保護できます。
Red Hat Fuse は、パスワード暗号化を有効にするための一連のオプションを提供します。これは、任意 の JAAS ログインモジュール (不要な公開鍵ログインモジュールを除く) と組み合わせることができます。
メッセージダイジェストアルゴリズムを解読するのは困難ですが、攻撃に対して無防備ではありません (たとえば、暗号化ハッシュ関数に関する Wikipedia の記事 を参照してください)。パスワードを含むファイルを保護するために、パスワードの暗号化の使用に加え、常にファイル権限を使用してください。
オプション リンクのコピーリンクがクリップボードにコピーされました!
オプションで、次のログインモジュールのプロパティーを設定することにより、JAAS ログインモジュールのパスワード暗号化を有効にできます。これには、「Jasypt 暗号化を使用したログインモジュールの例」 の説明に従って InstallDir/etc/org.apache.karaf.jaas.cfg
ファイルを編集するか、または独自の Blueprint ファイルをデプロイします。
encryption.enabled
-
パスワード暗号化を有効にするには、
true
に設定します。 encryption.name
- OSGi サービスとして登録されている暗号化サービスの名前。
encryption.prefix
- 暗号化されたパスワードの接頭辞。
encryption.suffix
- 暗号化されたパスワードの接尾辞。
encryption.algorithm
暗号化アルゴリズムの名前を指定します (例:
MD5
またはSHA-1
)。次の暗号化アルゴリズムのいずれかを指定できます。-
MD2
-
MD5
-
SHA-1
-
SHA-256
-
SHA-384
-
SHA-512
-
encryption.encoding
-
暗号化されたパスワードのエンコード:
hexadecimal
またはbase64
encryption.providerName
(Jasypt のみ)-
ダイジェストアルゴリズムを提供する
java.security.Provider
インスタンスの名前。 encryption.providerClassName
(Jasypt のみ)- ダイジェストアルゴリズムを提供するセキュリティープロバイダーのクラス名
encryption.iterations
(Jasypt のみ)- ハッシュ関数を再帰的に適用する回数。
encryption.saltSizeBytes
(Jasypt のみ)- ダイジェストの計算に使用されるソルトのサイズ。
encryption.saltGeneratorClassName
(Jasypt のみ)- ソルトジェネレーターのクラス名。
role.policy
-
ロールプリンシパルを識別するためのポリシーを指定します。値
prefix
またはgroup
を指定できます。 role.discriminator
- ロールポリシーで使用される識別子の値を指定します。
暗号化サービス リンクのコピーリンクがクリップボードにコピーされました!
Fuse が提供する暗号化サービスは 2 つあります。
-
encryption.name = basic
(「Basic 暗号化サービス」 で説明されている) -
encryption.name = jasypt
(「Jasypt 暗号化」 で説明されている)
独自の暗号化サービスを作成することもできます。これを実行するには、以下を行います。
-
org.apache.karaf.jaas.modules.EncryptionService
インターフェイスを実装 - 実装を OSGI サービスとして公開します。
次のリストは、カスタム暗号化サービスを OSGI コンテナーに公開する方法を示しています。
Basic 暗号化サービス リンクのコピーリンクがクリップボードにコピーされました!
Basic 暗号化サービスは、デフォルトで Karaf コンテナーにインストールされ、encryption.name
プロパティーを basic
という値に設定することで参照が可能です。Basic 暗号化サービスでは、メッセージダイジェストアルゴリズムは SUN セキュリティープロバイダー (Oracle JDK のデフォルトのセキュリティープロバイダー) によって提供されます。
Jasypt 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
Jasypt 暗号化サービスは通常、デフォルトで Karaf にインストールされます。必要に応じて、以下のように jasypt-encryption
機能をインストールして明示的にインストールできます。
JBossA-MQ:karaf@root> features:install jasypt-encryption
JBossA-MQ:karaf@root> features:install jasypt-encryption
このコマンドは、必要な Jasypt バンドルをインストールし、Jasypt 暗号化を OSGi サービスとしてエクスポートして、JAAS ログインモジュールで使用できるようにします。
Jasypt 暗号化の詳細については、Jasypt のドキュメント を参照してください。
Jasypt 暗号化を使用したログインモジュールの例 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、パスワードは etc/users.properties
ファイルにクリアテキストで保存されます。jasypt-encryption
機能をインストールし、etc/org.apache.karaf.jaas.cfg
設定ファイルを変更することで、暗号化を有効にできます。
機能
jasypt-encryption
をインストールします。これにより、jasypt
サービスがインストールされます。karaf@root> features:install jasypt-encryption
karaf@root> features:install jasypt-encryption
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これで、
jaas
コマンドを使用してユーザーを作成できます。$FUSE_HOME/etc/org.apache.karaf.jaas.cfg
ファイルを開き、次のように変更します。encryption.enabled = true
、encryption.name = jasypt
、およびこの場合はencryption.algorithm = SHA-256
を設定します。その他のencryption.algorithm
オプションは、要件に応じて設定できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Karaf コンソールで
jaas:realms
コマンドを入力し、デプロイされたログインモジュールを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ユーザーを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow $FUSE_HOME/etc/users.properties
ファイルを見ると、ユーザーusertest
がファイルに追加されていることがわかります。admin = {CRYPT}WXX+4PM2G7nT045ly4iS0EANsv9H/VwmStGIb9bcbGhFH5RgMuL0D3H/GVTigpga{CRYPT},_g_:admingroup _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh usertest = {CRYPT}33F5E76E5FF97F3D27D790AAA1BEE36057410CCDBDBE2C792239BB2853D17654315354BB8B608AD5{CRYPT},_g_:admingroup
admin = {CRYPT}WXX+4PM2G7nT045ly4iS0EANsv9H/VwmStGIb9bcbGhFH5RgMuL0D3H/GVTigpga{CRYPT},_g_:admingroup _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh usertest = {CRYPT}33F5E76E5FF97F3D27D790AAA1BEE36057410CCDBDBE2C792239BB2853D17654315354BB8B608AD5{CRYPT},_g_:admingroup
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
既に
jaas:update
コマンドを実行しているので、新たに作成したログインを別のターミナルでテストできます。
2.1.11. JAAS と HTTP Basic 認証のインテグレーション リンクのコピーリンクがクリップボードにコピーされました!
Servlet REST を使用すると、REST DSL を使用して Camel ルートに REST エンドポイントを定義できます。次の例は、HTTP 基本認証によって保護されている REST エンドポイントがユーザー認証を Karaf JAAS サービスに委任する方法を示しています。
手順
Apache Camel を
CamelInstallDir
にインストールした場合、以下のディレクトリーでサンプルを見つけることができます。CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Maven を使用して、サンプルを OSGi バンドルとしてビルドおよびインストールします。コマンドプロンプトを開き、現在のディレクトリーを
CamelInstallDir/examples/camel-example-servlet-rest-karaf-jaas
に切り替え、以下のコマンドを入力します。mvn install
mvn install
Copy to Clipboard Copied! Toggle word wrap Toggle overflow セキュリティー設定ファイルを
KARAF_HOME/etc
フォルダーにコピーするには、以下のコマンドを入力します。cp src/main/resources/org.ops4j.pax.web.context-camelrestdsl.cfg $KARAF_HOME/etc
cp src/main/resources/org.ops4j.pax.web.context-camelrestdsl.cfg $KARAF_HOME/etc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Karaf に Apache Camel をインストールするには、Karaf シェルコンソールで次のコマンドを入力します。
feature:repo-add camel ${project.version} feature:install camel
feature:repo-add camel ${project.version} feature:install camel
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel-servlet
、camel-jackson
、およびwar
Karaf 機能も必要で、以下のコマンドを入力してこれらの機能をインストールします。feature:install camel-servlet feature:install camel-jackson feature:install war
feature:install camel-servlet feature:install camel-jackson feature:install war
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel-example-servlet-rest-karaf-jaas
サンプルをインストールするには、以下のコマンドを入力します。install -s mvn:org.apache.camel.example/camel-example-servlet-rest-karaf-jaas/${project.version}
install -s mvn:org.apache.camel.example/camel-example-servlet-rest-karaf-jaas/${project.version}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
結果
アプリケーションが実行中であることを確認するには、以下のコマンドを入力してアプリケーションログファイルを表示できます (ログの表示を停止する場合は ctrl+c
を使用)。
log:tail
log:tail
REST user
エンドポイントは以下の操作をサポートします。
-
GET /user/{id}
- 指定 ID を持つユーザーを表示する -
GET /user/final
- すべてのユーザーを表示する -
PUT /user
- ユーザーを更新/作成する
view 操作は HTTP GET
を使用し、update 操作は HTTP PUT
を使用します。
2.1.11.1. Web ブラウザーから REST サービスにアクセス リンクのコピーリンクがクリップボードにコピーされました!
以下の例を使用して、Web ブラウザーからサービスにアクセスできます (admin
をユーザー、admin
をパスワードとしてポップアップダイアログボックスに入力する必要があります)。
例: ユーザー ID 123 を表示
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
例: すべてのユーザーを一覧表示
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
2.1.11.2. コマンドラインから REST サービスへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
以下の例のように、コマンドラインから curl
を使用して REST user
エンドポイントにアクセスできます。
例: ユーザー ID 123 を表示
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/123
例: すべてのユーザーを表示します
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
curl -X GET -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user/findAll
例: ユーザー ID 234 を作成または更新します
curl -X PUT -d "{ \"id\": 234, \"name\": \"John Smith\"}" -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user
curl -X PUT -d "{ \"id\": 234, \"name\": \"John Smith\"}" -H "Accept: application/json" --basic -u admin:admin http://localhost:8181/camel-example-servlet-rest-blueprint/rest/user