允许管理员查询和创建属于任何用户的密钥对¶
https://blueprints.launchpad.net/nova/+spec/admin-query-any-keypair
此更改允许管理员用户查询其他用户拥有的密钥对,以及代表他们创建/导入新的密钥对。
问题描述¶
目前,密钥对仅对其所有者可用。管理员应该能够查看其他用户的密钥对,并在需要时代表他们创建新的密钥对。
用例¶
作为 OpenStack 集群的管理员,我需要查看用户拥有的密钥对。
作为具有管理员权限的人,我希望能够使用分配给其他人的密钥对创建实例,以便他们可以登录。
允许管理员为用户创建密钥对和导入公钥,将允许用户访问使用这些密钥对启动的实例。
对于需要使用配置管理工具(Ansible、Puppet 等)进行额外部署后配置的实例,由管理员预先安装密钥对也非常有用。
项目优先级¶
(尚未定义)
提议的变更¶
对于查询操作,此更改不会以任何方式影响 API 格式或模式,而只是添加一个查询键来选择用于密钥对查询的特定用户。但是,需要将一个可选的 user_id 参数添加到 POST 操作中,以指定要创建密钥对的用户。
当前允许的查询请求如下
GET /os-keypairs GET /os-keypairs/[keypair]
在此更改之后,管理员将能够执行以下操作
- 获取 [user_id] 的密钥对列表
GET /os-keypairs?user_id=[user_id]
- 查看特定用户的密钥对
GET /os-keypairs/[keypair]?user_id=[user_id]
- 未来工作
允许管理员列出所有用户的密钥对将需要额外的工作,这将涉及对数据库模式的更改,将在单独的规范中提交。
备选方案¶
我们可以添加一个新的管理员 API 方法来促进这一点,但这样做将花费更多的工作,而收益却很少(如果有的话)。
数据模型影响¶
无。
REST API 影响¶
查询方法的规范
密钥对的现有索引操作将在激活适当的微版本时扩展为支持可选的“user_id”参数。
方法类型:GET
正常的 http 响应代码:200
预期的错误 http 响应代码
403:如果用户没有权限,根据策略文件
/v2.1/{tenant_id}/os-keypairs?user_id={user_id}/v2.1/{tenant_id}/os-keypairs/{keypair_name}?user_id={user_id}可以通过 URL 传递的参数:备用用户 ID
主体数据的 JSON 模式定义未更改
响应数据的 JSON 模式定义未更改
示例用例
请求
GET http://127.0.0.1:8774/v2.1/e0c1f4c0b9444fa086fa13881798144f/os-keypairs?user_id=example_userid
创建/导入方法的规范
创建方法将在激活适当的微版本时扩展为支持可选的“user_id”参数,该参数将在请求主体中提供。
方法类型:POST
正常的 http 响应代码:200
预期的错误 http 响应代码
403:如果用户没有权限,根据策略文件
/v2.1/{tenant_id}/os-keypairs响应数据的 JSON 模式定义未更改
主体数据的 JSON 模式定义将更改为包含可选的 user_id 参数
create:
{
"keypair": {
"name": "%(keypair_name)s",
"type": "%(keypair_type)s",
"user_id": %(user_id)s"
}
}
import:
{
"keypair": {
"name": "%(keypair_name)s",
"type": "%(keypair_type)s",
"public_key": "%(public_key)s,"
"user_id": %(user_id)s"
}
}
这将添加新的策略元素,允许分配此权限
"os_compute_api:os-keypairs:index": "is_admin:True or user_id:%(user_id)s"
"os_compute_api:os-keypairs:show": "is_admin:True or user_id:%(user_id)s"
"os_compute_api:os-keypairs:create": "is_admin:True or user_id:%(user_id)s"
安全影响¶
管理员能够查看其他用户的公钥并代表他们创建新的密钥对。但是,这些通常被认为是适合公开查看的材料。
通知影响¶
无
其他最终用户影响¶
此更改将意味着对 python-novaclient 进行更改,以允许指定应列出或创建密钥对的用户。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
vladikr
- 其他贡献者
Dan Smith, Dan Radez
工作项¶
添加一个新的微版本,并使 os-keypairs 尊重 user_id 查询/创建参数
依赖项¶
无
测试¶
单元测试足以验证此功能,因为它非常简单。可以添加 API 样本测试,以确保当传递 user_id 参数时,列表调用的输出不会发生差异。添加新的 API 样本以验证创建/导入请求模式。
文档影响¶
将更新 nova/api/openstack/rest_api_version_history.rst 文档。
参考资料¶
Bug https://bugs.launchpad.net/nova/+bug/1182965 请求此功能。