Post

OPENSTACK - Keystone

Keystone

1. 개요

Keystone이란 Openstack에서 Identity API를 구현하여 API 클라이언트 인증, 서비스 검색, 분산 다중 테넌트 권한 부여를 제공하는 서비스이다.

Keystone은 하나 이상의 엔드포인트에서 노출되는 내부 서비스 그룹으로 구성되는데, 이러한 서비스 중 다수는 프론트엔드에서 조합하여 사용됩니다. 예를 들어, 인증 요청(authenticate call)은 Identity 서비스로 사용자/프로젝트 자격 증명을 확인하고, 성공 시 Token 서비스를 통해 토큰을 생성 및 반환한다.

2. 구성요소

1) Identity

Identity 서비스는 인증 자격 증명을 검증하고 사용자와 그룹에 대한 데이터를 제공한다. 기본적으로 이 데이터는 Identity 서비스에 의해 관리되며 관련 CRUD 작업을 처리할 수 있다. 그러나 더 복잡한 경우, 데이터는 권위 있는 백엔드 서비스에 의해 관리됩니다. 예를 들어, Identity 서비스가 LDAP(Lightweight Directory Access Protocol)의 프론트엔드 역할을 하는 경우, LDAP 서버가 데이터의 신뢰 가능한 소스가 되며 Identity 서비스는 해당 정보를 중계하는 역할을 한다.

a. 사용자(Users)

사용자는 개별 API 소비자를 나타낸다. 사용자는 특정 도메인에 소속되어야 하며 도메인 내에서만 고유한 이름을 갖는다.

b. 그룹(Groups)

그룹은 사용자 모음을 나타낸다. 그룹은 특정 도메인에 소속되어야 하며 도메인 내에서만 고유한 이름을 갖는다.

2) Resoure

Resource 서비스는 프로젝트와 도메인에 대한 데이터를 제공한다.

a. 프로젝트(Projects)

프로젝트는 OpenStack에서 소유권의 기본 단위를 나타내며, OpenStack의 모든 리소스는 특정 프로젝트에 소속되어야 한다. 프로젝트는 특정 도메인에 소속되어야 하며 도메인 내에서만 고유한 이름을 갖는다. 프로젝트의 도메인이 지정되지 않은 경우 기본 도메인에 추가된다.

b. 도메인(Domains)

도메인은 프로젝트, 사용자 및 그룹을 위한 고수준 컨테이너이다. 각 도메인은 정확히 하나의 도메인을 소유하며, API에서 볼 수 있는 이름 속성을 정의하는 네임스페이스를 제공한다. Keystone은 기본 도메인(Default)이라는 이름의 도메인을 제공한다.

Identity v3 API에서 속성의 고유성:

  • 도메인 이름(Domain Name): 모든 도메인에서 글로벌로 고유함.
  • 역할 이름(Role Name): 소속 도메인 내에서 고유함.
  • 사용자 이름(User Name): 소속 도메인 내에서 고유함.
  • 프로젝트 이름(Project Name): 소속 도메인 내에서 고유함.
  • 그룹 이름(Group Name): 소속 도메인 내에서 고유함.

도메인의 컨테이너 아키텍처 덕분에 OpenStack 리소스 관리를 위임하는 방법으로 사용할 수 있다. 한 도메인의 사용자는 적절한 권한이 부여되면 다른 도메인의 리소스에도 접근할 수 있다.

3) Assignment

Assignment 서비스는 역할 및 역할 할당에 대한 데이터를 제공한다.

a. 역할(Roles)

역할은 최종 사용자가 얻을 수 있는 권한 수준을 정의하는 것이다. 역할은 도메인 또는 프로젝트 수준에서 부여될 수 있으며, 개별 사용자 또는 그룹 수준에서 할당 가능하다. 역할 이름은 소속 도메인 내에서 고유하다.

b. 역할 할당(Role Assignments)

Role, Resource, Identity를 포함하는 3-튜플 구조로 이루어져 있다.

4) Token

Token 서비스는 사용자의 자격 증명이 이미 확인된 후 요청 인증에 사용되는 토큰을 검증하고 관리한다.

5) Catalog

Catalog 서비스는 엔드포인트 탐색에 사용되는 엔드포인트 레지스트리를 제공한다.

3. 소스코드 구조

기본적으로 Openstack keystone의 소스코드는 이곳 에서 받을 수 있다. 릴리즈 버전들을 올려둔 공식 사이트이다. 소스코드를 받아와보면 여러 폴더들이 있다.

기본적으로 Flask-RESTFUL 라이브러리를 이용해서 RESTFUL API 인터페이스를 제공하며 실질적인 소스는 keystone 폴더에 포함되어있으며 내용은 아래와 같다.

api

  • 역할 : API 처리
  • 내용 : Keystone의 API 요청을 처리하는 모듈로 외부 요청을 수신하고 처리한다.

application_credential

  • 역할 : 어플리케이션 자격 검증
  • 내용 : 어플리케이션의 자격 증명을 검증하거나 만들거나 삭제하며 관리한다.

assignment

  • 역할 : 역할(Role) 할당 및 관리
  • 내용 : 프로젝트나 그룹, 사용자에게 역할(Role)을 할당하거나 삭제하거나 변경하며 관리한다.

auth

  • 역할 : 인증 플러그인
  • 내용 : 인증에 대한 플로그인들이 포함된 코드들이다.

catalog

  • 역할 : 서비스 카탈로그
  • 내용 : 서비스 카탈로그에 대한 코드이다.

cmd

  • 역할 : 명령줄 유틸리티
  • 내용 : Keystone 서비스 실행에 사용되는 명령줄 유틸리티를 포함한다.

common

  • 역할 : 공통 유틸리티와 그외 잡다한 라이브러리
  • 내용 : 암호화나 정책, 암호에 대한 검증등 공용으로 사용하는 라이브러리가 포함되어있다.

conf

  • 역할 : Keystone 설정 옵션 정의.
  • 내용 : 각 Keystone 컴포넌트의 설정 옵션 및 기본값.

credential

  • 역할 : 사용자 자격 증명
  • 내용 : 사용자 자격증명을 다루는 코드이다.

endpoint_policy

  • 역할 : 엔드 포인트 정책
  • 내용 : 엔트 포인트 정책을 관리한다.

federation

  • 역할 : 페더레이션 관리
  • 내용 : 페더레이션은 여러 ID 관리 시스템에서 ID 정보를 공유하는 기능이다. 이러한 페더레이션에 관한 코드가 포함되어있다.

identity

  • 역할 : 신원 관리
  • 내용 : 사용자 및 그룹 관리를 포함하여 신원(Identity) 관리와 관련된 코드

limit

  • 역할 : 제한 처리
  • 내용 : 새로운 제한 사항을 만들거나 삭제하거나 변경하는 코드가 포함되어있다.

locale

  • 역할 : 다국어 지원
  • 내용 : 다국어 지원을 위한 번역 파일이 포함되어있다.

models

  • 역할 : 모델 정의
  • 내용 : Keystone에서 사용되는 데이터 모델 정의

oauth1

  • 역할 : Oauth1 드라이버
  • 내용 : OAuth 1.0 인증 프로토콜 지원 관련 코드

oauth2

  • 역할 : Oauth2 드라이버
  • 내용 : OAuth 2.0 인증 프로토콜 지원 관련 코드

policy

  • 역할 : 정책 파일과 권한 제어를 담당
  • 내용 : 정책 파일과 권한 제어를 담당한다. 예를 들자면 액세스 권한 및 작업 제한 정의 같은 것들이 있다.

receipt

  • 역할 : 인증 영수증(Receipt)
  • 내용 : 인증 영수증(Receipt) 관련 처리 코드

resource

  • 역할 : 리소스 관리
  • 내용 : Keystone에서 관리하는 리소스(프로젝트, 도메인 등) 관련 코드

revoke

  • 역할 : 토큰 해지 및 자격 증명 해지
  • 내용 : 토큰 또는 자격증명의 철회(Revoke) 처리 코드

server

  • 역할 : flaskREST API
  • 내용 : flaskREST API를 사용하기 위한 라이브러리

tests

  • 역할 : 테스트 코드
  • 내용 : 단위 테스트와 통합 테스트를 위한 코드

token

  • 역할 : 토큰 생성 및 관리
  • 내용 : 토큰을 생성하거나 관리하는 코드

trust

  • 역할 : 트러스트(신뢰) 생성 및 관리
  • 내용 : 프로젝트에 대한 role을 위임하거나 삭제하는 코드

wsgi

  • 역할 : WSGI 서버와 관련된 코드
  • 내용 : Keystone의 WSGI 애플리케이션을 관리하며 API 요청의 진입점을 제공한다.

참고문헌

This post is licensed under CC BY 4.0 by the author.