간단 지식/Cloud

03. Openstack Controller - keystone 설치

납작한돌맹이 2024. 10. 26. 13:59
반응형

keystone 은 간단하게 말하면 인증을 위한 서비스이다. 

openstack 환경에서 인증이 발생하는 상황은 여러가지인데, 예를 들어 role 이 admin 인 user가 vm을 create 하기 위해서는 그 전에 keystone을 통한 로그인이 전제되어야 한다.

# example workflow
# 1. Log in to Keystone
openstack token issue

# 2. Create a VM
openstack server create --flavor m1.small --image my-image --network my-network my-insta

 

이러한 인증, 인가 역할의 keystone 서비스를 구축하는 방법을 정리해보았다. 기본적인 내용들은 모두 openstack 공식 홈페이지에서 참고했다.

https://docs.openstack.org/keystone/pike/install/keystone-install-ubuntu.html#keystone-install-configure-ubuntuhttps://wale.tistory.com/entry/2-%EC%98%A4%ED%94%88%EC%8A%A4%ED%83%9D-glance-%EC%84%A4%EC%B9%98%EF%BB%BF

 

OpenStack Docs: Install and configure

Install and configure This section describes how to install and configure the OpenStack Identity service, code-named keystone, on the controller node. For scalability purposes, this configuration deploys Fernet tokens and the Apache HTTP server to handle r

docs.openstack.org

 

 

1. keystone database 생성

# db 접속
mysql -uroot -ptest1234

# keystone database 생성
create database keystone;

# 권한 설정
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'test1234';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'test1234';

# flush
FLUSH PRIVILEGES;

 

 

2. keystone 서비스 관련 패키지 설치

sudo apt install keystone apache2 libapache2-mod-wsgi-py3
sudo apt install python3-openstackclient

 

반응형

 

3. keystone conf 파일 설정

이 파일에서는 keystone 서비스의 db, token 정보를 설정해줄 것 이다.

database 섹션에서 <db pw> 에는 사전에 설치한 mariadb의 db를 입력해주고, <db ip> 에는 db가 설치된 서버의 ip를 입력한다. 나처럼 db와 openstack 서비스가 같은 서버에 설치됐다면 localhost를 기입해준다.

fernet은 대칭키 암호 인증 방식을 의미한다.

expiration 은 설정하지 않는 경우 default 1 hour 이다. 참고로 10800 은 180 minutes 이다.

sudo vi /etc/keystone/keystone.conf

[database]
connection = mysql+pymysql://keystone:<db pw>@<db ip>/keystone

[token]
provider = fernet
expiration = 10800

 

 

4. keystone database 스키마 동기화

sudo keystone-manage db_sync

 

핵심 테이블 정보

테이블 명 설명
user OpenStack 사용자 정보를 저장하는 테이블.
사용자 ID, 이름, 암호(해시 값), 이메일 등의 정보를 저장.

인증 서비스에서 중요한 역할을 하며, 사용자가 OpenStack 리소스에 접근할 수 있도록 관리.
project 프로젝트(tenant)를 관리하는 테이블.
OpenStack 사용자가 특정 프로젝트 하에서 리소스에 접근할 수 있게 설정 가능.

프로젝트란 사용자가 사용할 수 있는 리소스의 범위를 정의하는 개념으로 그와 관련된 정보를 이 테이블에 저장.
role 사용자가 프로젝트 또는 도메인에서 어떤 권한을 가지는지에 대한 정보를 저장.
사용자가 프로젝트 내에서 관리자(Admin)인지, 사용자(User)인지를 저장.
사용자가 해당 프로젝트에서 어떤 작업을 할 수 있는지를 결정.
assignment 사용자, 프로젝트, 그리고 역할 간의 관계를 관리하는 테이블.
특정 사용자가 어떤 프로젝트에서 어떤 역할을 가지고 있는지를 저장.
OpenStack 리소스에 대한 접근 권한을 결정.
token 인증된 사용자의 토큰 정보를 저장하는 테이블.
발급된 토큰과 해당 토큰의 유효 기간, 관련된 사용자 정보를 저장.
Keystone은 사용자 인증이 성공하면 토큰을 발급하고, 사용자는 토큰을 사용해 OpenStack 서비스에 접근.

 

 

5.  keystone 초기 설정

fernet과 credential 에 대해 좀 더 이해할 필요가 있다.

fernet은 openstack에서 보안을 위해 관리되는 인증 방식이며, 이에 의한 토큰은 유효기간이 있으며 revoke가 될 수 있다.

credential은 user와 serice 가 인증 시 access 할 수 있는 민감한 정보를 의미하며, 그러한 정보에는 API 키, 비밀번호, 인증서, 다른 형태의 인증 토큰 등이 있다.

# keystone으로부터 제공되는 fernet 토큰 초기화
sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

# keystone으로부터 제공되는 credential 초기화
sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

#keystone 서비스의 초기 설정을 위한 bootstrap 작업
sudo keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://localhost:5000/v3/ \
  --bootstrap-internal-url http://localhost:5000/v3/ \ 
  --bootstrap-public-url http://localhost:5000/v3/ \
  --bootstrap-region-id RegionOne

 

bootstrap 커맨드를 한줄한줄 뜯어보면 다음과 같다.
Line 1. ADMIN_PASS에는 앞으로 keystone admin user 가 사용할 pw를 입력
Line 2. 관리자가 keystone api 로 인증/권한 부여 작업을 하는데 사용하는 url
Line 3. openstack 서비스 간 통신에서 사용하는 url
Line 4. user가 openstack 서비스 사용을 위해 외부에서 접근할 때 사용하는 url
Line 5. region 설정. openstack 은 여러 region 운영 가능하다.
 

 

6. keystone apache 파일 설정

sudo vi /etc/apache2/sites-available/keystone.conf

#꼭 아래와 완벽하게 같을 필요 없음

<VirtualHost *:5000>
    ServerName localhost
    DocumentRoot /var/www/html
    WSGIDaemonProcess keystone user=keystone group=keystone threads=5
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public

    <Directory /usr/bin>
        WSGIProcessGroup keystone
        WSGIApplicationGroup %{GLOBAL}
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/keystone_error.log
    CustomLog ${APACHE_LOG_DIR}/keystone_access.log combined
</VirtualHost>
sudo vi /etc/apache2/apache2.conf

ServerName localhost    # servername 추가
# 위 두개 파일 수정 후 아파치 재시작
systemctl restart apache2

 

 

7. keystone apache 파일 설정

openstack CLI 환경에서 keystone 인증을 위해 필요한 변수들이 있다.해당 정보들은 일반적으로 새로운 세션마다 초기화된다. 따라서 매번 인증이 귀찮으므로 다음과 같은 스크립트로 자동적용하도록 설정해준다.

 

-> 다음 변수들을 set_openstack_env.sh 파일로 제작한 뒤 사용한다.

$ export OS_USERNAME=admin

$ export OS_PASSWORD=test1234

$ export OS_PROJECT_NAME=admin

$ export OS_USER_DOMAIN_NAME=Default

$ export OS_PROJECT_DOMAIN_NAME=Default

$ export OS_AUTH_URL=http://controller:5000/v3

$ export OS_IDENTITY_API_VERSION=3

 

-> 사용방법: source ./set_openstack_env.sh

-> 확인방법: env | grep OS

 

 

8. 환경 검토

이제 keystone 서비스가 잘 설정되었는지 확인한다.

 

$ openstack --version

-> 오픈스택 버전 확인

 

$ openstack service list

-> 제공중인 서비스 리스트 확인

 

$ openstack endpoint list

-> API 엔드포인트 확인

 

$ openstack token issue

-> 토큰 발급 요청

 

$ openstack user list

-> 사용자 리스트 확인

 

 



반응형

'간단 지식 > Cloud' 카테고리의 다른 글

02. Openstack Controller - DB 설치  (0) 2024.10.19
01. Openstack Controller - 개요  (2) 2024.09.25