Использование менеджера сертификатов AWS (сертификат ACM) с Elastic Beanstalk

Если у вас есть сертификат для вашего домена, выданный через AWS Certificate Manager, как вы примените этот сертификат к приложению Elastic Beanstalk.

Да, приложение Elastic Beanstalk сбалансировано по нагрузке и с ним связан ELB.

Я знаю, что могу применить это непосредственно к ELB сам. Но я хочу применить его через Elastic Beanstalk, чтобы конфигурация env была сохранена в шаблоне Cloud Formation.

4 ответа

Решение

Я обнаружил, что вы не можете сделать это через упругую консоль бобового стебля (по крайней мере, пока). Однако вы все равно можете установить его через eb cli или aws cli.

Использование EB CLI

По сути, мы пытаемся обновить aws:elb:listener настройки, вы можете увидеть возможные настройки в общих настройках документов.

Использование EB CLI довольно просто. Предполагая, что мы уже настроили awsebcli инструмент для нашего проекта, мы можем использовать eb config команда.

Он откроет редактор терминала по умолчанию и позволит вам изменить настройки, записанные в виде файла YAML. Когда вы вносите изменения и сохраняете их, eb config cmd автоматически обновит настройки для вашей среды Elastic Beanstalk.

Вам нужно будет добавить следующие настройки в ваш конфигурационный файл:

aws:elb:listener:443:
  InstancePort: '80'
  InstanceProtocol: HTTP
  ListenerEnabled: 'true'
  ListenerProtocol: HTTPS
  PolicyNames: null
  SSLCertificateId: CERTIFICATE_ARN_HERE

Изменить значение для CERTIFICATE_ARN_HERE на ваши сертификаты AMC ARN. Вы можете найти его в консоли диспетчера сертификатов AWS:

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

ВАЖНО: Ваш aws:elb:listener:443 установка ДОЛЖНА быть размещена над aws:elb:listener:80 установка. В противном случае обновление конфигурации среды приведет к ошибке.


Использование AWS CLI

То же самое можно сделать с помощью общего aws cli инструменты с помощью команды update-environment.

aws elasticbeanstalk update-environment \
--environment-name APPLICATION_ENV --option-settings \
Namespace=aws:elb:listener:443,OptionName=InstancePort,Value=80 \
Namespace=aws:elb:listener:443,OptionName=InstanceProtocol,Value=HTTP \
Namespace=aws:elb:listener:443,OptionName=ListenerProtocol,Value=HTTPS \
Namespace=aws:elb:listener:443,OptionName=SSLCertificateId,Value=CERTIFICATE_ARN_HERE

ПРИМЕЧАНИЕ. Когда вы обновляете его любым из указанных выше способов, консоль Elastic Beanstalk не будет показывать HTTPS как включенный. Но балансировщик нагрузки будет, и он также будет применяться к шаблону Cloudformation, а также будет сохранен в конфигурации EB.

Я считаю, что самый простой способ это изменить балансировщик нагрузки EB через пользовательскую консоль. Нажмите изменить и выберите новый сертификат ACM. введите описание изображения здесь

При просмотре конфигурации EB она не появится, но будет установлена

Проверьте, в какой зоне вы создали сертификат и соответствует ли он зоне Elastic Beanstalk. У меня были они в разных зонах, так что это не сработало.

Вы можете сделать это исключительно с CloudFormation; однако, как представляется, довольно часто встречается в Elastic Beanstalk, параметры конфигурации гораздо сложнее найти в документах, чем для отдельных компонентов, составляющих Elastic Beanstalk. Информация здесь:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html

Но в основном вам нужно добавить создание сертификата в шаблон, а затем сослаться на него в OptionSettings в AWS::ElasticBeanstalk::ConfigurationTemplate:

"Certificate" : {
      "Type": "AWS::CertificateManager::Certificate",
      "Properties": {
        "DomainName": "example.com",
      }
    },
// ...
"ElasticbeanstalkTemplate": {
      "Type": "AWS::ElasticBeanstalk::ConfigurationTemplate",
      "Properties": {
        "SolutionStackName": "MyEBStack",
        "ApplicationName": "MyAppName",
        "Description": "",
        "OptionSettings": [{
          "Namespace": "aws:elb:listener:443",
          "OptionName": "InstancePort",
          "Value": "80"
        }, {
          "Namespace": "aws:elb:listener:443",
          "OptionName": "InstanceProtocol",
          "Value": "HTTP"
        }, {
          "Namespace": "aws:elb:listener:443",
          "OptionName": "ListenerProtocol",
          "Value": "HTTPS"
        }, {
          "Namespace": "aws:elb:listener:443",
          "OptionName": "SSLCertificateId",
          "Value": {
            "Ref": "Certificate"
          }
        }, /*More settings*/]