OpenStack.001 基本概念之keystone

1  keystone的功能

  • 管理用户及其权限
  • 维护 OpenStack Services(openstack服务) 的 Endpoint(连接地址)
  • Authentication(认证)和 Authorization(授权)

注:搭建好其他服务之后,如果不告诉keystone有这个服务的话就无法使用这个服务,而endpoint是服务的连接地址,必须把endpoint告知给keystone,这样服务才会被keystone识别,进而可以在openstack环境使用这个服务。

1)验证用户

      验证用户的最简单的方法是请求凭据(登录+密码,登录+密钥等),并通过某些数据库进行检查。单独的服务用户还能忍,百度那么多的服务一个一个的认证登陆,那不扯蛋一样的嘛。所以需要一个管理认证的服务。

2)认证包括的内容和关系

      第一个基础是用户。他们代表某人或某事,可以通过Keystone访问。用户具有可以检查的凭据,如密码或API密钥。

      第二个是租户,是keystone2.0的概念。它代表了所谓的Nova项目,这意味着聚合每个服务中的资源数量。例如,租户可以在Nova中有一些机器,在Swift / Glance中有一些镜像,在Neutron中有几对网络。默认情况下,用户始终绑定到某些租户。

      第三种与授权相关的对象类型是角色。它们表示假定具有对资源的一些访问的一组用户,例如,一些虚拟机在Nova和一些镜像在Glance。用户可以添加到全局或租户中的任何角色。在第一种情况下,用户获得由角色对所有租户中的资源暗示的访问;在第二种情况下,用户的访问被限制到相应租户的资源。例如,用户可以是所有租户的操作者和他自己的项目的管理员。

2  keystone 的名词概念

1)user

      指代任何使用 OpenStack 的实体,可以是真正的用户,其他系统或者服务。当 User 请求访问 OpenStack 时,Keystone 会对其进行验证。除了 admin 和 demo,OpenStack 也为 nova、cinder、glance、neutron 服务创建了相应的 User。 admin 也可以管理这些 User。

2)credentials

      user用来证明自己身份的信息,可以是用户名/密码、token、API  key,或者其他高级方式

3)authentication

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

4)token

      是由数字和字母组成的字符串,User 成功Authentication 后由 Keystone 分配给 User。 Token 用做访问 Service  的  Credential ;Service  会通过  Keystone  验证  Token  的有效性 ;Token  的有效期默认是  24  小时

5)project

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

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

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

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

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

6)service

      包括  Compute  (Nova)、Block  Storage  (Cinder)、Object  Storage  (Swift)、Image Service  (Glance)  、Networking  Service  (Neutron)  等。每个 Service 都会提供若干个 Endpoint,User 通过 Endpoint 访问资源和执行操作。

7)endpoint

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

8)role

Authentication(认证)  解决的是“你是谁?”的问题

Authorization(鉴权)   解决的是“你能干什么?”的问题

      Keystone 是借助 Role 来实现 Authorization 的,Keystone定义Role ,可以为 User 分配一个 或多个 Role。 Service 通过各自的/etc/***/policy.json对 Role 进行访问控制,决定每个 Role 能做什么事情。

      openstack默认配置只区分admin  role ,如果需要对特定的role进行授权,可以修改policy.json 。

注意:在openstack中openstack命令集适用于全局,可以管理和查看各类信心;keystone-manage用于启动keystone模块数据、初始化数据库、生成SSL相关的证书和私钥。

3  keystone认证管理的过程

用户通过keystone认证之后,拿着token访问Nova,Nova接收到请求之后,先分解请求,如果查看请求详情后,发现请求是正确的,就发送给keystone进行验证,以此类推。每个服务再接收到请求之后,都会先对请求进行分解,然后再验证token。

4  token的几种模式

      Token 类型的选择涉及多个因素,包括 Keystone server 的负载、region 数量、安全因素、维护成本以及 token 本身的成熟度。region 的数量影响 PKI/PKIZ token 的大小,从安全的角度上看,UUID 无需维护密钥,PKI 需要妥善保管 Keystone server 上的私钥,Fernet 需要周期性的更换密钥,因此从安全、维护成本和成熟度上看,UUID > PKI/PKIZ > Fernet 如果:

  • Keystone server 负载低,region 少于 3 个,采用 UUID token。
  • Keystone server 负载高,region 少于 3 个,采用 PKI/PKIZ token。
  • Keystone server 负载低,region 大与或等于 3 个,采用 UUID token。
  • Keystone server 负载高,region 大于或等于 3 个,K 版本及以上可考虑采用 Fernet token。fernet模式是最受欢迎的,fernet支持阶段轮巡。keystone会将token表复制给各个服务,各个服务首先在token表中认证,如果表中没有该token才会再跟keystone再次索要更新了的token表

5  domain

domain—— 表示 project 和 user 的集合,在公有云或者私有云中常常表示一个客户

group —— 一个domain 中的部分用户的集合

project —— IT基础设施资源的集合,比如虚机,卷,镜像等

role —— 角色,表示一个 user 对一个 project resource 的权限

     token —— 一个 user 对于某个目标(project 或者 domain)的一个有限时间段内的身份令牌

      Domain 可以认为是 project,user,group 的 namespace。一个 domain 内,这些元素的名称不可以重复,但是在两个不同的domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的 domain 的 id 或者 name。

      Group 是一个 domain 部分 user 的集合,其目的是为了方便分配 role。给一个 group 分配role,结果会给 group 内的所有 users 分配这个 role。

      Role 是全局(global)的,因此在一个 keystone 管辖范围内其名称必须唯一。role 的名称没有意义,其意义在于 policy.json 文件根据 role 的名称所指定的允许进行的操作。简单地,role 可以只有 admin 和 member 两个,前者表示管理员,后者表示普通用户。但是,结合 domain 和 project 的限定,admin 可以分为 cloud admin,domain admin 和 project  admin。

      policy.json 文件中定义了 role 对某种类型的资源所能进行的操作,比如允许 cloud admin 创建domain,允许所有用户创建卷等

      project 是资源的集合,其中有一类特殊的project 是 admin project。通过指定admin_project_domain_name 和 admin_project_name 来确定一个 admin project,然后该project 中的 admin 用户即是 cloud admin。

      Token 具有 scope(范围) 的概念,分为 unscoped token,domain­scoped token 和 projectscoped token。下文有说明。Token 是针对不同 scope 认证状态,这里的 scope 是指 project 和 domain,因此一共有三种

scoped token:

project­scoped token:针对一个 project 的 token,它包含 service catalog, a set of roles,和那个 project 的详细信息

domain­scoped token:针对一个 domain 的 token,它具有有限的使用场景,只用于domain 层面的操作。与 project­scoped 相比,它只具有优先的 sevice catalog

unscoped token: 

      当既不指定 project 也不指定 domain 为 scope ,同时 user 也没有default project 时获得的 token,这是一种特殊的token。


转载请注明出处,谢谢!

猜你喜欢

转载自blog.csdn.net/qq_35550345/article/details/87794546