• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > OpenStack Mitaka 版本中的 domain 和 admin详解

OpenStack Mitaka 版本中的 domain 和 admin详解

作者:SammyLiu 字体:[增加 减小] 来源:互联网

本文主要包含OpenStack,Mitaka,domain,OpenStack,Mitaka,admin等服务器相关知识,SammyLiu 希望可以进行参考

OpenStack 的 Keystone V3 中引入了 Domain 的概念。引入这个概念后,关于 admin 这个role 的定义就变得复杂了起来。

本文测试环境是社区 Mitaka 版本。

1. Domain,project,user,role,token 的概念和关系

1.1 概况

简单来说,

  1. Domain - 表示 project 和 user 的集合,在公有云或者私有云中常常表示一个客户
  2. Group - 一个domain 中的部分用户的集合
  3. Project - IT基础设施资源的集合,比如虚机,卷,镜像等
  4. Role - 角色,表示一个 user 对一个 project resource 的权限
  5. Token - 一个 user 对于某个目标(project 或者 domain)的一个有限时间段内的身份令牌

它们之间的关系用一个不完整的图来表示:

说明:

  1. Domain 可以认为是 project,user,group 的 namespace。 一个 domain 内,这些元素的名称不可以重复,但是在两个不同的domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的 domain 的 id 或者 name。
  2. Group 是一个 domain 部分 user 的集合,其目的是为了方便分配 role。给一个 group 分配 role,结果会给 group 内的所有 users 分配这个 role。
  3. Role 是全局(global)的,因此在一个 keystone 管辖范围内其名称必须唯一。role 的名称没有意义,其意义在于 policy.json 文件根据 role 的名称所指定的允许进行的操作。
  4. 简单地,role 可以只有 admin 和 member 两个,前者表示管理员,后者表示普通用户。但是,结合 domain 和 project 的限定,admin 可以分为 cloud admin,domain admin 和 project admin。
  5. policy.json 文件中定义了 role 对某种类型的资源所能进行的操作,比如允许 cloud admin 创建 domain,允许所有用户创建卷等
  6. project 是资源的集合,其中有一类特殊的project 是 admin project。通过指定 admin_project_domain_name 和 admin_project_name 来确定一个 admin project,然后该project 中的 admin 用户即是 cloud admin。
  7. Token 具有 scope 的概念,分为 unscoped token,domain-scoped token 和 project-scoped token。下文有说明。

1.2 Token scope 和 Scoped token

官方文档在这里,我这里写的只是我的理解。

Token 是针对不同 scope 认证状态,这里的 scope 是指 project 和 domain,因此一共有三种 scoped token:

  1. project-scoped token:针对一个 project 的 token,它包含 service catalog, a set of roles, 和那个 project 的详细信息
  2. domain-scoped token:针对一个 domain  的 token,它具有有限的使用场景,只用于 domain 层面的操作。与 project-scoped 相比,它只具有优先的 sevice catalog
  3. unscoped token:当既不指定 project 也不指定 domain 为 scope ,同时 user 也没有 default project 时获得的 token,这是一种特殊的token。

下文有获取不同类型 token 的方法的描述。

2. 各种 admin

admin 是一种特别的 role。下面分两种情况讨论。

2.1 使用默认 policy.json 时候的 admin 的权限

2.1.1 Identity 资源的 admin 权限

对 Identiy 项目中的大多数资源的操作都需要 admin 权限,比如:

  "identity:get_user": "rule:admin_required",
  "identity:list_users": "rule:admin_required",
  "identity:create_user": "rule:admin_required",
  "identity:update_user": "rule:admin_required",
  "identity:delete_user": "rule:admin_required",

也就是说,以  user 为例,如果一个用户没有 admin 角色,那么他将不能对 user 做任何操作。而 policy.json 文件中对 admin 的约束非常简单:

"admin_required": "role:admin or is_admin:1",

也就是说,满足两个条件中的一个,它就是 administrator:

  1. 他拥有 'admin' 这个 role,而这里的 ‘admin' 是写死的,因为默认就是使用这个名字,当然你可以修改它,比如创建一个 cloud_admin role,然后修改这里为 role:cloud_admin,其效果是一样的。
  2. is_admin:1:这个只是在项目启动后才使用,其判断条件是操作使用的token 和 keystone.conf 中的 admin_token 相同。

从 policy.json 文件可以看出来,只要赋予一个用户 admin 角色,那么他就是 administrator 了,可以操作 OpenStack cloud 内的所有资源。

2.1.2 OpenStack 基础设施资源的权限控制

以 Cinder 为例,它也使用 policy.json 文件进行 role 的 policy 控制,它区分了 admin,project owner 和普通 user 的权限:

  "context_is_admin": "role:admin",
  "admin_or_owner": "is_admin:True or project_id:%(project_id)s",
  "default": "rule:admin_or_owner",
  "admin_api": "is_admin:True",

  "volume:create": "",
  "volume:delete": "rule:admin_or_owner",
  "volume:get": "rule:admin_or_owner",
  "volume:get_all": "rule:admin_or_owner",
  "volume:get_volume_metadata": "rule:admin_or_owner",

可见:

  1. 创建 volume:不限特定权限,只要是 user 角色就行
  2. 删除 volume,获取所有volumes:需要 admin 或者 project owner 权限,owner 是指用户 token 的 project id 和被删除 volume 的 project id 相同(也就是说对于一个 project 中的两个普通用户 user1 和 user2,user2 可以删除 user1 创建的 volume,但是不可以删除)

2.2 使用 policy.v3cloudsample.json 时候的 admin 的权限

 从上面 2.1.1 可以看出,使用默认 policy.json 文件时的 admin 权限控制非常粗,不能支持 Keystone V3 API 中引入的域的概念。因此,社区提供了支持多域的 policy.v3cloudsample.json 文件。

2.2.1 Identity 中的 admin 

  "admin_required": "role:admin",
  "cloud_admin": "role:admin and (token.is_admin_project:True or domain_id:2b871f5dba704f74923ac01b4fcd7205)",
  "service_role": "role:service",
  "service_or_admin": "rule:admin_required or rule:service_role",
  "owner" : "user_id:%(user_id)s or user_id:%(target.token.user_id)s",
  "admin_or_owner": "(rule:admin_required and domain_id:%(target.token.user.domain.id)s) or rule:owner",
  "admin_and_matching_domain_id": "rule:admin_required and domain_id:%(domain_id)s",
  "service_admin_or_owner": "rule:service_or_admin or rule:owner",

它定义了几种 admin:

cloud admin (cloud_admin):必须拥有 admin role;其 token 在 admin project 内 或者在指定的 domain 内。Cloud admin 的主要职责是

  1. 创建 domains
  2. 为每个 domain 创建 domain admin

domain admin:必须拥有 admin role;token 的 domain id 必须和被操作资源(包括user,project 等) 的 domain id 相同。其主要职责包括

  1.  在该 domain 内创建 projects
  2. 在该 domain 内创建 users
  3. 分配 project 的权限给 user,包括 admin 和 user,前者就是 project admin,后者是 project user

只有 Cloud admin 拥有的一些权限:

  1. region 的增删改
  2. service 的增删改
  3. endpoint 的增删改
  4. domain 的列表,增删改
  5. role 增删改

只有 Domain admin 拥有的一些权限(当然这些权限 cloud admin 都拥有):

  1. 获取特定 domain 的信息
  2. 列表 projects,以及增删改
  3. 列表 users 和 groups
  4. user 增删改

2.2.2 示例规则说明

"admin_required": "role:admin",

"identity:create_project": "rule:admin_required and domain_id:%(project.domain_id)s",

"identity:get_project": "rule:admin_required and domain_id:%(target.project.domain_id)s",

"identity:list_projects": "rule:admin_required and domain_id:%(domain_id)s",

先来看create_project,首先要求 admin角色,需要注意的是and的后半句 domain_id:%(project.domain_id)s,这条规则的意思就是 create_project 时,使用的token的 domain_id 必须等于project所在的domain的domain_id。

也就是如下场景:

1.为userA在domainA的范围内赋予admin的权限

2.userA指定domainA作为scope,申请一个domainA scope的tokenA

3.userA使用tokenA,去创建project,创建project时domain_id参数必须为domainA的id

4.创建project成功

这里有几个关键点需要注意:

  1. 首先userA在domainA内必须要有ad
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • KVM与OpenStack的前世今生(1)
  • 浅谈openstack中使用linux_bridge实现vxlan网络
  • openstack使用openvswitch实现vxlan的方法
  • 详解OpenStack之服务端口号
  • openstack共享80、443端口的实例代码
  • Centos7环境准备openstack pike的安装
  • openstack pike单机一键安装shell的方法
  • Openstack安装过程中遇到的问题汇总
  • 详解Openstack使用ubuntu镜像启动虚拟机实例
  • 详解Openstack环境准备

相关文章

  • 宝德虚拟化双机热备解决方案
  • VirtualBox安装Ubuntu Server16.04虚拟机的图文教程
  • VMware下ubuntu扩展磁盘空间的方法
  • docker利用selenium+testng实现web自动化的方法
  • 讲解使用Docker搭建Java Web运行环境
  • 详解docker容器分配静态IP
  • Docker 容器虚拟化的实用技巧总结
  • Docker run 命令的使用方法详解
  • 蘑菇街 私有云Docker实例应用
  • Docker探索namespace详解

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Docker 自动部署tomcat详解
    • VMware 克隆多台Linux机器并配置IP的方法
    • 阿里云docker容器固定应用到到某一个节点记录
    • 如何配置docker官方源并用yum安装docker
    • Docker Cloud实现部署应用操作详解
    • Docker构建pinpoint部署的方法
    • Xen虚拟化进阶篇 Xen平台下虚拟机的实时迁移
    • Dockerfile中multi-stage(多阶段构建)详解
    • 应用集成之痛:云时代也不能止痛
    • 详解Docker私有仓库Registry的搭建验证

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有