日数から秒単位へ:n8nとSlackを使用してAWS証明書リクエストを自動化する

開発者がAWS証明書を求めるのは、ティーンエイジャーが車の鍵を求めるようなものです。待機、書類作成、そして祈るような気持ちが伴います。もし、証明書のゲートキーパーとしての役割に疲れた、またはチケットの煉獄に閉じ込められた開発者であれば、

その頭が痛くなるような証明書リクエストプロセスを、n8n、直感的なワークフロー自動化ツールを使ってシンプルなSlackコマンドに変えましょう。開発者たちは「これだけ?」と言うことでしょう。

私たちは、詳細を省かずにAからZまでの例のシナリオをカバーし、n8nワークフロー自動化ツールが忙しい開発者やマネージャーの貴重な時間をどれだけ節約できるかを示します。

現在の証明書リクエストの流れ

おなじみのシナリオを思い描いてみてください:開発者が自分の開発環境のために新しいAWS証明書を必要としています。通常、こうなります:

  1. 開発者が小説を書くのに十分なテキストを含むチケットを提出する
  2. チケットはキューに留まり、開発者はストレスを抱えながら受信箱をリフレッシュし続ける
  3. 承認者は47件の他の緊急リクエストの間にチケットをやっと見る
  4. 必要な情報の半分が欠けている(明らかに)
  5. 痛みを伴うピンポンゲームのように、メールのやり取りが続く
  6. 承認者はAWSコンソールにログインする(2FAデバイスを見つけてから)
  7. 手動で証明書が作成される
  8. 開発者はついに証明書の詳細を受け取る…かもしれない
  9. 皆が少しずつ魂を失う

なんだか聞いたことがある?そう思った。これを修正しましょう。

夢:Slackコマンド → インスタント証明書

あなたの開発者が、開発環境のSlackチャンネルで/newcertと入力するだけで、数秒でAWS証明書のARNを取得できたらどうでしょうか?チケットも待ち時間もなく、鬱陶しいやりとりもありません。それが私たちが構築しているものです。

このシナリオでは、あなたはSlackをコミュニケーションに使用している組織の開発者です。会話を整理するために各開発環境用にSlackチャンネルを作成しました。

以下は、自動化されたワークフローの動作方法です:

  1. 開発者が環境のSlackチャンネルで/newcertと入力する
  2. n8nワークフローがチャンネルのコンテキストでリクエストを受け取る
  3. ワークフローがAWSで証明書を作成する
  4. 証明書のARNが同じSlackチャンネルに表示される

以上です。9つの手順ではなく4つの手順で、人間が人間らしいことをするのを待つ必要はありません!

細部を惜しまないので、この投稿ではn8nがこのプロセスを自動化できることだけでなく、実際に手を動かして示します。

n8nはノードを使用してタスクを結びつけるワークフローを作成します。これらのワークフローは実行され、ワークフロー内のすべてのノードをトリガーして、シンプルから複雑なプロセスを自動化します。

このワークフローの設定方法や、n8nワークフローの設定方法を学びたい方は、引き続き読んでください!

最初に:Webhookトリガー

n8nのインスタンスを開き、空のキャンバスから始めましょう:

1. 新しいワークフローを作成します。下に、新しいn8nワークフローの空のキャンバスが表示されており、最初のトリガーノードを設定します。

2. 次に、webhook trigger nodeを追加します。webhookトリガーノードは、Slackがこのワークフローに通知を行い、新しい証明書を作成するためにAWSにリクエストを発行する時間を知らせる方法です。

上のスクリーンショットから、webhookトリガーノードがPOST HTTP要求を侦听していることがわかります。

3. それをSlackからのPOST要求によって configure します

このwebhookは、私たちの/newcertコマンドを使用した時にSlackが叩かれる前门であるため、SlackがこのワークフローにノックをしたときにAWSに新しい証明書を作成するリクエストを発行する時間を知らせます。

Slackアプリの作成

今、Slack側の設定を行いましょう。ユーザーがチャネル内でSlack appを使用してスラッシュコマンド/newcert)を発行するために必要です。Slack appは、n8nがメッセージを返信するためにSlackに認証する方法としても使われます。

1. Slack appsの画面にある場合、Create New Appをクリックして名前を提供することができます。

2. 次に、Scopesを設定して、スラッシュコマンドを発行して、またチャンネルにメッセージを送信することができるようにします。以下

のように必要です。channels:read

chat:write

commands

3. 次に、スラッシュコマンドを設定します。スラッシュコマンドを使用すると、ユーザーはスラッシュを含んだコマンドを使用して、Slackアプリに対してコマンドを発行することができます。この場合、新しいAWS証明書を生成するためのコマンドは/newcertです。

アプリの設定で、「スラッシュコマンド」を選択して「新しいコマンド」を作成します。

4. アプリをワークスペースにインストールします。スコープとスラッシュコマンドを設定した後です。

5. 最後に、作成したアプリ(ボット)をqa-1という開発環境のチャンネルに招待します。

/invite @devenvironmentautomation

webhookトリガーのテスト

これで、Slackアプリとwebhookトリガーの設定が完了しました。次に、インタラクティビティのテストを行いましょう。

1. n8nのワークフローで、「Test Eventを侦听」のボタンをクリックします。これにより、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 Certificate Managerサービスをサポートしていますが、現在新しい証明書を作成することはサポートされていないため、運が悪いわけではありません!一般的な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資格情報。

送信ヘッダー – APIにどの操作を使用したいかを伝えるためにX-Amz-Targetヘッダーが必要です。この場合はCertificateManager.RequestCertificateです。

ボディコンテンツタイプapplication/x-amz-json-1.1

2. 次に、HTTPボディを設定します。これは、開発環境名を使用してAPIリクエストを行う上で重要なステップです。このシナリオでは、Slackリクエストから受け取った環境名の値を設定し、証明書にEnvironmentというAWSタグを割り当てています。

このタスクには動的な入力またはが必要です。Bodyフィールド内のをクリックしてください。入力が関数テキストに変わることがあります。

3. Bodyフィールドの右下隅の拡大アイコンをクリックして、直感的なエディタを取得します。

HTTPの本文はJSON形式でなければなりません。ここでは、私のドメイン名の一つを使用して、DNSを通じて証明書を検証しています。

以下にあるように、Slackから受け取った値をDrag&Dropすることで、タグの値を含めることができます。

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

{{ $('Webhook').item.json.body.channel_name }}となります。この変数は、AWS API要求に含まれ、Slackチャネル名(この場合は開発環境名)をAWSに渡すことになります。

[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. 最後に、Test stepをクリックしてHTTP要求ノードをテストしてください。すべてが正常に行われている場合、AWSからのJSON応答を見ることができます(証明書ARNを含む)。

Slack Nodeを作成

この簡単なn8nワークフローでは、Slackから呼び出しをトリガーとしてwebhookと、AWSにAPI要求を行うHTTP要求ノードを完了しました。最後のノードは、ユーザーに対する応答メッセージを発信するSlackノードです。

1. Nodesパネルを開き、 workflowに新しいSlack nodeを作成するためのプラスボタンをクリックしてください。

2. Slackを検索し、Send a messageアクションを選択してください。

3. 次に、Credential to connect withをクリックして、Create a New Credentialを選択してAWS Credentialに似たSlack証明書を作成します。証明書を設定した後、それをSlackノードで使用できます。

4. Slackノードに適切なパラメーターを提供します。

  • ResourceMessage (チャンネルにメッセージを送信する)
  • OperationSend
  • Send Message ToChannel
  • ChannelBy Name. 再度式编辑器を使用し、webhookトリガーからchannel_name属性を拖り出して動的な式を使用することができます。
  • Message Text – この場合、 workflowはAWSから受信した証明書ARNを開発者にSlackチャンネルに返信します。AWSはJSON文字列を返却しますので、JSONを解析するために組み込まれた式関数JSON.parseを使用し、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. Test stepをクリックして、元のSlackチャンネルはメッセージを受信するはずです!

Test The Workflow

この時点で、3つのノードを持つ workflowを作成したはずです。これで workflow全体をテストする時間です!

Test Workflowをクリックすると、n8nはトリガーを待機するようになります。

dev環境のSlackチャンネルに/newcertコマンドを発行します。すると、workflowを素早く実行することができます。

これにより、開発環境で使用する証明書に特定のタグがつけられ、要求の履歴、新しい証明書へのアクセスなど、開発者がより幸せになるための多くのことができます。

これが重要な理由

私たちがこれで構築したものについて考えてみてください。

  • チケットシステムの中間役割を取り除く
  • 証明書の要求時間を日数から秒数に短縮する
  • 自動化ドキュメント(AWS タグ)
  • 開発者を幸せにする(無価値)

このブログ記事では、 workflow の構築だけを扱っていました。これは今後無限回に渡って実行され、無数の時間を節約することができます。

また、最も良い所は、これが始まりです。この workflow を拡張して、異なる証明書タイプを処理する、プロダクト環境の承認を追加する、または証明書の更新通知を自動化することもできます。

Pre-Built Templates をご確認ください

n8n はこのような workflow を構築し、テストした pre-built テンプレートを提供しています。これらのテンプレートを使用すると、私たちがここで説明したプロセスを短縮することができます。

 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/