设为首页 收藏本站
查看: 818|回复: 0

[经验分享] OpenStack —— 认证服务Keystone(二)

[复制链接]

尚未签到

发表于 2018-5-30 13:21:35 | 显示全部楼层 |阅读模式
  一、Keystone介绍
  Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证、服务规则和服务令牌的功能, 它实现了OpenStack的Identity API。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
  Keystone主要功能:

  •   管理用户及其权限;
  •   维护OpenStack Services的Endpoint;
  •   Authentication(认证)和Authorization(授权)。
DSC0000.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会对其进行验证。
DSC0001.jpg

  Horizon在Identity->Users管理User,除了admin和demo,OpenStack也为nova、cinder、glance、neutron服务创建了相应的User,admin也可以管理这些User。
DSC0002.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可以是一个客户(公有云,也叫租户)、部门或者项目组(私有云)。
DSC0003.png

  

  这里请注意:

  •   资源的所有权是属于Project的,而不是User。
  •   在OpenStack的界面和文档中,Tenant/Project/Account 这几个术语是通用的,但长期看会倾向使用Project。
  •   每个User(包括 admin)必须挂在Project里才能访问该Project的资源。 一个User可以属于多个 Project。
  •   admin相当于root用户,具有最高权限。
  Horizon在Identity->Projects中管理 Project,可以在project中调整用户。
DSC0004.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。
DSC0005.jpg

  10、Domain
  域是项目、用户和组的高级容器,每个都由一个域拥有。每个域定义一个名称空间,其中API可见名称属性存在。Keystone图提供了一个默认域名,称为“Default”。
  11、举个例子:
User住宾馆的人
Credentials开启房间的钥匙
Authentication宾馆为了拒绝不必要的人进出宾馆,专门设置的机制,只有拥有钥匙的人才能进出
Token也是一种钥匙,有点特别
Project宾馆
Service宾馆可以提供的服务类别,比如,饮食类,娱乐类
Endpoint具体的一种服务,比如吃烧烤,打羽毛球
RoleVIP 等级,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中的访问流程
DSC0006.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的身份验证流程案例
DSC0007.jpg


  •   用户Alice通过自己的户名和密码向keystone申请token,keystone认证用户名和密码后,返回临时token;
  •   Alice通过临时token发送keystone查询他所拥有的租户,keystone验证临时token成功后,返回Alice的所有租户列表;
  •   Alice选择一个租户,通过用户名和密码申请正式token,keystone认证用户名、密码、tenant后,返回正式token;
  •   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可以立即被其他节点验证。
  

DSC0008.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-483152-1-1.html 上篇帖子: OpenStack —— 原理架构介绍(一) 下篇帖子: OpenStack —— 镜像服务Glance(三)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表