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