6.6. 프로젝트 계층 구조
Identity 서비스(keystone)에서 멀티 테넌시를 사용하여 프로젝트를 중첩할 수 있습니다. 멀티 테넌시를 사용하면 하위 프로젝트가 상위 프로젝트에서 역할 할당을 상속할 수 있습니다.
6.6.1. 계층적 프로젝트 및 하위 프로젝트 생성
keystone 도메인 및 프로젝트를 사용하여 Hierarchical Multitenancy(HMT)를 구현할 수 있습니다. 먼저 새 도메인을 생성한 다음 해당 도메인에 프로젝트를 생성합니다. 그런 다음 해당 프로젝트에 하위 프로젝트를 추가할 수 있습니다. 해당 하위 프로젝트의 admin
역할에 사용자를 추가하여 하위 프로젝트의 관리자로 사용자를 승격할 수도 있습니다.
keystone에서 사용하는 HMT 구조는 현재 대시보드에 표시되지 않습니다.
절차
corp
라는 새 keystone 도메인을 생성합니다.$ openstack domain create corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | enabled | True | | id | 69436408fdcb44ab9e111691f8e9216d | | name | corp | +-------------+----------------------------------+
corp
도메인에 상위 프로젝트(private-cloud
)를 생성합니다.$ openstack project create private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | c50d5cf4fe2e4929b98af5abdec3fd64 | | is_domain | False | | name | private-cloud | | parent_id | 69436408fdcb44ab9e111691f8e9216d | +-------------+----------------------------------+
corp
도메인도 지정하는 동안private-cloud
상위 프로젝트 내에 하위 프로젝트(dev
)를 생성합니다.$ openstack project create dev --parent private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | 11fccd8369824baa9fc87cf01023fd87 | | is_domain | False | | name | dev | | parent_id | c50d5cf4fe2e4929b98af5abdec3fd64 | +-------------+----------------------------------+
qa
라는 다른 하위 프로젝트를 생성합니다.$ openstack project create qa --parent private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | b4f1d6f59ddf413fa040f062a0234871 | | is_domain | False | | name | qa | | parent_id | c50d5cf4fe2e4929b98af5abdec3fd64 | +-------------+----------------------------------+
Identity API를 사용하여 프로젝트 계층을 볼 수 있습니다. 자세한 내용은 https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=show-project-details-detail에서 참조하십시오.
6.6.2. 계층적 프로젝트에 대한 액세스 구성
기본적으로 새로 생성된 프로젝트에는 역할이 할당되지 않습니다. 상위 프로젝트에 역할 권한을 할당하는 경우 --inherited
플래그를 포함하여 하위 프로젝트에서 상위 프로젝트에서 할당된 권한을 상속하도록 지시할 수 있습니다. 예를 들어 상위 프로젝트에 대한 관리자
역할 액세스 권한이 있는 사용자는 하위 프로젝트에 대한 관리자
액세스 권한도 있습니다.
사용자에게 액세스 권한 부여
프로젝트에 할당된 기존 권한을 확인합니다.
$ openstack role assignment list --project private-cloud
기존 역할을 확인합니다.
$ openstack role list +----------------------------------+-----------------+ | ID | Name | +----------------------------------+-----------------+ | 01d92614cd224a589bdf3b171afc5488 | admin | | 034e4620ed3d45969dfe8992af001514 | member | | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin | | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user | | cfea5760d9c948e7b362abc1d06e557f | reader | | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator | | ef3d3f510a474d6c860b4098ad658a29 | service | +----------------------------------+-----------------+
사용자 계정
user1
에private-cloud
프로젝트에 대한 액세스 권한을 부여합니다.$ openstack role add --user user1 --user-domain corp --project private-cloud member
--inherited
플래그를 사용하여 이 명령을 다시 실행합니다. 결과적으로user1
은 역할 할당을 상속한private-cloud
하위 프로젝트에도 액세스할 수 있습니다.$ openstack role add --user user1 --user-domain corp --project private-cloud member --inherited
권한 업데이트 결과를 검토합니다.
$ openstack role assignment list --effective --user user1 --user-domain corp +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | c50d5cf4fe2e4929b98af5abdec3fd64 | | False | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
user1
사용자는 qa
및 dev
프로젝트에 대한 액세스 권한을 상속했습니다. 또한 --inherited
플래그가 상위 프로젝트에 적용되었으므로 user1
은 나중에 생성된 모든 하위 프로젝트에 대한 액세스도 수신합니다.
사용자의 액세스 제거
명시적 및 상속된 권한은 별도로 제거해야 합니다.
명시적으로 할당된 역할에서 사용자를 제거합니다.
$ openstack role remove --user user1 --project private-cloud member
변경 사항의 결과를 검토합니다. 상속된 권한은 여전히 존재합니다.
$ openstack role assignment list --effective --user user1 --user-domain corp +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
상속된 권한을 제거합니다.
$ openstack role remove --user user1 --project private-cloud member --inherited
변경 사항의 결과를 검토합니다. 상속된 권한이 제거되었으며 결과 출력이 비어 있습니다.
$ openstack role assignment list --effective --user user1 --user-domain corp
6.6.3. 리셀러 프로젝트 개요
리셀러 프로젝트의 목표는 도메인 계층 구조를 갖는 것입니다. 이러한 도메인을 사용하면 결국 완전한 클라우드를 나타내는 하위 도메인을 사용하여 클라우드의 일부를 재판매하는 것을 고려할 수 있습니다. 이 작업은 다음과 같이 1단계로 나뉘어져 있습니다.
리셀러의 1 단계
리셀러(상위 1)는 여기에 설명된 Hierarchical Multitenancy(HMT)의 확장입니다. 계층적 프로젝트 및 하위 프로젝트 생성. 이전에는 keystone 도메인은 원래 데이터베이스 백엔드에 고유한 테이블을 사용하여 사용자 및 프로젝트를 저장하는 컨테이너로 설계되었습니다. 결과적으로 도메인은 이제 자체 테이블에 더 이상 저장되지 않으며 프로젝트 테이블에 병합되었습니다.
-
도메인은 이제
is_domain
플래그로 구분되는 프로젝트 유형입니다. - 도메인은 프로젝트 계층 구조의 최상위 프로젝트를 나타냅니다. 도메인은 프로젝트 계층 구조에서 루트입니다.
projects
하위 경로를 사용하여 도메인을 생성하고 검색하도록 API가 업데이트되었습니다.-
is_domain
플래그가 true로 설정된 프로젝트를 생성하여 새 도메인을 생성합니다. -
domain:
is_domain
쿼리 매개 변수를 포함하여 프로젝트를 가져옵니다.
-