金鱼哥RHCA回忆录:CL210集成身份管理--项目组织管理+章节实验

简介: 第三章 集成身份管理--项目组织管理
🎹 个人简介:大家好,我是 金鱼哥,CSDN运维领域新星创作者,华为云·云享专家,阿里云社区·专家博主
📚个人资质: CCNA、HCNP、CSNA(网络分析师),软考初级、中级网络工程师、RHCSA、RHCE、RHCA、RHCI、ITIL😜
💬格言:努力不一定成功,但要想成功就必须努力🔥

🎈支持我:可点赞👍、可收藏⭐️、可留言📝


项目组织管理

📜域

对于ldentity Service v3来说,域是一个新概念,可以作为用户、组和项目的容器。Red Hat OpenStack平台最初安装一个名为Default的域。要创建其他域,请使用openstack域创建命令

在这里插入图片描述

使用openstack domain list命令来显示域列表。

在这里插入图片描述


📜用户

管理员应该保留服务帐户使用的默认域。用户帐户,另一方面,应该驻留在其他领域。管理员可以创建新域,然后用用户在本地填充它们。

要向域添加新用户,请使用openstack user create命令并使用--domain选项指定域。如果没有--domain选项,该命令将在默认域中创建用户。--password-prompt选项允许管理员在提示符下交互地输入密码。不建议在命令行中指定密码,因为这样会有利用命令历史危及用户密码的风险。

[user@demo -]$ openstack user create USER --domain DOMAIN --password-prompt
User Password: PASSWORD
Repeat User Password: PASSWORD

在这里插入图片描述

域还引入了与身份验证后端(如LDAP或Active Directorv)集成的可能性。通过这种集成,ldentity Service v3在身份管理后端中利用存在的用户帐户。


📜组

ldentity Service v3还引入了组的概念。group实体有助于批量管理用户对资源的访问。组允许管理员在组上执行单个管理操作并发挥其作用,而不是根据每个用户查询访问权限,而是分发给小组的所有成员。

在这里插入图片描述

要将用户添加到组中,请使用openstack group add user命令。您可以将用户添加到任何组,而不仅仅是添加到与用户相同域中的组。使用user-domain选项指定用户域,使用--group-domain选项指定组域。

在这里插入图片描述

对于与外部身份验证后端集成的域,Identity Service v3还可以利用身份管理后端中的现有用户组。通过查询后端,Identity Service v3可以确定每个组的成员。


注意:尽管您可以将一个域的用户添加到其他域中的组,但此跨域操作仅允许用于具有共享身份服务后端的域。如果域使用不同的后端,你将看到以下错误:

在这里插入图片描述


📜项目

在Red Hat OpenStack平台之前的版本中,用户和项目之间存在一对一的关系。这意味着用户不能属于一个以上的项目。随着身份服务v3中引入域。用户不再被产品所包含,而是被域所包含。通过这种设计更改,用户现在可以属于多个项目。

要在域内创建项目,请使用openstack proiect create命令。使用--domain选项指定要在其中创建新产品的域。没有--domain选项,命令将在默认域中创建项目。

在这里插入图片描述


📜分层多租户

在引入域之前,对象存在于平面结构中。这就不允许管理员轻松地表示他们的组织的层次结构。例如,组织通常采用由部门组成的层次结构,这些部门可能包含子部门,团队,或者其他更小的团队。

尽管域允许脱离单一的、扁平的项目集合。这只允许两级层次结构。Identity Service v3通过引入嵌套项目的功能,支持多层层次结构。


📑项目嵌套

嵌套项目必须是同一域的成员。要创建嵌套项目,请使用openstack proiect create命令。使用--domain选项指定中的域以创建新项目。使用--parent选项指定新项目的父项目。

在这里插入图片描述


📑配额嵌套

配额为管理员提供了在Red Hat OpenStack平台环境中管理系统资源利用的能力。管理员可以在项目级别和项目用户级别强制执行配额。

随着分层多租户设计中的嵌套项目的出现。合理的配额也需要分层结构。子项目的配额应该从分配给父项目的配额中分配。这个概念称为嵌套配额。

不幸的是,当前版本的Red Hat OpenStack平台不支持嵌套配额。分配给项目和子项目的配额彼此之间没有关系。这就产生了这样一种情况,子项目分配的资源可能比应用到其父项目的配额所允许的要多。


注意:在Red Hat OpenStack平台实现嵌套配额之前,管理员需要手动管理项目及其子项目的配额,以防止资源的过度分配和消耗。


📜角色管理

在Red Hat OpenStack平台环境中,用户必须使用项目范围进行身份验证。因此,每个用户必须被授予至少一个项目的访问权。身份服务使用了基于角色的访问控制(RBAC)。管理员可以通过将角色分配给用户或组来授予对域和项目的访问权。可以为用户或组分配任何域和项目的角色,甚至包含该用户或组的域之外的项目。

要授予角色,请使用openstack role add命令。当向用户查询角色时,使用--user选项指定用户要指定角色,使用--user-domain选项指定用户所属的域。当授权将一个角色转换为一个组时。使用--group选项指定要授予角色的组,使用--group-domain选项指定组所属的域

若要为域授予角色访问权限,请使用--domain选项指定域。要为项目授予角色访问权,使用--project选项来指定项目,使用--project-domain来指定项目所在的域。

下面的示例演示如何为Default域的admin用户授予示例域的admin角色。

在这里插入图片描述

下面的示例演示了授予Lab域的developers组示例领域中research项目的_member_ 角色。

在这里插入图片描述


📑角色继承

在Identity Service v3引入嵌套项目之前,管理员必须为每个项目分别分配角色。为了方便在新的分层多租户环境中管理角色,Identity Service v3还引入了角色继承的概念。openstack role add命令现在包含--inherited选项。此选项允许一个项目的所有当前和未来子项目自动继承角色分配。

下面的示例演示了如何将_member_角色授予Lab域的developers组,以使该示例领域中的reseach项目的所有当前和将来的子项目都具有这个角色

在这里插入图片描述


📑角色查看

要查看域或项目的角色分配,请使用openstack role assignment list命令。查看域的角色分配时,使用--domain选项指定域。使用--proiect和--project-domain选项来指定要显示角色的项目和项目域。

下面的示例演示了将示例域 _member_role中的reseach-members小组分配为示例域中的test项目的普通角色,以及在示例域中的项目分配为角色继承。

在这里插入图片描述

注意:使用openstack role add命令的--inherited选项只将角色分配给项目的当前和未来子项目。添加的角色仅适用于子项目,而不适用于命令中指定的项目


要查看示例域中分配给test项目的角色,请使用以下命令。Inherited列指示角色是否继承。

在这里插入图片描述

使用--names选项将角色分配作为名称而不是id查看。

在这里插入图片描述

ldentity Service v3包括--inherited选项,用于仅查看子项目所继承的角色分配。

在这里插入图片描述

Identity Service v3还包括--effective选项,可以根据用户查看角色分配,甚至查看分配给组的角色。

在这里插入图片描述

Identity Service v3中包含的其他一些有用选项是--user、--user-domain、--group,--group-domain选项,用于过滤用户或组分配的角色列表。下面的示例展示了如何为Example域中的developer1用户筛选上一个角色分配查询的结果

[user@demo -]$ openstack role assignment list \
--project test --project-domain Example --names \
--effective --user developer1 --user-domain Example

在这里插入图片描述


📜课本练习

  • 创建域、项目和子项目。
  • 创建组并分配组角色。
[student@workstation ~]$ lab identity-project setup 

📑1. 在工作站,加载-/admin-rc文件。创建一个名为Lab的新域。

[student@workstation ~]$ source admin-rc 
[student@workstation ~]$ openstack domain create Lab
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| enabled     | True                             |
| id          | 9ee1956f98994d97b8468c213e6d9f41 |
| name        | Lab                              |
| tags        | []                               |
+-------------+----------------------------------+

📑2. 在LAB域中创建一个名为support的新项目。

[student@workstation ~]$ openstack project create support --domain Lab
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 9ee1956f98994d97b8468c213e6d9f41 |
| enabled     | True                             |
| id          | 2d48ee5d899a455cb85372d8c28f531f |
| is_domain   | False                            |
| name        | support                          |
| parent_id   | 9ee1956f98994d97b8468c213e6d9f41 |
| tags        | []                               |
+-------------+----------------------------------+

📑3.在support项目中创建一个名为dev的新项目。

[student@workstation ~]$ openstack project create dev --parent support --domain Lab
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 9ee1956f98994d97b8468c213e6d9f41 |
| enabled     | True                             |
| id          | cfc3aefa7e3142af9fafee2017f47cf4 |
| is_domain   | False                            |
| name        | dev                              |
| parent_id   | 2d48ee5d899a455cb85372d8c28f531f |
| tags        | []                               |
+-------------+----------------------------------+

📑4. 在Lab域中创建一个名为developers的新用户组。

[student@workstation ~]$ openstack group create developers --domain Lab
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 9ee1956f98994d97b8468c213e6d9f41 |
| id          | 7e85a1ac2caf4101a6dd712a5c3eefc7 |
| name        | developers                       |
+-------------+----------------------------------+

📑5. 为Lab域中的support项目分配Lab域中的developers组的 member 角色。

[student@workstation ~]$ openstack role add --group developers --group-domain Lab --project support --project-domain Lab _member_

📑6. 为Lab域中support项目的所有子项目分配Lab域中的developers组 member 角色。使用--inherited标示使support项目的子项目角色继承。

[student@workstation ~]$ openstack role add --group developers --group-domain Lab --project support --project-domain Lab --inherited _member_

📑7. 在Lab域中创建一个新用户developer4。将新用户的密码设置为redhat。

[student@workstation ~]$ openstack user create developer4 --domain Lab --password redhat
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | 9ee1956f98994d97b8468c213e6d9f41 |
| enabled             | True                             |
| id                  | 1b71f3ef2fdd4dce8bddd38593b62bf0 |
| name                | developer4                       |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

📑8. 将Lab域的developer4用户添加到Lab域的developer用户组中。

[student@workstation ~]$ openstack group add user --group-domain Lab --user-domain Lab developers developer4

📑9. 验证Lab域中support项目的角色分配。

student@workstation ~]$ openstack role assignment list --project support --project-domain Lab --names --effective
+----------+----------------+-------+-------------+--------+-----------+
| Role     | User           | Group | Project     | Domain | Inherited |
+----------+----------------+-------+-------------+--------+-----------+
| _member_ | developer4@Lab |       | support@Lab |        | False     |
+----------+----------------+-------+-------------+--------+-----------+
[student@workstation ~]$ openstack role assignment list --project dev --project-domain Lab --names --effective
+----------+----------------+-------+---------+--------+-----------+
| Role     | User           | Group | Project | Domain | Inherited |
+----------+----------------+-------+---------+--------+-----------+
| _member_ | developer4@Lab |       | dev@Lab |        | True      |
+----------+----------------+-------+---------+--------+-----------+

📑清除实验

[student@workstation ~]$ lab identity-project cleanup

章节实验

  • 在域中创建项目和子项目。
  • 将组角色分配给域中的组。
  • 标识域中分配给用户的角色。
  • 启动并验证Fernet密钥轮转。
  1. 在Example域中创建一个名为consulting的项目。
  2. 在consulting项目中创建一个名为development的新子项目。
  3. 将Example域_member_角色中的consulting-menber组分配给Example域中的consulting项目。
  4. 为Example域中的Example项目的所有子项目分配consulting-menber组的admin角色。
  5. 验证在Example域中的consulting项目中分配给以下用户的角色:
operator1
architect1
  1. 验证在Example域中的development项目中分配给以下用户的角色:
operator1
architect1
  1. 在director下,轮转overcloud的Fernet密钥。验证Fernet密钥轮转完成。
[student@workstation ~]$ lab identity-review setup

📑1. 在示例域中创建一个名为consulting的项目。

[student@workstation ~]$ openstack project create consulting --domain Example
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 8dd2d316acc74f54b890bae519ea75b9 |
| enabled     | True                             |
| id          | a0e05099769b4a20b900e33afe1fc9c2 |
| is_domain   | False                            |
| name        | consulting                       |
| parent_id   | 8dd2d316acc74f54b890bae519ea75b9 |
| tags        | []                               |
+-------------+----------------------------------+
[student@workstation ~]$ openstack project list --domain Example
+----------------------------------+------------+
| ID                               | Name       |
+----------------------------------+------------+
| a0e05099769b4a20b900e33afe1fc9c2 | consulting |
+----------------------------------+------------+

📑2. 在consulting项目中创建一个名为development的新子项目。

[student@workstation ~]$ openstack project create development --parent consulting --domain Example
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description |                                  |
| domain_id   | 8dd2d316acc74f54b890bae519ea75b9 |
| enabled     | True                             |
| id          | 34d7fd6d8eda4dbba8c78743edb9a4b9 |
| is_domain   | False                            |
| name        | development                      |
| parent_id   | a0e05099769b4a20b900e33afe1fc9c2 |
| tags        | []                               |
+-------------+----------------------------------+

📑3. 将Example域_member_角色中的consulting-menber组分配给Example域中的consulting项目。

[student@workstation ~]$ openstack role add --group consulting-members --group-domain Example --project consulting --project-domain Example _member_

📑4. 为Example域中的Example项目的所有子项目分配consulting-menber组的admin角色。

[student@workstation ~]$ openstack role add --group consulting-members --group-domain Example --project consulting --project-domain Example --inherited admin

📑5. 验证在Example域中的consulting项目中分配给以下用户的角色:

operator1

architect1

[student@workstation ~]$ openstack role assignment list --user operator1 --user-domain Example --project consulting --names --effective
+----------+-------------------+-------+--------------------+--------+-----------+
| Role     | User              | Group | Project            | Domain | Inherited |
+----------+-------------------+-------+--------------------+--------+-----------+
| _member_ | operator1@Example |       | consulting@Example |        | False     |
+----------+-------------------+-------+--------------------+--------+-----------+
[student@workstation ~]$ openstack role assignment list --user architect1 --user-domain Example --project consulting --names --effective
+----------+--------------------+-------+--------------------+--------+-----------+
| Role     | User               | Group | Project            | Domain | Inherited |
+----------+--------------------+-------+--------------------+--------+-----------+
| _member_ | architect1@Example |       | consulting@Example |        | False     |
+----------+--------------------+-------+--------------------+--------+-----------+

📑6. 验证在Example域中的development项目中分配给以下用户的角色:

operator1

architect1

[student@workstation ~]$ openstack role assignment list --user operator1 --user-domain Example --project development --names --effective
+-------+-------------------+-------+---------------------+--------+-----------+
| Role  | User              | Group | Project             | Domain | Inherited |
+-------+-------------------+-------+---------------------+--------+-----------+
| admin | operator1@Example |       | development@Example |        | True      |
+-------+-------------------+-------+---------------------+--------+-----------+
[student@workstation ~]$ openstack role assignment list --user architect1 --user-domain Example --project development --names --effective
+-------+--------------------+-------+---------------------+--------+-----------+
| Role  | User               | Group | Project             | Domain | Inherited |
+-------+--------------------+-------+---------------------+--------+-----------+
| admin | architect1@Example |       | development@Example |        | True      |
+-------+--------------------+-------+---------------------+--------+-----------+

📑7. 在director下,轮转overcloud的Fernet密钥。验证Fernet密钥轮转完成。

(undercloud) [stack@director ~]$ openstack workflow execution create tripleo.fernet_keys.v1.rotate_fernet_keys '{"container": "overcloud"}'
+--------------------+-------------------------------------------+
| Field              | Value                                     |
+--------------------+-------------------------------------------+
| ID                 | 979abb09-5e97-4ab6-81b0-5ea8bf1ac8b2      |
| Workflow ID        | c00289f9-612a-4744-b94a-a24d8e89736b      |
| Workflow name      | tripleo.fernet_keys.v1.rotate_fernet_keys |
| Workflow namespace |                                           |
| Description        |                                           |
| Task Execution ID  | <none>                                    |
| State              | RUNNING                                   |
| State info         | None                                      |
| Created at         | 2020-10-19 12:46:08                       |
| Updated at         | 2020-10-19 12:46:08                       |
+--------------------+-------------------------------------------+
(undercloud) [stack@director ~]$  openstack workflow execution show 979abb09-5e97-4ab6-81b0-5ea8bf1ac8b2
+--------------------+-------------------------------------------+
| Field              | Value                                     |
+--------------------+-------------------------------------------+
| ID                 | 979abb09-5e97-4ab6-81b0-5ea8bf1ac8b2      |
| Workflow ID        | c00289f9-612a-4744-b94a-a24d8e89736b      |
| Workflow name      | tripleo.fernet_keys.v1.rotate_fernet_keys |
| Workflow namespace |                                           |
| Description        |                                           |
| Task Execution ID  | <none>                                    |
| State              | SUCCESS                                   |
| State info         | None                                      |
| Created at         | 2020-10-19 12:46:08                       |
| Updated at         | 2020-10-19 12:48:59                       |
+--------------------+-------------------------------------------+

📑评分脚本

[student@workstation ~]$ lab identity-review grade

📑清除实验

[student@workstation ~]$ lab identity-review cleanup

💡总结

  • 身份服务可以配置为对来自外部IdM环境的用户进行身份验证。
  • 要使用Red Hat IdM后端执行用户凭据身份验证,身份服务需要在IdM服务器上查找LDAP帐户。
  • 令牌提供程序有四种类型:UUID、PKI、PKIZ和Fernet。自Red Hat OpenStack Platform 12以来,Fernet令牌是默认启用的。
  • Fernet令牌的最大限制是250字节,这使得它们足够小,可以理想地用于API调用并最小化保存在磁盘上的数据。每个Fernet令牌实际上由两个较小的密钥组成:一个128位AES加密密钥和一个128位SHA256 HMAC签名密钥。
  • 域在授权模型中提供了粒度。对于域,资源映射可以总结为:域由用户和项目组成,其中用户可以在项目和域级别上拥有角色。

RHCA认证需要经历5门的学习与考试,还是需要花不少时间去学习与备考的,好好加油,可以噶🤪。

以上就是【金鱼哥】对 第三章 集成身份管理--项目组织管理 的简述和讲解。希望能对看到此文章的小伙伴有所帮助。

💾 红帽认证专栏系列:
RHCSA专栏: 戏说 RHCSA 认证
RHCE专栏: 戏说 RHCE 认证
此文章收录在RHCA专栏: RHCA 回忆录

如果这篇【文章】有帮助到你,希望可以给【金鱼哥】点个赞👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点。

如果有对【运维技术】感兴趣,也欢迎关注❤️❤️❤️ 【金鱼哥】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

目录
相关文章
|
3月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
4月前
|
安全 Java 数据安全/隐私保护
在Java项目中集成单点登录(SSO)方案
在Java项目中集成单点登录(SSO)方案
|
12天前
|
存储 JavaScript 数据库
ToB项目身份认证AD集成(一):基于目录的用户管理、LDAP和Active Directory简述
本文介绍了基于目录的用户管理及其在企业中的应用,重点解析了LDAP协议和Active Directory服务的概念、关系及差异。通过具体的账号密码认证时序图,展示了利用LDAP协议与AD域进行用户认证的过程。总结了目录服务在现代网络环境中的重要性,并预告了后续的深入文章。
|
12天前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
27天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
61 0
|
12天前
|
安全 Java 测试技术
ToB项目身份认证AD集成(二):快速搞定window server 2003部署AD域服务并支持ssl
本文详细介绍了如何搭建本地AD域控测试环境,包括安装AD域服务、测试LDAP接口及配置LDAPS的过程。通过运行自签名证书生成脚本和手动部署证书,实现安全的SSL连接,适用于ToB项目的身份认证集成。文中还提供了相关系列文章链接,便于读者深入了解AD和LDAP的基础知识。
|
24天前
|
Java Shell 开发工具
git集成IDEA,托管项目实现版本管理
git集成IDEA,托管项目实现版本管理
31 0
|
27天前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(一)
76 0
|
2月前
|
存储 NoSQL 数据处理
组合和继承怎么集成一个性能较好的项目
组合与继承是面向对象编程的核心概念,前者通过对象间关联实现高效解耦,后者则重用代码以节省空间和内存。组合常用于现代项目,利用代理与依赖注入简化代码管理;而继承简化了子模块对父模块资源的应用,但修改会影响整体。随着分层解耦及微服务架构如SpringCloud的出现,这些技术进一步优化了数据处理效率和服务响应性能,尤其在分布式存储与高并发场景下。同步异步调用、Redis分布式应用等也广泛运用组合与继承,实现代码和内存空间的有效复用。
|
3月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
45 8