セキュリティーアーキテクチャー


Red Hat JBoss Enterprise Application Platform 6.4

セキュリティーアーキテクチャーガイド

概要

本書では、JBoss EAP 6 内のセキュリティー概念の概要と、これらの概念を実装するために存在するコンポーネントに重点を置いています。このドキュメントでは、何であるかと、その理由、またその理由、および特定のシナリオの設定方法を他のドキュメントで行う方法に焦点を当てています。本書をお読みいただくと、JBoss EAP 6 内のセキュリティーに関するコンポーネントの概念や、これらのコンポーネントがどのように連携するかを理解しておく必要があります。

第1章 一般的なセキュリティー概念の概要

JBoss EAP 6 がセキュリティーをどのように処理するかを調べる前に、基本的なセキュリティー概念を理解することが重要です。

1.1. 認証

認証とは、認証の対象を特定し、その識別情報の真正性を検証することを言います。最も一般的な認証メカニズムはユーザー名とパスワードの組み合わせですが、共有キー、スマートカード、フィンガープリントなどの他のメカニズムは認証にも使用されます。Java Enterprise Edition の宣言的セキュリティーでは、正常な認証の結果は プリンシパル と呼ばれます。

1.2. 承認

承認は、アクセス権を指定したり、アクセスポリシーを定義したりする方法のことです。システムはメカニズムを実装してこれらのポリシーを使用し、要求側のリソースへのアクセスを許可または拒否できます。多くの場合、プリンシパルをロールと呼ばれるアクションまたは場所のセットに一致することで実装され、アクセスができません (ロールと呼ばれることもあります)。

1.3. 実際の認証および承認

認証と承認は異なる概念ですが、それらは非常にリンクされます。認証の処理用に作成された多くのモジュールは承認も処理し、承認も処理します。

アプリケーション MyPersonalSoapbox は、メッセージを投稿および閲覧する機能を提供します。Talk ロールを持つプリンシパルはメッセージを投稿し、投稿された他のメッセージを閲覧することができます。ログインしていないユーザーは Listen ロールを持ち、投稿されたメッセージを表示できます。SuzyAdam、および Bob がアプリケーションを使用します。SuzyBob はユーザー名とパスワードで認証できますが、Adam にはユーザー名とパスワードがありません。Suzy には Talk ロールがありますが、Bob にはロールがありません (TalkListen のいずれか)。Suzy が認証されると、Suzy はメッセージを投稿および表示できます。AdamMyPersonalSoapbox を使用するとログインできませんが、投稿されたメッセージを閲覧することができます。Bob ログイン時には、メッセージを投稿したり、投稿された他のメッセージを表示したりできません。

Suzy は認証と承認の両方になります。Adam は認証されていませんが、(Listen ロールで) 承認され、メッセージを表示します。Bob は認証されますが、承認はありません (ロールなし)。

1.4. 暗号化

暗号化とは、数学的なアルゴリズムを適用して機密情報をエンコードすることを言います。データは、エンコードされた形式に変換 (または暗号化) することで保護されます。データを再度読み取るには、エンコードされた形式を元の形式に変換 (または復号化) する必要があります。暗号化は、ファイルやデータベースの単純な文字列データや、通信ストリーム全体に送信されたデータにも適用できます。

暗号化の例には、以下が含まれます。

  • LUKS を使用して Linux ファイルシステムディスクを暗号化できます。
  • blowfish または AES アルゴリズムを使用して Postgres データベースに格納されたデータを暗号化できます。
  • HTTPS プロトコルは、SSL/TLS を介してすべてのデータを暗号化してから、ある当事者から別のデータに転送します。
  • ユーザーが SSH (Secure Shell) プロトコルを使用してサーバーから別のサーバーに接続すると、すべての通信が暗号化されたトンネルで送信されます。

1.5. SSL/TLS および証明書

Secure Sockets Layer (SSL)/Transport Layer Security (TLS) は、2 つのシステム間のネットワークトラフィックを暗号化します。これは、これらの 2 つのシステム間でのみ交換および認識される対称キーを使用して発生します。SSL/TLS は対称キーをセキュアに交換するために、キーペアを使用する暗号化の手法である Public Key Infrastructure (PKI) を使用します。キーペアは、個別のキーで一致する暗号化キー (公開鍵と秘密鍵) の 2 つで構成されます。パブリックキーは第三者と共有でき、データの暗号化に使用されます。 プライベートキーは秘密のキーとして扱われ、パブリックキーを使用して暗号化されたデータの復号化に使用されます。

クライアントが対称キーを交換するためにセキュアな接続を要求すると、セキュアな通信の開始前にハンドシェイクフェーズが発生します。SSL/TLS ハンドシェイクの間、サーバーはパブリックキーを証明書としてクライアントに渡します。証明書には、サーバーの識別情報 (URL)、サーバーのパブリックキー、および証明書を検証するデジタル署名が含まれます。その後、クライアントは証明書を検証し、証明書が信頼できるかどうかについて決定します。証明書を信頼できる場合、クライアントは SSL/TLS 接続の対称キーを生成し、サーバーのパブリックキーを使用して暗号化し、サーバーに返送します。サーバーはその秘密鍵を用いて対称鍵を復号化し、この接続を介した 2 台のマシン間のさらなる通信は対称鍵を用いて暗号化されます。

証明書には、自己署名 証明書と 認証局署名証明書の 2 つの基本的な種類があります。自己署名証明書は、独自の秘密鍵を使用して署名し、その署名は検証されません (信頼チェーンには接続されません)。認証局署名付き証明書とは、認証局から当事者に対して発行され、その認証局 (Verisign、CAcert、RSA など) によって署名された証明書です。認証局は基本的に、証明書の保持者の信頼性を検証します。

検証自己署名証明書の生成は迅速かつ簡単で、管理に必要なインフラストラクチャーが少なくなりますが、サードパーティーが信頼性を確認していないため、クライアントによる信頼性の検証が困難になる可能性があります。そのため、安全性は低くなります。認証局署名付き証明書は、初期設定に手間がかかるが、クライアントがその真正性を確認するのがはるかに容易です (つまり、第三者が証明書の所有者の真正性を確認したため、信頼の連鎖が構築された)。

1.6. シングルサインオン (SSO)

シングルサインオン (SSO) は、あるリソースに対して認証されたプリンシパルが暗黙的に他のリソースへのアクセスを承認できるようにします。異なるリソースのセットが SSO によってセキュア化された場合、ユーザーはセキュアなリソースのいずれかに初めてアクセスするときにのみ認証される必要があります。認証に成功した後、ユーザーに関連するロールが保存され、関連する他のリソースすべての承認に使用されます。これにより、ユーザーは再認証なしで、承認された追加のリソースにアクセスできます。

ユーザーがリソースからログアウトした場合や、リソースがプログラムでセッションを無効にする場合、永続化された承認データはすべて削除され、プロセスは引き継ぎされます。リソースのセッションタイムアウトが発生した場合は、そのユーザーに関連する有効なリソースセッションが他にあれば SSO セッションは無効化されません。SSO は、web アプリケーションとデスクトップアプリケーションの両方で認証および承認に使用できます。場合によっては、単一の SSO 実装が両方と統合できることがあります。

SSO 内では、システムの異なる概念や部分を示すために共通の用語がいくつかあります。

ID 管理

Identity Management (IDM) とは、1 つ以上のシステムまたはドメイン全体でプリンシパルとそれに関連する認証、承認、および特権を管理する概念のことです。同じ概念を記述するために、Indentity and Access Management (IAM) という用語が使用されることがあります。

アイデンティティープロバイダー

アイデンティティープロバイダー (IDP) とはエンドユーザーを認証し、そのユーザーのアイデンティティーを信頼できる方法で信頼できるパートナーに対してアサートする、権限のあるエンティティーです。

アイデンティティーストア

アイデンティティープロバイダーには、ユーザーの情報を取得する アイデンティティーストア が必要です。この情報は、認証および承認プロセス中に使用されます。アイデンティティーストアには、データベース、LDAP、プロパティーファイルなど、あらゆるタイプのリポジトリーを使用できます。

サービスプロバイダー

サービスプロバイダー は、アイデンティティープロバイダーに依存してユーザーの電子クレデンシャル経由でユーザーに関する情報をアサートし、信頼できるユーザークレデンシャルのアサートを基にアクセス制御と伝播を管理します。

クラスター化および非クラスター化 SSO

非クラスターか SSO は、同じ仮想ホストでアプリケーションへの承認情報の共有を制限します。また、ホストに障害が発生した場合の回復性はありません。クラスター化された SSO のシナリオでは、データを複数の仮想ホストのアプリケーション間で共有できるため、フェイルオーバーに回復性があります。さらに、クラスター化された SSO はロードバランサーからリクエストを受信できます。

1.6.1. サードバーティー SSO 実装

Kerberos

Kerberos はクライアントサーバーアプリケーションのネットワーク認証プロトコルです。これは、秘密鍵の対称暗号を使用して、安全な方法でセキュアでないネットワーク全体で認証を可能にします。

Kerberos はチケットと呼ばれるセキュリティートークンを使用します。セキュアサービスを利用するためには、ユーザーはネットワーク上のサーバーで動作するサービスである Ticket Granting Service (TGS) からチケットを入手する必要があります。チケットの取得後、同じネットワークで実行される別のサービスである認証サービス (AS) からサービスチケット (ST) を要求します。その後、ユーザーは ST を使用して希望のサービスに対して認証されます。TGS と AS は、ともに KDC (Key Distribution Center) と呼ばれる囲い込みサービスの内部で動作します。

Kerberos は、クライアントサーバーデスクトップ環境での使用を目的としているため、通常は web アプリケーションやシンクライアント環境では使用されません。しかし、デスクトップの認証に Kerberos システムをすでに使用しているため、web アプリケーション用のシステムを作成せずに、既存のシステムを再使用したい組織が多くあります。Kerberos は Microsoft Active Directory には欠かせない要素で、Red Hat Enterprise Linux 環境の多くでも使用されています。

SPNEGO

SPNEGO (Simple and Protected GSS_API Negotiation Mechanism) は、Web アプリケーションで使用するために Kerberos ベースの SSO 環境を拡張するメカニズムを提供します。

web ブラウザーなどのクライアントコンピューター上のアプリケーションが web サーバーの保護されたページにアクセスしようとすると、サーバーは承認が必要であることを伝えます。その後、アプリケーションは Kerberos Key Distribution Center (KDC) にサービスチケットを要求します。チケットの取得後、アプリケーションはこのチケットをSPNEGO 向けにフォーマットされたリクエストにラップし、ブラウザーを介して web アプリケーションに返信します。デプロイされた web アプリケーションを実行している web コンテナーはリクエストをアンパックし、チケットを認証します。認証に成功するとアクセスが許可されます。

SPNEGO は、Red Hat Enterprise Linux に含まれる Kerberos サービスや Microsoft Active Directory には不可欠な Kerberos サーバーなど、全タイプの Kerberos プロバイダーと動作します。

Microsoft Active Directory

Microsoft Active Directory (AD) は、Microsoft が開発したディレクトリーサービスで、Microsoft Windows ドメインでユーザーとコンピューターを認証します。Microsoft Windows Server の一部として含まれています。ドメインを制御する Microsoft Windows Server を実行しているコンピューターはドメインコントローラーと呼ばれます。Red Hat Enterprise Linux は Active Directory ドメインと統合でき、Red Hat Identity Management、Red Hat JBoss Enterprise Application Platform、およびその他の Red Hat 製品とも統合できます。

Active Directory は、共に動作する 3 つのコアテクノロジーに依存します。

  1. ユーザー、コンピューター、パスワード、およびその他のリソースに関する情報を格納する軽量 Directory Access Protocol (LDAP)。
  2. Kerberos: ネットワーク上でセキュアな認証を提供します。
  3. ドメインネームサービス (DNS): ネットワーク上のコンピューターおよびその他のデバイスにおける IP アドレスとホスト名との間のマッピングを提供します。

1.6.2. クレームベースのアイデンティティー

SSO を実装する方法は、要求ベースのアイデンティティー システムを使用することです。クレームベースのアイデンティティーシステムでは、システムはアイデンティティー情報を渡すことができますが、その情報をクレーム発行者 (またはオーソリティー) の 2 つに抽象化します。クレームは、ユーザー、グループ、アプリケーション、組織などの 1 つのサブジェクトが他のサブジェクトに関して作成するステートメントです。1 つまたは複数のクレームは、1 つまたは複数のトークンにパッケージ化され、プロバイダーによって発行されます。クレームベースのアイデンティティーでは、個別のセキュアなリソースがユーザーに関する情報をすべて認識しなくても SSO を実装できます。

セキュリティートークンサービス (STS)

セキュリティートークンサービス (STS) は、セキュアなアプリケーション、web サービス、または EJB に対してユーザーを認証および承認するときに使用するセキュリティートークンをクライアントに発行する認証サービスです。STS で保護されたアプリケーション (サービスプロバイダ) に対して認証を行おうとするクライアントは、中央の STS 認証にリダイレクトされ、トークンが発行されます。認証に成功すると、そのクライアントはトークンと元のリクエストを提供してサービスプロバイダーへ再度接続しようとします。そのサービスプロバイダーはクライアントのトークンを STS で検証し、処理を継続します。クライアントは STS に接続する他の web サービスや EJB に対して同じトークンを再使用できます。セキュリティートークンを発行、キャンセル、更新、および検証でき、セキュリティートークンのリクエストおよび応答メッセージの形式を指定する集中管理された STS の概念は、WS-Trust と呼ばれます。

ブラウザーベースの SSO

ブラウザーベースの SSO では、サービスプロバイダーと呼ばれる 1 つ以上の web アプリケーションがハブアンドスポーク型アーキテクチャーの集中管理されたアイデンティティープロバイダーに接続します。IDP (Identity Provider) は、サービスプロバイダー (スポーク) に対して (SAML を介して) クレーム文を発行し、ID およびロール情報の中央ソース (ハブ) として機能します。要求は、ユーザーがサービスプロバイダーにアクセスしようとすると発行したり、ユーザーがアイデンティティープロバイダーを直接認証しようとすると発行されます。これらはそれぞれ SP-initiated フローおよび IDP 開始フローと呼ばれ、どちらも同じ要求ステートメントを実行します。

SAML

SAML (Security Assertion Markup Language) は、通常はアイデンティティープロバイダーとサービスプロバイダーである 2 者が認証および承認情報を交換できるようにするデータ形式です。SAML トークンは、STS または IDP によって発行されるトークンの種類で、SSO の有効化に使用できます。SAML によってセキュア化されるリソースである SAML サービスプロバイダーは、STS または IDP の種類の 1 つである SAML アイデンティティープロバイダーにユーザーをリダイレクトし、そのユーザーを認証および承認する前に有効な SAML トークンを取得します。

デスクトップベースの SSO

デスクトップベース SSO は、サービスプロバイダーとデスクトップドメイン (Active Directory や Kerberos など) がプリンシパルを共有できるようにするものです。これにより、ユーザーはドメインクレデンシャルを使用してコンピューターにログインでき、サービスプロバイダーは認証中にそのプリンシパルを再使用できるため、再認証や SSO の提供が必要ありません。

1.7. LDAP

LDAP (Lightweight Directory Access Protocol) はネットワーク全体でディレクトリー情報を格納および分散するプロトコルです。このディレクトリー情報には、ユーザー、ハードウェアデバイス、アクセスロール、制限に関する情報などが含まれます。

LDAP (Lightweight Directory Access Protocol) において、ディレクトリー内のオブジェクトを一意に識別する DN (Distinguished Name)。各識別名には、他のオブジェクトと区別するための一意名と場所が必要で、これには属性と値のペア (AVP) を使用します。AVP は、共通名、組織単位などの情報を定義します。LDAP に必要となる一意な文字列は、これらの値の組み合わせになります。

LDAP の一般的な実装には、Red Hat Directory Server、OpenLDAP、Microsoft Active Directory、IBM Tivoli Directory Server、Oracle Internet Directory、および 389 Directory Server などが含まれます。

第2章 初期状態の Red Hat JBoss Enterprise Application Platform 6 によるセキュリティーの対処

JBoss EAP 6 以降には、コア管理認証とセキュリティーサブシステムという 2 つのコンポーネントが含まれています。これら 2 つのコンポーネントは、概要のセクションで 説明した一般的なセキュリティーの概念に基づいていますが、「Red Hat JBoss Enterprise Application Platform 固有の概念」 のセクションで説明した JBoss EAP 固有の概念も実装に取り入れられています。

2.1. Red Hat JBoss Enterprise Application Platform 固有の概念

1章一般的なセキュリティー概念の概要 セクションで説明されている一般的なセキュリティー概念に加えて、JBoss EAP および JBoss EAP セキュリティーに固有の概念を理解することが重要です。

2.1.1. コアサービス、サブシステム、およびプロファイル

JBoss EAP 6 は、モジュールクラスローディングの概念に基づいて構築されています。JBoss EAP によって提供される各 API およびサービスはモジュールとして実装され、必要に応じてロードおよびアンロードされます。コアサービスは、サーバーの起動時に常にロードされるサービスで、追加のサブシステムを起動する前に実行する必要があります。

サブシステムは、拡張によってコアサーバーに追加される機能の追加セットです。サブシステムの例としては、サーブレット処理機能を提供するサブシステム、EJB コンテナーを提供するサブシステム、JTA を提供するサブシステムなどがあります。

プロファイルはサブシステムの名前付きリストで、各サブシステムの設定の詳細と提供されます。プロファイルのサブシステムの数が多いと、サーバーの機能が多くなります。プロファイルのサブシステムが集中的で数が少ないと、機能が少なくなりますが、フットプリントも少なくなります。デフォルトで、JBoss EAP 6 には、いくつかの事前定義されたプロファイル (default、full、ha、full-ha など) が付属しています。これらのプロファイルでは、管理インターフェースと関連するセキュリティーレルムはコアサービスとしてロードされます。

2.1.2. 管理インターフェース

JBoss EAP 6 は、その設定を操作および編集するための 2 つの異なる管理インターフェイス (API) を提供します。管理コンソール (HTTP API) と管理 CLI (ネイティブ API) です。これらのインターフェイスはいずれも、JBoss EAP のコア管理の機能を公開するものです。つまり、これらのインターフェイスは、同じ基幹管理システムにアクセスするための 2 つの方法を提供しているのです。

管理コンソールは、JBoss EAP 6 の Web ベースの管理ツールです。サーバーの開始および停止、アプリケーションのデプロイおよびアンデプロイ、システム設定の調整、サーバー設定への永続的な変更を行うために使用できます。管理コンソールは、管理タスクを実行する機能も持ち、変更の反映にサーバーインスタンスの再起動またはリロードが必要な場合はライブ通知も行います。管理対象ドメインでは、同じドメイン内のサーバーインスタンスやサーバーグループをドメインコントローラーの管理コンソールから集中管理できます。

管理コマンドラインインターフェース (CLI) は、JBoss EAP 6 のコマンドライン管理ツールです。管理 CLI は、サーバーの開始および停止、アプリケーションのデプロイおよびアンデプロイ、システム設定の指定、およびその他の管理タスクの実行に使用できます。操作はバッチモードで実行可能で、複数のタスクをグループとして実行できます。管理CLIは、マネージドドメインのドメインコントローラーへの接続が可能で、ドメイン上で管理操作を実行できます。管理 CLI は、web ベースの管理ツールが実行できるタスクをすべて実行でき、web ベースの管理ツールでは利用できない多くの細かな低レベル操作も実行できます。

注記

JBoss EAP 6 に含まれる API を使用すると、JBoss EAP 6 に同梱されるクライアントだけでなく、他のクライアントを作成して HTTP またはネイティブインターフェイス上で管理インターフェイスを呼び出しすることができます。

2.1.3. セキュリティーレルム

セキュリティーレルムは、ユーザー、パスワード、およびグループメンバーシップ情報のアイデンティティーストアで、EJB、Web アプリケーション、および管理インターフェースのユーザーを認証するときに使用されます。デフォルトでは、JBoss EAP 6 には事前設定された ManagementRealm および ApplicationRealm の 2 つのセキュリティーレルムが含まれています。これらのセキュリティー領域はいずれも、ユーザーとパスワード、ユーザーとグループメンバーの情報のマッピングを保存するためにファイルシステムを使用し、認証の際にはデフォルトでダイジェスト機構を使用する。

ダイジェスト機構とは、簡単に言えば、users/password マッピングプロパティーファイルに格納された情報を含む様々な情報から設定されるワンタイム、ワンウェイハッシュを利用してユーザーを認証する機構である。これにより、JBoss EAP はネットワーク上でプレーンテキストのパスワードを送信せずに認証を行うことができます。

スクリプトは JBoss EAP 6 インストールに含まれています。これにより、管理者は両方のレルムにユーザーを追加できます。このようにユーザーを追加すると、ユーザー名とハッシュ化されたパスワードは対応するユーザー/パスワードプロパティーファイルに保存されます。ユーザーが認証を試みると、JBoss EAP は nonce という 1 度限りの番号をクライアントに送信します。次にクライアントは、ユーザー名、パスワード、nonce、その他いくつかのフィールドを使用して一方向ハッシュを生成し、JBoss EAP にユーザー名、nonce、一方向ハッシュを返送します。次に JBoss EAP は、ユーザーの事前ハッシュ化されたパスワードを検索し、提供されたユーザー名と nonce および他のいくつかのフィールドとともにそれを使用して、同じ方法で別の一方向ハッシュを生成します。双方で同じ情報 (正しいパスワードなど) が使用されていれば、ハッシュは一致し、ユーザーは認証されます。

セキュリティーレルムはデフォルトでダイジェスト認証を使用しますが、他の認証方法を使用するように再設定することもできます。管理インターフェースは起動時に、ManagementRealm に設定された認証方法を基にして、有効化される認証方法を判断します。

セキュリティーレルムは承認には全く関与しません。しかし、後で承認の決定に使用されるユーザーのグループメンバーシップ情報をロードするよう設定することが可能です。ユーザーの認証後、ユーザー名を基にグループメンバーシップ情報をロードする 2 つ目の手順が発生します。

デフォルトでは、ManagementRealm は管理インターフェースの認証および承認中に使用されます。ApplicationRealm は、web アプリケーションと EJB がユーザーの認証および承認時に使用できるデフォルトのレルムです。

2.1.4. セキュリティードメイン

セキュリティードメインは JAAS (Java Authentication and Authorization Service) の宣言的なセキュリティー設定で、認証、承認、監査、およびマッピングを制御するために 1 つ以上のアプリケーションによって使用されます。デフォルトでは、jboss-ejb-policyjboss-web-policyother 3 つのセキュリティードメインが含まれています。jboss-ejb-policy および jboss-web-policy は、アプリケーションの設定済みのセキュリティードメインがない場合に使用されるデフォルトの承認メカニズムです。これらのセキュリティードメインと other は承認のために JBoss EAP の内部でも使用されるため、適切な操作に必要です。

セキュリティードメインは、認証、承認、セキュリティーマッピング、および監査の設定で構成されます。セキュリティードメインは、JBoss EAP 6 セキュリティーサブシステムの一部で、ドメインコントローラーまたはスタンドアロンサーバーによって一元管理されます。ユーザーは、アプリケーションの要件に応じて必要な数のセキュリティードメインを作成できます。

2.1.5. セキュリティーレルムとセキュリティードメインの使用

JBoss EAP にデプロイされた web アプリケーションのセキュア化の一部として、セキュリティーレルムとセキュリティードメインの両方を使用できます。セキュリティーレルムとセキュリティードメインの違いを理解してから、どちらを使用するかを決定することが重要になります。

web アプリケーションと EJB デプロイメントは、セキュリティードメインのみを直接使用できます。セキュリティードメインは、アイデンティティーストアから渡されたアイデンティティー情報を使用するログインモジュールを使用して実際の認証と承認を実行します。セキュリティードメインは、ID 情報のためにセキュリティーレームを使用するように設定することができる (たとえば、other では、アプリケーションは認証と認可情報の取得に使用するセキュリティーレームを指定できる) が、外部の ID ストアを使用するように設定することもできます。認証にセキュリティーレルムを直接使用するよう Web アプリケーションと EJB デプロイメントを設定することはできません。セキュリティードメインは security サブシステムの一部でもあるため、コアサービスの後にロードされます。

Security Realms を直接使用できるのは、コアマネジメント (管理インターフェイスなど) と EJB リモーティングエンドポイントのみです。セキュリティーレルムは、認証および承認情報を提供するアイデンティティーストアです。コアサービスの 1 つでもあり、サブシステムの起動前にロードされます。ManagementRealm および ApplicationRealm は初期状態のセキュリティーレルムで、簡単なファイルベースの認証を使用しますが、別の認証を使用するよう設定できます。

2.1.6. セキュリティー監査

セキュリティー監査とは、ログへの書き込みなど、security サブシステム内で発生するイベントに対してトリガーするイベントのことです。監査方法は、認証、承認、およびセキュリティーマッピングの詳細とともにセキュリティードメインの一部として設定されます。セキュリティーイベントの報告方法を制御するため、監査にはプロバイダーモジュールが使用されます。JBoss EAP には複数のセキュリティー監査プロバイダーが含まれますが、カスタムのプロバイダーを使用することもできます。また、JBoss EAP のコア管理には、security サブシステムの一部ではなく別に設定される独自のセキュリティー監査およびロギング機能があります。

2.1.7. セキュリティーマッピング

セキュリティーマッピングを使用すると、認証または承認後、情報がアプリケーションに渡される前に認証情報と承認情報を組み合わせることができます。ロール (承認)、プリンシパル (認証)、またはクレデンシャル (プリンシパルでもロールでもない属性) はすべてマッピングされる可能性があります。ロールマッピングは、認証後にサブジェクトへロールを追加、置換、または削除するために使用されます。プリンシパルマッピングは、認証後にプリンシパルを変更するために使用されます。クレデンシャル (属性) マッピングは、外部システムからの属性値をアプリケーションで使用するために変換したり、逆にそのような外部システムへ属性を変換したりするために使用されます。

2.1.8. JMX

JMX (Java Management Extensions) は、JDK およびアプリケーション管理操作をリモートで行う方法を提供します。JBoss EAP 6 の管理 API は、JMX 管理 Bean として公開されます。管理 Bean は core mbeans と呼ばれ、これらの Bean へのアクセスは基礎の管理 API 自体と全く同じように制御およびフィルターされます。

注記

JBoss EAP 6 以前では、管理機能は主に JMX ベースでした。つまり、管理機能は、操作を実行するためにこれらの JMX 公開された Bean に依存していました。JBoss EAP 6 では、コア管理は操作の実行に依存しません。JMX で公開された Bean は、現在、(ネイティブおよび http インターフェイスに加えて) 管理操作にアクセスし、実行するための代替メカニズムに過ぎません。

2.1.9. ロールベースのアクセス制御

ロールベースのアクセス制御 (RBAC) は管理ユーザーにパーミッションを指定するメカニズムです。JBoss EAP 6 サーバーの管理責任を複数のユーザーに分担でき、各ユーザーは無制限のアクセスを必要としません。JBoss EAP 6 は、管理ユーザーの 役割 を分離することで、組織が不必要な特権を与えることなく、個人やグループ間で責任を分散させることを容易にすることができます。これにより、設定、デプロイメント、および管理の柔軟性を維持しながらサーバーやデータのセキュリティーを可能な限り最大限にします。

JBoss EAP 6 のロールベースアクセス制御は、ロールパーミッションと制約の組み合わせにより動作します。それぞれに異なる固定パーミッションを持つ 7 つの事前定義されたロールが提供されます。各管理ユーザーには、サーバーの管理時に許可される動作を指定する 1 つ以上のロールが割り当てられます。

ロールベースアクセス制御は JBoss EAP 6.2 以降でサポートされますが、デフォルトでは無効になっています。

標準のロール

JBoss EAP 6 には、MonitorOperatorMaintainerDeployerAuditorAdministrator、および SuperUser の 7 つユーザーロールが事前定義されています。これらのロールにはそれぞれ異なるパーミッションセットがあり、特定のユースケース用に設計されています。パーミッションの数は、MonitorOperatorMaintainerAdministratorSuperUser ロールの順に多くなり、それぞれその前のロールのパーミッションを持ちます。Auditor ロールと Deployer ロールは Monitor ロールと Maintainer ロールと似ていますが、特別なパーミッションと制限が追加されています。

Monitor
Monitor ロールは最も少ないパーミッションを持ち、現在の設定とサーバーの状態のみを読み取りできます。このロールは、サーバーのパフォーマンスを追跡および報告する必要があるユーザーを対象としています。Monitor はサーバー設定を変更したり、機密データおよび操作にアクセスしたりできません。
Operator
Operator ロールは Monitor ロールのパーミッションに加え、サーバーのランタイム状態を変更することができます。このため、Operator ロールを持つユーザーはサーバーのリロードおよびシャットダウンを実行でき、JMS 宛先の一時停止および再開も実行できます。Operator ロールは、必要時にサーバーを確実にシャットダウンおよび再起動できるため、アプリケーションサーバーの物理または仮想ホストの責任者に適したロールです。Operator はサーバー設定を変更したり、機密データおよび操作にアクセスしたりできません。
Maintainer
Maintainer ロールは、ランタイム状態と、機密データおよび機密操作を除くすべての設定を表示および変更できます。Maintainer ロールは機密データと機密操作にアクセスできない汎用のロールです。Maintainer ロールを持つユーザーには、パスワードやその他の機密情報へのアクセスを許可せずに、サーバー管理に必要なほぼ完全なアクセス権利を付与することができます。Maintainer は機密データまたは操作へアクセスできません。
Administrator
Administrator ロールは、監査ロギングシステムを除くサーバーのすべてのリソースおよび操作に無制限にアクセスできます。Administrator ロールは機密のデータおよび操作にアクセスできます。また、このロールはアクセス制御システムも設定できます。Administrator ロールは、機密データを扱う場合やユーザーやロールを設定する場合のみ必要となります。Administrator は監査ロギングシステムへアクセスできず、Administrator 自身を Auditor または SuperUser ロールへ変更できません。
SuperUser
SuperUser ロールには制限がなく、監査ロギングシステムを含むサーバーのすべてのリソースおよび操作に完全アクセスできます。このロールは、JBoss EAP 6 の以前のバージョン (6.0 および 6.1) の管理者ユーザーと同等です。RBAC が無効の場合、すべての管理ユーザーは SuperUser ロールと同等のパーミッションを持ちます。
Deployer
Deployer ロールは Monitor と同じパーミッションを持ちますが、デプロイメントの設定や状態を変更でき、アプリケーションリソースとして有効になっている他のリソースタイプも変更できます。
Auditor
Auditor ロールは、Monitor ロールのすべての権限を持ち、機密データを閲覧 (変更不可) でき、監査ログシステムへのフルアクセスも可能です。Auditor ロールは SuperUser 以外のロールで、監査ロギングシステムにアクセスできます。監査者は機密データやリソースを変更できません。読み込みアクセスのみが許可されています。

Permissions

各ロールの権限は、各ロールの権限で定義されます。すべてのロールにすべてのパーミッションがあるわけではありません。SuperUser にすべてのパーミッションがあり、Monitor のパーミッションは最も少なくなります。各パーミッションは、リソースの単一のカテゴリーへの読み取りアクセスや書き込みアクセスを付与できます。カテゴリーは、ランタイム状態、サーバー設定、機密データ、監査ログ、およびアクセス制御システムです。

Expand
表2.1 各ロールのパーミッション
 MonitorOperatorMaintainerDeployerAuditorAdministratorSuperUser

設定と状態の読み取り

X

X

X

X

X

X

X

機密データの読み取り 2

    

X

X

X

機密データの変更 2

     

X

X

監査ログの読み取り/変更

    

X

 

X

ランタイム状態の変更

 

X

X

X1

 

X

X

永続化設定の変更

  

X

X1

 

X

X

アクセス制御の読み取り/変更

     

X

X

1 パーミッションはアプリケーションリソースに制限されます。

2 機密データとして考慮されるリソースは、Sensitivity で設定されます。

制約

制約とは、指定のリソースリストに対するアクセス制御設定の名前付きセットです。RBAC システムは制約とロールパーミッションの組み合わせを使用して、特定ユーザーが管理操作を実行できるかどうかを決定します。

制約は、以下の 3 つの分類に分類されます。

アプリケーション制約
アプリケーション制約とは、Deployer ロールのユーザーがアクセスできるリソースと属性のセットを定義するものです。デフォルトで有効になっているアプリケーション制約はコアのみで、デプロイメントとデプロイメントオーバーレイが含まれます。アプリケーション制約には、データソース、ロギング、メール、メッセージング、ネーミング、リソースアダプター、およびセキュリティーも含まれますが、デフォルトでは有効になっていません。これらの制約によって、Deployer ユーザーはアプリケーションをデプロイできるだけでなく、これらのアプリケーションが必要とするリソースを設定および維持できます。
機密性制約
機密性制約は、機密 として考慮されるリソースのセットを定義します。通常、機密リソースとは、パスワードなどの秘密のリソースや、ネットワーキング、JVM 設定、システムプロパティーなどのサーバーの操作に重大な影響を与えるリソースのことです。アクセス制御システム自体も機密であると見なされます。機密リソースへの書き込みが許可されるロールは Administrator と SuperUser ロールのみです。Auditor ロールは機密リソースの読み取りのみが許可されます。その他のロールは機密リソースにアクセスできません。
vault 式制約
Vault 式制約は、vault 式の読み取りまたは書き込みが機密操作として考慮されるかどうかを定義します。デフォルトでは、vault 式の読み書きは機密操作です。

2.1.10. 宣言型セキュリティーと JAAS

宣言型セキュリティーは、コンテナーを使用してセキュリティーを管理することでアプリケーションコードからセキュリティーの懸念を分離する方法です。コンテナーはファイルパーミッション、またはユーザー、グループ、およびロールを基に承認システムを提供します。通常この方法は、アプリケーション自体にセキュリティーの責任をすべて与えるプログラムによるセキュリティーよりも優れています。JBoss EAP 6 は、Security Subsystem の Security Domain を介して宣言的なセキュリティーを提供します。

Java Authentication and Authorization Service (JAAS) は、ユーザー認証と認可のために設計された一連の Java パッケージからなる宣言的なセキュリティー API です。この API は 標準の PAM (Pluggable Authentication Modules) フレームワークの Java 実装です。Java EE アクセス制御アーキテクチャーを拡張し、ユーザーベースの承認をサポートします。JBoss EAP 6 の security サブシステムは実際に JAAS API をベースにしています。

JAAS はセキュリティーサブシステムの基盤であるため、認証はプラグイン方式で行われます。これにより、Java アプリケーションは Kerberos や LDAP などの基礎の認証技術から独立でき、セキュリティーマネージャーは異なるセキュリティーインフラストラクチャーで機能できます。セキュリティーマネージャーの実装を変更しなくてもセキュリティーインフラストラクチャーとの統合を実現できます。JAAS が使用する認証スタックの設定のみを変更する必要があります。

2.2. コア管理認証

コア管理認証は、ManagementRealm を使用してコア管理機能向けに管理インターフェース (HTTP およびネイティブ) をセキュア化します。コア管理認証はコア管理に内蔵され、デフォルトではコアサービスとして有効化および設定されます。管理インターフェースのセキュア化のみを行います。

2.2.1. デフォルトのセキュリティー

デフォルトでは、コア管理認証は HTTP と ネイティブの各管理インターフェースを、ローカルクライアントとリモートクライアントの 2 つの形式でセキュア化します。これら両方は、デフォルトでは ManagementRealm セキュリティーレルムを使用して設定されます。デフォルトの設定は変更可能で、設定を完全に置き換えることもできます。管理インターフェイスをセキュアにする以外に、HTTP およびネイティブインターフェイスをそれぞれ無効にすることができます。

注記

初期状態の管理インターフェースは、ロールを使用しない簡単なアクセス制御を使用するよう設定されています。デフォルトでは、簡単なアクセス制御を使用するとすべてのユーザーに SuperUser ロールと同じ権限が与えられ、原則的にアクセスが制限されません。

2.2.1.1. ネイティブインターフェースによるローカルおよびリモートクライアント認証

ネイティブインターフェイス (CLI) は、実行中の JBoss EAP インスタンスと同じホスト (ローカル) または jboss-cli スクリプトを使用して別のマシン (リモート) から呼び出すことができます。Native Interface 経由で接続しようとすると、JBoss EAP はクライアントに利用可能な SASL 認証メカニズム (たとえば、ローカル jboss ユーザー、BASIC など) のリストを提示します。クライアントは希望する認証方法を選択し、JBoss EAP インスタンスとの認証を試行します。認証に失敗すると、他の方法で認証を再試行するか、接続の確立を停止します。ローカルクライアントは local jboss user 認証メカニズムを使用するオプションがあります。このセキュリティーメカニズムは、ローカルファイルシステムにアクセスできるクライアントの機能を基にしています。これは、ログインしようとしているユーザーが JBoss EAP インスタンスと同じホスト上のローカルファイルシステムにアクセスできる権限があるかを単に検証します。

この認証は 4 つのステップで行われます。

  1. クライアントは、local jboss user を使用した認証リクエストが含まれるメッセージをサーバーに送信します。
  2. サーバーは 1 度限りのトークンを生成して、固有のファイルに書き込み、そのファイルのフルパスが含まれるメッセージをクライアントに送信します。
  3. クライアントはファイルよりトークンを読み取り、サーバーへ送信し、ファイルシステムへローカルアクセスできるかを検証します。
  4. サーバーはトークンを検証し、ファイルを削除します。

このような認証は、ファイルシステムへ物理的にアクセスできれば他のセキュリティーメカニズムは不要であるという原理に基づいています。これは、ユーザーがローカルのファイルシステムにアクセスできれば、ユーザーは新規ユーザーを作成できる権限があり、そうでなければ他のセキュリティーメカニズムが阻止されるという論理です。これは、ローカルユーザーがユーザー名やパスワードの認証なしに管理 CLI にアクセスできることから、サイレント認証 と呼ばれることもあります。

この機能は利便性のためと、管理 CLI スクリプトを実行しているローカルユーザーの追加認証を不要にするために有効になっています。通常、ユーザーがローカル設定にアクセスできれば、独自のユーザー詳細を追加することもできるため便利な機能と見なされます。

リモートクライアントとして、別のサーバーや同じサーバーからネイティブインターフェイスにアクセスすることもできます。リモートクライアントとしてネイティブインターフェースにアクセスする場合、local jboss user を使用してクライアントを認証することはできず、ダイジェストなどの別の認証を使用するよう強制されます。local jboss user を使用したローカルクライアントの認証に失敗すると、自動的にフォールバックされ、リモートクライアントとして別の認証方法の使用を試みます。

注記

ネイティブインターフェースではなく HTTP インターフェースを使用して、別のサーバーや同じサーバーから管理 CLI を呼び出すことができます。CLI であるかに関わらず、すべての HTTP 接続はリモートとして考慮され、ローカルインターフェースの認証では処理されません

2.2.1.2. HTTP インターフェースによるローカルおよびリモートクライアント認証

HTTP Interface は、実行中の JBoss EAP インスタンスと同じホスト上のクライアント (ローカル) または別のマシンからのクライアント (リモート) が呼び出すことができます。ローカルおよびリモートクライアントの両方は HTTP インターフェイスにアクセスできますが、HTTP インターフェイスにアクセスするすべてのクライアントはリモート接続として処理されます。

クライアントが HTTP 管理インターフェースへの接続を試みると、JBoss EAP は HTTP 応答とともに状態コード 401 (認証が必要) と、サポートされる認証メカニズム (ダイジェストや GSSAPI など) をリストする一連のヘッダーを返信します。ダイジェストのヘッダーには、JBoss EAP によって生成された nonce も含まれます。クライアントはヘッダーを確認して使用する認証方法を選択し、適切な返答を送信します。クライアントがダイジェストを選択した場合、ユーザーにユーザー名とパスワードの入力を要求します。クライアントは、ユーザー名やパスワードなどの提供されたフィールド、nonce、その他の情報を使用し、一方向ハッシュを生成します。その後、一方向ハッシュ、ユーザー名、および nonce を返答として JBoss EAP に返信します。その後、JBoss EAP はその情報を取得し、別の一方向ハッシュを生成し、これら 2 つを比較して結果に基づいてユーザーを認証します。

2.2.2. 高度なセキュリティー

保護方法に影響を及ぼす、管理インターフェースや認証/承認方法のデフォルト設定を変更する方法は複数あります。

2.2.2.1. 管理インターフェースの更新

JBoss EAP 6 では、管理者は認証および承認方法を変更できるだけでなく、管理インターフェース自体の設定も更新できます。これには複数のオプションがあります。

HTTPS を使用するための管理インターフェイスの設定
HTTPS 経由でのみ通信するように JBoss EAP 管理コンソールを設定すると、セキュリティーが強化されます。クライアントと管理コンソール間のネットワークトラフィックはすべて暗号化されるため、仲介者攻撃などのセキュリティー攻撃のリスクが軽減されます。JBoss EAP インスタンスの管理者は、そのインスタンスに対して非特権ユーザーよりも多くのパーミッションを持ち、HTTPS を使用するとそのインスタンスの整合性や可用性の保護に役立ちます。JBoss EAP 6 で HTTPS を設定するとき、認証局が署名した証明書は信頼チェーンを提供するため、自己署名証明書よりも優先されます。自己署名証明書は許可されますが、推奨されません。
双方向 SSL/TLS の使用
クライアント認証とも呼ばれる双方向 SSL/TLS 認証は、SSL/TLS 証明書を使用してクライアントとサーバーの両方を認証します。そのため、サーバーの伝えるアイデンティティーだけでなく、クライアントの伝えるアイデンティティーも信頼できます。
HTTP および HTTPS トラフィック用の配信ネットワークインターフェースの使用
管理インターフェイスは、HTTP と HTTPS の接続を別々のネットワークインターフェイスでリッスンすることができます。たとえば、管理者は、内部向けインターフェイスが HTTP トラフィックを受け入れることができる間は、HTTPS トラフィックをリッスンするように外部インターフェースを設定することができます。サーバーが同じインターフェースの HTTP および HTTPS トラフィックをリッスンする場合、HTTP リスナーによって受信される HTTPS 要求は自動的に HTTPS ポートにリダイレクトされます。HTTP および HTTPS トラフィックに個別のインターフェースが使用される場合、HTTP リスナーが HTTPS 要求を受信する際にリダイレクトは実行されません。
管理インターフェースの無効化
管理対象ドメインや JBoss Operations Network などの他の管理クライアントを使用する場合、管理者は HTTP インターフェイス、ネイティブインターフェイス、または Web コンソールを無効にしたい場合があります。これらの各インターフェイスは、無効にしたり、完全に削除したりすることができます。
注記

ネイティブインターフェイスは、JBoss EAP 6 がドメインモードで動作しているときに、スレーブドメインコントローラーとの通信など、いくつかの目的で使用されます。そのため、ドメインモードで動作させる場合は、ネイティブインターフェイスを無効化しないでください。

新しいセキュリティーレルムの更新および作成
デフォルトのセキュリティーレルムは更新可能で、新しいセキュリティーレルムに置き換えることもできます。
2.2.2.2. アウトバウンド接続の追加

セキュリティーレルムには、LDAP サーバーなどの外部インターフェースに接続するものあります。アウトバウンド接続は、このような接続の確立方法を定義します。事前定義された接続タイプ ldap-connection は、LDAP サーバーへ接続し、クレデンシャルを検証するために必要な属性と任意の属性をすべて設定します。

2.2.2.3. 管理インターフェースへの RBAC の追加

デフォルトでは、Role-Based Access Control (RBAC) システムが無効になっています。有効にするには、provider 属性を simple から rbac に変更します。これは、jboss-cli スクリプトを使用して実行できます。稼働中のサーバーで RBAC を無効化または有効化した場合、サーバー設定をリロードして変更を反映する必要があります。

管理インターフェースに対して RBAC が有効化された場合、アクセスできるリソースとリソースの属性で実行できる操作は、ユーザーに割り当てられたロールによって決定されます。Administrator または SuperUser ロールのユーザーのみがアクセス制御システムを閲覧および変更できます。

警告

ユーザーとロールを適切に設定せずに RBAC を有効にすると、管理者が管理インターフェースにログインできなくなることがあります。

RBAC が管理コンソール (Web コンソール) に与える影響

管理コンソールでは、ユーザーに割り当てられたロールのパーミッションによっては、制御およびビューの一部が無効化 (灰色で表示) されたり、全く表示されないことがあります。

ユーザーがリソース属性の読み取り権限を持たない場合、その属性はコンソールでは空欄で表示されます。たとえば、ほとんどのロールはデータソースのユーザー名およびパスワードフィールドを読み取りできません。

ユーザーがリソース属性の読み取り権限を持ち、書き込み権限は持たない場合、その属性はリソースの編集フォームで無効化 (グレーアウト) されます。ユーザーがリソースへの書き込み権限を持たない場合、そのリソースの編集ボタンは表示されません。

ユーザーがリソースや属性にアクセスする権限を持っていない (そのロールに対して アドレス指定ができない) 場合、そのユーザーのコンソールには表示されません。この例の 1 つがアクセス制御システム自体で、デフォルトでは特定のロールのみが閲覧できます。

管理コンソールは、以下の一般的な RBAC タスクに対してもインターフェースを提供します。

  • 各ユーザーへ割り当てられた (または除外された) ロールの表示および設定
  • 各グループへ割り当てられた (または除外された) ロールの表示および設定。
  • ロールごとのグループおよびユーザーメンバーシップの表示。
  • ロールごとのデフォルトメンバーシップの設定。
  • スコープ指定されたロールの作成。
注記

現時点では、管理コンソールでは制約を設定できません

RBAC による管理 CLI または API (HTTP およびネイティブ) への影響

RBAC が有効である場合、API での jboss-cli スクリプトや管理 API の動作が若干異なります。

読み取りできないリソースや属性は、結果からフィルター処理されます。ロールがフィルターされたリソースや属性をアドレス指定できる場合、結果の response-headers セクションにある filtered-attributes としてリストされます。ロールがリソースや属性をアドレス指定できない場合はリストされません。

アドレス指定できないリソースにアクセスしようとすると、Resource Not Found エラーが発生します。

適切な書き込みまたは読み取り権限のないユーザーが、アドレス指定可能なリソースを読み取りまたは書き込みしようとすると、Permission Denied エラーが返されます。

管理 CLI は、管理コンソールと同じ RBAC タスクをすべて実行でき、さらに以下のような追加のタスクも実行できます。

  • RBAC の有効化および無効化。
  • パーミッション組み合わせポリシーの変更
  • アプリケーションリソースおよびリソース機密性の制約の設定

JMX 管理 Bean での RBAC の影響

ロールベースのアクセス制御は、3 つの方法で JMX に適用されます。

  1. JBoss EAP 6 の管理 API は、JMX 管理 Bean として公開されます。管理 Bean は core mbeans と呼ばれ、これらの Bean へのアクセスは基礎の管理 API 自体と全く同じように制御およびフィルターされます。
  2. JMX サブシステムは、書き込み権限が機密である状態で設定されます。そのため、Administrator および SuperUser ロールのユーザーのみがこのサブシステムを変更できます。Auditor ロールのユーザーは、このサブシステムの設定を読み取ることもできます。
  3. デフォルトでは、デプロイされたアプリケーションやサービス、またはコアでない MBean によって登録された管理 Bean にはすべての管理ユーザーがアクセスできますが、MaintainerOperatorAdministrator および SuperUser ロールを持つユーザーのみが書き込みできます。

RBAC 認証

ロールベースアクセスコントロールは、JBoss EAP 6 に含まれる標準的な認証プロバイダーで動作します。

ユーザー名/パスワード
ローカルプロパティーファイルまたは LDAP を使用できる ManagementRealm の設定に応じて検証されるユーザーとパスワードの組み合わせを使用して、ユーザーは認証されます。
クライアント証明書
トラストストアを使用します。
Local User
同じマシンで実行しているサーバーがある場合は、jboss-cli スクリプトが Local User として自動的に認証されます。デフォルトでは、Local UserSuperUser グループのメンバーです。

使用されるプロバイダーに関係なく、JBoss EAP はロールをユーザーに割り当てます。ただし、ManagementRealm または LDAP サーバーで認証する場合、これらのシステムはユーザーグループ情報を提供できます。JBoss EAP はこの情報を使用してユーザーにロールを割り当てることもできます。

2.2.2.4. LDAP と管理インターフェースの使用

JBoss EAP 6 には、LDAP サーバーを web および EJB アプリケーションの認証および承認機関として使用できるようにする複数の認証および承認モジュールが含まれています。

管理コンソール、管理 CLI、管理 API の認証元として LDAP Directory Server を使用する場合は、次のようにする必要があります。

  1. LDAP サーバーへアウトバウンド接続を作成します。
  2. LDAP が有効なセキュリティーレルムを作成するか、既存のセキュリティーレルムが LDAP を使用するよう更新します。
  3. 管理インターフェースの新しいセキュリティーレルムを参照します。

LDAP オーセンティケーターは、最初にリモートディレクトリーサーバーへ接続を確立します。その後、ユーザーが認証システムに渡すユーザー名を使用して検索を実行し、LDAP レコードの完全修飾識別名 (DN) を探します。ユーザーによって提供されるクレデンシャルおよびパスワードとしてユーザーの DN を使用して、LDAP サーバーへの新しい接続が確立されます。LDAP サーバーの認証に成功すると、DN が有効であることが検証されます。

LDAP が有効なセキュリティーレルムが作成されると、管理インターフェースによる参照が可能になります。管理インターフェースはセキュリティーレルムを認証に使用します。JBoss EAP 6 は、管理インターフェイスと CLI で、認証に双方向 SSL/TLS を使用する LDAP サーバーへのアウトバウンド接続を使用するように設定することもできます。

2.2.2.5. JAAS および管理インターフェース

JAAS を使用して管理インターフェースをセキュア化できます。管理インターフェースに JAAS を使用する場合、セキュリティーレルムがセキュリティードメインを使用するように設定する必要があります。これにより、コアサービスとサブシステムの依存関係が発生します。SSL/TLS は、管理インターフェースのセキュア化に JAAS を使用する必要はありませんが、管理者は SSL/TLS を有効にして、セキュアでない状態で機密情報を誤送信しないようにすることが強く推奨されます。

注記

JBoss EAP 6 インスタンスが ADMIN_ONLY モードで実行されるように設定されていると、JAAS を使用した管理インターフェースのセキュア化はサポートされません。ADMIN_ONLY モードについて詳しくは、管理設定ガイドサーバー実行時に渡すスイッチと引数のリファレンス を参照してください。

2.3. セキュリティーサブシステム

security サブシステムは JAAS API をベースとし、アプリケーションのセキュリティーインフラストラクチャーを提供します。このサブシステムは現在のリクエストに関連するセキュリティーコンテキストを使用して、認証マネージャー、承認マネージャー、監査マネージャー、およびマッピングマネージャーの性能を関係のあるコンテナーに公開します。

認証および承認マネージャーは認証および承認を処理します。マッピングマネージャーは、情報をアプリケーションに渡す前に、プリンシパル、ロール、または属性に対してその情報を追加、変更、または削除します。監査マネージャーは、ユーザーがプリバイダーモジュールを設定して、セキュリティーイベントの報告方法を制御できるようにします。

ほとんどの場合、security サブシステムの設定の更新では、管理者はセキュリティードメインの設定のみに集中する必要があります。セキュリティードメインの外部では、変更が必要になる場合があるセキュリティー要素は deep-copy-subject-mode を使うかどうかのみです。セキュリティー要素の変更が必要なまれなケースでは、これらの設定変更 (deep-copy-subject-mode) が security サブシステムの セキュリティー管理 部分にある可能性があります。

2.3.1. パスワード vault システム

JBoss EAP 6 にはパスワード vault が含まれています。このパスワード vault は、機密性の高い文字列を暗号化して暗号化されたキーストアに保存し、アプリケーションや検証システムに対して復号化します。XML デプロイメント記述子などのプレーンテキストの設定ファイルでは、パスワードや他の機密情報を指定する必要があるときがあります。JBoss EAP のパスワード vault を使用すると、プレーンテキストファイルで使用する機密性の高い文字列をセキュアに格納することができます。

2.3.2. セキュリティードメイン

セキュリティードメインは、ドメインコントローラーまたはスタンドアロンサーバーで一元的に設定されます。セキュリティードメインが使用される場合、セキュリティーを個別に設定する代わりに、アプリケーションがセキュリティードメインを使用するように設定できます。これにより、ユーザーと管理者は 宣言的セキュリティー を利用することができます。

このような設定構造を有効に活用できる一般的な例が、アプリケーションをテスト環境と本番環境の間で移動する処理です。アプリケーションのセキュリティーが個別に設定されている場合、テスト環境から本番環境など、アプリケーションが新しい環境に移されるたびにアプリケーションを更新する必要がある可能性があります。代わりにアプリケーションがセキュリティードメインを使用すると、各環境の JBoss EAP インスタンスのセキュリティードメインは現在の環境に対して適切に設定されます。 アプリケーションはコンテナーに依存し、セキュリティードメインを使用して適切なセキュリティー設定を提供できます。

2.3.2.1. ログインモジュール

JBoss EAP 6 には、セキュリティードメイン内で設定されるほとんどのユーザー管理ロールに適する、バンドルされたログインモジュールが複数含まれています。security サブシステムは、リレーショナルデータベース、LDAP サーバー、またはフラットファイルからユーザー情報を読み取りできるコアログインモジュールを複数提供します。JBoss EAP 6 はこれらのコアログインモジュールの他に、高度なカスタマイズの必要性に対応する、ユーザー情報や機能を提供するログインモジュールも提供します。

一般的に使用されるログインモジュールの概要

Ldap ログインモジュール
Ldap ログインモジュールは、LDAP サーバーに対して認証を行うログインモジュール実装です。security サブシステムは bindDN を接続情報として使用し、LDAP サーバーに接続します。この bindDN は、JNDI 初期コンテキストを使用した場合にユーザーおよびロールの baseCtxDN および rolesCtxDN 両方のツリーを検索する権限があります。ユーザーが認証を試みると、LDAP ログインモジュールは LDAP サーバーへ接続し、ユーザーのクレデンシャルを LDAP サーバーに渡します。認証に成功すると、JBoss EAP 内のそのユーザーに InitialLDAPContext が作成され、ユーザーのロールが入力されます。
LdapExtended ログインモジュール
LdapExtended (org.jboss.security.auth.spi.LdapExtLoginModule) ログインモジュールは、ユーザーと認証で関連ロールを検索します。ロールは再帰的にクエリーを行い、DN に従って階層的なロール構造を移動します。LoginModule オプションには、JNDI プロバイダーがサポートする指定の LDAP によってオプションがサポートされるかどうかが含まれます。
UsersRoles ログインモジュール
UsersRoles ログインモジュールは、Java プロパティーファイルからロードされる複数のユーザーおよびユーザーロールをサポートする簡単なログインモジュールです。このログインモジュールの主な目的は、アプリケーションとともにデプロイされたプロパティーファイルを使用して複数のユーザーおよびロールのセキュリティー設定を簡単にテストすることです。
Database ログインモジュール
Database ログインモジュールは、認証とロールマッピングをサポートする JDBC (Java Database Connectivity) ベースのログインモジュールです。このログインモジュールは、ユーザー名、パスワード、およびロール情報がリレーショナルデータベースに格納される場合に使用されます。このログインモジュールは、想定される形式のプリンシパルおよびロールが含まれる論理テーブルへの参照を提供して動作します。
Certificate ログインモジュール
Certificate ログインモジュールは、X509 証明書を基にユーザーを認証します。このログインモジュールの典型的なユースケースが、web 層の CLIENT-CERT 認証です。証明書ログインモジュールは認証のみを実行するため、セキュアな web または EJB コンポーネントへのアクセスを完全に定義するには、承認ロールを取得できる他のログインモジュールと組み合わせる必要があります。このログインモジュールの 2 つのサブクラスである CertRolesLoginModule および DatabaseCertLoginModule は動作を拡張し、プロパティーファイルまたはデータベースから承認ロールを取得します。
Identity ログインモジュール
Identity ログインモジュールは、ハードコードされたユーザー名をモジュールに対して認証されたサブジェクトに関連付ける簡単なログインモジュールです。このモジュールは、プリンシパルのオプションによって指定された名前を使用して SimplePrincipal インスタンスを作成します。このログインモジュールは、固定のアイデンティティーをサービスに提供する必要がある場合に便利です。また、指定のプリンシパルに関連するセキュリティーや関連するロールをテストするために、開発環境でも使用できます。
RunAs ログインモジュール
RunAS ログインモジュールは、認証のログインフェーズの間に run as ロールをスタックにプッシュするヘルパーモジュールです。ログインフェーズ後、コミットまたはアボートフェーズで run as ロールをスタックからポップします。このログインモジュールの目的は、セキュアな EJB にアクセスするログインモジュールなど、セキュアなリソースにアクセスして認証を実行する必要のあるその他のログインモジュールにロールを提供することです。RunAs ログインモジュールは、run as ロールの構築が必要なログインモジュールよりも先に設定する必要があります。
Client ログインモジュール
クライアントログインモジュール (org.jboss.security.ClientLoginModule) は、呼び出し元のアイデンティティーとクレデンシャルの確立時に JBoss クライアントによって使用される LoginModule の実装です。新しい SecurityContext を作成してプリンシパルとクレデンシャルに割り当て、SecurityContext を ThreadLocal セキュリティーコンテキストに設定します。Client ログインモジュールは、クライアントが現在のスレッドの呼び出し元を確立するために唯一サポートされるログインモジュールです。セキュリティー環境が JBoss EJB security サブシステムを使用するよう透過的に設定されていない EJB クライアントとして動作するサーバー環境とスタンドアロンクライアントアプリケーションは、Client ログインモジュールを使用する必要があります。
警告

このログインモジュールは認証を実行しません。サーバー上の後続の認証のために、提供されたログイン情報をサーバー EJB 呼び出しレイヤーにコピーすることもほとんどありません。JBoss EAP 6 内では、JVM 内の呼び出しに対してユーザーのアイデンティティーを切り替える目的で場合のみサポートされます。リモートクライアントがアイデンティティーを確立する目的ではサポートされません

SPNEGO ログインモジュール
SPNEGO ログインモジュール (org.jboss.security.negotiation.spnego.SPNEGOLoginModule) は、KDC で呼び出し元のアイデンティティーとクレデンシャルを確立する LoginModule の実装です。モジュールは、SPNEGO、Simple、および Protected GSSAPI Negotiation メカニズムを実装し、JBoss Negotiation プロジェクトの一部です。この認証を AdvancedLdap ログインモジュールとチェーンされた設定で使用すると、LDAP サーバーと連携できます。また、このログインモジュールを使用するには、web アプリケーションがアプリケーション内で NegotiationAuthenticator を有効にする必要があります。
RoleMapping ログインモジュール
RoleMapping ログインモジュールは、1 つ以上の宣言的ロールへの認証プロセスの最終結果となるロールのマッピングをサポートします。たとえば、ユーザー John のロールが ldapAdmintestAdmin で、web.xml または ejb-jar.xml ファイルで定義されたアクセスの宣言的ロールは admin であると認証プロセスによって判断された場合、このログインモジュールは管理者ロールを John にマップします。RoleMapping ログインモジュールは、以前マップされたロールのマッピングを変更するため、ログインモジュール設定でオプションのモジュールとして定義する必要があります。
Remoting ログインモジュール
Remoting ログインモジュールは現在認証中のリクエストがリモーティング接続上で受信されたかどうかをチェックします。リクエストがリモーティングインターフェースを使用して受信された場合、リクエストは認証プロセス中に作成されたアイデンティティーに関連付けられます。
Realm Direct ログインモジュール
Realm Direct ログインモジュールは、認証および承認の決定に既存のセキュリティーレルムを使用できるようにします。このモジュールを設定すると、認証の決定とユーザーロールのマッピングに、参照したレルムを使用してアイデンティティー情報を検索します。たとえば、JBoss EAP 6 に同梱される事前設定された other セキュリティードメインには Realm Direct ログインモジュールがあります。このモジュールに参照されるレルムがない場合、デフォルトで ApplicationRealm セキュリティーレルムが使用されます。
カスタムモジュール
JBoss EAP セキュリティーフレームワークとバンドルされるログインモジュールがセキュリティー環境の要件に対応できない場合、カスタムログインモジュール実装を作成できます。AuthenticationManager は、Subject プリンシパルの特定の使用パターンを必要とします。AuthenticationManager と動作するログインモジュールを作成するには、JAAS Subject クラスの情報ストレージ機能と、これらの機能の想定される使用方法を完全に理解する必要があります。

さらに、Unauthenticated Identity ログインモジュールのオプションも一般的に使用されています。一部のケースでは、認証された形式でリクエストが受信されないことがあります。unauthenticatedIdentity は、認証情報を持たないリクエストに特定の ID (例: guest) を割り当てるログインモジュール設定オプションです。これを使用すると、保護されていないサーブレットは特定ロールを必要としない EJB でメソッドを呼び出すことができます。このようなプリンシパルには関連したロールがなく、セキュアでない EJB や、チェックされていないパーミッション制約と関連する EJB メソッドのみにアクセスできます。

2.3.2.2. パスワードスタッキング

スタックでは複数のログインモジュールをチェーンでき、各ログインモジュールは認証中にクレデンシャルの検証とロールの割り当ての両方を提供します。これは多くのユースケースで機能しますが、クレデンシャルの検証とロールの割り当てが複数のユーザー管理ストアに分散されることがあります。

ユーザーは中央の LDAP サーバーで管理されますが、アプリケーション固有のロールはアプリケーションのリレーショナルデータベースに格納される場合を考えてみましょう。password-stacking モジュールオプションはこの関係をキャプチャーします。

パスワードスタッキングを使用するには、各ログインモジュールは、<module-option> セクションにある password-stacking 属性を useFirstPass に設定する必要があります。パスワードスタッキングに設定した以前のモジュールがユーザーを認証した場合、他のすべてのスタッキングモジュールがユーザーによって認証されたこととなり、承認の手順でロールの提供のみを行います。

password-stacking オプションを useFirstPass に設定すると、このモジュールは最初にプロパティー名 javax.security.auth.login.name で共有されたユーザー名を検索し、javax.security.auth.login.password で共有されたパスワードを検索します。

これらのプロパティーが見つかった場合、プリンシパル名とパスワードとして使用されます。見つからなかった場合、プリンシパル名とパスワードはこのログインモジュールによって設定され、プリンシパル名は javax.security.auth.login.password、パスワードは javax.security.auth.login.password 以下に格納されます。

2.3.2.3. パスワードのハッシュ化

ログインモジュールのほとんどは、クライアントが提供するパスワードをユーザー管理システムに保存されたパスワードと比較する必要があります。通常、これらのモジュールはプレーンテキストのパスワードを使用しますが、プレーンテキストのパスワードがサーバー側に保存されないようにするため、ハッシュ化されたパスワードをサポートするよう設定できます。JBoss EAP 6 は、ユーザーパスワードおよびストアパスワードがハッシュ化された場合だけでなく、ハッシュアルゴリズム、エンコーディング、および文字セットを設定する機能をサポートします。

重要

Red Hat JBoss Enterprise Application Platform Common Criteria で認定された設定は、SHA-256 よりも弱いハッシュアルゴリズムはサポートしません。

2.3.3. セキュリティー管理

security サブシステムのセキュリティー管理部分は、security サブシステムのハイレベルな動作を上書きするために使用されます。各設定は任意になります。ディープコピーサブジェクトモード以外の設定を変更することはあまりありません。

2.3.3.1. ディープコピーモード

ディープコピーサブジェクトモードが無効であるときに (デフォルト設定)、セキュリティーデータ構造をコピーすると、データ構造全体がコピーされずに元のデータ構造への参照が作成されます。この挙動は効率的ですが、同じアイデンティティーを持つ複数のスレッドによってフラッシュまたはログアウトの操作が行われ、サブジェクトが消去されると、データが破損しやすくなります。

ディープコピーサブジェクトモードが有効になっていると、データ構造の完全コピーと、クローン可能な関連するデータがすべて作成されます。これはよりスレッドセーフになりますが、効率が悪くなります。

2.3.4. その他のコンポーネント

2.3.4.1. JASPI

Java Authentication SPI for Containers (JASPI または JASPIC) は Java アプリケーションのプラグ可能なインターフェースで、 JSR-196 に定義されています。JBoss EAP 6 では JAAS 認証だけでなく、JASPI 認証も使用できます。JASPI 認証はセキュリティードメインのログインモジュールを使用して設定され、これらのモジュールはスタック可能です。Web ベースの管理コンソールは JASPI 認証モジュールの設定を公開しません。さらに、JBoss EAP 6 にデプロイされたアプリケーションが JASPI セキュリティードメインを使用するには、デプロイメント記述子に特別なオーセンティケーターを設定する必要があります。

2.3.4.2. JACC

JACC (Java Authorization Contract for Containers) はコンテナーと承認サービスプロバイダー間のコントラクトを定義する規格であり、これによりコンテナーによって使用されるプロバイダーの実装が可能になります。これは JSR-115 に定義され、バージョン 1.3 以上ではコア Java EE 仕様の一部となっています。

JBoss EAP 6 はセキュリティーサブシステムのセキュリティー機能内に JACC のサポートを実装します。

2.3.4.3. 粒度の細かい承認および XACML

Fine Grained Authorization は、変化する要件や意思決定プロセスに関わる複数の変数に対応し、モジュールにアクセスするための認可を提供する基礎となるものです。そのため、Fine Grained Authorization のプロセスは複雑です。

注記

JBoss EAP 6 では、XACML バインディング (web、ejb) はサポートされていません。

JBoss EAP は XACML を媒体として使用し、粒度の細かい承認を実現します。XACML は標準ベースのソリューションを提供し、複雑な粒度の細かい承認に対応します。XACML は、意思決定のポリシー言語やアークテクチャーを定義します。XACML アーキテクチャーには、通常のプログラムフローでリクエストを阻止する PEP (Policy Enforcement Point: ポリシー強制ポイント) が含まれ、PDP (Policy Decision Point: ポリシー決定ポイント) に関連するポリシーを基にアクセスを決定するよう PDP に要求します。PDP は PEP によって作成された XACML リクエストを評価し、ポリシーを確認して以下の 1 つを決定します。

PERMIT
アクセスは許可されます。
DENY
アクセスは拒否されます。
INDETERMINATE
PDP にエラーがあります。
NOTAPPLICABLE
リクエストに足りない属性があるか、一致するポリシーがありません。

XAMCL には以下の機能もあります。

  • Oasis XACML v2.0 ライブラリー
  • JAXB v2.0 ベースのオブジェクトモデル
  • XACML ポリシーおよび属性を保存および読み出しするための ExistDB 統合
2.3.4.4. SSO

JBoss EAP 6 は、web と Infinispan サブシステムを介したクラスター化された SSO と非クラスター化された SSO の両方を、すぐにサポートします。これには、以下が必要です。

  • 認証と承認を処理する設定済みのセキュリティードメイン。
  • SSO infinispan レプリケーションキャッシュ。管理対象ドメインの ha および full-ha プロファイル、またはスタンドアロンサーバーの standalone-ha または standalone-full-ha プロファイルを使用することで存在します。
  • web キャッシュコンテナーと、その内部の SSO レプリケーションキャッシュが存在する必要があります。
  • web サブシステムは SSO を使用するように設定する必要があります。
  • SSO 情報を共有する各アプリケーションが同じセキュリティードメインを使用するように設定する必要があります。

第3章 Red Hat JBoss Enterprise Application Platform における SSO のその他のユースケース

JBoss EAP 6 は、初期状態の機能の他に、その他のシングルサインオンのユースケースもサポートします。これらのユースケースには、ブラウザーベースの SSO、デスクトップベースの SSO、およびセキュアトークンサービスを介した SSO に対する SAML が含まれます。

3.1. SAML を使用したブラウザーベースの SSO

ブラウザーベースの SSO の場合、サービスプロバイダーと呼ばれる 1 つ以上の web アプリケーションがハブアンドスポーク型アーキテクチャーの集中管理されたアイデンティティープロバイダーに接続されます。アイデンティティープロバイダー (IDP) は、サービスプロバイダー (スポーク) へのアイデンティティーおよびロール情報の中央のソース (ハブ) として動作します。認証されていないユーザーがサービスプロバイダーの 1 つにアクセスしようとすると、そのユーザーはアイデンティティープロバイダーにリダイレクトされ、認証が実行されます。アイデンティティープロバイダーがユーザーを認証すると、プリンシパルのロールを指定する SAML トークンを発行し、要求されたサービスプロバイダーにリダイレクトしてもどします。SAML トークンは関連するすべてのサービスプロバイダーで使用され、ユーザーのアイデンティティーとアクセス権が判断されます。SSO を使用してサービスプロバイダーで開始されるこのような方法は、サービスプロバイダー開始フロー (Service provider-initiated flow) と呼ばれます。

多くの SSO システムと同様に、JBoss EAP はアイデンティティープロバイダー (IDP) と SP の両方を利用します。これらのコンポーネントは JBoss EAP インスタンス内で実行でき、JBoss EAP の security サブシステムとともに動作します。FORM ベースのウェブアプリケーションセキュリティーである SAML v2、HTTP/POST および HTTP/リダイレクトバインディングも SSO の実行に使用されます。

ID プロバイダーを作成するには、JBoss EAP インスタンスにセキュリティードメイン (idp-domain など) を作成し、ID ストアとして機能する認証および承認のメカニズム (LDAP やデータベースなど) を定義します。idp-domain とともに IDP の実行に必要な追加のモジュール (org.picketlink) を使用するよう、web アプリケーション (例: IDP.war) が設定され、同じ JBoss EAP インスタンスにデプロイされます。IDP.war はアイデンティティープロバイダーとなります。サービスプロバイダーを作成するため、SAML2LoginModule を認証方法として使用するセキュリティードメイン (例: sp-domain) が作成されます。web アプリケーション (例: SP.war) は追加のモジュール (org.picketlink) を使用するよう設定され、sp-domain を使用するサービスプロバイダーバルブが含まれます。SP.warsp-domain が設定された JBoss EAP インスタンスにデプロイされ、サービスプロバイダーとなります。このプロセスは、1 つ以上のサービスプロバイダー ( SP2.warSP3.war など) および 1 つ以上の JBoss EAP インスタンス間で複製できます。

3.1.1. アイデンティティープロバイダー開始フロー (Identity Provider Initiated Flow)

ほとんどの SSO のシナリオでは、SP は有効なアサーションで SAML 応答を SP に送信する IDP に認証リクエストを送信して、フローを開始します。これはサービスプロバイダー (SP) の起動フローとして知られています。しかし、SAML 2.0 仕様は、アイデンティティープロバイダー (IDP) の起動済みまたは未承認の Response フローと呼ばれる別のフローも定義します。このフローの場合、サービスプロバイダーは認証フローを開始せずに IDP から SAML 応答を受信します。このフローは IDP 側で起動します。認証が終わると、ユーザーはリストから特定のサービスプロバイダーを選択し、サービスプロバイダーの URL にリダイレクトされます。このフローを有効にするのに特別な設定は必要ありません。

手順

  1. ユーザーが IDP にアクセスします。
  2. IDP は SAML リクエストおよび応答がないことを確認し、SAML を使用して IDP 開始フローシナリオを想定します。
  3. IDP はユーザーの認証を行います。
  4. 認証後、IDP は、すべての SP アプリケーションにリンクするページをユーザーが取得する、ホストされたセクションを表示します。
  5. ユーザーは SP アプリケーションを選択します。
  6. IDP は、クエリーパラメーターの SAML 応答に SAML アサーションを持つサービスプロバイダーへユーザーをリダイレクトします。
  7. SP は SAML アサーションをチェックし、アクセスを提供します。

3.1.2. グローバルログアウト

あるサービスプロバイダーで開始されるグローバルログアウトで、アイデンティティープロバイダー (IDP) およびすべてのサービスプロバイダーからユーザーをログアウトします。グローバルログアウトの実行後に、SP または IDP のセキュアな部分にアクセスするユーザーは再認証が強制になります。

3.2. デスクトップベースの SSO

デスクトップベースの SSO シナリオでは、プリンシパルをデスクトップ (通常は Active Directory または Kerberos サーバーによって管理される) と一連の Web アプリケーション (サービスプロバイダー) の両方で共有できます。この場合、デスクトップアイデンティティープロバイダーは Web アプリケーションのアイデンティティープロバイダーとしても機能します。

一般的なセットアップでは、ユーザーは Active Directory ドメインによって管理されるデスクトップにログインします。その後、ユーザーは web ブラウザーを使用して JBoss EAP でホストされる JBoss Negotiation を使用する web アプリケーションにアクセスします。Web ブラウザーは、ユーザーのローカルマシンから Web アプリケーションにサインオン情報を転送します。JBoss EAP は、Active Directory または Kerberos サーバーでバックグラウンドの GSS メッセージを使用し、ユーザーを検証します。これにより、ユーザーは web アプリケーションへのシームレスな SSO を実現することができます。

Web アプリケーションの ID プロバイダとしてデスクトップベースの SSO を設定するには、ID プロバイダサーバーに接続するセキュリティードメインが作成されます。NegotiationAuthenticator は指定の web アプリケーションのバルブとして追加され、JBoss Negotiation は SP コンテナーのクラスパスに追加されます。この代わりに、デスクトップベースの SSO プロバイダーをアイデンティティーストアとして使用して IDP をブラウザーベースの SSO の場合と同様にセットアップすることもできます。

3.3. STS を使用した SSO

JBoss EAP 6 以降は、サービスプロバイダーが STS に接続する複数のログインモジュールを提供します。セキュリティートークンサービス (PicketLinkSTS) を実行することも可能です。PicketLinkSTS は他のセキュリティートークンサービスへ複数のインターフェースを定義し、拡張ポイントを提供します。設定を使用して実装をプラグインでき、設定を介してデフォルト値を一部のプロパティーに指定できます。PicketLinkSTS はセキュリティートークンを生成および管理しますが、特定タイプのトークンを発行しません。この代わりに、複数のトークンプロバイダーをプラグインできる汎用のインターフェースを定義します。そのため、各トークンタイプのトークンプロバイダーが存在する場合、さまざまなタイプのトークンに対応するよう設定することができます。また、セキュリティートークンのリクエストと応答の形式も指定します。

以下は、JBoss EAP Security Token Service の使用時にセキュリティートークンリクエストが処理される手順です。

  1. クライアントはセキュリティートークンリクエストを PicketLinkSTS に送信します。
  2. PicketLinkSTS は、要求メッセージを解析し、JAXB オブジェクトモデルを生成します。
  3. PicketLinkSTS は設定ファイルを読み取り、必要な場合は STSConfiguration オブジェクトを作成します。設定から WSTrustRequestHandler への参照を取得し、リクエストの処理をハンドラーインスタンスに委譲します。
  4. リクエストがトークンのライフタイム値を指定しない場合など、リクエストハンドラーは必要であれば STSConfiguration を使用してデフォルト値を設定します。
  5. WSTrustRequestHandler は WSTrustRequestContext を作成し、PicketLinkSTS から受信した JAXB リクエストオブジェクトと呼び出し元プリンシパルを設定します。
  6. WSTrustRequestHandler は STSConfiguration を使用して、リクエストされたトークンタイプを基にリクエストを処理するために使用する必要がある SecurityTokenProvider を取得します。これにはプロバイダーが関係し、構築された WSTrustRequestContext をパラメーターとして渡します。
  7. SecurityTokenProvider インスタンスはトークンリクエストを処理し、発行されたトークンをリクエストコンテキストに格納します。
  8. WSTrustRequestHandler はコンテキストからトークンを取得し、必要な場合は暗号化して、セキュリティートークンが含まれる WS-Trust 応答オブジェクトを構築します。
  9. PicketLinkSTS はリクエストハンドラーによって生成された応答を指示し、クライアントに返します。

STS ログインモジュール (STSssuingLoginModule、STSValidatingLoginModule、SAML2STLoginModule など) は通常、JEE コンテナーのセキュリティー設定の一部として、ユーザー認証に Security Token Service を使用するように設定されます。STS はログインモジュールと同じコンテナーに配置するか、web サービス呼び出しや別の技術を使ってリモートでアクセスすることができます。

第4章 シナリオ例

JBoss EAP のセキュリティーとコンポーネントがどのように一緒に機能するかを理解する 1 つの方法が、実際のシナリオを検証することです。以下のセクションでは、さまざまな JBoss EAP セキュリティーコンポーネントおよび設定オプションが関係する一般的かつ現実的な状況を複数取り上げます。単一または複数のアプリケーションをセキュア化する方法と、管理インターフェースをセキュア化する方法を中心に説明します。

4.1. 初期状態の Red Hat JBoss Enterprise Application Platform

ここでは、初期インストール後に設定が変更されなかった場合に JBoss EAP とサンプルアプリケーションをセキュアにする方法を説明します。アプリケーション sampleApp1.war はデプロイされ、コンテナーベースのセキュリティーを使用するよう設定されています。

scenario1

4.1.1. 初期設定のコア管理認証

4.1.1.1. セキュリティー

コア管理認証は、ManagementRealmApplicationRealm の 2 つの事前設定されたセキュリティーレルムをデフォルトで提供します。これらのレルムはプロパティーファイルを使用して、ユーザー名、パスワード、およびロールを格納します。認証情報と管理 API の格納に使用される ManagementRealm は、JBoss EAP インスタンスと同じホストで CLI インターフェイスを使用するユーザーに対してローカル認証を定義し、有効にします。ApplicationRealm は、管理 API 以外のアプリケーション向けに、認証および承認情報を格納するために事前設定されています。さらに、ApplicationRealm はローカル認証が有効な状態で事前設定されていますが、これは一般的に使用されません。

4.1.1.2. 仕組み

このシナリオでは、JBoss EAP のデフォルトインストールに以下のユーザーが追加されています。

Expand
表4.1 ユーザー
ユーザー名パスワードロールセキュリティーレルム

Susan

Testing123!

 

ManagementRealm

Sarah

Testing123!

sample

ApplicationRealm

Frank

Testing123!

 

ApplicationRealm

JBoss EAP インスタンスは起動時に ManagementRealmApplicationRealm セキュリティーレルムの両方をロードします。

Susan が管理 APIs (HTTPS または CLI) にアクセスしようとすると、認証が必要になります。各ユーザー名、パスワード、およびロールが ManagementRealm のエントリーと一致する必要があります。デフォルトでは、管理 API にアクセスする必要があるルールはありません。SarahFrankManagementRealm セキュリティーレルムには存在しないため、管理 API にアクセスできません。

4.1.2. 初期設定のセキュリティーサブシステム

4.1.2.1. セキュリティー

また、security サブシステムには、otherjboss-web-policyjboss-ejb-policy の 3 つのセキュリティードメインが事前に設定されています。other セキュリティードメインは、デフォルトで ApplicationRealm を使用する、ログインモジュールに指定されたレルムに委譲して認証と承認を実行します。

デフォルトのセキュリティーレルムとデフォルトのセキュリティードメインの両方に関する詳細は、「セキュリティーレルム」と「セキュリティードメイン」を参照してください。

4.1.2.2. 仕組み

アプリケーション sampleApp1.war には /hello.html/secure/hello.html の 2 つの HTML ファイルがあり、BASIC HTTP 認証を使用してパス /secure/* をセキュアにします。other セキュリティードメインを使用し、sample ロールを必要とします。other セキュリティードメインは認証および承認情報を ApplicationRealm に委ねるため、前セクション に記載されている Users の表のユーザーを参照します。

Sarah/hello.html を要求すると、認証なしでページを閲覧できます。Sarah/secure/hello.html を要求すると、ユーザー名とパスワードの入力が求められます。その後、ログインに成功したら /secure/hello.html を閲覧できます。FrankSusan (または任意のユーザー) は /hello.html にアクセスできます。ただし、どちらも /secure/hello.html にはアクセスできません (Frank はサンプルロールを持って おらず、SusanApplicationRealm セキュリティー領域に入っていません)。

4.2. 管理インターフェースに HTTPS と RBAC が追加された Red Hat JBoss Enterprise Application Platform

ここでは、管理インターフェースで HTTPS が有効で、RBAC が ManagementRealm セキュリティーレルムに追加されている場合に JBoss EAP をセキュアにする方法を取り上げます。

scenario2

4.2.1. セキュリティー

JBoss EAP は管理コンソールを含む、管理インターフェースによる HTTPS の使用をサポートします。HTTPS を有効にするには、secure-interface 要素を設定し、secure-port を管理インターフェースの http-interface セクションに追加し、希望の設定 (サーバー ID、プロトコル、キーストア、エイリアスなど) で既存または新規セキュリティーレルムを設定します。これにより、管理インターフェースがすべての HTTP トラフィックに SSL/TLS を使用できるようになります。HTTPS と管理インターフェースのセキュア化に関する背景情報は、「高度なセキュリティー」 セクションを参照してください。

JBoss EAP では、複数の異なる認証スキームを使用して、管理インターフェースの RBAC を有効にすることもできます。この例では、ManagementRealm で使用される既存のプロパティーファイルでユーザー名とパスワードを使用します。RBAC を有効にするには、管理インターフェースに対して provider 属性を rbac に設定し、希望のユーザーとロールで ManagementRealm を更新します。

4.2.2. 仕組み

この例では、以下のユーザーが既存のセキュリティーレルムに追加されています。

Expand
表4.2 管理ユーザー
ユーザー名パスワードセキュリティーレルム

Suzy

Testing123!

ManagementRealm

Tim

Testing123!

ManagementRealm

Emily

Testing123!

ManagementRealm

Zach

Testing123!

ManagementRealm

Natalie

Testing123!

ManagementRealm

グループメンバーシップを基に、ユーザーは以下の RBAC ロールにマップされています。

Expand
表4.3 RBAC ロール
ユーザー名RBAC ロール

Suzy

SuperUser

Tim

Administrator

Emily

Maintainer

Zach

Deployer

Natalie

Monitor

起動時、JBoss EAP は ManagementRealm と RBAC 設定、および管理インターフェースをコアサービスの一部としてロードします。また、管理インターフェースの HTTPS 用に設定された http-interface も起動されます。ユーザーは HTTPS を介して管理インターフェースにアクセスできるようになり、RBAC も有効化および設定されます。RBAC が有効になっていない場合、ManagementRealm のユーザーはすべて SuperUser として考慮され、アクセスが無制限になります。RBAC が有効になっているため、各ユーザーは持つロールに基づいて制限されるようになりました。SuzyTimEmilyZach、および Natalie はすべて上記の表で表示される異なるロールを持ちます。たとえば、SuzyTim のみがアクセス制御情報の読み取りと変更が可能です。SuzyTim、および Emily はランタイム状態や他の永続設定情報を変更できます。Zach もランタイム状態とその他の永続設定情報を編集できますが、アプリケーションリソースにのみ関連します。SuzyTimEmilyZachNatalie はすべて設定および状態情報をすべて実行できますが、Natalie は何も更新できません。各ロールの詳細と JBoss EAP による RBAC の処理方法については、「ロールベースのアクセス制御」 および 「管理インターフェースへの RBAC の追加」 セクションを参照してください。

4.3. Red Hat JBoss Enterprise Application Platform と HTTPS を含む更新された security サブシステム

ここでは、新しいセキュリティードメインが追加され、HTTPS が有効な場合に JBoss EAP で実行しているサンプルアプリケーションをセキュアにする方法を取り上げます。アプリケーション (sampleApp2.war) はデプロイされ、コンテナベースのセキュリティー、sample-domain、および HTTPS を使用するよう設定されています。

scenario3

4.3.1. セキュリティー

JBoss EAP は、アプリケーション向けの HTTPS の使用をサポートし、web subsystem を使用して処理されます。HTTPS の新しいコネクターは Web subsystem に追加され、希望の設定 (プロトコル、ポート、キーストアなど) で設定されます。設定が保存されると、web アプリケーションは設定されたポート上で HTTPS トラフィックを許可できるようになります。また、認証に IdentityLoginModule を使用する sample-domain という新しいセキュリティードメインも追加されました。sampleApp2.war は、sample-domain を使用してユーザーを認証するように設定されます。

4.3.2. 仕組み

セキュリティードメイン (sample-domain) が作成され、IdentityLoginModule を使用するよう設定されています。以下のクレデンシャルがログインモジュールに設定されています。

Expand
表4.4 sample-domain ユーザー
ユーザー名パスワードロール

Vincent

samplePass

sample

JBoss EAP は起動時にコアサービスをロードし、すべての web アプリケーションと sample-domain の HTTPS 接続を管理する web サブシステムおよび security サブシステムを起動します。次に、sampleApp2.war がロードされ、セキュアな URL の認証および承認を提供するために sample-domain を検索します。sampleApp2.war には /hello.html/secure/hello.html の 2 つの HTML ファイルがあり、BASIC HTTP 認証を使用してパス /secure/* をセキュア化します。sample-domain セキュリティードメインを使用し、sample ロールを必要とします。

Vincent/hello.html を要求すると、認証なしでページを閲覧できます。Vincent/secure/hello.html をリクエストすると、ユーザー名とパスワードの入力が求められます。これにより、ログインに成功したら /secure/hello.html を閲覧できます。その他すべてのユーザーはログインせずに /hello.html にアクセスできますが、Vincentsample-domain の唯一のユーザーであるため、/secure/hello.html にはアクセスできません。これは、HTTPS 上で処理されるすべてのトラフィックにも適用されます。

4.4. Red Hat JBoss Enterprise Application Platform における web アプリケーションの SSO

ここでは、JBoss EAP で web アプリケーションがクラスター化された SSO およびクラスター化されていない SSO の両方を使用する方法を取り上げます。EAP1EAP2EAP3、および EAP4の 4 つの JBoss EAP インスタンスが EAP1 および EAP2 をスタンドアロンモードで操作し、EAP3EAP4 が 2 つのノードクラスターとして動作している。sampleAppAsampleAppB の 2 つの web アプリケーションが各 JBoss EAP インスタンスにデプロイされています。

scenario4

4.4.1. セキュリティー

JBoss EAP は securityweb、および infinispan サブシステムの組み合わせを使用し、web アプリケーションでクラスター化された SSO とクラスター化されていない SSO の両方のサポートを提供します。security サブシステムは認証と承認を実行するためのセキュリティードメインを提供します。infinispan および web サブシステムは、JBoss EAP インスタンス上または JBoss EAP クラスター全体のすべての web アプリケーション間で SSO 情報をキャッシュおよび分散できるようにします。4 つの EAP インスタンスはすべてセキュリティードメイン sso-domain を持ち、IdentityLoginModule を使用するよう設定されています。sampleAppA および sampleAppB は、sso-domain セキュリティードメインを使用してパス /secure/* をセキュア化するよう設定され、アクセスするには sample ロールが必要です。以下のクレデンシャルが sso-domain ログインモジュールに設定されています。

Expand
表4.5 sso-domain ユーザー
ユーザー名パスワードロール

Jane

samplePass

sample

4 つの JBoss EAP インスタンスはすべて standalone-full-ha または full-ha プロファイルで起動するよう設定され、このシナリオで SSO を有効化するのに必要な infinispan サブシステムとその他の機能を追加します。web キャッシュコンテナーとレプリケートされた SSO キャッシュも追加され、web サブシステムはこれら両方を使用するよう設定されています。EAP1EAP2web サブシステムはクラスター化されていない SSO に対して設定され、EAP3 および EAP4 が含まれるクラスターはクラスター化された SSO を使用するよう設定されています。

アプリケーションのクラスタリングと、アプリケーションクラスタリングの比較

クラスター化された web アプリケーションとクラスター化された SSO には明らかな違いがあります。クラスター化された web アプリケーションは、そのアプリケーションをホストするための負荷を分散するためにクラスターのノード全体で分散されます。分散可能なクラスター化されたアプリケーションでは、新しいセッションと既存セッションの変更はすべてクラスターの別のメンバーへレプリケートされます。クラスター化された SSO は、アプリケーション自体がクラスター化されているかどうかに関わらず、セキュリティーコンテキストとアイデンティティー情報のレプリケーションを可能にします。これらの技術は一緒に使用することができますが、相互に排他的であり、独立して使用することもできます。

4.4.2. 仕組み

JBoss EAP は起動時にコアサービスをロードし sso-domain と SSO 情報に関連するキャッシュを管理する securityweb、および infinispan サブシステムを起動します。sampleAppA.war および sampleAppB.war は 4 つの JBoss EAP インスタンスすべてでロードされます。各 JBoss EAP インスタンスは、認証および承認を提供するために sso-domain を検索します。

JaneEAP1/sampleAppA/secure/hello.html にアクセスしようとすると、認証が要求されます。正しい情報を提供した後、Jane は EAP1/sampleAppA/secure/hello.html の閲覧が許可されます。Jane のセッションは web および infinispan サブシステムによって使用される SSO キャッシュに追加されます。Jane が EAP1/sampleAppB/secure/hello.html にアクセスしようとすると、再認証が要求されます。EAP1 で実行されている sampleAppB は、web サブシステムキャッシュと infinispan サブシステムを使用して Jane のセッションを検索します。Jane はすでに認証されているため、アクセスを許可します。JaneEAP2/sampleAppA/secure/hello.html または EAP2/ sampleAppB/secure/hello.html にアクセスしようとすると、EAP1EAP2 はキャッシュを共有しないため、再認証が要求されます。

JaneEAP3/sampleAppA/secure/hello.html にアクセスしようとすると、認証を要求され、Jane のセッションは SSO キャッシュに保存されます。これらのキャッシュはクラスター全体で保存されるため、JaneEAP3/sampleAppB/secure/hello.htmlEAP4/sampleAppA/secure/hello.html、または EAP4/sampleAppB/secure/hello.html にログインする際に再認証する必要ありません。また、EAP3 または EAP4 のいずれかが再起動した場合、他の JBoss EAP インスタンスとクラスターは稼働状態であるため、Jane の SSO 情報はキャッシュに残るので、キャッシュが保持されます。同様に、Jane のセッションが無効化された場合はキャッシュ全体で無効化され、クラスターでアクセスしようとするアプリケーションやサーバーに関係なく、再認証が要求されます。

ここでは、複数の JBoss EAP をセキュアにする方法と、ブラウザーベースの SSO が追加される方法を取り上げます。3 つ (非クラスター) の JBoss EAP インスタンスが設定され、3 つのサンプルアプリケーション (EAP1EAP2、および EAP3) と 3 つのサンプルアプリケーション (sampleAppA.warsampleAppB.war、および sampleAppC.war) が認証用にブラウザーベースの SSO を使用するよう設定されます。

scenario5

4.5.1. セキュリティー

JBoss EAP は、web アプリケーションで SAML を介してブラウザーベースの SSO をサポートし、アイデンティティープロバイダーのホストもサポートします。アイデンティティープロバイダーをホストするには、セキュリティードメイン(idp-domain)を定義された認証メカニズムで設定する必要があります。この場合、idp-domainDatabaseLoginModule を認証方法として使用するよう設定されます。アイデンティティープロバイダーアプリケーション (IDP.war) がその JBoss EAP インスタンス (EAP-IDP) にデプロイされ、idp-domain をアイデンティティーストアとして使用するよう設定されます。IDP.war は、アプリケーションの機能とともにアイデンティティーストアを使用してユーザーを認証し、ユーザーのアイデンティティーとロール情報が含まれる SAML トークンを発行します。3 つの追加の JBoss EAP インスタンス (EAP1EAP2、および EAP3) はそれぞれ、個別のサービスプロバイダーとして機能する 1 つの異なるアプリケーション (それぞれsampleAppA.warsampleAppB.war、および sampleAppC) をホストします。各 JBoss EAP インスタンスには、SAML2LoginModule を認証方法として使用するよう設定されている sso-domain セキュリティードメインがあります。各アプリケーションには、SSO をサポートし、IDP.war をアイデンティティープロバイダーとして使用し、認証に HTTP/POST バインディングを使用する機能が含まれています。また、各アプリケーションは sso-domain を使用してパス /secure/* をセキュア化するよう設定され、承認の処理に独自のロールのリストを提供します。

4.5.2. 仕組み

この例では、idp-domain セキュリティードメインの DatabaseLoginModule によって使用されるデータベースに以下のユーザーが追加されています。

Expand
表4.6 idp-domain ユーザー
ユーザー名パスワードロール

Eric

samplePass

all

Amar

samplePass

AB

Brian

samplePass

C

Alan

samplePass

 

EAP-IDP の起動時、管理インターフェースが起動した後に idp-domain を含む security サブシステムを含め、サブシステムとデプロイされたアプリケーション、IDP.war が起動します。IDP-domain はデータベースに接続し、DatabaseLoginModule ログインモジュールに設定されたようにユーザー名、パスワード、およびロールをロードします。機密情報が DatabaseLoginModule ログインモジュールのパスワードハッシュ化の設定にプレーンテキストに保存されないようにするには、特定のフィールドを隠すように設定されます (例: データベースのパスワード)。IDP.war は認証および承認に idp-domain を使用します。IDP.war は (jboss-web.xmlweb.xmlpicketlink.xml、および jboss-deployment-structure.xml を介して) 設定され、認証されたユーザーに SAML トークンを発行し、ユーザーが認証する簡単なログインフォームを提供します。これにより、アイデンティティープロバイダーとして機能できるようになります。

EAP1EAP2、および EAP3 の起動時、管理インターフェースが起動した後に security を含むサブシステムとデプロイされたアプリケーションが起動します。security サブシステムには各インスタンスの sso-domain が含まれ、それぞれ sampleAppA.warsampleAppB.war、および sampleAppC.war が含まれます。sso-domainSAML2LoginModule ログインモジュールを使用するよう設定されますが、アプリケーションに依存して適切な SAML トークンを提供します。つまり、sso-domain を使用するすべてのアプリケーションは、アイデンティティープロバイダーに正しく接続し、SAML トークンを取得する必要があります。この場合、各 sampleAppAsampleAppB、および sampleAppCjboss-web.xmlweb.xmlpicketlink.xml、および jboss-deployment-structure.xml を介して設定され、アイデンティティープロバイダーのログインフォームを使用して IDP.war から SAML トークンを取得します。

また、各アプリケーションは独自の許可されるロールでも設定されます。

Expand
表4.7 アプリケーション/SP ロール
アプリケーション/SP許可されるロール

sampleAppA

allAB

sampleAppB

allAB

sampleAppC

allC

認証されていないユーザーが sso-domain によってセキュア化された URL (すべてのアプリケーションの /secure/*) にアクセスしようとすると、ユーザーは IDP.war のログインページにリダイレクトされます。その後、ユーザーはフォームを使用して認証され、ユーザーのアイデンティティーとロール情報が含まれる SAML トークンが発行されます。ユーザーは元の URL にリダイレクトされ、SAML トークンがアプリケーション (サービスプロバイダー) に提示されます。アプリケーションは SAML トークンが有効であることを確認し、SAML トークンによって提供されたロールとアプリケーションで設定されたロールを基にしてユーザーを承認します。ユーザーに SAML トークンが発行された後、同じアイデンティティープロバイダーを使用して SSO によってセキュア化された別のアプリケーションでは、ユーザーはそのトークンを使用して認証および承認されます。SAML トークンの期限が切れ、無効になると、ユーザーはアイデンティティープロバイダーから新しい SAML トークンを取得する必要があります。

この例では、Eric が EAP1/sampleAppA/secure/hello.html にアクセスすると、ログインのために EAP-IDP/IDP/login.html にリダイレクトされます。正常にログインした後、Eric にユーザー情報とロール all が含まれる SAML トークンが発行され、EAP1/sampleAppA/secure/hello.html にリダイレクトされます。この SAML トークンが sampleAppA に提示され、トークンの確認後にロールを基にして承認が行われます。sampleAppA は、ロール all および AB/secure/* へのアクセスを許可します。 Eric は all ロールを持っているため、EAP1/sampleAppA/secure/hello.html にアクセスできます。

Eric が EAP2/sampleAppB/secure/hello.html にアクセスしようとすると、このサービスプロバイダーに対しては認証されていないため、認証リクエストとともに IDP.war に再びリダイレクトされます。Eric はすでにアイデンティティープロバイダー (IDP.war) に対して認証されているため、再認証しなくても、そのサービスプロバイダーの新しい SAML トークンを持つ IDP.war によって EAP2/sampleAppB/secure/hello.html にリダイレクトされます。sampleAppB は、新しい SAML トークンを確認し、ロールを基にして承認を行います。sampleAppB は、ロール all および AB/secure/* へのアクセスを許可します。Eric は all ロールを持っているため、EAP2/sampleAppB/secure/hello.html にアクセスすることもできます。Eric が EAP3/sampleAppC/secure/hello.html にアクセスする場合も同様に処理されます。

SAML トークンがグローバルログアウトによって無効になった後、Eric が EAP1/sampleAppA/secure/hello.html や、EAP2/sampleAppB/secure/* または EAP3/sampleAppC/secure/* 以下の URL に戻ろうとすると、再認証のために EAP-IDP/IDP/login.html へリダイレクトされ、新しい SAML トークンが発行されます。

Amar が EAP1/sampleAppA/secure/hello.html または EAP2/sampleAppB/secure/hello.html にアクセスしようとすると、Eric と同様に処理されます。Amar は AB ロールを持ち、EAP1/sampleAppA/secure/* および EAP2/sampleAppB/secure/* のみにアクセスできます。そのため、EAP3/sampleAppC/secure/hello.html にアクセスしようとすると、SAML トークンの保持または取得が必要になりますが、EAP3/sampleAppC/secure/hello.html の閲覧は制限されます。Brian も同様ですが、EAP3/sampleAppC/secure/* のみにアクセスできます。Alan はロールを持たないため、サービスプロバイダーのセキュアな領域にアクセスしようとすると、SAML トークンの保持または取得が必要になりますが、閲覧はすべて制限されます。各サービスプロバイダーには、承認の有無に関わらず、すべてのユーザーが SAML トークンを取得しなくても閲覧可能なセキュアでない領域もあります。

4.6. LDAP と ManagementRealmの使用

ここでは、LDAP を使用して管理インターフェースをセキュアにする ManagementRealm を取り上げます。JBoss EAP インスタンス (EAP1) が作成され、スタンドアロンモードで実行されています。EAP1ManagementRealm は LDAP を認証および承認メカニズムとして使用するように更新されました。

scenario6

4.6.1. セキュリティー

JBoss EAP は、LDAP および Kerberos を使用したセキュリティーレルムでの認証をサポートします。これには、既存の ManagementRealm が認証タイプとして ldap を使用するよう更新し、LDAP サーバーへのアウトバウンド接続を作成します。これにより、認証方法が digest から BASIC / Plain に変更され、ネットワーク上ではデフォルトでユーザー名とパスワードがクリアテキストで送信されます。

4.6.2. 仕組み

以下のユーザーが LDAP ディレクトリーに追加されています。

Expand
表4.8 管理ユーザー
ユーザー名パスワードロール

Adam

samplePass

SuperUser

Sam

samplePass

 

起動時、EAP1ManagementRealm と管理インターフェースを含むコアサービスをロードします。ManagementRealm は LDAP ディレクトリーサーバーに接続し、必要に応じて管理インターフェースの認証を提供します。

Adam が管理インターフェースにアクセスしようとすると、認証が強制的に実行されます。Adam のクレデンシャルは、認証に LDAP ディレクトリーサーバーを使用する ManagementRealm セキュリティーレルムに渡されます。認証された後、ロールは管理インターフェイスに戻され、認証のために渡されます。AdamSuperUser ロールを持っているので、管理インターフェイスへのアクセスが許可されます。Sam が管理インターフェースにアクセスしようとすると、LDAP 経由で認証されますが、SuperUser の適切なロールを持たないため、アクセスは拒否されます。

4.7. Kerberos を使う Desktop SSO を使用した Web アプリケーションへの SSO の提供

ここでは、JBoss で Kerberos を使用して web アプリケーションに SSO を提供する方法について説明します。JBoss EAP インスタンス (EAP1) が作成され、スタンドアロンモードで実行されています。sampleAppAsampleAppB の 2 つの web アプリケーションが EAP1 にデプロイされています。両方の web アプリケーションと EAP1 は、Kerberos でデスクトップベースの SSO を使用して認証するよう設定されています。

scenario7

4.7.1. セキュリティー

JBoss EAP は、SPNEGO と JBoss Negotiation による web アプリケーションでの SSO に対する Kerberos の使用をサポートします。Kerberos および SPNEGO の詳細は、「サードバーティー SSO 実装」 セクションを参照してください。JBoss EAP とデプロイされた web アプリケーションが認証に Kerberos を使用するようにするには、2 つのセキュリティードメインを作成する必要があります。最初のセキュリティードメイン host-domain は、kerberos ログインモジュールで設定され、Kerberos サーバーへ接続します。これにより、JBoss EAP のコンテナーレベルでの認証が可能になります。2 つ目のセキュリティードメイン spnego-domain は、2 つのログインモジュールで作成されます。その 1 つは spnego ログインモジュールを使用して host-domain に接続し、ユーザーを認証します。もう 1 つは別のログインモジュール (プロパティーファイルを使用してユーザーをロールにマップする UsersRoles など) を使用して、承認の決定に使用するロール情報をロードします。

これら 2 つのログインモジュールは、password-stacking を利用して、承認モジュールのユーザーとロールを認証モジュールのユーザーにマップします。EAP1host-domainspnego-domain の両方で設定されます。アプリケーションは、spnego-domain を使用して認証を実行し、承認のためにユーザーのロールを取得するよう、web.xml および jboss-web.xml を介して設定されます。また、セクリティートークンを OS からブラウザーに渡せない場合のために、FORM 認証をフォールバック認証としてアプリケーションに設定することもできます。FORM 認証がフォールバックとして設定された場合、追加のセキュリティードメインを追加してサポートする必要があります。このセキュリティードメインは Kerberos と SPNEGO には依存せず、FORM 認証のみ (ユーザー名/パスワードの検証およびロール) をサポートする必要があります。各アプリケーションは、spnego-domain を使用するよう設定され、FORM 認証をフォールバックとして提供するよう設定されます。また、各アプリケーションはパス /secure/* をセキュアにするよう設定され、承認の処理に独自のロールリストを提供します。

4.7.2. 仕組み

以下のユーザーが Kerberos サーバーに作成されています。

Expand
表4.9 Kerberos ユーザー
ユーザー名パスワード

Brent

samplePass

Andy

samplePass

Bill

samplePass

Ron

samplePass

以下のロールは、 password-stacking オプションを useFirstPass に設定してチェーンされた追加のモジュールを介してユーザーにマップします。

Expand
表4.10 ユーザーロール
ユーザー名ロール

Brent

all

Andy

A

Bill

B

Ron

 

各アプリケーションには以下のロールが設定されています。

Expand
表4.11 アプリケーションロール
アプリケーション/SP許可されるロール

sampleAppA

allA

sampleAppB

allB

起動時に、EAP1 はコアサービスをロードしてから security およびその他のサブシステムをロードします。host-domain は Kerberos サーバーへの接続を確立し、spnego-domainhost-domain に接続します。sampleAppA および sampleAppB がデプロイされ、認証のために spnego-domain に接続します。

Brent は Kerberos でセキュア化されたコンピューターにログインしています。その後、ブラウザーを開き、sampleAppA/secure/hello.html へのアクセスを試みます。これはセキュリティーが保護されているため、認証が必要になります。EAP1 は、Brent のコンピューターに設定されている Kerberos Key Distribution Center (Kerberos サーバー) へのキーを要求するリクエストを送信するよう、ブラウザーに指示します。ブラウザーがキーを取得すると、これは simpleAppA に送信されます。simpleAppA はチケットを spnego-domain に送信します。そこでチケットがアンパックされ、設定済みの Kerberos サーバーとともに host-domain によって認証が実行されます。チケットが認証されたら、Brent のロールは sampleAppA に戻され、承認が実行されます。Brentall ロールを持っているため、sampleAppA/secure/hello.html にアクセスできます。BrentsampleAppB/secure/hello.html にアクセスしようとすると、同じ処理が行われ、(all のロールを持つため) アクセスが許可されます。AndyBill は同じプロセスに従いますが、AndysampleAppA/secure/hello.html のみにアクセスでき、sampleAppB/secure/hello.html にはアクセスできません。Bill はこの逆で、sampleAppB/secure/hello.html にアクセスでき、sampleAppA/secure/hello.html にはアクセスできません。RonsampleAppA/secure/hello.html または sampleAppB/secure/hello.html の認証に成功しますが、ロールを持たないためどちらにもアクセスできません。

オフィスのネットサークに接続する個人のラップトップなど、Andy が Kerberos でセキュア化されていないコンピューターから sampleAppA/secure/hello.html にアクセスしようとすると、フォールバックのログインとして FORM ログインページに転送されます。Andy のクレデンシャルはフォールバックセキュリティードメイン経由で認証され、承認の処理が続行されます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat