11.4. 使用策略文件进行访问控制
红帽不支持自定义角色或策略。语法错误或应用错误授权可能会对安全或可用性造成负面影响。如果在生产环境中需要自定义角色或策略,请联系红帽支持例外。
要覆盖默认规则,请编辑相应 OpenStack 服务的 policy.json
文件。例如,Compute 服务在 nova 目录中有一个 policy.json
,这是从容器内查看容器化服务的文件正确位置。
- 您必须先全面测试暂存环境中对策略文件的更改,然后才能在生产环境中实施它们。
-
您必须检查对访问控制策略的任何更改不会意外地弱任何资源的安全性。另外,对
policy.json
文件的任何更改都会立即有效,不需要重启服务。
示例:创建高级用户角色
要自定义 keystone 角色的权限,请更新服务的 policy.json
文件。这意味着您可以更精细地定义分配给您类用户的权限。本例使用以下权限为部署创建一个 power 用户角色 :
- 启动一个实例。
- 停止实例。
- 管理附加到实例的卷。
此角色旨在向某些用户授予额外权限,而无需授予 admin
访问权限。要使用这些权限,您必须为自定义角色授予以下权限:
-
启动一个实例:"
os_compute_api:servers:start": "role:PowerUsers"
-
停止实例:"
os_compute_api:servers:stop": "role:PowerUsers"
-
配置实例以使用特定卷:"
os_compute_api:servers:create:attach_volume": "role:PowerUsers"
-
列出附加到实例的卷:"
os_compute_api:os-volumes-attachments:index": "role:PowerUsers"
-
Attach a volume:
"os_compute_api:os-volumes-attachments:create": "role:PowerUsers"
-
查看附加卷的详情:"
os_compute_api:os-volumes-attachments:show": "role:PowerUsers"
-
更改附加到实例的卷:"
os_compute_api:os-volumes-attachments:update": "role:PowerUsers"
-
删除附加到实例的卷:"
os_compute_api:os-volumes-attachments:delete": "role:PowerUsers"
修改 policy.json
文件时,您可以覆盖默认策略。因此,PowerUsers
的成员是可以执行这些操作的唯一用户。要允许 admin
用户保留这些权限,您可以为 admin_or_power_user 创建规则。您还可以使用一些基本条件逻辑来定义 role:PowerUsers 或 role:Admin
。
创建自定义 keystone 角色:
$ openstack role create PowerUsers +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 7061a395af43455e9057ab631ad49449 | | name | PowerUsers | +-----------+----------------------------------+
将现有用户添加到角色中,并将角色分配给项目:
$ openstack role add --project [PROJECT_NAME] --user [USER_ID] [PowerUsers-ROLE_ID]
注意角色分配仅与一个项目配对。这意味着,当您为用户分配角色时,您也同时定义目标项目。如果您希望用户收到同一角色但针对不同的项目,则必须再次为它们分配角色,但以不同的项目为目标。
-
以
tripleo-admin
用户身份登录 Controller 节点。 可选:在 Controller 上,查看默认的 nova 策略设置:
$ sudo podman exec -i nova_compute oslopolicy-policy-generator --namespace nova
测试策略更改。在每个 Controller 节点上,完成以下内容:
提取 Compute 服务
policy.json
文件:sudo podman exec -it nova_compute oslopolicy-policy-generator --namespace nova > /tmp/nova-policy.json
通过在
/tmp/policy.json
中添加以下条目,为新的PowerUsers
角色创建自定义权限:"os_compute_api:servers:start": "role:PowerUsers", "os_compute_api:servers:stop": "role:PowerUsers" "os_compute_api:servers:create:attach_volume": "role:PowerUsers" "os_compute_api:os-volumes-attachments:index": "role:PowerUsers" "os_compute_api:os-volumes-attachments:create": "role:PowerUsers" "os_compute_api:os-volumes-attachments:show": "role:PowerUsers" "os_compute_api:os-volumes-attachments:update": "role:PowerUsers" "os_compute_api:os-volumes-attachments:delete": "role:PowerUsers"
通过将此文件保存到 nova 容器来实施更改。添加到 PowerUsers keystone 角色的用户接收这些特权。
podman cp /tmp/nova-policy.json nova_compute:etc/nova/policy.json
- 通过 heat 策略文件中的更新永久进行更改。如需更多信息,请参阅使用 heat 修改策略。