第3章 サーバーのユーザーと管理インターフェイスのセキュア化
3.1. Elytron でのユーザー認証
3.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 コンポーネントを使用するように更新するには、以下の手順に従います。
management-http-authentication
を使用するように、http-authentication-factory
を設定します。/core-service=management/management-interface=http-interface:write-attribute(name=http-authentication-factory, value=management-http-authentication)
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)
security-realm
の定義を解除します。/core-service=management/management-interface=http-interface:undefine-attribute(name=security-realm)
- 変更を有効にするには、JBoss EAP をリロードします。
reload
管理インターフェイスのセキュリティーは、elytron
サブシステムによって提供されるデフォルトのコンポーネントを使用して保護されるようになりました。
3.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" } } }
3.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-interface
の http-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-USER
と DIGEST-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 セキュリティーレリムは、ローカルユーザーに対するサイレント認証を処理します。
3.1.2. 新規アイデンティティーストアでの管理インターフェイスのセキュア化
アイデンティティーストアのセキュリティードメインおよびサポートするセキュリティーレルム、デコーダー、またはマッパーを作成します。
このプロセスについては、JBoss EAP アイデンティティー管理の設定方法 の Elytron サブシステム を参照してください。たとえば、ファイルシステムベースのアイデンティティーストアを使用して管理インターフェイスのセキュリティーを保護する場合は、ファイルシステムベースのアイデンティティーストアでの認証設定 の手順に従います。
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}]}])
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 インターフェイスによるローカルおよびリモートクライアント認証 を参照してください。管理インターフェイスを更新して、
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-factory
とsasl-authentication-factory
を別々に設定し、http 管理インターフェイスの HTTP および SASL メカニズムをセキュアにするために個別のセキュリティードメインを使用できます。
レガシーセキュリティーと Elytron で同等の実装を持つ複数の異なる属性が管理インターフェイスで設定されている場合は、Elytron 関連設定のみが使用されます。たとえば、レガシーセキュリティーに security-realm
、Elytron に http-authentication-factory
が設定されている場合、認証は http-authentication-factory
設定で処理されます。
管理インターフェイスに http-authentication-factory
または HTTP インターフェイスの sasl-authentication-factory
、security-realm
の両方が含まれていて、ssl-context
が使用されていない場合、認証は Elytron によって処理され、SSL はレガシーセキュリティーレルムによって処理されます。
管理インターフェイスに security-realm
と ssl-context
の両方が含まれ、HTTP インターフェイスの http-authentication-factory
または sasl-authentication-factory
が使用されていない場合、認証はレガシーセキュリティーレルムによって処理され、SSL は Elytron によって処理されます。
3.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 アイデンティティー管理の設定方法 の Elytron サブシステム を参照してください。
Elytron セキュリティーが使用され、実際のアイデンティティーに対応しない認証名で JBOSS-LOCAL-USER SASL
メカニズムを使用して認証試行を行うと、認証は失敗します。
レガシー security
サブシステムを使用すると、JBOSS-LOCAL-USER
のカスタムユーザー名を選択できます。ユーザー名を特殊アイデンティティーにマッピングすることで、認証が続行されます。
3.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
にフィードされて現在のリクエストの管理ロールを取得します。
シナリオ | No access=identity definition | Elytron security-domain を参照する access=identity |
---|---|---|
レガシーの | 接続からのアイデンティティー | サポートされないか、匿名のアイデンティティー |
| 接続からのアイデンティティー |
正常にインフローされた場合は、参照される |
レガシー | 接続からのアイデンティティー | サポートされないか、匿名のアイデンティティー |
| 接続からのアイデンティティー |
正常にインフローされた場合は、参照される |
identity
リソースで使用されるセキュリティードメインが認証からセキュリティードメインを信頼しない場合は、匿名のアイデンティティーが使用されます。
両方が同一のセキュリティーレルムを使用している場合は、identity
リソースで使用されるセキュリティードメインは認証からセキュリティードメインを信頼する必要はありません。
信頼されるセキュリティードメインは推移的ではありません。
access=identity
リソースが定義されていない場合は、管理インターフェイスに対して認証している際に確立されるアイデンティティーが使用されます。この場合、remoting
サブシステム経由の接続またはアプリケーションの使用して確立されたアイデンティティーは使用できなくなります。
access=identity
リソースが定義されていても、管理インターフェイスが使用するセキュリティードメインが異なり、インフロー元のドメインリストに記載さレテいない場合、アイデンティティーは確立されません。インフローは、認証中に確立されたアイデンティティーを使用して試行されます。この場合、remoting
サブシステム経由の接続またはアプリケーションの使用して確立されたアイデンティティーは、この方法でインフローできなくなります。
管理インターフェイスがレガシーセキュリティーレルムを使用してセキュア化された場合、アイデンティティーは複数の異なるセキュリティードメイン間で共有できなくなります。この場合、access=identity
リソースを定義することはできません。そのため、認証中に確立されたアイデンティティーを直接使用できます。したがって、PicketBox を使用してセキュア化されたアプリケーションは identity
リソースではサポートされていません。
3.1.5. 管理 CLI での Elytron クライアントの使用
管理 CLI は、JBoss EAP に接続する際にセキュリティー情報を提供するために Elytron Client を使用するように設定できます。
Elytron で管理インターフェイスを保護します。
管理 CLI とともに Elytron クライアントを使用するには、管理インターフェイスを Elytron でセキュアにする必要があります。Elytron で管理インターフェイスをセキュア化する方法の詳細は、Elytron でのユーザー認証 を参照してください。
Elytron クライアント設定ファイルを作成します。
認証設定が含まれる Elytron クライアント設定ファイルと、その設定を使用するためのルールを作成する必要があります。認証設定の作成の詳細は、JBoss EAP アイデンティティー管理の設定方法 の 設定ファイルのアプローチ を参照してください。
例: 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>
管理 CLI スクリプトで Elytron クライアント設定ファイルを使用します。
$ ./jboss-cli.sh -c -Dwildfly.config.url=/path/to/custom-config.xml