OpenStack Keystone概念、命令和配置小结

来源:互联网 发布:剑三道姑捏脸数据 编辑:程序博客网 时间:2024/04/28 10:55

1       概述

Keystone(OpenStackIdentity Service)是OpenStack框架中,负责身份验证、服务规则和服务令牌的功能,它实现了OpenStack的Identity API。同时作为一个通用的云OS验证系统可以和已有的后端用户目录服务整合,例如:LDAP。

Keystone可以分解为两个核心功能,单点登录和服务发现。Keystone类似一个服务总线,或者说是整个Openstack框架的注册表,其他服务通过Keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用,都需要经过Keystone的身份验证,以获得目标服务的Endpoint来找到目标服务。

2       概念和命令

2.1        Catalog

Service Catalog(服务目录)是Keystone为OpenStack提供的一个REST API端点列表,并以此作为决策参考。

  • keystone catalog # 可以显示所有已有的service
  • keystone catalog --service <service-type> # 显示某个service信息

2.2        Endpoint

Endpoint,直译为“端点”,它是一个服务暴露出来的访问地址,具有region属性。如果需要访问一个服务,必须知道它的Endpoint。因此,在Keystone中包含一个Endpoint模板(EndpointTemplate),这个模板提供了所有存在的服务Endpoints信息。一个EndpointTemplate包含一个URLs列表,列表中的每个URL都对应一个服务实例的访问地址,并且具有public、private和admin这三种权限:publicurl可以被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。

  • keystone endpoint-create # Create a new endpointassociated with a service,输入keystone help endpoint-create可以查看更详细的操作指南

    1. --region <endpoint-region> # region表示不同的范围,类似c++中命名空间,把服务“隔离”。
    2. --service <service>, --service-id <service-id>, --service_id <service-id> # Name or ID of service associated with Endpoint
    3. --publicurl <public-url> # Public URL endpoint
    4. --adminurl <admin-url> # Admin URL endpoint
    5. --internalurl <internal-url> # Internal URL endpoint

  • keystone endpoint-delete # Delete a service endpoint
  • keystone endpoint-get # Find endpoint filtered by aspecific attribute or service type,输入keystone helpendpoint-get可以查看更详细的操作指南

    1. --service <service-type> # Service type toselect
    2. --endpoint-type <endpoint-type> # Endpointtype to select
    3. --attr <service-attribute> # Service attributeto match for selection
    4. --value <value> # Value of attribute to match

  • keystone endpoint-list # List configured serviceendpoints

2.3        Role

Role即角色,Roles代表一组用户可以访问哪些资源的权限,例如Nova中的虚拟机、Glance中的镜像等。用户可以被添加到任意一个全局的或租户内的角色中。在全局的Role中,用户的Role权限作用于所有的租户,即可以对所有的租户执行Role规定的权限;在租户内的Role中,用户仅能在当前租户内执行Role规定的权限。Role和policy配合使用。

  • keystone role-create # Create new role
  • keystone role-delete # Delete role
  • keystone role-get # Display role details
  • keystone role-list # List all roles

2.4        Service

Service即服务,如Nova、Glance、Swift等。一个服务可以确认当前用户是否具有访问其资源的权限。但是当一个用户尝试着访问其租户内的Service时,他必须知道这个Service是否存在以及如何访问这个Service,这里通常使用一些不同的名称表示不同的服务。在上文中谈到的Role,实际上也是可以绑定到某个service的。例如,当Swift需要一个管理员权限的访问进行对象创建时,对于相同的role我们并不一定也需要对Nova进行管理员权限的访问。为了实现这个目标,我们应该创建两个独立的管理员Role,一个绑定到Swift,另一个绑定到Nova,从而互不影响。

  • keystone service-create # Add service to ServiceCatalog,输入keystone help service-create可以查看更详细的操作指南

    1. --name <name> # Name of new service (must beunique)
    2. --type <type> # Service type (one of:identity, compute, network, image, or object-store)
    3. --description <service-description> # Descriptionof service

  • keystone service-delete # Delete service fromService Catalog
  • keystone service-get # Display service from ServiceCatalog
  • keystone service-list # List all services in ServiceCatalog

2.5        Tenant

Tenant即租户,它是各个服务中的一些可以访问的资源的集合。例如,在Nova中一个Tenant可以是一些机器,在Swift和Glance中一个Tenant可以是一些镜像存储,在Quantum中一个tenant可以是一些网络资源。用户默认的总是绑定到某些Tenant上。

  • keystone tenant-create # Create new tenant,输入keystone helptenant-create可以查看更详细的操作指南

  1. --name <tenant-name> # New tenant name (mustbe unique)
  2. --description <tenant-description> # Descriptionof new tenant (default is none)
  3. --enabled <true|false> # Initial tenantenabled status (default true)

  • keystone tenant-delete # Delete tenant
  • keystone tenant-get # Display tenant details
  • keystone tenant-list # List all tenants
  • keystone tenant-update # Update tenant name,description, enabled status

2.6        User

User即用户,他们代表可以通过Keystone进行访问的人或程序。用户通过认证信息(credentials,如密码、API Keys等)进行验证。

从用户的角度来看,它归属于一个或多个Project(即Tenant),并且在每个项目中充当一个角色。所以我们需要创建User、Tenant、Role,并将它们关联起来。

  • l  keystone user-create # Create new user,输入keystone helpuser-create可以查看更详细的操作指南

  1. --name <user-name> # New user name (must beunique)
  2. --tenant <tenant>, --tenant-id<tenant-id> # New user default tenant,创建用户时可以不指定tenant,后续通过user-role-add关联到某个tenant
  3. --pass <pass> # New user password
  4. --email <email> # New user email address
  5. --enabled <true|false> # Initial user enabledstatus (default true)

  • keystone user-delete # Delete user
  • keystone user-get # Display user details
  • keystone user-list # List users,输入keystone helpuser-list可以查看更详细的操作指南

  1. --tenant<tenant>, --tenant-id <tenant-id> # 列出某个租户下的所有用户

  • keystone user-password-update # Update user password
  • keystone user-role-add # Add role to user,输入keystone helpuser-role-add可以查看更详细的操作指南
    1. --user <user>, --user-id <user>,--user_id <user> # Name or ID of user
    2. --role <role>, --role-id <role>,--role_id <role> # Name or ID of role
    3. --tenant <tenant>, --tenant-id <tenant> #Name or ID of tenant

  • keystone user-role-list # 查看某个租户下的某个用户属于哪个角色,输入keystone help user-role-list可以查看更详细的操作指南

    1. --user <user>, --user-id <user> # Listroles granted to a user
    2. --tenant <tenant>, --tenant-id <tenant># List roles granted on a tenant

  • keystone user-role-remove # Remove role from user,输入keystone helpuser-role-remove可以查看更详细的操作指南

    1. --user <user>, --user-id <user>,--user_id <user> # Name or ID of user
    2. --role <role>, --role-id <role>,--role_id <role> # Name or ID of role
    3. --tenant <tenant>, --tenant-id <tenant># Name or ID of tenant

  • keystone user-update # Update user's name, email,and enabled status

2.7        其它概念

Authentication:鉴权,即对用户身份鉴别的一个过程。

Token:令牌,是一个任意比特的文本。对用户鉴权完毕之后,Keystone会为用户颁发一个令牌,这样用户在请求其他服务的时候,只需要亮出自己的令牌即可,而不需要发送自己的密钥。令牌的有效期是有限的,可以随时被撤回。

Credential:用来证明用户身份的证据。为了给用户提供一个令牌,需要用证书来唯一标识一个Keystone用户的密码或其它信息。

Keystone由一组内部服务组成,这些服务包含:

  • Identity:该服务主要提供对身份信息的验证包含用户、租户和角色,以及相关联的元数据。
  • Token:该服务验证并且管理所有的令牌信息。
  • Catalog:该服务提供对所有服务接入点的注册管理。
  • Policy:该服务提供了一个基于角色的授权管理系统及规则管理接口。

2.8        认证流程

Keystone的认证流程,如下图所示:


3       配置文件

3.1        Keystone配置文件

Keystone的配置文件目录为/etc/keystone/,包含有如下默认配置文件:

  • keystone.conf:Keystone的核心配置文件。
  • logging.conf:Keystone的日志配置文件。
  • policy.json:Keystone的policy配置文件;例如,"admin_required":"role:admin or is_admin:1"表示Role为admin或者is_admin为True才被视为管理员角色。
  • default_catalog.templates:Keystone的catalog后端配置为template模式时的catalog模板。

3.2        Swift配置文件

对于Swift来说,/etc/swift/proxy-server.conf这个配置文件的主要配置项如下:

  • [filter:keystoneauth]部分中的operator_roles这一项表示被允许访问的Role,所有未在此被列出的Role都将无法成功访问Swift。

4      参考资料

1) 《OpenStack Keystone服务剖析》,http://blog.csdn.net/u011196209/article/details/9285977

2) 《OpenStack Identity API v3》,https://github.com/openstack/identity-api/blob/master/openstack-identity-api/v3/src/markdown/identity-api-v3.md

0 0
原创粉丝点击