Atom feed of this document
  

 基于角色访问控制(RBAC)的身份API保护

正如多数的 OpenStack 项目那样,认证支持通过基于 RBAC 方法定义的策略规则来保护其 API。认证保存一个引用到主要认证配置文件 keystone.conf 的策略 JSON 文件中。通常这个文件命名为 policy.json,并且包含了什么角色拥有访问所定义的服务的特定操作的规则。

每个认证 API v3 调用在策略文件中都有一行规定了访问生效的管理层次。

API_NAME: RULE_STATEMENT or MATCH_STATEMENT

地点:

RULE_STATEMENT 包含了 RULE_STATEMENTMATCH_STATEMENT

MATCH_STATEMENT 是认证的一个设置,它必需匹配由 API 调用方提供的令牌和 API 的参数或目标实体调用的问题。例如:

"identity:create_user": [["role:admin", "domain_id:%(user.domain_id)s"]]

假设要创建一个用户,您的令牌必需有管理员角色,而且令牌中 (这意味着它必需是一个域范围的令牌) 的 domain_id 必需匹配您所要创建的用户项目的 domain_id。换言之,您必需在您所要创建的用户的域中拥有管理员角色,并且您所使用的令牌必需在该域范围内。

每个匹配的组件使用这样的格式:

ATTRIB_FROM_TOKEN:CONSTANT or ATTRIB_RELATED_TO_API_CALL

身份服务需要这些属性:

令牌中的属性:user_iddomain_idproject_id 依赖于域,以及您在这个范围内所拥有的角色列表。

API 调用相关的属性:任何传递到 API 调用的参数以及任何在查询字符串中指定的过滤器都是可用的。您要以 object.attribute 语法来关联对象的属性 (例如,user.domain_id)。API 的目标属性也可以用 target.object.attribute 语法。例如:

"identity:delete_user": [["role:admin", "domain_id:%(target.user.domain_id)s"]]

需要确认认证服务仅仅删除了所提供的令牌的同一个域中的用户对象。

每个目标对象都可以有一个 `id` 和一个 `name` 作为 `target.OBJECT.id` 和 `target.OBJECT.name`。认证从数据库获取其他属性,属性因对象类型而不同。认证服务过滤了一些数据库字段,例如用户密码。

对象属性列表:

role:
     target.role.id
     target.role.name

 user:
     target.user.default_project_id
     target.user.description
     target.user.domain_id
     target.user.enabled
     target.user.id
     target.user.name

 group:
     target.group.description
     target.group.domain_id
     target.group.id
     target.group.name

 domain:
     target.domain.enabled
     target.domain.id
     target.domain.name

 project:
     target.project.description
     target.project.domain_id
     target.project.enabled
     target.project.id
     target.project.name

默认的 policy.json 文件提供了一个基于 API 保护的示例,并不承担任何域的特殊用途。如果云供应商希望授权域的内容管理员为一个特殊的管理域,可以参考 policy.v3cloudsample.json 作为多域配置安装的示例。这个样例策略文件也展示了如何使用 admin_domain 来允许云供应商启用云管理员,以通过 API 拥有更广的访问权限。

一个干净的安装可以以标准策略文件开始,允许在其中创建包含第一个用户的 admin_domain。然后您可以获取管理域的 domain_id,将 ID 粘贴到一个修改了版本的 policy.v3cloudsample.json 文件,将其启用为主策略文件。

Questions? Discuss on ask.openstack.org
Found an error? Report a bug against this page


loading table of contents...