OpenStack Victoria搭建(五) Keystone认证服务

介绍

什么是 Keystone

Keystone是 OpenStack Identity Service 的项目名称,是一个负责身份管理与授权的组件

主要功能: 实现用户的身份认证,基于角色的权限管理,及 OpenStack 其他组件的访问地址和安全策略管理。

为什么需要 Keystone

Keystone 项目的主要目的是给整个 OpenStack 的各个组件(nova,cinder,glance…)提供一个统一的验证方式

  • 用户管理
    • Account账户
    • Authentication 身份认证
    • Authorization 授权
  • 服务目录管理

术语

User (用户)
一个人、系统或服务在 OpenStack中的数字表示。已经登录的用户分配令牌环以访问资源。用户可以直接分配给特定的租户,就像隶属于每个组。

Credentials (凭证)
用于确认用户身份的数据。例如:用户名和密码,用户名和API key,或由认证服务提供的身份验证令牌。

Authentication(验证)
确认用户身份的过程。

Token(令牌)
一个用于访问 OpenStack API和资源的字母数字字符串。一个临时令牌可以随时撤销,并且持续一段时间有效。

Tenant(租户)
一个组织或孤立资源的容器。租户和可以组织或隔离认证对象。根据服务运营的要求,一个租户可以映射到客户、账户、组织或项目。

Service(服务)
OpenStack服务,例如计算服务(nova),对象存储服务(swift),或镜像服务(glance)。它提供一个或多个端点,共用户访问资源和执行操作。

Endpoing(端点)
一个用于访问某个服务的可以通过网络进行访问的地址,通常是一个URL地址。

Role(角色)
定制化的包含特定用户权限和特权的权限集合。

Keystone Client(keystone命令行工具)
Keystone 的命令行工具。通过该工具可以创建用户、角色、服务和端点等。

keystone与其他组件协同工作流程

keystone是用户与云平台交互的第一个服务,一旦认证通过,用户就会使用自己的身份来访问其他的opnestack服务,同样,被访问的openstack服务会去跟keystone再次确认用户(不能只能用户的片面之词)并且通过keystone可以发现其他服务(catalog的原因),keystone的还可以整合其他的用户管理系统,比如LDAP
在这里插入图片描述

keystone工作流程详解

  1. User从Keystone获取令牌以及服务列表;
  2. User访问服务时,亮出自己的令牌。
  3. 相关的服务向Keystone求证令牌的合法性。

在这里插入图片描述

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

安装和配置

本节介绍如何在控制器节点上安装和配置 OpenStack Identity 服务,代号为 keystone。出于可扩展性目的,此配置部署了 Fernet 令牌和 Apache HTTP 服务器来处理请求。

配置数据库

  1. 使用数据库访问客户端以root用户身份连接数据库服务器:
    mysql -u root -p
    
  2. 创建keystone数据库:
    MariaDB [(none)]> CREATE DATABASE keystone;
    
  3. 授予对keystone数据库的适当访问权限:
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
    IDENTIFIED BY 'KEYSTONE_DBPASS';
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
    IDENTIFIED BY 'KEYSTONE_DBPASS';
    
    替换KEYSTONE_DBPASS为合适的密码。
  4. 退出数据库访问客户端。

安装和配置组件

✔ 笔记
默认配置文件因发行版而异。您可能需要添加这些部分和选项,而不是修改现有的部分和选项。此外,配置片段中的省略号 ( …) 表示您应该保留的潜在默认配置选项。

  1. 运行以下命令来安装软件包:

    yum install openstack-keystone httpd python3-mod_wsgi
    

    ✔ 笔记
    对于 RHEL7/Centos7 及以上安装包 mod_wsgi。

  2. 编辑/etc/keystone/keystone.conf文件并完成以下操作:

    • 在该[database]部分中,配置数据库访问:

      [database]
      #  ...
      connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
      

      替换KEYSTONE_DBPASS为您为数据库选择的密码。

      笔记
      注释掉或删除connection该部分中的任何其他选项 [database]。

      笔记
      在此示例中,主机controller必须是可解析的。

    • 在该[token]部分中,配置 Fernet 令牌提供程序:

      [token]
      # ...
      provider = fernet
      
  3. 填充身份服务数据库:

    su -s /bin/sh -c "keystone-manage db_sync" keystone
    
  4. 初始化 Fernet 密钥存储库:

    笔记
    和标志用于指定将用于运行 keystone 的操作系统的用户/组–keystone-user。–keystone-group提供这些是为了允许在另一个操作系统用户/组下运行 keystone。在下面的示例中,我们调用 user & group keystone。

    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
    
  5. 引导身份服务:

    ✔ 笔记
    在 Queens 发布之前,keystone 需要在两个单独的端口上运行以适应 Identity v2 API,后者通常在端口 35357 上运行单独的仅管理员服务。删除 v2 API 后,keystone 可以在同一端口上运行所有接口。

     keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
      --bootstrap-admin-url http://controller:5000/v3/ \
      --bootstrap-internal-url http://controller:5000/v3/ \
      --bootstrap-public-url http://controller:5000/v3/ \
      --bootstrap-region-id RegionOne
    

    替换ADMIN_PASS为适合管理用户的密码。

配置 Apache HTTP 服务器

  1. 编辑/etc/httpd/conf/httpd.conf文件并配置 ServerName选项以引用控制器节点:

    ServerName controller
    

    如果该ServerName条目尚不存在,则需要添加该条目。

  2. 创建/usr/share/keystone/wsgi-keystone.conf文件的链接:

    ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
    

SSL

安全部署应将 Web 服务器配置为使用 SSL 或在 SSL 终结器后面运行。

完成安装

  1. 启动 Apache HTTP 服务并将其配置为在系统启动时启动:
    systemctl enable httpd.service
    systemctl start httpd.service
    
  2. 通过设置适当的环境变量来配置管理帐户:
    export OS_USERNAME=admin
    export OS_PASSWORD=ADMIN_PASS
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    
    此处显示的这些值是从创建的默认值。keystone-manage bootstrap
    替换为keystone-install-configure-rdo中命令中ADMIN_PASS使用的密码 。keystone-manage bootstrap

创建域、项目、用户和角色

Identity 服务为每个 OpenStack 服务提供身份验证服务。身份验证服务使用域、项目、用户和角色的组合。

创建域

openstack domain create --description "An Example Domain" example

在这里插入图片描述

创建服务

openstack project create --domain default \
  --description "Service Project" service

在这里插入图片描述

创建项目

openstack project create --domain default --description "Demo Project" demo

在这里插入图片描述

创建用户

openstack user create --domain default  --password-prompt demo

创建角色

openstack role create demo

在这里插入图片描述

将role角色添加到demo项目和demo用户

openstack role add --project demo --user demo demo

验证

  1. 取消设置临时变量OS_AUTH_URL和OS_PASSWORD 环境变量:

    unset OS_AUTH_URL OS_PASSWORD
    
  2. 作为admin用户,请求一个身份验证令牌:

    openstack --os-auth-url http://controller:5000/v3 \
      --os-project-domain-name Default --os-user-domain-name Default \
      --os-project-name admin --os-username admin token issue
    

    在这里插入图片描述

  3. 作为user在上面创建的用户,请求一个身份验证令牌:

    openstack --os-auth-url http://controller:5000/v3 \
      --os-project-domain-name Default --os-user-domain-name Default \
      --os-project-name demo --os-username demo token issue
    

在这里插入图片描述


创建 OpenStack 客户端环境脚本

前面的部分使用环境变量和命令选项的组合通过 openstack客户端与身份服务进行交互。为了提高客户端操作的效率,OpenStack 支持简单的客户端环境脚本,也称为 OpenRC 文件。这些脚本通常包含所有客户端的通用选项,但也支持独特的选项。

创建脚本

为项目和用户admin创建客户端环境脚本。

  1. 创建并编辑admin_openrc文件并添加以下内容:

    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=admin
    export OS_USERNAME=admin
    export OS_PASSWORD=ADMIN_PASS
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    

    替换为您在身份服务中ADMIN_PASS为用户admin选择的密码。

  2. 创建并编辑demo_openrc文件并添加以下内容:

    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=demo
    export OS_USERNAME=demo
    export OS_PASSWORD=DEMO_PASS
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    

    替换为您在身份服务中DEMO_PASS为用户demo选择的密码。

使用脚本

要将客户端作为特定项目和用户运行,您只需在运行它们之前加载关联的客户端环境脚本。例如:

  1. 加载文件以使用身份服务的位置以及项目和用户凭据admin-openrc填充环境变量:admin
    source ./admin_openrc
    
  2. 请求身份验证令牌:
    openstack token issue
    
    在这里插入图片描述
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值