用户和身份管理指南


Red Hat OpenStack Platform 8

管理用户和身份验证机制

OpenStack Documentation Team

摘要

用户和身份管理指南提供了管理用户角色、配额、项目和项目安全性的流程,以及 Red Hat OpenStack Platform 环境的 Identity 服务。

前言

作为云管理员,您可以管理项目、用户和角色。项目是云中的组织单元,您可以为其分配用户。项目也称为租户或帐户。用户可以是一个或多个项目的成员。角色定义用户可以执行的操作。

每个 OpenStack 部署必须至少包含一个项目、一个用户和一个角色(链接在一起)。作为云管理员,您可以添加、更新和删除项目与用户,将用户分配给一个或多个项目,以及更改或删除这些分配。您可以独立于彼此管理项目和用户。

您还可以使用 Keystone 身份服务配置用户身份验证,以控制对服务和端点的访问。Keystone 提供基于令牌的身份验证,并可与 LDAP 和 Active Directory 集成,以便您可以在外部管理用户和身份,并将用户数据与 Keystone 同步。

第 1 章 用户管理

1.1. 用户管理

作为云管理员,您可以在仪表板中添加、修改和删除用户。用户可以是一个或多个项目的成员。您可以独立于彼此管理项目和用户。

1.1.1. 创建用户

使用这个流程在仪表板中创建用户。您可以为用户分配主项目和角色。请注意,在仪表板中创建的用户默认为 Keystone 用户。要集成 Active Directory 用户,您可以配置 Red Hat OpenStack Platform Identity 服务中包含的 LDAP 供应商。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Users
  2. Create User.
  3. 输入用户的用户名、电子邮件和初始密码。
  4. Primary Project 列表中选择一个项目。
  5. Role 列表中选择用户的角色(默认角色为 _member_)。
  6. Create User.

1.1.2. 编辑用户

使用这个流程更新用户的详情,包括主项目。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Users
  2. 在 User's Actions 列中,单击 Edit
  3. Update User 窗口中,您可以更新 User Name, Email, and Primary Project
  4. 单击 Update User

1.1.3. 启用或禁用用户

使用这个流程启用或禁用用户。您可以一次禁用或启用一个用户。禁用的用户无法登录控制面板,也无法访问任何 OpenStack 服务。此外,禁用的用户的主项目不能设置为 active。禁用的用户可以再次启用,这与删除无法撤销操作的用户不同。控制面板中的任何 user-project 操作必须重新启用禁用的用户。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Users
  2. Actions 列中,单击箭头,然后选择 Enable UserDisable User。在 Enabled 列中,值然后更新为 TrueFalse

1.1.4. 删除用户

以 admin 用户身份,使用此流程使用控制面板删除用户。此操作不能反向,这与禁用用户不同。删除的用户会从它所属的项目成员列表中列出。与 user-project 对关联的所有角色也会丢失。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Users
  2. 选择您要删除的用户。
  3. 单击 Delete Users。此时会显示 Confirm Delete Users 窗口。
  4. 单击 Delete Users 以确认操作。

第 2 章 角色管理

2.1. 角色管理

OpenStack 使用基于角色的访问控制(RBAC)机制来管理对其资源的访问。角色定义用户可以执行的操作。默认情况下,有两个预定义角色:一个成员角色附加到租户,以及一个管理角色,使非管理员用户能够管理环境。请注意,有抽象级别的权限,可以创建管理员需要的角色,并充分配置服务。

2.1.1. 查看角色

使用以下命令列出可用的预定义角色:

$ keystone role-list
+----------------------------------+---------------+
|                id                |      name     |
+----------------------------------+---------------+
| 71ccc37d41c8491c975ae72676db687f |     Member    |
| 149f50a1fe684bfa88dae76a48d26ef7 | ResellerAdmin |
| 9fe2ff9ee4384b1894a90878d3e92bab |    _member_   |
| 6ecf391421604da985db2f141e46a7c8 |     admin     |
+----------------------------------+---------------+
Copy to Clipboard Toggle word wrap

要获取指定角色的详情,请运行:

$ keystone role-get [ROLE]
Copy to Clipboard Toggle word wrap

Example

$ keystone role-get admin
+----------+----------------------------------+
| Property |              Value               |
+----------+----------------------------------+
|    id    | 6ecf391421604da985db2f141e46a7c8 |
|   name   |             admin                |
+----------+----------------------------------+
Copy to Clipboard Toggle word wrap

2.1.2. 创建并分配角色

作为云管理员,您可以使用以下一组命令在 Keystone 客户端上创建和管理角色:每个 OpenStack 部署必须至少包含一个项目、一个用户和一个角色(链接在一起)。但是,用户可以是多个项目的成员。要将用户分配到多个项目,请创建一个角色,并将该角色分配给 user-project 对。请注意,您可以创建一个用户并在仪表板中分配主项目和默认角色。

注意

名称或 ID 可以用来指定用户、角色或项目。

  1. 创建 new-role 角色:

    $ keystone role-create --name [ROLE_NAME]
    Copy to Clipboard Toggle word wrap

    Example

    $ keystone role-create --name new-role
    +----------+----------------------------------+
    | Property |              Value               |
    +----------+----------------------------------+
    |    id    | 61013e7aa4ba4e00a0a1ab4b14bc6b2a |
    |   name   |             new-role             |
    +----------+----------------------------------+
    Copy to Clipboard Toggle word wrap

  2. 若要为用户分配项目,您必须将角色分配给 user-project 对。要做到这一点,获取用户、角色和项目名称或 ID:

    1. 列出用户:

      $ keystone user-list
      Copy to Clipboard Toggle word wrap
    2. 列出角色:

      $ keystone role-list
      Copy to Clipboard Toggle word wrap
    3. 列出项目:

      $ keystone tenant-list
      Copy to Clipboard Toggle word wrap
  3. 为 user-project 对分配一个角色。

    $ keystone user-role-add --user [USER_NAME] --role [ROLE_NAME] --tenant [TENANT_NAME]
    Copy to Clipboard Toggle word wrap

    Example

    在本例中,您要将 new-role 角色分配给 demo-demo 对:

    $ keystone user-role-add --user demo --role new-role --tenant demo
    Copy to Clipboard Toggle word wrap
  4. 验证用户 demo 的角色分配:

    $ keystone user-role-list --user [USER_NAME] --tenant [TENANT_NAME]
    Copy to Clipboard Toggle word wrap

    Example

    $ keystone user-role-list --user demo --tenant demo
    Copy to Clipboard Toggle word wrap

2.1.3. 删除角色

  1. 使用以下命令,从 user-project 对中删除角色。删除角色可确保相关的 user-project 对会丢失。

    $ keystone user-role-remove --user [USER_NAME] --role [ROLE] --tenant [TENANT_NAME]
    Copy to Clipboard Toggle word wrap
  2. 验证角色删除:

    $ keystone user-role-list --user [USER_NAME] --tenant [TENANT_NAME]
    Copy to Clipboard Toggle word wrap

    如果角色已被删除,命令输出将省略已删除的角色。

第 3 章 组管理

3.1. 管理 Keystone 组

3.1.1. 使用命令行

您可以使用 Identity Service (keystone)组为多个用户帐户分配一致的权限。这个示例创建了一个组,然后为组分配权限。因此,组成员将继承分配给组相同的权限:

注意

openstack group 子命令需要 keystone v3

  1. 创建组 grp-Auditors

    $ openstack group create grp-Auditors
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | domain_id   | default                          |
    | id          | 2a4856fc242142a4aa7c02d28edfdfff |
    | name        | grp-Auditors                     |
    +-------------+----------------------------------+
    Copy to Clipboard Toggle word wrap
  2. 查看 keystone 组列表:

    $ openstack group list --long
    +----------------------------------+--------------+-----------+-------------+
    | ID                               | Name         | Domain ID | Description |
    +----------------------------------+--------------+-----------+-------------+
    | 2a4856fc242142a4aa7c02d28edfdfff | grp-Auditors | default   |             |
    +----------------------------------+--------------+-----------+-------------+
    Copy to Clipboard Toggle word wrap
  3. 授予 grp-Auditors 组权限来访问 demo 项目,同时使用 _member_ 角色:

    $ openstack role add _member_ --group grp-Auditors --project demo
    Copy to Clipboard Toggle word wrap
  4. 将现有用户 user1 添加到 grp-Auditors 组中:

    $ openstack group add user grp-Auditors user1
    user1 added to group grp-Auditors
    Copy to Clipboard Toggle word wrap
  5. 确认 user1grp-Auditors 的成员:

    $ openstack group contains user grp-Auditors user1
    user1 in group grp-Auditors
    Copy to Clipboard Toggle word wrap
  6. 查看分配给 user1 的有效权限:

    $ openstack role assignment list --effective --user user1
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    | Role                             | User                             | Group | Project                          | Domain | Inherited |
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    | 9fe2ff9ee4384b1894a90878d3e92bab | 3fefe5b4f6c948e6959d1feaef4822f2 |       | 0ce36252e2fb4ea8983bed2a568fa832 |        | False     |
    +----------------------------------+----------------------------------+-------+----------------------------------+--------+-----------+
    Copy to Clipboard Toggle word wrap

3.1.2. 使用仪表板

您可以使用控制面板管理 keystone 组成员资格。如上例所述,您将需要使用命令行为组分配角色权限。

3.1.2.1. 创建一个组
  1. 在控制面板中以 admin 用户身份,选择 Identity > Groups
  2. 单击 +Create Group
  3. 输入组的名称和描述。
  4. 单击 Create Group
3.1.2.2. 管理组成员身份

您可以使用控制面板管理 keystone 组成员资格。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Groups
  2. 单击您需要编辑的组的 管理成员
  3. 使用 Add users 向组中添加用户。如果您需要删除用户,请选中其复选框,然后单击或删除 用户

第 4 章 配额管理

4.1. 配额管理

作为云管理员,您可以为项目设置和管理配额。每个项目都被分配了资源,项目用户被授予使用这些资源的访问权限。这可让多个项目使用单个云,而不会相互干扰权限和资源。创建新租户时,将预先配置一组资源配额。配额包括 VCPU 数、实例、RAM 和浮动 IP 的数量,它们可以分配给租户。配额可以在租户(或项目)和 tenant-user 级别实施。请注意,您可以使用控制面板为新的和现有的租户设置或修改计算和块存储配额。有关如何在仪表板中设置和更新项目配额的步骤,请参阅 第 5 章 项目管理

4.1.1. 查看用户的计算配额

运行以下命令列出用户当前设置的配额值:

$ nova quota-show --user [USER] --tenant [TENANT]
Copy to Clipboard Toggle word wrap

Example

$ nova quota-show --user demoUser --tenant demo
+-----------------------------+-------+
| 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    |
+-----------------------------+-------+
Copy to Clipboard Toggle word wrap

4.1.2. 为用户更新计算配额

运行以下命令以更新特定的配额值:

$ nova quota-update --user [USER] --[QUOTA_NAME] [QUOTA_VALUE] [TENANT]
$ nova quota-show --user [USER] --tenant [TENANT]
Copy to Clipboard Toggle word wrap

示例

$ nova quota-update --user demoUser --floating-ips 10 demo
$ nova quota-show --user demoUser --tenant demo
+-----------------------------+-------+
| Quota                       | Limit |
+-----------------------------+-------+
| instances                   | 10    |
| cores                       | 20    |
| ram                         | 51200 |
| floating_ips                | 10    |
| ...                         |       |
+-----------------------------+-------+
Copy to Clipboard Toggle word wrap

注意

要查看 quota-update 命令的选项列表,请运行:

$ nova help quota-update
Copy to Clipboard Toggle word wrap

4.1.3. 为用户设置对象存储配额

对象存储配额可分为以下类别:

  • 容器配额 - 限制可存储在单个容器中的对象总数(以字节为单位)或对象数量。
  • 帐户配额 - 限制用户在对象存储服务中可用的总大小(以字节为单位)。

要设置容器配额或帐户配额,对象存储代理服务器必须具有参数 container_quotasaccount_quotas (或两者)添加到 proxy-server.conf 文件的 [pipeline:main] 部分:

[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
Copy to Clipboard Toggle word wrap

使用以下命令来查看和更新对象存储配额:项目中包含的所有用户都可以查看项目上放置的配额。要更新项目上的对象存储配额,您必须在项目中具有 ResellerAdmin 角色。

查看帐户配额:

# 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
Copy to Clipboard Toggle word wrap

更新配额:

# swift post -m quota-bytes:<BYTES>
Copy to Clipboard Toggle word wrap

例如,要在帐户中放置 5 GB 配额:

# swift post -m quota-bytes:5368709120
Copy to Clipboard Toggle word wrap

要验证配额,请再次运行 swift stat 命令:

# swift stat

Account: AUTH_b36ed2d326034beba0a9dd1fb19b70f9
Containers: 0
Objects: 0
Bytes: 0
Meta Quota-Bytes: 5368709120
X-Timestamp: 1351541410.38328
Content-Type: text/plain; charset=utf-8
Accept-Ranges: bytes
Copy to Clipboard Toggle word wrap

第 5 章 项目管理

5.1. 项目管理

作为云管理员,您可以创建和管理项目(租户)。租户是指分配了多个 OpenStack 用户和资源的项目。可以为每个租户设置配额。这可让多个项目使用单个云,而不会相互干扰权限和资源。词语项目和租户可互换使用。用户可以与多个项目关联。每个用户对都必须关联有角色。

5.1.1. 创建一个项目

使用这个流程创建项目,将成员添加到项目中,并为项目设置资源限值。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Projects
  2. 点击 Create Project
  3. Project Information 选项卡中,输入项目的名称和描述(默认情况下会选中 Enabled 复选框)。
  4. 项目成员选项卡上,从 All Users 列表向项目添加成员。
  5. Quotas 选项卡中,指定项目的资源限值。
  6. 点击 Create Project

5.1.2. 编辑项目

您可以编辑项目以更改其名称或描述、启用或禁用它,或更新其成员。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Projects
  2. 在项目的 Actions 列中,单击箭头,然后单击 Edit Project
  3. Edit Project 窗口中,您可以更新项目以更改其名称或描述,然后启用或禁用项目。
  4. 项目成员选项卡 上,添加成员到项目中,或者根据需要删除它们。
  5. 点击 Save
注意

Enabled 复选框会被默认选中。若要临时禁用项目,可清除 Enabled 复选框。若要启用禁用的项目,可选中 Enabled 复选框。

5.1.3. 删除项目

  1. 在控制面板中以 admin 用户身份,选择 Identity > Projects
  2. 选择您要删除的项目。
  3. 单击 Delete Projects。此时会显示 Confirm Delete Projects 窗口。
  4. 单击 Delete Projects 以确认操作。

该项目将被删除,并且任何用户对将被解除关联。

5.1.4. 更新项目配额

配额是可每个项目设置的操作限制,以优化云资源。您可以设置配额来防止项目资源被耗尽,而无需通知。配额可以在项目和项目用户级别实施。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Projects
  2. 在项目的 Actions 列中,单击箭头,再单击 Modify Quotas
  3. Quota 选项卡中,根据需要修改项目配额。
  4. 点击 Save

5.1.5. 更改活跃项目

用户可以将项目设置为其成员的活动项目。用户也需要成为多个项目的成员,才能启用 Set as Active Project 选项。将项目设置为活跃项目可让您访问活动项目的仪表板中的对象。请注意,除非重新启用禁用的项目,否则无法将禁用的项目设置为 active。

  1. 在控制面板中以 admin 用户身份,选择 Identity > Projects
  2. 在项目的 Actions 列中,单击箭头,再单击 Set as Active Project
  3. 或者,作为非管理员用户,在项目的 Actions 列中,单击 Set as Active Project,这将成为列中的默认操作。

5.2. 项目安全管理

安全组是一组 IP 过滤规则,可分配给项目实例,用于定义对实例的网络访问。安全组是特定于项目的;项目成员可以编辑其安全组的默认规则,并添加新的规则集。

所有项目都有一个默认安全组,它应用到没有其他定义的安全组的任何实例。除非更改默认值,否则此安全组拒绝所有传入的流量,并且只允许到实例的传出流量。

5.2.1. 创建安全组

  1. 在控制面板中,选择 Project > Compute > Access & Security
  2. Security Groups 选项卡中,单击 Create Security Group
  3. 为组提供名称和描述,然后单击 创建安全组

5.2.2. 添加安全组规则

默认情况下,新组的规则仅提供传出访问。您必须添加新规则以提供额外的访问权限。

  1. 在控制面板中,选择 Project > Compute > Access & Security
  2. Security Groups 选项卡中,点您要编辑的安全组的管理规则
  3. 单击 Add Rule 以添加新规则。
  4. 指定规则值,然后单击 Add

    需要以下规则字段:

    规则

    节点类型。如果您指定了规则模板(如 SSH),则会自动填写其字段:

    • TCP:通常用于在系统之间交换数据,以及用于最终用户通信。
    • UDP:通常用于在系统间交换数据,特别是在应用程序级别。
    • ICMP:网络设备(如路由器)使用来发送错误或监控消息。
    方向
    Ingress (入站)或 Egress (出站)。
    打开端口

    对于 TCP 或 UDP 规则,打开 PortPort Range(单个端口或端口范围):

    • 对于一系列端口,在 From PortTo Port 字段中输入 port 值。
    • 对于单个端口,在 Port 字段中输入端口值。
    类型
    ICMP 规则的类型;必须在范围-1: 255 中
    代码
    ICMP 规则的代码;必须在范围-1: 255 中
    远程

    此规则的流量源:

    • CIDR (Classless Inter-Domain Routing): IP 地址块,它限制对块中的 IP 的访问。在 Source 字段中输入 CIDR。
    • 安全组:允许组中的任何实例访问任何其他组实例的 Source 组。

5.2.3. 删除安全组规则

  1. 在控制面板中,选择 Project > Compute > Access & Security
  2. Security Groups 选项卡中,点安全组的管理规则
  3. 选择安全组规则,然后点删除规则
  4. 再次单击 Delete Rule
注意

您无法撤销 delete 操作。

5.2.4. 删除安全组

  1. 在控制面板中,选择 Project > Compute > Access & Security
  2. Security Groups 选项卡中,选择组,再单击 Delete Security Groups
  3. 单击 Delete Security Groups
注意

您无法撤销 delete 操作。

5.3. Identity Service 中的分层多租户

在 OpenStack Identity Service (keystone)中,您可以使用多租户来嵌套项目。域代表用户、组和项目的集合,其中各自归一个域所有。通过在项目(包括其他域拥有的项目)授予角色,用户可以与多个项目关联。项目是资源的容器,用于定义配额和对虚拟机镜像的访问。

注意

多租户作为技术预览提供。有关技术预览功能的支持范围的更多信息,请参阅 https://access.redhat.com/support/offerings/techpreview/

第 6 章 域管理

Identity Service (keystone)域是您可以在 keystone 中创建的额外命名空间。您可以使用 keystone 域对用户、组和项目进行分区。这些单独的域也可以配置为在不同 LDAP 或 Active Directory 环境中验证用户。如需更多信息,请参阅 集成 Identity Service

注意

Identity Service 包括一个名为 Default 的内置域。建议您只为服务帐户保留这个域,并为用户帐户创建单独的域。

6.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 |
+----------------------------------+------------------+---------+--------------------+
Copy to Clipboard Toggle word wrap
注意

如果这个命令不可用,请检查您为命令行会话启用了 keystone v3。

6.2. 创建新域

您可以使用 openstack domain create 创建新域。例如:

$ openstack domain create TestDomain
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 3abefa6f32c14db9a9703bf5ce6863e1 |
| name        | TestDomain                       |
+-------------+----------------------------------+
Copy to Clipboard Toggle word wrap

6.3. 查看域的详情

您可以使用 openstack domain show 查看域的详细信息。例如:

$ openstack domain show TestDomain
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 3abefa6f32c14db9a9703bf5ce6863e1 |
| name        | TestDomain                       |
+-------------+----------------------------------+
Copy to Clipboard Toggle word wrap

6.4. 禁用一个域

  1. 您可以使用-禁用 禁用域。例如:

    $ openstack domain set TestDomain --disable
    Copy to Clipboard Toggle word wrap
  2. 确认域已被禁用:

    $ openstack domain show TestDomain
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description |                                  |
    | enabled     | False                            |
    | id          | 3abefa6f32c14db9a9703bf5ce6863e1 |
    | name        | TestDomain                       |
    +-------------+----------------------------------+
    Copy to Clipboard Toggle word wrap
  3. 如果需要,您可以重新启用域:

    $ openstack domain set TestDomain --enable
    Copy to Clipboard Toggle word wrap

第 7 章 身份管理

7.1. 安全 LDAP 通信

如果您配置了 Identity 服务(keystone)以针对或检索 LDAP 服务器的身份信息,您可以使用 CA 证书保护 Identity 服务的 LDAP 通信。

本节概述了如何从 Active Directory 获取 CA 证书,如何将 CA 证书文件转换为 Privacy Enhanced Mail (PEM)文件格式,以及为 Identity 服务配置安全 LDAP 通信的三种方法。根据配置 CA 信任的位置和方式,每个方法中的流程都必须执行。

7.1.1. 从 Active Directory 获取 CA 证书

以下代码演示了如何查询 Active Directory 获取 CA 证书的示例。CA_NAME 是证书的名称(您可以在 mmc.exe 中看到),并且可以根据您的设置来更改其余参数:

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
Copy to Clipboard Toggle word wrap

7.1.2. 将 CA 证书转换为 PEM 文件格式

创建名为 /path/cacert.pem 的文件,并包含 LDAP 查询均是从 Active Directory 获取的 CA 证书的内容,在标头和页脚内,如下例所示:

-----BEGIN CERTIFICATE-----
MIIDbzCCAlegAwIBAgIQQD14hh1Yz7tPFLXCkKUOszANB... -----END
CERTIFICATE-----
Copy to Clipboard Toggle word wrap

要进行故障排除,您可以执行以下查询来检查 LDAP 是否正常工作,并确保正确创建了 PEM 证书文件。

LDAPTLS_CACERT=/path/cacert.pem ldapsearch -xLLL -ZZ -H $LDAPURL -s base -b "" "objectclass=*" currenttime
Copy to Clipboard Toggle word wrap

查询应返回类似如下的结果:

dn: currentTime:
20141022050611.0Z
Copy to Clipboard Toggle word wrap

如果 CA 证书由 Web 服务器托管,您可以运行以下命令获取 CA 证书。

Example

  • $HOST=redhat.com
  • $PORT=443
# echo Q | openssl s_client -connect $HOST:$PORT | sed -n -e '/BEGIN CERTIFICATE/,/END CERTIFICATE/ p'
Copy to Clipboard Toggle word wrap

7.1.3. 为 Identity 服务配置安全 LDAP 通信的方法

7.1.3.1. 方法 1

如果使用 PEM 文件在 LDAP 级别配置 CA 信任,则使用此方法。手动指定 CA 证书文件的位置。以下流程保护 LDAP 通信不仅针对 Identity 服务,还用于所有使用 OpenLDAP 库的应用程序。

  1. 将包含 PEM 格式的 CA 证书链的文件复制到 /etc/openldap/certs 目录。
  2. 编辑 /etc/openldap/ldap.conf 并添加以下指令,将 [CA_FILE] 替换为 CA 证书文件的位置和名称:

    TLS_CACERT /etc/openldap/certs/[CA_FILE]
    Copy to Clipboard Toggle word wrap
  3. 重启 openstack-keystone 服务:

    # systemctl restart openstack-keystone.service
    Copy to Clipboard Toggle word wrap
7.1.3.2. 方法 2

如果使用网络安全服务(NSS)数据库在 LDAP 库级别配置了 CA 信任,则使用此方法。使用 certutil 命令将 CA 证书导入并信任到 OpenLDAP 库使用的 NSS 证书数据库中。以下流程保护 LDAP 通信不仅针对 Identity 服务,还用于所有使用 OpenLDAP 库的应用程序。

  1. 导入并信任证书,将 [CA_FILE] 替换为 CA 证书文件的位置和名称:

    # certutil -d /etc/openldap/certs -A -n "My CA" -t CT,, -a -i [CA_FILE]
    Copy to Clipboard Toggle word wrap
  2. 确认正确导入了 CA 证书:

    # certutil -d /etc/openldap/certs -L
    Copy to Clipboard Toggle word wrap

    您的 CA 证书被列出,信任属性被设置为 CT、

  3. 重启 openstack-keystone 服务:

    # systemctl restart openstack-keystone.service
    Copy to Clipboard Toggle word wrap
7.1.3.3. 方法 3

如果使用 PEM 文件在 Keystone 级别配置了 CA 信任,则使用此方法。保护 Identity 服务和 LDAP 服务器之间的通信的最终方法是为 Identity 服务配置 TLS。

但是,与上述两种方法不同,此方法只保护 Identity 服务的 LDAP 通信,对使用 OpenLDAP 库的其他应用程序不会保护 LDAP 通信。

以下流程使用 openstack-config 命令编辑 /etc/keystone/keystone.conf 文件中的值。

  1. 启用 TLS:

    # openstack-config --set /etc/keystone/keystone.conf ldap use_tls True
    Copy to Clipboard Toggle word wrap
  2. 指定证书的位置,将 [CA_FILE] 替换为 CA 证书的名称:

    # openstack-config --set /etc/keystone/keystone.conf ldap tls_cacertfile [CA_FILE]
    Copy to Clipboard Toggle word wrap
  3. 指定在 LDAP 服务器传入的 TLS 会话上执行的客户端证书检查,将 [CERT_BEHAVIOR] 替换为以下列出的行为之一:

    需求
    将始终从 LDAP 服务器请求证书。如果未提供证书,则会话将被终止,或者无法针对现有的证书颁发机构文件验证提供的证书。
    allow
    将始终从 LDAP 服务器请求证书。即使未提供证书,会话也会正常进行。如果提供了证书,但无法针对现有的证书颁发机构文件进行验证,则证书将被忽略,会话将正常进行。
    never
    永远不会请求证书。
    # openstack-config --set /etc/keystone/keystone.conf ldap tls_req_cert [CERT_BEHAVIOR]
    Copy to Clipboard Toggle word wrap
  4. 重启 openstack-keystone 服务:

    # systemctl restart openstack-keystone.service
    Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部