首页 > 代码库 > keystone中间件的使用配置

keystone中间件的使用配置

  OpenStack的其他服务在使用keystone作为统一的身份认证服务器时,需要部署keystone中间件即keystonemiddleware,中间件的作用主要是拦截用户发往各个服务的请求,对其中用户的令牌(token)进行验证后拒绝用户的请求或将该请求传递给下一个中间件。

  OpenStack中有一些服务具有自己的认证方式,因此想要使用统一的身份认证方式就必须正确配置keystone中间件。

  本文就介绍如何配置和使用keystonemiddleware。

  

  1.  首先我们要在各个服务的paste.ini文件中,设置如下的两个filter(通常是自带的):

  [filter:authtoken]

  paste.filter_factory = keystonemiddleware.auth_token:filter_factory

 

  [filter:keystonecontext]

  paste.filter_factory = nova.api.auth:NovaKeystoneContext.factory

 

  2. 接着我们要将第一步中定义的authtoken keystonecontext中间件放置在目标pipeline的适当位置,这样我们就完成了对paste.ini文件的修改。事实上,第三步中写入到.conf文件中的配置信息[keystone_authtoken]中的内容也可以紧接着[filter:authtoken]字段补充,但是这样会使得paste.ini文件变得臃肿,所以我们将具体驱动的细节配置统一放入.conf文件,使得paste.ini文件简洁清晰。

  但是对于对象存储服务swift而言,该服务没有自己的paste.ini配置文件,不过这不重要,因为我们可以将filter的声明和具体配置都写入swift的.conf配置文件中。

 

  3.  在各个服务的.conf文件中设置:

  [DEFAULT]

  ...

  auth_strategy=keystone

  ...

  [keystone_authtoken]

  auth_port = 35357

  auth_host = 127.0.0.1

  admin_user = admin

  admin_password = keystone123

  注意这些设置内容可以在这两个配置文件中的任何一个设置,但是paste.ini文件中的配置信息具有优先权,一旦设置,将会取代.conf中的配置信息发挥作用。

 

  下面我们列出所有keystonemiddleware可选的配置项

  1.  auth_admin_prefix: 路径前添加的前缀

  2.  auth_host:(必须)提供keystone服务的API终端URL

  3.  auth_port: (可选, 默认35357)用来验证令牌的端口

  4.  auth_protocol: (可选, 默认https)用来验证令牌的协议类型

  5. auth_uri: (可选, 默认auth_protocol://auth_host:auth_port)认证令牌的完整URL

  6. auth_version: 要使用的管理API 版本

  7. delay_auth_decision: (可选, 默认off). 如果是on, 中间将将不会拒绝无效的认证请求,而是将决策的权利委托给下游的WSGI组件

  8. http_connect_timeout: (可选) 向keystone服务器请求多久就算超时

  9. http_request_max_retries: (默认3) 向keystone服务器请求的次数

  10.   http_handler: (可选) Allows to pass in the name of a fake http_handler callback function used instead of httplib.HTTPConnection orhttplib.HTTPSConnection. Useful for unit testing where network is not available.

  11.   admin_token: 必须指定该项或下面的全部三个选项,该选项的值应与keystone配置时设置的管理员令牌相同.

  12.   admin_user, admin_password, admin_tenant_name: 如果没有提供管理员令牌,那么这三个配置项就应该是已经在keystone中配置好的服务账户

  13.   certfile: (必须)如果keystone服务器要求客户端提供cert,那么该项必须提供

  14.   keyfile: (必须) 如果keystone服务器要求客户端提供cert,那么必须提供该项,如果certfile包含私钥,那么该项的值可以与certfile相同.

  15.   cafile: (可选, 默认使用系统的CA ) 用来验证https连接的CA 文件路径.

  16.   insecure: (可选, 默认False) 不要验证https连接.

  17.   signing_dir: (可选) 储存与PKI令牌相关文件的目录

  18.   memcached_servers: (可选)如果定义, 指定用于缓存的 memcache server(s)

  19.   token_cache_time: (默认300秒) 为了避免过度请求和验证,中间件会使用内存缓存机制来缓存每一个keystone服务器返回的令牌。该项仅在定义了memcache_servers 后才生效,设为-1将会完全关闭缓存

  20.   cache: (可选) Env key for the swift cache

  21.   memcache_security_strategy: (可选) 如果定义, 指示令牌数据是否需要认证或认证加密。可接受的值包括MAC和ENCRYPT 。MAC选项将会在缓存中采用HMAC算法认证令牌,ENCRYPT选项将会在缓存中加密和认证。任何不是这两个值或空值中的一个,那么中间件将会在初始化阶段报错。

  22.   memcache_secret_key: (定义memcache_security_strategy后必需)该选项用来导出密钥;

  23.   memcache_pool_dead_retry: (可选), 重试以前memcache服务器被认为“已死”的秒数;

  24.   memcache_pool_maxsize: (可选), 每个memcache服务器最大开放连接数;

  25.   memcache_pool_socket_timeout: (可选), 套接字连接memcache服务器的超时秒数;

  26.   memcache_pool_unused_timeout: (可选), 不用的memcached连接多久会被关闭;

  27.   memcache_pool_conn_get_timeout: (可选), 一个操作从连接池中获得一个memcache客户端连接所等待的时间;

  28.   memcache_use_advanced_pool: (可选), 采用高级(eventlet安全的)memcache客户池,当前该高级连接池仅适用于python 2.x.

  29.   include_service_catalog: (可选, 默认True) 指示是否设置X-Service-Catalog 字段. 如果为False, 中间件在验证令牌的过程中将不会获取服务目录,同时也不会设置X-Service-Catalog 字段。

  30.   enforce_token_bind: (默认 permissive) 用来控制令牌绑定的使用和类型。设置为disabled 将不会检查令牌绑定,permissive 将会验证系统已知的绑定类型,忽略那些系统中没有定义的绑定类型;strict验证系统已知的绑定类型,拒绝系统未知类型的令牌绑定;required允许任何类型的令牌绑定。最后,绑定的方法必须出现在令牌中。

  31.   check_revocations_for_cached: (默认False), 如果为true,则会检查缓存令牌的撤销列表,要求在keystone服务器上配置PKI令牌;

  32.   hash_algorithms: (默认md5), 用来哈希PKI令牌的算法,可以使一个或多个,只要是python标准的hashlib.new()支持的算法即可。按照该项给出的顺序进行哈希尝试,因此将最为偏好的算法设置在该项的第一个。当从一个较不安全的算法向一个较安全的算法过渡时,该项通常设置为多个值,一旦所有旧令牌都过期,该项应该被设置成单一的值从而提升性能。

  

keystone中间件的使用配置