12.9. 共享类型访问控制
共享类型是一个由管理员定义的服务类型(type of service),它包括一个项目可见的描述信息,以及一个项目不可见的、称为额外规格(extra specifications)的键值对列表。manila-scheduler
使用额外的规格来做出调度决策,驱动程序则控制共享创建。
管理员可以创建和删除共享类型,也可以管理额外的规格来指示在 manila 内的含义。项目可以列出共享类型,并可使用它们来创建新共享。共享类型可以被创建为 public
和 private
。这是共享类型的可见性级别,用于定义其他项目是否可以在共享类型列表中看到它,并使用它来创建新共享。
默认情况下,共享类型创建为 public。在创建共享类型时,使用 --is_public
参数设置为 False
以使您的共享类型私有,这将阻止其他项目在共享类型列表中看到,并使用它创建新共享。另一方面,云中的每个项目都可使用 公共
共享类型。
Manila 允许管理员授予或拒绝对项目的 私有
共享类型的访问权限。您还可以获取有关指定私有共享类型的访问权限的信息。
由于共享类型,因为额外的规格有助于在用户创建共享类型之前过滤或选择后端,因此您可以使用对特定后端选择限制客户端的访问限制客户端。
例如,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| +----+--------+-----------+-----------+----------------------------------+----------------------+
管理员可以授予 demo 项目的私有共享类型的访问权限,项目 ID 等于 df29a37db5ae48d19b349fe947fada46
。
$ 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>
。
对于演示共享类型目的的示例,请考虑您有两个后端的情况:LVM 作为公共存储,Ceph 作为私有存储。在这种情况下,您可以授予对某些项目的访问权限,并使用 用户/组
身份验证方法控制对访问权限。