指定策略

警告

自 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_scopeenforce_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

删除区域传输请求