将认证密钥存储在访问映射中

蓝图: 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_all API 公开它们,该 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_all API 公开它们。

  • 允许 python-manilaclient 和 manila-ui 显示访问密钥。

依赖项

测试

  • 更新 manila、python-manilaclient 和 manila-ui 仓库中的单元测试。

  • 更新 manila 仓库中的 tempest 测试。

  • 更新 python-manilaclient 仓库中的功能测试。

文档影响

  • 更新 API 参考指南。

  • 更新配置参考指南,提及 cephfs_native 驱动程序中的更改。

  • 更新开发参考指南。

  • 更新用户指南。

参考资料

邮件列表: http://lists.openstack.org/pipermail/openstack-dev/2015-October/077602.html