5.3. LDAP および RBAC

ロールベースのアクセス制御 (RBAC) は管理ユーザーにパーミッション (ロール) を指定するメカニズムです。これにより、無制限にすべてのアクセス権を付与することなく、さまざまな管理責任を付与できます。RBAC の詳細は、JBoss EAPセキュリティーアーキテクチャーのロールベースのアクセス制御 を参照してください。

RBAC は承認にのみ使用され、認証は個別に処理されます。LDAP は認証と承認に使用できるため、JBoss EAP は以下の方法で設定できます。

  • 承認にのみ RBAC を使用し、LDAP、または別のメカニズムは認証にのみ使用する。
  • RBAC と LDAP を統合して使用し、管理インターフェイスで承認の意思決定を行う。

5.3.1. LDAP および RBAC の個別使用

JBoss EAP では、セキュリティーレルムで認証と承認を個別に分けて設定できます。そのため、LDAP を認証メカニズムとして、RBAC を承認メカニズムとして設定できます。このように分けて設定されている場合には、ユーザーが管理インターフェイスにアクセスしようとすると、最初に設定済みの LDAP サーバーを使用して認証されます。成功すると、ユーザーのロールおよびそのロールに設定されたパーミッションは、LDAP サーバーにあるグループ情報とは独立して RBAC だけを使用し、決定されます。

RBAC を管理インターフェイスの承認メカニズムとして使用する方法は、JBoss EAPサーバーセキュリティーの設定方法 を参照してください。管理インターフェイスで認証できるように LDAP を設定する方法は、前述のセクション を参照してください。

5.3.2. 承認用に LDAP と RBAC を統合する手順

LDAP サーバーまたはプロパティーファイルを使用して認証されたユーザーは、ユーザーグループのメンバーにすることができます。ユーザーグループは、1 つ以上のユーザーに割り当てることのできる任意のラベルです。RBAC では、このグループ情報を使用して自動的にロールをユーザーに割り当てたり、ロールからユーザーを除外したりする設定が可能です。

LDAP ディレクトリーには、ユーザーアカウントおよびグループのエントリーが含まれており、このエントリーは属性によりクロス参照されます。LDAP サーバーの設定に応じて、ユーザーエンティティーはユーザーが属するグループを memberOf 属性で、グループエンティティーは uniqueMember 属性またはこの 2 つの組み合わせを使用してそのグループに所属するユーザーをマッピングできます。ユーザーが LDAP サーバーに正常に認証されると、グループ検索を実行してそのユーザーのグループ情報を読み込みます。使用中のディレクトリーサーバーによっては、グループ検索は SN (通常、認証で使用されるユーザー名)、またはディレクトリー内のユーザーのエントリーの DN を使用して実行できます。グループ検索 (group-search) およびユーザー名と識別名 (username-to-dn) のマッピングは、セキュリティーレルムで LDAP を承認メカニズムとして設定する時に設定されます。

ユーザーのグループメンバーシップ情報が LDAP サーバーをもとに判断されると、RBAC 設定内のマッピングを使用して、ユーザーのロールが決まります。このマッピングを設定して、明示的にグループおよび個別ユーザーを包含または除外します。

注記

サーバーに接続するユーザーの認証ステップは常に最初に行われます。ユーザーが正常に認証されると、サーバーのグループが読み込まれます。認証ステップと承認ステップではいずれも、LDAP サーバーに接続できる必要があります。セキュリティーレルムは、グループの読み込みステップの認証接続を再利用することでこのプロセスを最適化します。

5.3.2.2. username-to-dn の使用

承認セクションでルールを定義して、ユーザーの簡単なユーザー名を識別名に変換できます。username-to-dn 要素は、ユーザー名を LDAP ディレクトリー内のエントリーの識別名にマップする方法を指定します。この要素は 任意 で、以下の両方に該当する場合にのみ必要です。

  • 認証および承認手順は異なる LDAP サーバーに対するものである。
  • グループ検索が識別名を使用する。
注記

セキュリティーレルムが LDAP およびケルベロス認証の両方をサポートするインスタンスや、ケルベロス用に変換が必要なインスタンスにも該当します。LDAP 認証が実行された場合には、認証時に検出された DN を使用できます。

これには、以下の属性が含まれます。

表5.5 username-to-dn

属性説明

force

認証中のユーザー名から識別名のマッピング検索の結果はキャッシュされ、force 属性が false に設定されている場合の承認クエリー時に再利用されます。force が true の場合には、グループの読み込み中に検索が再度実行されます。これは通常、異なるサーバーが認証と承認を実行する場合に行われます。

username-to-dn は、以下のいずれかで設定できます。

username-is-dn

リモートユーザーによって入力されたユーザー名はユーザーの識別名であると指定します。

username-is-dn の例

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=username-is-dn:add(force=false)

run-batch

これは 1:1 マッピングを定義し、追加の設定はありません。

username-filter

入力されたユーザー名を照会し、指定の属性を検索します。

username-filter の例

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=username-filter:add(force=false, base-dn="dc=people,dc=harold,dc=example,dc=com", recursive="false", attribute="sn", user-dn-attribute="dn")

run-batch

属性説明

base-dn

検索を開始するコンテキストの識別名。

recursive

検索がコンテキストのサブコンテキストを拡張するかどうか。デフォルトは false です。

attribute

入力したユーザー名に対して照合を試行するユーザーのエントリーの属性です。デフォルトは uid です。

user-dn-attribute

ユーザーの識別名を取得するために読み込む属性です。デフォルトは dn です。

advanced-filter

このオプションは、カスタムのフィルターを使用してユーザーの識別名を見つけます。

advanced-filter の例

/core-service=management/security-realm=ldap-security-realm:add

batch

/core-service=management/security-realm=ldap-security-realm/authorization=ldap:add(connection=ldap-connection)

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/group-search=group-to-principal:add(iterative=true, group-dn-attribute="dn", group-name="SIMPLE", group-name-attribute="uid", base-dn="ou=groups,dc=group-to-principal,dc=example,dc=org", principal-attribute="uniqueMember", search-by="DISTINGUISHED_NAME")

/core-service=management/security-realm=ldap-security-realm/authorization=ldap/username-to-dn=advanced-filter:add(force=true, base-dn="dc=people,dc=harold,dc=example,dc=com", recursive="false", user-dn-attribute="dn",filter="sAMAccountName={0}")

run-batch

username-filter の例と同じ属性は、意味とデフォルト値も同じです。属性がもう 1 つあります。

属性説明

filter

ユーザーのエントリーの検索に使用するカスタムフィルター。ユーザー名は {0} のプレースホルダーに置き換えられます。

重要

これは、フィルターの定義後も有効でなければなりません。特殊文字を使用する場合には (例 &) 正しい形式を使用するようにしてください。たとえば、& 文字には & を使用します。

5.3.2.3. LDAP グループ情報の RBAC ロールへのマッピング

LDAP サーバーへの接続を作成してグループ検索を適切に設定したら、LDAP グループと RBAC ロールの間にマッピングを作成する必要があります。このマッピングには、包含と除外の設定両方があり、グループメンバーシップをもとに 1 つまたは複数のロールを自動的にユーザーに割り当てることができます。

警告

RBAC がまだ設定されていない場合は、特に新規作成した LDAP 対応のレルムに切り替える場合など、設定時には最新の注意を払ってください。ユーザーとロールを適切に設定せずに RBAC を有効にすると、管理者が JBoss EAP 管理インターフェイスにログインできなくなることがあります。

注記

ここで使用する管理 CLI コマンドは、JBoss EAP スタンドアロンサーバーを実行していることを仮定しています。JBoss EAP 管理対象ドメインの管理 CLI を使用する場合の詳細は 管理 CLI ガイド を参照してください。

RBAC が有効で設定されていることの確認

RBAC を有効にして初期設定してから、LDAP と RBAC ロールの間のマッピングを使用する必要があります。

/core-service=management/access=authorization:read-attribute(name=provider)

この設定では、以下のような結果になります。

{ "outcome" => "success", "result" => "rbac" }

RBAC の有効化および設定の詳細は、JBoss EAPサーバーセキュリティーの設定方法ロールベースアクセス制御の有効化 を参照してください。

既存のロール一覧の確認

read-children-names 操作を使用して、設定されたロールの完全なリストを取得します。

/core-service=management/access=authorization:read-children-names(child-type=role-mapping)

上記の設定で、以下のようにロールの一覧が生成されます。

{
  "outcome" => "success",
  "result" =>
    [ "Administrator", "Deployer", "Maintainer", "Monitor", "Operator", "SuperUser" ]
}

さらに、ロールの既存のマッピングをすべて確認できます。

/core-service=management/access=authorization/role-mapping=Administrator:read-resource(recursive=true)
{
  "outcome" => "success",
  "result" =>
  {
    "include-all" => false,
    "exclude" => undefined,
    "include" => {
      "user-theboss" => {
        "name" => "theboss",
        "realm" => undefined,
        "type" => "USER"
      },
      "user-harold" => {
        "name" => "harold",
        "realm" => undefined,
        "type" => "USER"
      },
      "group-SysOps" => {
        "name" => "SysOps",
        "realm" => undefined,
        "type" => "GROUP"
      }
    }
  }
}

ロールマッピングエントリーの設定

ロールに Role-Mapping エントリーがまだない場合は、作成する必要があります。例:

/core-service=management/access=authorization/role-mapping=Auditor:read-resource()
{
  "outcome" => "failed",
  "failure-description" => "WFLYCTL0216: Management resource '[ (\"core-service\" => \"management\"), (\"access\" => \"authorization\"), (\"role-mapping\" => \"Auditor\") ]' not found"
}

ロールマッピングを追加するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor:add()
{
  "outcome" => "success"
}

確認するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor:read-resource()
{
  "outcome" => "success",
  "result" => {
    "include-all" => false,
    "exclude" => undefined,
    "include" => undefined
  }
}

ロールにグループを追加して包含または除外設定

ロールに対してグループを追加することで包含または除外設定できます。

注記

除外マッピングが優先され、それ以外は包含マッピングが優先されます。

包含するグループを追加するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor/include=group-GroupToInclude:add(name=GroupToInclude, type=GROUP)

除外するグループを追加するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor/exclude=group-GroupToExclude:add(name=GroupToExclude, type=GROUP)

結果を確認するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor:read-resource(recursive=true)
{
  "outcome" => "success",
  "result" => {
    "include-all" => false,
    "exclude" => {
      "group-GroupToExclude" => {
        "name" => "GroupToExclude",
        "realm" => undefined,
        "type" => "GROUP"
      }
    },
    "include" => {
      "group-GroupToInclude" => {
        "name" => "GroupToInclude",
        "realm" => undefined,
        "type" => "GROUP"
      }
    }
  }
}

RBAC ロールグループから除外または包含されないようにグループを削除する手順

包含されていたグループを削除するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor/include=group-GroupToInclude:remove

除外されていたグループを削除するには、以下を実行します。

/core-service=management/access=authorization/role-mapping=Auditor/exclude=group-GroupToExclude:remove