第2章 サーバーのユーザーと管理インターフェースのセキュア化

2.1. Elytron でのユーザー認証

2.1.1. デフォルト設定

デフォルトでは、JBoss EAP 管理インターフェースはレガシーコア管理認証によってセキュア化されます。

例: デフォルト設定

/core-service=management/management-interface=http-interface:read-resource()
{
    "outcome" => "success",
    "result" => {
        "allowed-origins" => undefined,
        "console-enabled" => true,
        "http-authentication-factory" => undefined,
        "http-upgrade" => {"enabled" => true},
        "http-upgrade-enabled" => true,
        "sasl-protocol" => "remote",
        "secure-socket-binding" => undefined,
        "security-realm" => "ManagementRealm",
        "server-name" => undefined,
        "socket-binding" => "management-http",
        "ssl-context" => undefined
    }

JBoss EAP では、管理インターフェースをセキュアにするために、elytron サブシステムで management-http-authentication および management-sasl-authentication を利用できます。

JBoss EAP をデフォルトの Elytron コンポーネントを使用するように更新するには、以下の手順に従います。

  1. management-http-authentication を使用するように、http-authentication-factory を設定します。

    /core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=management-http-authentication)
  2. management-sasl-authentication を使用するように sasl-authentication-factory を設定します。

    /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=management-sasl-authentication)
  3. security-realm の定義を解除します。

    /core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
  4. 変更を有効にするには、JBoss EAP をリロードします。
reload

管理インターフェースのセキュリティーは、elytron サブシステムによって提供されるデフォルトのコンポーネントを使用して保護されるようになりました。

2.1.1.1. Elytron HTTP 認証のデフォルト設定

http で管理インターフェースにアクセスする場合 (Web ベースの管理コンソールを使用する場合など)、JBoss EAP はmanagement-http-authentication http-authentication-factory を使用します。

/subsystem=elytron/http-authentication-factory=management-http-authentication:read-resource()
{
    "outcome" => "success",
    "result" => {
        "http-server-mechanism-factory" => "global",
        "mechanism-configurations" => [{
            "mechanism-name" => "DIGEST",
            "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
        }],
        "security-domain" => "ManagementDomain"
    }
}

management-http-authentication http-authentication-factory は ManagementDomain セキュリティードメインを使用するよう設定されます。

/subsystem=elytron/security-domain=ManagementDomain:read-resource()
{
    "outcome" => "success",
    "result" => {
        "default-realm" => "ManagementRealm",
        "permission-mapper" => "default-permission-mapper",
        "post-realm-principal-transformer" => undefined,
        "pre-realm-principal-transformer" => undefined,
        "principal-decoder" => undefined,
        "realm-mapper" => undefined,
        "realms" => [
            {
                "realm" => "ManagementRealm",
                "role-decoder" => "groups-to-roles"
            },
            {
                "realm" => "local",
                "role-mapper" => "super-user-mapper"
            }
        ],
        "role-mapper" => undefined,
        "trusted-security-domains" => undefined
    }
}

ManagementDomain セキュリティードメインは、プロパティーベースのレルムである ManagementRealm Elytron セキュリティーレルムによってサポートされます。

重要

プロパティーベースのレルムは、サーバーの起動時にのみ読み取られます。サーバーの起動後に、手動または add-user スクリプトを使用して追加したユーザーは、サーバーをリロードする必要があります。このリロードは、管理 CLI から reload コマンドを実行すると実行できます。

reload
/subsystem=elytron/properties-realm=ManagementRealm:read-resource()
{
    "outcome" => "success",
    "result" => {
        "groups-attribute" => "groups",
        "groups-properties" => {
            "path" => "mgmt-groups.properties",
            "relative-to" => "jboss.server.config.dir"
        },
        "plain-text" => false,
        "users-properties" => {
            "path" => "mgmt-users.properties",
            "relative-to" => "jboss.server.config.dir"
        }
    }
}

2.1.1.2. デフォルトの Elytron 管理 CLI 認証

デフォルトでは、管理 CLI (jboss-cli.sh) は remote+http で接続するように設定されます。

例: デフォルトの jboss-cli.xml

<jboss-cli xmlns="urn:jboss:cli:3.1">

    <default-protocol use-legacy-override="true">remote+http</default-protocol>

    <!-- The default controller to connect to when 'connect' command is executed w/o arguments -->
    <default-controller>
        <protocol>remote+http</protocol>
        <host>localhost</host>
        <port>9990</port>
    </default-controller>

これにより、HTTP 経由で接続が確立され、HTTP アップグレードを使用して通信プロトコルが Remoting に変更されます。HTTP アップグレード接続は、sasl-authentication-factory を使用して http-interfacehttp-upgrade セクションでセキュア化されます。

例: デフォルトコンポーネントの設定

/core-service=management/management-interface=http-interface:read-resource()
{
    "outcome" => "success",
    "result" => {
        "allowed-origins" => undefined,
        "console-enabled" => true,
        "http-authentication-factory" => "management-http-authentication",
        "http-upgrade" => {
            "enabled" => true,
            "sasl-authentication-factory" => "management-sasl-authentication"
        },
        "http-upgrade-enabled" => true,
        "sasl-protocol" => "remote",
        "secure-socket-binding" => undefined,
        "security-realm" => undefined,
        "server-name" => undefined,
        "socket-binding" => "management-http",
        "ssl-context" => undefined
    }
}

デフォルトの sasl-authentication-factory は management-sasl-authentication です。

/subsystem=elytron/sasl-authentication-factory=management-sasl-authentication:read-resource()
{
    "outcome" => "success",
    "result" => {
        "mechanism-configurations" => [
            {
                "mechanism-name" => "JBOSS-LOCAL-USER",
                "realm-mapper" => "local"
            },
            {
                "mechanism-name" => "DIGEST-MD5",
                "mechanism-realm-configurations" => [{"realm-name" => "ManagementRealm"}]
            }
        ],
        "sasl-server-factory" => "configured",
        "security-domain" => "ManagementDomain"
    }
}

management-sasl-authentication sasl-authentication-factory は、JBOSS-LOCAL-USERDIGEST-MD5 メカニズムを指定します。

DIGEST-MD5 で使用される ManagementRealm Elytron セキュリティーレルムは management-http-authentication http-authentication-factory で使用されるレルムと同じです。

例: JBOSS-LOCAL-USER レルム

/subsystem=elytron/identity-realm=local:read-resource()
{
    "outcome" => "success",
    "result" => {
        "attribute-name" => undefined,
        "attribute-values" => undefined,
        "identity" => "$local"
    }
}

local Elytron セキュリティレリムは、ローカルユーザーに対するサイレント認証を処理します。

2.1.2. 新規アイデンティティーストアでの管理インターフェースのセキュア化

  1. アイデンティティーストアのセキュリティードメインおよびサポートするセキュリティーレルム、デコーダー、またはマッパーを作成します。

    このプロセスは、JBoss EAP『 How to Configure Identity Management Guide』 の「 Elytron Subsystem 」で説明されています。たとえば、ファイルシステムベースのアイデンティティーストアを使用して管理インターフェースのセキュリティーを保護する場合は、「 Configure Authentication with a Filesystem-based Identity Store 」の手順に従います。

  2. http-authentication-factory または masasl-authentication-factory を作成します。

    例: http-authentication-factory

    /subsystem=elytron/http-authentication-factory=example-http-auth:add(http-server-mechanism-factory=global, security-domain=exampleSD, mechanism-configurations=[{mechanism-name=DIGEST, mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]}])

    例: sasl-authentication-factory

    /subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured, security-domain=exampleSD, mechanism-configurations=[{mechanism-name=DIGEST-MD5, mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]}])

  3. Pattern-filter を configured configurable-sasl-server-factory に追加します。

    例: GSSAPI の Configured configurable-sasl-server-factory への追加

    /subsystem=elytron/configurable-sasl-server-factory=configured:list-add(name=filters, value={pattern-filter=GSSAPI})

    これは任意の手順です。クライアントが HTTP 管理インターフェースへの接続を試みると、JBoss EAP は HTTP 応答とともに状態コード 401 Unauthorized と、ダイジェストや GSSAPI などのサポートされる認証をリストする一連のヘッダーを返信します。詳細は、JBoss EAP『 セキュリティーアーキテクチャーの「HTTP インターフェースによるローカルおよびリモートクライアント認証 」を参照してください。

  4. 管理インターフェースを更新して、http-authentication-factory または sasl-authentication-factory を使用します。

    例: http-authentication-factory の更新

    /core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=example-http-auth)
    
    reload

    例: sasl-authentication-factory の更新

    /core-service=management/management-interface=http-interface:write-attribute(name=http-upgrade.sasl-authentication-factory, value=example-sasl-auth)
    
    reload

    注記

    レガシーのコア管理認証を使用する場合は、http 管理インターフェースのみを単一のレガシーセキュリティーレルムでセキュアにすることができます。これにより、HTTP および SASL 設定が単一のレガシーセキュリティーレルムに強制的に表示されます。elytron サブシステムを使用する場合は、http-authentication-factorysasl-authentication-factory を別々に設定し、http 管理インターフェースの HTTP および SASL メカニズムをセキュアにするために個別のセキュリティードメインを使用できます。

注記

レガシーセキュリティーと Elytron で同等の実装を持つ複数の異なる属性が管理インターフェースで設定されている場合は、Elytron 関連設定のみが使用されます。たとえば、レガシーセキュリティーに security-realm、Elytron に http-authentication-factory が設定されている場合、認証は http-authentication-factory 設定で処理されます。

注記

管理インターフェースに http-authentication-factory または HTTP インターフェースの sasl-authentication-factorysecurity-realm の両方が含まれていて、ssl-context が使用されていない場合、認証は Elytron によって処理され、SSL はレガシーセキュリティーレルムによって処理されます。

管理インターフェースに security-realmssl-context の両方が含まれ、HTTP インターフェースの http-authentication-factory または sasl-authentication-factory が使用されていない場合、認証はレガシーセキュリティーレルムによって処理され、SSL は Elytron によって処理されます。

2.1.3. サイレント認証の追加

デフォルトでは、JBoss EAP は local セキュリティーレルム経由でのサイレント認証として知られるローカルユーザーの認証メカニズムを提供します。サイレント認証の詳細は、「サイレント認証」を参照してください。

サイレント認証は sasl-authentication-factory に追加する必要があります。

サイレント認証を既存の sasl-authentication-factory に追加するには、以下を実行します。

/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:list-add(name=mechanism-configurations, value={mechanism-name=JBOSS-LOCAL-USER, realm-mapper=local})

reload

サイレント認証で sasl-server-factory を新たに作成するには、以下を実行します。

/subsystem=elytron/sasl-authentication-factory=example-sasl-auth:add(sasl-server-factory=configured,security-domain=ManagementDomain,mechanism-configurations=[{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=exampleManagementRealm}]},{mechanism-name=JBOSS-LOCAL-USER, realm-mapper=local}])

reload
注記

上記の例では、既存の ManagementDomain セキュリティードメインを使用していますが、他のセキュリティードメインを作成して使用することも可能です。セキュリティードメインの作成例は、JBoss EAP『 How to Configure Identity Management Guide』の「 Elytron Subsystem 」を参照してください

重要

Elytron セキュリティーが使用され、実際のアイデンティティーに対応しない認証名で JBOSS-LOCAL-USER SASL メカニズムを使用して認証試行を行うと、認証は失敗します。

レガシー security サブシステムを使用すると、JBOSS-LOCAL-USER のカスタムユーザー名を選択できます。ユーザー名を特殊アイデンティティーにマッピングすることで、認証が続行されます。

2.1.4. 認証済み管理ユーザーのアイデンティティーマッピング

elytron サブシステムを使用して管理インターフェースをセキュアにする場合は、認証されたユーザーのアイデンティティーマッピング用の管理インターフェースにセキュリティードメインを提供できます。これにより、認証されたユーザーは、管理インターフェースにログインする際に適切なアイデンティティーとともに表示されます。

アプリケーションサーバーは、複数の種類の管理インターフェースを公開します。各タイプのインターフェースは、独立した authentication-factory に関連付けて、そのインターフェースの認証要件を処理できます。

承認の決定を行うために、現在のセキュリティーアイデンティティーがセキュリティードメインから取得されます。返されたセキュリティーアイデンティティーには、そのセキュリティードメイン内で定義されたルールに基づいたロールマッピングおよびパーミッション割り当てが設定されます。

注記

多くの場合、共通のセキュリティードメインはすべての管理に使用されます。管理インターフェースの認証および承認決定に使用されるセキュリティーアイデンティティーの取得に使用されます。このような場合、セキュリティードメインは管理インターフェースの認証ファクトリーと関連付けられ、特別な access=identity を定義する必要はありません。

場合によっては、承認決定のアイデンティティーを取得するために異なるセキュリティードメインが使用されることがあります。ここでは、access=identity リソースが定義されます。これには、承認のためにアイデンティティーを取得するためのセキュリティードメインへの参照が含まれます。

以下の例では、管理インターフェースを exampleSD Elytron セキュリティードメインでセキュリティー保護し、exampleManagementRealm として公開していることを前提としています。

アイデンティティーマッピングを定義するには、identity リソースを管理インターフェースに追加します。

例: identity リソースの追加

/core-service=management/access=identity:add(security-domain=exampleSD)

identity リソースを追加すると、管理インターフェースにアクセスするときに認証済みユーザーのアイデンティティーが表示されます。identity リソースが追加されない場合は、認証に使用されるセキュリティードメインのアイデンティティーが使用されます。

たとえば、user1 として管理 CLI にログインすると、アイデンティティーが適切に表示されます。

例: 管理 CLI から認証されたユーザーの ID の表示

:whoami
{
    "outcome" => "success",
    "result" => {"identity" => {"username" => "user1"}}
}

重要

identity リソースが追加され、レガシーセキュリティーレルムを使用して管理インターフェースをセキュアにする場合、認証されたユーザーは常に anonymous のアイデンティティーを持ちます。identity リソースが削除されると、レガシーセキュリティーレルムから認証されたユーザーが適切なアイデンティティーとともに表示されます。

管理操作の承認は、access=identity に指定されたドメインであるセキュリティードメインを常に使用します。指定されていない場合は、認証に使用されるドメインになります。ロールマッピングは常にセキュリティードメインのコンテキストで使用されます。

現在のリクエストの identity リソースは、Elytron 設定を使用してマップされたロールのセットを返します。RBAC ベースのロールマッピング定義が使用されている場合、identity リソースのロールはグループとして取得され、管理 RoleMapping にフィードされて現在のリクエストの管理ロールを取得します。

表2.1 各種シナリオで使用する ID

シナリオNo access=identity definitionElytron security-domain を参照する access=identity

レガシーの security-realm を使用する HTTP 管理インターフェース

接続からのアイデンティティー

サポートされないか、匿名のアイデンティティー

security-domain が関係する elytron HTTP 認証ファクトリーを使用した HTTP 管理インターフェース

接続からのアイデンティティー

正常にインフローされた場合は、参照される security-domain からのアイデンティティー

レガシー security-realm を使用した HTTP アップグレードを含むネイティブ管理インターフェース

接続からのアイデンティティー

サポートされないか、匿名のアイデンティティー

security-domain が関係する elytron SASL 認証ファクトリーを使用した、ネイティブ管理 (HTTP アップグレードを含む) インターフェース

接続からのアイデンティティー

正常にインフローされた場合は、参照される security-domain からのアイデンティティー

注記

identity リソースで使用されるセキュリティードメインが認証からセキュリティードメインを信頼しない場合は、匿名のアイデンティティーが使用されます。

両方が同一のセキュリティーレルムを使用している場合は、identity リソースで使用されるセキュリティードメインは認証からセキュリティードメインを信頼する必要はありません。

信頼されるセキュリティードメインは推移的ではありません。

access=identity リソースが定義されていない場合は、管理インターフェースに対して認証している際に確立されるアイデンティティーが使用されます。この場合、remoting サブシステム経由の接続またはアプリケーションの使用して確立されたアイデンティティーは使用できなくなります。

access=identity リソースが定義されていても、管理インターフェースが使用するセキュリティードメインが異なり、インフロー元のドメイン一覧に記載さレテいない場合、アイデンティティーは確立されません。インフローは、認証中に確立されたアイデンティティーを使用して試行されます。この場合、remoting サブシステム経由の接続またはアプリケーションの使用して確立されたアイデンティティーは、この方法でインフローできなくなります。

重要

管理インターフェースがレガシーセキュリティーレルムを使用してセキュア化された場合、アイデンティティーは複数の異なるセキュリティードメイン間で共有できなくなります。この場合、access=identity リソースを定義することはできません。そのため、認証中に確立されたアイデンティティーを直接使用できます。したがって、PicketBox を使用してセキュア化されたアプリケーションは identity リソースではサポートされていません。

2.1.5. 管理 CLI での Elytron クライアントの使用

管理 CLI は、JBoss EAP に接続する際にセキュリティー情報を提供するために Elytron Client を使用するように設定できます。

  1. Elytron で管理インターフェースを保護します。

    管理 CLI とともに Elytron クライアントを使用するには、管理インターフェースを Elytron でセキュアにする必要があります。Elytron で管理インターフェースをセキュア化する方法の詳細は、「Elytron でのユーザー認証」を参照してください。

  2. Elytron クライアント設定ファイルを作成します。

    認証設定が含まれる Elytron クライアント設定ファイルと、その設定を使用するためのルールを作成する必要があります。認証設定の作成の詳細は、JBoss EAP『 How to Configure Identity Management Guide』の「 Configuration File Approach 」を参照してください

    例: custom-config.xml

    <configuration>
        <authentication-client xmlns="urn:elytron:client:1.2">
            <authentication-rules>
                <rule use-configuration="configuration1">
                    <match-host name="localhost" />
                </rule>
            </authentication-rules>
            <authentication-configurations>
                <configuration name="configuration1">
                    <sasl-mechanism-selector selector="DIGEST-MD5" />
                    <providers>
                      <use-service-loader />
                    </providers>
                    <set-user-name name="user1" />
                    <credentials>
                        <clear-password password="password123" />
                    </credentials>
                    <set-mechanism-realm name="exampleManagementRealm" />
                 </configuration>
            </authentication-configurations>
        </authentication-client>
    </configuration>

  3. 管理 CLI スクリプトで Elytron クライアント設定ファイルを使用します。

    $ ./jboss-cli.sh -c  -Dwildfly.config.url=/path/to/custom-config.xml