5.2. クライアントの認証
5.2.1. クライアント認証方法
ブローカーにクライアント認証を設定するには、以下の方法を使用できます。
- ユーザー名とパスワードベースの認証
以下のオプションのいずれかを使用して、ユーザーの認証情報を直接検証します。
- ブローカーにローカルに保存されるプロパティーファイルのセットに対して認証情報を確認します。また、ブローカーへのアクセスを限定して、ログインモジュールを組み合わせてより複雑なユースケースをサポートする ゲスト アカウントを設定することもできます。
- 中央の X.500 ディレクトリーサーバーに保存されているユーザーデータに対してクライアントクレデンシャルを確認するように、LDAP (Lightweight Directory Access Protocol) ログインモジュールを設定します。
- 証明書ベースの認証
- 双方向 Transport Layer Security (TLS) を設定して、ブローカーとクライアントの両方が相互認証の証明書を提示するようにします。管理者は、承認されたクライアントユーザーおよびロールを定義するプロパティーファイルも設定する必要があります。これらのプロパティーファイルはブローカーに保存されます。
- Kerberos ベースの認証
- Simple Authentication and Security Layer (SASL) フレームワークから GSSAPI メカニズムを使用し、クライアントの Kerberos セキュリティー認証情報を認証するようにブローカーを設定します。
次のセクションでは、ユーザーとパスワードと証明書ベースの認証の両方を設定する方法を説明します。
関連情報
LDAP および Kerberos の完全な認証 および 承認ワークフローの詳細は、以下を参照してください。
5.2.2. プロパティーファイルに基づくユーザーおよびパスワード認証の設定
AMQ Broker は、アドレスに基づいてキューにセキュリティーを適用するための柔軟なロールベースのセキュリティーモデルをサポートします。キューは、1 対 1(ポイントツーポイントメッセージングの場合) または多対 1(パブリッシュ/サブスクライブメッセージング用) のいずれかのアドレスにバインドされます。メッセージがアドレスに送信されると、ブローカーはそのアドレスにバインドされたキューのセットを検索し、メッセージをそのキューのセットにルーティングします。
基本的なユーザーとパスワード認証が必要な場合は、PropertiesLoginModule
を使用して定義します。このログインモジュールは、ブローカーにローカルに保存される以下の設定ファイルに対してユーザーの認証情報をチェックします。
artemis-users.properties
- ユーザーおよび対応するパスワードの定義に使用
artemis-roles.properties
- ロールを定義し、ユーザーをそれらのロールに割り当てるのに使用します。
login.config
- ユーザーおよびパスワード認証、およびゲストアクセス用のログインモジュールの設定に使用
artemis-users.properties
ファイルには、セキュリティーを確保するために、ハッシュ化されたパスワードを含めることができます。
以下のセクションでは、設定方法を説明します。
5.2.2.1. 基本的なユーザーとパスワード認証の設定
以下の手順は、基本的なユーザーとパスワード認証を設定する方法を説明します。
手順
<broker_instance_dir>/etc/login.config
設定ファイルを開きます。デフォルトでは、新しい AMQ Broker 7.12 インスタンスのこのファイルには次の行が含まれます。activemq { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient debug=false reload=true org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties"; };
activemq
- 設定のエイリアス。
org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule
- 実装クラス。
sufficient
PropertiesLoginModule
に必要とされる成功レベルを指定するフラグ。設定可能な値は次のとおりです。-
必須
: ログインモジュールが正常に実行される必要があります。認証は、成功または失敗に関係なく、指定のエイリアスで設定されたログインモジュールのリストの実行をそのまま継続します。 -
必須
: ログインモジュールが正常に実行される必要があります。失敗により、即座に制御がアプリケーションに返されます。認証は、指定のエイリアス下で設定されたログインモジュールのリストを実行しません。 -
sufficient
: ログインモジュールは正常に実行される必要はありません。成功した場合には、制御がアプリケーションに返り、認証はこれ以上続行しません。認証に失敗すると、認証試行により、指定のエイリアス下で設定されたログインモジュールのリストが続行されます。 -
オプション
: ログインモジュールは正常に実行される必要はありません。認証は、成功または失敗に関係なく、指定のエイリアスで設定されたログインモジュールのリストを継続します。
-
org.apache.activemq.jaas.properties.user
- ログインモジュール実装のユーザーとパスワードのセットを定義するプロパティーファイルを指定します。
org.apache.activemq.jaas.properties.role
- ユーザーをログインモジュール実装に定義されたロールにマップするプロパティーファイルを指定します。
-
<broker_instance_dir>/etc/artemis-users.properties
設定ファイルを開きます。 ユーザーを追加して、ユーザーにパスワードを割り当てます。以下に例を示します。
user1=secret user2=access user3=myPassword
-
<broker_instance_dir>/etc/artemis-roles.properties
設定ファイルを開きます。 artemis-users.properties
ファイルに追加したユーザーにロール名を割り当てます。以下に例を示します。admin=user1,user2 developer=user3
-
<broker_instance_dir>\etc\bootstrap.xml
設定ファイルを開きます。 必要に応じて、以下のようにセキュリティードメインエイリアス (このインスタンスでは activemq) をファイルに追加します。
<jaas-security domain="activemq"/>
5.2.2.2. ゲストアクセスの設定
ログイン認証情報がないユーザーや、認証情報が認証に失敗するユーザーの場合は、ゲストアカウントを使用してブローカーへの制限されたアクセスを付与できます。
コマンドラインの切り替えを使用して --allow-anonymous
(--require-login
の逆)、ゲストアクセスを有効にし、ブローカーインスタンスを作成できます。
以下の手順は、ゲストアクセスを設定する方法を説明します。
前提条件
- この手順では、基本的なユーザーとパスワード認証がすでに設定されていることを前提としています。詳細は、「基本的なユーザーとパスワード認証の設定」 を参照してください。
手順
-
基本的なユーザーとパスワード認証用に指定した
<broker_instance_dir>/etc/login.config
設定ファイルを開きます。 以前追加したプロパティーログインモジュール設定の後に、ゲストログインモジュール設定を追加します。以下に例を示します。
activemq { org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule sufficient debug=true org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties"; org.apache.activemq.artemis.spi.core.security.jaas.GuestLoginModule sufficient debug=true org.apache.activemq.jaas.guest.user="guest" org.apache.activemq.jaas.guest.role="restricted"; };
org.apache.activemq.artemis.spi.core.security.jaas.GuestLoginModule
- 実装クラス。
org.apache.activemq.jaas.guest.user
- 匿名ユーザーに割り当てられたユーザー名。
org.apache.activemq.jaas.guest.role
- 匿名ユーザーに割り当てられたロール。
上記の設定に基づいて、ユーザーが認証情報を提供すると、ユーザーとパスワード認証モジュールがアクティブになります。ユーザーが認証情報を提供しない場合や、指定した認証情報が正しくない場合は、ゲスト認証がアクティブになります。
5.2.2.2.1. ゲストアクセスの例
以下の例は、認証情報がないユーザーだけがゲストとしてログインしているユースケースに対するゲストアクセスの設定を示しています。この例では、ログインモジュールの順序が以前の設定手順と照合されていることを確認します。また、プロパティーログインモジュールに割り当てられるフラグは requisite
に変更されています。
activemq { org.apache.activemq.artemis.spi.core.security.jaas.GuestLoginModule sufficient debug=true credentialsInvalidate=true org.apache.activemq.jaas.guest.user="guest" org.apache.activemq.jaas.guest.role="guests"; org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule requisite debug=true org.apache.activemq.jaas.properties.user="artemis-users.properties" org.apache.activemq.jaas.properties.role="artemis-roles.properties"; };
前述の設定に基づいて、ログイン認証情報が指定されていない場合は、ゲスト認証モジュールがアクティベートされます。
このユースケースでは、ゲストログインモジュールの設定で credentialsInvalidate
オプションを true
に設定する必要があります。
プロパティーログインモジュールは、認証情報が提供されているとアクティベートされます。クレデンシャルが有効である必要があります。
関連情報
-
Java Authentication and Authorization Service (JAAS) の詳細は、Java ベンダーのドキュメントを参照してください。たとえば、
login.config
の設定に関する Oracle のチュートリアルは、Oracle Java ドキュメントの JAAS Login Configuration File を参照してください。 - クライアントクレデンシャルを検証するように LDAP ログインモジュールを設定する方法は、「クライアント認証用の LDAP の設定」 を参照してください。
- 設定ファイルでパスワードを暗号化する方法は、「設定ファイルでのパスワードの暗号化」 を参照してください。
5.2.3. 証明書ベースの認証の設定
Java Authentication and Authorization Service (JAAS) 証明書ログインモジュールは、Transport Layer Security(TLS) を使用するクライアントの認証および承認を処理します。モジュールを使用するには、双方向の Transport Layer Security (TLS) の使用と、独自の証明書でクライアントを設定する必要があります。認証は、JAAS 証明書ログインモジュールから直接ではなく、TLS ハンドシェイク中に実行されます。
証明書ログインモジュールのロールは、以下のとおりです。
- 許可されるユーザーのセットを制限します。関連するプロパティーファイルに明示的にリスト表示されるユーザーの 識別名 (DN) のみが認証の対象となります。
- グループのリストを受信したユーザー ID に関連付けます。これにより、認証が容易になります。
- 受信クライアント証明書が必要です (デフォルトでは、TLS レイヤーは、クライアント証明書の存在をオプションとして扱うように設定されています)。
証明書ログインモジュールは、フラットテキストファイルのペアに証明書 DN のコレクションを保存します。このファイルは、ユーザー名とグループ ID のリストを各 DN に関連付けます。
証明書ログインモジュールは、org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
クラスで実装されます。
5.2.3.1. 証明書ベースの認証を使用するブローカーの設定
以下の手順では、証明書ベースの認証を使用するようにブローカーを設定する方法を説明します。
前提条件
- 双方向 Transport Layer Security(TLS) を使用するようにブローカーを設定している。詳細は、「双方向 TLS の設定」 を参照してください。
手順
以前ブローカーキーストアにインポートされたユーザー証明書からサブジェクト 識別名 (DN) を取得します。
キーストアファイルから一時ファイルに証明書をエクスポートします。以下に例を示します。
keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
エクスポートされた証明書の内容を出力します。
keytool -printcert -file <file_name>
出力は以下のようになります。
Owner: CN=localhost, OU=broker, O=Unknown, L=Unknown, ST=Unknown, C=Unknown Issuer: CN=localhost, OU=broker, O=Unknown, L=Unknown, ST=Unknown, C=Unknown Serial number: 4537c82e Valid from: Thu Oct 19 19:47:10 BST 2006 until: Wed Jan 17 18:47:10 GMT 2007 Certificate fingerprints: MD5: 3F:6C:0C:89:A8:80:29:CC:F5:2D:DA:5C:D7:3F:AB:37 SHA1: F0:79:0D:04:38:5A:46:CE:86:E1:8A:20:1F:7B:AB:3A:46:E4:34:5C
Owner
エントリーは Subject DN です。Subject DN の入力の使用形式はプラットフォームによって異なります。上記の文字列は、以下のように表現することもできます。Owner: `CN=localhost,\ OU=broker,\ O=Unknown,\ L=Unknown,\ ST=Unknown,\ C=Unknown`
証明書ベースの認証を設定します。
<broker_instance_dir>/etc/login.config
設定ファイルを開きます。証明書ログインモジュールを追加し、ユーザーとロールのプロパティーファイルを参照します。以下に例を示します。activemq { org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule debug=true org.apache.activemq.jaas.textfiledn.user="artemis-users.properties" org.apache.activemq.jaas.textfiledn.role="artemis-roles.properties"; };
org.apache.activemq.artemis.spi.core.security.jaas.TextFileCertificateLoginModule
- 実装クラス。
org.apache.activemq.jaas.textfiledn.user
- ログインモジュール実装のユーザーとパスワードのセットを定義するプロパティーファイルを指定します。
org.apache.activemq.jaas.textfiledn.role
- ユーザーをログインモジュール実装に定義されたロールにマップするプロパティーファイルを指定します。
<broker_instance_dir>/etc/artemis-users.properties
設定ファイルを開きます。ユーザーおよび対応する DN はこのファイルで定義されます。以下に例を示します。system=CN=system,O=Progress,C=US user=CN=humble user,O=Progress,C=US guest=CN=anon,O=Progress,C=DE
前述の設定に基づいて、
system
という名前のユーザーはCN=system,O=Progress,C=US
Subject DN にマッピングされます。<broker_instance_dir>/etc/artemis-roles.properties
設定ファイルを開きます。利用可能なロールと、それらのロールを保持しているユーザーは、このファイルで定義されています。以下に例を示します。admins=system users=system,user guests=guest
上記の設定では、
users
ロールに対して、複数のユーザーをコンマ区切りリストとしてリスト表示します。以下に示すように、セキュリティードメインエイリアス (このインスタンスでは activemq) が
bootstrap.xml
で参照されていることを確認します。<jaas-security domain="activemq"/>
5.2.3.2. AMQP クライアントの証明書ベースの認証の設定
Simple Authentication and Security Layer (SASL) EXTERNAL メカニズム設定パラメーターを使用して、ブローカーへの接続時に証明書ベースの認証用に AQMP クライアントを設定します。
ブローカーは、証明書の認証と同じ方法で、AMQP クライアントの Transport Layer Security (TLS)/Secure Sockets Layer (SSL) 証明書を認証します。
- ブローカーはクライアントの TLS/SSL 証明書を読み取り、証明書のサブジェクトからアイデンティティーを取得します。
- 証明書サブジェクトは、証明書ログインモジュールによってブローカー ID にマッピングされます。その後、ブローカーはロールを基にしてユーザーを承認します。
以下の手順では、AMQP クライアントに証明書ベースの認証を設定する方法を説明します。AMQP クライアントが証明書ベースの認証を使用できるようにするには、クライアントがブローカーへの接続に使用する URI に設定パラメーターを追加する必要があります。
前提条件
以下を設定している必要があります。
- 双方向 TLS詳細は、「双方向 TLS の設定」 を参照してください。
- 証明書ベースの認証を使用するブローカー。詳細は、「証明書ベースの認証を使用するブローカーの設定」 を参照してください。
手順
編集する URI が含まれるリソースを開きます。
amqps://localhost:5500
sslEnabled=true
パラメーターを追加して、接続の TSL/SSL を有効にします。amqps://localhost:5500?sslEnabled=true
クライアントトラストストアおよびキーストアに関連するパラメーターを追加して、ブローカーで TSL/SSL 証明書の交換を有効にします。
amqps://localhost:5500?sslEnabled=true&trustStorePath=<trust_store_path>&trustStorePassword=<trust_store_password>&keyStorePath=<key_store_path>&keyStorePassword=<key_store_password>
パラメーター
saslMechanisms=EXTERNAL
を追加し、TSL/SSL 証明書で見つかったアイデンティティーを使用してブローカーがクライアントを認証するよう要求します。amqps://localhost:5500?sslEnabled=true&trustStorePath=<trust_store_path>&trustStorePassword=<trust_store_password>&keyStorePath=<key_store_path>&keyStorePassword=<key_store_password>&saslMechanisms=EXTERNAL
関連情報
- AMQ Broker での証明書ベースの認証に関する詳細は、「証明書ベースの認証を使用するブローカーの設定」 を参照してください。
- AMQP クライアントの設定に関する詳細は、クライアント固有の製品ドキュメントについて Red Hat カスタマーポータル を参照してください。