Openstack Keystone AD integration

목적

Openstack keystone 서비스를 AD와 연동하여 openstack 사용자 인증을 AD 디렉토리 인증을 사용하도록 함.

MultiDomian 구성 개요

  • Openstack keystone을 muiti-doamin 모드로 변경
  • Openstack 빌트인 사용자인증 도메인을 default로 인증.
  • 일반 사용자들의 인증은 AD_NAME 도메인으로 지정하여 AD 인증.
  • Default도메인의 admin에 AD_NAME 의 admin role을 할당하여 권한 관리

 

multidomain

사전 요구 사항

  • 특정 도메인 네임(AD_NAME.co.kr)으로 구성된 Active Directory 서비스
  • keystone 모듈이 AD 서버 LDAP 바인딩을 위한 계정(ldap@AD_NAME.co.kr)
  • 일반 사용자로 할당할 계정이 포함된 OU 나 Group

구성 방법

1) keystonerc_admin_v3 파일 생성 및 수정

 
# cp keystonerc_admin keystonerc_admin_v3

keystonerc_admin_v3 파일 수정 (v2.0 을 V3로 수정)

 
export OS_AUTH_URL=http://controllerIP:5000/v3/

keystonerc_admin_v3 파일 마지막에 아래 내용 추가

 
export OS_IDENTITY_API_VERSION=3
export OS_PROJECT_DOMAIN_NAME=Default   
export OS_USER_DOMAIN_NAME=Default

2) controller 설정

SElinux 사용중인 경우 아래와 같이 LDAP 조회 허용 설정

 
# setsebool -P authlogin_nsswitch_use_ldap=on

아래와 같이 출력되면 정상

Full path required for exclude: net:[4026532245].

keystone 이 사용할 도메인용 conf 파일 추가를 위한 디렉토리 생성

# mkdir /etc/keystone/domains/
# chown keystone /etc/keystone/domains/

 

도메인 기반의 keytone 사용을 위한 keystone 설정 변경

# openstack-config --set /etc/keystone/keystone.conf identity domain_specific_drivers_enabled true
# openstack-config --set /etc/keystone/keystone.conf identity domain_config_dir /etc/keystone/domains
# openstack-config --set /etc/keystone/keystone.conf assignment driver keystone.assignment.backends.sql.Assignment

 

도메인 기반 인증 UI로 dashboard 설정 변경을 위한 /etc/openstack-dashboard/local_settings 파일 수정

 

OPENSTACK_API_VERSIONS = {   "identity": 3 }
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default'

keystone 및 httpd 재시작

 

# systemctl restart openstack-keystone.service
# systemctl restart httpd

openstack 에서 AD_NAME 도메인 추가 (실제 사용할 AD 도메인의 NetBIOSName으로 등록)

 

# openstack domain create AD_NAME

Neople 도메인 인증시 사용할 conf 파일 생성 및 내용 추가

/etc/keystone/domains/keystone.AD_NAME.conf 생성 및 아래 내용 추가

 

[ldap]
query_scope = sub
url = ldap://1.3.1.1, ldap://1.3.1.2
user = CN=ldap,OU=Domain Users,DC=AD_NAME,DC=co,DC=kr
password  = ****
suffix                   = dc=AD_NAME,dc=co,dc=kr
user_tree_dn             = OU=AD_NAME,OU=Domain Users,DC=neople,DC=co,DC=kr
user_objectclass         = person
user_id_attribute        = cn
user_name_attribute      = cn
user_mail_attribute      = mail
user_pass_attribute      =
user_enabled_attribute   = userAccountControl
user_enabled_mask        = 2
user_enabled_default     = 512
user_attribute_ignore    = password,tenant_id,tenants
user_allow_create        = False
user_allow_update        = False
user_allow_delete        = False
 
[identity]
driver = keystone.identity.backends.ldap.Identity

 

위에서 생성한 파일을 keystone 소유로 할당

# chown keystone /etc/keystone/domains/keystone.AD_NAME.conf

 

admin user 에게 AD_NAME 도메인 권한 부여

1.AD_NAME 도메인의 ID 확인

# openstack domain show AD_NAME
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | ebc6dd274b074f8abf32966bfec9157a |
| name        | AD_NAME                           |
+-------------+----------------------------------+

2. admin user의 ID 확인

# openstack user list --domain default | grep admin
| 7dcb5309a6bf4e50870b2615e14fb204 | admin   |

3. role ID 확인

# openstack role list
+----------------------------------+----------+
| ID                               | Name     |
+----------------------------------+----------+
| 180c8d81358a4e0f84b97dd10f114151 | admin    |
| 9fe2ff9ee4384b1894a90878d3e92bab | _member_ |
+----------------------------------+----------+

4. 위에서 확인된 ID 넘버를 가지고 AD_NAME 도메인의 admin role에 admin user를 할당

# openstack role add --domain ebc6dd274b074f8abf32966bfec9157a --user 7dcb5309a6bf4e50870b2615e14fb204 180c8d81358a4e0f84b97dd10f114151

keystone 서비스 재시작

# systemctl restart openstack-keystone.service

 

userlist 확인

 
# openstack user list --domain AD_NAME
 
# openstack user list --domain default

 

컴퓨트 노드 설정

각각의 컴퓨트 노드에서 아래 명령으로 keytstone v3 를 사용하도록 변경

# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_version v3

 

컨트롤러 노드의 nova 서비스 재시작

# systemctl restart openstack-nova-api.service openstack-nova-cert.service openstack-nova-conductor.service openstack-nova-consoleauth.service openstack-nova-novncproxy.service openstack-nova-scheduler.service

각각의 컴퓨트 노드에서 nova 서비스 재시작

# systemctl restart openstack-nova-compute.service

 

AD에 추가가능 컴퓨터 수

기본적으로 domain-users그룹에 포함된 사용자는 10대의 Machine 을도메인에 참여시킬수 있습니다

이런 쿼터의 제한은 ms-DS-MachineAccountQuota 속성에서 정의하게 됩니다. 이 값을 늘려주면 10대이상의 설정도 가능합니다

여기서 domain admins와 account operators 그룹에 포함된 계정은 이설정에서 제외되기 무제한 가능합니다

도멘인에서 Machine 추가시에 기본 아키텍처는 다음과 같습니다

1. 사용자가 도메인에 machine을 참여시킵니다. (Local Admin권한 필요)

2. 도메인 컨트롤러는 사용자가 default computer container에 Computer Objects를 Create할 권한이 있는지를 체크합니다.

3. 만약, 사용자가 필요 권한을 가지고 있다면, ms-DS-MachineAccountQuota 를 체크하지 않고, Computer Objects 생성에 성공합니다.

4. 만약, 사용자가 필요 권한을 가지고 있지 않다면, 도메인 컨트롤러는 그 사용자가 “Join workstations to the domain”권한을 가지고 있는지 여부를 체크합니다.

5. 만약, 사용자가 권한을 가진다면, ms-DS-MachineAccountQuota를 체크합니다. 사용자에 의해서 생성된 object수가
ms-DS-MachineAccountQuota보다 작으면, Computer Objects 생성에 성공합니다.

6. 만약, 사용자가 “Join workstations to the domain”권한이 없으며 작업 실패가 되고, 사용자가에 다시 권한 요청을 하게 됩니다.

만약, 사용자가 ms-DS-MachineAccountQuota에 정의된 수보다 초과하여 Computer Objects 생성하려 하면 작업 실패가 되고

사용자에게 더 이상 도메인에 Machine을 참여시킬 수 없음을 알려 줍니다.


[관련 자료]
Domain users cannot join workstation or server to a domain (kb251335)
http://support.microsoft.com/kb/251335/en-us
Default Limit to Number of Workstations a User Can Join to the Domain (kb243327)
http://support.microsoft.com/kb/243327/en-us
What is ms-DS-MachineAccountQuota?
http://www.msresource.net/knowledge_base/articles/info:_how_does_ms-ds-machineaccountquota_work.html