可以使用 [驗證] 工作區,透過 LDAP 通訊協定為 SaltStack Config 設定目錄服務。此通訊協定可用於連線至 Active Directory 或 Microsoft Azure 等服務。

備註: 如果需要,可以在 SaltStack Config 中一次使用多個系統來驗證使用者。例如,您可以使用以 SAML 為基礎的 IdP 或以 LDAP 為基礎的 IdP,同時以原生方式將某些使用者認證儲存在 RaaS 伺服器上。但是, SaltStack Config 不允許同時設定兩個以上的 SAML 提供者或兩個以上的 LDAP 提供者。

SaltStack Config 使用以下後端程序驗證 LDAP 型系統:

  • 預覽 - 預覽連線設定時,SaltStack Config 會從 LDAP 伺服器中擷取使用者和群組的範例清單,以便能夠確認您輸入的組態參數是否正確。
  • 登入 - 當使用者在 SaltStack Config 登入表單中輸入認證時,後端伺服器會檢查此時資料庫中是否存在相符項。接著,起始多步驟查閱程序,然後在找到相符項後驗證使用者。鑑於此查閱程序,已啟用群組中已啟用的個別使用者在首次登入後才會顯示在 [角色] 工作區中。
  • 背景工作 - SaltStack Config 會定期執行背景工作以查詢目錄服務連線中的每個連結群組和使用者,以確保其仍然存在。如果該群組或使用者已移除,後端伺服器會在資料庫中停用其連結。
  • 已封存的群組和使用者 - 將會封存從目錄服務連線中移除的任何群組。即使這些群組處於非作用中狀態且使用者無法登入,其仍顯示在 [角色] 工作區中並且可供選取。對於先前在 [角色] 工作區中顯示的任何已移除使用者來說,這一點也同樣適用。
  • 巢狀群組 - 使用巢狀群組時,啟用父系群組後,依預設也將啟用所有子系群組。

設定 LDAP 連線

若要設定 LDAP,請先建立一個連線,然後啟用特定的 LDAP 使用者和群組以向 SaltStack Config 進行驗證。啟用群組或使用者後,可以定義其角色型存取控制 (RBAC) 設定。

可以選擇在欄位中預先填入根據目錄服務 (例如 Active Directory 或 OpenLDAP) 自訂的預設設定。

備註: 下列步驟應由瞭解整體 LDAP 系統配置的資深 LDAP 或 Active Directory 管理員完成。請連絡管理員以尋求協助。

設定 LDAP 目錄服務:

  1. (可選) 設定 LDAP 之前,使用第三方工具測試您的連線和查詢可能很有用。對於 AD 使用者,可以使用 LDP 或 ADSI Edit。對於 Linux 使用者,建議使用 ldapsearch
    備註: 如需有關使用這些工具進行測試的詳細資訊,請參閱支援中心的 如何對目錄服務連線進行驗證和疑難排解
  2. 按一下側邊功能表上的管理 > 驗證
  3. 按一下建立
  4. 組態類型功能表中,選取 LDAP
  5. (可選) 在設定下,按一下預先填入預設值,然後從下拉式清單中選取您的目錄服務。

    將根據您的選擇填入預設項目。但是,某些項目 (例如使用者搜尋 DN) 不完整。請務必確認項目與目錄服務架構相符,並且將預留位置文字取代為適用於您服務的正確值。

  6. 輸入或驗證 LDAP 連線的資訊。

    基本

    欄位 說明
    名稱 LDAP 連線的名稱。由於此名稱僅為顯示名稱,因此輸入任何名稱都有助於區分此驗證後端與其他驗證後端。
    主機 LDAP 主機伺服器位址,格式為 FQDN 或 IP 位址。
    連接埠 設定 LDAP 伺服器的連接埠。預設連接埠為 389 (對於未加密的 LDAP) 和 636 (對於 LDAP over SSL)。
    背景同步 SaltStack Config 將以此處定義的設定間隔 (以分鐘為單位) 針對驗證後端驗證所有使用者和群組。
    SSL
    啟用 SSL
    選取此項可使用 RaaS 伺服器設定中指定的憑證,透過定安全通訊端層 (SSL) 連線至 LDAP 伺服器。如果未提供組態,將使用系統憑證存放區驗證 SSL 連線。如需有關設定 RaaS 伺服器的詳細資訊,請參閱《安裝和設定 SaltStack Config》指南中的 〈設定 SSL 憑證〉
    重要: 最佳做法是選取 [啟用 SSL]。如果此選項保持未選取狀態, SaltStack Config 會透過不安全的連線以純文字形式傳輸資訊。
    驗證憑證
    選取此項可確保在連線時驗證 SSL 憑證。保持未選取狀態會略過驗證,例如,使用自我簽署憑證時 (不建議用於生產環境)。

    驗證

    欄位 說明
    驗證基本 DN

    基本 LDAP 辨別名稱。這是從中查詢群組和使用者的位置,例如 DC=sse,DC=example,DC=com

    備註: LDAP 詳細資料頁面包括 人員物件類別帳戶屬性名稱群組類別群組屬性名稱同步排程的單獨輸入欄位,如下所述。因此,請勿在 [基本 DN] 欄位中包括這些物件。
    管理員繫結 DN 為 LDAP 伺服器設定的管理員 DN。SaltStack Config 可使用此項向目錄進行驗證,以便查閱使用者和群組。根據以下語法進行輸入:cn=Administrator,cn=Users,dc=example,dc=com
    管理員繫結 DN 密碼

    管理員的個別密碼。

    將以加密方式儲存在資料庫中,而不會以純文字形式儲存。

    驗證繫結 DN 篩選器

    套用此篩選器可選取特定使用者。此搜尋的結果為使用者 DN,SaltStack Config 將使用此項繫結至目錄並授與使用者對 SaltStack Config 的存取權。這對於限制從指定搜尋傳回的結果數量非常有用。

    備註: 由於篩選器語法會變得非常複雜,因此最佳做法是使用 LDP、 ldapsearch 或類似工具測試項目,以驗證項目並做出任何調整,然後再填寫此欄位。

    下列範例篩選器僅傳回與所提供的屬於 DevOps 或層級 II 群組之使用者名稱相符的帳戶。

    (&(objectclass=user)(sAMAccountName={username})(|(memberOf=CN=DevOps,OU=Groups,OU=TestCompanyHQ,DC=adtest,DC=com)(memberOf=LevelII,OU=Groups,DC=adtest,DC=com)))

    如果您要使用預先填入的預設值,請務必將預留位置文字取代為適合您目錄服務的正確值。

    備註: 設定樹系結構時,將此欄位保留空白。
    遠端唯一識別碼屬性名稱 用於識別唯一項目的值的名稱。這是所有項目的唯一識別碼屬性。在 AD 中,此為 ObjectGUID

    群組

    欄位 說明
    群組搜尋 DN 群組的搜尋基礎。例如,在 AD 中可能為 cn=Groups,dc=example,dc=com。指出目錄中要搜尋群組的位置。與以下 [群組搜尋範圍] 一同使用。
    群組搜尋範圍

    指出從 [群組搜尋 DN] 中所指示基礎進行的目錄搜尋深度,可包括以下四個值之一:

    baseObject
    值 0,通常稱為 base。使用此項會僅搜尋此物件,而不搜尋其他物件。
    singleLevel
    值 1,通常稱為 one。使用此項會僅考慮基礎項目的直接子系是否存在相符項。
    wholeSubtree
    值 2 (或 ldap3 中的 SUBTREE),通常稱為 sub。使用此項會搜尋到基礎及其任何深度的所有下層。
    subordinateSubtree
    值 3,通常稱為 subordinates。這與 wholeSubtree 相同,但會忽略基礎搜尋項目。
    群組搜尋 DN 篩選器 用於從目錄擷取群組的搜尋篩選器。這通常為 (objectClass=group),但在某些 AD 組態中,可能為 (objectCategory=group)。與 [群組類別] 一起使用,以進一步實現細微度。
    群組類別 用於定義群組的物件類別名稱,例如 groupOfNames
    群組名稱屬性 要用於群組名稱的屬性的名稱。輸入單一值屬性,而非多重值屬性。
    群組成員資格屬性 使用者項目中包含群組名稱的屬性的名稱,例如 memberOf

    使用者

    欄位 說明
    使用者搜尋 DN 使用者的搜尋基礎,例如,cn=Users,dc=example,dc=com (在 AD 中) 或 cn=people,cn=accounts,dc=example,dc=com (在其他目錄服務中)。指出目錄中要搜尋使用者的位置。與以下 [使用者搜尋範圍] 一同使用。
    使用者搜尋範圍 指出從 [使用者搜尋 DN] 中所指示基礎進行的目錄搜尋深度,可包括以下四個值之一。請參閱 [群組搜尋範圍] 中所述的四個值。
    使用者搜尋 DN 篩選器 用於從目錄擷取使用者的搜尋篩選器。這通常為 (objectClass=person),但在某些 AD 組態中,可能為 (objectCategory=user)
    人員類別 包含要允許登入之使用者的目錄服務類別名稱。大多數系統 (包括 Active Directory) 使用 person,但某些系統可能偏好使用 userinetOrgPerson
    使用者識別碼屬性 使用者帳戶屬性的唯一名稱。對於 AD,此為 sAMAccountName。對於其他服務,通常為 uidmemberUid
    使用者成員資格屬性 包含使用者名稱之群組項目中的屬性名稱。可能的範例包括 memberuniquemember
  7. 若要預覽設定而不儲存,請按一下更新預覽

    預覽視窗會顯示針對您的連線選取的使用者和群組。可以選取群組使用者索引標籤,以根據需要預覽與服務相關聯的使用者和群組。

  8. 按一下儲存

    您的 LDAP 組態已儲存。若要確認組態是否正確,您可能要嘗試透過測試使用者帳戶登入 SaltStack Config。如果無法成功登入,請參閱疑難排解以取得相關提示。

    備註: 對於 LDAP 組態, SaltStack Config 會儲存包括已識別的群組和使用者在內的連線設定。它僅在您定義的範圍內擷取群組和使用者,並且不會同步整個目錄。

    經過一段時間後,您可能需要重新整理或重新同步 LDAP 目錄。例如,如果您已在 SaltStack Config 中新增使用者並且想要將其啟用,則應更新目錄。

啟用群組和使用者

設定 LDAP 連線後,需要設定目錄服務群組並確保使用者可以登入 SaltStack Config。設定目錄服務群組:

  1. 在 [驗證] 工作區中,選取所需的 LDAP 組態。
  2. 選取群組索引標籤,以查看從 LDAP 組態中擷取的群組清單。
    備註: 如果正在擷取大量群組,則載入此頁面最多可能需要一分鐘。
  3. 選取要在 SaltStack Config 中啟用的群組。
  4. 選取使用者索引標籤,以查看從 LDAP 組態中擷取的使用者清單。
    備註: 如果正在擷取大量使用者,則載入此頁面最多可能需要一分鐘。
  5. 選取要在 SaltStack Config 中啟用的使用者。
    備註: 已啟用群組中包含的任何使用者均已選取,且無法取消選取。
    SaltStack Config 中已啟用的使用者清單
  6. 按一下儲存

    現在,您可以為所選群組定義角色型存取控制 (RBAC) 設定。但是,透過 [角色] 工作區,可以僅在使用者首次登入後,管理所選群組中包括的個別使用者的設定。若要刪除群組或使用者,請取消選取群組或使用者,然後按一下儲存

    如需有關 SaltStack Config 中 RBAC 的詳細資訊,請參閱〈如何定義使用者角色〉

對 LDAP 連線進行疑難排解

如果無法成功預覽連線,請執行以下疑難排解步驟。
問題 說明 解決方案
無法預覽我的連線

如果無法預覽群組和使用者,在許多情況下,這是由於 LDAP 伺服器與 SaltStack Config 之間的連線問題或 LDAP 組態表單中的項目無效所導致。

  1. 確保允許從 SaltStack Config 到 LDAP 伺服器上所選連接埠的 TCP 連線。
  2. 再次檢查表單項目,然後使用第三方工具驗證語法。請參閱如何對目錄服務連線進行驗證和疑難排解
  3. 如果上述項目都無法解決問題,請參閱下面的〈其他問題〉一節。
  4. 如果上述項目都沒有幫助,請連絡客戶支援。
嘗試預覽我的連線時,頁面載入過程停滯 如果頁面停滯載入時間超過兩分鐘,請重新啟動 RaaS 服務,然後刪除並重新建立組態:
  1. 開啟 RaaS 記錄。
    tail -f /var/log/raas/raas

    記錄中包含類似以下內容的錯誤:

    [ERROR    :256][ForkPoolWorker-2:10253][ldap_preview_background_task(some_uuid)]
    Task ldap preview_background_task[some_uuid]raised unexpected: KeyError('ad-1_preview')
  2. 停止 RaaS 服務,然後將其重新啟動。
    systemctl stop raas
    systemctl start raas
  3. 返回 SaltStack Config 使用者介面並刪除 LDAP 連線。
    備註:

    刪除前,您可能想要將組態項目複製並貼到備份文字檔中。

  4. 重新建立 LDAP 組態。
其他問題

如果已設定並儲存 LDAP 連線,但使用者無法登入,或者您遇到任何其他問題,請檢查已啟用延伸偵錯的 raas 記錄,以協助確定根本原因。

啟用延伸偵錯:

  1. 在 RaaS 上,開啟 /etc/raas/raas
  2. 進行下列變更:
    • Loggingoptions 下,取消 log_file_loglevel:debug 的註解
    • AD/LDAPdriverconfiguration 下,取消 log_level 的註解並設定為 log_level:EXTENDED
  3. 停止 RaaS 服務,然後將其重新啟動。
    systemctl stop raas
    systemctl start raas
  4. 檢視 raas 記錄。
    tail -f /var/log/raas/raas

可能會在記錄中看到的一些常見錯誤,如下所示:

  • 連線 (SSL) 設定錯誤。請調整 SSL 設定。
    [raas.utils.validation.schemas.settings][DEBUG   :546 ][Webserver:9096]
    Error while connecting to AD/LDAP Server. SSL connection issues: socket
    ssl wrapping error: [Errno 104] Connection reset by peer
  • 管理員繫結 DN 的密碼錯誤。請確認並重新輸入密碼。
    [raas.utils.rpc   ][DEBUG   :284 ][Webserver:9095]
    Processed RPC request(129360670417695). Response:
    {'riq': 129360670417695, 'ret': None, 'error': {'code': 3004, 'message':
    'Request validation failure.', 'detail': {'_schema':
    ['Credentials are not valid']}}, 'warnings': []}
  • 預先填入的預設驗證繫結 DN 篩選器將會產生衝突。將此欄位保留空白,或使用 {username} 而非 {{username}}
    備註:

    當您已儲存 LDAP 連線但使用者無法登入時,可能會遇到此錯誤。

    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :903 ][Webserver:9096]
    Running _get_auth_backend_user with this search_filter: (&(objectclass=person)(sAMAccountName={username}))
    
    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :931 ][Webserver:9096]
    Could not find any user using '(&(objectclass=person)(sAMAccountName={username}))'
    as the search filter in the ldap backend under the ad-1 configuration.
    Trying remote_uid 'None'
    
    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :963 ][Webserver:9096]
    Could not find any user using '(&(objectClass=person)(objectGUID=None))'
    as the search filter in the ldap backend under the ad-1 configuration.