美文网首页
3. Keystone(Rocky) - 认证服务

3. Keystone(Rocky) - 认证服务

作者: 找呀找提莫 | 来源:发表于2020-07-19 19:49 被阅读0次

3.1 Keystone说明

  • Keystone是OpenStack Identity Service的项目名称,是一个负责身份管理与授权的组件;
  • 主要功能:
    • 实现用户的身份认证;
    • 基于角色的权限管理;
    • openstack其他组件的访问地址和安全策略管理;
  • 主要目的是给整个openstack的各个组件(nova, cinder, glance...)提供一个统一的验证方式;

3.2 Kenstone功能

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

3.3 名词解释

  • User(用户)

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

  • Credentials(凭证)

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

  • Authentication(验证)

    确认用户身份的过程

  • Token(令牌)

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

  • Tenant(租户)

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

  • Service(服务)

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

  • Endpoint(端点)

    一个用户访问某个服务的可以通过网络进行访问的地址,通常是一个URL地址;

  • Role(角色)

    定制化的包含特定用户权限和特权的集合;

  • Keystone Client(keystone命令行工具)

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

3.4 部署 Keystone

3.4.1 创建Keystone数据库

create database keystone character;

grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';
grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone';

flush privileges;

3.4.2 在初始配置生成一个随机值作为管理员令牌

[root@controller ~]# openssl rand -hex 10;
7b152382d84315c02cf0

3.4.3 安装配置Keystone

yum install openstack-keystone python2-openstackclient http mod_wsgi

vim /etc/keystone/keystone.conf
# 添加管理员令牌
admin_token = 7b152382d84315c02cf0
# 修改数据库配置
[database]
connection = mysql+pymysql://keystone:keystone@controller/keystone
#                             用户      密码
[token]
provider = fernet

3.4.3 初始化keystone数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone

3.4.4 初始化Fernet keys

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

在Queen版本前,keystone需要运行在两个不同的端口上,用来运行identify v2 API,除5000端口外,还需要35357上运行一个单独的管理服务;移除v2 API后,keystone只需要一个5000端口就可以运行所有API

keystone-manage bootstrap --bootstrap-password admin \
  --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

3.4.5 配置apache托管keystone

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

vim +95 /etc/httpd/conf/httpd.conf
ServerName controller.alec.com:80

systemctl start httpd
systemctl enable httpd

3.4.6 通过设置环境变量来配置管理账户

export OS_USERNAME=admin
export OS_PASSWORD=admin
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

# 设置环境变量后,会自动生成admin域、项目、用户、角色、服务实体、API端点(怀疑是3.4.4生成的,待验证)

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

# 创建 example 域(default域已经存在,这是只是创建域的一个方法)
openstack domain create --description "An Example Domain" example
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | An Example Domain                |
| enabled     | True                             |
| id          | 94f16414c32249b29cbe19dea06009ef |
| name        | example                          |
| tags        | []                               |
+-------------+----------------------------------+

创建一个的service项目,OpenStack的组件会关联到这个项目中

# 在 default 域中创建 service 项目
openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 059e13ceff1f4bfc9b9a0a3466d573bf |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+

创建一个普通项目、用户、角色

# 创建 demo 项目
openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | ff5f94d5a8714249a42a7b4f6bc1587b |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
| tags        | []                               |
+-------------+----------------------------------+


# 创建 demo 用户
openstack user create --domain default --password-prompt demo
User Password:demo
Repeat User Password:demo
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | bfda144c255847d3a9209ea282764c3b |
| name                | demo                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

# 创建 user 角色
openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 5eb3696fba5f47f0b2ed1c1c60c9ff5c |
| name      | user                             |
+-----------+----------------------------------+

# 添加 user 角色到 demo 项目和用户
openstack role add --project demo --user demo user

3.5 验证服务

取消 OS_TOKEN OS_URL

unset OS_TOKEN OS_URL

作为 admin 用户,请求认证令牌

openstack --os-auth-url http://controller:35357/v3 \
  --os-project-domain-name default --os-user-domain-name default \
  --os-project-name admin --os-username admin token issue
  Password: admin
+------------+--------------------------------------------------------------------------------
| Field      | Value
+------------+--------------------------------------------------------------------------------
| expires    | 2020-07-17T09:08:29+0000
| id         | gAAAAABfEwS6GJWppKNjn0YDWJunrn_hQJmCCiuvCXt3KVgnVBiQefZ6CqXDozGxA0ChYn1XQ-20rP0Fz6O7sqvI_HnfReWcpgQTbgvo0SsawBR6QmUSlyCKp9yOe7fcNU9m4Dt1OEAQ_hN6WNm_1leHJ-pdPmem29lPtMha-DHiMifzuJKNL8k
| project_id | c6f8d8041d5c4f128c4d6c489156b875
| user_id    | 5d7d7304b8b44434a6e942fe94728c4a

作为demo 用户,请求认证令牌

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
Password: demo
+------------+-------------------------------------------------------------
| Field      | Value
+------------+-------------------------------------------------------------
| expires    | 2020-07-17T09:11:52+0000
| id         | gAAAAABfEwT5BOP7z_jXLp2ZfkPXHBLtxfCJIKKSisboBvnWtF9qll4xb26xlERvXwe3nW7AN2rtpoS93i24KWgwUHDhQsfPxb7NbXEbFHeSsy3rpebJ_FSqb0jerzFWo2TR9f6KQgqNldUl8DbjapK7hMdAChIAPcyB6mcR8SiHugC7ven-ONQ
| project_id | ff5f94d5a8714249a42a7b4f6bc1587b
| user_id    | bfda144c255847d3a9209ea282764c3b

3.6 创建OpenStack 客户端环境脚本

3.6.1 创建脚本

创建admin-openrc

cat <<EOF >> 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
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF

创建demo-openrc

cat <<EOF > 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
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF

3.6.2 使用脚本

加载admin-openrc文件来身份认证服务的环境变量位置和admin项目和用户证书

source admin-openrc

请求认证令牌

openstack token issue
+------------+--------------------------------------------------------------------------
| Field      | Value
+------------+--------------------------------------------------------------------------
| expires    | 2020-07-17T09:31:14+0000
| id         | gAAAAABfEwVPiOYCR6nRZUPBGDMozhzg9UoLCy4mXOY-ww9CpWSK7Wi8Pw3mrFxhogh9zupK4pa4aERerFsYAq6-P3qxvJhROz1D6RQzWmNOCJPWe6BAe_XYW1oEUN-Q97veTqNetY0kH0UlHCRHutmVYZPW6Lb3n0PNSEtCPUgi5g8iAIF5vJY
| project_id | c6f8d8041d5c4f128c4d6c489156b875
| user_id    | 5d7d7304b8b44434a6e942fe94728c4a

相关文章

网友评论

      本文标题:3. Keystone(Rocky) - 认证服务

      本文链接:https://www.haomeiwen.com/subject/hcprkktx.html