목적
Openstack keystone 서비스를 AD와 연동하여 openstack 사용자 인증을 AD 디렉토리 인증을 사용하도록 함.
MultiDomian 구성 개요
- Openstack keystone을 muiti-doamin 모드로 변경
- Openstack 빌트인 사용자인증 도메인을 default로 인증.
- 일반 사용자들의 인증은 AD_NAME 도메인으로 지정하여 AD 인증.
- Default도메인의 admin에 AD_NAME 의 admin role을 할당하여 권한 관리
사전 요구 사항
- 특정 도메인 네임(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 |