KeystoneUseCases
目录
- 1 Keystone 用例
- 1.1 用户故事:基本分离个人与其拥有的资源
- 1.2 用户故事:服务目录
- 1.3 用户故事:基本 RBAC(基于角色的访问控制)
- 1.4 用户故事:私有云 + RAX 云文件
- 1.5 用户故事:Windows + 仪表板 / API
- 1.6 用户故事:Windows + 虚拟机
- 1.7 用户故事:为 BigCo 向 OpenStack 实例添加用户
- 1.8 用户故事:从 BigCo 的目录向 OpenStack 实例添加用户
- 1.9 用户故事:扩展以支持使用单个 Keystone 实例的多个 OpenStack 集群
- 1.10 用户故事:允许将权限组分配到一组租户
- 1.11 用户故事:服务代表用户对另一个服务进行操作
- 1.12 用户故事:多因素身份验证
- 1.13 用户故事:基于角色的端点 URL 过滤
- 1.14 JESSE 需要在此处添加一个
- 2 参见
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(还有其他吗?)
两个开放问题
- 是否有一个用例支持没有租户的用户?
- 是否有一个用例支持没有用户的租户?
用户故事:基本 RBAC(基于角色的访问控制)
BigCo 拥有一个 OpenStack 部署,由 2 个开发团队使用,并由一个单独的运维团队管理。他们希望设置运维团队能够操作 OpenStack 部署中的所有资源,并限制开发团队的用户只能操作他们自己的卷和虚拟机。他们还希望将网络操作(设置和更改浮动 IP 地址)限制为仅他们的运维团队。
- 启用基于角色的访问
- (参见 http://etherpad.openstack.org/canhaz 以获取讨论)
- 角色 - 用户可以加入的组,赋予他们权限 - 来自身份识别的 user+tenant 的组合
- 操作 - 执行某事 - 这特定于服务
- 能力 - 已授予角色的操作(角色+操作)
- 有关一组操作的示例,这些操作封装在策略集中,请参见 https://github.com/openstack/nova/blob/master/etc/nova/policy.json
用户故事:私有云 + 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”
参见
- KeystoneFolsomSummitTopics
- Keystone-Essex-Federated-Token
- Keystone 虚拟身份提供商