8.6. プロジェクトの階層


Identity サービス (keystone) のマルチテナンシーを使用して、プロジェクトを入れ子状にできます。マルチテナンシーにより、サブプロジェクトは親プロジェクトのロール割り当てを継承できます。

8.6.1. 階層化されたプロジェクトとサブプロジェクトの作成

階層型マルチテナンシー (HMT) は keystone のドメインとプロジェクトを使用して実装できます。まず最初に新規ドメインを作成して、そのドメイン内にプロジェクトを作成します。これで、そのプロジェクトにサブプロジェクトを追加できるようになります。また、ユーザーをサブプロジェクトの admin ロールに追加すると、そのサブプロジェクトの管理者に昇格できます。

注記

keystone の使用する HMT の構造は、現在 Dashboard では表示されません。

手順

  1. corp という名前の keystone ドメインを新規作成します。

    コマンドの例

    $ openstack domain create corp

    出力例

    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | enabled     | True                             |
    | id          | 6059b0b93b8d4ddb9d31ea47de93f0ab |
    | name        | corp                             |
    | options     | {}                               |
    | tags        | []                               |
    +-------------+----------------------------------+

  2. corp ドメイン内に親プロジェクト (private-cloud) を作成します。

    コマンドの例

    $ openstack project create private-cloud --domain corp

    出力例

    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | domain_id   | 6059b0b93b8d4ddb9d31ea47de93f0ab |
    | enabled     | True                             |
    | id          | e86f182e16e24441b71c7296585c2e21 |
    | is_domain   | False                            |
    | name        | private-cloud                    |
    | options     | {}                               |
    | parent_id   | 6059b0b93b8d4ddb9d31ea47de93f0ab |
    | tags        | []                               |
    +-------------+----------------------------------+

  3. private-cloud の親プロジェクト内で corp ドメインも指定して、サブプロジェクト (dev) を作成します。

    コマンドの例

    $ openstack project create dev --parent private-cloud --domain corp

    出力例

    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | domain_id   | 6059b0b93b8d4ddb9d31ea47de93f0ab |
    | enabled     | True                             |
    | id          | 71f05cdd5b8a45d4b1a928bfe7c2e20d |
    | is_domain   | False                            |
    | name        | dev                              |
    | options     | {}                               |
    | parent_id   | e86f182e16e24441b71c7296585c2e21 |
    | tags        | []                               |
    +-------------+----------------------------------+

  4. qa という名前のサブプロジェクトをもう 1 つ作成します。

    コマンドの例

    $ openstack project create qa --parent private-cloud --domain corp

    出力例

    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | domain_id   | 6059b0b93b8d4ddb9d31ea47de93f0ab |
    | enabled     | True                             |
    | id          | 03801ad929b84c8fb091bf3248e6db68 |
    | is_domain   | False                            |
    | name        | qa                               |
    | options     | {}                               |
    | parent_id   | e86f182e16e24441b71c7296585c2e21 |
    | tags        | []                               |
    +-------------+----------------------------------+

注記

Identity API を使用してプロジェクトの階層を確認することができます。詳細は、https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=show-project-details-detail を参照してください。

8.6.2. 階層構造のプロジェクトへのアクセスの設定

デフォルトでは、新規作成したプロジェクトにはロールは割り当てられません。親プロジェクトに対するロールのパーミッションを割り当てるときに、--inherited フラグを指定して、サブプロジェクトが親プロジェクトからパーミッションを継承するように指定できます。たとえば、親プロジェクトに対する admin ロールのアクセス権のあるユーザーには、サブプロジェクトへの admin アクセス権も付与されます。

ユーザーへのアクセス権の付与

  1. プロジェクトに割り当てられている既存のパーミッションを確認します。

    $ openstack role assignment list --project private-cloud
  2. 既存のロールを確認します。

    コマンドの例

    $ openstack role list

    出力例

    +----------------------------------+-----------------+
    | ID                               | Name            |
    +----------------------------------+-----------------+
    | 01d92614cd224a589bdf3b171afc5488 | admin           |
    | 034e4620ed3d45969dfe8992af001514 | member          |
    | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
    | cfea5760d9c948e7b362abc1d06e557f | reader          |
    | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
    | ef3d3f510a474d6c860b4098ad658a29 | service         |
    +----------------------------------+-----------------+

  3. ユーザーアカウント 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
  4. パーミッションの更新の結果を確認します。

    コマンドの例

    $ 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 は後から作成されたサブプロジェクトにもアクセスできるようになりました。

ユーザーからのアクセス削除

明示的に割り当てられたパーミッションと継承されたパーミッションは別々に削除する必要があります。

  1. 明示的に割り当てられたロールからユーザーを削除します。

    $ openstack role remove --user user1 --project private-cloud member
  2. 変更の結果を確認します。継承されたパーミッションがまだ存在している点に注意してください。

    コマンドの例

    $ openstack role assignment list --effective --user user1 --user-domain corp

    出力例

    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    | Role                             | User                             | Group | Project                          | Domain | Inherited |
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | 11fccd8369824baa9fc87cf01023fd87 |        | True      |
    | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be |       | b4f1d6f59ddf413fa040f062a0234871 |        | True      |
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+

  3. 継承されたパーミッションを削除します。

    $ openstack role remove --user user1 --project private-cloud member --inherited
  4. 変更の結果を確認します。継承されたパーミッションが削除され、出力が空になりました。

    $ openstack role assignment list --effective --user user1 --user-domain corp

8.6.3. Reseller プロジェクトの概要

Reseller プロジェクトでは、複数のドメインを階層化することを目標としています。このようなドメインでは、1 つのサブドメインは、完全に有効化された 1 つのクラウドを表現し、最終的にはクラウドの部分的な再販を考慮することができます。この開発の作業は複数の段階に分かれています。第 1 段階は以下に説明します。

Reseller の第 1 段階

Reseller (第 1 段階) は、階層化されたプロジェクトとサブプロジェクトの作成 に記載されている階層型マルチテナンシー (HMT) の延長です。従来 keystone ドメインは、データベースバックエンド内に独自のテーブルを備えた、ユーザーとプロジェクトを保管するためのコンテナーとすることを目的としていました。その結果、ドメインは独自のテーブルには保管されなくなり、プロジェクトのテーブルにマージされました。

  • ドメインは、ひとつのプロジェクトタイプとなり、is_domain フラグで区別されます。
  • ドメインは、プロジェクト階層の最上位のプロジェクトを表します。ドメインは、プロジェクト階層のルートです。
  • projects サブパスを使用してドメインの作成と取得を行うように API が更新されました。

    • 新規ドメインを作成するには、is_domain フラグを true に指定してプロジェクトを作成します。
    • ドメインであるプロジェクトをリスト表示します。is_domain クエリーパラメーターを含むプロジェクトを取得します。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る