Documentation

23. Kerberos를 통한 사용자 인증

AD(Active Directory)를 통한 사용자 인증은 Kerberos를 통한 인증이라고도 하며, |at|를 통해 지원됩니다.

시작하려면 Kerberos 티켓을 생성할 수 있도록 컨트롤러 시스템에서 Kerberos 패키지를 먼저 설정합니다. 패키지를 설치하려면 다음 단계를 수행합니다.

yum install krb5-workstation
yum install krb5-devel
yum install krb5-libs

설치가 완료되면 /etc/krb5.conf 파일을 다음과 같이 편집하여 AD 주소, 도메인 등을 제공합니다.

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WEBSITE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 WEBSITE.COM = {
  kdc = WIN-SA2TXZOTVMV.website.com
  admin_server = WIN-SA2TXZOTVMV.website.com
 }

[domain_realm]
 .website.com = WEBSITE.COM
 website.com = WEBSITE.COM

구성 파일이 업데이트된 후 성공적으로 인증하고 유효한 토큰을 가져올 수 있어야 합니다. 다음 단계에서는 인증하고 토큰을 가져오는 방법을 보여 줍니다.

[root@ip-172-31-26-180 ~]# kinit username
Password for username@WEBSITE.COM:
[root@ip-172-31-26-180 ~]#

Check if we got a valid ticket.

[root@ip-172-31-26-180 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: username@WEBSITE.COM

Valid starting     Expires            Service principal
01/25/16 11:42:56  01/25/16 21:42:53  krbtgt/WEBSITE.COM@WEBSITE.COM
  renew until 02/01/16 11:42:56
[root@ip-172-31-26-180 ~]#

유효한 티켓을 가져온 후 명령행에서 모든 것이 예상대로 작동하는지 확인할 수 있습니다. 테스트하려면 인벤토리가 다음과 같이 표시되는지 확인합니다.

[windows]
win01.WEBSITE.COM

[windows:vars]
ansible_user = username@WEBSITE.COM
ansible_connection = winrm
ansible_port = 5986

또한 다음을 수행해야 합니다.

  • 호스트 이름이 AD의 항목과 일치하는 적절한 클라이언트 호스트 이름이고 IP 주소가 아닌지 확인합니다.

  • Kerberos는 대소문자를 구분하므로, 사용자 이름 선언에서 도메인 이름(@ 뒤에 있는 텍스트)의 대소문자가 올바르게 입력되었는지 확인합니다. 컨트롤러의 경우 인벤토리가 동일하게 표시되는지도 확인해야 합니다.

참고

Server not found in Kerberos database 오류 메시지가 표시되고 인벤토리가 FQDN(IP 주소 아님)을 사용하여 구성된 경우 서비스 주체 이름이 누락되거나 잘못 구성되지 않았는지 확인합니다.

이제 플레이북을 실행하면 예상대로 실행됩니다. 플레이북을 awx 사용자로 실행하여 테스트할 수 있습니다.

플레이북이 올바르게 작동하는지 확인한 후에는 컨트롤러와 쉽게 통합할 수 있습니다. awx 사용자로 Kerberos 티켓을 생성합니다. 컨트롤러가 인증을 위해 생성된 티켓을 자동으로 선택해야 합니다.

참고

python kerberos 패키지가 설치되어 있어야 합니다. Ansible은 kerberos 패키지가 설치되어 있는지 확인하도록 설계되었으며, 설치된 경우 kerberos 인증을 사용합니다.

23.1. AD 및 Kerberos 인증 정보

Active Directory만 해당:

  • AD 사용자 이름과 암호를 사용하여 Windows 머신에서 플레이북을 실행하기만 하려는 경우 사용자 이름을 나타내는 《user@<domain>》 형식 및 관련 암호를 사용할 수 있습니다.

Kerberos 사용:

  • Kerberos가 설치된 경우 사용자 이름에 《user@<domain>》 형식을 사용하여 사용자 이름과 암호로 머신 인증 정보를 생성할 수 있습니다.

23.2. Kerberos 티켓 사용

Ansible은 사용자 이름과 암호가 kerberos용으로 구성된 호스트의 머신 인증 정보에 지정된 경우 기본적으로 Kerberos 티켓을 자동으로 관리합니다. 각 작업이 실행되기 전에 각 호스트의 임시 인증 정보 캐시에 새 티켓이 생성됩니다(티켓 만료 가능성을 최소화하기 위해). 임시 인증 정보 캐시는 각 작업 후에 삭제되며, 기본 인증 정보 캐시를 방해하지 않습니다.

자동 티켓 관리를 비활성화하려면(예: 기존 SSO 티켓을 사용하거나 ``kinit``를 수동으로 호출하여 기본 인증 정보 캐시를 채우기 위해) 인벤토리를 통해 ``ansible_winrm_kinit_mode=manual``을 설정합니다.

자동 티켓 관리 시 제어 호스트 시스템 경로에 표준 kinit 바이너리가 있어야 합니다. 다른 위치 또는 바이너리 이름을 지정하려면 ansible_winrm_kinit_cmd 인벤토리 변수를 MIT krbv5 kinit 호환 바이너리의 정규화된 경로로 설정합니다.