项目四 OpenStack身份管理

news2025/1/15 6:41:42

任务一  理解身份服务

1.1 Keystone的基本概念

认证 Authentication —— 确认 用户身份的过程,又称身份验证
凭证 Credentials —— 称凭据,是用于确认用户身份的数据
令牌 Token —— 访问 OpenStack API 和各种资源需要提供的一种特殊的文本 字符串。
用户 User —— 使用 OpenStack 云服务的个人、系统或服务的账户名称
项目 Project —— 分配 和隔离资源或身份对象的一个容器,也是一个权限组织形式 。域 Domain —— 项目 和用户的集合,目的是为身份实体定义管理界限
Group —— 表示 域所拥有的用户集合的容器
角色 Role —— 用于 定义用户权利和权限的集合
端点 Endpoint —— OpenStack 组件能够访问的网络地址,通常是一个 URL
服务 Service —— 提供 一个或多个端点,供用户通过这些端点访问资源和执行操作。
分区 Region —— OpenStack 部署的通用分区

1.2 •Keystone的主要功能

身份 认证( Authentication —— 令牌 的发放和校验
用户 授权( Authorization —— 授予 用户在一个服务中所拥有的权限
用户 管理( Account —— 管理 用户账户
服务 目录( Service Catalog —— 每个 OpenStack 服务对外提供一个可用的服务目录和相应的 API 端点

1.3  •Keystone的管理层次结构

1.4 •Keystone的认证流程

1.5•查看当前的Identity API版本

1.6 •通过API请求认证令牌

Keystone 默认支持的认证方法包括 external password token oauth1 mapped application_credential
password token 分别表示密码认证和令牌认证,是常用的两种认证方法。
密码认证要求验证两条信息:资源( Resource )信息和身份( Identity
资源 由作用域( Scope )来确定,指定用户要访问的资源(域或项目)
作用域 决定获取令牌的有效 范围。对于 用户、域和项目来说,作用域常常是指实体的所属 域。

1.7 •通过API请求认证令牌

密码认证方式通过 API 获取令牌
Ø 请求 一个 admin 项目作用域的令牌。

[root@node-a ~]# curl -i   -H "Content-Type: application/json"   -d '

{ "auth": {

    "identity": {          #指定身份

      "methods": ["password"],

      "password": {      #密码认证

        "user": {

          "name": "admin",

          "domain": { "id": "default" },

          "password": "ABC123456"

        }

      }

    },

    "scope": {                     #指定作用域

      "project": {                  #作用域的项目

        "name": "admin",

        "domain": { "id": "default" }

      }

    }

  }

}'   "http://localhost:5000/v3/auth/tokens" ;

令牌认证方式请求另一个认证令牌

(1)导出环境变量OS_TOKEN,将其值设置为上述操作获取的令牌ID

[root@node-a ~]# export OS_TOKEN="gAAAAABfUY7KPLJNvQqZp……64_R_a0IqxYw"

(2)令牌认证方式请求一个认证令牌。

[root@node-a ~]# curl -i \

  -H "Content-Type: application/json" \

  -d '

{ "auth": {

    "identity": {

      "methods": ["token"],            #令牌认证

      "token": {

        "id": "'$OS_TOKEN'"

      }

    }

  }

}' \

  "http://localhost:5000/v3/auth/tokens"

1.8 •使用认证令牌通过API进行身份管理操作

获取认证令牌后 ,根据 该令牌的权限进行身份管理操作
获取 域列表。

curl -s \

  -H "X-Auth-Token: $OS_TOKEN" \

  "http://localhost:5000/v3/domains" | python -mjson.tool

获取 项目列表。

curl -s \

 -H "X-Auth-Token: $OS_TOKEN" \

 "http://localhost:5000/v3/projects" | python -mjson.tool

创建 一个用户。

curl -s \

 -H "X-Auth-Token: $OS_TOKEN" \

 -H "Content-Type: application/json" \

 -d '{"user": {"name": "newuser", "password": "changeme"}}' \

 "http://localhost:5000/v3/users" | python -mjson.tool

任务二  管理项目、用户和角色

2.1 •进一步了解项目、用户和角色

个用户必须至少属于一个项目,也可以属于多个项目
至少 添加一个项目,再添加用户
在删除用户账户之前,必须从该用户的主项目中删除该用户账户。
OpenStack 中可以针对项目(而不是用户)设置配额

2.2 •进一步了解项目、用户和角色

将用户分配给多个项目,需要定义一个角色
通常将角色 分配给“用户 项目”对 某个项目的指定用户分配角色
Keystone 使用基于角色的访问控制来保护其 API
admin 角色具有最高权限
拥有 reader 角色的系统用户可以列出所部署的所有 项目。
拥有 reader 角色的某个域用户只能查看该域范围的项目
member 角色更适合于其他服务
创建 的所有角色都必须映射到每一个 Openstack 服务特定的 policy.json 配置文件中,默认的策略会将大多数服务的管理权限授予 admin 角色

2.3 •命令行的身份管理用法

openstack 命令的身份管理基本用法。

1项目管理

Ø 列出 所有项目的 ID 和名称,包括禁用的项目。

openstack project list

Ø 查看项目详细 信息。

openstack project show 项目名称或ID

Ø 创建一个项目的 命令。

openstack project create --description 项目描述信息 项目名称 --domain 域名

Ø 修改 项目 名称。

openstack project set 项目名称或ID --name 新的项目名称

Ø 临时禁用某 项目。

openstack project set 项目名称或ID --disable

Ø 激活已禁用 项目。

openstack project set 项目名称或ID --enable

Ø 删除 项目。

                             openstack project delete 项目名称或ID

2)用户管理

Ø 列出用户 列表。

openstack user list

Ø 创建 用户。

openstack user create --project 项目 --password 密码 用户名

Ø 改变 用户账户的名称和邮件 地址。

openstack user set 用户名或ID --name 新的用户名 --email 邮件地址

Ø 临时禁用用户账户(不能登录 )。

openstack user set 用户名或ID --disable

Ø 激活已禁用用户 账户。

openstack user set 用户名或ID --enable

Ø 删除 用户。

openstack user delete 用户名或ID

3)角色管理

Ø 列出 可用的角色。

openstack role list

Ø 创建一个新的 角色。

openstack role create 角色名

Ø 查看角色详细 信息。

openstack role show 角色名或ID

Ø 角色分配给“用户 项目” 对。

openstack role add --user  用户名或ID  --project  项目名或ID  角色名或ID

Ø 查看某项目某用户的角色分配 情况。

openstack role assignment list --user 用户名  --project 项目名 --names

Ø 删除分配给“用户 项目”对的 角色。

openstack role remove --user 用户名或ID --project 用户名或ID  角色名或ID

2.3 •专用的服务用户

其他 OpenStack 服务要通过 Keystone 进行集中统一认证,必须进行注册,即在 Keystone 中创建相应的项目、用户和角色并进行关联,然后创建服务目录
Keystone 的服务目录是每个服务的可访问端点列表
所有 OpenStack 服务共用一个项目(通常命名为“ service” 或“ services” ),所用的角色都是 admin ,而服务之间的通信也要使用 admin 角色。

2.4 •使用命令行进行身份管理操作

1)加载demo用户的客户端环境脚本。

[root@node-a ~]# source keystonerc_demo

2)查看当前的项目列表,该用户可以访问两个项目。

[root@node-a ~(keystone_demo)]# openstack project list

3)查看用户列表,可以发现demo用户没有被授权此项操作。

[root@node-a ~(keystone_demo)]# openstack user list

4)加载admin用户的客户端环境脚本。

[root@node-a ~(keystone_demo)]# source keystonerc_admin

5)查看当前的项目列表,云管理员可以查看所有的项目。

[root@node-a ~(keystone_admin)]# openstack project list

6)查看云平台上所有的角色分配。

[root@node-a ~(keystone_admin)]# openstack role assignment list --name

7)进一步筛选出系统管理员的角色分配。

[root@node-a ~(keystone_admin)]# openstack role assignment list --names --system all

任务三  通过oslo.policy库实现权限管理

3.1 •OpenStackoslo.policy

OpenStack oslo.policy 库用于实现基于角色的权限访问控制 RBAC .
使用 策略控制某一个用户权限,规定用户能执行什么操作,不能执行什么操作
一个 API 调用某个 OpenStack 服务时,该服务的策略引擎使用合适的策略定义来决定是否接受该调用

3.2 •policy.json文件的语法

条策略采用一行语句 定义。

"目标" : "规则"

策略中的目标,又称操作( Action ),表示需要执行的 操作。
策略中的规则决定 API 调用在哪些情况或条件下可用,即是否被允许
规则
Ø 总是 允许,可以使用空字符串( "" )、中括号( [] )或 "@" 来表示。
Ø 总是 拒绝,只能使用感叹号( "!" )来表示。
Ø 特定 的检查结果。
Ø 个值的比较。
Ø 基于 简单规则的逻辑表达式。
特定的检查 结果
Ø 角色 : 角色名称 —— 测试 API 凭证是否包括该角色。
Ø 规则 : 规则名称 —— 别名定义。
Ø http : 目标 URL—— 将检查委托给远程服务器,远程服务器返回 True 则被 授权。
个值的比较采用以下语法格式。

"1: 2"

策略定义可以 采用别名,别名是复杂或难懂的规则的一个名称

"别名名称" : "<别名定义>"

policy.json 文件的内容使用符号 {} 括起来,其中的多条策略之间由逗号分隔。

{

       "别名1" : "定义1",

       "别名2" : "定义2",

       ...

       "目标1" : "规则1",

       "目标2" : "规则2",

       ....

                             }

3.3 •编写简单的policy.json策略

允许 任何实体列出虚拟机实例的策略。

"compute:get_all" : ""

使用 感叹号表示拒绝。以下这条策略表示不能搁置实例。

"compute:shelve": "!"

规定 只有云管理员才能在 Identity (身份管理)数据库中创建新用户。

"identity:create_user" : "role:admin"

编排 服务定义一个名为“ heat_stack_user 的角色,属于该角色的用户都不被允许创建堆栈。

"stacks:create": "not role:heat_stack_user"

只有实例的所有者能够启动 策略

"os_compute_api:servers:start" : "project_id:%(project_id)s"

3.4 •解读policy.json策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1839104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小林图解系统-二.硬件结构 2.5CPU是如何执行任务的?

CPU如何读取数据的&#xff1f; CPU访问L1 Cache速度比访问内存快100倍&#xff0c;有高速缓存的目的&#xff1a;把Cache作为CPU与内存之间的缓存层&#xff0c;减少对内存的访问频率 所有CPU Cache Line是CPU从内存读取数据到Cache的单位。 64字节 CPU加载数组里面连续的多…

【千帆AppBuilder】你有一封邮件待查收|未来的我,你好吗?欢迎体验AI应用《未来信使》

我在百度智能云千帆AppBuilder开发了一款AI原生应用&#xff0c;快来使用吧&#xff01;「未来信使」&#xff1a;https://appbuilder.baidu.com/s/Q1VPg 目录 背景人工智能未来的信 未来信使功能介绍Prompt组件 千帆社区主要功能AppBuilderModelBuilder详细信息 推荐文章 未来…

【APP移动端性能测试】第一节.APP应用架构、环境和敏捷开发模型介绍

文章目录 前言一、APP应用架构二、APP项目环境 2.1 后端项目环境 2.2 前端项目环境三、Scrum敏捷开发模型 3.1 Scrum敏捷模型基础介绍 3.2 Scrum敏捷开发开发流程总结 前言 一、APP应用架构 &#xff08;1&#xff09;APP应用架构 &#xff08;2&#xff0…

C++240618

1> 思维导图 2> 完善对话框&#xff0c;点击登录对话框&#xff0c; 如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出**提示”登录成功“** &#xff0c;提供一个 **OK按钮**&#xff0c;用户点击**OK后**&#xff0c;**关闭登录界面**&#xff0c; 跳转…

Canonical Juju 的一个奇怪编排部署

一周前的一个项目扩容出现了异常&#xff0c;进行了操作回滚&#xff0c;未对线上业务造成损失。 现象是这样的&#xff1a; 通过基于 Canonical Juju-GUI 在一组节点上部署了某个组件&#xff0c;在把这组节点添加到集群后&#xff0c;有4个节点上出现了同一组件的2个instanc…

Postman文件数据导入导出

前言 不同的接口测试工具如Postman、Apipost、Apifox创建的接口文档都是互通的&#xff0c;都可以互相兼容使用。我们就不需要在3个不同测试工具都去创建&#xff0c;只要在一个工具上创建&#xff0c;想要在其他接口测试工具上使用就运用导入和导出功能即可。 Postman、Apip…

爆赞!GitHub首本Python开发实战背记手册,标星果然百万名不虚传

Python (发音:[ paiθ(ə) n; (US) paiθɔn ] n. 蟒蛇&#xff0c;巨蛇 )&#xff0c;是一种面向对象的解释性的计算机程序设计语言&#xff0c;也是一种功能强大而完善的通用型语言&#xff0c;已经具有十多年的发展历史&#xff0c;成熟且稳定。Python 具有脚本语言中最丰富…

【接口自动化测试】第二节.Requests库和接口对象封装

文章目录 前言一、Requests库 1.1 Requests介绍 1.2 Requests发送请求 1.3 Requests查看响应 1.4 案例1登录接口调试-获取验证码 1.5 案例2登录接口调试-登录 1.6 归纳小结二、接口对象封装 2.1 当前代码待优化问题 2.2 接口对象封装思…

互联网应用主流框架整合之SpingMVC运转逻辑及高级应用

Spring MVC处理器的执行过程 在SpringMVC的流程中&#xff0c;它会把控制器的方法封装为处理器(Handler)&#xff0c;为了更加灵活&#xff0c;SpringMVC还提供了处理器的拦截器&#xff0c;从而形成了一条包括处理器和拦截器的执行链&#xff0c;即HandlerExecutionChain&…

Linux-安装及管理程序

目录 一、Linux应用程序基础 1、应用程序与系统命令的关系 2、 典型应用程序的目录结构 3、常见的软件包封装类型 二、RPM包管理工具 1、RPM包管理器 2、RPM软件包 ​3、RPM的命令格式 4、RPM命令的常用选项 5、RPM安装 三、 yum安装 1、yum源介绍 1.1、本地yum源 …

给日期加上15天

// 给当前日期加上15天 function toAndTimeFifteen(params) {let startDate new Date(params); // 创建一个Date对象表示2024年5月31日startDate.setDate(startDate.getDate() 15); // 给当前日期加上15天let dateString formatDate(startDate)// 转换时间格式return dateSt…

自动水位雨量站:用于水库防汛预警

TH-SW2自动水位雨量站是一种现代化的监测设备&#xff0c;主要用于水库等水域的防汛预警系统。它通过集成水位和雨量监测功能&#xff0c;为水库的管理和调度提供实时、准确的数据支持。 工作原理&#xff1a; 自动水位雨量站通过内置的水位计和雨量计实时监测水库的水位变化和…

C++封装TCP类,包括客户端和服务器

头文件 XTcp.h #ifndef XTCP_H #define XTCP_H#ifdef WIN32 #ifdef XSOCKET_EXPORTS #define XSOCKET_API __declspec(dllexport) #else #define XSOCKET_API __declspec(dllimport) #endif #else #define XSOCKET_API #endif#include <string> XSOCKET_API std::string…

宁德时代华北首座电池工厂在北京开工

6月18日&#xff0c;由宁德时代与北汽集团、京能集团、小米集团等共同投资建设的北京时代电池基地项目开工仪式在北京举行。 北京市相关政府代表&#xff0c;宁德时代董事长兼CEO曾毓群&#xff0c;北汽集团董事长张建勇&#xff0c;京能集团副总经理张凤阳&#xff0c;小米集…

第6章 设备驱动程序(4)

目录 6.5 块设备操作 6.5.5 请求结构 6.5.6 BIO 6.5.7 提交请求 6.5.8 I/O调度 6.5.9 ioctl实现 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 6.5 块设备操作 6.5.5 请求结构 struct request { //放在请求队列上&#xff0…

BFS 1块、算多少次

目录 1.矩阵内部的1块 2.从1开始&#xff0c;1或乘2&#xff0c;计算要多少次达到n 3.迷宫路径 1.矩阵内部的1块 #include <iostream> #include <vector> #include <cmath> #include <string> #include <cstring> #include <queue> usi…

现代谱估计分析信号的功率谱(1)---AR 模型谱估计

本篇文章是博主在通信等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对通信等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在通信领域笔记&#xff1a;…

1951–2021年欧洲地区木本植物的格网物候数据集

本数据集包含1951–2021年欧洲地区&#xff08;3457′N – 723′N&#xff0c;253′W – 403′E&#xff09;6种木本植物的逐年展叶始期和开花始期格网数据&#xff0c;空间分辨率为0.1&#xff0c;时间分辨率为1天。数据集的质量评估表明&#xff0c;欧洲地区各物种展叶始期和…

车载语音识别系统语音数据采集标注案例

随着人工智能技术的不断发展&#xff0c;其在我们日常生活工作场景中的应用也越来越普及&#xff0c;人工智能技术在不同场景的普及大大的提高了我们日常生活、工作的高效性和便利性。以我们的日常出行为例&#xff0c;车载语音识别系统便是一种典型的人工智能应用场景。 车载…

大咖专栏 | AI 时代下,我们可以拥有怎样的数据库?

Hi&#xff0c;各位朋友们&#xff0c;我是 KaiwuDB 高级架构师赵衎衎。 KaiwuDB 始于万物互联时代下千万条数据洪流中&#xff0c;我们持续打磨构造了更加灵活兼容的分布式多模架构&#xff0c;实现了海量异构数据高性能、低成本的集中管理… …这些底层特性都在为后续提供更…