Я не стал писать этот вопрос, потому что не уверен, относится ли он к ServerFault или StackOverflow.
У меня есть веб-приложение React, размещенное в корзине AWS S3 и использующее CloudFront. У меня есть REST API, написанный как приложение Java Spring Boot, работающее на экземпляре AWS EC2. Я пытаюсь включить SSL на обоих из них, чтобы защитить свой трафик.
До сих пор я использовал SSL-сертификат, созданный AWS, для защиты веб-приложения. Я попытался использовать тот же сертификат SSL, созданный AWS, для защиты приложения Java Spring Boot, и я пришел к выводу, что с этим сертификатом это невозможно. Все попытки заставить приложение Java Spring Boot поддерживать SSL с помощью этого сертификата не удались при запуске приложения.
Я экспериментировал локально с самозаверяющими сертификатами, которые после принятия предупреждения браузера работают для веб-приложения, но не для приложения Java Spring Boot. Приложение Java Spring Boot запускается нормально, и я могу использовать Postman для доступа к API (после настройки Postman для пропуска проверки сертификата). Я считаю, что библиотека JavaScript, которую я использую (Axios) для вызова приложения Java Spring Boot, не может справиться с самозаверяющим сертификатом, и я не смог настроить ее для приема / игнорирования самозаверяющего сертификата. В конечном итоге я не буду использовать самозаверяющие сертификаты, так что все равно это тупик.
Мое развертывание веб-приложения, размещенного на S3 с HTTP API на экземпляре EC2, не кажется необычным. Это? Должен ли я делать это по-другому?
Прежде чем я пойду дальше по кроличьей норе с покупкой сертификатов и использованием дополнительных сервисов AWS, я надеюсь, что кто-то здесь может дать мне небольшое руководство.
Во-первых, я не верю, что AWS взимает плату за сертификаты, применяемую к их инфраструктуре. Я бы поставил балансировщик нагрузки между CloudFront и экземпляром EC2 и использовал бы сертификат на балансировщике нагрузки и просто использовал бы незашифрованный трафик между балансировщиком нагрузки и экземпляром EC2. Надеюсь, это решит вашу проблему с приложением. Вы можете использовать правила безопасности, чтобы заблокировать экземпляр только для балансировщика нагрузки.
Есть несколько способов заблокировать балансировщик нагрузки на CloudFront - один из часто задокументированных способов - это добавить небольшую и редко запускаемую функцию Lambda, чтобы ограничить доступ только IP-адресами CloudFront, как описано в документации. Вот.
У меня также CloudFront добавляет настраиваемый заголовок с магической строкой в качестве его значения, а apache на EC2 фильтрует любой трафик без волшебной строки. Эти две меры кажутся полностью эффективными для блокировки доступа к серверу, не являющегося облачным, и вы можете сосредоточить дальнейшие меры WAF на самом распределении CloudFront.