в настоящее время я пишу функцию AWS Lambda, и идея состоит в том, что кто-то может отправить электронное письмо на указанный c адрес с именем пользователя и группой AD, и это вызовет функцию и добавит этого человека в желаемая группа.
Я использую python модуль ldap3, и часть conn.search работает, а также addUsersInGroup, но только если я запускаю ее отдельно. Если я создаю сценарий, в котором у меня уже есть имя cn или dn как для пользователя, так и для группы, и использую функцию addUsersInGroup, он работает, но если я выполняю conn.search где-нибудь, прежде чем он каким-то образом не сможет установить соединение для sh часть добавления в группу.
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)
Обратите внимание, что мне пришлось удалить некоторые вещи из скрипта по соображениям безопасности. Соединение для поиска пользователя или группы работает, и если я запускаю функцию добавления в группу, она тоже работает, но только запускает ее без предварительного поиска.
Почему-то у меня такое ощущение, что соединение .search блокирует соединение для всего, что связано с поиском, и если попытаться использовать одно и то же соединение для чего-то другого, например, для добавления пользователя в группу, этот запрос блокируется.
Вот полученная мной ошибка:
Сообщение об ошибке