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 セキュリティー認証情報を認証するようにブローカーを設定します。

次のセクションでは、ユーザーとパスワードと証明書ベースの認証の両方を設定する方法を説明します。

関連情報

5.2.2. プロパティーファイルに基づくユーザーおよびパスワード認証の設定

AMQ Broker は、アドレスに基づいてキューにセキュリティーを適用するための柔軟なロールベースのセキュリティーモデルをサポートします。キューは、1 対 1(ポイントツーポイントメッセージングの場合) または多対 1(パブリッシュ/サブスクライブメッセージング用) のいずれかのアドレスにバインドされます。メッセージがアドレスに送信されると、ブローカーはそのアドレスにバインドされたキューのセットを検索し、メッセージをそのキューのセットにルーティングします。

基本的なユーザーとパスワード認証が必要な場合は、PropertiesLoginModule を使用して定義します。このログインモジュールは、ブローカーにローカルに保存される以下の設定ファイルに対してユーザーの認証情報をチェックします。

artemis-users.properties
ユーザーおよび対応するパスワードの定義に使用
artemis-roles.properties
ロールを定義し、ユーザーをそれらのロールに割り当てるのに使用します。
login.config
ユーザーおよびパスワード認証、およびゲストアクセス用のログインモジュールの設定に使用

artemis-users.properties ファイルには、セキュリティーを確保するために、ハッシュ化されたパスワードを含めることができます。

以下のセクションでは、設定方法を説明します。

5.2.2.1. 基本的なユーザーとパスワード認証の設定

以下の手順は、基本的なユーザーとパスワード認証を設定する方法を説明します。

手順

  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
    ユーザーをログインモジュール実装に定義されたロールにマップするプロパティーファイルを指定します。
  2. <broker_instance_dir>/etc/artemis-users.properties 設定ファイルを開きます。
  3. ユーザーを追加して、ユーザーにパスワードを割り当てます。以下に例を示します。

    user1=secret
    user2=access
    user3=myPassword
  4. <broker_instance_dir>/etc/artemis-roles.properties 設定ファイルを開きます。
  5. artemis-users.properties ファイルに追加したユーザーにロール名を割り当てます。以下に例を示します。

    admin=user1,user2
    developer=user3
  6. <broker_instance_dir>\etc\bootstrap.xml 設定ファイルを開きます。
  7. 必要に応じて、以下のようにセキュリティードメインエイリアス (このインスタンスでは activemq) をファイルに追加します。

    <jaas-security domain="activemq"/>

5.2.2.2. ゲストアクセスの設定

ログイン認証情報がないユーザーや、認証情報が認証に失敗するユーザーの場合は、ゲストアカウントを使用してブローカーへの制限されたアクセスを付与できます。

コマンドラインの切り替えを使用して --allow-anonymous (--require-login の逆)、ゲストアクセスを有効にし、ブローカーインスタンスを作成できます。

以下の手順は、ゲストアクセスを設定する方法を説明します。

前提条件

手順

  1. 基本的なユーザーとパスワード認証用に指定した <broker_instance_dir>/etc/login.config 設定ファイルを開きます。
  2. 以前追加したプロパティーログインモジュール設定の後に、ゲストログインモジュール設定を追加します。以下に例を示します。

    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 に設定する必要があります。

プロパティーログインモジュールは、認証情報が提供されているとアクティベートされます。クレデンシャルが有効である必要があります。

関連情報

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 の設定」 を参照してください。

手順

  1. 以前ブローカーキーストアにインポートされたユーザー証明書からサブジェクト 識別名 (DN) を取得します。

    1. キーストアファイルから一時ファイルに証明書をエクスポートします。以下に例を示します。

      keytool -export -file <file_name> -alias broker-localhost -keystore broker.ks -storepass <password>
    2. エクスポートされた証明書の内容を出力します。

      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`
  2. 証明書ベースの認証を設定します。

    1. <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
      ユーザーをログインモジュール実装に定義されたロールにマップするプロパティーファイルを指定します。
    2. <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 にマッピングされます。

    3. <broker_instance_dir>/etc/artemis-roles.properties 設定ファイルを開きます。利用可能なロールと、それらのロールを保持しているユーザーは、このファイルで定義されています。以下に例を示します。

      admins=system
      users=system,user
      guests=guest

      上記の設定では、users ロールに対して、複数のユーザーをコンマ区切りリストとしてリスト表示します。

    4. 以下に示すように、セキュリティードメインエイリアス (このインスタンスでは 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) 証明書を認証します。

  1. ブローカーはクライアントの TLS/SSL 証明書を読み取り、証明書のサブジェクトからアイデンティティーを取得します。
  2. 証明書サブジェクトは、証明書ログインモジュールによってブローカー ID にマッピングされます。その後、ブローカーはロールを基にしてユーザーを承認します。

以下の手順では、AMQP クライアントに証明書ベースの認証を設定する方法を説明します。AMQP クライアントが証明書ベースの認証を使用できるようにするには、クライアントがブローカーへの接続に使用する URI に設定パラメーターを追加する必要があります。

前提条件

手順

  1. 編集する URI が含まれるリソースを開きます。

    amqps://localhost:5500
  2. sslEnabled=true パラメーターを追加して、接続の TSL/SSL を有効にします。

    amqps://localhost:5500?sslEnabled=true
  3. クライアントトラストストアおよびキーストアに関連するパラメーターを追加して、ブローカーで TSL/SSL 証明書の交換を有効にします。

    amqps://localhost:5500?sslEnabled=true&trustStorePath=<trust_store_path>&trustStorePassword=<trust_store_password>&keyStorePath=<key_store_path>&keyStorePassword=<key_store_password>
  4. パラメーター 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

関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.