월간 인기 게시물

게시물 718건
   
OpenStack JUNO - Ubuntu 14.04 #02 Keystone(인증)
글쓴이 : 최고관리자 날짜 : 2015-02-23 (월) 14:37 조회 : 4623
                                

Keystone (인증담당 서비스)

  ==>> Horizon(대쉬보드) 인증 및 nova 를 통해 인스턴스 생성을 하게될때 glance에 등록된 이미지를 받고 nova-networking 혹은 neutron 을 통해 네트워크를 설정하는 일련의 과정들에 인증을 통합적으로 관리하는 서비스를 말합니다.

1) keystone 데이타베이스 및 유저 접근정보 추가
root@controller:~# mysql -uroot -pXXXXXXXXXXXXXXX
mysql> CREATE database keystone;
Query OK, 1 row affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'XXXXXXXXXXXXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'XXXXXXXXXXXXXXX';
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye


2) admin token 생성 
Identity Service와 다른 오픈스택서비스들간 인증(keystone)을 위해 필요한 토큰값으로 openssl rand 명령어를 통해 생성된 임의의 문자열을 사용합니다.
root@controller:~# openssl rand -hex 10
4c8b1d9877514460e813


3) keystone install
root@controller:~# apt-get -y install keystone python-keystoneclient


4) /etc/keystone/keystone.conf  수정
[DEFAULT]
#admin_token=ADMIN
admin_token=4c8b1d9877514460e813

[database]
#connection=sqlite:////var/lib/keystone/keystone.do   ### 주석처리
connection = mysql://keystone:XXXXXXXXXXXXXXX@115.XXX.XXX.6/keystone


5) keystone 테이블생성
root@controller:~# keystone-manage db_sync
에러메세지없이 아무런 메세지없이 떨어지면 완료되며 아래처럼 테이블이 생성됩니다.

root@controller:~# ls -l /var/lib/mysql/keystone/
total 220
-rw-rw---- 1 mysql mysql 8764  2월 23 16:43 assignment.frm
-rw-rw---- 1 mysql mysql 8726  2월 23 16:43 credential.frm
-rw-rw---- 1 mysql mysql   61  2월 23 16:43 db.opt
-rw-rw---- 1 mysql mysql 8654  2월 23 16:43 domain.frm
-rw-rw---- 1 mysql mysql 8832  2월 23 16:43 endpoint.frm
-rw-rw---- 1 mysql mysql 8702  2월 23 16:43 group.frm
-rw-rw---- 1 mysql mysql 8705  2월 23 16:43 id_mapping.frm
-rw-rw---- 1 mysql mysql 8666  2월 23 16:43 migrate_version.frm
-rw-rw---- 1 mysql mysql 8648  2월 23 16:43 policy.frm
-rw-rw---- 1 mysql mysql 8738  2월 23 16:43 project.frm
-rw-rw---- 1 mysql mysql 8714  2월 23 16:43 region.frm
-rw-rw---- 1 mysql mysql 9064  2월 23 16:44 revocation_event.frm
-rw-rw---- 1 mysql mysql 8618  2월 23 16:43 role.frm
-rw-rw---- 1 mysql mysql 8654  2월 23 16:43 service.frm
-rw-rw---- 1 mysql mysql 8730  2월 23 16:43 token.frm
-rw-rw---- 1 mysql mysql 8916  2월 23 16:43 trust.frm
-rw-rw---- 1 mysql mysql 8604  2월 23 16:43 trust_role.frm
-rw-rw---- 1 mysql mysql 8790  2월 23 16:43 user.frm
-rw-rw---- 1 mysql mysql 8604  2월 23 16:43 user_group_membership.frm


6) 수정된 conf  파일적용을 위해 keystone 데몬 재시작 
root@controller:~# service keystone restart
keystone stop/waiting
keystone start/running, process 4067


7) 불필요한 keystone.db 삭제
root@controller1:~# rm -f /var/lib/keystone/keystone.db


8) 환경변수 선언
먼저 생성된 admin token만으로 사용자를 생성할 수 없기에 keystone 명령어의 OS_SERVICE_TOKEN 환경변수로 토큰값을 전달하고 OS_SERVICE_ENDPOINT 변수에는 Identity Service(컨트롤러)의 위치를 지정합니다.
root@controller:~# export OS_SERVICE_TOKEN=4c8b1d9877514460e813
root@controller:~# export OS_SERVICE_ENDPOINT=http://115.XXX.XXX.6:35357/v2.0


keystone 사용자, 테넌트, 롤 그리고 endpoint 생성
To create tenants, users, and roles
:: Create the admin tenant  관리자 터넌트 생성
터넌트(Tenant) : 지정된 사용자들과 리소스에 관련된 모든것으로 사용자 그룹을 지칭합니다. 대시보드에서는 프로젝트(Project)라고 합니다.
root@controller:~# keystone tenant-create --name admin --description "Admin Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Admin Tenant           |
|   enabled   |               True               |
|      id     | 1cf650d0c8ea4b8b93ee38b1bb3cea76 |
|     name    |              admin               |
+-------------+----------------------------------+

:: Create the admin user   관리자 유저생성
오픈스택내 전체적인 부분을 관리하는 계정입니다.
root@controller:~# keystone user-create --name=admin --pass=XXXXXXXXXXXXXXX --email=newbd@smileserv.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |       newbd@smileserv.com        |
| enabled  |               True               |
|    id    | 60cbefc60c03447ca0ed720b627c85a3 |
|   name   |              admin               |
| username |              admin               |
+----------+----------------------------------+

:: Create the admin role
root@controller:~# keystone role-create --name=admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | e47bd1de2b1d4a83ac7296fa58e39751 |
|   name   |              admin               |
+----------+----------------------------------+

root@controller:~#  keystone role-create --name=_member_
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | f82a5ab12d6c4d7c963145606835f131 |
|   name   |              member              |
+----------+----------------------------------+
※ ICEHOUSE(1.3) 에서는 이미 생성되어있으며 JUNO(2.2) 에서는 생성해줘야 됨...
root@controller:~# keystone role-create --name=_member_
Conflict occurred attempting to store role. (IntegrityError) (1062, "Duplicate entry '_member_' for key 'name'") 'INSERT INTO role (id, name, extra) VALUES (%s, %s, %s)' ('7949bc2113a647d6a30e28f3f975a0bb', '_member_', '{}') (HTTP 409)


만들어진 관리자 유저, 관리자 룰, 관리자 터넌트를 서로 연결
root@controller:~# keystone user-role-add --tenant admin --user admin --role admin

※ By default, the Identity service creates a special _member_ role. The OpenStack dashboard automatically grants access to users with this role. You must give the admin user access to this role in addition to the admin role.
root@controller:~# keystone user-role-add --tenant admin --user admin --role _member_

일반(demo) 사용자 생성
일반사용자는 비관리적인 일을 하게될경우 사용됩니다.
root@controller:~# keystone tenant-create --name demo --description "Demo Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |           Demo Tenant            |
|   enabled   |               True               |
|      id     | 3bfcda4338fb4c5089660f90e8cfdb95 |
|     name    |               demo               |
+-------------+----------------------------------+

root@controller:~# keystone user-create --name=demo --pass=XXXXXXXXXXXXXXX --email=newbd@smileserv.com
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|  email   |       newbd@smileserv.com        |
| enabled  |               True               |
|    id    | 673544f2d937406e92527a9043824620 |
|   name   |               demo               |
| username |               demo               |
+----------+----------------------------------+

일반사용자(demo). member role, demo 터넌트 연결
root@controller:~# keystone user-role-add --tenant demo --user demo --role _member_

service 터넌트 생성
다른 오픈스택 서비스들에 접근하기 위해 사용되는 유저, 터넌트, 롤이며 기본적으로 하나의 터넌트 이름 서비스를 공유합니다.
root@controller:~# keystone tenant-create --name=service --description="Service Tenant"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |          Service Tenant          |
|   enabled   |               True               |
|      id     | 54a4a20b9e6243d9a08b57c950e9edd5 |
|     name    |             service              |
+-------------+----------------------------------+

Identity Service는 설치된 오픈스택 서비스들을 추적하거나 네트워치내 위치를 알수 있도록 설치한 오픈스택의 각 서버들을 등록해야 한다.
root@controller:~# keystone service-create --name=keystone --type=identity --description="OpenStack Identity"
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |        OpenStack Identity        |
|   enabled   |               True               |
|      id     | f5ac6b794c324f81b027b271bbbd19ae |
|     name    |             keystone             |
|     type    |             identity             |
+-------------+----------------------------------+

반환된 서비스 아이디로 Identity Service에 대한 API endpoint 를 정의하며 endpoint를 정의할때는 public API, internel API, admin API 에 대한 URL을 제공해줍니다.
root@controller:~# keystone endpoint-create \
> --service-id=$(keystone service-list | awk '/ identity / {print $2}') \
> --publicurl=http://115.XXX.XXX.6:5000/v2.0 \
> --internalurl=http://115.XXX.XXX.6:5000/v2.0 \
> --adminurl=http://115.XXX.XXX.6:35357/v2.0
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
|   adminurl  |  http://115.XXX.XXX.6:35357/v2.0  |
|      id     | a5b6eac651f74c4c8fcf336ae187d6c6 |
| internalurl |  http://115.XXX.XXX.6:5000/v2.0   |
|  publicurl  |  http://115.XXX.XXX.6:5000/v2.0   |
|    region   |            regionOne             |
|  service_id | f5ac6b794c324f81b027b271bbbd19ae |
+-------------+----------------------------------+

root@controller:~# (keystone service-list | awk '/ identity / {print $2}')
f5ac6b794c324f81b027b271bbbd19ae

Identity Service를 확인하기 위해 환경변수값 삭제
root@controller:~# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT

사용자 이름기반으로 인증을 요청해보며 아래애서는 admin 사용자와 패스워드를 사용해서 인증 토큰을 요청합니다.
root@controller:~# keystone --os-tenant-name admin --os-username admin --os-password 'XXXXXXXXXXXXXXX' --os-auth-url http://115.XXX.XXX.6:35357/v2.0 token-get
+-----------+----------------------------------+
|  Property |              Value               |
+-----------+----------------------------------+
|  expires  |       2015-02-24T03:28:16Z       |
|     id    | MIIE+gYJKoZIhvcNAQcCoIIE6zCCBOcCAQExDTALBglghkgBZQMEAgEwggNIBgkqhkiG9w0BBwGgggM5BIIDNXsiYWNjZXNzIjogeyJ0b2tlbiI6IHsiaXNzdWVkX2F0IjogIjIwMTUtMDMtMDZUMDE6NTg6NDIuODI1OTY4IiwgImV4cGlyZXMiOiAiMjAxNS0wMy0wNlQwMjo1ODo0MloiLCAiaWQiOiAicGxhY2Vob2xkZXIiLCAidGVuYW50IjogeyJkZXNjcmlwdGlvbiI6ICJBZG1pbiBUZW5hbnQiLCAiZW5hYmxlZCI6IHRydWUsICJpZCI6ICI2MThlMmE3ZWZkOTA0N2Y4YjNkYmQzNzlkOTY0MmU1NSIsICJuYW1lIjogImFkbWluIn19LCAic2VydmljZUNhdGFsb2ciOiBbeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTE1LjY4LjE0NS41OjM1MzU3L3YyLjAiLCAicmVnaW9uIjogInJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTE1LjY4LjE0NS41OjUwMDAvdjIuMCIsICJpZCI6ICI4MjA3MDFjMGYzYWY0YmIyOTE3ODA1NTBkNTE2YzRmNyIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzExNS42OC4xNDUuNTo1MDAwL3YyLjAifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiaWRlbnRpdHkiLCAibmFtZSI6ICJrZXlzdG9uZSJ9XSwgInVzZXIiOiB7InVzZXJuYW1lIjogImFkbWluIiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICIxNGZhOTIyNjdmOTI0NDJjODU2ODkxN2RhNDVmM2ZmMSIsICJyb2xlcyI6IFt7Im5hbWUiOiAiX21lbWJlcl8ifSwgeyJuYW1lIjogImFkbWluIn1dLCAibmFtZSI6ICJhZG1pbiJ9LCAibWV0YWRhdGEiOiB7ImlzX2FkbWluIjogMCwgInJvbGVzIjogWyI5ZmUyZmY5ZWU0Mzg0YjE4OTRhOTA4NzhkM2U5MmJhYiIsICI5ZGY1NjI2MmZjOWE0Zjg1YWI5ZDIzMWE5ODUwMjM5ZSJdfX19MYIBhTCCAYECAQEwXDBXMQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVW5zZXQxDjAMBgNVBAcMBVVuc2V0MQ4wDAYDVQQKDAVVbnNldDEYMBYGA1UEAwwPd3d3LmV4YW1wbGUuY29tAgEBMAsGCWCGSAFlAwQCATANBgkqhkiG9w0BAQEFAASCAQBANteEmwPY6UCF6-w1xEiBbu-o1BmwCwYsSfh0rpTkr8Tqa1CgBKpSS8K81wo2mmY6dZGtzfyJOwWLLfN7YS3RLI6X7xzcx1S+5VxUJkcMZogCA7teDasM6RSj-HZiEonYluk4hvvb7tiDui42rlNEUNizi6F+2wLgjdS2A+QOoSXwM2tvfpLfdTsgRjziFpidFWdNM6eaVTlp0iL5Tq0cqZupW8+GHxLDyV+--944RpJoh6LT-QNhQfeDuGmlEY57pOZReK9PFeX67B48Rk8P-iLgzH2yLa8rCuG2u4ajq5v5uuw1qPZIIf1TaGOvWDJ7vGz-H7wDiHcTu5BBy9V5 |
| tenant_id | 1cf650d0c8ea4b8b93ee38b1bb3cea76 |
|  user_id  | 60cbefc60c03447ca0ed720b627c85a3 |
+-----------+----------------------------------+
※ Juno 2.x vs 1.3 에서의 토큰값 길이가 달라졌음...;;

스크립트로 만들어서 환경변수값 정의
root@controller:~# cat > /root/admin-openrc.sh 
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=XXXXXXXXXXXXXXX
export OS_AUTH_URL=http://115.XXX.XXX.6:35357/v2.0

root@controller:~# cat > /root/demo-openrc.sh 
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=XXXXXXXXXXXXXXX
export OS_AUTH_URL=http://115.XXX.XXX.6:35357/v2.0


환경변수 적용
root@controller1:~# source admin-openrc.sh 

keystone user-list를 통해 나온 ID와 keystone user-role-list를 통해 나온 user_id 와 매칭
root@controller:~# keystone user-list
+----------------------------------+-------+---------+---------------------+
|                id                |  name | enabled |        email        |
+----------------------------------+-------+---------+---------------------+
| 60cbefc60c03447ca0ed720b627c85a3 | admin |   True  | newbd@smileserv.com |
| 673544f2d937406e92527a9043824620 |  demo |   True  | newbd@smileserv.com |
+----------------------------------+-------+---------+---------------------+

root@controller:~# keystone user-role-list
+----------------------------------+--------+----------------------------------+----------------------------------+
|                id                |  name  |             user_id              |            tenant_id             |
+----------------------------------+--------+----------------------------------+----------------------------------+
| e47bd1de2b1d4a83ac7296fa58e39751 | admin  | 60cbefc60c03447ca0ed720b627c85a3 | 1cf650d0c8ea4b8b93ee38b1bb3cea76 |
| f82a5ab12d6c4d7c963145606835f131 | _member_ | 60cbefc60c03447ca0ed720b627c85a3 | 1cf650d0c8ea4b8b93ee38b1bb3cea76 |
+----------------------------------+--------+----------------------------------+----------------------------------+



※ Err Message
root@controller:~# source demo-openrc.sh
root@controller:~# keystone user-list
You are not authorized to perform the requested action: admin_required (HTTP 403)

이름 패스워드
스타일
굴림
10pt
<html> <body>
 
 
 
 
비밀글 (체크하면 글쓴이만 내용을 확인할 수 있습니다.)
왼쪽의 글자를 입력하세요.
   

 



 
사이트명 : 모지리네 | 대표 : 이경현 | 개인커뮤니티 : 랭키닷컴 운영체제(OS) | 경기도 성남시 분당구 | 전자우편 : mojily골뱅이chonnom.com Copyright ⓒ www.chonnom.com www.kyunghyun.net www.mojily.net. All rights reserved.