OpenStack组件——Keystone身份认证
1.keystone介紹
?????? keystone 是OpenStack的組件之一,用于為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。云環境中所有的服務之間的授權和認證都需要經過 keystone. 因此 keystone 是云平臺中第一個即需要安裝的服務。
作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:
?? ?(1)管理用戶及其權限
?? ?(2)維護 OpenStack Services 的 Endpoint
?? ?(3)Authentication(認證)和 Authorization(鑒權)
?2.keystone中的幾個概念
1)User
User指任何可以使用OpenStack的實體,可以是真正的用戶,可以是其他系統或服務。
User訪問OpenStack時,keystone會對其進行驗證。
admin:openstack平臺的超級管理員,負責openstack服務的管理和訪問權限
demo: 常規(非管理)任務應該使用無特權的項目和用戶,所有要創建 demo 項目和 demo 用戶。
除了admin和demo,OpenStack也為nova、cinder、glance、neutron服務創建了相應的User。
?
2)Credentials
Credentials是User用來證明自己身份的信息,可以是:
(1)用戶名/密碼
(2)Token
(3)API Key
(4)其他高級方式
?
3)Authentication
Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。
?
4)Token
Token 是由數字和字母組成的字符串,User 成功 Authentication 后 Keystone 生成 Token 并分配給 User。
(1)Token 用做訪問 Service 的 Credential
(2)Service 會通過 Keystone 驗證 Token 的有效性
(3)Token 的有效期默認是 24 小時
5)Project
Project 用于將 OpenStack 的資源(計算、存儲和網絡)進行分組和隔離。根據 OpenStack 服務的對象不同,Project 可以是一個客戶(公有云,也叫租戶)、部門或者項目組(私有云)。
注意:
(1)資源的所有權是屬于 Project 的,而不是 User。
(2)在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project
(3)每個 User(包括 admin)必須掛在 Project 里才能訪問該 Project 的資源。 一個User可以屬于多個 Project。
(4)admin 相當于 root 用戶,具有最高權限
6)Service
?????? OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每個 Service 都會提供若干個 Endpoint,User 通過 Endpoint 訪問資源和執行操作。
7)Endpoint
Endpoint 是一個網絡上可訪問的地址,通常是一個 URL。Service 通過 Endpoint 暴露自己的 API。 Keystone 負責管理和維護每個 Service 的 Endpoint。
可以使用如下命令查看Endpoint:
openstack catalog list[root@node1 ~]# openstack catalog list+----------+----------+-----------------------------------+| Name | Type | Endpoints |+----------+----------+-----------------------------------+| keystone | identity | RegionOne || | | admin: http://node1:35357/v3/ || | | RegionOne || | | public: http://node1:5000/v3/ || | | RegionOne || | | internal: http://node1:5000/v3/ || | | |+----------+----------+-----------------------------------+?
8)Role
安全包含兩部分:Authentication(認證)和 Authorization(鑒權)???
Authentication 解決的是“你是誰?”的問題
Authorization 解決的是“你能干什么?”的問題
?
Keystone 借助 Role 實現 Authorization:
Keystone定義Role
可以為 User 分配一個或多個 Role,Service 決定每個 Role 能做什么事情 Service 通過各自的 policy.json 文件對 Role 進行訪問控制。 下面是 Nova 服務 /etc/nova/policy.json 中的示例:
上面配置的含義是:對于 create、attach_network 和 attach_volume 操作,任何Role的 User 都可以執行; 但只有 admin 這個 Role 的 User 才能執行 forced_host 操作。
OpenStack 默認配置只區分 admin 和非 admin Role。 如果需要對特定的 Role 進行授權,可以修改 policy.json。
Openstack對User的驗證除了身份驗證,還需要鑒別 User 對某個Service是否有訪問權限。Policy用來定義什么角色對應什么權限。對Keystone來說,Policy其實是一個JSON文件,默認是 /etc/keystone/policy.json 。通過Policy,Keystone實現了對User的權限管理。
?
3.準備OpenStack環境
1)安裝openstack環境
yum install python-openstackclientyum install openstack-selinux?
2)準備數據庫
yum install mariadb mariadb-server python2-PyMySQLvim /etc/my.cnf.d/openstack.cnf[mysqld]bind-address = 192.168.52.101default-storage-engine = innodbinnodb_file_per_table = onmax_connections = 4096collation-server = utf8_general_cicharacter-set-server = utf8systemctl enable mariadb.servicesystemctl start mariadb.servicemysql_secure_installation #進行數據庫初始化?
3)搭建消息隊列服務
yum install rabbitmq-serversystemctl restart rabbitmq-server.servicesystemctl enable rabbitmq-server.service創建openstack用戶rabbitmqctl add_user openstack openstackrabbitmqctl set_permissions openstack ".*" ".*" ".*"?
4)創建緩存服務
yum install memcached python-memcachedvim /etc/sysconfig/memcachedOPTIONS="-l 127.0.0.1,::1,controller,node1"systemctl restart memcached.servicesystemctl enable memcached.service?
4.部署Keystone服務
1)安裝和配置
(1)登錄數據庫
mysql -uroot -pMariaDB [(none)]> create database keystone; #創建keystone數據庫MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'KEYSTONE_DBPASS'; #授予用戶權限并設置密碼,允許在本機登錄grant all privileges on keystone.* to 'keystone'@'%' identified by 'KEYSTONE_DBPASS'; #授予用戶權限并設置密碼,允許在任意主機登錄?
(2)安裝keystone包并進行配置
yum install openstack-keystone httpd mod_wsgivim /etc/keystone/keystone.conf[database]connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@node1/keystone[token]provider = fernet或者按照下列方法進行設置
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak -a #備份配置文件 vim /etc/keystone/keystone.conf #將配置文件中的內容全部刪除并添加以下內容 [DEFAULT][assignment][auth][cache][catalog][cors][cors.subdomain][credential][database]connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone[domain_config][endpoint_filter][endpoint_policy][eventlet_server][federation][fernet_tokens][healthcheck][identity][identity_mapping][kvs][ldap][matchmaker_redis][memcache][oauth1][oslo_messaging_amqp][oslo_messaging_kafka][oslo_messaging_notifications][oslo_messaging_rabbit][oslo_messaging_zmq][oslo_middleware][oslo_policy][paste_deploy][policy][profiler][resource][revoke][role][saml][security_compliance][shadow_users][signing][token]provider = fernet[tokenless_auth][trust] View Code?
(3)加載數據到數據庫
su -s /bin/sh -c "keystone-manage db_sync" keystone?
(4)初始化fernet秘鑰存儲庫
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystonekeystone-manage credential_setup --keystone-user keystone --keystone-group keystone?
(5)引導認證服務
keystone-manage bootstrap --bootstrap-password admin \> --bootstrap-admin-url http://node1:35357/v3/ \> --bootstrap-internal-url http://node1:5000/v3/ \> --bootstrap-public-url http://node1:5000/v3/ \> --bootstrap-region-id RegionOne?
(6)配置httpd服務
vim /etc/httpd/conf/httpd.confServerName node1 #只修改此處 ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ #創建軟鏈接 [root@node1 ~]# cd /etc/httpd/conf.d[root@node1 conf.d]# ls -l總用量 16-rw-r--r-- 1 root root 2926 11月 5 2018 autoindex.conf-rw-r--r-- 1 root root 366 11月 5 2018 README-rw-r--r-- 1 root root 1252 10月 30 2018 userdir.conf-rw-r--r-- 1 root root 824 10月 30 2018 welcome.conflrwxrwxrwx 1 root root 38 7月 29 14:47 wsgi-keystone.conf -> /usr/share/keystone/wsgi-keystone.confsystemctl restart httpd.servicesystemctl enable httpd.service?
(7)設置登錄信息
vim openrcexport OS_USERNAME=adminexport OS_PASSWORD=adminexport OS_PROJECT_NAME=adminexport OS_USER_DOMAIN_NAME=Defaultexport OS_PROJECT_DOMAIN_NAME=Defaultexport OS_AUTH_URL=http://node1:35357/v3export OS_IDENTITY_API_VERSION=3source openrc在命令行模式下登入openstack?
2)創建域、項目、用戶、角色
創建service項目openstack project create --domain default --description "Service Project" service+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | Service Project || domain_id | default || enabled | True || id | a1710fdff32a4605a8ab549f8680dd45 || is_domain | False || name | service || parent_id | default |+-------------+----------------------------------+創建demo項目openstack project create --domain default --description "Demo Project" demo+-------------+----------------------------------+| Field | Value |+-------------+----------------------------------+| description | Demo Project || domain_id | default || enabled | True || id | 9f4f23f099bb4da3bc41c99f7a8a4f20 || is_domain | False || name | demo || parent_id | default |+-------------+----------------------------------+查看項目openstack project list+----------------------------------+---------+| ID | Name |+----------------------------------+---------+| 7d3f0cd56a104c60a36196675f62428e | admin || 9f4f23f099bb4da3bc41c99f7a8a4f20 | demo || a1710fdff32a4605a8ab549f8680dd45 | service |+----------------------------------+---------+?
(2)創建用戶demo并設置密碼
openstack user create --domain default --password-prompt demo手動輸入密碼或:openstack user create --domain default --password=demo demo+---------------------+----------------------------------+| Field | Value |+---------------------+----------------------------------+| domain_id | default || enabled | True || id | e880cc125bb541128c9bc47233d91732 || name | demo || options | {} || password_expires_at | None |+---------------------+----------------------------------+查看用戶openstack user list+----------------------------------+-------+| ID | Name |+----------------------------------+-------+| cd9ce1eb589b445e9b98c53a36bdc8d8 | admin || e880cc125bb541128c9bc47233d91732 | demo |+----------------------------------+-------+?
(3)創建角色user
openstack role create user+-----------+----------------------------------+| Field | Value |+-----------+----------------------------------+| domain_id | None || id | 348324e7aee745229551eb412fd96a18 || name | user |+-----------+----------------------------------+查看角色openstack role list+----------------------------------+----------+| ID | Name |+----------------------------------+----------+| 348324e7aee745229551eb412fd96a18 | user || 9fe2ff9ee4384b1894a90878d3e92bab | _member_ || c6b4ab1a75d041e298f59570bd7dd46e | admin |+----------------------------------+----------+?
(4)將demo項目下的demo用戶設置為user角色
openstack role add --project demo --user demo user?
3)驗證登錄信息
(1)取消環境變量值
unset OS_AUTH_URL OS_PASSWORD?
(2)輸入admin用戶登錄信息登錄
openstack --os-auth-url http://node1:35357/v3 \> --os-project-domain-name default \> --os-user-domain-name default \> --os-project-name admin \> --os-username admin token issuePassword:+------------+-------------------------------------------------------------------------------------------+| Field | Value |+------------+-------------------------------------------------------------------------------------------+| expires | 2019-07-29T09:44:06+0000 || id | gAAAAABdPrHWXAwrKHKnU3CMr5odqMjYwK90C5bD6rdPEfoJzTuAh-G3YZcb0SHzr8ek8qaS5zgN4haULRxpgcrli || | XJ32hhKvmN8UZTSRgW58l_Nu1e1l4gjDjxXyUS25a4krWJ46brr4qpq3AvUu40_B9ccw9Z_7vjiDA_- || | FTKpmqFnRNrAH-k || project_id | 7d3f0cd56a104c60a36196675f62428e || user_id | cd9ce1eb589b445e9b98c53a36bdc8d8 |+------------+-------------------------------------------------------------------------------------------+?
5.Troubleshoot
OpenStack排查問題的方法主要靠日志,每個service都有自己的日志文件。
Keystone主要有兩個日志:keystone.log 和 keystone_access.log,保存在 /var/log/keystone 與 /var/log/httpd/ 目錄中。
vim /var/log/keystone/keystone.log 2019-07-29 14:36:47.607 43150 INFO migrate.versioning.api [-] 66 -> 67...2019-07-29 14:36:48.060 43150 INFO migrate.versioning.api [-] done2019-07-29 14:36:48.060 43150 INFO migrate.versioning.api [-] 67 -> 68...2019-07-29 14:36:48.065 43150 INFO migrate.versioning.api [-] done2019-07-29 14:36:48.065 43150 INFO migrate.versioning.api [-] 68 -> 69...2019-07-29 14:36:48.069 43150 INFO migrate.versioning.api [-] done2019-07-29 14:36:48.069 43150 INFO migrate.versioning.api [-] 69 -> 70...2019-07-29 14:36:48.073 43150 INFO migrate.versioning.api [-] done?
vim /var/log/httpd/keystone_access.log192.168.52.101 - - [29/Jul/2019:15:01:40 +0800] "GET /v3 HTTP/1.1" 200 245 "-" "osc-lib/1.3.1 keystoneauth1/2.18.0 python-requests/2.11.1 CPython/2.7.5"192.168.52.101 - - [29/Jul/2019:15:01:42 +0800] "POST /v3/auth/tokens HTTP/1.1" 201 1082 "-" "osc-lib/1.3.1 keystoneauth1/2.18.0 python-requests/2.11.1 CPython/2.7.5"192.168.52.101 - - [29/Jul/2019:15:02:21 +0800] "GET /v3 HTTP/1.1" 200 245 "-" "osc-lib/1.3.1 keystoneauth1/2.18.0 python-requests/2.11.1 CPython/2.7.5"192.168.52.101 - - [29/Jul/2019:15:02:23 +0800] "POST /v3/auth/tokens HTTP/1.1" 201 1082 "-" "osc-lib/1.3.1 keystoneauth1/2.18.0 python-requests/2.11.1 CPython/2.7.5"?
如果需要得到詳細的日志信息可以將配置文件中的debug選項打開
vim /etc/keystone/keystone.conf[DEFAULT]debug=True?
轉載于:https://www.cnblogs.com/Agnostida-Trilobita/p/11263074.html
總結
以上是生活随笔為你收集整理的OpenStack组件——Keystone身份认证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据产品-数据库
- 下一篇: C#多线程与并行编程方面的电子书,中英文