AWS: сохранение файла в S3 из EC2, если с экземпляром в целевой группе связан только эластичный IP. В противном случае файл не записывается

#amazon-web-services #amazon-ec2 #aws-security-group #aws-load-balancer

#amazon-web-services #amazon-ec2 #aws-security-group #aws-балансировщик нагрузки

Вопрос:

В настоящее время я изучаю AWS, следуя курсу Pluralsight AWS Developer: начало работы. В рамках этого курса приложение nodejs (приложение для создания пиццы) необходимо развернуть в AWS. Это приложение работает на экземпляре EC2, и когда мы создаем новую пиццу и нажимаем создать, файл png будет сохранен в корзину S3 (код, запущенный в экземпляре EC2, будет записан в S3).

Когда я запускал это приложение с URL-адресом балансировщика нагрузки, приложение загружалось, и когда я пытаюсь сохранить только что созданную пиццу (изображение в формате png), веб-страница зависает, а файл не сохраняется в s3.

Но, если я свяжу эластичный IP-адрес с одним из экземпляров в целевой группе, файл будет правильно сохранен в S3.

Что касается разрешений для экземпляра EC2, у группы безопасности есть только балансировщик нагрузки, отличный от SSH.

введите описание изображения здесь

А EC2 имеет полную роль доступа к S3.

введите описание изображения здесь

Но, тем не менее, приложение работает, только если связан эластичный IP, даже если эластичный IP непригоден для использования (поскольку целевая группа EC2 security group имеет доступ только к балансировщику нагрузки, кроме SSH)

Почему эластичный IP необходим в этом случае для правильного поведения.

Редактировать: дополнительная информация:

Сегмент S3: предоставляется полный общедоступный доступ.

общедоступный доступ к s3
Политика корзины S3

Приведенные ниже PUT разрешенные методы могут быть недействительными. В качестве следа и ошибки я предоставил это.

S3 разрешает доступ

Моя конфигурация маршрута подсети. Я думал, что это общедоступная подсеть. Пожалуйста, поправьте меня, если я ошибаюсь.

введите описание изображения здесь

Мое предположение: я могу быть совершенно неправ, но я понимаю, что моя подсеть является общедоступной подсетью, и мои экземпляры ec2 создаются в этой подсети. Экземпляр EC2 (с полной ролью доступа s3) имеет код для записи файлов PNG в S3 с вышеуказанными настройками (все общедоступные, согласно моему пониманию).

Следовательно, я ожидаю, что этот ec2 должен записать файл в S3 без эластичного IP.

Но понятно, что если включено автоматическое назначение IP-адресов, он находится в точно таком же состоянии, в каком я назначаю эластичные IP-адреса вручную EC2, и, следовательно, этот сценарий работает.

Я понял, что каждому экземпляру EC2 будет присвоен другой общедоступный IP-адрес после включения автоматического назначения IP-адресов. Подходит ли этот метод для таких требований?

Назначение нескольких общедоступных IP-адресов, даже если они не используются (означает, что для доступа к приложению, не являющемуся общедоступным IP, будет использоваться только браузер URL-адреса балансировщика нагрузки), будет стоить больше денег?

Ответ №1:

Обычно существует три способа, с помощью которых ваш экземпляр может получить доступ к S3 для загрузки вашего файла pizza:

  1. Подключитесь к общедоступной конечной точке S3. Это означает, что ваш экземпляр должен иметь возможность подключаться к этой конечной точке через Интернет. Если ваш экземпляр находится в общедоступной подсети с автоматически назначенными общедоступными IP-адресами, тогда это работает из коробки. Если ваш экземпляр не получает автоматически назначенный общедоступный IP-адрес, вы можете использовать эластичный IP-адрес для получения общедоступного IP-адреса для вашего экземпляра.
  2. Подключитесь к общедоступной конечной точке S3 с помощью шлюза NAT. Это полезно, когда ваш экземпляр находится в частной подсети, без прямого доступа к Интернету или каких-либо общедоступных IP-адресов.
  3. Используйте шлюз VPC S3. Это позволяет полностью приватно подключаться к S3 без необходимости какого-либо доступа в Интернет.

Похоже, что в вашем описании указано, что к вам применим вариант 1.

Могут быть и другие возможности, например, в корзине S3 есть политика корзины, которая разрешает загрузку только с IP-адресов из белого списка или диапазонов IP-адресов. Таким образом, возможно, ваш эластичный IP-адрес занесен в белый список, а другие IP-адреса — нет.

Комментарии:

1. Спасибо @Marcin за ваш ответ. Я понял вас # 1. Просто чтобы еще раз подтвердить случай, я внес некоторые изменения в описание вопроса. И не могли бы вы ответить на вопрос в конце редактирования.

Ответ №2:

это потому, что ваш экземпляр не получает доступ к Интернету.

ваш экземпляр получит доступ к Интернету, если у него есть общедоступный IP (или EIP), и он находится в общедоступной подсети, и вы добавили «Интернет-шлюз».

похоже, вы не можете назначить общедоступный IP-адрес .. для назначения выполните следующие действия:

Выберите свою подсеть и выберите Действия подсети, измените параметры автоматического назначения IP. Затем включите автоматическое назначение общедоступного IPv4-адреса

если вы не можете настроить общедоступный IP-адрес, свяжите с ним EIP..

или

если вы хотите получить доступ к Интернету без общедоступного IP-адреса, необходимо использовать «Шлюз NAT»

или

если вы хотите сохранить файл в s3, не выходя из сети AWS (без Интернета), используйте конечную точку VPC для S3

Комментарии:

1. Спасибо @Ravindra Bagale за ваш ответ. your instance will get access to internet if it having public IP ( or EIP) and it is in Public subnet and you have added "Internet Gateway" . Это информация, которую я ищу. Я отредактировал вопрос с дополнительной информацией. Не могли бы вы ответить на это в конце редактирования.