複数のLDAPサーバーの使用

KCMで複数のLDAPサーバーを使用

Active DirectoryまたはLDAPを複数のサーバーにまたがってデプロイしている場合、/etc/guacamoleにある、guacamole.propertiesに似た設定ファイルであるldap-servers.ymlを使用して、各LDAPサーバーを使用するようにGuacamoleを設定できます。複数のLDAPサーバーを使用するように設定されたGuacamoleインスタンスでユーザーを認証すると、認証が成功するまで、設定された各LDAPサーバーが順に試行されます。認証が失敗するのは、ユーザーが設定したクレデンシャルを承認する定義済みのLDAPサーバーが1台もない場合だけです。

ldap-servers.ymlを使用すると、guacamole.properties内の値は引き続き有効ですが、代わりにldap-servers.ymlで定義されたLDAPサーバーのデフォルト値として機能します。

ldap-servers.ymlの概要

ldap-servers.ymlファイルには、LDAPサーバーのYAMLリストが1つ含まれており、各サーバーの定義は、設定プロパティと値の単純なリストで構成されています。これらの設定プロパティは、「ldap-」プレフィックスが省略されていることを除いて、guacamole.properties内で使用可能なLDAPプロパティと同じです。

たとえば、ユーザーの認証に使用できる2台のLDAPサーバーを定義する単純なldap-servers.ymlには、以下の行が含まれます。

- hostname: server1.example.net
  user-base-dn:OU=Users,DC=example,DC=net
  username-attribute: sAMAccountName
  search-bind-dn:CN=Guacamole,OU=Services,DC=example,DC=net
  search-bind-password:SomePassword!

- hostname: server2.example.net
  user-base-dn:OU=Users,DC=example,DC=net
  username-attribute: sAMAccountName
  search-bind-dn:CN=Guacamole,OU=Services,DC=example,DC=net
  search-bind-password:SomePassword!

ユーザーがログインしようとすると、Guacamoleは最初に定義されたLDAPサーバー(server1.example.net)に対してユーザーの認証を試みます。それが失敗した場合、Guacamoleは次のサーバー(server2.example.net)に進み、その後も同様です。定義済みの_すべての_LDAPサーバーに対して認証が失敗した場合にのみ、LDAPに対する認証は全体として失敗します。

共通のLDAPパラメータを簡略化

上記の例で2台のサーバー間で異なるプロパティはホスト名だけであり、ldap-servers.ymlを使用する場合、guacamole.propertiesがデフォルト値のソースとして機能するため、すべてのサーバーに共通する設定の詳細は、guacamole.properties内で指定する方がよいでしょう。

ldap-user-base-dn:OU=Users,DC=example,DC=net
ldap-username-attribute: sAMAccountName
ldap-search-bind-dn:CN=Guacamole,OU=Services,DC=example,DC=net
ldap-search-bind-password:SomePassword!

ldap-servers.ymlの内容は、ホスト名だけに減らすことができます。

- hostname: server1.example.net
- hostname: server2.example.net

複数のLDAPサーバーにユーザーを分割

ldap-servers.ymlに記載されたLDAPサーバーを「match-usernames」オプションを使用して特定のユーザーのみに制限することもできます。このオプションは、単一の文字列と文字列の配列の両方を受け入れます。各文字列はPerl互換の正規表現です。また、正規表現にキャプチャグループが含まれている場合、最初のキャプチャグループの内容がユーザーのGuacamole IDを示すユーザー名として使用されます。

たとえば、対応するドメインの異なる2台のLDAPサーバーを定義し、ユーザーがユーザー名を 「DOMAIN 1\username」 と入力するか 「DOMAIN 2\username」 と入力するかによって、それらのLDAPサーバーを使い分けるには、ldap-servers.ymlを編集して以下のような行を追加してください。

- hostname: domain1.example.net
  user-base-dn:OU=Users,DC=domain1,DC=example,DC=net
  match-usernames:DOMAIN1\\(.*)

- hostname: domain2.example.net
  user-base-dn:OU=Users,DC=domain2,DC=example,DC=net
  match-usernames:DOMAIN2\\(.*)

上記で定義した各LDAPサーバーが使用されるのは、対応する正規表現がユーザーが指定したユーザー名と一致する場合のみです。上記の例の各正規表現は、「DOMAIN\username」形式のユーザー名部分を囲むキャプチャグループを定義しているため、設定されたユーザー名のその部分を使用して、ユーザーのIDを特定します。ユーザーが「DOMAIN 1\myusername」として正常に認証された場合、以下のように使用されます。

各LDAPサーバーで受け入れが必要なユーザー名形式が複数ある場合は、複数の正規表現を指定できます。たとえば、「MYDOMAIN\myusername」とUPNスタイルの「myusername@mydomain.example.net」形式の両方に合致させるには、以下のように指定してください。

- hostname: domain1.example.net
  user-base-dn:OU=Users,DC=domain1,DC=example,DC=net
  match-usernames:
    - DOMAIN1\\(.*)
    - (.*)@domain1\.example\.net

- hostname: domain2.example.net
  user-base-dn:OU=Users,DC=domain2,DC=example,DC=net
  match-usernames:
    - DOMAIN2\\(.*)
    - (.*)@domain2\.example\.net

Last updated