17.9. 共有種別のアクセス制御
共有種別は、管理者の定義する サービスの種別 で、プロジェクトに表示される説明および 追加仕様 と呼ばれるプロジェクトに表示されないキー/値ペアのリストで構成されます。manila-scheduler
は追加仕様を使用してスケジューリングの決定を行い、ドライバーはファイル共有の作成を制御します。
管理者は共有種別の作成や削除が可能で、さらに、共有種別に manila 内での意味を持たせる追加仕様を管理することもできます。プロジェクトでは共有種別をリスト表示でき、それらを使用して新規ファイル共有を作成することができます。共有種別は public
および private
として作成できます。これは共有種別の可視性のレベルで、他のプロジェクトがリストに共有種別を表示し、新規ファイル共有を作成するのに使用できるかどうかを定義するものです。
デフォルトでは、共有種別は public として作成されます。共有種別を作成する時に --is_public
パラメーターを使用して False
に設定し、共有種別をプライベートに設定します。これにより、他のプロジェクトがリストに共有種別を表示したり、それを使用して新たなファイル共有を作成するのを防ぐことができます。一方、public
の共有種別は、クラウド内のすべてのプロジェクトで利用できます。
manila により、管理者はプロジェクトの private
の共有種別へのアクセスを許可または拒否することができます。指定したプライベート共有種別のアクセスに関する情報を取得することもできます。
追加仕様により、共有種別はユーザーがファイル共有を作成する前にバックエンドをフィルターまたは選択するのに役立つため、共有種別へのアクセスを使用すると、特定のバックエンドにクライアントを限定することができます。
たとえば、admin
プロジェクトの管理者ユーザーは、my_type
という名前のプライベート共有種別を作成し、これをリストで確認できます。以下のコンソールの例では、ログインとログアウトが省略され、現在ログインしているユーザーを示す環境変数が提供されます。
$ env | grep OS_ ... OS_USERNAME=admin OS_TENANT_NAME=admin ... $ manila type-list --all +----+--------+-----------+-----------+-----------------------------------+-----------------------+ | ID | Name | Visibility| is_default| required_extra_specs | optional_extra_specs | +----+--------+-----------+-----------+-----------------------------------+-----------------------+ | 4..| my_type| private | - | driver_handles_share_servers:False| snapshot_support:True | | 5..| default| public | YES | driver_handles_share_servers:True | snapshot_support:True | +----+--------+-----------+-----------+-----------------------------------+-----------------------+
demo
プロジェクトの demo
ユーザーは種別をリスト表示できますが、my_type
という名前のプライベート共有種別は表示されません。
$ env | grep OS_ ... OS_USERNAME=demo OS_TENANT_NAME=demo ... $ manila type-list --all +----+--------+-----------+-----------+----------------------------------+----------------------+ | ID | Name | Visibility| is_default| required_extra_specs | optional_extra_specs | +----+--------+-----------+-----------+----------------------------------+----------------------+ | 5..| default| public | YES | driver_handles_share_servers:True| snapshot_support:True| +----+--------+-----------+-----------+----------------------------------+----------------------+
管理者は、プロジェクト ID が df29a37db5ae48d19b349fe947fada46
の demo プロジェクトのプライベート共有種別へのアクセスを付与できます。
$ env | grep OS_ ... OS_USERNAME=admin OS_TENANT_NAME=admin ... $ openstack project list +----------------------------------+--------------------+ | ID | Name | +----------------------------------+--------------------+ | ... | ... | | df29a37db5ae48d19b349fe947fada46 | demo | +----------------------------------+--------------------+ $ manila type-access-add my_type df29a37db5ae48d19b349fe947fada46
その結果、demo
プロジェクトのユーザーは、プライベートの共有種別を表示し、ファイル共有の作成で使用できます。
$ env | grep OS_ ... OS_USERNAME=demo OS_TENANT_NAME=demo ... $ manila type-list --all +----+--------+-----------+-----------+-----------------------------------+-----------------------+ | ID | Name | Visibility| is_default| required_extra_specs | optional_extra_specs | +----+--------+-----------+-----------+-----------------------------------+-----------------------+ | 4..| my_type| private | - | driver_handles_share_servers:False| snapshot_support:True | | 5..| default| public | YES | driver_handles_share_servers:True | snapshot_support:True | +----+--------+-----------+-----------+-----------------------------------+-----------------------+
指定されたプロジェクトのアクセスを拒否するには、manila type-access-remove <share_type> <project_id>
を使用します。
共有種別の目的を実証する例については、2 つのバックエンドを持つ状況 (LVM をパブリックストレージとして、Ceph をプライベートストレージとして) を検討します。このような場合には、特定のプロジェクトにアクセスを許可し、user/group
認証方法によりアクセスを制御できます。