Cloud/OpenStack

[OpenStack] Authentication & Authorization - OpenStack Keystone과 Horizon 구성요소 정리 및 Login 인증 Flow

just-e 2021. 2. 18. 14:21

안녕하세요!
저스티에요!!

 

오늘의 블로그 내용은 OpenStack에서 제공하는 서비스중 Horizon과 Keystone간의 정리 및 Login 인증(소스 기준)입니다!

목차

1. Horizon이란?

2. Keystone이란?

   2.1 Keystone 구성요소

   2.2 Keystone 관계 및 정의

      2.2.1 Domain

      2.2.2 Project(Tenant)

      2.2.3 User와 Group

      2.2.4 Role 

      2.2.5 Token

      2.2.6 Endpoint

3. Horizon과 Keystone 간의 인증 Flow

 


 

1. Horizon이란?

Horizon은 OpenStack 서비스(e.g. Nova, Glance, Keystone 등)와 자원을 관리할 수 있도록 제공하는 웹 인터페이스입니다.

 

2. Keystone 이란?

Keystone은 인증(Authentication) 및 인가(Authorization), Endpoint URL, 서비스 검색 메커니즘을 제공합니다. 중앙 집중식 인증을 통해 자원을 안전하게 사용할 수 있도록 제공하는 서비스입니다.

 

2.1 Keystone 구성요소

Keystone 구성요소

  • Token Backend: 사용자의 임시 토큰(OpenStack 서비스에 접근하기 위한 신분 증명 데이터)을 관리합니다.
  • Catalog backend: 모든 OpenStack 서비스의 대한 End-point URL을 관리(OpenStack Client에서 OpenStack Service 접근을 위한 정보)합니다.
  • Policy Backend: 사용자 및 권한 등에 대한 역할을 관리합니다.
  • Identity Backend: 사용자 및 그룹에 대한 인증을 관리합니다.

2.2 Keystone 관계 및 정의

OpenStack Keystone 관계 파악

2.2.1 Domain

Domain은 사용자 및 그룹, 프로젝트의 모음으로, 특정 조직을 격리할 수 있습니다.

  • Keystone에서는 'Default'라는 이름의 기본 도메인을 제공합니다.
  • 각 도메인은 특정 API 이름 속성이 존재하는 Namespace를 정의하며, Identity v3 API 속성의 고유성은 아래와 같습니다.
    • Domain Name: 모든 도메인에서 고유해야 합니다.
    • Role Name: 도메인 내에서 고유해야 합니다.
    • User Name: 도메인 내에서 고유해야 합니다.
    • Project Name: 도메인 내에서 고유해야 합니다.
    • Group Name: 도메인 내에서 고유해야 합니다.
  • 도메인 관리자는 도메인에서 프로젝트 및 사용자, 그룹을 만들고 도메인의 사용자 및 그룹에 역할을 할당할 수 있습니다.
    • 도메인의 사용자는 적절한 할당이 부여된 경우, 다른 도메인 자원에 접근이 가능합니다.

2.2.2 Project(Tenant)

  • Project(Tenant)는 Tenant(Identity v2)라는 용어로 불렸지만, 개념적 표현보다는 직관적인 표현으로 표기하기 위해 Project(Identity v3)로 변경되었습니다.
    • 해당 블로그 내용에서는 Project로 통칭하여 내용이 작성되었습니다.
  • Project란 OpenStack 서비스에서 리소스(e.g. 서버, 이미지 등 - 프로젝트 및 도메인에 데이터 제공)를 그룹화하고 격리(기본 소유권 단위)하기 위해 추상화되어 있으며, 프로젝트는 도메인에서 고유해야 합니다. 프로젝트의 도메인을 지정하지 않으면 기본 도메인(Default)에 추가됩니다.
    • Identity API v3.4 이후, 프로젝트 생성시 프로젝트 계층 구조(parent_id)를 생성할 수 있으며, 계층 구조의 모든 프로젝트는 동일한 도메인에서 소유해야 합니다.
    • Identity API v3.6 이후, 프로젝트는 OpenStack 리소스에 대한 컨테이너 역할을 하는 것 외에도 도메인 역할을 할 수 있습니다.
  • Keystone의 가장 근본적인 목적은 프로젝트의 Registry와 접근 가능 여부가 명확해야 합니다.
  • Project는 사용자 또는 사용자 그룹을 역할 할당 개념으로 사용하여, 프로젝트 리소스에 대한 접근 가능 권한을 부여할 수 있습니다. 권한이 부여된 사용자는 특정 역할에 따라 접근 유형 및 기능이 결정됩니다.

2.2.3 User와 Group

  • User는 OpenStack 서비스를 이용하는 사람 또는 서비스(e.g. Nova, Cinder 등)를 의미하며, User는 도메인 내에서 고유해야 합니다.
  • Group은 User 집합을 의미하며, Group은 조메인 내에서 고유해야 합니다.

2.2.4 Role

  • User 및 Group에게 Role을 할당하여 프로젝트 리소스에 접근할 수 있는 집합을 의미하며, 역할은 User에게 발행된 Token에서 확인할 수 있습니다.

2.2.5 Token

  • OpenStack API 및 리소스에 접근 수 있는 영숫자 텍스트 문자열입니다.
  • 토큰은 언제든지 취소할 수 있으며, 한정된 기간 동안만 유효합니다.

2.2.6 Endpoint

  • User가 서비스를 이용하기 URL 정보(OpenStack Client에서 OpenStack Service 접근을 위한 정보)이며, 서비스는 하나 이상의 Endpoint를 가질 수 있습니다.
    • Endpoint 유형
      • public: 인터넷을 통해 사용자가 클라우드를 관리할 수 있습니다.
      • admin: 클라우드 인프라를 관리하는 운영자에게만 접근을 허용하여 관리할 수 있습니다.
        클라우드 환경을 관리하는 조직내부의 운영자들에게만 접근이 허용된다.
      • internal: OpenStack 서비스가 설치되어 있는 호스트로 제한하여 관리할 수 있습니다.

 

2.3 Horizon과 Keystone의 Credentials 인증 타입 Flow

  1. 초기 설정 및 로그인 화면 호출을 진행합니다.
  2. 로그인 화면이 정상적으로 호출되었다면, 로그인 화면을 확인할 수 있습니다.
  3. 로그인 버튼을 클릭시, 아이디와 비밀번호 등에 대해서 입력 여부를 확인합니다.
    • 실패시 2번으로 이동하며, 성공시에는 4번으로 이동합니다.
  4. 입력된 값(아이디와 비밀번호 등) 및 인증 타입 등을 활용하여 사용자 인증 여부를 진행합니다.
    • 실패시 2번으로 이동하며, 성공시에는 5번으로 이동합니다.
  5. 인증 성공시 Token이 발급됩니다.
    • Token에는 서비스에 접근할 수 있는 범위(scoped)가 담겨있습니다.
    • Token 범위로 지정되는 정보는 아래와 같습니다.
      • Project
      • Domain
      • 배포시스템
  6. Session에 영역(region, region_name)을 저장합니다.
  7. 발급된 Token이 정상적인 토큰인지 인증을 진행합니다.
    • 실패시 2번으로 이동하며, 성공시에는 8번으로 이동합니다.
  8. 정상정인 Token이면, Default로 지정된 화면을 호출합니다.

 

 

 

참조