用户和身份管理指南
前言 复制链接链接已复制到粘贴板!
您不能在实例创建过程中将基于角色的访问控制(RBAC)共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 将安全组添加到端口。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。
在 JIRA 中提供文档反馈
使用 Create Issue 表单对文档提供反馈。JIRA 问题将在 Red Hat OpenStack Platform Jira 项目中创建,您可以在其中跟踪您的反馈进度。
- 确保您已登录到 JIRA。如果您没有 JIRA 帐户,请创建一个帐户来提交反馈。
- 点击以下链接打开 Create Issue 页面: Create Issue
- 完成 Summary 和 Description 字段。在 Description 字段中,包含文档 URL、章节或章节号以及问题的详细描述。不要修改表单中的任何其他字段。
- 点 Create。
第 1 章 身份服务 复制链接链接已复制到粘贴板!
作为云管理员,您可以管理项目、用户和角色。
项目是包含资源集合的组织单元。您可以将用户分配到项目内的角色。角色定义这些用户可在给定项目中对资源执行的操作。用户可以在多个项目中分配角色。
每个 Red Hat OpenStack(RHOSP)部署都必须至少包含一个在项目中分配给某一角色的用户。作为云管理员,您可以:
- 添加、更新和删除项目和用户。
- 将用户分配到一个或多个角色,以及更改或删除这些分配。
- 相互独立管理项目和用户。
您还可以使用身份服务(keystone)配置用户身份验证,以控制对服务和端点的访问。身份服务提供基于令牌的身份验证,并可与 LDAP 和 Active Directory 集成,以便您可以从外部管理用户和身份,并将用户数据与身份服务同步。
第 2 章 管理用户 复制链接链接已复制到粘贴板!
作为云管理员,您可以在仪表板中添加、修改和删除用户。用户可以是一个或多个项目的成员。您可以独立管理项目和用户。
2.1. 使用仪表板创建用户 复制链接链接已复制到粘贴板!
您可以为该用户分配主项目和角色。使用 OpenStack Dashboard(horizon)创建的用户默认为 Identity service 用户。您可以通过配置身份服务中包含的 LDAP 供应商来集成 Active Directory 用户。
流程
- 以 admin 用户身份登录到控制面板。
- 选择 Identity > Users。
- 单击 创建用户。
- 为用户输入用户名、电子邮件和初步密码。
- 从 Primary Project 列表中选择一个项目。
-
从 Role 列表中选择该用户的角色。默认角色为
member。 - 单击 创建用户。
2.2. 使用仪表板编辑用户 复制链接链接已复制到粘贴板!
您可以更新用户详情,包括主项目。
流程
- 以 admin 用户身份登录控制面板。
- 选择 Identity > Users。
- 在 Actions 列中,单击 Edit。
- 在 Update User 窗口中,您可以更新 User Name, Email, and Primary Project。
- 单击 Update User。
2.3. 使用仪表板启用或禁用用户 复制链接链接已复制到粘贴板!
您可以使用控制面板禁用用户。与删除用户不同,此操作不可逆。
限制:
- 您不能一次禁用或启用多个用户。
- 您不能将用户的主项目设置为 active。
其结果是,您禁用的用户不能:
- 登录控制面板。
- 获得 RHOSP 服务的访问权限。
- 在仪表板中执行任何 user-project 操作。
流程
- 在仪表板中作为 admin 用户,选择 Identity > Users。
-
在 Actions 列中,单击箭头,再选择 Enable User 或 Disable User。在 Enabled 列中,值被更新为
True或False。
2.4. 使用仪表板删除用户 复制链接链接已复制到粘贴板!
您必须是具有管理角色的用户才能删除其他用户。无法撤销此操作。
流程
- 在仪表板中作为 admin 用户,选择 Identity > Users。
- 选择您要删除的用户。
- 单击 Delete Users。此时会显示 Confirm Delete Users 窗口。
- 单击 Delete Users 以确认操作。
第 3 章 管理角色 复制链接链接已复制到粘贴板!
Red Hat OpenStack Platform(RHOSP)使用基于角色的访问控制(RBAC)机制来管理对资源的访问。角色定义用户可以执行的操作。默认情况下,有两个预定义角色:
- 附加到项目的成员角色。
- 一个管理角色,它允许非管理员用户管理环境。
Identity 服务(keystone)也添加了 reader 角色,该角色将在角色列表中显示。不要使用 reader 角色,因为它没有集成到其他 OpenStack 项目中,并跨服务提供不一致的权限。
您还可以创建特定于您的环境的自定义角色。
3.1. 了解 Red Hat OpenStack Platform admin 角色 复制链接链接已复制到粘贴板!
当您为用户分配 admin 角色时,此用户具有查看、更改、创建和删除任何项目的任何资源的权限。此用户可以创建可在项目间访问的共享资源,如公开可用的 glance 镜像或提供商网络。此外,具有 admin 角色的用户也可以创建或删除用户并管理角色。
为用户授予 admin 角色的项目是执行 openstack 命令的默认项目。例如,如果在名为 development 的项目中的 admin 用户运行以下命令,会在 development 项目中创建一个名为 internal-network 的网络:
openstack network create internal-network
admin 用户可以使用 --project 参数在任何项目中 创建内部网络 :
openstack network create internal-network --project testing
3.2. 使用 CLI 查看角色 复制链接链接已复制到粘贴板!
作为管理员,您可以查看现有角色的详细信息。
流程
列出可用的预定义角色:
$ openstack role list +----------------------------------+-----------------+ | ID | Name | +----------------------------------+-----------------+ | 01d92614cd224a589bdf3b171afc5488 | admin | | 034e4620ed3d45969dfe8992af001514 | member | | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin | | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user | | cfea5760d9c948e7b362abc1d06e557f | reader | | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator | | ef3d3f510a474d6c860b4098ad658a29 | service | +----------------------------------+-----------------+查看指定角色的详情:
$ openstack role show admin示例
$ openstack role show admin +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 01d92614cd224a589bdf3b171afc5488 | | name | admin | +-----------+----------------------------------+
要获取与每个角色关联的权限的详细信息,您必须审核其对每个 API 调用的访问权限。如需更多信息,请参阅 审计 API 访问。
3.3. 使用 CLI 创建和分配角色 复制链接链接已复制到粘贴板!
作为管理员,您可以通过以下一组命令来使用身份服务(keystone)客户端创建和管理角色。每个 Red Hat OpenStack Platform 部署都必须至少包含一个项目、一个用户和一个角色,并链接在一起。
您可以将用户分配到多个项目。要将用户分配到多个项目,请创建一个角色并将该角色分配给 user-project 对。
您可以使用名称或 ID 来指定用户、角色或项目。
流程
创建
new-role角色:$ openstack role create <role_name>要为项目分配用户,请使用以下命令首先查找用户、角色和项目名称或 ID:
- OpenStack 用户列表
- OpenStack 角色列表
- OpenStack 项目列表
为 user-project 对分配角色。
$ openstack role add <role_name> --user <user_name> --project <project_name>以下示例将
admin角色分配给demo项目中的admin用户:$ openstack role add admin --user admin --project demo验证用户
admin的角色分配:$ openstack role assignment list --user <user_name> --project <project_name> --names下例验证
admin用户是否已分配给demo项目,其角色为admin。
$ openstack role assignment list --user admin --project demo --names
+-------+---------------+-------+--------------+--------+--------+-----------+
| Role | User | Group | Project | Domain | System | Inherited |
+-------+---------------+-------+--------------+--------+--------+-----------+
| admin | admin@Default | | demo@Default | | | False |
+-------+---------------+-------+--------------+--------+--------+-----------+
3.4. 创建简单角色 复制链接链接已复制到粘贴板!
Identity 服务(keystone)强制执行访问控制,确认用户已分配给特定角色。身份服务使用暗示的角色分配。如果您明确为用户分配角色,那么用户也可以隐式分配到其他角色。您可以在 Red Hat OpenStack Platform 中查看默认的简单角色:
$ openstack implied role list
+----------------------------------+-----------------+----------------------------------+-------------------+
| Prior Role ID | Prior Role Name | Implied Role ID | Implied Role Name |
+----------------------------------+-----------------+----------------------------------+-------------------+
| 54454217f38247e5a2131c8a47138d32 | admin | b59703369e194123b5c77dad60d11a25 | member |
| b59703369e194123b5c77dad60d11a25 | member | 382761de4a9c4414b6f8950f8580897c | reader |
+----------------------------------+-----------------+----------------------------------+-------------------+
Identity 服务(keystone)也添加了 reader 角色,该角色将在角色列表中显示。不要使用 reader 角色,因为它没有集成到其他 OpenStack 服务中,并跨服务提供不一致的权限。
权限较高的角色意味着与角色关联的权限较少。在上面的默认简单角色中,admin 表示成员,并且成员表示读取器。使用简单角色时,用户的角色分配会按累计的方式处理,因此用户会继承下级角色。
如果使用自定义角色,您可以创建简化的关联。
当您创建新角色时,默认情况下它将具有与 member 角色相同的访问策略。有关为自定义角色创建唯一策略的详情,请参考 使用策略文件 进行访问控制。
流程
使用以下命令指定匹配另一个角色的角色:
$ openstack implied role create manager --implied-role poweruser +------------+----------------------------------+ | Field | Value | +------------+----------------------------------+ | implies | ab0b966e0e5e411f8d8b0cc6c26fefd1 | | prior_role | 880761f64bff4e4a8923efda73923b7a | +------------+----------------------------------+
验证
列出所有简单角色:
$ openstack implied role list +----------------------------------+-----------------+----------------------------------+-------------------+ | Prior Role ID | Prior Role Name | Implied Role ID | Implied Role Name | +----------------------------------+-----------------+----------------------------------+-------------------+ | 54454217f38247e5a2131c8a47138d32 | admin | b59703369e194123b5c77dad60d11a25 | member | | 880761f64bff4e4a8923efda73923b7a | manager | ab0b966e0e5e411f8d8b0cc6c26fefd1 | poweruser | | b59703369e194123b5c77dad60d11a25 | member | 382761de4a9c4414b6f8950f8580897c | reader | +----------------------------------+-----------------+----------------------------------+-------------------+
如果一个简化的关联出错,您可以撤销您的更改:
openstack implied role delete manager --implied-role poweruser
第 4 章 管理组 复制链接链接已复制到粘贴板!
您可以使用 Identity Service(keystone)组为多个用户帐户分配一致的权限。
4.1. 使用 CLI 配置组 复制链接链接已复制到粘贴板!
创建组并为组分配权限。组成员继承您分配给组的同一权限:
创建
grp-Auditors组:$ openstack group create grp-Auditors +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | default | | id | 2a4856fc242142a4aa7c02d28edfdfff | | name | grp-Auditors | +-------------+----------------------------------+查看 keystone 组列表:
$ openstack group list --long +----------------------------------+--------------+-----------+-------------+ | ID | Name | Domain ID | Description | +----------------------------------+--------------+-----------+-------------+ | 2a4856fc242142a4aa7c02d28edfdfff | grp-Auditors | default | | +----------------------------------+--------------+-----------+-------------+使用
member角色时,授予grp-Auditors组权限来访问demo项目:$ openstack role add member --group grp-Auditors --project demo将现有用户
user1添加到grp-Auditors组中:$ openstack group add user grp-Auditors user1 user1 added to group grp-Auditors确认
user1是grp-Auditors的成员:$ openstack group contains user grp-Auditors user1 user1 in group grp-Auditors查看分配给
user1的有效权限:$ openstack role assignment list --effective --user user1 +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 9fe2ff9ee4384b1894a90878d3e92bab | 3fefe5b4f6c948e6959d1feaef4822f2 | | 0ce36252e2fb4ea8983bed2a568fa832 | | False | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
4.2. 使用控制面板配置组 复制链接链接已复制到粘贴板!
您可以使用控制面板管理 keystone 组成员资格。但是,您必须使用命令行为组群分配角色权限。如需更多信息,请参阅使用 CLI 配置组。
4.2.1. 创建组 复制链接链接已复制到粘贴板!
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Groups。
- 单击 +Create Group。
- 输入组的名称和描述。
- 单击 Create Group。
4.2.2. 管理组成员资格 复制链接链接已复制到粘贴板!
您可以使用控制面板管理 keystone 组成员资格。
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Groups。
- 点您要编辑的组的 Manage Members。
- 使用 Add users 将用户添加到组中。如果要删除用户,标记其复选框,然后单击 删除用户。
第 5 章 配额管理 复制链接链接已复制到粘贴板!
作为云管理员,您可以为项目设置和管理配额。每个项目分配到资源,项目用户被授予使用这些资源的访问权限。这可让多个项目使用单个云,而不会互相干扰权限和资源。创建新项目时会预先配置一组资源配额。配额包括可分配给项目的 VCPU 数、实例、RAM 和浮动 IP。配额可以在项目和 project-user 级别上强制执行。您可以使用控制面板为新的和现有项目设置或修改 Compute 和 Block Storage 配额。如需更多信息,请参阅管理项目。
5.1. 查看用户的计算配额 复制链接链接已复制到粘贴板!
运行以下命令,以列出用户当前设置的配额值。
流程
$ nova quota-show --user [USER-ID] --tenant [TENANT-ID]
示例
$ nova quota-show --user 3b9763e4753843529db15085874b1e84 --tenant a4ee0cbb97e749dca6de584c0b1568a6
+-----------------------------+-------+
| Quota | Limit |
+-----------------------------+-------+
| instances | 10 |
| cores | 20 |
| ram | 51200 |
| floating_ips | 5 |
| fixed_ips | -1 |
| metadata_items | 128 |
| injected_files | 5 |
| injected_file_content_bytes | 10240 |
| injected_file_path_bytes | 255 |
| key_pairs | 100 |
| security_groups | 10 |
| security_group_rules | 20 |
| server_groups | 10 |
| server_group_members | 10 |
+-----------------------------+-------+
5.2. 更新用户的计算配额 复制链接链接已复制到粘贴板!
运行以下命令以更新特定配额值:
$ nova quota-update --user [USER-ID] --[QUOTA_NAME] [QUOTA_VALUE] [TENANT-ID]
$ nova quota-show --user [USER-ID] --tenant [TENANT-ID]
示例
$ nova quota-update --user 3b9763e4753843529db15085874b1e84 --floating-ips 10 a4ee0cbb97e749dca6de584c0b1568a6
$ nova quota-show --user 3b9763e4753843529db15085874b1e84 --tenant a4ee0cbb97e749dca6de584c0b1568a6
+-----------------------------+-------+
| Quota | Limit |
+-----------------------------+-------+
| instances | 10 |
| cores | 20 |
| ram | 51200 |
| floating_ips | 10 |
| ... | |
+-----------------------------+-------+
要查看 quota-update 命令的选项列表,请运行:
$ nova help quota-update
5.3. 为用户设置对象存储配额 复制链接链接已复制到粘贴板!
对象存储配额可按照以下类别分类:
- 容器配额 - 限制单个容器中可存储的对象总数(以字节为单位)。
- 帐户配额 - 限制用户在对象存储服务中可用的总大小(以字节为单位)。
要设置容器配额或帐户配额,Object Storage 代理服务器必须具有附加到 proxy-server.conf 文件的 [pipeline:main] 部分的参数 container_quotas 或 account_quotas (或两者):
[pipeline:main]
pipeline = catch_errors [...] tempauth container-quotas \
account-quotas slo dlo proxy-logging proxy-server
[filter:account_quotas]
use = egg:swift#account_quotas
[filter:container_quotas]
use = egg:swift#container_quotas
使用以下命令来查看和更新 Object Storage 配额。项目中包含的所有用户都可以查看在项目上放置的配额。要更新项目上的 Object Storage 配额,必须在项目中拥有一个 distributorAdmin 的角色。
查看帐户配额:
# swift stat
Account: AUTH_b36ed2d326034beba0a9dd1fb19b70f9
Containers: 0
Objects: 0
Bytes: 0
Meta Quota-Bytes: 214748364800
X-Timestamp: 1351050521.29419
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes
更新配额:
# swift post -m quota-bytes:<BYTES>
例如,要在帐户中放置 5 GB 配额:
# swift post -m quota-bytes:5368709120
第 6 章 管理项目 复制链接链接已复制到粘贴板!
作为云管理员,您可以创建和管理项目。项目是共享虚拟资源池,您可为其分配 OpenStack 用户和组。您可以在每个项目中配置共享虚拟资源的配额。您可以创建多个项目 Red Hat OpenStack Platform,而不会影响相互的权限和资源。用户可以与多个项目关联。每个用户都必须为其分配每个项目的角色。
6.1. 创建一个项目 复制链接链接已复制到粘贴板!
创建项目,将成员添加到项目中,并为项目设置资源限值。
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Projects。
- 点击 Create Project。
- 在 Project Information 选项卡中,输入项目的名称和描述。默认选中 Enabled 复选框。
- 在 Project Members 选项卡上,将成员添加到 All Users 列表中的项目。
- 在 Quotas 选项卡上,指定项目的资源限值。
- 点击 Create Project。
6.2. 编辑项目 复制链接链接已复制到粘贴板!
您可以编辑项目以更改其名称或描述、启用或临时禁用它,或更新项目中的成员。
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Projects。
- 在项目 Actions 列中,单击箭头,再单击 Edit Project。
- 在 Edit Project 窗口中,您可以更新项目来更改其名称或描述,以及启用或临时禁用项目。
- 在 项目成员 选项卡上,根据需要为项目添加成员或移除它们。
- 点击 Save。
默认选中 Enabled 复选框。若要临时禁用项目,可清除 Enabled 复选框。要启用禁用的项目,请选中 Enabled 复选框。
6.3. 删除项目 复制链接链接已复制到粘贴板!
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Projects。
- 选择您要删除的项目。
- 单击 Delete Projects。此时会显示 Confirm Delete Projects 窗口。
- 单击 Delete Projects 以确认操作。
该项目被删除,任何用户对都是解除关联。
6.4. 更新项目配额 复制链接链接已复制到粘贴板!
配额是您为优化云资源而设置的操作限制。您可以设置配额来防止项目资源在不通知的情况下耗尽。您可以在项目和 project-user 级别实施配额。
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Projects。
- 在项目 Actions 列中,单击箭头,再单击 Modify Quotas。
- 在" 配额 "选项卡中,根据需要修改项目配额。
- 点击 Save。
目前,还不支持 嵌套配额。因此,您必须针对项目和子项目单独管理配额。
6.5. 更改活动项目 复制链接链接已复制到粘贴板!
将项目设置为活动项目,以便您可以使用仪表板与项目中的对象交互。要将项目设置为活动项目,您必须是该项目的成员。用户也必须成为多个项目的成员,才能启用 Set as Active Project 选项。您不能将禁用的项目设置为活动,除非重新启用。
- 以具有管理特权的用户身份登录控制面板。
- 选择 Identity > Projects。
- 在项目 Actions 列中,单击箭头,再单击 Set as Active Project。
- 或者,作为项目 Actions 列中的非管理员用户,单击 Set as Active Project,这将成为该列中的默认操作。
6.6. 项目层次结构 复制链接链接已复制到粘贴板!
您可以在身份服务(keystone)中使用多租户嵌套项目。多租户允许子项目从父项目继承角色分配。
6.6.1. 创建分级项目和子项目 复制链接链接已复制到粘贴板!
您可以使用 keystone 域和项目实施层次结构多租户(HMT)。首先创建新域,然后在该域中创建一个项目。然后,您可以将子项目添加到该项目。您也可以通过将用户添加到子项目的 admin 角色,将用户提升给子项目的管理员。
keystone 使用的 HMT 结构目前没有在仪表板中表示。
流程
创建名为
corp的新 keystone 域:$ openstack domain create corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | enabled | True | | id | 69436408fdcb44ab9e111691f8e9216d | | name | corp | +-------------+----------------------------------+在
corp域中创建父项目(私有云):$ openstack project create private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | c50d5cf4fe2e4929b98af5abdec3fd64 | | is_domain | False | | name | private-cloud | | parent_id | 69436408fdcb44ab9e111691f8e9216d | +-------------+----------------------------------+在
私有云父项目中创建子项目(dev),同时同时指定corp域:$ openstack project create dev --parent private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | 11fccd8369824baa9fc87cf01023fd87 | | is_domain | False | | name | dev | | parent_id | c50d5cf4fe2e4929b98af5abdec3fd64 | +-------------+----------------------------------+创建另一个名为
qa的子项目:$ openstack project create qa --parent private-cloud --domain corp +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | domain_id | 69436408fdcb44ab9e111691f8e9216d | | enabled | True | | id | b4f1d6f59ddf413fa040f062a0234871 | | is_domain | False | | name | qa | | parent_id | c50d5cf4fe2e4929b98af5abdec3fd64 | +-------------+----------------------------------+
您可以使用 Identity API 查看项目层次结构。如需更多信息,请参阅 https://developer.openstack.org/api-ref/identity/v3/index.html?expanded=show-project-details-detail
6.6.2. 配置对分层项目的访问 复制链接链接已复制到粘贴板!
默认情况下,新创建的项目没有分配角色。当您为父项目分配角色权限时,可以包含 --inherited 标记,以指示子项目从父项目继承分配的权限。例如,拥有对父项目的 admin 角色的用户也具有对子项目的 admin 访问权限。
授予用户访问权限
查看分配给项目的现有权限:
$ openstack role assignment list --project private-cloud查看现有角色:
$ openstack role list +----------------------------------+-----------------+ | ID | Name | +----------------------------------+-----------------+ | 01d92614cd224a589bdf3b171afc5488 | admin | | 034e4620ed3d45969dfe8992af001514 | member | | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin | | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user | | cfea5760d9c948e7b362abc1d06e557f | reader | | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator | | ef3d3f510a474d6c860b4098ad658a29 | service | +----------------------------------+-----------------+授予用户帐户
user1对private-cloud项目的访问权限:$ openstack role add --user user1 --user-domain corp --project private-cloud member使用
--inherited标记重新运行此命令。因此,user1还可访问私有-cloud子项目,它继承了角色分配:$ openstack role add --user user1 --user-domain corp --project private-cloud member --inherited查看权限更新的结果:
$ openstack role assignment list --effective --user user1 --user-domain corp +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | c50d5cf4fe2e4929b98af5abdec3fd64 | | False | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
user1 用户已继承对 qa 和 dev 项目的访问权限。另外,因为 --inherited 标志应用于父项目,user1 也接收对之后创建的任何子项目的访问权限。
删除用户访问权限
显式和继承的权限必须单独删除。
从显式分配角色中删除用户:
$ openstack role remove --user user1 --project private-cloud member检查更改的结果。请注意,继承的权限仍然存在:
$ openstack role assignment list --effective --user user1 --user-domain corp +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | Role | User | Group | Project | Domain | Inherited | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+ | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | 11fccd8369824baa9fc87cf01023fd87 | | True | | 034e4620ed3d45969dfe8992af001514 | 10b5b34df21d485ca044433818d134be | | b4f1d6f59ddf413fa040f062a0234871 | | True | +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+删除继承的权限:
$ openstack role remove --user user1 --project private-cloud member --inherited检查更改的结果。继承的权限已被删除,生成的输出现在为空:
$ openstack role assignment list --effective --user user1 --user-domain corp
6.6.3. 经销商项目概述 复制链接链接已复制到粘贴板!
通过 经销商 项目,目的是拥有域层次结构;这些域最终允许您考虑重新销售云部分,并且具有代表全面启用云的子域。这个工作分为几个阶段,阶段 1 如下所示:
经销商的第 1 阶段
经销商(第 1 阶段)是 Hierarchical Multitenancy(HMT)的扩展,如下所述: 创建分层项目和子项目。在以前的版本中,keystone 域最初旨在是存储用户和项目的容器,它们自己的表在数据库后端中。现在,域不再存储在自己的表中,并已合并到项目表中:
-
域现在是项目类型,通过
is_domain标志区分。 - 域表示项目层次结构中的顶级项目:域是项目层次结构中的根
API 已更新,以使用
项目subpath 创建和检索域:-
通过创建一个将
is_domain标记设为 true 的项目来创建新域 -
列出属于 domain 的项目:获取项目,包括
is_domain查询参数。
-
通过创建一个将
6.7. 项目安全管理 复制链接链接已复制到粘贴板!
安全组是 IP 过滤规则的集合,这些规则可以分配给项目实例,它们定义实例的网络访问权限。安全组是特定于项目的;项目成员可以编辑其安全组的默认规则,并添加新的规则集。
所有项目都有一个默认的安全组,它应用到没有其他定义的安全组的任何实例。除非更改默认值,否则此安全组将拒绝所有传入流量,并且只允许来自您的实例的传出流量。
您可以在实例创建过程中直接将安全组应用到实例,或应用到正在运行的实例上的端口。
您不能在实例创建过程中将基于角色的访问控制(RBAC)共享安全组直接应用到实例。要将 RBAC 共享安全组应用到实例,必须首先创建端口,将共享安全组应用到该端口,然后将该端口分配给实例。请参阅 将安全组添加到端口。
在不创建允许所需出口的组的情况下,不要删除 default 安全组。例如,如果您的实例使用 DHCP 和元数据,您的实例需要安全组规则来允许到 DHCP 服务器和元数据代理的出口。
6.7.1. 创建安全组 复制链接链接已复制到粘贴板!
创建一个安全组,以便您可以配置安全规则。例如,您可以启用 ICMP 流量,或者禁用 HTTP 请求。
流程
- 在仪表板中,选择 Project > Compute > Access & Security。
- 在 Security Groups 选项卡中,点 Create Security Group。
- 输入组的名称和描述,然后单击 Create Security Group。
6.7.2. 添加安全组规则 复制链接链接已复制到粘贴板!
默认情况下,新组的规则仅提供传出访问。您必须添加新规则以提供其他访问权限。
流程
- 在仪表板中,选择 Project > Compute > Access & Security。
- 在 Security Groups 选项卡中,点您要编辑的安全组的 Manage Rules。
- 单击 Add Rule 以添加新规则。
指定规则值,然后点 Add。
以下规则字段是必需的:
- 规则
规则类型。如果您指定规则模板(例如 'SSH'),则会自动填写其字段:
- TCP:通常用于系统间交换数据,用于最终用户通信。
- UDP:通常用来在系统间交换数据,特别是在应用程序级别。
- ICMP:网络设备(如路由器)使用时来发送错误或监控消息。
- 方向
- Ingress(入站)或 Egress(出站)。
- 打开端口
对于 TCP 或 UDP 规则,打开 Port 或 Port Range(单个端口或端口范围):
- 对于端口范围,在 From Port 和 To Port 字段中输入端口值。
- 对于单个端口,在端口字段中输入 端口值。
- 类型
- ICMP 规则的类型 ; 必须处于 '-1:255' 范围。
- 代码
- 对于 ICMP 规则,代码必须位于 '-1:255' 范围中。
- 远程
此规则的流量源:
- CIDR(Classless Inter-Domain Routing):IP 地址块,这限制了块内 IP 的访问。在 Source 字段中输入 CIDR。
- 安全组:来源组,使组中的任何实例能够访问任何其他组实例。
6.7.3. 删除安全组规则 复制链接链接已复制到粘贴板!
删除您不再需要的安全组规则。
流程
- 在仪表板中,选择 Project > Compute > Access & Security。
- 在 Security Groups 选项卡中,单击该安全组的 Manage Rules。
- 选择安全组规则,然后点删除规则。
- 再次单击 Delete Rule。
您无法撤销删除操作。
6.7.4. 删除安全组 复制链接链接已复制到粘贴板!
删除您不再需要的安全组。
流程
- 在仪表板中,选择 Project > Compute > Access & Security。
- 在 Security Groups 选项卡中,选择组并点击 Delete Security Groups。
- 点 Delete Security Groups。
您无法撤销删除操作。
第 7 章 管理域 复制链接链接已复制到粘贴板!
Identity Service(keystone)域是您可以在 keystone 中创建的额外命名空间。使用 keystone 域对用户、组和项目进行分区。您还可以配置这些单独的域,以在不同的 LDAP 或 Active Directory 环境中验证用户。如需更多信息,请参阅 与身份服务集成 指南。
身份服务包含名为 Default 的内置域。建议您只为服务帐户保留这个域,并为用户帐户创建单独的域。
7.1. 查看域列表 复制链接链接已复制到粘贴板!
您可以使用 openstack domain list 命令查看域列表:
$ openstack domain list
+----------------------------------+------------------+---------+--------------------+
| ID | Name | Enabled | Description |
+----------------------------------+------------------+---------+--------------------+
| 3abefa6f32c14db9a9703bf5ce6863e1 | TestDomain | True | |
| 69436408fdcb44ab9e111691f8e9216d | corp | True | |
| a4f61a8feb8d4253b260054c6aa41adb | federated_domain | True | |
| default | Default | True | The default domain |
+----------------------------------+------------------+---------+--------------------+
7.2. 创建新域 复制链接链接已复制到粘贴板!
您可以使用 openstack domain create 命令创建新域:
$ openstack domain create TestDomain
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| enabled | True |
| id | 3abefa6f32c14db9a9703bf5ce6863e1 |
| name | TestDomain |
+-------------+----------------------------------+
7.3. 查看域详情 复制链接链接已复制到粘贴板!
您可以使用 openstack domain show 命令查看域详情:
$ openstack domain show TestDomain
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | |
| enabled | True |
| id | 3abefa6f32c14db9a9703bf5ce6863e1 |
| name | TestDomain |
+-------------+----------------------------------+
7.4. 禁用域 复制链接链接已复制到粘贴板!
您可以根据您的要求禁用和启用域。
流程
使用
--disable选项禁用域:$ openstack domain set TestDomain --disable确认域已被禁用:
$ openstack domain show TestDomain +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | | | enabled | False | | id | 3abefa6f32c14db9a9703bf5ce6863e1 | | name | TestDomain | +-------------+----------------------------------+如果需要,使用
--enable选项重新启用域:$ openstack domain set TestDomain --enable
第 8 章 使用 LDAP 进行身份管理 复制链接链接已复制到粘贴板!
如果您已经将身份服务(keystone)配置为对 或 进行身份验证,以便通过 LDAP 服务器从 LDAP 服务器检索身份信息,您可以使用 CA 证书保护身份服务的 LDAP 通信。
您必须从 Active Directory 获取 CA 证书,将 CA 证书文件转换为隐私增强邮件(PEM)文件格式,并为身份服务配置安全 LDAP 通信。您可以使用三种方法之一执行此配置,具体取决于如何配置 CA 信任。
8.1. 从 Active Directory 获取 CA 证书 复制链接链接已复制到粘贴板!
使用以下示例代码查询 Active Directory 来获取 CA 证书。CA_NAME 是证书的名称,可根据您的配置来更改其他参数:
CA_NAME="WIN2012DOM-WIN2012-CA"
AD_SUFFIX="dc=win2012dom,dc=com" LDAPURL="ldap://win2012.win2012dom.com"
ADMIN_DN="cn=Administrator,cn=Users,$AD_SUFFIX"
ADMINPASSWORD="MyPassword"
CA_CERT_DN="cn=latexmath:[$CA_NAME,cn=certification authorities,cn=public key services,cn=services,cn=configuration,$]AD_SUFFIX"
TMP_CACERT=/tmp/cacert.`date +'%Y%m%d%H%M%S'`.$$.pem
ldapsearch -xLLL -H
latexmath:[$LDAPURL -D `echo \"$]ADMIN_DN"`-W -s base -b`echo
"$CA_CERT_DN"` objectclass=* cACertificate
8.2. 将 CA 证书转换为 PEM 格式 复制链接链接已复制到粘贴板!
在身份服务(keystone)中配置 LDAP 之前,您必须将 CA 证书转换为 PEM 格式。
流程
创建名为 /path/cacert.pem 的文件,并在标题和 footer 中包括从 Active Directory 获取的 CA 证书的内容:
-----BEGIN CERTIFICATE----- MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB... -----END CERTIFICATE-----为进行故障排除,您可以执行以下查询来检查 LDAP 是否正常工作,并确保正确创建了 PEM 证书文件。
LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime查询应该返回类似如下的结果:
dn: currentTime: 20141022050611.0Z如果由 Web 服务器托管,则运行以下命令来获取 CA 证书。
- $HOST=redhat.com
$PORT=443
# echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p'
8.3. 为身份服务配置安全 LDAP 通信 复制链接链接已复制到粘贴板!
使用以下方法之一为 Identity 服务(keystone)配置 LDAP。
方法 1
如果使用 PEM 文件,在 LDAP 级别上配置 CA 信任,请使用此方法。手动指定 CA 证书文件的位置。以下流程保护 LDAP 通信不仅可用于身份服务,而且适用于使用 OpenLDAP 库的所有应用程序。
-
将含有 PEM 格式的 CA 证书链的文件复制到
/etc/openldap/certs目录。 编辑
/etc/openldap/ldap.conf并添加以下指令,用 CA 证书文件的位置和名称替换 [CA_FILE]:TLS_CACERT /etc/openldap/certs/[CA_FILE]重启 horizon 容器:
# systemctl restart tripleo_horizon
方法 2
如果使用网络安全服务(NSS)数据库在 LDAP 库级别上配置 CA 信任,请使用这个方法。使用 certutil 命令,将 CA 证书导入并信任到 OpenLDAP 库使用的 NSS 证书数据库中。以下流程保护 LDAP 通信不仅可用于身份服务,而且适用于使用 OpenLDAP 库的所有应用程序。
导入并信任证书,用 CA 证书文件的位置和名称替换 [CA_FILE]:
# certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE] # certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]确认正确导入 CA 证书:
# certutil -d /etc/openldap/certs -L您的 CA 证书已被列出,信任属性被设置为 CT、。
重启 horizon 容器:
# systemctl restart tripleo_horizon
方法 3
如果使用 PEM 文件,在 Keystone 级别上配置 CA 信任,请使用此方法。保护身份服务和 LDAP 服务器之间的通信的最后方法是为身份服务配置 TLS。
但是,与以上两种方法不同,此方法只保护身份服务的 LDAP 通信,且不会为使用 OpenLDAP 库的其他应用程序保护 LDAP 通信。以下流程使用 openstack-config 命令编辑 /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf 文件中的值。
启用 TLS:
# openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap use_tls True指定证书的位置,使用 CA 证书的名称替换 [CA_FILE]:
# openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_cacertfile [CA_FILE]指定 LDAP 服务器中的传入 TLS 会话执行的客户端证书检查,将 [CERT_BEHAVIOR] 替换为以下列出的其中之一:
- 需求
- 将始终从 LDAP 服务器请求证书。如果未提供证书,或者无法针对现有证书颁发机构文件验证证书,会话将被终止。
- allow
- 将始终从 LDAP 服务器请求证书。即使未提供证书,会话也会正常进行。如果提供了证书,但无法针对现有的证书颁发机构文件进行验证,证书将被忽略,会话将正常进行。
- never
- 绝不会请求证书。
# openstack-config --set /var/lib/config-data/puppet-generated/keystone/etc/keystone/keystone.conf ldap tls_req_cert [CERT_BEHAVIOR]重启 keystone 和 horizon 容器:
# systemctl restart tripleo_keystone # systemctl restart tripleo_horizon
第 9 章 应用凭证 复制链接链接已复制到粘贴板!
使用 应用凭证 避免在配置文件中嵌入用户帐户凭据的过程。相反,用户会创建一个应用凭据,以接收委派对单个项目的访问权限,并且具有自己的不同 secret。用户也可以将委派的特权限制为该项目中的单个角色。这样,您可以采用最小特权的原则,经过身份验证的用户可以只获得访问所需的一个项目和角色的访问权限,而不是所有项目和角色。
您可以使用此方法来使用 API,而无需公开您的用户凭据,应用可以在不需要嵌入用户凭据的情况下对 Keystone 进行身份验证。
您可以使用应用程序凭证为应用程序生成令牌和配置 keystone_authtoken 设置。以下部分介绍了这些用例。
Application Credential 依赖于创建它的用户帐户,因此,如果帐户被删除,或丢失对相关角色的访问,它将终止。
9.1. 使用应用凭证生成令牌 复制链接链接已复制到粘贴板!
在控制面板中,用户可使用应用凭据作为自助服务功能。本例演示了用户如何创建应用凭据,然后使用它生成令牌。
创建 test 项目并测试用户帐户:
创建名为
AppCreds的项目:$ openstack project create AppCreds创建名为
AppCredsUser的用户:$ openstack user create --project AppCreds --password-prompt AppCredsUser为
AppCredsUser授予AppCreds项目的成员角色访问权限:$ openstack role add --user AppCredsUser --project AppCreds member
以
AppCredsUser身份登录仪表板并创建应用程序凭证:概述→Identity→Application Credentials→+Create Application Credential。注意确保下载
clouds.yaml文件内容,因为您无法在名为Application Credential的弹出窗口后再次访问它。使用 CLI 创建名为
/home/stack/.config/openstack/clouds.yaml的文件,并粘贴clouds.yaml文件的内容。# This is a clouds.yaml file, which can be used by OpenStack tools as a source # of configuration on how to connect to a cloud. If this is your only cloud, # just put this file in ~/.config/openstack/clouds.yaml and tools like # python-openstackclient will just work with no further config. (You will need # to add your password to the auth section) # If you have more than one cloud account, add the cloud entry to the clouds # section of your existing file and you can refer to them by name with # OS_CLOUD=openstack or --os-cloud=openstack clouds: openstack: auth: auth_url: http://10.0.0.10:5000/v3 application_credential_id: "6d141f23732b498e99db8186136c611b" application_credential_secret: "<example secret value>" region_name: "regionOne" interface: "public" identity_api_version: 3 auth_type: "v3applicationcredential"注意这些值与您的部署有所不同。
使用 Application Credential 生成令牌。使用以下命令时,不得以任何特定用户提供,且您必须位于与
clouds.yaml文件相同的目录中。[stack@undercloud-0 openstack]$ openstack --os-cloud=openstack token issue +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | expires | 2018-08-29T05:37:29+0000 | | id | gAAAAABbhiMJ4TxxFlTMdsYJpfStsGotPrns0lnpvJq9ILtdi-NKqisWBeNiJlUXwmnoGQDh2CMyK9OeTsuEXnJNmFfKjxiHWmcQVYzAhMKo6_QMUtu_Qm6mtpzYYHBrUGboa_Ay0LBuFDtsjtgtvJ-r8G3TsJMowbKF-yo--O_XLhERU_QQVl3hl8zmMRdmLh_P9Cbhuolt | | project_id | 1a74eabbf05c41baadd716179bb9e1da | | user_id | ef679eeddfd14f8b86becfd7e1dc84f2 | +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
如果您收到类似于 init()的错误,则会出现意外的关键字参数 'application_credential_secret',那么您可能仍然会被提供到上一个凭证。对于全新的环境,请运行 sudo su - 堆栈。
9.2. 将应用凭证与应用程序集成 复制链接链接已复制到粘贴板!
应用凭据可用于对 keystone 的应用程序进行身份验证。使用 Application Credentials 时,keystone_authtoken 设置使用 v3applicationcredential 作为身份验证类型,并包含您在凭证创建过程中收到的凭证。输入以下值:
-
application_credential_secret:应用凭据机密。 -
application_credential_id:应用凭据 ID。 -
(可选)
application_credential_name:如果您使用命名的应用程序凭证,您可以使用此参数,而不是 ID。
例如:
[keystone_authtoken]
auth_url = http://10.0.0.10:5000/v3
auth_type = v3applicationcredential
application_credential_id = "6cb5fa6a13184e6fab65ba2108adf50c"
application_credential_secret = "<example password>"
9.3. 管理应用凭证 复制链接链接已复制到粘贴板!
您可以使用命令行来创建和删除应用凭证。
create 子命令根据当前源帐户创建应用凭据。例如,当作为 admin 用户提供时创建凭证将向应用凭证授予相同的角色:
$ openstack application credential create --description "App Creds - All roles" AppCredsUser
+--------------+----------------------------------------------------------------------------------------+
| Field | Value |
+--------------+----------------------------------------------------------------------------------------+
| description | App Creds - All roles |
| expires_at | None |
| id | fc17651c2c114fd6813f86fdbb430053 |
| name | AppCredsUser |
| project_id | 507663d0cfe244f8bc0694e6ed54d886 |
| roles | member reader admin |
| secret | fVnqa6I_XeRDDkmQnB5lx361W1jHtOtw3ci_mf_tOID-09MrPAzkU7mv-by8ykEhEa1QLPFJLNV4cS2Roo9lOg |
| unrestricted | False |
+--------------+----------------------------------------------------------------------------------------+
使用 --unrestricted 参数可让应用程序凭证创建和删除其他应用程序凭证和信任。这存在潜在的危险行为,默认是禁用的。您不能与其他访问规则结合使用 --unrestricted 参数。
默认情况下,生成的角色成员资格包含分配给创建凭据的帐户的所有角色。您可以通过仅委派访问特定角色来限制角色成员资格:
$ openstack application credential create --description "App Creds - Member" --role member AppCredsUser
+--------------+----------------------------------------------------------------------------------------+
| Field | Value |
+--------------+----------------------------------------------------------------------------------------+
| description | App Creds - Member |
| expires_at | None |
| id | e21e7f4b578240f79814085a169c9a44 |
| name | AppCredsUser |
| project_id | 507663d0cfe244f8bc0694e6ed54d886 |
| roles | member |
| secret | XCLVUTYIreFhpMqLVB5XXovs_z9JdoZWpdwrkaG1qi5GQcmBMUFG7cN2htzMlFe5T5mdPsnf5JMNbu0Ih-4aCg |
| unrestricted | False |
+--------------+----------------------------------------------------------------------------------------+
删除应用程序凭证:
$ openstack application credential delete AppCredsUser
9.4. 替换应用程序凭证 复制链接链接已复制到粘贴板!
应用凭据将绑定到创建它们的用户帐户,并在用户帐户被删除时无效,或者用户丢失对委派的角色的访问权限。因此,您应该准备根据需要生成新应用程序凭证。
替换配置文件的现有应用程序凭证
更新分配给应用程序的应用程序凭证(使用配置文件):
- 创建一组新的应用凭据。
- 将新凭据添加到应用配置文件中,以替换现有的凭据。如需更多信息,请参阅将应用程序凭证与应用程序集成。
- 重启应用程序服务以应用更改。
- 删除旧应用程序凭证(如果适用)。有关命令行选项的更多信息,请参阅管理应用程序凭证。
替换 clouds.yaml 中的现有应用程序凭证
替换 clouds.yaml 使用的应用程序凭证时,您必须使用 OpenStack 用户凭证创建替换凭证。默认情况下,您无法使用应用程序凭证来创建另一组应用程序凭证。openstack application credential create 命令基于当前源的帐户创建一个应用程序凭证。
-
以 OpenStack 用户身份进行身份验证,后者最初创建即将过期的身份验证凭据。例如,如果您使用应用程序凭证 生成令牌的步骤, 则必须再次以
AppCredsUser身份登录。 创建名为
AppCred2的应用凭据。这可以通过 OpenStack Dashboard 或openstackCLI 界面完成:openstack application credential create --description "App Creds 2 - Member" --role member AppCred2-
复制上一命令输出中的
id和secret参数。secret参数值无法再次访问。 -
将
${HOME}/.config/openstack/clouds.yaml文件中的application_credential_id和application_credential_secret参数值替换为您复制的secret和id值。
验证
使用 clouds.yaml 生成令牌,以确认凭证按预期工作。使用以下命令时,不得作为任何特定用户提供,且必须与
clouds.yaml文件位于同一个目录中:[stack@undercloud-0 openstack]$ openstack --os-cloud=openstack token issue输出示例:
+------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | expires | 2018-08-29T05:37:29+0000 | | id | gAAAAABbhiMJ4TxxFlTMdsYJpfStsGotPrns0lnpvJq9ILtdi-NKqisWBeNiJlUXwmnoGQDh2CMyK9OeTsuEXnJNmFfKjxiHWmcQVYzAhMKo6_QMUtu_Qm6mtpzYYHBrUGboa_Ay0LBuFDtsjtgtvJ-r8G3TsJMowbKF-yo--O_XLhERU_QQVl3hl8zmMRdmLh_P9Cbhuolt | | project_id | 1a74eabbf05c41baadd716179bb9e1da | | user_id | ef679eeddfd14f8b86becfd7e1dc84f2 | +------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+