Как прикрепить предварительно загруженный сертификат SSL к ELB в шаблоне CloudFormation?

Я пытаюсь прикрепить сертификат SSL, который я сейчас использую для одного из своих экземпляров эластичной балансировки нагрузки в новом шаблоне формирования облака, но каждый раз получаю:
Сертификат сервера не найден для ключа < / em>
И затем шаблон Cloudformation начинает откат в этой точке.

            "Listeners" : [ 
         {
          "LoadBalancerPort" : "443",
          "InstancePort" : "80",
          "SSLCertificateId" : "start_certname_com",
          "Protocol" : "HTTPS"
         },...

Amazon запрашивает ARN сертификата SSL для использования., и я считаю, что это правильно, поскольку это точная строка, которая появляется в раскрывающемся списке текущей настройки ELB, которая принимает 443 на порт 80. по экземплярам.

Мне что-то не хватает в моем слушателе?


person pquery    schedule 25.02.2013    source источник


Ответы (3)


Вы можете получить ARN для сертификат в CloudFormation только с именем сертификата. Нет необходимости запускать инструмент командной строки и жестко кодировать значение в шаблоне CloudFormation.

    "Parameters":{
      "Path":{
         "Description":"AWS Path",
         "Default":"/",
         "Type":"String"
      }
    }
     ...
        "Listeners" : [ 
     {
      "LoadBalancerPort" : "443",
      "InstancePort" : "80",
      "SSLCertificateId" : {
        "Fn::Join":[
           "",
           [
              "arn:aws:iam::",
              {
                 "Ref":"AWS::AccountId"
              },
              ":server-certificate",
              {
                 "Ref":"Path"
              },
              "start_certname_com"
           ]
        ]
      },
      "Protocol" : "HTTPS"
     },...

Это определяет идентификатор вашей учетной записи с {"Ref":"AWS::AccountId"} псевдопараметром и объединяет его с другим элементы, необходимые для формирования ARN. Обратите внимание, что я использую переменную с именем Path на случай, если вы указали путь для своего сертификата. Если нет, значение по умолчанию "/" работает нормально.

Это решение было упомянуто @Tristan и является расширением решения merrix143243

person gene_wood    schedule 16.11.2013
comment
Однозначно лучший ответ! - person Roberto Tyley; 03.06.2014
comment
Очень круто! Если кто-то использует cloudformation-ruby-dsl, вот однострочник, вдохновленный этим ответом : :SSLCertificateId => join('', 'arn:aws:iam::', aws_account_id(), ':server-certificate/', ref('SSLCertificateName')) - person Al Belsky; 13.01.2015
comment
@gene_wood Ответ подходит для сертификатов, выпущенных Amazon, но, возможно, не для тех, которые я импортировал (из других центров сертификации). Импортированным из них назначается GUID, который отображается в поле «Идентификатор» в ACM (Amazon Certificate Management). Кроме того, в марте 2018 года 1) arn: aws: acm :: кажется префиксом not: iam ::, 2): server-certificate выглядит как: certificate (если я не импортировал его неправильно). Вопрос: какому полю в ACM соответствует ваше start_certname_com: Имя домена, Дополнительные имена, Идентификатор, Имя (тег пользователя)? - person timmi4sa; 04.03.2018

Я действительно понял, как это сделать, ожидая ответа, вам нужно использовать инструменты IAM CLI, предоставленные amazon, а затем использовать команду
iam-servercertgetattributes -s certname

Это предоставит вам строку вроде:

arn:aws:iam::123456789123:server-certificate/start_certname_com

Это значение, которое вы указываете в поле пары значений SSLCertificateId.

Инструкции по установке инструментов командной строки (CLI) IAM можно найти по адресу:
http://docs.aws.amazon.com/IAM/latest/CLIReference/Setup.html

Загрузите набор инструментов с сайта aws здесь
http://aws.amazon.com/developertools/AWS-Identity-and-Access-Management/4143

В целом ваш последний блок будет выглядеть так:

 "Listeners" : [ 
    {  
      "LoadBalancerPort" : "443",  
      "InstancePort" : "80",  
      "SSLCertificateId" : "arn:aws:iam::123456789123:server-certificate/start_certname_com",  
      "Protocol" : "HTTPS"  
     },...  
person pquery    schedule 26.02.2013

Вот как получить длинное имя сертификата с помощью последней версии интерфейса командной строки AWS:

pip install awscli
aws iam list-server-certificates
person Nate    schedule 11.05.2015