Python ldap3 connection fail when django app is deployed on ecs, but not on local
У меня есть django api, который передает данные из источника Active directory и обрабатывает их. Мое подключение выглядит примерно так
from ldap3 import Server, Connection
server = Server(url, get_info=ALL)
conn = Connection(server, username, password, auto_bind=True)
Я поместил это приложение в контейнер, dockerfile прост и выглядит так
FROM python:3.9
EXPOSE 8002
# Install Dependencies
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD . .
CMD ./server.sh
Server.sh также довольно прост:
#!/usr/bin/env bash
aws s3 cp s3://some_creds .
python manage.py makemigrations && python manage.py migrate && python manage.py runserver 0.0.0.0:80
Теперь на локальной сети и на gitpod это соединение работает без проблем. Я продолжаю выполнять поиск на этом соединении без проблем. Однако, когда я развертываю тот же контейнер на ecs через ecr, который я запускал на local, я получаю следующую ошибку:
<class 'ldap3.core.exceptions.LDAPSocketOpenError'>, LDAPSocketOpenError('socket connection error while opening: [Errno 110] Connection timed out'), ('xxx.xxx.xxx.xxx', xxx))])
Возможно, это побочный эффект доступа к api через ssl, но если это так, то я просто не могу воспроизвести это на локалке.
Эта ошибка возникает только при POST-запросах; любой другой запрос проходит, как и ожидалось.
Проблема была вызвана тем, что доступ к Active Directory осуществлялся только через vpn/proxy. Экземпляр gitpod, который я использовал, был предоставлен компанией, поэтому он также имел сетевой доступ к AD.
Это было решено с помощью VPC, который имел доступ к этой сети по умолчанию.