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

[经验分享] openstack装B之路-------keystone

[复制链接]

尚未签到

发表于 2017-6-26 22:31:52 | 显示全部楼层 |阅读模式
1.什么是keystone
  keystone是 OpenStack Identity Service 的项目名称,是一个负责身份管理与授权的组件。
  主要功能:实现用户的身份认证,基于角色的权限管理,及openstack其他组件的访问地址和安全策略管理
  什么是基于角色的权限管理:比如说张三,如果在公司只说这一个人,他是没有任何权力的。如果赋予他一个CEO的角色,他就可以利用权力调戏前台了;一个人有没有权限(权力),一定要为他关联一个角色,CEO就相当于张三的角色
  安全策略管理:keystone是用来服务于openstack其他各个组件的,为其他组件提供安全策略的管理
  openstack其他组件的访问地址:提供如何去访问openstack其他组件的访问地址
2.为什么要有keystone
  Keystone项目的主要目的是给整个openstack的各个组件(nova,cinder,glance...)提供一个统一的验证方式:
  openstack是由众多组件构成的一套系统,该系统的功能是对外提供服务,因而我们可以将其定义为一个‘庞大的软件’,没有软件不考虑安全因素,Keystone对于通常的应用场景所不同的是他要解决分布式环境下的统一认证。主要是为了提供统一的安全认证服务,所以才会有keystone。
3.keystone的功能
  openstack是一个SOA架构,理论上各子项目独立提供相关服务,互不依赖。如nova提供计算服务,glance提供镜像服务等。
  实际上所有的组件都依赖keystone,它有两个功能:
  (1)用户管理:验证用户身份的合法性。
  (2)服务目录管理:提供服务目录(ServiceCatalog:包括service和endpoint)服务,类似于UDDI服务的概念,用户(无论是Dashboard, APIClient)都需要访问Keystone获取服务列表,以及每个服务的地址(Openstack中称为Endpoint)
4.keystone概念详解
  第一部分
  User:使用Openstack组件的客户端可以是人、服务、系统,任何的客户端来访问openstack组件,都需要有一个用户名。
  Credentials:是用于确认用户身份的凭证,说白了就是‘信物’,具体可以是:

  • 用户名和密码
  • 用户名和API key
  • 一个 Keystone 分配的身份token
  Authentication

  • 是验证用户身份的过程。Keystone 服务通过检查用户的 Credential 来确定用户的身份。
  • 最开始,使用用户名/密码或者用户名/API key作为credential。当用户的credential被验证后,Kestone 会给用户分配一个 authentication token 供该用户后续的请求使用。
  • Keystone中通过Policy(访问规则)来做到基于用户角色(Role)的访问控制。
  Token

  • 是一个数字字符串,访问资源时需要"亮出"你的令牌。在keystone中主要是引入令牌机制来保护用户对于资源的访问,同时引入PKI(公钥基础实施)对令牌加以保护。
  • Token包含了在指定范围和有效时间内可以被访问的资源。EG. 在Nova中一个tenant可以是一些虚拟机,在Swift和Glance中一个tenant可以是一些镜像存储,在Network中一个tenant可以是一些网络资源。
  Role

  • 本质就是一堆ACL的集合,用于划分权限
  • 可以通过给User指定Role,使User获得Role对应的操作权限。
  • Keystone返回给User的Token包含了Role列表,被访问的Services会判断访问它的User和User提供的Token中所包含的Role,及每个role访问资源或者进行操作的权限。
  • 系统默认使用管理Role admin和成员Role _member_ 。
  • user验证时必须带有Project(Tenant)
  Policy

  • 对于Keystone service来说,Policy就是一个JSON文件,默认是/etc/keystone/policy.json。通过配置这个文件,Keystone实现了对User基于Role的权限管理。
  • OpenStack对User的验证除了OpenStack的身份验证以外,还需要鉴别User对某个Service是否有访问权限。Policy机制就是用来控制User对Project(Tenant)中资源的操作权限。
  Project(Tenant)

  • 是一个人、或服务所拥有的资源集合。不同的Project之间资源是隔离的,资源可以设置配额。
  • 在一个Project(Tenant)中可以包含多个User,每一个User都会根据权限的划分来使用Project(Tenant)中的资源。比如通过Nova创建虚拟机时要指定到某个Project中,在Cinder创建卷也要指定到某个Project中。
  • User访问Project的资源前,必须要与该Project关联,并且指定User在Project下的Role,一个assignment(关联)即:Project-User-Role
  Service:即Openstack中运行的各个组件服务。
  Endpoint

  • 是一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL
  • 不同的region有不同的endpoint(我们可以通过endpoint的region属性去定义多个region)。
  • 当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。
  • Endpoint 分为三类:




    • admin url –> 给admin用户使用,Port:35357
    • internal url –> OpenStack内部服务使用来跟别的服务通信,Port:5000
    • public url –> 其它用户可以访问的地址,Port:5000

  Service与Endpoint关系介绍:

  • 在openstack中,每一个service都有三种endpoint. Admin, public, internal(创建完service后需要为其创建API EndPoint. )
  • Admin是用作管理用途的,如它能够修改user/tenant(project)。
  • public 是让客户调用的,比如可以部署在外网上让客户可以管理自己的云。
  • internal是openstack内部调用的。
  • 三种endpoints 在网络上开放的权限一般也不同。Admin通常只能对内网开放,public通常可以对外网开放,internal通常只能对安装有openstack对服务的机器开放。

DSC0000.gif endpoint举例  V3新增的概念:

  • Tenant 重命名为 Project
  • 添加了 Domain 的概念
  • 添加了 Group 的概念
  第二部分
  keystone管理和保存了user信息,管理user相关的tenant,role,group和domain等;用户credential的存放,验证,token管理,下图是各部分关系
DSC0001.jpg

  第三部分

  • User: has account credentials, is associated with one or more projects or domains
  • Group: a collection of users, is associated with one or more projects or domains
  • Project: unit of ownership in OpenStack, contains one or more users
  • Domain: unit of ownership in OpenStack, contains users, groups and projects
  • Role: a first-class piece of metadata associated with many user-project pairs.
  • Token: identifying credential associated with a user or user and project
  • Extras: bucket of key-value metadata associated with a user-project pair.
  • Rule: describes a set of requirements for performing an action.

回到顶部五 keystone与openstack其他组件关系
DSC0002.png


回到顶部六 keystone与其他组件协同工作流程
  以用户新建一台vm为例介绍整体流程中keystone发挥的作用
DSC0003.png

DSC0004.png


回到顶部七 keystone工作流程详解
  (1) User从Keystone获取令牌以及服务列表;
  (2) User访问服务时,亮出自己的令牌。
  (3)相关的服务向Keystone求证令牌的合法性。
DSC0005.png


  •   用户alice登录keystone系统(password或者token的方式),获取一个临时的token和catalog服务目录(v3版本登录时,如果没有指定scope,project或者domain,获取的临时token没有任何权限,不能查询project或者catalog)。
  •   alice通过临时token获取自己的所有的project列表。
  •   alice选定一个project,然后指定project重新登录,获取一个正式的token,同时获得服务列表的endpoint,用户选定一个endpoint,在HTTP消息头中携带token,然后发送请求(如果用户知道project name或者project id可以直接第3步登录)。
  •   消息到达endpoint之后,由服务端(nova)的keystone中间件(pipeline中的filter:authtoken)向keystone发送一个验证token的请求。(token类型:uuid需要在keystone验证token,pki类型的token本身是包含用户详细信息的加密串,可以在服务端完成验证)
  •   keystone验证token成功之后,将token对应用户的详细信息,例如:role,username,userid等,返回给服务端(nova)。
  •   服务端(nova)完成请求,例如:创建虚拟机。
  •   服务端返回请求结果给alice。

运维网声明 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-388413-1-1.html 上篇帖子: 乐视云计算基于OpenStack的IaaS实践 下篇帖子: openstack 部署笔记--neutron控制节点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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