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쿼리 매개 변수를 포함하여 프로젝트를 가져옵니다.
-