可以添加 policy 部分,用于控制特定服务的 RBAC 策略。

每个 OpenStack 服务(例如,身份、计算、网络等)都有自己的基于角色的访问策略。这些策略确定了您可以访问的对象,它们在服务策略配置文件中进行定义。对于 VMware Integrated OpenStack 部署,可以使用 viocli update 命令编辑相应的服务策略配置。
注: 对于 VIO 7.x,Keystone 具有默认的读者和成员角色。默认情况下,该角色不起作用。必须编辑相应的服务策略,明确使用该角色满足权限控制要求。有关用户和角色管理的详细信息,请参见 Keystone 用户和角色管理

语法:

使用 viocli update <service> 命令为指定的服务添加 RBAC 策略。

可以使用 project_iduser_iddomain_idrole 创建用户范围条件。对于常规范围组合,请使用以下运算符:
  • ! :任何用户都无法执行该操作。
  • @"":任何用户都可以执行该操作。
  • notandor:用于组合多个范围的运算符。
以下示例代码显示了常规范围组合所用的不同运算符:
conf:
  policy:
    "alias_1": "is_admin:True or project_id:%(project_id)s"
    "alias_2": "role:reader"
    "alias_3": "other user scope definition"
    "operation_1": "!"
    "operation_2": "@"
    "operation_3": "rule:alias_1 or (rule:alias_2 and rule:alias_3)"

示例:

可以在策略配置文件中定义某些规则,如 power_userread_user。例如,在以下代码中, read_user 调用用于服务器索引、显示和详细信息的 API,但无法创建、删除、启动和停止 Nova 实例。
conf:
  nova:
    vmware:
      #some configurations for VIO
  policy:
    power_user: (role:member) and project_id:%(project_id)s
    read_user: (role:reader) and project_id:%(project_id)s
    os_compute_api:servers:detail: rule:read_user
    os_compute_api:servers:index: rule:read_user
    os_compute_api:servers:show: rule:read_user
    os_compute_api:servers:start: rule:power_user
    os_compute_api:servers:stop: rule:power_user
    os_compute_api:servers:create: rule:power_user
    os_compute_api:servers:delete: rule:power_user

查看完整策略:

必须找到服务容器,然后才能查看策略文件内容。使用以下命令查看完整的 Nova 策略:

# osctl get pod | grep nova-api-osapi
nova-api-osapi-7d7978fb44-b24rl                                   2/2     Running     0          3d23h
 
# osctl exec -it nova-api-osapi-7d7978fb44-b24rl /bin/bash
Defaulting container name to nova-osapi.
Use 'kubectl describe pod/nova-api-osapi-7d7978fb44-b24rl -n openstack' to see all of the containers in this pod.
 
[root@nova-api-osapi-7d7978fb44-b24rl /]# cat /etc/nova/policy.yaml
 
os_compute_api:os-simple-tenant-usage:discoverable: '@'
......

有关不同服务的策略的详细信息,请参见以下 OpenStack 社区文档:

Keystone:Keystone 策略

Nova:Nova 策略

Cinder:Cinder 策略

Glance:Glance 策略

Neutron:Neutron 策略