3. Keystone(Rocky) - 认证服务

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354