От дней до секунд: Автоматизация запросов сертификатов AWS с помощью n8n и Slack

Запросы разработчиков на сертификаты AWS напоминают подростков, просящих ключи от машины – много ожидания, бумажной работы и скрещенных пальцев. Если вы устали быть хранителем сертификатов или разработчиком, застрявшим в аду заявок.

Давайте превратим этот утомительный процесс запроса сертификатов в простую команду Slack, используя n8n, интуитивно понятный инструмент автоматизации рабочих процессов, который заставит ваших разработчиков сказать: «Это всё?»

Мы рассмотрим пример сценария от А до Я, не упуская деталей, чтобы показать, как инструмент автоматизации рабочих процессов n8n может сэкономить занятым разработчикам и менеджерам бесчисленные часы сверхурочной работы.

Текущий танец запроса сертификатов

Представьте себе этот слишком знакомый сценарий: разработчику нужен новый сертификат AWS для их рабочей среды. Вот как это обычно проходит:

  1. Разработчик подает заявку с достаточным количеством текста, чтобы написать роман
  2. Заявка ожидает в очереди, пока разработчик стрессово обновляет свой почтовый ящик
  3. Утверждающий наконец видит заявку среди 47 других срочных запросов
  4. Половина необходимой информации отсутствует (очевидно)
  5. Начинается обмен электронными письмами, напоминающий болезненное пинг-понг-шоу
  6. Утверждающий заходит в консоль AWS (после того, как найдет свое устройство 2FA)
  7. Происходит ручное создание сертификата
  8. Разработчик наконец получает детали сертификата… возможно
  9. Всем упускается немного своей души

По familiar? Мне кажется так. Починим это.

Мечта: Команда Slack → Быстрой Сертификации

Что, если бы ваши разработчики могли просто набрать /newcert в Slack-канале вашего разрабатываемого окружения и получить ARN сертификата AWS в течение нескольких секунд? Без заявок, без ожидания, без утоляющего душу взаимодействия. Это именно то, что мы строим.

В этом сценарии вы разработчик в организации, использующей Slack для связи. Вы создали Slack-канал для каждого разрабатываемого окружения, чтобы сохранять разговоры организованными.

Тут так работает наша автоматизированная рабочая цепочка:

  1. Разработчик вводит /newcert в Slack-канале своего окружения
  2. Рабочая цепочка n8n получает запрос с контекстом канала
  3. Цепочка создает сертификат в AWS
  4. ARN сертификата появляется в том же Slack-канале

Так и делается. четыре шага вместо девяти, и нужно не ждать, пока люди будут делать людские вещи!

Так как мы не спасаемся надеждой на детали, этот пост не просто скажет вам, что n8n может автоматизировать этот процесс, но я покажу вам (я это сделал сам с нуля).

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

Если вы хотите узнать, как установить эту цепочку работы или узнать, как может быть установлена цепочка работы n8n, продолжайте читать!

Первое: Триггер Вебхука

Откройте вашу инстанцию n8n и начнем с пустого холста:

1. Создайте новый рабочий цикл. ниже вы увидите пустой холст нового цикла n8n, готовый для установки первого триггерного узла.

2. Затем добавьте webhook триггерный узел. Webhook триггерный узел – это то, как Slack будет communicat with this workflow to notify the workflow when to issue requests to AWS to create new certificates.

Вы можете увидеть из скриншота выше, что webhook триггерный узел будет принимать POST HTTP запросы.

3. Настройте его, чтобы принимать POST-запросы от Slack

Этот webhook станет нашей front door – это где Slack постучится, когда кто-то будет использовать наш /newcert command.

Создание приложения Slack

Время настроить Slack-side things. Вам потребуется Slack app, чтобы пользователи могли выполнять slash commands (/newcert) в канале. Slack app также будет способом для n8n проверить авторизацию обратно в Slack, чтобы возвращать сообщения.

1. Если вы находитесь на странице приложений Slack, нажмите Create New App, где вы можете предоставить имя.

2. Потом настройте Области, чтобы можно было выпускать сlash-команды и отправлять сообщения обратно в канал. Вам потребуется

channels:read

chat:write

commands

3. Затем настройте сlash-команду. Сlash-команда позволяет пользователям выполнять команды вашему приложению Slack в виде слэша, затем следующего символа. В этом случае команда будет /newcert, чтобы генерировать новый сертификат AWS.

В настройках вашего приложения перейдите к разделу “Сlash-команды” и нажмите “Создать новую команду”

4. Установите приложение в вашем workspace после того, как вы настроили области и сlash-команду.

5. Наконец, добавьте бота (приложение, которое вы только что создали) в Slack-канал, где он будет работать. В этом случае канал будет называться именем разрабатываемой среды qa-1.

/invite @devenvironmentautomation

Testing the Webhook Trigger

Теперь у вас есть Slack app и webhook trigger настроены. Пора тестировать их интерактивность.

1. В вашем workflow n8n нажмите кнопку прослушивания тестового события. Это позволит webhook trigger начать прослушивание запросов, которые Slack app должна отправить.

2. Затем, в вашем разрабатывающем окружении Slack-канале выполните сlash-команду /newcert. После этого узл webhook в n8n должен получить запрос.

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

Если все прошло хорошо, вы должны увидеть default JSON-ответ, сообщающий вам, что рабочая цепочка получила запрос и начала свою работу.

Установка доступа к AWS

Для создания новых сертификатов n8n должен авторизоваться в AWS. Для этого нужен пользователь IAM с соответствующими правами. Так как мы начинаем с нуля в этом руководстве, внизу вы найдете способ быстро установить этого пользователя IAM с помощью CLI AWS.

Если у вас еще нет пользователя IAM, вы можете использовать следующий код, чтобы сделать это:


## создание файла политики
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "acm:DescribeCertificate",
                "acm:ListCertificates",
                "acm:GetCertificate",
								"acm:RequestCertificate"
								"acm:AddTagsToCertificate"
            ],
            "Resource": "*"
        }
    ]
}

## создание пользователя
aws iam create-user --user-name CertificateManager

## создание идентификатора доступа и секретного ключа
aws iam create-access-key --user-name CertificateManager --query 'AccessKey.[AccessKeyId,SecretAccessKey]' --output text > certificate_manager_credentials.txt

## создание политики
$policy = Get-Content -Raw ~/Downloads/cert-policy.json                                                           PS /Users/adam> $policy_arn = aws iam create-policy --policy-name CertificateManagerPolicy --policy-document $policy --query 'Policy.Arn' --output text

## привязка политики

aws iam attach-user-policy --user-name CertificateManager --policy-arn $policy_arn

## чтение идентификатора доступа и секретного ключа, которые нам понадобятся позднее для работы
Get-Content ./certificate_manager_credentials.txt

Этот код использует AWS CLI для выполнения различных задач:

1. Создание политики: Создается политика IAM, которая точно определяет, какие действия, связанные с сертификатами, допускаются:

– просмотр деталей сертификата

– список сертификатов

– извлечение данных сертификата

– создание новых сертификатов

– добавление тегов к сертификатам

2. Создание пользователя: Создается специальный IAM пользователь с именем “CertificateManager”, который будет явно использоваться для задач управления сертификатами

3. Генерация ключевого пары: Для нового пользователя создается парка ключей (идентификатор доступа и секретный ключ) и сохраняются в файле

4. Привязка политики: Создается IAM политика и прикрепляется к новому пользователю, предоставляя ему только конкретные разрешения управления сертификатами, определенные в политике

5. Использование команды PowerShell Get-Content для чтения текстового файла с ключом доступа и секретом, которые вам нужно предоставить для работы.

Это соответствует лучшим практикам безопасности, так как:

  • Использование принципа минимальных полномочий (предоставление только необходимых разрешений).
  • Создание специального пользователя для управления сертификатами
  • Разделение учетных данных от учетной записи администратора

Примечание: В производственной среде вы хотели бы хранить созданные учетные данные безопасно, не в обычном текстовом файле. Consider using AWS Secrets Manager or another secure secrets storage solution.

Настройка учетных данных AWS для работыфлоу n8n

Когда мы дойдем до этого шага, работая схема должна быть в состоянии авторизоваться в AWS Certificate Manager, чтобы выпустить новые сертификаты. n8n использует учетные данные для этого. Чтобы создать новый учетные данные AWS:

1. В вашем рабочем пространстве нажмите Учетные данные в верхнем ряду вашего экрана и нажмите Добавить учетные данные.

2. Укажите AWS в качестве типа учетных данных.

3. Передайте полученные ранее командами AWS CLI ключи доступа и секретный ключ доступа.

n8n имеет приятную функцию, которая автоматически тестирует учетные данные, когда вы их сохраняете, поэтому вы сразу узнаете, работают ли учетные данные или нет.

Создание узла HTTP-запроса

Хотя n8n поддерживает службу AWS Certificate Manager, в настоящее время он не поддерживает создание новых сертификатов, так что вам не повезло! Вы можете использовать общий узел HTTP Request. Этот узел позволяет отправлять общие HTTP-запросы к операциям API, которые в настоящее время не поддерживаются.

 No need to worry about complex API authentication. Once you create a credential, n8n can leverage that and manage all that OAuth goodness for you. 

1. Чтобы создать необходимый нам узел HTTP Request, сначала определите все параметры, которые требует API AWS. Это:

URL – Конечная точка API для региона, в котором вы работаете

Authentication – Используйте Predefined Credential Type, чтобы воспользоваться ранее созданными учетными данными.

Credential TypeAWS

AWS – Ранее созданные учетные данные AWS.

Send Headers – Вам нужен заголовок X-Amz-Target, чтобы сообщить API, какую операцию вы хотите использовать; в данном случае это CertificateManager.RequestCertificate.

Body Content Typeapplication/x-amz-json-1.1

2. Далее настройте тело HTTP. Это критически важный шаг для выполнения запроса API с именем окружения разработчика. В этом сценарии мы присваиваем сертификату тег AWS под названием Environment и устанавливаем значение имени окружения, полученное из запроса Slack.

Вам понадобится динамический ввод или Выражение для этой задачи. Щелкните на Выражение в поле Тело и увидите, что ввод превращается в текст функции.

3. Щелкните на значке развертывания в правом нижнем углу поля тела, и вы получите интуитивный редактор.

Тело HTTP должно быть в формате JSON. Я использую одно из моих доменных имен здесь и проверяю сертификат с помощью DNS.

Вы можете видеть ниже, что я могу включить значение тега, перетащив значение, полученное из Slack, в выражение.

    {
        "DomainName": "atademos.com",
        "ValidationMethod": "DNS",
        "Tags": [
            {
                "Key": "Environment",
                "Value": "{{ $('Webhook').item.json.body.channel_name }}"
    }
    ]}

Теперь значение – {{ $('Webhook').item.json.body.channel_name }}. Эта переменная будет передана в AWS в API-запросе, содержащем имя канала Slack (имя среды разработки в данном сценарии).

[su_hightlight]The expressions in n8n are powerful. They’ve developed their own templating language that’s intuitive and is integrated well in various parts of the tool.[/su_hightlight]

4. Наконец, протестируйте узел HTTP-запроса, нажав на Тестовый шаг. Если все прошло успешно, вы должны увидеть JSON-ответ от AWS, включая ARN сертификата.

Создайте узел Slack

На данный момент у вас есть два из трех узлов в этом простом рабочем процессе n8n: триггер webhook для вызова Slack и узел HTTP-запроса, который будет делать API-запросы к AWS. Финальным узлом является узел Slack, который инициирует ответное сообщение пользователю.

1. Откройте панель узлов и нажмите кнопку плюс, чтобы создать новый узел Slack в вашем рабочем процессе.

2. Найдите Slack и выберите действие Отправить сообщение.

3. Далее нажмите на Учетные данные для подключения и выберите Создать новые учетные данные, чтобы создать учетные данные Slack, аналогичные учетным данным AWS. После того как вы настроите учетные данные, вы сможете использовать их в узле Slack.

4. Укажите соответствующие параметры для узла Slack:

  • РесурсСообщение (для отправки сообщения в канал)
  • ОперацияОтправить
  • Отправить сообщение вКанал
  • КаналПо имени. Вы можете снова использовать редактор выражений и перетащить атрибут channel_name из триггера вебхука, чтобы использовать динамическое выражение.
  • Текст сообщения – В этом сценарии рабочий процесс вернет ARN сертификата, полученный от AWS, разработчику в канале Slack. Поскольку AWS возвращает строку JSON, мы можем использовать встроенную функцию выражения JSON.parse, чтобы разобрать JSON и извлечь значение CertificateArn.

 The ability to run simple JavaScript like JSON.parse directly in expressions is extremely handy. If I didn’t have this ability, I’d have to create a whole new node just to format this simple data. 

5. Нажмите на Тестовый шаг, и исходный канал Slack должен получить сообщение!

Тестирование рабочего процесса

На данный момент у вас должен быть рабочий процесс с тремя узлами. Время протестировать весь рабочий процесс вместе!

Нажимая на Тестировать рабочий процесс, вы увидите, что n8n начинает ждать триггера.

Перейдите в канал Slack для разработчиков и выполните команду /newcert. Ура, рабочий процесс должен выполниться без проблем!

Теперь у вас должно быть сертификат, тэггванный явно для разрабатываемой среды, в котором он будет использоваться, история запроса и куда более счастливые разработчики, например, доступ к новым сертификатам!

为什么这很重要

思忖一下我们刚刚构建的内容:

  • 消除了票证系统的中介
  • 将证书请求时间从几天缩短到几秒
  • 自动化文档(AWS тэги)
  • 使开发者更快乐(无价之宝)

在本篇博客文章中,我们只讨论了一个任务:构建工作流程。现在它可以无限次执行,以节省无数小时!

最棒的是?这才刚刚开始。您可以将此工作流程扩展以处理不同类型的证书,为生产环境添加批准,甚至自动化证书续签通知。

查看预建模板

n8n提供了数百个这样的工作流程的预建模板。这些模板允许您缩短我们在此讨论的过程,以便利用由n8n构建和测试的工作流程。

 If you’d like another great example of a Slack workflow, check out their Advanced Slackbot template. 

结语

n8n让这类工作流程的自动化变得无比简单。我们将一个通常涉及多个系统、人员和耐心水平的过程转变为一个单一的Slack命令。

Хотите попробовать это самому? 基本版 n8n是免费的, и, возможно, вы установите это быстрее, чем обрабатывая один запрос сертификата старым способом. Ваши разработчики будут вам благодарить, и у вас будет меньше одной административной головной боли.

Source:
https://adamtheautomator.com/automate-aws-cert-creation-n8n-slack/