Блог Amazon Web Services

Как использовать AWS Certificate Manager вместе с AWS CloudFormation

Оригинал статьи: ссылка (Louay Shaat, Senior Security Solutions Architect)

В прошлом месяце компания Amazon Web Services (AWS) представила возможность автоматизировать выдачу и валидацию публичных и приватных сертификатов с помощью AWS CloudFormation.

Чтобы облегчить эту задачу, AWS выпустила новую функциональность, которая позволяет вам:

  • автоматизировать шаги по валидации вашего доменного имени с использованием DNS для выдачи публичного сертификата;
  • использовать шаблоны AWS CloudFormation для выдачи приватных сертификатов с использованием AWS Certificate Manager (ACM);
  • отключить сохранение данных прозрачности сертификатов (certificate transparency), если вы не хотите, чтобы ваши сертификаты автоматически сохранялись в публичный журнал прозрачности сертификатов.

В этой статье я объясню, как использовать эти возможности в AWS CloudFormation. Я также покажу примеры шаблонов, чтобы помочь вам с использованием новой функциональности.

Автоматизация выдачи публичного сертификата с валидацией по DNS

Перед выпуском сертификата для вашего сайта, АСМ сервис должен проверить, что вы являетесь владельцем или контролируете все домены, указанные в запросе. При создании сертификата вы можете выбрать либо валидацию по e-mail, либо валидацию по DNS.

Раньше, когда вы выбирали валидацию по DNS, вам требовалось вручную добавить необходимую CNAME-запись в зону Amazon Route53.

Примечание: ACM использует CNAME-запись для подтверждения, что вы являетесь владельцем или контролируете домен.

Новая функциональность позволяет AWS CloudFormation производить валидацию вашего публичного сертификата с использованием DNS, если стек AWS CloudFormation создаётся в том же аккаунте, где находится домен Route 53. Для включения этой возможности используйте параметр HostedZoneId, указывающий на зону, где будет создана необходимая CNAME-запись.

Ниже приведён фрагмент шаблона AWS CloudFormation для ACM, в котором указано значение HostedZoneId.

ACMCertificate: 
    Type: "AWS::CertificateManager::Certificate"
    Properties: 
      DomainName: example.com
      DomainValidationOptions:
            - DomainName: www.example.com
              HostedZoneId: ZZZHHHHWWWWAAA
      ValidationMethod: DNS 

При создании этого ресурса через AWS CloudFormation вы увидите значение CNAME-записи, сгенерированное ACM. AWS CloudFormation использует эту информацию для обновления зоны, указанной вами в HostedZoneId. На изображении ниже можно увидеть значение CNAME в колонке Status reason на странице Events, содержащей все события стека.

Изображение 1: список событий при автоматизации ACM

Изображение 1: список событий при автоматизации ACM

Теперь вы можете автоматизировать выдачу публичных сертификатов с помощью ACM и включить этот процесс в ваш общий стек.

Автоматизация создания приватных сертификатов

Также вы можете использовать шаблоны AWS CloudFormation для автоматизации выпуска ваших приватных сертификатов.

Обратите внимание, что для выдачи приватного сертификата в ACM вам нужен приватный центр сертификации (certificate authority). Вы можете найти информацию о том, как его создать, в документации по ссылке.

Отключение прозрачности сертификатов

Прозрачность сертификатов (Certificate Transparency) – это открытый фреймворк, который осуществляет мониторинг и аудит сертификатов SSL/TLS. Стандарт определяет систему публичных журналов, в которые в конечном итоге будут записываться все сертификаты, выданные публичными центрами сертификации. Это позволит эффективно идентифицировать ошибочно или злонамеренно выданные сертификаты.

Каждая запись в журнале прозрачности сертификатов содержит информацию о всех публично доверенных цифровых сертификатах, если только вы специально не отключите прозрачность сертификатов при их создании. Эти журналы содержат информацию об открытом ключе сертификата, его субъекте и издателе.

Журналы прозрачности сертификатов хранят криптографически защищенные записи c информацией о сертификатах без возможности изменения. То есть, записи можно только добавлять в журнал, но нельзя удалять, модифицировать или каким-то другим способом менять или создавать сертификаты задним числом.

Вы можете отключить прозрачность сертификатов в вашем шаблоне AWS CloudFormation. Для этого необходимо добавить параметр CertificateTransparencyLoggingPreference и установить для него значение DISABLED.

Примечание: Указанный параметр может принимать два значения: ENABLED или DISABLED.

Ниже приведён фрагмент шаблона AWS CloudFormation, который включает в себя параметр CertificateTransparencyLoggingPreference.

Resources: 
  ACMCertificate: 
    Type: "AWS::CertificateManager::Certificate"
    Properties: 
      DomainName: example.com
      CertificateTransparencyLoggingPreference: DISABLED
      DomainValidationOptions:
            - DomainName: www.example.com
              HostedZoneId: ZZZHHHHWWWWAAA
      ValidationMethod: DNS 

Заключение

С помощью описанной выше новой функциональности для автоматизации выдачи публичных и приватных сертификатов, а также отключения прозрачности сертификатов вы можете использовать приватный центр сертификации ACM в вашем полностью автоматизированном решении для инфраструктуры-как-кода (infrastructure-as-code).