8.7. 共享类型访问控制
共享类型是一种管理员定义的 服务类型,它由项目可见描述组成,以及名为 额外规格 的非项目可见的键值对列表。manila-scheduler 使用额外的规格来做出调度决策,驱动程序控制共享创建。
管理员可以创建和删除共享类型,还可以管理额外的规格,使其在 manila 内表示。项目可以列出共享类型,并可使用它们创建新共享。共享类型可以创建为 。这是共享类型的可见性级别,用于定义其他项目是否可以在共享类型列表中看到它,并使用它来创建新共享。
公共和专用
默认情况下,共享类型创建为 public。在创建共享类型时,使用 --is_public 参数设置为 False 时,您的共享类型设为 False 时,您的共享类型会妨碍其他项目在共享类型列表中看到它并与其创建新共享。另一方面,公共云 共享类型可供云中的每个项目使用。
Manila 允许管理员为项目授予或拒绝访问 私有 共享类型。您还可以获取有关指定私有共享类型的访问的信息。
由于额外的规格,共享类型有助于在用户创建共享前过滤或选择后端,从而利用对共享类型的访问,您可以在选择特定后端时限制客户端。
例如,admin 项目中的管理员用户可以创建名为 my_type 的专用共享类型,并在列表中看到它。在下控制台示例中,省略了登录和注销,并提供环境变量来显示当前登录的用户。
env | grep OS_
$ 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_
$ 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|
+----+--------+-----------+-----------+----------------------------------+----------------------+
管理员可以向 demo 项目的私有共享类型授予访问权限,其项目 ID 等于 df29a37db5ae48d19b349fe947fada46:
env | grep OS_
$ 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_
$ 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>。
例如,演示共享类型的目的,请考虑有两个后端的情况:LVM 作为公共存储和 Ceph 作为私有存储。在这种情况下,您可以使用 user/group 身份验证方法授予特定项目的访问权限,并控制访问权限。