OpenStack —— 认证服务Keystone(二)-阿里云开发者社区

开发者社区> 技术小胖子> 正文

OpenStack —— 认证服务Keystone(二)

简介:
+关注继续查看

一、Keystone介绍

    Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证、服务规则和服务令牌的功能, 它实现了OpenStack的Identity API。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。

Keystone主要功能:

  1. 管理用户及其权限;

  2. 维护OpenStack Services的Endpoint;

  3. Authentication(认证)和Authorization(授权)。

wKiom1mnt4nT05IVAADbs2Yei3Q044.png

二、Keystone主要组件

1、Server

    提供一个RESTful的接口,接收用户的请求并对其进行认证以及授权。

2、Drivers

    这个已经默认集成到Server中了,主要从后端存储获取用户的身份信息,比如从数据库或者LDAP中获取。

3、Modules

    中间件模块运行在会用到Keystone服务的其他的OpenStack的组件的空间中,这些模块拦截服务请求,提取用户凭据,并将它们发送到Server进行授权。使用Python WEB接口来整合中间件模块和OpenStack其他组件的通信,比如这些模块可以运行在镜像服务的空间中,也可以运行在计算服务的空间中。

三、Keystone的重要概念

1、User(用户)

    User指代任何使用OpenStack的实体,可以是真正的用户,其他系统或者服务。当User请求访问OpenStack时,Keystone会对其进行验证。

wKiom1moNTOBoTu5AAEOCkxAntM129.jpg

    Horizon在Identity->Users管理User,除了admin和demo,OpenStack也为nova、cinder、glance、neutron服务创建了相应的User,admin也可以管理这些User。

wKioL1mo7VqQBY3IAAA8v2giJ-0022.jpg

2、Group(组)

    组是表示用户集合的容器。

3、Credentials(证书)

    Credentials是User用来证明自己身份的信息,可以是:

  • 用户名/密码 

  • Token 

  • API Key 

  • 其他高级方式

4、Authentication(认证)

    Authentication是Keystone验证User身份的过程。

    User访问OpenStack时向Keystone提交用户名和密码形式的Credentials,Keystone验证通过后会给User签发一个Token作为后续访问的Credential。

5、Token(令牌)

   用户从Keystone那里获取的令牌,用于访问其他服务和资源的凭证,每个令牌都有一个访问范围,允许访问OpenStack范围内的服务资源。

6、Project(项目)

    Project 用于将 OpenStack 的资源(计算、存储和网络)进行分组和隔离。 
    根据OpenStack服务的对象不同,Project可以是一个客户(公有云,也叫租户)、部门或者项目组(私有云)。

wKioL1mq2jvCzUzbAAAcfR88hpc193.png


    这里请注意:

  • 资源的所有权是属于Project的,而不是User。

  • 在OpenStack的界面和文档中,Tenant/Project/Account 这几个术语是通用的,但长期看会倾向使用Project。

  • 每个User(包括 admin)必须挂在Project里才能访问该Project的资源。 一个User可以属于多个 Project。

  • admin相当于root用户,具有最高权限。

    Horizon在Identity->Projects中管理 Project,可以在project中调整用户。

wKiom1mo70_BwbhLAACXW9K2QlQ061.jpg

7、Service(服务)

    OpenStack的Service包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。

    每个Service都会提供若干个Endpoint,User通过Endpoint访问资源和执行操作。

8、Endpoint(访问端点)

    Endpoint是一个网络上可访问的地址,通常是一个URL,Service通过Endpoint 暴露自己的API,Keystone负责管理和维护每个Service的Endpoint。

9、Role(角色)

   个性化的用户可以执行一组特定的操作,角色包括一组权利和特权,如果用户担当某一角色,就可以继承角色的权利和特权。

    在Keystone服务中,发放的令牌(Token)决定了用户的角色,包括一系列的权限,用户调用的服务诠释了用户的角色具体操作权利,即哪些操作可以,哪些操作不可以。

    Horizon 的菜单为 Identity->Project->Manage Members,可以为用户分配一个或多个role。

wKioL1mo8OLBGajzAABcgzVj8MU682.jpg

10、Domain

    域是项目、用户和组的高级容器,每个都由一个域拥有。每个域定义一个名称空间,其中API可见名称属性存在。Keystone图提供了一个默认域名,称为“Default”。

11、举个例子:

User 住宾馆的人
Credentials 开启房间的钥匙
Authentication 宾馆为了拒绝不必要的人进出宾馆,专门设置的机制,只有拥有钥匙的人才能进出
Token 也是一种钥匙,有点特别
Project 宾馆
Service 宾馆可以提供的服务类别,比如,饮食类,娱乐类
Endpoint 具体的一种服务,比如吃烧烤,打羽毛球
Role VIP 等级,VIP越高,享有越高的权限

四、管理介绍

1、用户管理

   用户身份管理有以下三个主要概念:

  • 用户

  • 项目

  • 角色

    这里的用户代表一个真实的人类用户,并有一些列相关信息,如用户名、密码、电子邮件等。

    一个用户可以在一个项目中担任多种角色,不同的角色有不同的权限,细化用户角色的权限,也是一门值得探讨的学问。

    在/etc/[SERVICE_CODENAME]/policy.json中,控制用户可以对指定服务进行哪些操作。例如,/etc/nova/policy.json中,指定计算服务的访问策略;在/etc/glance/policy.json中,指定镜像服务 的访问策略;在/etc/keystone/policy.json中,指定身份服务的访问策略等。

    在Noav、Glance、Keystone的默认policy.json中,访问策略默认只有admin角色,所有不需要admin操作的访问,将由项目中的任何用户、任何角色来完成。

2、服务管理    

    服务管理有两个主要概念:

  • 服务

  • 访问端点

五、Keystone在OpenStack中的访问流程

wKiom1mnyXTjynxUAABrCZphyLk678.png

1) 用户携带证书或密码进行Keystone认证。 

2) Keystone认证通过后返回Token,此Token带有角色限制。 

3) 通过Token向Keystone获取服务访问目录。 

4) Keystone返回服务访问目录。 

5) 携带Token进行虚拟机创建,将指令传递给nova-api。

6) Nova向Keystone验证Token。 

7) Nova携带Token访问Glance,这里也需要Keystone验证Token。 

8) Glance返回镜像。 

9) Nova携带Token,向Neutron请求虚拟机网卡VIF设置参数。 

10) Neutron向Keystone验证Token。 

11) Nova携带Token验证VIF是否可以访问。 

12) Neutron返回成功的信息给Nova。 

13) Nova返回创建成功的信息给用户。 

14) 虚拟机创建成功。

六、Keystone的身份验证流程案例

wKioL1mnztDiZbq3AAGOlPoF9Yo952.jpg

  1. 用户Alice通过自己的户名和密码向keystone申请token,keystone认证用户名和密码后,返回临时token;

  2. Alice通过临时token发送keystone查询他所拥有的租户,keystone验证临时token成功后,返回Alice的所有租户列表;

  3. Alice选择一个租户,通过用户名和密码申请正式token,keystone认证用户名、密码、tenant后,返回正式token;

  4. Alice通过正式token发送创建server的请求,keystone验证正式token(包括该token是否有效,是否有权限创建虚拟机等)成功后,然后再把请求下发到nova,最终创建虚拟机。


附录:一些解释

    Fernet Tokens是K版本的更新内容,区别于UUID tokens只能持久化存入数据库,Fernet tokens完全不需要持久化。部署人员可以通过设置keystone.conf中的[token] provider = keystone来启用Fernet token。

    Fernet Tokens需要symmetric encryption keys(对称加密密钥),这些keys可以使用keystone-manage fernet_setup建立, 并且使用keystone-manage fernet_rotate周期性地轮换。这些keys必须被在一个multi-node(或者multi-region)部署中的所有Keystone nodes共享,这样就能使一个node生成的tokens可以立即被其他节点验证。



     本文转自 wzlinux 51CTO博客,原文链接:http://blog.51cto.com/wzlinux/1961422,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
fastjson解析json字符串,key缺少双引号导致下游服务无法解析
背景说明 在使用fastjson 1.2.60版本将对象转化为json字符串时,为处理Map值为null的情况,采用了WRITE_MAP_NULL_FEATURES属性,但该属性解析出来的key中缺少双引号,在key包含特殊字符时,如“-”和“:",下游服务在进行反序列化时出现无法解析的错误,从而出现问题。
3059 0
ACK容器服务虚拟节点使用阿里云日志服务来收集业务容器日志
按照这篇博文的介绍,可以在ACK集群上通过Helm的方式部署虚拟节点,提升集群的弹性能力。现在,通过虚拟节点部署的ECI弹性容器实例也支持将stdout输出、日志文件同步到阿里云日志服务(SLS)进行统一管理,所有日志能够被统一收集同一个日志服务project里面。
2784 0
使用阿里云容器服务 ACK 和文件存储 NAS 构建现代化企业应用
大规模构建容器化应用程序需要高可靠、弹性、共享且支持高性能数据处理的数据存储解决方案。通过迁移到公共云,企业可以获得更高的生产效率和更低的成本。阿里云文件存储可以为现代化应用提供强健的数据稳定性,可靠性,高性能和在线扩展能力。
1355 0
解决 Swoole 服务报错 Too many open files 文件句柄超出系统限制
如果在 Swoole 的日志中遇到了 `Too many open files` 这种报错,不要慌,在开发 TCP 网络应用的过程中,经常会遇到`Too many open files`这个问题。
59 0
21119
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载