從天到秒:使用 n8n 和 Slack 自動化 AWS 證書請求

開發者索取AWS憑證就像青少年索要車匙一樣 — 需要花很多時間等待、謄寫文件,以及Cross fingers。如果你已經疲於當憑證大门keeper或被困在票務煉獄的開發者。

讓我們將那種令人頭痛的憑證申請過程轉換成一個簡單的Slack命令,使用n8n,一個直觀的工作流程自動化工具,這樣你的開發者就會說,“就是這嗎?”

我們將從A到Z覆蓋一個例子 scenario,不省会省略細節,向你展示n8n工作流程自動化工具如何為忙碌的開發者和管理人員節省無數加班時間。

目前憑證申請舞蹈

想像這個太多熟悉的場景:開發者需要為其開發環境索取新的AWS憑證。typically 這会是這樣進行:

  1. 開發者提交一個包含足夠文字來寫一部小說的票
  2. 票在隊列中等待,而開發者则在刷新信箱時焦慮
  3. 批准者finally在47其他紧急要求的之間看到票
  4. 一半必要的資訊缺失(當然)
  5. 往來郵件進行像痛苦的双打乒乓球
  6. 批准者logs到AWS控制台(在找到其2FA設備後)
  7. 手動憑證創建發生
  8. 開發者 finally 终于得到憑證详情…… maybe
  9. 每個人都失去了一點靈魂

這個聲音耳熟嗎?我認為是。讓我們來解決這個問題。

夢想:Slack 命令 → 立即certificate

那麼,如果你的開發人员可以在他們開發環境的Slack聊天室中輸入/newcert,幾秒內獲得AWS憑證ARN返回呢?不需要票證,不需要等待,也不需要令人沮喪的一来一回。這正是我們正在建造的。

在這種情況下,你是個開發者,在一個使用Slack進行溝通的組織中。你為每個開發環境創建了一個Slack聊天室,以保持對話有序。

我們的自動化工作流程將如何工作:

  1. 開發者在其環境的Slack聊天室中輸入/newcert
  2. n8n工作流程使用聊天室上下文接收到請求
  3. 工作流程在AWS中創建憑證
  4. 憑證ARN出現在同一Slack聊天室

就是這樣。四步而不是九步,完全不需要等待人類做事!

因為我們不會省略細節,所以這篇文章不僅告訴你n8n可以自動化這個過程,我還會向你展示(我從頭開始自己做的)。

n8n使用工作流程將任務using nodes binding在一起。這些工作流程可以執行,觸發工作流程中的所有节点以自動化簡單到複雜的過程。

如果你想知道如何設置此工作流程,或者想知道如何設定n8n工作流程,繼續閱讀!

第一步:Webhook 觸發器

開啟您的 n8n 實例,讓我們從空白畫布開始:

1. 建立新的 workflow。以下,您將看到新 n8n workflow 的空白畫布,已經準備好設定第一個觸發節點。

2. 接下來,添加一個 webhook 觸發節點。Webhook 觸發節點是 Slack 如何與此 workflow 通信以通知 workflow 當何時向 AWS 发出請求以建立新憑證的方式。

從上面 screenshot 可以看出,webhook 觸發節點將 listener POST HTTP 請求。

3. 設定它從 Slack 接收 POST 請求

這個 webhook 將成為我們的前端——這是 Slack 當某人使用我們的 /newcert 命令時會敲打的處所。

建立 Slack 應用

是时候設定 Slack 端的事情了。您需要一個 Slack 應用 來允許用戶在聊天室中发出 斜杠命令/newcert)。Slack 應用同時也是 n8n 向 Slack 驗證並返回消息的方式。

1. 一旦進入 Slack 應用屏幕,點擊 建立新應用,您可以在此處提供應用名稱。

2. 接下來,將範圍設定為能夠下发斜杠命令,並能夠將消息回傳至频道。您需要

 - channels:read

 - chat:write

 - commands

3. 接下來,設定一個斜杠命令。斜杠命令讓用戶能夠以斜杠後面跟隨命令的方式對您的Slack應用下达命令。在此情況下,命令將是/newcert以生成新的AWS憑證。

在您的應用設定中,前往“Slash Commands”並點擊“Create New Command”

4. 將應用程序部署到您的工作组一旦您設定完範圍和斜杠命令。

5. 最後,將聊天机器人(您剛剛創建的應用程序)邀請到一個Slack频道中工作。在此情況下,频道將是開發環境的名稱qa-1

/invite @devenvironmentautomation

測試Webhook觸發器

您現在已經設定好了Slack應用和Webhook觸發器。是时候來測試它們的互動性了。

1. 在您的n8n工作流中,點擊“Listen for Test Event”按鈕。這樣做將使Webhook觸發器開始收听Slack應用應該發送的請求。

2. 然後,在你嘅開發環境Slack頻道中,发出/newcert命令。一经執行,你應該會喺n8n中见到webhook節點收到请求。

留意到它下方包含了頻道名稱同用戶ID喺请求中。這會讓我們可以看到呢個證書係咪對於某個開發環境,以及係咪由某個用戶所請求。

如果一切顺利进行,你應該會见到 default JSON response 告訴你 workflow 已經收到該請求並開始了 workflow。

設定 AWS 訪問權限

n8n 需要通過 AWS 來創建新證書。要做到这一点,需要一個具有適當權限的 IAM 用戶。由於在本次教學中我们从零開始,以下你会找到通過AWS CLI快速設定這個 IAM 用戶嘅方法。

如果你仲未有一個 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

## 創建訪問密钥 ID 和私密访问密钥
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

## 讀取後續工作流程中需要的訪問密钥 ID 和私密
Get-Content ./certificate_manager_credentials.txt

此代碼使用 AWS CLI 執行各種任務:

1. 策略創建:創建 IAM 策略,精確地定義允許進行哪些憑證相關操作:

– 查看憑證詳細信息

– 列印憑證

– 找回憑證數據

– 創建新憑證

– 为憑證添加标签

2. 用戶創建:創建一個專用的 IAM 用戶名“CertificateManager”,將专门用於憑證管理任務

3. 訪問密钥生成:為新用戶創建訪問密钥對(訪問密钥 ID 和私密訪問密钥)並將它們保存到文件中

4. 策略附加:創建 IAM 策略並將其附加到新用戶,僅授予他們政策中定義的特定憑證管理權限

5. 使用 PowerShell Get-Content 命令讀取含有訪問密钥和私密內容的文本文件。

此方法遵循安全性最佳實踐:

  • 使用最小权限原則(僅授予以必要權限)
  • 建立專用用戶用於证书管理
  • 將凭证從管理員帳號中分離

注意:在生產環境中,您希望將生成的凭证安全地存儲,而不是在明文文件中。考慮使用AWS Secrets Manager或其他安全的凭证存儲解決方案。

設定n8n工作流程AWS凭证

當我們到达那一步時,工作流程必須能夠通過AWS证书管理員進行认证以發送新憑證。n8n使用凭证來實現這一目標。要創建新的AWS凭证

1. 在您的工作區中,點擊屏幕頂部的凭证並點擊添加凭证

2. 指定AWS作為凭证類型。

3. 供給早先從AWS CLI命令中生成的訪問密钥和私密访问密钥。

n8n有一個很好的功能,當您保存凭证時會自動測試凭证,因此您會立即知道凭证是否正常工作。

創建HTTP請求節點

雖然 n8n 對於 AWS 憑證管理器 服務有支持,但它目前不支援創建新憑證,所以你不必灰心!你可以使用通用 HTTP 請求節點。這個節點讓你可以發送通用的 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 請求節點,首先,定義所有 AWS API 所需要的參數。這些是:

URL – 你正在工作的 API 端點

認證 – 使用 預定義憑證類型 以充分利用先前創建的憑證。

憑證類型AWS

AWS – 先前創建的 AWS 憑證。

傳送頭 – 你需要 X-Amz-Target 頭以告訴 API 你想使用哪個操作;在這個情況下是 CertificateManager.RequestCertificate

體內容類型application/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請求節點。如果一切正常,你應該看到AWS的JSON响应,包括憑證ARN。

創建Slack節點

到此階段,你在這個簡單的n8n工作流程中已經完成了三個節點中的兩個:Slack的webhook觸發器和將對AWS進行API請求的HTTP請求節點。最後一個節點是Slack節點,它將向用戶发起回应信息。

1. 打開節點面板,點擊加號按鈕在工作流程中創建新的Slack節點。

2. 搜索Slack,並選擇發送消息動作。

3. 接下來,點選凭证以连线並選擇创建新的凭证以创建一個類似AWS凭证的Slack凭证。一旦您设置了凭证,您可以在Slack节点中使用它。

4. 为Slack节点提供适当的参数:

  • 资源消息(发送频道消息)
  • 操作发送
  • 发送消息至频道
  • 频道按名称。 您可以再次使用表达式编辑器并拖动webhook触发器的channel_name属性以使用动态表达式。
  • 消息文本 – 在此场景中,工作流将把从AWS收到的证书ARN返回给开发者在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命令。哇,工作流应该无缝执行!

你现在應該有一個用於開發環境的憑證,並且已經有請求歷史, Developer 們也因而 happier, 例如,接近新的憑證!

為什麼這很重要

想一想我們剛才建立的东西:

  • 消除了票證系統的中介
  • 將憑證請求時間從幾天減少到幾秒
  • 自動化文件(AWS標籤)
  • 讓 Developer 們更開心(無價之宝)

這篇部落格文章只涵盖了一個任務:建立 workflow。現在它可以無限量地執行,節省無窮的小時!

最棒的是?這只是開始。你可以將此 workflow 擴展以處理不同類型的憑證,為生產環境添加批准,甚至自動化憑證續期通知。

查看预先构建的模板

n8n 提供数百個像這個 workflow 這樣的预先建造模板。這些模板讓你可以省略我們剛才處理的過程,以便利用由 n8n 建造和測試的 workflow。

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

結論

n8n 讓這種 workflow 的自動化變得极易於。我們將一個通常需要多個系統、人多以及耐心等級的东西,轉化為一個單一的 Slack 命令。

想要自己試試看嗎?基本版本的 n8n 是免费的,您可能還會發現,以这种方式設定比旧方法處理单个证书请求还要快。您的开发者會感謝您,而且您還能減少一個行政头疼問題。

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