将认证密钥存储在访问映射中¶
蓝图: https://blueprints.launchpad.net/manila/+spec/auth-access-keys
在具有内置认证系统的存储系统中,例如 Ceph,授予用户共享访问权限涉及创建一个凭据,一个密钥,用户随后使用该密钥进行身份验证。 本规范建议允许此类存储系统的驱动程序通过将密钥存储在 manila 的数据库中,并通过提供访问规则信息的面向用户的 API 公开密钥来向用户提供密钥。
问题描述¶
Manila 的访问控制 API 和底层机制是为依赖外部认证系统来识别客户端的存储后端设计的。 共享驱动程序让存储后端知道需要授权访问共享的客户端。
对于具有自身认证系统的存储后端驱动程序,无法通过 manila API 将凭据返回给客户端。 这意味着客户端必须通过 manila 之外的方式提供必需的凭据,这使得管理员和用户的工作流程变得繁琐。
用例¶
当用户请求访问共享时,驱动程序将能够通过 manila API 向用户提供认证凭据,一个密钥。 目前,cephfs_native 驱动程序将从中受益。 它将能够与用户共享 Ceph 存储后端生成的密钥。
提议的变更¶
接收由存储后端为新添加的共享规则生成的访问凭据,密钥,作为后端驱动程序的
update_access()的返回值。将密钥存储在
ShareAccessMapping模型中。通过
manila.share.api.access_get_allAPI 公开它们,该 API 用于列出共享的访问规则。
备选方案¶
预计存储后端生成的认证凭据将通过 manila 之外的方式与用户共享。
数据模型影响¶
将
access_key属性添加到现有的ShareAccessMapping模型中,用于存储密钥access_key = Column(String(255), nullable=True)
添加一个新的 DB API,
share_access_update_access_key(),它更新ShareAccessMapping模型的access_key属性。数据库迁移
升级将向
share_access_map表添加新的列access_key。降级将从
share_access_map表中删除列access_key。
REST API 影响¶
添加一个响应参数 access_key,类型为 string,它将在列出访问规则时显示密钥。
方法:POST
URL: /shares/{share_id}/action 正常响应代码: 200
动作体
{ "access_list": null }
示例响应
{ "access_list": [ { "access_level": "rw", "state": "active", "id": "507bf114-36f2-4f56-8cf4-857985ca87c1", "access_type": "cephx", "access_to": "alice", "access_key": "AQC7fRhXbQXxHxAApF58+AmP6a3zBpwYWNIBbA==" } ] }
驱动程序影响¶
ShareDriver
驱动程序的
update_access()可以选择返回一个access_id,access_key作为键值对的字典给 ShareManager 的 access_helper,用于它添加的规则。 在update_access()的恢复/维护模式下,驱动程序必须返回所有其被命令同步的访问 ID 的secret keys,即access_rules参数中的访问 ID。ShareManager
ShareManager 的 access_helper 的
update_access()调用驱动程序的update_access()来添加访问规则。 添加规则后,驱动程序可以返回一个字典,{‘access_id’: ‘access_key’, …}。 access_helper 的update_access将使用此字典来迭代地调用新的 DB API,share_access_update_access_key(),以便将各种访问规则的密钥存储在share_access_map表中。
安全影响¶
访问共享所需的密钥将对用户可见,当列出共享访问规则时。
通知影响¶
无
其他最终用户影响¶
python-manilaclient
在列出共享的访问规则时,一个新的列,
access_key将显示访问凭据(如果由驱动程序提供)。 用户将能够选择性地查看它。manila-ui
一个新的列
access_key将出现在RulesTable中。
性能影响¶
当驱动程序添加访问规则并返回相应的访问密钥时,访问密钥将更新为 share_access_map 表中的各种访问 ID。
其他部署者影响¶
无
开发人员影响¶
只有能够利用本规范添加的功能的驱动程序才需要进行修改,以及它们 CI 运行的 tempest 测试。
实现¶
负责人¶
- 主要负责人
rraja
工作项¶
启用
cephfs_native驱动程序在添加共享访问规则时返回访问密钥。实现核心更改以接收来自驱动程序的访问密钥,将它们存储在
share_access_map表中,并通过access_get_allAPI 公开它们。允许 python-manilaclient 和 manila-ui 显示访问密钥。
依赖项¶
工作将取决于需要进行的更改,以恢复对每个访问规则而不是每个共享的访问状态进行监控。 这在奥斯汀峰会上讨论过,https://etherpad.openstack.org/p/newton-manila-update-access
测试¶
更新 manila、python-manilaclient 和 manila-ui 仓库中的单元测试。
更新 manila 仓库中的 tempest 测试。
更新 python-manilaclient 仓库中的功能测试。
文档影响¶
更新 API 参考指南。
更新配置参考指南,提及
cephfs_native驱动程序中的更改。更新开发参考指南。
更新用户指南。
参考资料¶
邮件列表: http://lists.openstack.org/pipermail/openstack-dev/2015-October/077602.html