Role Based Access Control

이 페이지에서는 SpaceONE의 사용자 역할기반 접근관리(RBAC)의 기본 개념에 대해 살펴봅니다.

How RBAC Works

SpaceONE의 RBAC(Role Based Access Control)을 통해 누가(who), **어떠한 조직(project or domain)**에 어떠한(what) 접근을 할 수 있는지를 정의 합니다.

예를 들어, Project Admin Role은 지정된 Project 내의 모든 자원을 조회(Read) 몇 변경(Update/Delete)할 수 있습니다. Domain Viewer Role은 지정된 Domain 내의 모든 자원을 조회(Read)할 수 있습니다. 여기서 자원이란, SpaceONE 내에 생성한 사용자, Project/Project Group 및 개별 클라우드 리소스까지 모든것을 포함 합니다.

모든 사용자는 하나 이상의 역할을 가지고 있으며, 이것은 직접 역할을 부여하거나 프로젝트 내에서 상속될 수도 있습니다. 이를 통해 복잡한 프로젝트 관계 속에서 사용자의 역할관리를 손쉽게 관리할 수 있습니다.

Role은 Policy를 통해 대상이 지정된 자원에 대해 어떠한 Action을 할 수 있는지 정의 합니다. 또한 Role은 각각의 사용자에 바인딩 됩니다. 아래의 다이어그램은 RBAC를 구성하는 사용자와 Role 및 Project 간의 관계를 나타냅니다.

이러한 역할 관리 모델은 크게 3가지 구성 요소로 구분 됩니다.

  • Role. 각 사용자별 부여할 수 있는 접근권한 정책의 모음 입니다. 모든 Role은 하나의 Policy를 반드시 필요로 합니다. 더 상세한 설명은 Understanding Role를 참고해주세요

  • Project. 권한이 적용되는 프로젝트 혹은 프로젝트 그룹 입니다.

  • User. 사용자는 콘솔에 로그인하여 UI를 이용하는 사용자와 API 사용자, SYSTEM 사용자를 모두 포함 합니다. 각 사용자들은 RoleBinding 절차를 통해 복수의 Role과 연결 됩니다. 이를 통해 적절한 권한을 받아 SpaceONE의 다양한 자원들에 접근이 가능합니다.

Basic Concepts

사용자가 조직 내의 자원에 접근 하고자 할때, 관리자는 각 사용자에게 대상 프로젝트 혹은 도메인의 역할(Role)을 부여 합니다. SpaceONE Identity Service는 각 사용자에게 부여된 Role/Policy를 확인하여 각 사용자가 자원에 접근할 수 있도록 합니다.

Resource

만약 사용자가 특정한 SpaceONE 프로젝트 내의 자원에 접근 하고자 한다면, 해당 사용자에게 적합한 Role을 부여한 후 대상 프로젝트에 멤버로 추가하여 접근 가능할게 할 수 있습니다. 이러한 자원의 예는 Server, Project, Alert 입니다.

SpaceONE내에서 관리되는 자원들을 각 서비스별로 편리하게 이용할 수 있게 하기 위해, 사전에 정의된 Role/Policy를 게시하고 있습니다. 회사 내부적으로 자체 접근범위를 정의하고 싶을 경우 Custom Policy/Custom Role을 생성하여 내부 조직에 적용할 수도 있습니다.

이것에 대한 상세할 설명은 Understanding Role 를 참고 해 주세요.

Policy

정책은 permission의 모음 입니다. permission에는 스페이스원의 각 자원에 대해 허용되는 접근 범위가 정의 되어 있습니다. 정책은 Role을 통해, 각 사용자에게 부여될 수 있습니다. 정책은 Marketplace에 게시하여 다른사용자들이 사용할 수도 있고, 특정 도메인만을 위해 Private 하게 게시될 수도 있습니다.

이 Permission은 아래와 같은 형태로 표현됩니다. {service}.{resource}.{verb} 예를 들자면 inventory.Server.list 와 같은 형태 입니다.

Permission은 SpaceONE API Method에 대응 되기도 합니다. 이것은 각각의 SpaceONE내의 microservice 각각의 노출된 API method과 긴밀하게 연관 되어 있기 때문 입니다. 그러므로, API를 호출하는 사용자가 method를 호출시 대응하는 permission을 필요로 합니다.

예를 들어, Inventory 서비스의 Server 리스트를 보기 위해 inventory.Server.list를 호출 하고자 한다면 사용자는 대응되는 inventory.Server.list permission을 role에 포함하고 있어야 합니다.

Permission은 사용자에게 직접적으로 부여할 수 없습니다. 대신에 적절한 permission의 모음을 Policy로 정의하여, 사용자에게 Role을 통해 할당할 수 있습니다. 자세한 설명은 Understanding Policy를 참고 해주세요.

Roles

Role은 접근 대상과 Policy의 조합으로 구성되어 있습니다. 사용자에게 Permission을 직접 부여할 수는 없고, Role의 형태로 부여할 수 있습니다. 또한, SpaceONE 내의 모든 자원들은 모두 Project 에 소속 되어 있습니다. 각 사용자들의 자원 접근 대상을 DOMAIN, PROJECT 으로 구분해서 관리 할 수 있습니다.

예를 들어, Domain에 대한 전체 관리자를 위해 Domain Admin Role 를 제공하고, Alert Manager의 이벤트 관리를 위해 Alert Manager Operator Role 을 제공 합니다.

Members

SpaceONE 내에서 관리하는 클라우드 자원들은 모두 프로젝트 단위로 관리 됩니다. 그러므로, 각 사용자에게 역할을 부여하고 프로젝트 멤버로 추가하여, 자원에 접근 할 수 있도록 제어할 수 있습니다.

Role 타입에 따라 사용자는 도메인내의 전체 자원에 접근 하거나, 지정된 Project 내의 자원에 Access 할 수 있습니다.

  • Domain : 도메인내의 전체 자원에 접근 할 수 있습니다.
  • Project : 지정된 Project 내의 자원에 접근 할 수 있습니다.

Project 타입의 사용자는 특정 Project의 Member로 추가 됨으로서 해당 프로젝트 내의 자원에 접근이 가능 합니다.

Project Group의 Member로 추가하면, 하위 모든 프로젝트 자원에 접근할 수 있는 권한이 승계 됩니다.

Organization

SpaceONE내의 모든 자원들은 아래와 같은 조직 구조를 통한 계층적인 관리가 가능합니다.

모든 사용자는 조직에 연결(RoleBinding) 되는 방식으로 접근 대상을 지정 할 수 있습니다.

  • Domain : 가장 상위 레벨의 조직 입니다. 모든 프로젝트와 프로젝트 그룹을 포괄 합니다.
  • PROJECT GROUP : 복수의 Project를 통합하여 관리 할 수 있는 조직 입니다.
  • Projects : SpaceONE내의 가장 작은 조직 단위 입니다. 모든 클라우드의 자원들은 프로젝트에 소속 됩니다.

1 - Understanding Policy

이 페이지에서는 Policy에 대해 상세하게 살펴봅니다.

Policy

Policy는 SpaceONE 자원에 대해 특정한 동작을 수행할 수 있도록 정의된 permissions의 set 입니다. Permission은 Cloud Resource에 대해 관리할 수 있는 범위를 정의 합니다. 권한관리 체계에 대한 전반적인 설명은 Role Based Access Control을 참고 해주세요.

Policy Type

한번 정의된 Policy는 다른 도메인의 Role에서 사용할 수 있도록 공유 할 수 있습니다. 이것의 가능 여부에 따라 Policy는 두 가지 타입으로 구분 됩니다.

  • MANAGED : Repository 서비스에 Global하게 정의된 Policy로서, Policy를 전체 시스템 Admin이 직접 관리 하여 공유합니다. 대부분의 사용자들이 활용하기 편리한 공통 policy 입니다.
  • CUSTOM : 도메인별로 Permission을 자체 정의한 Policy를 사용할 수 있습니다. 각 도메인별로 세부적인 permission을 관리 하기에 유용합니다.

Policy는 Permission Scope에 따라 아래와 같이 구분 가능 합니다.

  • Basic : SpaceONE내의 모든 자원에 대해 전반적인 permission을 포함하고 있습니다.
  • Predefined : 특정한 서비스(alert manager, billing 등)에 대한 세분화된 permission을 포함 합니다.

Managed Policy

아래의 Policy는 SpaceONE 팀에 의해 관리되는 Managed Policy의 전체 리스트 입니다. 상세 Permission은 필요시 자동으로 업데이트 됩니다. Policy는 조직내의 주요 역할에 따라 분류하여 생성 하였습니다.

Policy TypePolicy NamePolicy IdPermission DescriptionReference
MANAGED-BasicDomain Admin Accesspolicy-managed-domain-admin
아래를 제외한 모든 권한을 가짐
Domain을 생성/삭제
api_type이 SYSTEM/NO_AUTH
DomainOwner를 관리(생성/변경/삭제)
플러그인 관리 identity.Auth Plugin 관리(변경)
policy-managed-domain-admin
MANAGED-BasicDomain Viewer Accesspolicy-managed-domain-viewerDomain Admin Access 권한중 읽기 권한policy-managed-domain-viewer
MANAGED-BasicProject Admin Accesspolicy-managed-project-adminDomain Admin Access Policy에서 아래 Permission 제외
Provider를 관리(생성/변경/조회/삭제)
Role/Policy를 관리(생성/변경/삭제)
플러그인 관리 inventory.Collector (생성/변경/삭제)
플러그인 관리 monitoring.DataSource (생성/변경/삭제)
플러그인 관리 notification.Protocol (생성/변경/삭제)
policy-managed-project-admin
MANAGED-BasicProject Viewer Accesspolicy-managed-project-viewerProject Admin Access Policy의 Permission중 읽기 권한policy-managed-project-viewer
MANAGED-PredefinedAlert Manager Full Accesspolicy-managed-alert-manager-full-accessAlert Manager에 대한 모든 접근 권한policy-managed-alert-manager-full-access

Custom Policy

도메인 자체적 으로 Policy를 관리 하고자 할 경우, Custom Policy 관리하기 문서를 참고 해 주세요.

2 - Understanding Role

이 페이지에서는 Role에 대해 상세하게 살펴봅니다.

Role structure

Role은 아래와 같이 자원에 대한 접근 범위를 지정하는 Role Type과 권한이 적용되는 조직(프로젝트 or 프로젝트 그룹)으로 구성 됩니다. 사용자는 RoleBinding을 통해 각 SpaceONE내에 접근할 수 있는 권한을 정의할 수 있습니다.

Role Example

Example: Alert Operator Role

---
results:
  - created_at: '2021-11-15T05:12:31.060Z'
    domain_id: domain-xxx
    name: Alert Manager Operator
    policies:
      - policy_id: policy-managed-alert-manager-operator
        policy_type: MANAGED
    role_id: role-f18c7d2a9398
    role_type: PROJECT
    tags: {}

Example : Domain Viewer Role

---
results:
- created_at: '2021-11-15T05:12:28.865Z'
  domain_id: domain-xxx
  name: Domain Viewer
  policies:
  - policy_id: policy-managed-domain-viewer
    policy_type: MANAGED
  role_id: role-242f9851eee7
  role_type: DOMAIN
  tags: {}

Role Type

Role Type은 도메인내의 접근 가능한 자원의 범위를 지정 합니다.

  • DOMAIN : Domain내의 모든 자원에 Access 가능 합니다.
  • PROJECT : Member로 추가된 Project내의 모든 자원에 Access 가능 합니다.

Project내의 Member로 추가하는 방법은 Project의 Member로 추가 를 참고 해 주세요.

Add Member

SpaceONE내의 모든 자원들은 아래와 같이 계층적으로 관리 됩니다. 도메인의 관리자는 각 Project에 Member를 추가하여 사용자를 프로젝트내의 자원에 Access 할 수 있도록 관리할 수 있습니다. 여러 Project에 대한 Access가 필요한 사용자의 경우는 상위 Project Group에 Member로 추가하여 하위 계층에 소속된 모든 Project에 대한 Access할 수 있습니다.
Project Group의 Member로 추가하는 방법은 Project Group의 Member로 추가를 참고 해주세요.

Role Hierarchy

사용자가 계층적인 Project 구조내에서 복합적인 Rolebinding을 가질 경우 Role은 아래와 같은 규칙으로 적용 됩니다.

예를 들어, 아래의 그림과 같이 stark@example.com 사용자가 상위 Project Group에 Project Admin Role로 Binding이 되어 있고, 하위 레벨의 프로젝트인 APACProject Viewer Role로 Binding되어 있는 경우 아래와 같은 방식으로 프로젝트별 Role이 적용 됩니다.

  • 직접 RoleBinding 하지 않은 하위 프로젝트/프로젝트 그룹에는 상위 프로젝트의 Role이 적용됨
  • 명시적으로 RoleBinding 한 하위 프로젝트에는 해당 Role이 적용됨(상위레벨의 Role을 Overwriting함)

Default Roles

모든 스페이스원 도메인은 생성시 Default Role 을 자동으로 포함합니다. 아래는 그 리스트 입니다.

NameRole TypeDescription
Domain AdminDOMAIN도메인 전체 Resource 를 조회/변경/삭제 할 수 있음
Domain ViewerDOMAIN도메인 전체 Resource를 조회할 수 있음
Project AdminPROJECT멤버로 추가된 프로젝트 전체 Resource 를 조회/변경/삭제 할 수 있음
Project ViewerPROJECT멤버로 추가된 프로젝트 전체 Resource 를 조회 할 수 있음
Alert Manager OperatorPROJECT멤버로 추가된 Project 전체 Resource 를 조회 할 수 있음, Alert Manager의 Alert 처리 권한을 가짐

Managing Roles

spacectl을 통해 도메인 자체적 으로 Role을 관리할 수 있습니다. Role 관리하기 문서를 참고 해 주세요.