学习笔记 - Openstack Swift的Tempauth和Keystone

 

介绍

Swift集成认证系统的耦合度很低,所使用的认证系统也是一些已存在的认证系统。关于认证系统有一下几点:

1)认证/授权部分可以是一个外部认证系统或一个子系统以WSGI中间件形式运行在Swift。

2)swift用户的每次请求附件一个授权的token

3)swift采用外部认证系统或子系统验证每个token,并且缓存结果。

4)每次请求token不会改变,但是token有有效期

Tempauth 认证

在一个账户(account)中有admin、non-admin 用户

  1. admin用户具有所有所有权限

  2. non-admin用户需要根据container的X-Container-Read和X-Container-Write ACLs来授权操作,更多参见swift.common.middleware.acl

  3. 如果认证系统设置了请求环境的swift_owner为True,则代理将会返回额外的头信息。例如,GET或HEAD一个container 的X-Container-Sync-Key

配置文件中的格式:

user_<account>_<user>= <key> [group] [group] [...] [storage_url]

特殊的组.admin,.reseller_admin = can do anything to any account for this auth

  1. .reseller_admin 具有对任何account操作的权限。

  2. .admin 具有对所在的account 操作的权限。

如果没有设置以上组,则用户只能访问那些被.admin或.reseller_admin所允许的container。

TempAuth 是一个wsgi 中间件,因此实现你自己的auth集成到Proxy中, 就像写一新的wsgi中间件一样容易, KeyStone和Swauth 是认证服务的附加实例。Auth 服务和中间件参见:http://docs.openstack.org/developer/swift/development_auth.html

常用命令

获取token           curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0/AUTH_test
获取container     curl -XGET -H 'X-Auth-Token: AUTH_xxxxxxxxxxxxxxxxxx' http://127.0.0.1.1:8080/v1/AUTH_test/test
创建container     curl -XPUT -H 'X-Auth-Token: AUTH_xxxxxxxxxxxxxxxxxx' http://127.0.0.1:8080/v1/AUTH_test/test

Keystone认证

基本术语:租户(tenant )、用户(user )、角色(role ),相对swift 在Keystone中:

  1. A tenant对应于swift中的an account

  2. A user对应于swift中的a user 

  3. A role 对应于swift中的a group 

在swift中一个账户里面的一个用户默认是没有任何权限,但是有用户可以为其用户操作container设置ACL。在Keystone中间件中我们称作Operator,通过匹配中间件配置文件中的设置(keystone_swift_operator_roles= Admin, SwiftOperator)来知道那一个用户具有admin权限。一旦用户具有swiftOperator角色,他将具有访问、创建container及其他用户设置ACL等任何权限。

注:租户(tenant ) 现在叫 Project

Configuring Swift to use Keystone

wift 可以认证通过OpenStack keystone取道 swift.common.middleware.keystoneauth 中间件。
为了使用keystoneauth中间件 authtoken中间件通过keystone,需要进行相关的配置。authtoken中间件执行认证令牌确认和取回真实用户的认证信息。它可以在Keystone分布中找到。keystoneauth中间件执行认证和映射keystone角色到Swift's ACLs。

配置Swift使用Keystone 是相当直接的。第一步是确保你已经安装了auth_token中间件,分布在keystone,它可以访问通过你的python路径或者keystone包的安装路径。

你需要首先确认你有一个服务端点的类型object-store在keystone指向你的Swift代理服务器。例如有如下配置在你的/etc/keystone/default_catalog.templates

catalog.RegionOne.object_store.name = Swift Service
catalog.RegionOne.object_store.publicURL = http://swiftproxy:8080/v1/AUTH_$(tenant_id)s
catalog.RegionOne.object_store.adminURL = http://swiftproxy:8080/
catalog.RegionOne.object_store.internalURL = http://swiftproxy:8080/v1/AUTH_$(tenant_id)s

在你的Swift代理服务器你将调整你的主管道加入auth_token和keystoneauth在你的/etc/swift/proxy-server.conf

pipeline:main]
pipeline = [....] authtoken keystoneauth proxy-logging proxy-server
添加authtoken中间件的配置:
[filter:authtoken]
paste.filter_factory = keystone.middleware.auth_token:filter_factory
auth_host = keystonehost
auth_port = 35357
auth_protocol = http
auth_uri = http://keystonehost:5000/
admin_tenant_name = service
admin_user = swift
admin_password = password

这些变量真实的值需要被设置依赖于你的情况。更多的信息,请参考Keystone文档关于auth_token中间件,简而言之:
1.这些变量以auth_开始指向Keystone admin服务。这些信息被用来通过中间件来真实的查询Keystone关于变量的认证令牌。
2.admin认证授权(admin_user,admin_tenant_name,admin_password)将会用来取回一个admin认证。那个认证将会用来鉴权用户令牌在之后的场景中。

注意: 如果需要支持未检测的用户(通过匿名访问)或者用 tempurl/formposts 中间件,认证需要配置delay_auth_decision设置为1。

最后你可以添加keystoneauth配置:

[filter:keystoneauth]
use = egg:swift#keystoneauth
operator_roles = admin, swiftoperator

默认下只有用户可以给予ACL或者创建其他容器是那些Keystone角色指定 operator_roles设置。

有那些角色其中之一的用户有能力给予ACLs到其他用户的容器,看ACL的文档 swift.common.middleware.acl

 

参考:

https://blog.csdn.net/anhuidelinger/article/details/9996453

https://www.fuwuqizhijia.com/openstack/201403/8522.html

 

Committing work to S3 with the “S3A Committers”

https://docs.hortonworks.com/HDPDocuments/HDP3/HDP-3.0.1/bk_cloud-data-access/content/ch03s08s01.html

https://hadoop.apache.org/docs/r3.1.1/hadoop-aws/tools/hadoop-aws/committers.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值