Итак, я ранее задавал этот вопрос в stackoverflow, но мне сообщили, что я должен задать его и здесь, поскольку это, похоже, скорее сетевой вопрос. Я поискал в serverfault похожие вопросы и наткнулся на один с 2014 года, но я хотел расширить его.
Итак, для проекта, над которым я работаю в своем офисе, у меня есть приложение .NET, которое будет хранить и извлекать данные на / с сервера MySQL AWS RDS, который я настроил. Проблема, с которой я столкнулся, заключается в том, что порт 3306 не открыт в моей рабочей сети. Он отлично работает, когда я не в сети своей компании, поэтому я знаю, что это не проблема с сервером AWS RDS. (например, если я подключился к своему телефону, он работает)
Я обратился в сетевой отдел, чтобы узнать, что они могут сделать с открытием этого порта. Они спросили меня, есть ли способ установить статический IP-адрес для этого экземпляра AWS RDS, чтобы они могли добавить правило брандмауэра, разрешающее порт 3306 только для этого статического IP-адреса. Они хотят открыть порт только на основе IP-адреса сервера, а не полностью открывать порт 3306 из соображений безопасности, как они говорят. Они сказали, что если они откроют порт 3306, он будет открыт для всей офисной сети, и они не могут открыть его только для IP-адреса моего компьютера.
Я не видел нигде на панели инструментов AWS о настройке статического IP-адреса для моего экземпляра RDS. ИТ-специалисты заявляют, что необходимость в статическом IP-адресе заключается в том, что при изменении IP-адреса, связанного с DNS конечной точки, которую они предоставляют, им не нужно настраивать параметры брандмауэра, чтобы приспособиться к этому изменению.
1) Можно ли установить статический IP-адрес на экземпляре RDS? (судя по приведенной выше ссылке, это кажется невозможным, но я хотел бы в любом случае спросить, что что-то изменилось, и теперь это возможно, поскольку предыдущий пост был с 2014 года)
2) Можно ли открыть порт только для этой конкретной конечной точки DNS, которую предоставляет AWS? Моя ИТ-команда говорит, что они НЕ могут открыть порт для URL-адреса, и это должен быть IP-адрес (статический, поэтому он не меняется). Так ли это на самом деле или есть способ обойти это? На основе ответ из моего сообщения stackoverflow он упоминает, что это возможно:
Вы можете сказать своей ИТ-группе создать правило брандмауэра в порту 3306 для URL-адреса экземпляра RDS, и оно будет работать нормально.
Могу ли я предоставить своим сотрудникам ИТ-сетей дополнительную информацию, которая поможет направить их в правильном направлении, если это действительно возможно? Я считаю, что это довольно распространенная задача, учитывая популярность серверов MySQL, размещенных в облаке, и что я не могу быть единственным, у кого есть эта проблема?
Спасибо!
Похоже, у вас довольно ограниченная сетевая среда, которая запрещает исходящие соединения, предназначенные для порта 3306. «Традиционные» брандмауэры разрешают только списки ACL, нацеленные на IP-адреса, а не на DNS-имена, поэтому похоже, что URL-адрес RDS не будет работать для вас. . Эти межсетевые экраны работают на уровнях 3 и 4, поэтому у них нет концепции имен DNS, которые являются концепцией уровня 7.
Если ваша компания специально блокирует подключения к 3306, поскольку это хорошо известный порт, возможно, они могут позволить вам открывать подключения к другому порту. Затем вы можете воссоздать свой экземпляр, чтобы использовать этот порт, а не порт по умолчанию.
Если вместо этого блокирование представляет собой общую политику, реализованную на уровнях 3 и 4, вам может не повезти в данный момент. Вы можете выполнить DNS-поиск IP-адреса вашего экземпляра и использовать его в ACL, но этот адрес может быть изменен.
Обычно я бы просил их открыть соединение только для IP-адреса вашей клиентской системы, но, как вы говорите, они уже отклонили это. Я предполагаю, что это связано с использованием DHCP для назначения адреса вашей системе, а не статического IP-адреса. Возможно, вы можете запросить статический IP-адрес для своей системы или запустить свое приложение на сервере компании со статическим IP-адресом. Это позволит им заполнить ACL "один ко многим", который они сочтут приемлемым.
Сообщите своим сетевым специалистам, что AWS использует DNS-имя, а не IP-адрес по причинам аварийного переключения. Любой брандмауэр, который они используют в корпоративной среде, может ссылаться на DNS-имя, а не на IP-адрес, поэтому они должны иметь возможность ссылаться на DNS-имя конечной точки, а не на IP-адрес.
Если нет, вы можете использовать haproxy на экземпляре ec2 с эластичным IP-адресом, но если у него есть законный бизнес-вариант использования, я бы рекомендовал попытаться заставить их использовать имя DNS. Haproxy просто добавляет еще одну точку отказа.
Экземпляр RDS не имеет фиксированного IP-адреса, поскольку это позволяет ему обеспечивать переключение на другие экземпляры.
Вы можете установить прокси-сервер EC2 в свой VPC на любом порту, который вам нравится, для отправки трафика на экземпляр RDS. Это будет TCP-прокси, который просто передает пакеты, что может делать Nginx. Я не пробовал, но должно работать. Дайте экземпляру EC2 статический IP-адрес (эластичный IP-адрес в терминах AWS), и Nginx сможет прокси-сервер для экземпляра RDS по имени хоста. T2.nano может быть всем, что вам нужно, но более крупный сервер с большей пропускной способностью сети может обеспечить лучшую производительность, если он получает большой трафик.
Не забудьте получить эфемерный диапазон портов тоже открылся. Обычно входящие порты с 32768 по 61000 должны разрешать трафик обратно из AWS.
Мне любопытно, почему у вас есть локальное приложение с облачной базой данных. Если вы можете запустить приложение локально, почему бы вам не запустить базу данных локально? Или запустить приложение и базу данных в AWS? Использование нескольких приложений может привести к несогласованности базы данных, взаимоблокировкам или гонкам.
Как
Вы можете узнать больше о том, как настроить Nginx в качестве TCP-прокси. на их сайте. Есть руководство по настройке Tiny Proxy (о котором я никогда раньше не слышал) на AWS. Вот.
Возможно, вам лучше всего будет нанять консультанта AWS на короткое время, чтобы он помог вам в этом, потому что вам также нужно подумать о безопасности.