将 ActiveMQ 代理与 LDAP 集成 - Amazon MQ
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将 ActiveMQ 代理与 LDAP 集成

重要

RabbitMQ 代理不支持 LDAP 集成。

您可以使用以下启用 TLS 的协议来访问 ActiveMQ 代理:

Amazon MQ 提供以下用户权限管理选项:本机 ActiveMQ 身份验证和 LDAP 身份验证以及授权。有关与 ActiveMQ 用户名和密码相关的限制的信息,请参阅Users

要授权 ActiveMQ 用户和组使用队列和主题,必须编辑您的代理的配置。Amazon MQ 使用 ActiveMQ 的简单身份验证插件来限制读取和写入到目标。有关详细信息和示例,请参阅始终配置授权映射authorizationEntry

注意

目前,Amazon MQ 不支持客户端证书身份验证。

将 LDAP 与 ActiveMQ 集成

您可以通过存储在轻型目录访问协议(LDAP)服务器中的凭证对 Amazon MQ 用户进行身份验证。您还可以添加、删除和修改 Amazon MQ 用户,并借此为主题和队列分配权限。创建、更新和删除代理等管理操作仍然需要 IAM 凭证,并且未与 LDAP 集成。

希望使用 LDAP 服务器简化和集中化 Amazon MQ 代理身份验证和授权的客户可以使用此功能。将所有用户凭证保留在 LDAP 服务器中,为存储和管理这些凭证提供了一个中心位置,从而节省了时间和精力。

Amazon MQ 使用 Apache ActiveMQ JAAS 插件来提供 LDAP 支持。该插件支持的任何 LDAP 服务器,如 Microsoft Active Directory 或 OpenLDAP,还得到了 Amazon MQ 的支持。有关插件的更多信息,请参阅 Active MQ 文档的 Security (安全) 部分。

除用户外,您还可以通过 LDAP 服务器指定对特定组或用户的主题和队列的访问权限。您可以通过在 LDAP 服务器中创建表示主题和队列的条目,然后为特定 LDAP 用户或组分配权限来实现此目的。然后,您可以将代理配置为从 LDAP 服务器中检索授权数据。

Prerequisites

在将 LDAP 支持添加到新的或现有的 Amazon MQ 代理之前,您必须设置一个服务账户。启动与 LDAP 服务器的连接需要此服务账户,并且必须具有正确的权限才能建立此连接。此服务账户将为您的代理设置 LDAP 身份验证。任何连续的客户端连接都将通过同一连接进行身份验证。

服务账户是 LDAP 服务器中有权启动连接的账户。这是一个标准的 LDAP 要求,您只能提供一次服务账户凭证。设置连接后,所有未来的客户端连接都将通过 LDAP 服务器进行身份验证。您的服务账户凭证以加密形式安全存储,只有 Amazon MQ 才能访问。

要与 ActiveMQ 集成,LDAP 服务器上需要一个特定的目录信息树(DIT)。有关可清楚显示此结构的 ldif 文件示例,请参阅 ActiveMQ 文档 Security (安全) 部分中的将以下 LDIF 文件导入 LDAP 服务器

LDAP 入门

要开始操作,在创建新的 Amazon MQ 或编辑现有代理实例时,请导航到 Amazon MQ 控制台,并选择 LDAP authentication and authorization (LDAP 身份验证和授权)

提供有关服务账户的以下信息:

  • 完全限定域名:要向其发出身份验证和授权请求的 LDAP 服务器的位置。

    注意

    您提供的 LDAP 服务器的完全限定域名不能包含协议或端口号。Amazon MQ 会在完全限定域名前加上协议 ldaps,并将附加端口号 636

    例如,如果您提供完全限定域 example.com,Amazon MQ 将使用以下 URL 访问您的 LDAP 服务器:ldaps://example.com:636

    为了使代理主机能够与 LDAP 服务器成功通信,完全限定域名必须可以公开解析。要保持 LDAP 服务器的私有和安全性,请在服务器入站规则中限制入站流量,以便仅允许来自代理 VPC 内的流量。

  • 服务账户用户名:用于执行与 LDAP 服务器初始绑定的用户的可分辨名称。

  • 服务账户密码:执行初始绑定的用户的密码。

下图突出显示了提供这些详细信息的位置。


                指定 LDAP 服务账户详细信息的位置。

LDAP login configuration (LDAP 登录配置) 部分中,提供以下必要信息:

  • 用户基础:将为用户搜索的目录信息树(DIT)中的节点的可分辨名称。

  • 用户搜索匹配:LDAP 搜索筛选条件,将用于在 userBase 中查找用户。客户端的用户名将替换搜索筛选条件中的 {0} 占位符。有关更多信息,请参阅AuthenticationAuthorization

  • 角色基础:将为角色搜索的 DIT 中的节点的可分辨名称。角色可以配置为目录中的显式 LDAP 组条目。典型角色条目可能由角色名称的一个属性(例如公用名(CN))和另一个属性(例如 member)组成,其中的值表示属于角色组的用户的可分辨名称或用户名。例如,鉴于组织部门 group,您可以提供以下可分辨名称:ou=group,dc=example,dc=com

  • 角色搜索匹配:用于在 roleBase 中查找角色的 LDAP 搜索筛选条件。userSearchMatching 匹配的用户的可分辨名称将替换为搜索筛选条件中的 {0} 占位符。客户端的用户名将替换为 {1} 占位符。例如,如果目录中的角色条目包含名为 member 的属性(包含该角色中所有用户的用户名),则可以提供以下搜索筛选条件:(member:=uid={1})

下图突出显示了指定这些详细信息的位置。


                指定 LDAP 登录详细信息的位置。

Optional settings (可选设置) 部分中,您可以提供以下可选信息:

  • 用户角色名称:用户组成员资格的用户目录条目中 LDAP 属性的名称。在某些情况下,用户角色可能由用户目录条目中属性的值来标识。userRoleName 选项允许您提供此属性的名称。例如,让我们考虑以下用户条目:

    dn: uid=jdoe,ou=user,dc=example,dc=com objectClass: user uid: jdoe sn: jane cn: Jane Doe mail: j.doe@somecompany.com memberOf: role1 userPassword: password

    要为上述示例提供正确的 userRoleName,您需要指定 memberOf 属性。如果身份验证成功,则会向用户分配角色 role1

  • 角色名称:角色条目中的组名属性,值为该角色的名称。例如,您可以为组条目的通用名称指定 cn。如果身份验证成功,则会为用户分配其作为成员的每个角色条目的 cn 属性值。

  • 用户搜索子树:定义 LDAP 用户搜索查询的范围。如果为 true,则搜索范围设置为由 userBase 定义的节点下的整个子树。

  • 角色搜索子树:定义 LDAP 角色搜索查询的范围。如果为 true,则搜索范围设置为由 roleBase 定义的节点下的整个子树。

下图突出显示了指定这些可选设置的位置。

LDAP 集成的工作方式

您可以将集成分为两大类:身份验证结构和授权结构。

Authentication

对于身份验证,客户端凭证必须有效。这些凭证针对 LDAP 服务器的用户基础中的用户进行验证。

提供给 ActiveMQ 代理的用户基础必须指向 DIT 中存储用户的 LDAP 服务器中的节点。例如,如果您使用的是 Amazon Managed Microsoft AD,并且您拥有域组件 corpexamplecom,而在这些组件中,您拥有组织部门 corpUsers,那么您将使用以下几点作为您的用户基础:

OU=Users,OU=corp,DC=corp,DC=example,DC=com
                

ActiveMQ 代理将在 DIT 中的此位置搜索用户,以便对发给代理的客户端连接请求进行身份验证。


                    搜索用户的位置

由于 ActiveMQ 源代码对用户的属性名称硬编码为 uid,您必须确保每个用户都设置了此属性。为简单起见,您可以使用用户的连接用户名。有关更多信息,请参阅 activemq 源代码和在 Windows Server 2016(及后续)版本的 Active Directory 用户和计算机中配置 ID 映射

要为特定用户启用 ActiveMQ 控制台访问,请确保他们属于 amazonmq-console-admins 组。

Authorization

对于授权,权限搜索基础在代理配置中指定。授权通过代理的 activemq.xml 配置文件中的 cachedLdapAuthorizationMap 元素在每个目标(或通配符,目标集)上完成。有关更多信息,请参阅缓存 LDAP 授权模块

注意

为能够使用代理 cachedLdapAuthorizationMap 配置文件中的 activemq.xml 元素,您必须在通过 Amazon Web Services Management Console 创建配置时选择 LDAP Authentication and Authorization(LDAP 身份验证和授权)选项,或者在使用 Amazon MQ API 创建新配置时将 authenticationStrategy 属性设置为 LDAP

您必须提供以下三个属性作为 cachedLDAPAuthorizationMap 元素的一部分:

  • queueSearchBase

  • topicSearchBase

  • tempSearchBase

重要

为了防止敏感信息直接放置在代理的配置文件中,Amazon MQ 阻止以下属性在 cachedLdapAuthorizationMap 中使用:

  • connectionURL

  • connectionUsername

  • connectionPassword

创建代理时,Amazon MQ 会替换您通过Amazon Web Services Management Console提供的值,或者在 API 请求的 ldapServerMetadata 属性中,替换上述属性。

以下演示了 cachedLdapAuthorizationMap 的工作示例。

<authorizationPlugin> <map> <cachedLDAPAuthorizationMap queueSearchBase="ou=Queue,ou=Destination,ou=corp,dc=corp,dc=example,dc=com" topicSearchBase="ou=Topic,ou=Destination,ou=corp,dc=corp,dc=example,dc=com" tempSearchBase="ou=Temp,ou=Destination,ou=corp,dc=corp,dc=example,dc=com" refreshInterval="300000" legacyGroupMapping="false" /> </map> </authorizationPlugin>

这些值标识 DIT 中为每个目标类型指定权限的位置。因此,对于上面的 Amazon Managed Microsoft AD 示例,使用与 corpexamplecom 相同的域组件,您可以指定一个名为 destination 的组织部门,来包含所有目标类型。在该组织部门中,您将为 queuestopicstemp 目标分别创建一个。

这意味着您的队列搜索基础(为类型队列的目标提供授权信息)将在 DIT 中具有以下位置:

OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
                

                    队列搜索基础位置。

同样,主题和临时目标的权限规则将位于 DIT 中的同一级别:

OU=Topic,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
OU=Temp,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
            

在每个目标类型(队列、主题、临时)的组织部门中,可以提供通配符或特定目标名称。例如,若要为以前缀 DEMO.EVENTS.$. 开头的所有队列提供授权规则,您可以创建以下组织部门:

OU=DEMO.EVENTS.$,OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
注意

DEMO.EVENTS.$ 组织部门位于 Queue 组织部门内。

有关 ActiveMQ 中通配符的更多信息,请参阅 Wildcards (通配符)

要为特定队列提供授权规则(如 DEMO.MYQUEUE),请指定类似以下内容:

OU=DEMO.MYQUEUE,OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com

                    特定队列的授权规则

安全组

在每个表示目标或通配符的组织部门中,您必须创建三个安全组。与 ActiveMQ 中的所有权限一样,这些是读/写/管理权限。有关每个权限允许用户执行哪些操作的更多信息,请参阅 ActiveMQ 文档中的安全性

您必须命名这些安全组 readwriteadmin。在这些安全组中,您可以添加用户或组,他们将有权执行相关操作。对于每个通配符目标集或单个目标,您都需要这些安全组。


                    安全组
注意

创建管理组时,将与组名称发生冲突。发生此冲突的原因是,Windows 2000 之前的旧式规则不允许组共享相同的名称,即使这些组位于 DIT 的不同位置。Windows 2000 之前版本文本框中的值对设置没有影响,但必须是全局唯一的。为了避免这一冲突,可以为每个 admin 组添加 uuid 后缀。


                        这是我的图像。

将用户添加到特定目标的 admin 安全组将允许用户创建和删除该主题。将他们添加到 read 安全组将使他们能够从目标读取,而将他们添加到 write 组则将使他们能够写入目标。

除了将单个用户添加到安全组权限之外,您还可以添加整个组。但是,由于 ActiveMQ 再次对组的属性名称进行硬编码,因此必须确保要添加的组具有对象类 groupOfNames,如 activemq 源代码中所示。

要执行此操作,请遵循与用户 uid 相同的流程。请参阅在 Windows Server 2016(及后续)版本的 Active Directory 用户和计算机中配置 ID 映射