Keystone组件提供统一的完整的OpenStack身份验证,服务目录,令牌和访问策略服务。其数据源可以来自SQL、LDAP、Key/Value。大多数使用者会采用定制化的Keystone认证服务,本博客后续将提供一个定制化开发实例。
Keystone服务的配置流程:
- 修改配置文件
// debug和verbose两项建议设置为True,以便保存更多的详细信息
# vi /etc/keystone/keystone.conf
admin_token = <your token>
debug = True
verbose = True
connection = mysql://<dbuser>:<passwd>@<dblink>/keystone
- 创建Keystone数据库,并建立表结构
# mysql -uroot -p -e "CREATE TABLE keystone"
# mysql -uroot -p -e "GRANT ALL PRIVILEGES ON keystone.* TO '<dbuser>' @ '<dblink>' IDENTIFIED BY '<passwd>';"
// 初始化表结构
# keystone-manage db_sync
- 启动服务并验证其运行正常
# service keystone restart
# service keystone status
// 有时候配置选项参数不同,服务也可以正常运行,但是使用Keystone的时候会报错,故进一步确认
# export OS_SERVICE_TOKEN=<your token> // /etc/keystone/keystone.conf中制定的token
# export OS_SERVICE_ENDPOINT=http://<ip>:<port>/<version>/
# keystone user-list
上述最后一行命令未报错即标识Keystone服务启动正常。
4. 创建Keystone管理员用户
Openstack的权限认证采用的是RBAC,所以我们需要分别建立用户组、用户组权限及用户,同时将三者关联起来。
// 创建一个角色 admin
keystone role-create --name=admin
// 创建一个具有管理权限的租户 admin
keystone tenant-create --name=admin
// 创建一个用户admin,并设置密码
keystone user-create --name=admin --pass="<passwd>"
// 将上述三者关联起来
keystone user-role-add --user admin --role admin --tenant admin
- 定义Keystone使用的Services和API Endpoints
Openstack中所有的组件都需要对外提供一个API Endpoints,不同组件之间利用此Endpoint完成服务交互。既然Keystone承担了认证授权的功能,则任何组件都需要将自身提供的服务及对应的Endpoints注册到Keystone中。故,Keystone服务自身也需要注册,参考如下流程:
// 创建一个Keystone服务
# keystone service-create --name keystone --type identity --description 'Openstack Identity'
// 创建一个Keystone API Endpoint
# keystone endpoint-create --service-id <id obtained from above step> --publicurl '<different types of url>'
- 使用Keystone客户端命令行
a. token认证 – 适用于Keystone中暂时还未创建管理员权限用户的情况
// 环境变量
# export OS_SERVICE_TOKEN=<yout token>
# export OS_SERVICE_ENDPOINT=<endpoint_url>
b. 用户名密码认证 – 一旦建立了管理员权限用户,建议使用此种认证方式
// 环境变量
# export OS_TENANT_NAME=admin
# export OS_USERNAME=admin
# export OS_PASSWORD=<passwd>
# export OS_AUTH_URL="<auth_url>"
可以将上述需要导入的变量写入一个文件,然后每次使用source file来导入系统环境变量中。