开发者请求AWS证书就像青少年请求车钥匙一样——有很多等待、文书工作和交叉手指。如果你厌倦了扮演证书看门人的角色,或者是被困在工单地狱的开发者。
让我们将这个令人头疼的证书请求过程变成一个简单的Slack命令,使用n8n,一个直观的工作流自动化工具,让你的开发者惊呼:“就这样?”
我们将从头到尾涵盖一个示例场景,不遗漏任何细节,以向你展示n8n工作流自动化工具如何为繁忙的开发者和管理者节省无数加班时间。
当前的证书请求舞蹈
想象一下这个过于熟悉的场景:一名开发者需要一个新的AWS证书用于他们的开发环境。通常的过程如下:
- 开发者提交了一个足够长的工单,足以写成一本小说
- 工单在队列中待着,同时开发者焦急地刷新他们的收件箱
- 审批者在47个其他紧急请求之间终于看到这个工单
- 所需信息缺失了一半(显然)
- 来回的邮件像一场痛苦的乒乓球比赛一样进行
- 审批者登录AWS控制台(在找到他们的2FA设备后)
- 手动创建证书
- 开发者终于得到证书详情……也许
- 每个人都失去了一部分灵魂
听起来熟悉吗?我想是的。让我们解决这个问题。
梦想:Slack命令 → 即时证书
如果你的开发者只需在开发环境的Slack频道中输入/newcert
,几秒钟内就能得到AWS证书ARN,那会怎样?不需要工单,不需要等待,没有令人沮丧的来回沟通。这正是我们在构建的。
在这个场景中,你是一个使用Slack进行沟通的组织中的开发者。你为每个开发环境创建了一个Slack频道,以保持对话的组织性。
我们的自动化工作流将如何运作:
- 开发者在他们环境的Slack频道中输入
/newcert
- n8n工作流收到带有频道上下文的请求
- 工作流在AWS中创建证书
- 证书ARN出现在同一个Slack频道中
这就完成了。四个步骤,而不是九个步骤,零等待人类做人类的事情!
由于我们不会忽视细节,这篇文章不仅仅是告诉你n8n可以自动化这个过程,而是我会展示给你看(我从零开始自己做的)。
n8n使用工作流将任务用节点连接起来。这些工作流可以被执行,触发工作流中的所有节点自动化简单到复杂的过程。
如果你对设置这个工作流感兴趣,或者想了解如何设置一个n8n工作流,请继续阅读!
首先:Webhook触发器
打开您的n8n实例,让我们从一个空白画布开始:
1. 创建一个新工作流。下面,您将看到一个新的n8n工作流的空白画布,准备设置第一个触发器节点。

2. 接下来,添加一个webhook 触发器节点。webhook触发器节点是Slack与此工作流进行通信的方式,通知工作流何时向AWS发出请求来创建新的证书。

您可以从上面的截图中看到,webhook触发器节点将监听POST HTTP请求。
3. 配置它以接收来自Slack的POST请求
这个webhook将是我们的前门 – 当有人使用我们的/newcert
命令时,Slack会敲响这里。
创建Slack App
是时候设置Slack端的内容了。您需要一个Slack应用,让用户可以在频道中使用斜杠命令(/newcert
)。Slack应用还将作为n8n向Slack进行身份验证以返回消息的方式。
1. 在Slack应用屏幕上,点击创建新应用,您可以提供一个名称。

2. 接下来,设置范围以能够发出斜杠命令并将消息发送回频道。您需要
– channels:read
– chat:write
– commands

3. 接下来,设置一个斜杠命令。斜杠命令允许用户通过斜杠后跟一些命令向您的Slack应用发出命令。在这种情况下,命令将是/newcert
用于生成新的AWS证书。
在您的应用设置中,转到“斜杠命令”并单击“创建新命令”

4. 将应用安装到您的工作区。一旦您设置了范围和斜杠命令。

5. 最后,邀请机器人(您刚刚创建的应用程序)加入Slack频道以便使用。在这种情况下,频道将是开发环境的名称qa-1。
/invite @devenvironmentautomation
测试Webhook触发器
您现在已经配置了Slack应用程序和Webhook触发器。是时候测试它们的交互性了。
1. 在您的n8n工作流程中,单击“监听测试事件”按钮。这样做将允许Webhook触发器开始监听Slack应用程序应发送的请求。

2. 接下来,在您的开发环境Slack频道中,输入斜杠命令/newcert
。一旦您这样做,您应该看到n8n中的webhook节点接收到该请求。
请注意,它在请求中包括了频道名称和用户ID。这将允许我们了解此证书是为哪个开发环境以及是哪个用户请求的。

如果一切顺利,您应该看到默认的JSON响应,告诉您工作流已接收到请求并启动了工作流。

设置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. 用户创建:创建一个名为“CertificateManager”的专用IAM用户,该用户将专门用于证书管理任务
3. 访问密钥生成:为新生成访问密钥对(访问密钥ID和秘密访问密钥)并将它们保存到文件中
4. 策略附加:创建IAM策略并将它附加到新用户,只授予他们政策中定义的具体证书管理权限
5. 使用PowerShell的Get-Content
命令读取包含访问密钥和您需要提供给工作流的秘密的文本文件。
这遵循了安全最佳实践:
- 使用最小权限原则(只授予必要的权限)
- 创建专用用户用于证书管理
- 将凭据与管理员账户分开
注意:在生产环境中,您需要安全存储生成的凭据,而不是以明文文件形式存储。考虑使用 AWS Secrets Manager 或其他安全的秘密存储解决方案。
设置 n8n 工作流 AWS 凭据
当我们到达那一步时,工作流必须能够对 AWS Certificate Manager 进行身份验证以签发新证书。n8n 使用 凭据 来实现这一点。要创建新的 AWS 凭据:
1. 在您的工作区中,点击屏幕顶部的 凭据,然后点击 添加凭据。

2. 指定 AWS 作为凭据类型。

3. 提供之前从 AWS CLI 命令生成的访问密钥和秘密访问密钥。

n8n 有一个很不错的功能,可以在您保存凭据时自动测试它,这样您就可以立即知道凭据是否有效。

创建 HTTP 请求节点
尽管n8n确实支持AWS证书管理器服务,但目前不支持创建新证书,所以你还有办法!你可以使用通用的HTTP请求节点。此节点允许您向当前不受支持的API操作发出通用的HTTP请求。
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标签,并设置来自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,在包含Slack频道名的API请求中(在这个场景中是开发环境名称)。
[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 节点提供适当的参数:
- 资源 – 消息(发送频道消息)
- 操作 – 发送
- 发送消息到 – 频道
- 频道 – 通过名称。 你可以再次使用表达式编辑器,并将 channel_name 属性从 webhook 触发器拖动以使用动态表达式。
- 消息文本 – 在这种情况下,工作流将把从 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
命令。瞧,工作流应该无缝执行!

您现在应该拥有一个明确标记为将要使用的开发环境的证书、请求的历史记录,以及更快乐的开发人员,例如,访问新证书的权限!
为什么这很重要
想想我们刚刚建立的内容:
- 消除了工单系统的中介
- 将证书请求时间从几天减少到几秒
- 自动化文档(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/