项目四 OpenStack身份管理

发布于:2024-06-19 ⋅ 阅读:(339) ⋅ 点赞:(0)

任务一  理解身份服务

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 •OpenStack的oslo.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策略


微信公众号

今日签到

点亮在社区的每一天
去签到