访问控制¶
基于角色的访问控制 (RBAC)¶
与其他许多服务一样,密钥管理服务支持通过强制在策略文件中定义的策略规则来保护其 API。密钥管理服务在其配置文件 /etc/barbican/barbican.conf 中存储对策略 JSON 文件的引用。通常,此文件名为 policy.yaml,并存储在 /etc/barbican/policy.yaml 中。
每个密钥管理 API 调用在策略文件中都有一个条目,用于规定适用的访问级别
API_NAME: RULE_STATEMENT or MATCH_STATEMENT
其中 RULE_STATEMENT 可以是另一个 RULE_STATEMENT 或一个 MATCH_STATEMENT
RULE_STATEMENT: RULE_STATEMENT or MATCH_STATEMENT
MATCH_STATEMENT 是一组标识符,这些标识符必须在 API 调用者提供的令牌与相关 API 的参数或目标实体之间匹配。例如
"secrets:post": "role:admin or role:creator"
表示要通过 POST 请求创建新的密钥,您必须在您的令牌中拥有管理员或创建者角色。
警告
密钥管理服务在项目级别限定密钥的所有权。这意味着 API 中的许多调用将执行额外的检查,以确保令牌的 project_id 与存储为密钥所有者的 project_id 匹配。
默认策略¶
OpenStack 中的策略引擎非常灵活,允许为您的特定云定制策略。密钥管理服务附带一个示例 policy.yaml 文件,可以用作定制策略的起点。示例策略定义了 5 个不同的角色
- key-manager:service-admin
负责密钥管理服务的云管理员。此用户可以访问所有管理 API,例如项目配额。
- admin(管理员)
项目管理员。此用户可以完全访问项目拥有的所有资源,并且管理员角色在该项目上生效。
- creator
具有此角色的用户允许创建新资源,并且还可以删除由创建者角色生效的项目拥有的资源。他们还被允许完全访问项目范围内的现有密钥。
- observer
具有此角色的用户允许访问现有资源,但不允许上传新密钥或删除现有密钥。
- audit
具有此角色的用户仅允许访问资源元数据。因此,具有此角色的用户无法解密密钥。
访问控制列表 API¶
将密钥的所有权限定在项目级别会产生一些限制。例如,不可能授予用户访问单个密钥的权限,因为在项目上授予角色将允许访问该项目拥有的所有密钥。
此外,没有简单的方法可以上传私有密钥(即只有您有权访问的密钥),而无需为其创建仅您拥有角色的新项目。
为了解决这些限制,密钥管理服务包含一个访问控制列表 (ACL) API。有关完整详细信息,请参阅 ACL API 用户指南