keystone身份認證服務


Keystone介紹

  keystone 是OpenStack的組件之一,用於為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。雲環境中所有的服務之間的授權和認證都需要經過 keystone. 因此 keystone 是雲平台中第一個即需要安裝的服務。

就好比說我要開一個餐廳,提供的是餐飲服務,那么我需要去工商局注冊營業執照,keystone就是openstack里面管理服務的一個服務。

作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:

管理用戶及其權限

維護 OpenStack Services 的 Endpoint

Authentication(認證:就是審查身份)和 Authorization(鑒權:審查身份過后查看具有對應的權限)

學習 Keystone,得理

 

  假如說我要投資一個酒店的項目(這里就是project),它是做服務的(這里對應到了service),我提供住宿洗浴等服務,那么我要開始宣傳了,把我的地址宣傳出去(這里就是Endpoint,服務端點,你想要享受服務,就得找到我的服務地址),在這這個項目里,我(是user),因為我是項目發起人,所以我的role是董事長,來住我酒店的人也是user,可是他們的role是顧客,普通用戶。來了以后你把你的身份信息提供給我(就是credentials),而后我做授權(authentication),我查看你預定價位的套房,從而給你授權給你相應的token(記錄了用戶的權限和信息)。

User 指代任何使用 OpenStack 的實體,可以是真正的用戶,其他系統或者服務。

當 User 請求訪問 OpenStack 時,Keystone 會對其進行驗證。Horizon 在 Identity->Users 管理 User

 

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

demo: 常規(非管理)任務應該使用無特權的項目和用戶,所有要創建 demo 項目和 demo 用戶

除了 admin 和 demo,OpenStack 也為 nova、cinder、glance、neutron 服務創建了相應的 User。 admin 也可以管理這些 User。

 

 

Credentials 是 User 用來證明自己身份的信息,可以是:

1. 用戶名/密碼

2. Token

3. API Key

4. 其他高級方式

  Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。

Token 是由數字和字母組成的字符串,User 成功 Authentication 后 Keystone 生成 Token 並分配給 User。

Token 用做訪問 Service 的 Credential

Service 會通過 Keystone 驗證 Token 的有效性

Token 的有效期默認是 24 小時

Project 用於將 OpenStack 的資源(計算、存儲和網絡)進行分組和隔離。

根據 OpenStack 服務的對象不同,Project 可以是一個客戶(公有雲,也叫租戶)、部門或者項目組(私有雲)。

這里請注意:

資源的所有權是屬於 Project 的,而不是 User。

在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project

每個 User(包括 admin)必須掛在 Project 里才能訪問該 Project 的資源。 一個User可以屬於多個 Project。

admin 相當於 root 用戶,具有最高權限

Horizon 在 Identity->Projects 中管理 Project

 

通過 Manage Members 將 User 添加到 Project

 

  OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每個 Service 都會提供若干個 Endpoint,User 通過 Endpoint 訪問資源和執行操作。

  Endpoint 是一個網絡上可訪問的地址,通常是一個 URL。Service 通過 Endpoint 暴露自己的 API。 Keystone 負責管理和維護每個 Service 的 Endpoint。

可以使用下面的命令來查看 Endpoint。

# source devstack/openrc admin admin

# openstack catalog list

 

安全包含兩部分:Authentication(認證)和 Authorization(鑒權)

Authentication 解決的是“你是誰?”的問題

Authorization 解決的是“你能干什么?”的問題

Keystone 借助 Role 實現 Authorization:

1 Keystone定義Role

2 可以為 User 分配一個或多個 Role,Horizon 的菜單為:Identity->Project->ManageMembers

 

  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的權限管理。

openstack系統基本角色有兩個:
一個是管理員admin
一個是租戶_member_

Keystone基本架構

Token: 用來生成和管理token

Catalog:用來存儲和管理service/endpoint

Identity:用來管理tenant/user/role和驗證

Policy:用來管理訪問權

keystone身份認證服務部署

keystone身份認證服務部署在controller節點上。

#第一步 下載openstack源的文件

 yum install centos-release-openstack-ocata

#下載openstack客戶端

yum install python-openstackclient

#安裝selinux組件

yum install openstack-selinux

#第二步 安裝數據庫和擴展包,版本用yum自帶的也可以,我這里用的是10.0版本

[mariadb]

name=MariaDB

baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/

gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB

gpgcheck=1

yum install mariadb mariadb-server python2-PyMySQL

#配置openstack單獨配置文件

vim /etc/my.cnf.d/openstack.cnf

#打開是空白文件,寫入如下內容

[mysqld]

bind-address = #本機IP        #寫第一個節點里集群網這個網卡的地址

 

default-storage-engine = innodb    #默認的數據庫引擎

innodb_file_per_table = on

max_connections = 4096  #最大連接數,最好寫的大一點,你平常用命令行去調用opesntack的時候,每一個操作它都會去數據里查一些信息,如果連接數寫小,它會很快把你的連接數占滿。

collation-server = utf8_general_ci  #字符集

character-set-server = utf8 

#第六步 啟動數據庫、把數據庫設置開機自啟

systemctl start mariadb

systemctl enable mariadb

#初始化數據庫

mysql_secure_installation

#第三步 安裝消息隊列服務

yum install rabbitmq-server

#啟動rabbitmq和設為開機自啟

systemctl start rabbitmq-server

systemctl enable rabbltmq-server

#在rabbitmq里創建一個openstack用戶並設置密碼為openstack

rabbitmqctl add_user openstack openstack

#設置權限

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

#讓其擁有管理員身份

rabbitmqctl set_user_tags openstack administrator

#第四步 安裝緩存服務

yum install memcached python-memcached

#修改memcached配置文件

vim /etc/sysconfig/memcached

OPTIONS="-l 127.0.0.1,::1,controller"

#啟動memcached服務和設置為開機自啟

systemctl start memcached.service

systemctl enable memcached.service

#第五步 登陸數據庫,並創建keystone這個庫

mysql -u root –p

CREATE DATABASE keystone;

#賦予權限,並允許本地登錄,第三方登陸

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'  IDENTIFIED BY 'keystone';

#第六步 安裝keystone服務,keystone這個服務是沒有自己的啟動進程了,他的啟動是調用hhtp服務對外提供服務的,想使用keystone服務,必須啟動http服務。

yum install openstack-keystone httpd mod_wsgi

#修改keystone配置文件

cd /etc/keystone/

cp keystone.conf keystone.conf.bak

vim keystone.conf

#清空所有內容,粘貼如下內容至文本

[DEFAULT]

 

[assignment]

 

[auth]

 

[cache]

 

[catalog]

 

[cors]

 

[cors.subdomain]

 

[credential]

 

[database]

connection = mysql+pymysql://keystone:keystone@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]

#第七步 同步數據庫,往我剛創建的keystone庫里倒表

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

#第八步 創建fernet key認證的配置

#設置一個keystone用戶,並讓這個用戶屬於keystone組,就是創建用戶和組

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

#創建keystone用戶身份信息,設置這個用戶的角色,並把它放置一個組里

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

#第九步 創建服務端點

keystone-manage bootstrap --bootstrap-password admin \  #這是創建一個admin用戶,並設置密碼為admin

--bootstrap-admin-url http://controller:35357/v3/ \ #管理網的服務端點

  --bootstrap-internal-url http://controller:5000/v3/ \ #內部網絡服務地址

  --bootstrap-public-url http://controller:5000/v3/ \ #公共網絡服務地址

  --bootstrap-region-id RegionOne

#第十步 編輯httpd配置文件

vim /etc/httpd/conf/httpd.conf

#找到ServerName配置段

ServerName controller

#第十一步 keystone是利用wsgi這個模塊去調用httpd,所以要創建他的軟連接至httpd配置文件目錄下

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

#啟動httpd服務並設為開機自啟

systemctl start httpd

#第十二步 創建admin用戶環境變量                           

cd /root

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://controller:35357/v3

export OS_IDENTITY_API_VERSION=3

#第十三步 登陸openstack

source openrc

#第十四步 創建域

openstack project create --domain default \

  --description "Service Project" service

#第十五步 創建demo的項目

openstack project create --domain default \

  --description "Demo Project" demo

#第十六步 創建demo用戶

openstack user create --domain default \

  --password-prompt demo

#第十七步 創建普通用戶角色user

openstack role create user

#第十八步 把demo項目里的demo用戶設置為普通角色user

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM