跳转到: 导航, 搜索

KeystoneUseCases

Keystone 用例

这正在跟踪用例,以推动 Keystone API 和实现的未来发展。

用户故事:基本分离个人与其拥有的资源

BigCo 拥有一个闪亮的新 OpenStack 云部署,并希望允许 2 个不同的开发团队访问和管理他们的资源。每个团队有 2 名专职人员,还有 2 名在两个团队之间浮动的员工。他们希望将所有用户和组设置到 Keystone 中,以便

  • GroupA 用户 A1、A2、Z1 和 Z2 可以访问和操作由 Group A 拥有的资源
  • GroupB 用户 B1、B2、Z1 和 Z2 可以访问和操作由 Group B 拥有的资源
  • 相关资源是卷、虚拟机和浮动 IP 地址

Keystone 结构

  • 在 V2 中,关键结构是用户、租户和角色,用于链接两者。
  • 令牌通过 Keystone 使用用户凭据进行身份验证,并包含与服务共享的元数据,以做出权限选择。

用户故事:服务目录

BigCo 希望为上述每个用户提供服务目录,其中包含与其在 Keystone 中存储的身份匹配的相关 API 端点。例如,用户 Jill 希望使用她的凭据(存储在 Keystone 中)登录到仪表板,并能够获取用于命令行或 GUI 客户端的 URI 端点。

  • 为给定用户公开服务 API
    • (即,为特定用户/租户构建 Swift 和相关 API 端点)- Swift API 端点在 URI 中包含租户和用户 ID(还有其他吗?)

两个开放问题

  1. 是否有一个用例支持没有租户的用户?
  2. 是否有一个用例支持没有用户的租户?

用户故事:基本 RBAC(基于角色的访问控制)

BigCo 拥有一个 OpenStack 部署,由 2 个开发团队使用,并由一个单独的运维团队管理。他们希望设置运维团队能够操作 OpenStack 部署中的所有资源,并限制开发团队的用户只能操作他们自己的卷和虚拟机。他们还希望将网络操作(设置和更改浮动 IP 地址)限制为仅他们的运维团队。

用户故事:私有云 + RAX 云文件

BigCo 需要一个全球私有云。与其部署多区域云文件,他们更喜欢使用 Rackspace 云文件。他们的云与他们现有的企业系统共享身份验证(Keystone 后端到 AD - 参见下面的故事)。他们希望将 Rackspace 云文件的条目添加到他们的云的服务目录中,并使用他们现有的身份验证。

(在“windows”故事中,指的是带有集中 AD 身份验证的 Windows 桌面)

用户故事:Windows + 仪表板 / API

Jill 上班后使用她的公司用户名/密码登录到她的桌面,并看到一封电子邮件,通知她私有云现在可用。她点击链接,进入登录页面。她输入她的公司用户名/密码,并被允许进入。在探索功能后,她准备开始使用云了。

用户故事:Windows + 虚拟机

Jill 决定启动一个 Windows 虚拟机。几分钟后,她点击“打开远程桌面”,她的 RDP 观看器打开了 Windows 桌面。她可以使用她的公司用户名/密码登录到虚拟机并访问所有公司资源。

技术假设

  • 云管理层和虚拟机可以访问公司 AD/LDAP
  • 公司拥有一个现有的 AD/LDAP,需要集成
  • 云和虚拟机只需要(最小)读取访问权限到 LDAP/AD
    • 检查用户名/密码是否正确
    • 列出用户的所有租户(用户所属的组)
    • 列出用户/租户的所有角色(用于云权限)

阶段 A:LDAP 身份后端

1) LDAP 简单 * 记录如何设置云,以便 Keystone 和 Linux 虚拟机使用共享 LDAP * 任何 LDAP 用户都可以登录到 VM(独立于创建它的租户)

2) LDAP 租户 * Linux 客体代理从元数据中提取租户信息 * 只有该租户(LDAP 中的组)中的用户才能登录到服务器

3) LDAP 租户 + 云操作员 * 云操作员可以配置一个附加的 LDAP 组,该组允许管理访问权限 * 附加组通过元数据公开,客体代理添加管理组

4) LDAP 简单 + Windows * Windows 镜像设置以验证 LDAP(与 1 相同,但 Windows 客体)

5) LDAP 租户 + Windows * 类似于 2,但使用 Windows 镜像

阶段 B:AD 后端

1) AD 简单 * Keystone 的 Active Directory 后端(轻量级)* Windows 镜像硬编码为使用 AD

2) AD 加入域 * 除了通过 AD 进行身份验证外,还注册到 AD

3) AD 租户 * 除了注册到 AD 外,还限制访问仅限于 AD 中的租户成员(类似于 A.2,但带有 AD+Windows)

4) AD 租户 + 云操作员 * 除了 B.3 之外,还添加了一个管理租户(类似于 A.3)

5) AD 租户 + 云操作员 + Linux * 类似于 4,但 Linux 镜像委托给 AD

用户故事:为 BigCo 向 OpenStack 实例添加用户

Jill 是 BigCo 在 OpenStack 环境中的管理员。她被要求将一个部门的人员批量加载到概念验证/原型设置中(身份验证由 DB 后端支持)。在这样做时,她有一个用户名列表,这些用户名都应该添加,稍后由另一个任务将其分成多个租户的组。

  • 允许 Jill 上传列表并批量创建用户,而无需预先识别这些用户的租户

用户故事:从 BigCo 的目录向 OpenStack 实例添加用户

Jill 是 BigCo 在 OpenStack 环境中的管理员。她被要求为 OpenStack 环境启用部门 A、B、C 和 D。BigCo 目录中的 LDAP 查询可以确定 Division X 的所有成员。所有成员都需要使用他们的公司凭据登录。Jill 没有更新公司目录的权限。

  • 允许 Jill 通过某种形式的目录查询指定允许的用户
  • 允许用户使用目录凭据登录,但假设 OpenStack 无法以任何方式更新目录(需要存储的所有其他元数据,必须在单独的 OpenStack 存储中完成)。

用户故事:扩展以支持使用单个 Keystone 实例的多个 OpenStack 集群

BigCo 希望使用单个 Keystone 实例运行两个单独的 OpenStack 集群。BigCo 希望能够在单个 Keystone 实例中识别这些集群,并使角色响应取决于询问的集群 - 例如,他们有一个开发云和一个生产云。Fredford 在 devcloud 中具有 Nova 的“admin”访问权限,但在 ProdCloud 中没有。这也可以被视为 Keystone 上的不同角色在不同的服务端点上 - 因此 Fredford 在 devloud 中具有 Nova 的“admin”访问权限,但在生产 Glance 实例中具有“普通人”访问权限。

(这是 HP-IDM-EXTENSION 旨在实现的一部分)

用户故事:允许将权限组分配到一组租户

BigCo 在多个 Nova 集群中安装了一个大型 OpenStack,并且可能有一个 Keystone 实例。BigCo 中的各个部门是租户,并且一些人向这些部门的云服务提供管理协助。BigCo 希望能够将权限分配给这些部门的集合,以便单个用户或用户组(例如 Mark、Jill 和 Aspen)可以在多个租户(端点和资源组)中提供管理,而无需分配给每个租户并赋予与每个租户相关的角色。

(这是 HP-IDM-EXTENSION 旨在实现的一部分)

用户故事:服务代表用户对另一个服务进行操作

(vishy) 这是我试图解决的问题

作为管理员,我希望为用户(在 Nova 中)触发调整大小或块迁移命令。在某个时刻,该命令必须与外部服务交互,在本例中为 glance。因此,如果我需要访问该租户的镜像,我需要一个对该租户有效的令牌。(目前已登录 https://bugs.launchpad.net/keystone/+bug/949467

用户故事:多因素身份验证

BigCo 拥有一个大型 OpenStack 私有云。BigCo 拥有一个研发部门,其资源位于与 BigCo 其他资源不同的租户中。要访问 BigCo 研发资源,员工需要提供超过一组凭据。研发员工仅提供 1 组凭据仍然可以访问 BigCo 非研发资源。访问研发资源所需的其他凭据集可能涉及硬件令牌、推送通知批准、带有 PIN 码的短信,甚至语音批准。

作为使用 OpenStack 的企业,我期望 Keystone 支持半令牌的概念 - 一个未完全通过身份验证但仍然可以允许访问某些服务/资源的令牌,这些服务/资源只需要我提供的凭据。

用户故事:基于角色的端点 URL 过滤

BigCo 不希望“内部”和“admin”端点 URL 公开可用,因此 BigCo 需要根据用户角色过滤 URL 端点。例如:用户 A 作为租户 A 的成员将仅获得公共端点 URL,用户 B 作为租户 B 的服务管理员将获得所有端点 URL。

JESSE 需要在此处添加一个

我们需要添加一个关于添加实验/第三方服务的内容 - 并支持它,而无需赋予它完全权限来执行所有操作(例如,如果我们将用户令牌发送给它,它可以将其发送到所有其他服务并充当用户)[下午 6:44] Vanchester 加入了聊天室。[下午 6:44] anotherjesse: (服务 = 新增到目录的云服务)[下午 6:44] heckj: 对于最初在 essex 中计划的一些基本更改,存在一些副作用,我认为并没有清楚地传达给所有其他项目(nova、glance、swift、horizon)。我的目标是在峰会上以具体的方式进行讨论[下午 6:45] heckj: anotherjesse: 你能把它添加到 wiki 页面中吗?[下午 6:45] anotherjesse: 好的[下午 6:45] heckj: 或者发送一封包含详细信息的电子邮件给我,我会一直纠缠你,直到我理解,然后我会添加它[下午 6:45] anotherjesse: 它在 folsom 峰会主题中,标题为“Trust & Service”

参见