본문으로 바로가기

OpenStack Manual Installation - Keystone

category 클라우드/OpenStack 2022. 8. 17. 18:37

Keystone Installation

참고 : https://it00.tistory.com/16?category=808035

Identity Service 개요

  • 인증, 권한 부여 및 서비스 카탈로그를 관리하기 위한 서비스
  • 사용자가 상호 작용하는 첫 번째 서비스로 인증을 통해 사용자는 자신의 ID를 사용해 다른 OpenStack 서비스에 접근할 수 있습니다.
  • 다른 OpenStack 서비스는 Identity 서비스를 활용하여 사용자가 접근 권한이 있는 사용자인지 확인하고 배포 내에서 다른 서비스가 어디에 있는지 확인합니다.
  • 사용자와 서비스들은 Identity 서비스에서 관리하는 서비스 카탈로그를 사용하여 다른 서비스들을 찾고 사용할 수 있습니다.
    • 서비스 카탈로그 : OpenStack 배포에서 사용 가능한 서비스 모음

Identity 서비스 구성 요소

  • Server
    • RESTful 인터페이스를 사용하여 인증 및 권한 부여 서비스를 제공합니다.
  • Drivers
    • Driver or Service Backend는 Server와 통합됩니다.
    • OpenStack 외부 저장소의 ID 정보에 접근하는데 사용되며 OpenStack이 배포된 인프라(ex. SQL 데이터베이스 또는 LDAP 서버)에 이미 존재할 수 있습니다.
  • Modules
    • Identity 서비스를 사용하는 OpenStack 구성 요소의 주소 공간에서 실행됩니다.
    • 모듈은 서비스 요청을 가로채 사용자 자격 증명을 추출한 다음 인증을 위해 서버로 보냅니다.
    • 미들웨어 모듈과 OpenStack 구성 요소 간의 통합은 Python 웹 서버 게이트웨이 인터페이스를 사용합니다.

설치 및 구성

  • 확장성을 위해 Fernet 토큰과 Apache HTTP 서버를 배포하여 요청을 처리합니다.
  • Controller Node에서 진행합니다.

전제 조건

  • 데이터베이스 액세스 클라이언트를 사용하여 root 사용자로 데이터베이스 서버에 연결
    mysql -u root -p
  • Keystone Database 생성
    MariaDB [(none)]> CREATE DATABASE keystone;
  • Keystone Database에 접근 권한 부여
# KEYSTONE_DBPASS를 적절한 암호로 변경
# keystone 데이터베이스의 모든 스키마에 대해 keystone 계정의 로컬 접근 권한 허용
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
# keystone 데이터베이스의 모든 스키마에 대해 keystone 계정의 외부 접근 권한 허용
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
  • 데이터베이스 액세스 클라이언트 종료
    exit

구성 요소 설치 및 구성

  • 필요한 패키지 설치
    yum install openstack-keystone httpd mod_wsgi
  • /etc/keystone/keystone.conf 파일 수정
    • [database] 섹션에서 데이터베이스 액세스 구성
...
[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
...

  • [token] 섹션에서 Fernet 토큰 공급자를 구성
...
[token]
provider = fernet
...

  • Identity 서비스 데이터베이스 내용 채우기
    su -s /bin/sh -c "keystone-manage db_sync" keystone
  • Fernet 키 저장소 초기화
root@controller$ keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone    # 저장소 초기화
root@controller$ keystone-manage credential_setup --keystone-user keystone --keystone-group keystone    # 암호화
  • Identity 서비스 부트 스트랩
root@controller$ keystone-manage bootstrap-password ADMIN_PASS \
    --bootstrap-admin-url http://controller:5000/v3/ \
    --bootstrap-internal-url http://controller:5000/v3/ \
    --bootstrap-public-url http://controller:5000/v3/ \
    --bootstrap-region-id RegionOne

Apache HTTP 서버 구성

  • /etc/httpd/conf/httpd.conf파일 편집
    • ServerName controller
  • /usr/share/keystone/wsgi-keystone.conf 파일에 대한 링크 생성
    • ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

설치 완료

  • Apache HTTP 서비스를 시작하고 시스템이 부팅될 때 시작되도록 구성
root@controller$ systemctl enable httpd.service
root@controller$ systemctl start httpd.service
  • 관리 계정을 구성하기 위한 환경변수 설정
$ vi admin-openrc
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS        # keystone-manage bootstrap에서 사용한 비밀번호
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
  • . admin-openrc 관리 계정 스크립트 실행
  • admin 유저에 대한 검증
    • openstack token issue

도메인, 프로젝트, 사용자 및 역할 생성

  • keystone-manage bootstrap 단계에서 기본 도메인이 생성되지만 새 도메인을 생성하는 방법
    • openstack domain create --description "An Example Domain" example

  • service 프로젝트 생성
    • openstack project create --domain default --description "Service Project" service

  • 관리자가 아닌 일반 작업은 권한이 없는 프로젝트 및 사용자를 사용해야 합니다.
    • 이를 위해 myprojectmyuser를 생성합니다.
    • openstack project create --domain default --description "Demo Project" myproject
    • openstack user create --domain default --password-prompt myuser
    • openstack role create myrole
    • 프로젝트 및 사용자에 myrole 추가
    • openstack role add --project myproject --user myuser myrole
      • 해당 명령은 출력을 제공하지 않습니다.

작동 확인

  • 임시 OS_AUTH_URL 및 OS_PASSWORD 환경변수를 설정 해제
    • unset OS_AUTH_URL OS_PASSWORD
  • admin 사용자 인증 토큰 요청
    • openstack --os-auth-rul http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue

  • myuser 사용자 인증 토큰 요청
    • openstack --os-auth-rul http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue

OpenStack 클라이언트 환경 스크립트 생성

스크립트 생성

  • admindemo 프로젝트와 사용자를 위한 클라이언트 환경 스크립트를 작성한다.
  • admin-openrc 파일을 생성 및 편집
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS        // admin 사용자 비밀번호로 변경
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
  • demo-openrc 파일 생성 및 편집
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

스크립트 사용

  • 클라이언트를 특정 프로젝트 및 사용자로 실행하려면 실행하기 전에 연결된 클라이언트 환경스크립트를 로드하여 사용합니다.
  • admin 사용자를 로드하려면 admin-openrc파일을 로드
    • . admin-openrc
  • 인증 토큰 요청
    • openstack token issue