LDAP認証
この章は、LDAPサーバーを使用してParagon Active Assuranceユーザーを認証する場合のみに関連します。
Paragon Active Assuranceでは、LDAPを使用してユーザーを一元的に管理および認証できます。認証は、ローカルコントロールセンターのユーザーデータベースではなく、リモートサーバーを使用して行われます。
ユーザーがコントロールセンターにログインしようとすると、コントロールセンターはLDAPサーバーに認証要求を送信します。応答に基づいて、コントロールセンターは、応答に詳述されているように、Paragon Active Assuranceアカウントへのアクセスをユーザーに許可または拒否します。
- LDAP からコントロールセンターへのマッピングで一部のアカウントが 2 回定義されている場合、ユーザーは付与された 2 つの権限のうち高い権限を受け取ります。したがって、あるリスト要素でアクセス許可が "読み取り" に設定され、別のリスト要素で "admin" に設定されている場合、ユーザーはそのアカウントの管理者アクセス許可を受け取ります。
- あるアクセス許可マッピングが 1 つのアカウントにアクセス許可を付与し、別のマッピングがそれを拒否した場合、ユーザーはそのアカウントへのアクセスを受け取ります。
- アカウントのアクセス許可は、ユーザーがログインするたびに LDAP サーバーと同期されます。Paragon Active Assuranceのローカル管理者から追加の権限をユーザーに付与された場合、その権限はユーザーが次回ログインするまで有効です。逆に、LDAP サーバでユーザの権限が変更された場合、これらは次回のログインまで有効になりません。
- ログイン時に入力したユーザー名が既存のコントロールセンターユーザーのメールアドレスと一致する場合、ログインは、新しいユーザーの作成ではなく、そのユーザーを使用して続行されます。ただし、サーバー認証中に、パスワードを除くすべてのユーザープロファイルの詳細は、これらの詳細が定義されている限り、サーバーに保存されているもので上書きされます。ユーザーは引き続き、既存のコントロールセンターのパスワードを使用してログインできます。つまり、選択したユーザーはコントロールセンターでパスワードを設定できるため、LDAPサーバーがダウンした場合でもログインできます。
- ログイン時に入力したユーザー名がコントロールセンターに存在しない場合は、次のようになります。
- ユーザーのメールアドレスがユーザー
emailフィールドから読み取られます。このフィールドの名前は、 設定AUTH_LDAP_USER_ATTR_MAPを使用して変更できます。 - 電子メールアドレスが有効な場合は、コントロールセンターのデータベースにも電子メールアドレスとして入力されます。ただし、ユーザーは引き続きLDAPユーザー名でログインする必要があります。
- 電子メールアドレスが有効でない場合は、構造
username@LDAP_EMAIL_DOMAINで電子メールアドレスが作成され、データベースに入力されます。設定ファイルを編集して、このドメインを変更します。
- ユーザーのメールアドレスがユーザー
上記を説明するために、LDAPデータベースにデータがプリロードされた典型的な(OpenLDAP)サーバー側ファイルを再現し、その後、コントロールセンターで必要な対応する構成を示します。
ldap.ldif内容 :
dn: dc=example,dc=com
objectClass: organization
objectClass: dcObject
objectClass: top
dc: example
o: example.com
dn: ou=users,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
cn: Users
member: uid=jsmith,dc=example,dc=com
member: uid=jane.smith@example.com,dc=example,dc=com
ou: users
dn: uid=jsmith,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: extensibleObject
cn: John Smith
givenName: John
sn: Smith
c: GB
telephoneNumber: +44 20 7946 0296
mail: john.smith@example.com
uid: jsmith
userPassword: Password1
dn: uid=jane.smith@example.com,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: extensibleObject
cn: Jane Smith
givenName: Jane
sn: Smith
c: GB
telephoneNumber: +44 20 7946 0580
mail: jane.smith@example.com
uid: jane.smith@example.com
userPassword: Password1
dn: ou=admins,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
cn: Administrators
member: uid=jdoe,dc=example,dc=com
member: uid=jane.doe@example.com,dc=example,dc=com
ou: admins
dn: uid=jdoe,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: extensibleObject
cn: John Doe
givenName: John
sn: Doe
c: GB
telephoneNumber: +44 20 7946 0344
mail: john.doe@example.com
uid: jdoe
userPassword: Password1
dn: uid=jane.doe@example.com,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: extensibleObject
cn: Jane Doe
givenName: Jane
sn: Doe
c: GB
telephoneNumber: +44 20 7946 0113
mail: jane.doe@example.com
uid: jane.doe@example.com
userPassword: Password1
これにより、合計 4 人のユーザーが作成され、2 人が書き込み権限 (jsmith と jane.smith@example.com) を持ち、2 人が管理者権限 (jdoe と jane.doe@example.com) を持ちます。2 人のユーザーのユーザー名 uidが であり、他の 2 人の uid ユーザーが電子メール アドレスで構成されていることに注意してください。
コントロールセンターでLDAP認証を有効にするには、設定ファイルで /etc/netrounds/netrounds.conf次の属性を指定する必要があります。
# LDAP settings
import ldap
# NOTE: ActiveDirectoryGroupType is only needed if you are using Microsoft Active Directory.
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, ActiveDirectoryGroupType
AUTH_LDAP_ENABLED = True
AUTH_LDAP_START_TLS = True
AUTH_LDAP_SERVER_URI = 'ldap://ldap.example.com'
AUTH_LDAP_USER_DN_TEMPLATE = 'uid=%(user)s,dc=example,dc=com'
# LDAP user attribute value to use during lookup on database side
AUTH_LDAP_USER_QUERY_FIELD = 'email'
# This is the domain that will be appended to the username when the one from
# LDAP is not a valid email
AUTH_LDAP_EMAIL_DOMAIN='example.com'
# Set up the basic group parameters
# For vanilla LDAP such as OpenLDAP, use this.
GROUP_OBJECTCLASS_NAME ='groupOfNames'
# Uncomment this if using Microsoft Active Directory
# GROUP_OBJECTCLASS_NAME = 'group'
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('dc=example,dc=com',
ldap.SCOPE_ONELEVEL,
'(objectClass=%s)' % GROUP_OBJECTCLASS_NAME
)
# LDAP group type used to indicate group membership for a user
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
# Note: If you are using Microsoft Active Directory, use this instead:
# AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()
# Mapping between LDAP groups and Control Center account/permission
AUTH_LDAP_ACCOUNT_GROUP_MAPPING = [
{
'dn': 'ou=users,dc=example,dc=com',
'accounts': [
{
'name': 'dev',
'permission': 'write'
}
]
},
{
'dn': 'ou=admins,dc=example,dc=com',
'accounts': [
{
'name': 'dev',
'permission': 'admin'
}
]
}
]
# Populate the Django user from the LDAP directory
AUTH_LDAP_USER_ATTR_MAP = {
'first_name': 'givenName',
'last_name': 'sn',
'email': 'mail',
'phone': 'telephoneNumber',
'country': 'c'
}
# LDAP connection options
AUTH_LDAP_CONNECTION_OPTIONS = {
# Limit on waiting for a network response in seconds. This is a timeout
# returned by poll/select following a connect in case of no activity.
# OpenLDAP specific.
ldap.OPT_NETWORK_TIMEOUT: 30,
# Timeout value for the synchronous API calls in seconds. OpenLDAP specific.
ldap.OPT_TIMEOUT: 30
}
# The following user must exist unless anonymous login is allowed
# Non-anonymous bind DN
# Note: It is mandatory for AUTH_LDAP_BIND_DN to start with a 'cn=' relative
# distinguished name. Using 'uid=' will not work in case OpenLDAP is used as server.
AUTH_LDAP_BIND_DN = 'cn=admin,dc=example,dc=com'
# Non-anonymous bind password
AUTH_LDAP_BIND_PASSWORD = 'Password1'
# Finally, in order to get LDAP working, the first list item must be
# added below
AUTHENTICATION_BACKENDS = (
'netrounds.domain.backends.LDAPAuthBackend',
'netrounds.domain.backends.AuthBackend',
)
上記のほとんどは、 https://django-auth-ldap.readthedocs.io/en/latest/reference.html#settings に記載されている内容に従います。