Доступ к межрегиональной конечной точке s3 через частную подсеть

У меня есть ЭМИ, который раскручивается в eu-west-1частная подсеть. Я определил конечную точку шлюза для S3 в таблице маршрутов. Мне нужно получить доступ к этой корзине/местоположению публичный, предоставленной AWS: s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar, которая дает следующую ошибку. Я думаю, это из-за доступа между регионами через конечную точку шлюза, которая не разрешена. Я могу получить доступ к другим корзинам, которые находятся в том же регионе. Есть ли обходной путь для доступа к этому, может быть, через NAT? В таблице маршрутов уже есть NAT, но запрос почему-то не проходит через него.

2019-04-10T05:17:06.849Z INFO Ensure step 1 jar file s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
INFO Failed to download: s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar
java.lang.RuntimeException: Error whilst fetching 's3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar'
    at aws157.instancecontroller.util.S3Wrapper.fetchS3HadoopFileToLocal(S3Wrapper.java:412)
    at aws157.instancecontroller.util.S3Wrapper.fetchHadoopFileToLocal(S3Wrapper.java:351)
    at aws157.instancecontroller.master.steprunner.HadoopJarStepRunner$Runner.<init>(HadoopJarStepRunner.java:243)
    at aws157.instancecontroller.master.steprunner.HadoopJarStepRunner.createRunner(HadoopJarStepRunner.java:152)
    at aws157.instancecontroller.master.steprunner.HadoopJarStepRunner.createRunner(HadoopJarStepRunner.java:146)
    at aws157.instancecontroller.master.steprunner.StepExecutor.runStep(StepExecutor.java:136)
    at aws157.instancecontroller.master.steprunner.StepExecutor.run(StepExecutor.java:70)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager.enqueueStep(StepExecutionManager.java:248)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager.doRun(StepExecutionManager.java:195)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager.access$000(StepExecutionManager.java:33)
    at aws157.instancecontroller.master.steprunner.StepExecutionManager$1.run(StepExecutionManager.java:94)
Caused by: com.amazonaws.AmazonClientException: Unable to execute HTTP request: connect timed out
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:618)
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1143)
    at com.amazonaws.services.s3.AmazonS3Client.getObject(AmazonS3Client.java:1021)
    at aws157.instancecontroller.util.S3Wrapper.copyS3ObjectToFile(S3Wrapper.java:303)
    at aws157.instancecontroller.util.S3Wrapper.getFile(S3Wrapper.java:287)
    at aws157.instancecontroller.util.S3Wrapper.fetchS3HadoopFileToLocal(S3Wrapper.java:399)
    ... 10 more

Если у вас уже есть шлюз NAT, он должен обрабатывать этот трафик автоматически. Unable to execute HTTP request: connect timed out подразумевает, что шлюз NAT неправильно настроен — не включен в таблицу маршрутизации или, возможно, развернут в той же подсети, для обслуживания которой он предназначен, что неверно. Конечная точка шлюза S3 никогда не будет пытаться маршрутизировать межрегиональный трафик.

Michael - sqlbot 10.04.2019 20:57

@ Michael-sqlbot Да, он развернут в той же подсети, которую должен обслуживать. Как это проблема?

ishan3243 10.04.2019 21:12

Шлюз NAT должен находиться в общедоступной подсети с маршрутом по умолчанию для таблицы маршрутов этой подсети, указывающим на интернет-шлюз. Если шлюз NAT развернут в подсети, которую он обслуживает, когда шлюз NAT пытается получить доступ к Интернету, его исходящий трафик зацикливается прямо на себя, поскольку маршрут по умолчанию для подсети указывает на шлюз NAT.

Michael - sqlbot 10.04.2019 21:21

@Michael-sqlbot Спасибо! Пожалуйста, конвертируйте в ответ.

ishan3243 11.04.2019 09:52
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
1 132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Конечная точка шлюза S3 никогда не будет пытаться маршрутизировать межрегиональный трафик, но шлюз NAT должен обрабатывать этот трафик автоматически. Учитывая утверждение о наличии шлюза NAT, Unable to execute HTTP request: connect timed out означает, что шлюз NAT (или связанный с ним параметр) настроен неправильно.

Как отмечалось в комментариях, конкретная проблема здесь заключалась в том, что шлюз NAT был предоставлен в той же подсети, для обслуживания которой он предназначался. Это недопустимая конфигурация, потому что в этом случае шлюз NAT пытается выйти в Интернет... через себя... поскольку он получает маршрут по умолчанию из подсети, в которой он развернут.

To create a NAT gateway, you must specify the public subnet in which the NAT gateway should reside.

...

After you've created a NAT gateway, you must update the route table associated with one or more of your private subnets to point Internet-bound traffic to the NAT gateway. This enables instances in your private subnets to communicate with the internet. (emphasis added)

https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html#nat-gateway-basics

Другие вопросы по теме