0

Я настраиваю приложение AWS Elastic Beanstalk, и я хочу, чтобы трафик был HTTPS.Где находится балансировочная система балансировки балансировки боковых амортизаторов AWS?

Я создал запись CNAME DNS, соответствующую URL-адресу beanstalk, и создал и утвердил сертификат для этого DNS-имени в AWS Certificate Manager.

Теперь я перешел в Эластичную среду Beanstalk -> Конфигурация -> Сетевой уровень/Балансировщик нагрузки (изображение ниже), чтобы установить «Безопасный порт слушателя» с OFF на 443 и выбрать мой сертификат.

Но мой сертификат не существует на выбор! Итак, мой вопрос: как получить мой сертификат или сертификат в этом списке выбора, или это ошибка в AWS?

Elastic Beanstock Listener configuration

Примечание - я был в состоянии видеть мой сертификат при переходе к EC2/Load балансиры и был в состоянии изменить балансировки нагрузки от HTTP к HTTPS и выбрать свой сертификат там. Но это не отражало конфигурацию балансировки нагрузки на эластичную фасоль, которая по-прежнему показывает порт 80. Использование HTTPS для beanstalk не работает таким образом.

Помощь!

ответ

0

Ответ Брайан Фицджеральд и this blog помогли мне понять простой способ сделать это (установить протокол HTTPS на упругом балансира Beanstalk нагрузки и использовать сертификат CRM для Это).

Решение проще с использованием AWS Elastic Beanstalk CLI (eb для краткости). После правильной настройки среды вы можете использовать команду eb config. Когда откроется окно редактирования, прокрутите вниз до раздела aws:elb:loadbalancer.

Изменить раздел балансировки нагрузки, чтобы быть так (в моем случае я извлекал порт 80 в целом, вы можете сохранить его):

aws:elb:loadbalancer: 
    CrossZone: 'true' 
    LoadBalancerHTTPPort: 'OFF' 
    LoadBalancerHTTPSPort: '443' 
    LoadBalancerPortProtocol: HTTP 
    LoadBalancerSSLPortProtocol: HTTPS 
    SSLCertificateId: PLACE HERE THE CRM CERTIFICATE ARN 
    SecurityGroups: '{"Fn::GetAtt":["AWSEBLoadBalancerSecurityGroup","GroupId"]},{"Ref":"AWSEBLoadBalancerSecurityGroup"}' 

ARN сертификата можно найти в AWS> Сертификат менеджера , Откройте сертификат и скопируйте номер ARN (внизу справа).

Я сохранил конфигурацию, дождался, когда среда будет обновлена, и это все.

1

С помощью консоли в настоящее время нет способа назначить сертификат, созданный в диспетчере сертификатов, в среду Beanstalk.

Для этого вам необходимо использовать AWS CLI. Я смог это сделать, и, к счастью, это легко.

Короче говоря, вам нужно:

  • создать файл Elb-acm.json и поместите его где-нибудь в вашем веб-корень. Я положил ум прямо в корень сети моего приложения.
  • перейти к менеджеру сертификатов и получить ARN идентификатор вашего сертификата
  • использовать команду update environment, чтобы применить сертификат к среде

aws elasticbeanstalk update-environment --environment-name Your-Environment --option-settings file://PATH-TO-JSON/elb-acm.json

Для меня путь был просто file://elb-ecm.json так (Я считаю, причина в том, потому что) Я выполнял команду в то время как в корневой папке, и файл находился в том же каталоге This article goes into detail (и работал для меня). Удачи!

Обратите внимание, что вы не должны назначать сертификат непосредственно через консоль Load Balancer (EC2> Load Balancers), потому что балансировщик нагрузки будет сдуваться и воссоздаваться всякий раз, когда вы перестраиваете среду Beanstalk.

Кроме того, убедитесь, что вы настроили сертификат, как хотите, прежде чем применять его в своей среде Beanstalk. Например, если вы хотите, чтобы * .mydomain.com и naked mydomain.com обе были в безопасности, убедитесь, что он полностью настроен первым, поскольку нет простого способа «отключить» ваш сертификат из вашей среды после запуска этих команд (вам в основном нужно полностью закрыть среду и создать новую, если я не ошибаюсь в этом сценарии).

Кроме того, вы захотите иметь код перенаправления в своем приложении, чтобы выполнить перенаправление 301 при любом незащищенном запросе, когда вы установили свой сертификат.Для выполнения перенаправления вам нужно будет найти заголовок X-Forwarded-Proto по входящему запросу. Если это не безопасно, вы должны перенаправить на безопасный порт. Например, вот как мой код выглядит приложение:

// in production, only allow secure requests (https) 
public function performSecureRedirect(rc) { 

    // based on domain comparison 
    var isLive = myEnvironmentData.isLive; 

    // setting up the health check url is important for smooth beanstalk deployments 
    // beanstalk issues this healthcheck request via a non-secure port 
    var isAmazonHealthcheckUrl = rc.event eq "system.healthcheck"; 

    if (isLive and not isAmazonHealthcheckUrl) { 

     var headerData = getHTTPRequestData().headers; 

     // x-forwarded-proto is a special header 
     // setup by Amazon ELB (Elastic Load Balancer) 
     var requestProtocol = getHttpRequestData().headers['x-forwarded-proto']; 
     var isSecureRequest = requestProtocol eq "https"; 

     if (not isSecureRequest) { 

      location("https://" & cgi.server_name & cgi.path_info, false, 301); 

     } 

    } 

} 
+0

Tx для этого. Что касается aws cli - мы говорим о «awsebcli» или просто «aws» cli? Я скоро проверю эту процедуру. Между тем мне действительно удалось установить это, изменив EC2> Load Balancer настолько хорошо, что вы упомянули, что это будет заменено на обновления. – drorsun

+0

Довольно уверен, что это главный «aws» cli. Эта статья, которую я связал с Анандом Капуром, неплоха. –