第4章 Elytron サブシステムの例


4.1. 初期状態

JBoss EAP はデフォルトで以下の事前設定されたコンポーネントを提供します。

ApplicationDomain
ApplicationDomain セキュリティードメインは認証に ApplicationRealm および groups-to-roles を使用します。また、ログインパーミッションの割り当てに default-permission-mapper も使用します。
ApplicationRealm
ApplicationRealm セキュリティーレルムは、application-users.properties を使用してプリンシパルを認証し、application-roles.properties を使用してロールを割り当てるセキュリティーレルムです。これらのファイルは、デフォルトで EAP_HOME/standalone/configuration にマップする jboss.server.config.dir の下にあります。これらのファイルは、レガシーのデフォルトセキュリティー設定で使用されるファイルと同じです。
application-http-authentication
application-http-authentication http-authentication-factory は HTTP 上の認証に使用できます。これは、global provider-http-server-mechanism-factory を使用して認証方法をフィルターし、認証するプリンシパルに ApplicationDomain を使用します。BASIC および FORM 認証を許可し、BASICApplication Realm としてアプリケーションに公開します。
application-sasl-authentication
application-sasl-authentication sasl-authentication-factory は SASL を使用した認証に使用できます。これは configured sasl-server-factory を使用して認証方法をフィルターし、また global provider-sasl-server-factory を使用してプロバイダー名をフィルターします。application-sasl-authentication は、プリンシパルの認証に ApplicationDomain セキュリティードメインを使用します。
configured (configurable-sasl-server-factory)
これは、メカニズム名を基に使用される sasl-authentication-factory をフィルターするために使用されます。この場合、configuredJBOSS-LOCAL-USER および DIGEST-MD5 で一致します。また、 wildfly.sasl.local-user.default-user$local に設定します。
default-permission-mapper
default-permission-mapper マッパーは、org.wildfly.security.auth.permission.LoginPermission を使用してログインパーミッションを割り当て、org.wildfly.extension.batch.jberet.deployment.BatchPermission を使用してバッチジョブのパーミッションを割り当てる定数パーミッションマッパーです。バッチパーミッションは startstoprestartabandon、および read で、javax.batch.operations.JobOperator と一致します。
elytron (mechanism-provider-filtering-sasl-server-factor)
これは、プロバイダーを基に使用される sasl-authentication-factory をフィルターするために使用されます。この場合、elytronWildFlyElytron プロバイダー名で一致します。
global (provider-http-server-mechanism-factory)
HTTP 認証ファクトリーの作成時にサポートされる認証方法をリストするために使用される HTTP サーバーファクトリーのメカニズム定義です。
global (provider-sasl-server-factory)
これは、SASL 認証ファクトリーを作成するために使用される SASL サーバーファクトリー定義です。
groups-to-roles
groups-to-roles マッパーは、プリンシパルの groups 情報をデコードし、role 情報に使用する簡単なロールデコーダーです。
local (マッパー)
local マッパーは、local セキュリティーレルムにマップする定数ロールマッパーです。認証を local セキュリティーレルムにマップするのに使用されます。
local (セキュリティーレルム)
local セキュリティーレルムは認証を行わず、プリンシパルのアイデンティティーを $local に設定します。
ManagementDomain
ManagementDomain セキュリティードメインは認証に 2 つのセキュリティーレルムを使用します。groups-to-roles では ManagementRealm を使用し、super-user-mapper では local を使用します。また、ログインパーミッションの割り当てに default-permission-mapper も使用します。
ManagementRealm
ManagementRealm セキュリティーレルムは、mgmt-users.properties を使用してプリンシパルを認証し、mgmt-roles.properties を使用してロールを割り当てるセキュリティーレルムです。これらのファイルは、デフォルトで EAP_HOME/standalone/configuration にマップする jboss.server.config.dir の下にあります。これらのファイルは、レガシーのデフォルトセキュリティー設定で使用されるファイルと同じです。
management-http-authentication
management-http-authentication http-authentication-factory は、HTTP 上の認証に使用できます。これは global provider-http-server-mechanism-factory を使用して認証方法をフィルターし、ManagementDomain を認証するプリンシパルに使用します。 DIGEST 認証を許可し、ManagementRealm としてアプリケーションに公開します。
management-sasl-authentication
management-sasl-authentication sasl-authentication-factory は SASL を使用した認証に使用できます。これは configured sasl-server-factory を使用して認証方法をフィルターし、また global provider-sasl-server-factory を使用してプロバイダー名をフィルターします。management-sasl-authentication は、プリンシパルの認証に ManagementDomain セキュリティードメインを使用します。また、local レルムマッパーを使用して JBOSS-LOCAL-USER を使った認証をマップし、DIGEST-MD5 を使った認証を ManagementRealm にマップします。
super-user-mapper
super-user-mapper マッパーは SuperUser ロールをプリンシパルにマップする定数ロールマッパーです。

4.1.1. セキュリティー

アプリケーションをセキュアにするため、JBoss EAP には事前設定された HTTP 用の application-http-authentication と SASL 用の application-sasl-authentication が同梱されています。application-http-authentication http-authentication-factory は、認証に ApplicationRealmgroups-to-roles を使用する ApplicationDomain を使用します。ApplicationRealm は、ユーザー名、パスワード、およびロール情報に対して application-users.properties および application-roles.properties が関係する properties-realm です。

管理インターフェースをセキュアにするため、JBoss EAP には事前設定された HTTP 用の management-http-authentication と SASL 用の management-sasl-authentication が同梱されています。management-http-authentication http-authentication-factory は、認証に ManagementRealmgroups-to-roles を使用する ManagementDomain を使用します。 ManagementRealm は、ユーザー名、パスワード、およびロール情報に対して mgmt-users.properties および mgmt-roles.properties が関係する properties-realm です。management-sasl-authentication sasl-authentication-factory は JBOSS-LOCAL-USER 認証に local を使用し、DIGEST-MD5 認証に ManagementRealm を使用します。

4.1.2. 仕組み

デフォルトでは JBoss EAP のユーザーは存在しませんが、この例の目的で以下のユーザーが追加されています。

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

Susan

Testing123!

 

ManagementRealm

Sarah

Testing123!

sample

ApplicationRealm

Frank

Testing123!

 

ApplicationRealm

JBoss EAP インスタンスは起動時に、4 つの認証ファクトリーとそれらに関連するセキュリティードメイン、セキュリティーレルム、およびその他設定済みのコンポーネントをロードします。

JBOSS-LOCAL-USER を使用して管理 CLI で管理インターフェースにアクセスしようとするユーザーがいる場合 (JBoss EAP インスタンスと同じホストから管理 CLI を実行している)、そのユーザーは local セキュリティーレルムを使用して ManagementDomain でユーザーを認証しようとする management-sasl-authentication sasl-authentication-factory に転送されます。

Susan が異なるホストから管理 CLI を使用して管理インターフェースにアクセスしようとする場合、SASL で DIGEST-MD5 認証を使用します。Susan は、 ManagementRealm セキュリティーレルムを使用して ManagementDomain でユーザーを認証しようとする management-sasl-authentication sasl-authentication-factory に転送されます。

Susan が web ベースの管理コンソールを使用して管理インターフェースにアクセスしようとする場合、HTTP で DIGEST 認証を使用することになります。Susan は、ManagementRealm セキュリティーレルムを使用して ManagementDomain でユーザーを認証しようとする management-http-authentication http-authentication-factory に転送されます。

アプリケーション sampleApp1.war には /hello.html/secure/hello.html の 2 つの HTML ファイルがあり、BASIC HTTP 認証を使用してパス /secure/* をセキュアにします。Application Realm を使用し、sample ロールが必要です。ユーザーが sampleApp1.war にアクセスしようとすると、application-http-authentication http-authentication-factory に転送されます。ApplicationRealm セキュリティーレルムを使用して ApplicationDomain でユーザーを認証しようとします。

Sarah が /hello.html を要求すると、認証なしでページを閲覧できます。Sarah が /secure/hello.html を要求すると、ユーザー名とパスワードの入力が求められます。ログインに成功した後、Sarah は /secure/hello.html を閲覧できます。Frank や Susan を含むすべてのユーザーが /hello.html にアクセスできますが、Frank と Susan は /secure/hello.html にはアクセスできません。Frank は sample ロールを持たず、Susan は ApplicationRealm セキュリティーレルムに存在しません。

4.2. SSL/TLS を使用した管理インターフェースおよびアプリケーションのセキュア化

ここでは、管理インターフェースとアプリケーションの両方で SSL/TLS に Elytron を使用する場合に JBoss EAP をセキュアにする方法を説明します。

4.2.1. セキュリティー

JBoss EAP では、管理インターフェースとアプリケーションの両方を SSL/TLS でセキュアにすることができます。Elytron を使用してこの設定が統一されたため、管理インターフェースとアプリケーションの両方を同じ SSL/TLS 設定でセキュアにすることができるようになりました。Elytron では、key-storekey-manager、および server-ssl-context を作成して SSL/TLS が設定されます。管理インターフェースに対して SSL/TLS を有効にするには、http-interfacesecure-socket-binding を設定し、server-ssl-context を管理インタフェースに割り当てます。これにより、管理インターフェースが HTTP トラフィックに SSL/TLS を使用できるようになります。アプリケーションに対して SSL/TLS を有効にするには、undertow サブシステムで server-ssl-contexthttps-listener に割り当てます。SSL/TLS の背景情報については、「高度なセキュリティー」を参照してください。

4.2.2. 仕組み

JBoss EAP は起動時に管理インターフェースをコアサービスの一部としてロードします。また、SSL/TLS に対して設定された http-interface も起動します。さらに、アプリケーションの SSL/TLS に設定された undertow サブシステムと、server-ssl-context より SSL/TLS 設定を提供する elytron サブシステムも起動します。SSL/TLS が有効になっているセキュアなポート上で管理インターフェースとアプリケーションの両方にアクセスできます。

4.3. 新しいアイデンティティーストアを用いた管理インターフェースおよびアプリケーションのセキュア化

ここでは、JBoss EAP の管理インターフェースおよびアプリケーションの両方を Elytron の新しいアイデンティティーストアでセキュアにする方法を説明します。アプリケーション sampleApp2.war は JBoss EAP にデプロイされ、basicExampleDomain を使用するよう設定されます。

4.3.1. セキュリティー

JBoss EAP では、ManagementRealmApplicationRealm を超えてアイデンティティーストアで管理インターフェースとアプリケーションをセキュア化できます。Elytron では、同じアイデンティティーストアを使用して管理インターフェースとアプリケーションをセキュアにできますが、個別のアイデンティティーストアを設定することもできます。アイデンティティーストアは、filesystem-realmjdbc-realmldap-realm などのセキュリティーレルムによって表されます。この例のために、exampleRealm という名前の filesystem-realm が作成されています。また、exampleDomain という名前のセキュリティードメインも作成されています。このセキュリティードメインは、exampleRealm をアイデンティティーストアとして使用し、groups-to-roles ロールマッパーを使用して exampleRealm によって提供されるグループ情報をロールにデコードし、マッピングパーミッションに default-permission-mapper を使用します。

HTTP 認証では、 exampleHttpAuthFactory という http-authentication-factory が作成されています。これは、認証に global HTTP サーバーファクトリーのメカニズムと exampleDomain を使用します。また、2 つのメカニズム設定があり、1 つは basicExampleDomain として公開される BASIC 認証を使用し、もう 1 つは digestExampleDomain として公開される DIGEST 認証を使用します。HTTP 管理インターフェースは exampleHttpAuthFactory を使用するよう設定されています。また、undertow サブシステムも exampleHttpAuthFactory を使用する新しい application-security-domain で設定されています。アプリケーション sampleApp2.warBASIC 認証で basicExampleDomain を使用するよう設定されています。

SASL 認証では、exampleSaslAuthFactory という sasl-authentication-factory が作成されています。これは、認証に configured SASL サーバーファクトリーと exampleDomain を使用します。また、digestMD5ExampleDomain として公開される DIGEST-MD5 認証が設定されています。管理インターフェースの SASL 設定は exampleSaslAuthFactory を使用するよう設定されています。

4.3.2. 仕組み

以下のユーザーが exampleRealm に追加されています。

表4.2 exampleRealm ユーザー
ユーザー名パスワードロール

Vincent

samplePass

sample

Issac

samplePass

guest

起動時、JBoss EAP はコアサービスをロードし、undertow および elytron サブシステムを起動します。これにより、管理インターフェースをセキュアにし、JBoss EAP にデプロイされたアプリケーションに対して basicExampleDomaindigestExampleDomain、および digestMD5ExampleDomain を公開します。

sampleApp2.war がロードされると、basicExampleDomain を検索し、セキュアな URL の認証および承認を提供します。/hello.html/secure/hello.html の 2 つの HTML ファイルがあり、BASIC 認証を使用してパス /secure/* をセキュア化します。セキュアな URL にアクセスするには、sample ロールが必要です。

ユーザーの認証時、JBoss EAP へのアクセス方法に応じて、特定のメカニズムを使用してクレデンシャルが提出されます。たとえば、ユーザーが DIGEST 認証で HTTP を使用する管理コンソールにアクセスしようとすると、digestExampleDomain として公開される DIGEST 認証を使用して認証されます。BASIC 認証で HTTP を使用する sampleApp2.war にアクセスしようとすると、basicExampleDomain として公開される BASIC 認証を使用して認証されます。DIGEST 認証で SASL を使用する管理 CLI にアクセスしようとすると、digestMD5ExampleDomain として公開される DIGEST-MD5 を使用して認証されます。HTTP 認証は exampleHttpAuthFactory を使用し、SASL 認証は exampleSaslAuthFactory を使用します。両方の認証ファクトリーは、exampleDomain で認証とロールマッピングに対処します。

Vincent または Issac が管理インターフェースにアクセスしようとすると、ユーザー名とパスワードの入力を要求されます。正常にログインした後、各ユーザーは管理操作を実行できます。

Vincent または Issac が /hello.html をリクエストすると、そのページを認証なしで閲覧できます。Vincent または Issac が /secure/hello.html をリクエストすると、ユーザー名とパスワードの入力を要求されます。正常にログインした後、Vincent は sample ロールを持っているため /secure/hello.html を閲覧できますが、Issac は guest ロールを持っているため /secure/hello.html を閲覧できません。その他すべてのユーザーはログインせずに /hello.html にアクセスできますが、exampleRealm に存在するユーザーは Vincent と Issac のみであるため、/secure/hello.html にはアクセスできません。

4.4. RBAC を使用した管理インターフェースのセキュア化

ここでは、RBAC と elytron サブシステムのアイデンティティーストアを使用して JBoss EAP 管理インターフェースをセキュアにする方法を説明します。

4.4.1. セキュリティー

JBoss EAP では、管理インターフェースで RBAC を使用できます。RBAC の概念については、RBAC の説明を参照してください。この例では、exampleRealm というセキュリティーレルムを使用します。ロールデコーダー、セキュリティードメイン、認証ファクトリーなどの残りのセキュリティー設定は、新しいアイデンティティーストアを用いた管理インターフェースおよびアプリケーションのセキュア化 と同じになります。RBAC は、管理インターフェースに対して provider 属性を rbac に設定し、希望のユーザーとロールで exampleRealm を更新すると有効になります。

4.4.2. 仕組み

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

表4.3 exampleRealm ユーザー
ユーザー名パスワード

Suzy

Testing123!

Tim

Testing123!

Emily

Testing123!

Zach

Testing123!

Natalie

Testing123!

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

表4.4 RBAC ロール
ユーザー名RBAC ロール

Suzy

SuperUser

Tim

Administrator

Emily

Maintainer

Zach

Deployer

Natalie

Monitor

起動時、JBoss EAP はコアサービスと、セキュリティーおよび RBAC 設定をロードする elytron サブシステムをロードします。RBAC が有効になっていない場合、exampleRealm のユーザーはすべて SuperUser として考慮され、アクセスが無制限になります。RBACは有効になっているため、各ユーザーは持っているロールに応じて制限されるようになります。上記の表のとおり、Suzy、Tim、Emily Zach および Natalie は、異なるロールを持っています。たとえば、Suzy と Tim のみがアクセス制御情報の読み取りと編集を行えます。Suzy、Tim、および Emily はランタイム状態とその他の永続設定の情報を編集できます。Zach もランタイム状態とその他の永続設定の情報を編集できますが、アプリケーションリソースに関係するもののみに限定されます。Suzy、Tim、Emily、Zack、および Natalie は設定および状態情報を読み取りできますが、Natalie は何も更新できません。各ロールの詳細とJBoss EAP による RBAC の処理方法については、「ロールベースのアクセス制御」と「管理インターフェースへの RBAC の追加」を参照してください。

4.5. Kerberos を使用した web アプリケーションに対する SSO の提供

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

4.5.1. セキュリティー

JBoss EAP は、SPNEGO 認証を使用した Kerberos での認証を提供します。Kerberos と SPNEGO に特化した情報は、「サードパーティーの SSO 実装」を参照してください。JBoss EAP とデプロイされた web アプリケーションが認証に Kerberos を使用するようにするには、kerberos-security-factory を作成して Kerberos サーバーに接続します。Kerberos サーバーからユーザーにロールを割り当てるために、セキュリティーレルム、ロールマッパー、およびセキュリティードメインも作成されます。kerberos-security-factory を使用し、認証とロールの割り当てにセキュリティードメインを使用する http-authentication-factory が作成されます。認証方法は SPNEGO 認証を使用し、exampleSpnegoDomain として公開されます。また、undertow サブシステムは、認証に http-authentication-factory を使用するよう設定されます。

sampleAppAsampleAppB の両方は、認証の実行に exampleSpnegoDomain を使用するよう設定され、承認にユーザーのロールを取得します。セキュリティートークンをオペレーティングシステムからブラウザーに渡すことができない場合のために、FORM 認証をフォールバック認証として両方のアプリケーションに設定することもできます。FORM 認証がフォールバックとして設定された場合、追加の認証方法とサポートするセキュリティードメインを設定する必要があります。認証方法は Kerberos と SPNEGO には依存せず、FORM 認証のみをサポートする必要があります。この場合、追加の認証とサポートするセキュリティードメインを FORM 認証に対して設定し、 exampleFormDomain として公開する必要があります。各アプリケーションは exampleFormDomain を使用し、FORM 認証をフォールバックとして提供するよう、設定されます。また、各アプリケーションはパス /secure/* をセキュアにするよう設定され、承認を処理するために独自のロールリストを提供します。

4.5.2. 仕組み

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

表4.5 Kerberos ユーザー
ユーザー名パスワード

Sande

samplePass

Andrea

samplePass

Betty

samplePass

Chuck

samplePass

セキュリティードメインを使用して以下のロールがユーザーにマップされます。

表4.6 ユーザーロール
ユーザー名ロール

Sande

all

Andrea

A

Betty

B

Chuck

 

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

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

sampleAppA

all、A

sampleAppB

all、B

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

Sande は Kerberos でセキュア化されたコンピューターにログインしています。Sande はブラウザーを開き、sampleAppA/secure/hello.html へのアクセスを試みます。このページはセキュアであるため、認証が必要になります。EAP1 は、Sande のコンピューターに設定されている Kerberos Key Distribution Center (Kerberos サーバー) へのキーを要求するリクエストを送信するよう、ブラウザーに指示します。ブラウザーがキーを取得した後、sampleAppA に送信されます。sampleAppAexampleSpnegoDomain を使用してチケットを JBoss EAP に送信します。そこでチケットがアンパックされ、kerberos-security-factory の設定済みの Kerberos サーバーとともに認証が実行されます。チケットが認証されたら、Sande のロールは sampleAppA に戻され、承認が実行されます。Sande は all ロールを持っているため、sampleAppA/secure/hello.html にアクセスできます。Sande が sampleAppB/secure/hello.html にアクセスする場合も同じ処理が発生します。 all ロールを持っているため、アクセスが許可されます。Andrea と Betty にも同じ処理が発生しますが、Andrea は sampleAppA/secure/hello.html のみにアクセスでき、sampleAppB/secure/hello.html にはアクセスできません。Betty はこの逆で、sampleAppB/secure/hello.html のみにアクセスでき、sampleAppA/secure/hello.html にはアクセスできません。Chuck は sampleAppA/secure/hello.html または sampleAppB/secure/hello.html の認証に成功しますが、ロールを持たないためどちらにもアクセスできません。

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

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.