Documentation

23. LDAP 인증 설정

참고

If the LDAP server you want to connect to has a certificate that is self-signed or signed by a corporate internal certificate authority (CA), the CA certificate must be added to the system’s trusted CAs. Otherwise, connection to the LDAP server will result in an error that the certificate issuer is not recognized. Refer to Knowledge Base article, How Do I Import CA Certificate (openldap, AD, IDM, FreeIPA) Required for LDAPS Integration?. If prompted, use your Red Hat customer credentials to login.

관리자는 컨트롤러 사용자의 계정 인증 정보 소스로 LDAP를 사용합니다. 사용자 인증이 제공되지만 사용자 권한과 인증 정보가 동기화되지는 않습니다. 조직 멤버십(및 조직 관리자)과 팀 멤버십은 동기화할 수 있습니다.

이렇게 구성하면 LDAP 사용자 이름과 암호로 로그인한 사용자는 생성된 컨트롤러 계정을 자동으로 받고 일반 사용자 또는 조직 관리자로 조직에 자동 배치될 수 있습니다.

LDAP 로그인을 통해 생성된 사용자는 사용자 이름, 성, 이름을 변경하거나 로컬 암호를 직접 설정할 수 없습니다. 다른 필드 이름을 편집하는 것을 제한하기 위해 이 구성을 조정할 수도 있습니다.

컨트롤러의 LDAP 통합을 구성하려면 다음을 수행합니다.

  1. 먼저 전체 LDAP 구조를 읽을 수 있는 권한이 부여된 사용자를 LDAP에 생성합니다.

  2. LDAP 서버에 성공적으로 쿼리할 수 있는지 테스트합니다. ldapsearch 명령을 사용하십시오. 이 명령은 컨트롤러 시스템의 명령행과 다른 Linux 및 OSX 시스템에 설치할 수 있는 명령행 툴입니다. 다음 명령을 사용하여 ldap 서버를 쿼리합니다. 여기서 *josie*와 *Josie4Cloud*는 설정에 적합한 속성으로 교체됩니다.

ldapsearch -x  -H ldap://win -D "CN=josie,CN=Users,DC=website,DC=com" -b "dc=website,dc=com" -w Josie4Cloud

여기서 ``CN=josie,CN=users,DC=website,DC=com``은 연결하는 사용자의 고유 이름입니다.

참고

ldapsearch 유틸리티는 |at|와 함께 자동으로 사전 설치되지 않지만 openldap-clients 패키지에서 설치할 수 있습니다.

  1. automation controller 사용자 인터페이스에서 왼쪽 탐색의 **설정**을 클릭하고 인증 옵션 목록의 **LDAP 설정**을 클릭하여 선택합니다.

Multiple LDAP configurations are not needed per LDAP server, but you can configure multiple LDAP servers from this page, otherwise, leave the server at Default:

_images/configure-tower-auth-ldap-servers.png

동등한 API 끝점은 AUTH_LDAP_*``를 ``AUTH_LDAP_1_*, AUTH_LDAP_2_*, …, ``AUTH_LDAP_5_*``와 같이 반복적으로 표시하여 서버 지정을 나타냅니다.

  1. To enter or modify the LDAP server address to connect to, click Edit and enter in the LDAP Server URI field using the same format as the one prepopulated in the text field:

_images/configure-tower-auth-ldap-server-uri.png

참고

Multiple LDAP servers may be specified by separating each with spaces or commas. Click the help icon to comply with proper syntax and rules.

  1. LDAP 바인딩 암호 텍스트 필드에 바인딩 사용자에게 사용할 암호를 입력합니다. 이 예제에서 암호는 〈passme’입니다.

_images/configure-tower-auth-ldap-bind-pwd.png
  1. LDAP 그룹 유형 드롭다운 메뉴 목록에서 그룹 유형을 클릭하여 선택합니다.

LDAP 그룹 유형은 다음과 같습니다.

  • PosixGroupType

  • GroupOfNamesType

  • GroupOfUniqueNamesType

  • ActiveDirectoryGroupType

  • OrganizationalRoleGroupType

  • MemberDNGroupType

  • NISGroupType

  • NestedGroupOfNamesType

  • NestedGroupOfUniqueNamesType

  • NestedActiveDirectoryGroupType

  • NestedOrganizationalRoleGroupType

  • NestedMemberDNGroupType

  • PosixUIDGroupType

The LDAP Group Types that are supported by the controller leverage the underlying django-auth-ldap library. To specify the parameters for the selected group type, see Step 15 below.

  1. **LDAP 시작 TLS**는 기본적으로 비활성화되어 있습니다. LDAP 연결이 SSL을 사용하지 않을 때 TLS를 활성화하려면 토글을 클릭하여 **ON**으로 전환합니다.

_images/configure-tower-auth-ldap-start-tls.png
  1. LDAP 바인딩 DN 텍스트 필드에 고유 이름을 입력하여 컨트롤러가 LDAP 서버에 연결(바인딩)하는 데 사용하는 사용자를 지정합니다. 다음은 예제 ``CN=josie,CN=users,DC=website,DC=com``을 사용합니다.

_images/configure-tower-auth-ldap-bind-dn.png
  1. 해당 이름이 sAMAccountName 키에 저장된 경우 **LDAP 사용자 DN 템플릿**은 ``(sAMAccountName=%(user)s)``로 채워집니다. Active Directory는 사용자 이름을 ``sAMAccountName``에 저장합니다. 마찬가지로, OpenLDAP의 경우 키가 ``uid``이므로 줄이 ``(uid=%(user)s)``가 됩니다.

  2. Enter the group distinguish name to allow users within that group to access the controller in the LDAP Require Group field, using the same format as the one shown in the text field, CN=controller Users,OU=Users,DC=website,DC=com.

_images/configure-tower-auth-ldap-req-group.png
  1. 그룹 내의 사용자가 컨트롤러에 액세스할 수 없도록 하는 그룹 고유 이름을 텍스트 필드에 표시된 것과 동일한 포맷으로 LDAP 거부 그룹 필드에 입력합니다. 이 예제에서는 필드를 비워 둡니다.

  2. Enter where to search for users while authenticating in the LDAP User Search field using the same format as the one shown in the text field. In this example, use:

[
"OU=Users,DC=website,DC=com",
"SCOPE_SUBTREE",
"(cn=%(user)s)"
]

첫 번째 줄은 LDAP 트리에서 사용자를 검색할 위치를 지정합니다. 위의 예제에서는 ``DC=website,DC=com``부터 재귀적으로 사용자를 검색합니다.

두 번째 줄은 사용자를 검색할 범위를 지정합니다.

  • SCOPE_BASE: 이 값은 기본 DN의 항목만 검색하는 데 사용되며 해당 항목만 반환됩니다.

  • SCOPE_ONELEVEL: 이 값은 기본 DN보다 한 수준 아래의 모든 항목을 검색하는 데 사용되지만, 기본 DN은 포함하지 않으며 기본 DN보다 두 수준 이상 아래의 항목도 모두 포함하지 않습니다.

  • SCOPE_SUBTREE: 이 값은 전체 하위 수준에서 모든 항목을 검색하는 데 사용되며 지정된 기본 DN을 포함합니다.

세 번째 줄은 사용자 이름이 저장된 키 이름을 지정합니다.

_images/configure-tower-authen-ldap-user-search.png

참고

검색 쿼리가 여러 개인 경우 올바른 구문은 다음과 같습니다.

[
  [
  "OU=Users,DC=northamerica,DC=acme,DC=com",
  "SCOPE_SUBTREE",
  "(sAMAccountName=%(user)s)"
  ],
  [
  "OU=Users,DC=apac,DC=corp,DC=com",
  "SCOPE_SUBTREE",
  "(sAMAccountName=%(user)s)"
  ],
  [
  "OU=Users,DC=emea,DC=corp,DC=com",
  "SCOPE_SUBTREE",
  "(sAMAccountName=%(user)s)"
  ]
]
  1. LDAP 그룹 검색 텍스트 필드에서 검색할 그룹과 검색 방법을 지정합니다. 이 예제에서는 다음을 사용합니다.

 [
"dc=example,dc=com",
"SCOPE_SUBTREE",
"(objectClass=group)"
 ]
  • 첫 번째 줄은 그룹을 검색할 기본 DN을 지정합니다.

  • 두 번째 줄은 범위를 지정하며 사용자 지시문 범위와 같습니다.

  • 세 번째 줄은 사용 중인 LDAP에 있는 그룹 오브젝트의 ``objectclass``를 지정합니다.

_images/configure-tower-authen-ldap-group-search.png
  1. LDAP 사용자 속성 맵 텍스트 필드에 사용자 속성을 입력합니다. 이 예제에서는 다음을 사용합니다.

{
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}

위의 예제에서는 sn 키에서 사용자를 성으로 검색합니다. 사용자에게 동일한 LDAP 쿼리를 사용하여 사용자가 저장된 키를 확인할 수 있습니다.

_images/configure-tower-auth-ldap-user-attrb-map.png
  1. Depending on the selected LDAP Group Type, different parameters are available in the LDAP Group Type Parameters field to account for this. LDAP_GROUP_TYPE_PARAMS is a dictionary, which will be converted by the controller to kwargs and passed to the LDAP Group Type class selected. There are two common parameters used by any of the LDAP Group Type; name_attr and member_attr. Where name_attr defaults to cn and member_attr defaults to member:

{"name_attr": "cn", "member_attr": "member"}

특정 LDAP 그룹 유형에 필요한 매개변수를 확인하려면 클래스 init 매개변수에 관한 django_auth_ldap 문서를 참조하십시오.

  1. 그룹별 LDAP 사용자 플래그 텍스트 필드에 사용자 프로필 플래그를 입력합니다. 이 예제에서는 다음 구문을 사용하여 LDAP 사용자를 《Superusers》 및 《Auditors》로 설정합니다.

{
"is_superuser": "cn=superusers,ou=groups,dc=website,dc=com",
"is_system_auditor": "cn=auditors,ou=groups,dc=website,dc=com"
}

위의 예제에서는 프로필에 슈퍼유저 또는 감사자로 플래그가 지정된 사용자를 검색합니다.

_images/configure-tower-auth-ldap-user-flags.png
  1. 매핑 필드를 작성하는 방법에 대한 자세한 내용은 :ref:`ag_ldap_org_team_maps`을 참조하십시오.

_images/configure-ldap-orgs-teams-mapping.png
  1. 완료되면 **저장**을 클릭합니다.

이 양식에 이러한 값을 입력하면 이제 LDAP를 사용하여 성공적으로 인증할 수 있습니다.

참고

The controller does not actively sync users, but they are created during their initial login. To improve performance associated with LDAP authentication, see LDAP authentication performance tips at the end of this chapter.

23.1. LDAP 조직 및 팀 매핑

You can control which users are placed into which controller organizations based on LDAP attributes (mapping out between your organization admins/users and LDAP groups).

키는 조직 이름이며 조직은 없을 시 생성됩니다. 값은 각 조직의 멤버십 옵션을 정의하는 사전입니다. 각 조직에서는 자동으로 조직의 사용자가 되는 그룹과 조직을 관리할 수 있는 그룹을 지정할 수 있습니다.

admins: 없음, True/False, 문자열 또는 문자열 목록/튜플.
  • **없음**인 경우 조직 관리자가 LDAP 값을 기준으로 업데이트되지 않습니다.

  • **True**인 경우 LDAP의 모든 사용자가 조직 관리자로 자동 추가됩니다.

  • If False, no LDAP users will be automatically added as admins of the organization.

  • 문자열 또는 문자열 목록인 경우 지정된 그룹과 일치하면 조직에 추가되는 그룹 DN을 지정합니다.

remove_admins: True/False. 기본값은 **False**입니다.
  • **True**인 경우 지정된 그룹의 멤버가 아닌 사용자는 조직의 관리 목록에서 제거됩니다.

users: 없음, True/False, 문자열 또는 문자열 목록/튜플. **admins**와 동일한 규칙이 적용됩니다.

remove_users: True/False. 기본값은 **False**입니다. **remove_admins**와 동일한 규칙이 적용됩니다.

{
"LDAP Organization": {
  "admins": "cn=engineering_admins,ou=groups,dc=example,dc=com",
  "remove_admins": false,
  "users": [
    "cn=engineering,ou=groups,dc=example,dc=com",
    "cn=sales,ou=groups,dc=example,dc=com",
    "cn=it,ou=groups,dc=example,dc=com"
  ],
  "remove_users": false
},
"LDAP Organization 2": {
  "admins": [
    "cn=Administrators,cn=Builtin,dc=example,dc=com"
  ],
  "remove_admins": false,
  "users": true,
  "remove_users": false
}
}

팀 멤버(사용자)와 LDAP 그룹 간 매핑. 키는 팀 이름이며 없을 시 생성됩니다. 값은 각 팀의 멤버십 옵션을 정의하는 사전이며, 옵션별로 다음 매개변수를 포함할 수 있습니다.

organization: 문자열. 팀이 속하는 조직의

이름입니다. 조직과 팀 이름이 조합되지 않으면 팀이 생성됩니다. 조직이 없는 경우 먼저 생성됩니다.

users: 없음, True/False, 문자열 또는 문자열 목록/튜플.

  • **없음**인 경우 팀 멤버가 업데이트되지 않습니다.

  • **True/False**인 경우 모든 LDAP 사용자가 팀 멤버로 추가되거나 제거됩니다.

  • 문자열 또는 문자열 목록인 경우 그룹 DN을 지정합니다. 사용자가 이러한 그룹 중 하나의 멤버이면 팀 멤버로 추가됩니다.

remove: True/False. 기본값은 **False**입니다. **True**인 경우 지정된 그룹의 멤버가 아닌 사용자는 팀에서 제거됩니다.

{
"LDAP Engineering": {
  "organization": "LDAP Organization",
  "users": "cn=engineering,ou=groups,dc=example,dc=com",
  "remove": true
},
"LDAP IT": {
  "organization": "LDAP Organization",
  "users": "cn=it,ou=groups,dc=example,dc=com",
  "remove": true
},
"LDAP Sales": {
  "organization": "LDAP Organization",
  "users": "cn=sales,ou=groups,dc=example,dc=com",
  "remove": true
}
}

23.2. LDAP에 로깅 활성화

LDAP에 로깅을 활성화하려면 설정 구성 창에서 수준을 ``DEBUG``로 설정해야 합니다.

  1. 왼쪽 탐색 창에서 **설정**을 클릭하고 시스템 옵션 목록에서 **로깅 설정**을 클릭하여 선택합니다.

  2. **편집**을 클릭합니다.

  3. 로깅 수집기 수준 임계값 필드를 **디버그**로 설정합니다.

_images/settings-system-logging-debug.png
  1. **저장**을 클릭하여 변경 사항을 저장합니다.

23.3. 추천

Active Directory는 쿼리된 오브젝트를 해당 데이터베이스에서 사용할 수 없는 경우 《추천》을 사용합니다. 이 기능은 Django LDAP 클라이언트에서는 제대로 작동하지 않으며, 대부분의 경우 추천을 비활성화하는 것이 좋습니다. /etc/tower/conf.d/custom.py 파일에 다음 줄을 추가하여 LDAP 추천을 비활성화합니다.

AUTH_LDAP_GLOBAL_OPTIONS = {
    ldap.OPT_REFERRALS: False,
}

23.4. LDAP authentication performance tips

When an LDAP user authenticates, by default, all user-related attributes will be updated in the database on each log in. In some environments, this operation can be skipped due to performance issues. To avoid it, you can disable the option AUTH_LDAP_ALWAYS_UPDATE_USER. Refer to the Knowledge Base Article 5823061 for its configuration and usage instructions. Please note that new users will still be created and get their attributes pushed to the database on their first login.

경고

With this option set to False, no changes to LDAP user’s attributes will be updated. Attributes will only be updated the first time the user is created.