keystone学习小结2

简介

通过源码 官方文档 进行学习

官方文档

架构

identity

提供user和group的鉴权及数据

可以用这些数据处理增删改查的请求

这些服务在某些情况也可以托管在授权的服务中,有认证任务时,授权的服务会执行认证的任务,而不会把这些转发到identity再去认证

user

表示一个独立的api消费者,user必须在domain下

group

是user的container,group也必须在domain下

resource

resource服务提供project和domain数据

project

openstack所有resource必须由一个project托管,project在domain下

domain

domain是一个高层次的container,包括了user,group,project,role

domain间的资源可以通过assignment进行访问

assignment

role

user可基于role访问,即权限给role,再把role给user,user访问权限是他有的role里的所有权限

role assignment

由三元组构成:role,resource(project或domain),identity(user或group)

token

当user或group认证后,用token管理

catalog

提供endpoint注册和discover

Policy

实际部署环境中大量行为是否需要被允许,可以基于行为的用户是否被授权

用户被允许时,可以有这几种情况:1用户是admin 2用户在被授权的user列表里

keystone的policy部分逻辑由oslo.policy实现

rule

如enforce时,会检查信息在credential里是否有无,若有则pass 若无则enforce失败

一般来说,给user加一个role,常会加到user的metadata中

capability rbac(还没实现)

即基于action进行的鉴权

Authentication

keystone有多种插件支持,password是一种常用的,进行鉴权时,需要提供鉴权的resource和identity。比如对用户鉴权,需要用户名id,project id,用户密码。如果想通过用户名而不是用户id鉴权,可以添加domain信息(因为user名在domain下唯一存在),而userid在domain之间,整个部署环境中都是独一无二的

基础知识

identity相关概念

authentication

确认用户的identity。对于新的请求,keystone会进行大量useri id的鉴权

当鉴权通过时,初次认证用户需要用户名和密码,认证通过后,keysstone会给一个authenticattion| cde

credentials

确认用户身份的东西,比如username, userid,pwd或token

domain

是一个identity service v3实例。domain可以表示个人,公司,或一块地方等。

endpoint

一个网络可访问的地址,通常是个url。通过endpoint你可以访问一个service,

token

一个alpha字母组成的字符串,token可以在任意时间被废除,token在一定时间范围内有效,token可以使action有权进行其操作

user

user需要先login,然后拿着分配的token去执行操作。user可以被分配给project

用户管理

identity服务可以给user分配一个project和一个role

user在不同的project,可以拥有不同的role

每个服务配置目录下默认有个policy.yaml,可通过这个控制用户是否可进行某些动作

服务管理

包含wsgi后台 apache进程

初始identity

在keystone可以使用之前,需要拥有一些基础数据,比如第一个用户,endpoint等,这个过程叫bootstrapping identity

bootstrap可以通过命令实现keystone-manage bootstrap --bootstrap-password 123 --bootstrap-username test --bootstrap-project-name admin --bootstrap-role-name admin...

管理project user role

project也叫tenant或account,user可以是project的成员

role的分配

openstack role add --user username --project project_name role_name

检验role分配结果:

openstack role assignment list --project project_name --user user_name --names

implied role

创建role也可以继承现有的role出发,类似类的继承,可通过命令实现

openstack implied role create role_name --implied-role implied-role-name

查看implied role

openstack implied role list

创建并管理服务和服务用户

服务catalog

注册到keystone catalog的openstack服务可被keystone discover,服务catalog可通过静态模板文件或动态数据库表进行管理

当你的服务catalog不会随时间而改动很多时可以考虑使用静态模板catalog

动态数据库表的配置

服务用户

每个服务都有一个服务的用户

当不希望通过identity服务鉴权用户,而是其他service自己鉴权时,需要为每个service创建一个service user,user需要有管理员权限。然后为所有service创一个project,为每一个service创个user,给每个user-project对分配一个管理员role,这个管理员role可以让各个服务自己判断发送到各自服务的请求

创建服务用户

创建project openstack project create test_project --domain default

创建user openstack user create user-name -password xxx

给service user分配管理员role openstack role add --project project_name --user user_name

配置服务token

服务之间也存在大量相互的行为,如用户请求创镜像,galnce等镜像创完,请求才到存储服务,如果镜像太大,可能导致请求到存储时,token过期。当glance发出请求,可以带上服务自己的token,叫服务token

当服务收到其他服务的请求时,会校验请求的token是否能匹配到合适的service user。这个可以在各服务配置文件的[keystone_authtoken] section配置

当service token有效时,即使用户的token 过期,该请求也有效

service_token_roles是可以使token生效的role列表,可以设置为service user的role名

service_token_roles_required也设置为true

keystone配置

源码

api通信流程

创建告警

aodh alarm create -> # 命令创建告警

aodhclient -> # client解析+拼接参数

keystoneauth1 -> # 请求发送前调v3/auth/token生成token,放到请求header中X-Auth-Token

aodh-api -> # 将带有X-Auth-Token的创建告警请求发到aodh-api处理请求

keystonemiddleware -> # 校验token

aodh-api # 返回结果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值