身份概念

身份验证

确认用户身份的过程。为了确认传入的请求,OpenStack Identity 会验证用户提供的凭据集合。最初,这些凭据是用户名和密码,或者用户名和 API 密钥。当 OpenStack Identity 验证用户凭据时,它会颁发一个身份验证令牌。用户在后续请求中提供令牌。

凭证

确认用户身份的数据。例如,用户名和密码、用户名和 API 密钥,或者 Identity 服务提供的身份验证令牌。

Identity 服务 API v3 实体。域是项目和用户的集合,定义了管理 Identity 实体的管理边界。域可以代表个人、公司或运营商拥有的空间。它们将管理活动直接暴露给系统用户。用户可以被授予域的管理员角色。域管理员可以在域中创建项目、用户和组,并将角色分配给域中的用户和组。

端点

可通过网络访问的地址,通常是 URL,通过它可以访问服务。如果您正在使用模板扩展,您可以创建一个端点模板,该模板代表所有可在区域之间使用的服务的模板。

Group

Identity 服务 API v3 实体。组是属于域的用户集合。授予域或项目的组角色适用于组中的所有用户。将用户添加到组或从组中删除用户会授予或撤销他们与相关域或项目关联的角色和身份验证。

OpenStackClient

一个命令行界面,用于多个 OpenStack 服务,包括 Identity API。例如,用户可以运行 openstack service createopenstack endpoint create 命令来在他们的 OpenStack 安装中注册服务。

项目

一个容器,用于分组或隔离资源或身份对象。根据服务运营商的不同,项目可能映射到客户、帐户、组织或租户。

区域

Identity 服务 API v3 实体。代表 OpenStack 部署中的一般划分。您可以将零个或多个子区域与区域关联,以创建一个类似树状的层次结构。虽然区域没有地理含义,但部署可以使用地理名称为区域命名,例如 us-east

角色

具有定义的用户权利和特权,以执行特定的一组操作的身份。Identity 服务向用户颁发一个包含角色列表的令牌。当用户调用服务时,该服务会解释用户角色集,并确定每个角色授予对哪些操作或资源的访问权限。

服务

一个 OpenStack 服务,例如 Compute (nova)、对象存储 (swift) 或镜像服务 (glance),它通过一个或多个端点提供用户可以访问资源和执行操作的方式。

令牌

一个字母数字文本字符串,用于启用对 OpenStack API 和资源的访问。令牌可以随时撤销,并且在有限的时间内有效。虽然 OpenStack Identity 在此版本中支持基于令牌的身份验证,但它打算在未来支持其他协议。OpenStack Identity 是一个集成服务,不希望成为一个功能齐全的身份存储和管理解决方案。

用户

使用 OpenStack 云服务的人、系统或服务的数字表示。Identity 服务验证传入的请求是由声称发起调用的用户发起的。用户拥有登录名,并且可以使用分配的令牌访问资源。用户可以直接分配到特定项目,并表现得好像他们包含在该项目中一样。

用户管理

Identity 用户管理示例

  • 创建一个名为 alice 的用户

    $ openstack user create --password-prompt --email alice@example.com alice
    
  • 创建一个名为 acme 的项目

    $ openstack project create acme --domain default
    
  • 创建一个名为 emea 的域

    $ openstack --os-identity-api-version=3 domain create emea
    
  • 创建一个名为 compute-user 的角色

    $ openstack role create compute-user
    

    注意

    各个服务为角色赋予含义,通常是通过限制或授予具有该角色的用户对服务支持的操作的访问权限。角色访问通常在服务的 policy.yaml 文件中配置。例如,要限制 Compute 对 compute-user 角色的访问,请编辑 Compute 服务的 policy.yaml 文件以需要此角色来进行 Compute 操作。

Identity 服务将一个项目和一个角色分配给一个用户。您可能会将 compute-user 角色分配给 alice 用户在 acme 项目中

$ openstack role add --project acme --user alice compute-user

用户可以在不同的项目中拥有不同的角色。例如,Alice 也可以在 Cyberdyne 项目中拥有 admin 角色。用户也可以在同一个项目中拥有多个角色。

/etc/[SERVICE_CODENAME]/policy.yaml 文件控制用户可以对给定服务执行的任务。例如,/etc/nova/policy.yaml 文件指定 Compute 服务的访问策略,/etc/glance/policy.yaml 文件指定镜像服务的访问策略,而 /etc/keystone/policy.yaml 文件指定 Identity 服务的访问策略。

Compute、Identity 和 Image 服务中的默认 policy.yaml 文件仅识别 admin 角色。任何具有项目中任何角色的用户都可以访问不需要 admin 角色的所有操作。

要限制用户执行例如 Compute 服务中的操作,您必须在 Identity 服务中创建一个角色,然后修改 /etc/nova/policy.yaml 文件,以便需要此角色来进行 Compute 操作。

例如,以下行在 /etc/cinder/policy.yaml 文件中不会限制哪些用户可以创建卷

"volume:create": "",

如果用户在项目中拥有任何角色,他就可以在该项目中创建卷。

要将卷的创建限制为在特定项目中具有 compute-user 角色的用户,您添加 "role:compute-user"

"volume:create": "role:compute-user",

要将所有 Compute 服务请求限制为需要此角色,结果文件如下所示

{
   "admin_or_owner": "role:admin or project_id:%(project_id)s",
   "default": "rule:admin_or_owner",
   "compute:create": "role:compute-user",
   "compute:create:attach_network": "role:compute-user",
   "compute:create:attach_volume": "role:compute-user",
   "compute:get_all": "role:compute-user",
   "compute:unlock_override": "rule:admin_api",
   "admin_api": "role:admin",
   "compute_extension:accounts": "rule:admin_api",
   "compute_extension:admin_actions": "rule:admin_api",
   "compute_extension:admin_actions:pause": "rule:admin_or_owner",
   "compute_extension:admin_actions:unpause": "rule:admin_or_owner",
   "compute_extension:admin_actions:suspend": "rule:admin_or_owner",
   "compute_extension:admin_actions:resume": "rule:admin_or_owner",
   "compute_extension:admin_actions:lock": "rule:admin_or_owner",
   "compute_extension:admin_actions:unlock": "rule:admin_or_owner",
   "compute_extension:admin_actions:resetNetwork": "rule:admin_api",
   "compute_extension:admin_actions:injectNetworkInfo": "rule:admin_api",
   "compute_extension:admin_actions:createBackup": "rule:admin_or_owner",
   "compute_extension:admin_actions:migrateLive": "rule:admin_api",
   "compute_extension:admin_actions:migrate": "rule:admin_api",
   "compute_extension:aggregates": "rule:admin_api",
   "compute_extension:certificates": "role:compute-user",
   "compute_extension:cloudpipe": "rule:admin_api",
   "compute_extension:console_output": "role:compute-user",
   "compute_extension:consoles": "role:compute-user",
   "compute_extension:createserverext": "role:compute-user",
   "compute_extension:deferred_delete": "role:compute-user",
   "compute_extension:disk_config": "role:compute-user",
   "compute_extension:evacuate": "rule:admin_api",
   "compute_extension:extended_server_attributes": "rule:admin_api",
   "compute_extension:extended_status": "role:compute-user",
   "compute_extension:flavorextradata": "role:compute-user",
   "compute_extension:flavorextraspecs": "role:compute-user",
   "compute_extension:flavormanage": "rule:admin_api",
   "compute_extension:floating_ip_dns": "role:compute-user",
   "compute_extension:floating_ip_pools": "role:compute-user",
   "compute_extension:floating_ips": "role:compute-user",
   "compute_extension:hosts": "rule:admin_api",
   "compute_extension:keypairs": "role:compute-user",
   "compute_extension:multinic": "role:compute-user",
   "compute_extension:networks": "rule:admin_api",
   "compute_extension:quotas": "role:compute-user",
   "compute_extension:rescue": "role:compute-user",
   "compute_extension:security_groups": "role:compute-user",
   "compute_extension:server_action_list": "rule:admin_api",
   "compute_extension:server_diagnostics": "rule:admin_api",
   "compute_extension:simple_tenant_usage:show": "rule:admin_or_owner",
   "compute_extension:simple_tenant_usage:list": "rule:admin_api",
   "compute_extension:users": "rule:admin_api",
   "compute_extension:virtual_interfaces": "role:compute-user",
   "compute_extension:virtual_storage_arrays": "role:compute-user",
   "compute_extension:volumes": "role:compute-user",
   "compute_extension:volume_attachments:index": "role:compute-user",
   "compute_extension:volume_attachments:show": "role:compute-user",
   "compute_extension:volume_attachments:create": "role:compute-user",
   "compute_extension:volume_attachments:delete": "role:compute-user",
   "compute_extension:volumetypes": "role:compute-user",
   "volume:create": "role:compute-user",
   "volume:get_all": "role:compute-user",
   "volume:get_volume_metadata": "role:compute-user",
   "volume:get_snapshot": "role:compute-user",
   "volume:get_all_snapshots": "role:compute-user",
   "network:get_all_networks": "role:compute-user",
   "network:get_network": "role:compute-user",
   "network:delete_network": "role:compute-user",
   "network:disassociate_network": "role:compute-user",
   "network:get_vifs_by_instance": "role:compute-user",
   "network:allocate_for_instance": "role:compute-user",
   "network:deallocate_for_instance": "role:compute-user",
   "network:validate_networks": "role:compute-user",
   "network:get_instance_uuids_by_ip_filter": "role:compute-user",
   "network:get_floating_ip": "role:compute-user",
   "network:get_floating_ip_pools": "role:compute-user",
   "network:get_floating_ip_by_address": "role:compute-user",
   "network:get_floating_ips_by_project": "role:compute-user",
   "network:get_floating_ips_by_fixed_address": "role:compute-user",
   "network:allocate_floating_ip": "role:compute-user",
   "network:deallocate_floating_ip": "role:compute-user",
   "network:associate_floating_ip": "role:compute-user",
   "network:disassociate_floating_ip": "role:compute-user",
   "network:get_fixed_ip": "role:compute-user",
   "network:add_fixed_ip_to_instance": "role:compute-user",
   "network:remove_fixed_ip_from_instance": "role:compute-user",
   "network:add_network_to_project": "role:compute-user",
   "network:get_instance_nw_info": "role:compute-user",
   "network:get_dns_domains": "role:compute-user",
   "network:add_dns_entry": "role:compute-user",
   "network:modify_dns_entry": "role:compute-user",
   "network:delete_dns_entry": "role:compute-user",
   "network:get_dns_entries_by_address": "role:compute-user",
   "network:get_dns_entries_by_name": "role:compute-user",
   "network:create_private_dns_domain": "role:compute-user",
   "network:create_public_dns_domain": "role:compute-user",
   "network:delete_dns_domain": "role:compute-user"
}

服务管理

Identity 服务提供身份、令牌、目录和策略服务。它由以下部分组成

  • keystone Web 服务器网关接口 (WSGI) 服务

    可以在 WSGI 兼容的 Web 服务器(如 Apache httpd)中运行,以提供 Identity 服务。服务和管理 API 作为 WSGI 服务的单独实例运行。

  • Identity 服务功能

    每个都具有可插拔的后端,允许以不同的方式使用特定服务。大多数都支持标准的后端,如 LDAP 或 SQL。

Identity 服务还维护一个与每个服务对应的用户,例如,Compute 服务的名为 nova 的用户,以及一个名为 service 的特殊服务项目。

有关如何创建服务和端点的更多信息,请参阅 管理员指南

组织

组是域中的用户集合。管理员可以创建组并将用户添加到其中。然后可以将角色分配给组,而不是单个用户。组是在 Identity API v3 中引入的。

Identity API V3 提供以下与组相关的操作

  • 创建一个组

  • 删除一个组

  • 更新一个组(更改其名称或描述)

  • 将用户添加到组

  • 从组中删除用户

  • 列出组成员

  • 列出用户的组

  • 将角色分配给项目中的组

  • 将角色分配给域中的组

  • 查询组的角色分配

注意

Identity 服务服务器可能不允许所有操作。例如,如果您使用带有 LDAP Identity 后端的 Identity 服务器并且禁用了组更新,则创建、删除或更新组的请求将失败。

这里有一些例子

  • 组 A 在项目 A 上被授予角色 A。如果用户 A 是组 A 的成员,当用户 A 获取作用域限定为项目 A 的令牌时,该令牌也包含角色 A。

  • 组 B 在域 B 上被授予角色 B。如果用户 B 是组 B 的成员,当用户 B 获取作用域限定为域 B 的令牌时,该令牌也包含角色 B。