天天看点

Keystone 认证服务

  1. 项目介绍​Keystone是Openstack框架中负责身份认证、服务管理、服务规则和服务令牌的功能,它实现了Openstack的Identity API。​Keystone是整个openstack框架的注册表,其他服务通过keystone来注册其服务的endpoint,任何服务之间相互的调用,都需要经过keystone的身份验证来获得目标服务的endpoint来找到目标服务。Keystone主要包含两个主要部件:验证、权限和服务目录。​
  2. 基本概念​User用户,表示拥有用户名,密码,邮箱等帐号信息的个人​Tenant租户,它是各个服务中的一些可以访问的资源集合。可以理解为一个项目,默认user是绑定在Tenant上的。​Role 角色,代表用户可以访问的资源权限。Users可以被添加到任意一个全局的 或 租户内的角色中。在全局的role中,用户的role权限作用于所有的租户,即可以对所有的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。​Service服务,一个openstack的服务,例如nova,swift等。通常用不同的名称来表示不同的服务。 ​Endpoint端点,一个可以通过网络访问的地址,即服务访问的URL。具有public,private,admin三种权限。​Token 令牌,是一把特殊的钥匙。用户通过用户名和密码获取某个租户的令牌,可以实现单点登录。​Template 模版,一个端点集合,代表一组可用的openstack服务端点。​
  3. 认证服务的流程
  1. 用户名通过自己的用户名和密码向keystone申请令牌token,keystone认证其用户名和密码后,若正确则返回一个token1。​
  2. 用户携带token1向keystone申请查询其所拥有的租户,keystone认证token1后,返回其拥有的所有租户的tenant信息。​
  3. 用户选择一个租户,通过用户名和密码向keystone申请令牌token,keystone认证用户名,密码和租户后,返回token2。(前两步是为了查询用户所拥有的租户信息的,如果已经知道租户信息,则省略前两步)。​
  4. 用户携带token2向keystone发送提供服务的请求,keystone认证token2后(包括此token是否有效,是否有创建服务的权限等等),把请求下发到相应的服务,服务按照需求执行相应的操作并把执行结果返回给用户。​ 从上面的流程得知,用户是从keystone获取令牌和服务列表。并在访问某个服务的时候提供自己的token,然后此服务向keystone求证所携带token的合法性。​
  5. 配置认证服务所需要的数据库首先在数据库中创建名为keystone的数据库:

然后授权keystone用户对keystone库拥有完全权限:​

Keystone 认证服务
  1. 安装keystone软件包

启动memcached服务​

Keystone 认证服务

修改keystone的配置文件/etc/keystone/keystone.conf​

a.在[DEFAULT]中,设置admin的token​

Keystone 认证服务

注:随机码用openssl rand –hex 10 生成​

b.在[database]中,设置数据库授权​

Keystone 认证服务

c.在[memcache]中,设置memcache-server​

Keystone 认证服务

d.在[token]中,配置UUID token和memcache driver​

Keystone 认证服务

e.在[revoke]中,配置SQL的撤销​

Keystone 认证服务

填充认证服务数据库​

Keystone 认证服务
  1. 配置HTTP服务修改http配置文件/etc/httpd/conf/httpd.conf,设置服务主机名

创建/etc/httpd/conf.d/wsgi-keystone.conf文件,并写入以下的行:​

Keystone 认证服务

创建WSGI结构目录​

Keystone 认证服务

切换到上面的目录下,然后下载main和admin的文件,其实两个文件是一样的。​

Keystone 认证服务

设置该目录的权限和属组​

Keystone 认证服务

启动http服务和开机自启​

Keystone 认证服务
  1. 创建服务实体和API endpoint首先创建认证token和endpoint:

为认证服务创建服务实体:​

Keystone 认证服务

Openstack为每个服务创建了三个API endpoint:admin,internal,public。Admin的endpoint默认是可以修改用户和租户的,而其余的是不可以的。这样分开也是为了安全考虑。另外,openstack为了扩展性还支持多区域,默认使用RegionOne区域。​

创建认证服务的API endpoint:​

Keystone 认证服务

注:每个openstack的服务都必须在认证服务中有一个服务的实体和API endpoint​

  1. 创建租户、用户、角色创建admin租户

创建admin用户​

Keystone 认证服务

创建admin的角色​

Keystone 认证服务

添加admin的角色到admin的租户和用户中​

Keystone 认证服务

创建一个service的租户,用来存放openstack的各种服务:​

Keystone 认证服务

创建一个普通租户demo:​

Keystone 认证服务

创建demo的用户​

Keystone 认证服务

创建角色user​

Keystone 认证服务

添加角色user到demo租户和用户中:​

Keystone 认证服务
  1. 认证服务的搭建​
  2. 认证服务的验证​

为了安全考虑,禁用临时认证token,修改/usr/share/keystone/keystone-dist-paste.ini​

删除[pipeline:public_api],[pipeline:admin_api],[pipeline:api_v3]区域中的admin_token_auth​

取消OS_TOKEN和OS_URL的定义 OS_TOKEN OS_URL​

作为admin用户,请求一个认证token​

Keystone 认证服务

为了支持版本3的API,要求至少包含default域或者使用ID:​

Keystone 认证服务

作为admin请求租户列表;​

Keystone 认证服务

作为admin请求用户列表:​

Keystone 认证服务

作为admin请求角色列表:​

Keystone 认证服务

作为demo用户向API v3请求token:​

Keystone 认证服务

作为demo用户不能操作admin用户的命令。​

创建环境脚本admin-openrc.sh和demo-openrc.sh​

admin-openrc.sh​

Keystone 认证服务

Demo-openrc.sh​

Keystone 认证服务

验证环境脚本;​

Keystone 认证服务

到此keystone服务搭建完毕。​