Liberty リリースで新しいポリシーフレームワークが追加され、リソースへのアクセスを特定のプロジェクトに対して許可できるようになりました。運用者とユーザーのどちらもがこの機能を利用できます。 Liberty リリースの時点では、この機能を使ってアクセスを許可できるのは、ネットワークへのポート作成だけです。
特定のプロジェクトとのネットワークを共有するには、アクセスを許可したいプロジェクトに対してそのネットワークへの access_as_shared アクションを許可するポリシーエントリーを作成します。
まず、共有したいネットワークを作成します。
$ neutron net-create secret_network
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 6532a265-43fb-4c8c-8edb-e26b39f2277c |
| mtu | 0 |
| name | secret_network |
| port_security_enabled | True |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1031 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | de56db175c1d48b0bbe72f09a24a3b66 |
+---------------------------+--------------------------------------+
ここで、 rbac-create コマンドを使ってポリシーエントリーを作成します (この例では、共有対象のプロジェクト ID は e28769db97d9449da658bc6931fcb683 です)。
$ neutron rbac-create --target-tenant e28769db97d9449da658bc6931fcb683 \
--action access_as_shared --type network 6532a265-43fb-4c8c-8edb-e26b39f2277c
Created a new rbac_policy:
+---------------+--------------------------------------+
| Field | Value |
+---------------+--------------------------------------+
| action | access_as_shared |
| id | 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411 |
| object_id | 6532a265-43fb-4c8c-8edb-e26b39f2277c |
| object_type | network |
| target_tenant | e28769db97d9449da658bc6931fcb683 |
| tenant_id | de56db175c1d48b0bbe72f09a24a3b66 |
+---------------+--------------------------------------+
target-tenant パラメーターは、このネットワークにアクセス許可を与えるプロジェクトです。 action パラメーターは、対象のプロジェクトに許可する内容を示します。 type パラメーターは、対象オブジェクトがネットワークであることを示しています。最後のパラメーターはアクセスを許可するネットワークの ID です。
この時点で、プロジェクト e28769db97d9449da658bc6931fcb683 が net-list や net-show を実行すると、このネットワークが見えますし、このネットワークにポートを作成することもできます。 (管理者と所有者以外の) 他のユーザーにはこのネットワークは見えません。
このプロジェクトへのアクセス許可を削除するには、 rbac-delete コマンドを使って、作成したポリシーを削除するだけです。
$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
Deleted rbac_policy: 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
そのプロジェクトのポートが対象のネットワークにある場合は、そのポートが削除されるまでポリシーを削除することはできません。
$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
RBAC policy on object 6532a265-43fb-4c8c-8edb-e26b39f2277c
cannot be removed because other objects depend on it.
この手順を繰り返して、任意の数のプロジェクトとネットワークを共有できます。
neutron のデフォルトの policy.json では、通常ユーザーがワイルドカードで他のすべてのプロジェクトとネットワークを共有することは許可されていませんが、通常ユーザーが特定のプロジェクトとネットワークを共有することは許可されています。
運用者が通常ユーザーにこれを許したくない場合は、 policy.json のエントリー create_rbac_policy を "" から "rule:admin_only" に変更します。
管理者以外のユーザーがこの機能を使って別のプロジェクトとネットワークを共有している場合、そのユーザーには他のプロジェクトが作成したポートは見えませんし、そのポートを削除することもできません。これは、 ユーザーが管理者かサービスユーザー以外の場合、neutron のデータベース操作では、データベースクエリーが要求を行ったユーザーのプロジェクトが所有するオブジェクトに自動的に限定されるためです。この問題の状況はバグ https://bugs.launchpad.net/neutron/+bug/1498790 で管理されています
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.