指定策略¶
警告
自 Designate 12.0.0 (Wallaby) 起,JSON 格式的策略文件已被弃用。此 oslopolicy-convert-json-to-yaml 工具将以向后兼容的方式将现有的 JSON 格式策略文件迁移到 YAML。
Designate 像大多数 OpenStack 服务一样,使用 oslo policy 在 Designate 代码中定义默认的基于角色的访问控制 (RBAC) 策略。操作员可以使用 YAML 策略文件覆盖这些默认策略。有关示例策略文件,请参阅 policy.yaml。
目前,Designate 默认采用 OpenStack 遗留的“管理员或所有者”方案,但 Designate 还支持使用 Keystone 默认角色 和 Keystone 作用域令牌 通过配置设置的更新 RBAC 模型。
启用 Keystone 默认角色和作用域令牌¶
从 Designate 的 Xena 版本开始,可以强制执行 Keystone 令牌作用域和默认角色。默认情况下,在 Xena 版本中,oslo policy 不会强制执行这些新的角色和作用域。但是,在未来某个时间点,它们可能会成为默认设置。您现在可以启用它们,以便为后续过渡做好准备。本节将介绍这些设置。
Oslo Policy 项目定义了两个配置设置(其中包括),可以设置在 Designate 配置文件中以影响 Designate 处理策略的方式。这两个设置是 enforce_scope 和 enforce_new_defaults。
启用 Keystone 默认角色 和 Keystone 作用域令牌 后,Designate 策略将遵守以下角色
管理员
项目作用域 - 阅读者
项目作用域 - 成员
[oslo_policy] enforce_scope¶
Keystone 引入了 令牌作用域 的概念。为了确保向后兼容性,Oslo Policy 默认情况下不会强制执行令牌的作用域验证。
在 Xena 版本中,Designate 支持强制执行 Keystone 令牌作用域。要启用 Keystone 令牌作用域,请将以下内容添加到您的 Designate 配置文件中
[oslo_policy]
enforce_scope = True
此设置的主要效果是仅允许项目作用域调用 Designate API。系统作用域令牌将返回 403。
[oslo_policy] enforce_new_defaults¶
Designate Xena 版本增加了对默认策略中 Keystone 默认角色 的支持。为了保持向后兼容性,Oslo Policy 当前使用不要求新的 Keystone 默认角色 的已弃用策略,默认情况下。
自 Xena 版本起,Designate 支持要求这些新的 Keystone 默认角色。要开始在 Designate 中要求这些角色,请通过将以下设置添加到您的 Designate 配置文件来启用新策略
[oslo_policy]
enforce_new_defaults = True
Oslo 用于策略管理的工具¶
本节介绍如何使用 Oslo Policy 工具来管理 Designate 策略。
示例文件生成¶
要从 Designate 默认值生成示例 policy.yaml 文件,请运行 oslo policy 生成脚本
oslopolicy-sample-generator
--config-file etc/designate/designate-policy-generator.conf
--output-file policy.yaml.sample
合并文件生成¶
要生成一个策略文件,该文件显示项目中使用的有效策略,包括所有注册的策略默认值和 policy.yaml 文件中包含的策略覆盖,请运行此命令
oslopolicy-policy-generator
--config-file etc/designate/designate-policy-generator.conf
此工具使用 config-file 中的 output_file 路径。
列出冗余配置¶
要生成一个列表,其中包含在配置文件中定义的策略规则,其中该规则与注册的默认规则不同,请运行此命令
oslopolicy-list-redundant
--config-file etc/designate/designate-policy-generator.conf
这些是可以从策略文件中删除而不会更改有效策略的规则。
Designate 默认策略概述¶
以下是 Designate 中所有可用策略的概述。有关示例配置文件,请参阅 policy.yaml。
designate¶
admin(管理员)- 默认值:
role:admin or is_admin:True
(未提供描述)
owner- 默认值:
project_id:%(tenant_id)s
(未提供描述)
admin_or_owner- 默认值:
rule:admin or rule:owner
(未提供描述)
default- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)
(未提供描述)
create_blacklist- 默认值:
role:admin- 操作:
POST
/v2/blacklists
- 作用域类型:
project
创建黑名单。
find_blacklists- 默认值:
role:admin- 操作:
GET
/v2/blacklists
- 作用域类型:
project
查找黑名单。
get_blacklist- 默认值:
role:admin- 操作:
GET
/v2/blacklists/{blacklist_id}
- 作用域类型:
project
获取黑名单。
update_blacklist- 默认值:
role:admin- 操作:
PATCH
/v2/blacklists/{blacklist_id}
- 作用域类型:
project
更新黑名单。
delete_blacklist- 默认值:
role:admin- 操作:
DELETE
/v2/blacklists/{blacklist_id}
- 作用域类型:
project
删除黑名单。
use_blacklisted_zone- 默认值:
role:admin- 操作:
POST
/v2/zones
- 作用域类型:
project
允许绕过黑名单。
all_tenants- 默认值:
role:admin- 作用域类型:
project
对所有租户的操作。
edit_managed_records- 默认值:
role:admin- 作用域类型:
project
编辑托管记录。
use_low_ttl- 默认值:
role:admin- 作用域类型:
project
使用低 TTL。
use_sudo- 默认值:
role:admin- 作用域类型:
project
接受用户到租户的 sudo。
hard_delete- 默认值:
role:admin- 作用域类型:
project
清理与区域关联的后端资源
create_pool- 默认值:
role:admin- 作用域类型:
project
创建池。
find_pools- 默认值:
role:admin- 操作:
GET
/v2/pools
- 作用域类型:
project
查找池。
find_pool- 默认值:
role:admin- 操作:
GET
/v2/pools
- 作用域类型:
project
查找池。
get_pool- 默认值:
role:admin- 操作:
GET
/v2/pools/{pool_id}
- 作用域类型:
project
获取池。
update_pool- 默认值:
role:admin- 作用域类型:
project
更新池。
delete_pool- 默认值:
role:admin- 作用域类型:
project
删除池。
zone_create_forced_pool- 默认值:
role:admin- 操作:
POST
/v2/zones
- 作用域类型:
project
加载并设置区域属性中提供的池。
get_quotas- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s) or (True:%(all_tenants)s and role:reader)- 操作:
GET
/v2/quotas
- 作用域类型:
project
查看当前项目的配额。
set_quota- 默认值:
role:admin- 操作:
PATCH
/v2/quotas/{project_id}
- 作用域类型:
project
设置配额。
reset_quotas- 默认值:
role:admin- 操作:
DELETE
/v2/quotas/{project_id}
- 作用域类型:
project
重置配额。
find_records- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/reverse/floatingips/{region}:{floatingip_id}GET
/v2/reverse/floatingips
- 作用域类型:
project
查找记录。
count_records- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
create_recordset- 默认值:
(role:member and project_id:%(project_id)s) and ('PRIMARY':%(zone_type)s) or (role:admin) and ('PRIMARY':%(zone_type)s) or (role:admin) and ('SECONDARY':%(zone_type)s) or ('True':%(zone_shared)s) and ('PRIMARY':%(zone_type)s)- 操作:
POST
/v2/zones/{zone_id}/recordsets
- 作用域类型:
project
创建记录集
get_recordsets- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
get_recordset- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s) or ('True':%(zone_shared)s)- 操作:
GET
/v2/zones/{zone_id}/recordsets/{recordset_id}
- 作用域类型:
project
获取记录集
find_recordset- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
列出区域中的记录集
find_recordsets- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/{zone_id}/recordsets
- 作用域类型:
project
列出区域中的记录集
update_recordset- 默认值:
(role:member and project_id:%(project_id)s) and ('PRIMARY':%(zone_type)s) or (role:admin) and ('PRIMARY':%(zone_type)s) or (role:admin) and ('SECONDARY':%(zone_type)s) or role:member and (project_id:%(recordset_project_id)s) and ('PRIMARY':%(zone_type)s)- 操作:
PUT
/v2/zones/{zone_id}/recordsets/{recordset_id}
- 作用域类型:
project
更新记录集
delete_recordset- 默认值:
(role:member and project_id:%(project_id)s) and ('PRIMARY':%(zone_type)s) or (role:admin) and ('PRIMARY':%(zone_type)s) or (role:admin) and ('SECONDARY':%(zone_type)s) or role:member and (project_id:%(recordset_project_id)s) and ('PRIMARY':%(zone_type)s)- 操作:
DELETE
/v2/zones/{zone_id}/recordsets/{recordset_id}
- 作用域类型:
project
删除记录集
count_recordset- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
计数记录集
find_service_status- 默认值:
role:admin- 操作:
GET
/v2/service_status/{service_id}
- 作用域类型:
project
查找单个服务状态
find_service_statuses- 默认值:
role:admin- 操作:
GET
/v2/service_status
- 作用域类型:
project
列出服务状态。
update_service_status- 默认值:
role:admin- 作用域类型:
project
(未提供描述)
get_zone_share- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
GET
/v2/zones/{zone_id}/shares/{zone_share_id}
- 作用域类型:
project
获取区域共享
share_zone- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/{zone_id}/shares
- 作用域类型:
project
共享区域
find_zone_shares- 默认值:
@- 操作:
GET
/v2/zones/{zone_id}/shares
列出共享区域
find_project_zone_share- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 作用域类型:
project
检查是否可以查询特定项目的共享。
unshare_zone- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
DELETE
/v2/zones/{zone_id}/shares/{shared_zone_id}
- 作用域类型:
project
取消共享区域
find_tenants- 默认值:
role:admin- 作用域类型:
project
查找所有租户。
get_tenant- 默认值:
role:admin- 作用域类型:
project
获取所有租户。
count_tenants- 默认值:
role:admin- 作用域类型:
project
计数租户
create_tld- 默认值:
role:admin- 操作:
POST
/v2/tlds
- 作用域类型:
project
创建 Tld
find_tlds- 默认值:
role:admin- 操作:
GET
/v2/tlds
- 作用域类型:
project
列出 Tlds
get_tld- 默认值:
role:admin- 操作:
GET
/v2/tlds/{tld_id}
- 作用域类型:
project
显示 Tld
update_tld- 默认值:
role:admin- 操作:
PATCH
/v2/tlds/{tld_id}
- 作用域类型:
project
更新 Tld
delete_tld- 默认值:
role:admin- 操作:
DELETE
/v2/tlds/{tld_id}
- 作用域类型:
project
删除 Tld
create_tsigkey- 默认值:
role:admin- 操作:
POST
/v2/tsigkeys
- 作用域类型:
project
创建 Tsigkey
find_tsigkeys- 默认值:
role:admin- 操作:
GET
/v2/tsigkeys
- 作用域类型:
project
列出 Tsigkeys
get_tsigkey- 默认值:
role:admin- 操作:
GET
/v2/tsigkeys/{tsigkey_id}
- 作用域类型:
project
显示 Tsigkey
update_tsigkey- 默认值:
role:admin- 操作:
PATCH
/v2/tsigkeys/{tsigkey_id}
- 作用域类型:
project
更新 Tsigkey
delete_tsigkey- 默认值:
role:admin- 操作:
DELETE
/v2/tsigkeys/{tsigkey_id}
- 作用域类型:
project
删除 Tsigkey
create_zone- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones
- 作用域类型:
project
创建区域
get_zones- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
get_zone- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s) or ('True':%(zone_shared)s)- 操作:
GET
/v2/zones/{zone_id}
- 作用域类型:
project
获取区域
get_zone_servers- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
get_zone_ns_records- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/{zone_id}/nameservers
- 作用域类型:
project
获取区域的名称服务器
find_zones- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones
- 作用域类型:
project
列出现有区域
update_zone- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
PATCH
/v2/zones/{zone_id}
- 作用域类型:
project
更新区域
delete_zone- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
DELETE
/v2/zones/{zone_id}
- 作用域类型:
project
删除区域
xfr_zone- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/{zone_id}/tasks/xfr
- 作用域类型:
project
手动触发辅助区域的更新
abandon_zone- 默认值:
role:admin- 操作:
POST
/v2/zones/{zone_id}/tasks/abandon
- 作用域类型:
project
放弃区域
count_zones- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
count_zones_pending_notify- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
purge_zones- 默认值:
role:admin- 作用域类型:
project
(未提供描述)
pool_move_zone- 默认值:
role:admin- 操作:
POST
/v2/zones/{zone_id}/tasks/pool_move
- 作用域类型:
project
池移动区域
zone_export- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
GET
/v2/zones/tasks/exports/{zone_export_id}/export
- 作用域类型:
project
从 Designate 数据存储中检索区域导出
create_zone_export- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/{zone_id}/tasks/export
- 作用域类型:
project
创建区域导出
find_zone_exports- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/tasks/exports
- 作用域类型:
project
列出区域导出
get_zone_export- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/tasks/exports/{zone_export_id}
- 作用域类型:
project
获取区域导出
update_zone_export- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/{zone_id}/tasks/export
- 作用域类型:
project
更新区域导出
delete_zone_export- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
DELETE
/v2/zones/tasks/exports/{zone_export_id}
- 作用域类型:
project
删除区域导出
create_zone_import- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/tasks/imports
- 作用域类型:
project
创建区域导入
find_zone_imports- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/tasks/imports
- 作用域类型:
project
列出所有区域导入
get_zone_import- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/tasks/imports/{zone_import_id}
- 作用域类型:
project
获取区域导入
update_zone_import- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/tasks/imports
- 作用域类型:
project
更新区域导入
delete_zone_import- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
DELETE
/v2/zones/tasks/imports/{zone_import_id}
- 作用域类型:
project
删除区域导入
create_zone_transfer_accept- 默认值:
((role:admin) or (role:member and project_id:%(project_id)s)) or project_id:%(target_project_id)s or None:%(target_project_id)s- 操作:
POST
/v2/zones/tasks/transfer_accepts
- 作用域类型:
project
创建区域传输接受
get_zone_transfer_accept- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 操作:
GET
/v2/zones/tasks/transfer_requests/{zone_transfer_accept_id}
- 作用域类型:
project
获取区域传输接受
find_zone_transfer_accepts- 默认值:
role:admin- 操作:
GET
/v2/zones/tasks/transfer_accepts
- 作用域类型:
project
列出区域传输接受
create_zone_transfer_request- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
POST
/v2/zones/{zone_id}/tasks/transfer_requests
- 作用域类型:
project
创建区域传输接受
get_zone_transfer_request- 默认值:
((role:admin) or (role:member and project_id:%(project_id)s)) or project_id:%(target_project_id)s or None:%(target_project_id)s- 操作:
GET
/v2/zones/tasks/transfer_requests/{zone_transfer_request_id}
- 作用域类型:
project
显示区域传输请求
get_zone_transfer_request_detailed- 默认值:
(role:admin) or (role:reader and project_id:%(project_id)s)- 作用域类型:
project
(未提供描述)
find_zone_transfer_requests- 默认值:
@- 操作:
GET
/v2/zones/tasks/transfer_requests
列出区域传输请求
update_zone_transfer_request- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
PATCH
/v2/zones/tasks/transfer_requests/{zone_transfer_request_id}
- 作用域类型:
project
更新区域传输请求
delete_zone_transfer_request- 默认值:
(role:admin) or (role:member and project_id:%(project_id)s)- 操作:
DELETE
/v2/zones/tasks/transfer_requests/{zone_transfer_request_id}
- 作用域类型:
project
删除区域传输请求