整合 ActiveMQ 代理程式與 LDAP - Amazon MQ

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

整合 ActiveMQ 代理程式與 LDAP

重要

RabbitMQ 代理程式不支援 LDAP 整合。

您可以使用已啟用 TLS 的下列通訊協定來存取 ActiveMQ 代理程式:

Amazon MQ 提供了原生 ActiveMQ 身分驗證和 LDAP 身分驗證之間的選擇,以及管理使用者許可的授權。如需與 ActiveMQ 使用者名稱和密碼相關限制的相關資訊,請參閱使用者

若要授權 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 支援。Amazon MQ 也支援任何 LDAP 伺服器,例如外部程式所支援的 Microsoft Active Directory 或 OpenLDAP。如需外掛程式的詳細資訊,請參閱 Active MQ 文件的安全一節。

除了使用者之外,您還可以透過 LDAP 伺服器為特定群組或使用者指定對主題和佇列的存取權。在 LDAP 伺服器中建立代表主題和佇列的項目,然後將許可指派給特定 LDAP 使用者或群組,即可執行此動作。然後,您可設定代理程式從 LDAP 伺服器擷取授權資料。

先決條件

將 LDAP 支援新增至新的或現有 Amazon MQ 代理程式之前,您必須先設定服務帳戶。必須有此服務帳戶才能起始與 LDAP 伺服器的連線,而且必須具有正確的許可才能進行此連線。此服務帳戶會為您的代理程式設定 LDAP 身分驗證。任何連續的用戶端連線都會透過相同的連線進行驗證。

服務帳戶是 LDAP 伺服器中有權起始連線的帳戶。這是標準 LDAP 要求,您只必須提供一次服務帳戶登入資料。設定連線後,所有未來的用戶端連線都會透過 LDAP 伺服器進行驗證。您的服務帳戶登入資料會以加密形式安全地儲存,只有 Amazon MQ 可以存取。

若要與 ActiveMQ 整合,LDAP 伺服器上需要特定的目錄資訊樹狀結構 (DIT)。如需可清楚顯示此結構的範例ldif 檔案,請參閱 ActiveMQ 文件的安全一節中的將以下 LDIF 檔案匯入 LDAP 伺服器

LDAP 入門

若要開始使用,請瀏覽至 Amazon MQ 主控台,然後在您建立新的 Amazon MQ 或編輯現有代理程式執行個體時,選擇 LDAP authentication and authorization (LDAP 身分驗證和授權)

提供服務帳戶的相關資訊:

  • Fully qualified domain name (完整網域名稱) 要對其發出身分驗證和授權請求的 LDAP 伺服器位置。

    注意

    您提供的 LDAP 伺服器完整網域名稱不得包含通訊協定或連接埠號碼。Amazon MQ 會在完整網域名稱前面加上通訊協定 ldaps,並附加連接埠號碼 636

    例如,如果您提供以下完整網域:example.com,Amazon MQ 會使用以下 URL:ldaps://example.com:636 來存取您的 LDAP 伺服器。

    為了讓代理程式主機能夠順利與 LDAP 伺服器通訊,完整網域名稱必須可公開解析。若要使 LDAP 伺服器保持私密和安全,請限制伺服器的輸入規則中的輸入流量,只允許來自代理程式 VPC 內的流量。

  • Service account username (服務帳戶使用名稱) 用來執行 LDAP 伺服器初始繫連之使用者的辨別名稱。

  • Service account password (服務帳戶密碼) 執行初始繫結之使用者的密碼。

下圖突顯提供這些詳細資料的位置。

指定 LDAP 服務帳戶詳細資料的位置。

LDAP login configuration (LDAP 登入組態) 區段中,提供下列必要資訊:

  • User Base (使用者基礎) 目錄資訊樹狀結構 (DIT) 中將搜尋使用者之節點的辨別名稱。

  • User Search Matching (使用者搜尋比對) LDAP 搜尋篩選條件,將用於尋找 userBase 內的使用者。用戶端的使用者名稱會替換為搜尋篩選條件中的 {0} 預留位置。如需詳細資訊,請參閱 身分驗證授權

  • Role Base (角色基礎) DIT 中將搜尋角色之節點的辨別名稱。角色可以設定為目錄中明確的 LDAP 群組項目。典型的角色項目可能包含角色名稱的一個屬性,例如一般名稱 (CN),以及另一個屬性 (例如 member),其值代表屬於角色群組之使用者的辨別名稱或使用者名稱。例如,假設組織單位 group,您可以提供以下辨別名稱:ou=group,dc=example,dc=com

  • Role Search Matching (使用者搜尋比對) LDAP 搜尋篩選條件,將用於尋找 roleBase 內的角色。userSearchMatching 比對的使用者辨別名稱會替換為搜尋篩選條件中的 {0} 預留位置。用戶端的使用者名稱會替換為 {1} 預留位置。例如,如果目錄中的角色項目包含名為 member 的屬性 (包含該角色中所有使用者的使用者名稱),您可以提供以下搜尋篩選條件:(member:=uid={1})

下圖突顯指定這些詳細資料的位置。

指定 LDAP 登入詳細資訊的位置。

Optional settings (選用設定) 區段中,您可以提供下列選用資訊:

  • User Role Name (使用者角色名稱) 使用者群組成員資格之使用者目錄項目中的 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

  • Role Name (角色名稱) 角色項目中的群組名稱屬性,其值為該角色的名稱。例如,您可以為群組項目的一般名稱指定 cn。如果身分驗證成功,則會為使用者指派其所屬的每個角色項目的 cn 屬性值。

  • User Search Subtree (使用者搜尋子樹狀結構) 定義 LDAP 使用者搜尋查詢的範圍。如果為 true,範圍會設定為搜尋 userBase 所定義的節點下的整個子樹樹狀結構。

  • Role Search Subtree (角色搜尋子樹狀結構) 定義 LDAP 角色搜尋查詢的範圍。如果為 true,範圍會設定為搜尋 roleBase 所定義的節點下的整個子樹樹狀結構。

下圖突顯指定這些選用設定的位置。

LDAP 整合的運作方式

您可考慮到兩個主要類別的集成:身分驗證結構和授權結構。

身分驗證

若要身分驗證,用戶端登入資料必須是有效的。這些登入資料會針對 LDAP 伺服器的使用者基礎中的使用者進行驗證。

提供給 ActiveMQ 代理程式的使用者基礎必須指向 DIT 中將使用者儲存在 LDAP 伺服器中的節點。例如,如果您使用 AWS 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 群組。

授權

若要授權,會在代理程式組態中指定許可搜尋基礎。授權會依每個目的地 (或萬用字元、目的地集) 透過 cachedLdapAuthorizationMap 元素 (在代理程式的 activemq.xml 組態檔中找到) 進行。如需詳細資訊,請參閱快取的 LDAP 授權模組

注意

若要能夠使用您代理程式的 cachedLDAPAuthorizationMap 組態檔中的 activemq.xml 元素,您必須在透過 AWS Management Console 建立組態時,選擇 LDAP Authentication and Authorization (LDAP 身分驗證和授權) 選項,或在使用 Amazon MQ API 建立新組態時,將 authenticationStrategy 屬性設定為 LDAP

您必須提供下列三個屬性做為 cachedLDAPAuthorizationMap 元素的一部分:

  • queueSearchBase

  • topicSearchBase

  • tempSearchBase

重要

為了防止敏感資訊直接放入代理程式的組態檔中,Amazon MQ 會阻止下列屬性使用於 cachedLdapAuthorizationMap 中:

  • connectionURL

  • connectionUsername

  • connectionPassword

當您建立代理程式時,Amazon MQ 會取代您透過 AWS 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 中指定每種目的地許可的位置。因此對上述 AWS Managed Microsoft AD 案例,使用相同的網域元件 corpexamplecom,您會指定名為 destination 的組織單位來包含所有目的地類型。在該 OU 內,您會分別為 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
            

在每種目的地類型 (佇列、主題、暫存) 的 OU 中,可以提供萬用字元或特定目的地名稱。例如,若要為以前置詞 DEMO.EVENTS.$ 開頭的所有佇列提供授權規則,您可以建立以下 OU:

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

DEMO.EVENTS.$ OU 位於 Queue OU 內。

如需 ActiveMQ 中萬用字元的詳細資訊,請參閱萬用字元

若要為特定佇列 (例如 DEMO.MYQUEUE) 提供授權規則,請指定類似下列的項目:

OU=DEMO.MYQUEUE,OU=Queue,OU=Destination,OU=corp,DC=corp,DC=example,DC=com
特定佇列的授權規則

安全群組

在代表目的地或萬用字元的每個 OU 中,您必須建立三個安全群組。如同 ActiveMQ 中的所有許可,這些是讀取/寫入/管理員許可。如需各個許可允許使用者執行的動作詳細資訊,請參閱 ActiveMQ 文件中的安全

您必須將這些安全群組命名為 readwriteadmin。在這些安全群組中,您可以新增使用者或群組,而後這些使用者或群組就會有執行相關動作的許可。每個萬用字元目的地集或個別目的地都需要這些安全群組。

安全群組
注意

當您建立管理員群組時,群組名稱會發生衝突。發生這種衝突是因為舊版 Windows 2000 之前的規則不允許群組共用相同的名稱,即使群組位於 DIT 的不同位置亦然。Windows 2000 之前文字方塊中的值對設定沒有影響,但它必須是全域唯一的。為了避免這種衝突,您可以將 uuid 字尾附加至 admin 群組。

這是我的映像。

將使用者新增至特殊目的地的 admin 安全群組,可讓使用者建立和刪除該主題。將它們新增至 read 安全群組可讓它們從目的地讀取,而將它們新增至 write 群組可讓它們能夠寫入至目的地。

除了將個別使用者新增至安全群組許可之外,您也可以新增整個群組。不過,因為 ActiveMQ 再次硬式編碼群組的屬性名稱,所以您必須確定要新增的群組具有物件類別 groupOfNames,如 activemq 原始程式碼所示。

如果要執行這項操作,請讓使用者遵循 uid 的相同程序。請參閱在 Windows Server 2016 (及後續) 版本的 Active Directory 使用者和電腦中設定 ID 映射