跳转到主要内容

Cinder身份验证示例

项目描述

https://img.shields.io/pypi/v/cinder_auths.svg https://img.shields.io/travis/akrog/cinder_auths.svg Documentation Status https://img.shields.io/pypi/pyversions/cinder_auths.svg Updates https://img.shields.io/:license-apache-blue.svg

Cinder身份验证示例

此存储库仅作为Cinder身份验证基本机制的一个示例,展示我们如何创建自定义插件,以及Cinder在此方面的当前限制以及如何规避这些限制。

在此存储库中实现了2个示例

  • 明文密码:使用明文密码进行身份验证。

  • 一次性密码:使用一次性密码进行身份验证。

Cinder以及大多数如果不是所有OpenStack项目,在API服务上使用Paste Deployment(一个用于查找和配置WSGI应用程序和服务器系统的系统)以及WebOb(WSGI请求和响应对象),这就是身份验证和授权发生的地方。

这意味着要创建自定义身份验证机制,我们需要让API服务从客户端接收身份验证参数 -用户,项目,令牌/密码- 并进行身份验证。由于Cinder架构的性质,所有Cinder服务之间的内部通信都被认为是安全的,并且不会执行任何其他验证,请求上下文中存在的用户和项目将被认为是真实的。

创建自定义身份验证器的步骤是

1- 创建过滤器工厂(库)2- 安装认证库3- 将管道添加到Cinder的api-paste配置中4- 配置Cinder使用新创建的认证5- 重启Cinder-API服务

创建过滤器工厂

该存储库创建了2个简单的过滤器工厂

  • cinder_auths.plain_pwd_factory:也可以通过cinder_auths.cinder_auths.BaseAuthFilter.factory访问

  • cinder_auths.otp_factory:也可以通过cinder_auths.cinder_auths.OTPAuthFilter.factory访问

为了说明可以用来配置这些插件的不同机制,而不仅仅是因为从工程角度来看有意义,我们添加了2个配置参数,其中一个可以用2种不同的方式配置。

我们可以使用两种方式传递配置参数:通过api-paste配置文件(/etc/cinder/api-paste.ini)和通过Cinder配置文件(/etc/cinder/cinder.conf)。

我们添加的两个配置参数中,第一个是必须的,是授权用户列表,该列表定义在过滤器中的api-paste.ini文件下的名称为passwords

该参数是以空格分隔的元组列表,格式为User:Project:Password。

第二个配置参数是可选的,允许我们定义管理员用户的密码,因为所有其他用户都不是管理员。

此配置选项可以在api-paste文件中使用admin_password参数或在cinder conf中使用相同名称在[DEFAULT]部分下配置。如果两者都定义了,api-paste文件中的那个将优先。

如果此配置选项已定义且不为空,代码将自动在管理员项目中添加一个管理员用户。

客户端将使用X-Auth-Token头通过冒号分隔符提供用户、项目密码:user:project:password

安装库

我们可以直接使用sudo pip install cinder_auths安装。

添加api-paste管道

我们必须编辑文件/etc/cinder/api-paste.ini文件,添加我们想使用的过滤器及其配置,以及为每个我们目前拥有的不同API版本创建一个用于此认证器的管道。

这意味着我们必须向[composite:openstack_volume_api_v1]添加一行,内容为plain_pwd = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler plain_pwd apiv1,到[composite:openstack_volume_api_v2]的行plain_pwd = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler plain_pwd apiv2,到[composite:openstack_volume_api_v3]的行plain_pwd = cors http_proxy_to_wsgi request_id faultwrap sizelimit osprofiler plain_pwd apiv3。所有这些都是相应的noauth管道的副本,将noauth替换为plain_pwd

然后我们添加带有所需配置的plain_pwd过滤器

[filter:plain_pwd]
paste.filter_factory = cinder_auths:plain_pwd_factory
passwords = user1:project1:password1 user2:project2:password2
admin_password = geguileo

Cinder配置

在这里,我们需要在[DEFAULT]组下配置Cinder想要使用的auth_strategy。此配置选项默认为keystone,因此我们必须将其设置为plain_pwd,这是我们添加的管道名称,过滤器的名称在此情况下无关紧要,尽管我们使用了相同的名称。

我们还可以在[DEFAULT]下添加admin_password选项,如果我们没有在api-paste配置文件中这样做。

这里是我们发现现有Cinder代码问题的原因,因为现在它只接受两个名称keystonenoauth,因此我们无法真正设置auth_strategy = palin_pwd而不更改代码。

因此,我们现在的解决方案,直到我们更改Cinder,是

  • noauth过滤器替换为我们的plain_pwd配置,并使用auth_strategy = noauth配置Cinder。

  • 手动更改cinder代码在/usr/lib/python2.7/site-packages/cinder/common/config.py中,将choices=[‘noauth’, ‘keystone’],替换为choices=[‘noauth’, ‘keystone’, ‘plain_pwd’, ‘otp’],

进行测试

重启 Cinder-API 服务后,我们可以使用以下命令列出卷:

$ curl -i http://192.168.121.165:8776/v3/admin/volumes/detail -H "Accept: application/json" -H "X-Auth-Token: admin:admin:geguileo"

URL 可能因您使用的 openstack 版本而不同。

历史记录

0.1.0 (2017-10-06)

  • 首次发布于 PyPI。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定该选择哪一个,请了解更多关于 安装软件包 的信息。

源分布

cinder_auths-0.1.1.tar.gz (16.4 kB 查看哈希值)

上传时间

构建分布

cinder_auths-0.1.1-py2.py3-none-any.whl (9.3 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者