目前,我正在编写一个 AWS Lambda 函数,其想法是,有人可以使用用户名和 AD 组向特定地址发送电子邮件,它将触发该函数并将此人添加到所需的组中。
我正在使用 python 模块 ldap3 并且 conn.search 部分以及 addUsersInGroup 正在工作,但前提是我单独运行它。如果我创建一个脚本,其中我已经拥有用户和组的 cn 或 dn 名称并使用 addUsersInGroup 函数它可以工作,但是如果我在某处执行 conn.search 之前它以某种方式无法建立附加对象的连接-组部分。
from ldap3 import Server, Connection, ALL, NTLM, SUBTREE
from ldap3.extend.microsoft.addMembersToGroups import ad_add_members_to_groups as addUsersInGroups
import email
import os
import json
email = "sample@test.com"
subject = "username,ad-group"
user = subject.split(",")[0]
group = subject.split(",")[1]
emaildomain = email.split("@")[1]
domaingroup = ["test.com"]
adgroups = ["group1","group2"]
server = Server('serverIP', use_ssl=True, get_info=ALL)
conn = Connection(server, OU,
password, auto_bind=True)
def find_user():
user_criteria = "(&(objectClass=user)(sAMAccountName=%s))"%user
if conn.search("OU", user_criteria):
result = str(conn.entries)
user_dn = result.split("-")[0].replace("[DN: ","")
return user_dn
return nouser
def find_group():
group_criteria = "(&(objectClass=group)(sAMAccountName=%s))"%group
if conn.search("OU", group_criteria):
result_group = str(conn.entries)
group_dn = result_group.split("-")[0].replace("[DN: ","")
return group_dn
return nogroup
def add_to_group(user,group):
addUsersInGroups(conn,user,group)
if emaildomain in domaingroup:
user = find_user()
group = find_group()
add_to_group(user,group)
请注意,出于安全原因,我不得不从脚本中删除一些内容。搜索用户或组的连接正在工作,如果我运行 add-to-group 功能,它也可以工作,但只运行它而不事先进行任何搜索。
不知何故,我觉得 conn.search 会阻止任何与搜索相关的连接,如果尝试将相同的连接用于不同的东西,例如将用户添加到组,则该请求会被阻止。
这是我收到的错误: