3.3.4.2. 示例:根据属性限制访问权限
您可以根据用户发出 API 调用的属性,创建限制对 API 调用的访问的策略。例如,以下默认规则指出,如果从管理上下文运行,则允许删除密钥对,或者令牌的用户 ID 与与目标关联的用户 ID 匹配。
"os_compute_api:os-keypairs:delete": "rule:admin_api or user_id:%(user_id)s"
"os_compute_api:os-keypairs:delete": "rule:admin_api or user_id:%(user_id)s"
注意:* 全新实施的功能并不能保证每个版本都处于每个服务中。因此,务必要使用目标服务的现有策略的惯例编写规则。有关查看这些策略的详情,请参阅 检查现有策略。* 所有策略都应该在将部署的每个版本的非生产环境中进行测试,因为无法保证跨版本的兼容性策略。
根据上述示例,您可以制作 API 规则根据是否拥有资源来展开或限制用户的访问权限。另外,属性可以与其他限制相结合,组成规则,如下例所示:
"admin_or_owner": "is_admin:True or project_id:%(project_id)s"
"admin_or_owner": "is_admin:True or project_id:%(project_id)s"
请参考上面的示例,您可以为管理员和用户创建一个唯一规则,然后使用该规则进一步限制操作:
"admin_or_user": "is_admin:True or user_id:%(user_id)s" "os_compute_api:os-instance-actions": "rule:admin_or_user"
"admin_or_user": "is_admin:True or user_id:%(user_id)s"
"os_compute_api:os-instance-actions": "rule:admin_or_user"
有关可用的 policy.json
语法选项的更多信息,请参阅 策略语法。