OpenStack組件——Keystone身份認證

1.keystone介紹

       keystone 是OpenStack的組件之一,用於爲OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。雲環境中全部的服務之間的受權和認證都須要通過 keystone. 所以 keystone 是雲平臺中第一個即須要安裝的服務。node

做爲 OpenStack 的基礎支持服務,Keystone 作下面這幾件事情:
    (1)管理用戶及其權限
    (2)維護 OpenStack Services 的 Endpoint
    (3)Authentication(認證)和 Authorization(鑑權)python

 2.keystone中的幾個概念

1)Usermysql

User指任何可使用OpenStack的實體,能夠是真正的用戶,能夠是其餘系統或服務。linux

User訪問OpenStack時,keystone會對其進行驗證。redis

admin:openstack平臺的超級管理員,負責openstack服務的管理和訪問權限sql

demo: 常規(非管理)任務應該使用無特權的項目和用戶,全部要建立 demo 項目和 demo 用戶。數據庫

除了admin和demo,OpenStack也爲nova、cinder、glance、neutron服務建立了相應的User。json

 

2)Credentialsbootstrap

Credentials是User用來證實本身身份的信息,能夠是:vim

(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-openstackclient
    yum install openstack-selinux

 

2)準備數據庫

    yum install mariadb mariadb-server python2-PyMySQL
    vim /etc/my.cnf.d/openstack.cnf
        [mysqld]
        bind-address = 192.168.52.101
        default-storage-engine = innodb
        innodb_file_per_table = on
        max_connections = 4096
        collation-server = utf8_general_ci
        character-set-server = utf8


    systemctl enable mariadb.service
    systemctl start mariadb.service

    mysql_secure_installation    #進行數據庫初始化

 

3)搭建消息隊列服務

    yum install rabbitmq-server

    systemctl restart rabbitmq-server.service
    systemctl enable rabbitmq-server.service

    建立openstack用戶
    rabbitmqctl add_user openstack openstack
    rabbitmqctl set_permissions openstack ".*" ".*" ".*"

 

4)建立緩存服務

    yum install memcached python-memcached

    vim /etc/sysconfig/memcached
    OPTIONS="-l 127.0.0.1,::1,controller,node1"

    systemctl restart memcached.service
    systemctl enable memcached.service

 

4.部署Keystone服務

1)安裝和配置

(1)登陸數據庫

    mysql -uroot -p
    MariaDB [(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_wsgi

    vim /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 keystone
    keystone-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.conf
    ServerName 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.conf
    lrwxrwxrwx 1 root root   38 7月  29 14:47 wsgi-keystone.conf -> /usr/share/keystone/wsgi-keystone.conf

    systemctl restart httpd.service
    systemctl enable httpd.service

 

(7)設置登陸信息

    vim openrc
    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://node1:35357/v3
    export OS_IDENTITY_API_VERSION=3

    source 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 issue
    Password:
    +------------+-------------------------------------------------------------------------------------------+
    | 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 [-] done
    2019-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 [-] done
    2019-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 [-] done
    2019-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.log
    192.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
相關文章
相關標籤/搜索