Где AWS Elastic Beanstalk Load Balancer ищет сертификаты?

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

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

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

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

Конфигурация прослушивателя Elastic Beanstock

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

Помощь!


person drorsun    schedule 06.04.2016    source источник


Ответы (2)


В настоящее время через консоль невозможно назначить сертификат, созданный в диспетчере сертификатов, вашей среде Beanstalk.

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

Короче говоря, вам необходимо:

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

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

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

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

Кроме того, убедитесь, что вы настроили свой сертификат так, как хотите, прежде чем применять его в среде Beanstalk. Например, если вы хотите, чтобы * .mydomain.com и голый 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);

        }

    }

}
person Brian FitzGerald    schedule 06.04.2016
comment
Tx за это. Что касается aws cli - мы говорим об awsebcli или просто aws cli? Я скоро проверю эту процедуру. Между тем мне действительно удалось установить это, изменив EC2 ›Load Balancer настолько хорошо, что вы упомянули, что он будет заменен при обновлениях. - person drorsun; 06.04.2016
comment
Уверен, что это главный "aws" cli. Статья Ананда Капура, на которую я ссылался, весьма хороша. - person Brian FitzGerald; 06.04.2016

Ответ Брайана Фитцджеральда и этот блог помог мне найти простой способ сделать это (установить https на балансировщике нагрузки Elastic beanstalk и использовать для него сертификат CRM).

Решение проще с использованием AWS Elastic Beanstalk CLI (< strong> 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"}'

Артикул сертификата можно найти в AWS> Certificate Manager. Откройте сертификат и скопируйте номер ARN (справа внизу).

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

person drorsun    schedule 18.04.2016