일에서 초로: n8n과 Slack을 사용한 AWS 인증서 요청 자동화

開発者がAWS証明書を要求することは、10代の子供が車の鍵を求めるようなものです。待つ時間が多く、書類が多いこと、指を交えて祈ることが多いです。証明書ゲートキーパーを遊び、またはチケットの浄化的に立ちっぱなしになっている開発者がいると疲れている場合は、

私の作成したデリミターn8nを使用して、証明書要求プロセスを簡単なスラックコマンドに変えましょう。これは開発者が「それでは?」と言う intuitive workflow automation toolです。

私たちはAからZまでの詳細に注意を払い、いくつかの例を紹介して、n8n workflow automation toolが忙しい開発者やマネージャーに時間の無駄を省くことができることを示します。

現在の証明書要求ダンス

開発者が新しいAWS証明書を開発環境に必要としているというすぐに知ることができるシナリオを考えてください。これは通常どのように進行するかを以下に示します。

  1. 開発者は小説の量の文でチケットを提出します。
  2. チケットは開発者がストレスながらインボックスを更新する間、キューに入ります。
  3. 承認者は47の他の緊急要求の中でチケットを見つけるまで待ちます。
  4. 必要な情報の半分が欠けていること(当然です)
  5. 電子メールのやり取りが、痛ましいピングポンのゲームのように始まります。
  6. 承認者は2FAデバイスを見つけた後、AWSコンソールにログインします。
  7. 手動で証明書を作成します。
  8. 開発者は証明書の詳細を最終的に入手します…おそらくは。
  9. 모두가 조금씩 영혼을 잃습니다

익숙한 소리인가요? 그렇다면 이 문제를 해결해 봅시다.

꿈: 슬랙 명령어 → 즉각적인 인증서

개발자가 단지 개발 환경의 슬랙 채널에 /newcert를 입력하고, AWS 인증서 ARN을 몇 초 만에 받을 수 있다면 어떨까요? 티켓도 없고, 대기도 없고, 영혼을 갉아먹는 번거로운 절차도 없습니다. 바로 우리가 만들고 있는 것입니다.

이 시나리오에서 당신은 슬랙을 커뮤니케이션 도구로 사용하는 조직의 개발자입니다. 대화를 정리하기 위해 각 개발 환경에 슬랙 채널을 만들었습니다.

우리의 자동화된 워크플로우가 작동하는 방식은 다음과 같습니다:

  1. 개발자가 자신의 환경의 슬랙 채널에 /newcert를 입력합니다
  2. n8n 워크플로우가 채널 컨텍스트와 함께 요청을 수신합니다
  3. 워크플로우가 AWS에서 인증서를 생성합니다
  4. 인증서 ARN이 같은 슬랙 채널에 나타납니다

그게 전부입니다. 아홉 단계 대신 네 단계, 그리고 사람이 해야 할 일을 기다릴 필요가 없습니다!

세부 사항을 아끼지 않기 때문에, 이 글에서는 n8n이 이 프로세스를 자동화할 수 있다는 것만 말하는 것이 아니라 (제가 처음부터 직접 해냈습니다!) 보여드리겠습니다.

n8n은 노드를 사용하여 작업을 연결하는 워크플로우를 사용합니다. 그런 다음 이 워크플로우를 실행하여 간단한 프로세스에서 복잡한 프로세스를 자동화할 수 있습니다.

이 워크플로우를 설정하는 방법이나 n8n 워크플로우를 설정하는 방법에 관심이 있다면 계속 읽어보세요!

먼저: 웹훅 트리거

n8n 인스턴스를 열고 공백 캔버스로 시작하자:

1. 새로운 workflow를 생성합니다. 아래에서 새 n8n workflow의 공백 캔버스를 보며 첫 노드 트리거를 셋팅할 수 있습니다.

2. 다음으로 webhook 트리거 노드을 추가합니다. 웹훅 트리거 노드는 Slack이 이 workflow에게 새 인증서 생성 요청을 什么时候하는지 알려주기 위해 workflow와 통신하는 방법입니다.

上面的 스크린샷에서 웹훅 트리거 노드가 POST HTTP 요청을 듣는 것을 볼 수 있습니다.

3. Slackから POST 요청을 받기 위한 configure 합니다.

이 웹훅은 우리의 /newcert 명령을 사용하면서 어느 사용자가 들어올 것이며, workflow가 AWS로 새 인증서 생성 요청을 什么时候하는지 알려주는 것을 기다리고 있는 front door입니다.

Slack App 생성

이제 Slack 측의 것을 세우는 시간입니다. 사용자가 우리의 Slack app를 사용하여 슬ASH 명령 (/newcert)를 채널에서 발행할 수 있게 해야 합니다. Slack app은 n8n이 Slack로 돌아가 메시지를 돌려주는 것을 위한 것입니다.

1. Slack apps 화면에 도착하면 Create New App를 클릭하여 이름을 제공할 수 있는 곳을 찾아보세요.

2. 다음으로, Scopes를 설정하여 슬래시 명령을 실행하고 채널로 메시지를 보낼 수 있도록합니다. 다음이 필요합니다

channels:read

chat:write

commands

3. 다음으로, 슬래시 명령을 설정하십시오. 슬래시 명령을 사용하면 사용자가 슬래시 뒤에 명령을 입력하여 Slack 앱에 명령을 내릴 수 있습니다. 이 경우 명령은 /newcert가 될 것입니다. 새 AWS 인증서를 생성합니다.

앱의 설정에서 “슬래시 명령”으로 이동하고 “새 명령 만들기”를 클릭하십시오.

4. 앱을 워크스페이스에 설치하십시오. 스코프와 슬래시 명령을 설정한 후입니다.

5. 마지막으로, 봇(방금 만든 응용 프로그램)을 Slack 채널에 초대하여 작업하도록합니다. 이 경우 채널은 개발 환경의 이름인 qa-1이 될 것입니다.

/invite @devenvironmentautomation

웹훅 트리거 테스트

지금은 Slack 앱과 웹훅 트리거가 구성되어 있습니다. 상호 작용을 테스트할 시간입니다.

1. n8n 워크플로에서 “테스트 이벤트 대기” 버튼을 클릭하십시오. 이렇게 하면 웹훅 트리거가 Slack 앱이 보내야 하는 요청을 수신하기 시작합니다.

다음으로, 개발 환경 Slack 채널에서 슬래시 명령어 /newcert을 실행하십시오. 그러면 n8n에서 요청을 받는 웹훅 노드가 표시됩니다.

아래에는 요청에 채널 이름과 사용자 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

## 액세스 키 아이디와 시크릿 액세스 키 생성
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

## 나중에  workflow에 필요한 액세스 키 아이디와 시크릿을 읽음
Get-Content ./certificate_manager_credentials.txt

이 코드는 AWS CLI를 사용하여 다양한 작업을 수행합니다:

1. 정책 생성: 정확히 어떤 cerificate-related 행동을 허용하는 지 정의하는 IAM 정책을 생성합니다:

– cerificate 세부 정보 보기

– cerificate를 列出

– cerificate 데이터 가져오기

– 새 cerificate 생성

– cerificate에 태그 추가

2. 사용자 생성: “CertificateManager”라는 dedication IAM 사용자를 생성하여 cerificate 관리 작업에만 사용할 것이라고 명시적으로 사용합니다

3. 액세스 키 생성: 새 사용자에 대한 액세스 키 쌍(Access Key ID와 Secret Access Key)을 생성하고 그들을 파일에 저장합니다

4. 정책 연결: IAM 정책을 생성하고 새 사용자에게 그들이 정책에 정의된 特定的 cerificate management 권한밖에 안 가지는 것을 허가합니다

5. PowerShell Get-Content 명령을 사용하여 나중에 workflow에 제공할 때 필요한 액세스 키와 시크릿을 읽는 팩tual을 사용합니다

이 것은 다음과 같은 보안 가장 좋은 惯例을 따르는 것입니다:

  • 가장 작은 권한 원칙(필요한 권한만 허용)을 사용합니다.
  • 인증서 관리를 위한 전용 사용자 생성
  • 관리 계정과 자격 증명 분리

참고: 프로덕션 환경에서는 생성된 자격 증명을 일반 텍스트 파일이 아닌 안전하게 저장해야 합니다. AWS Secrets Manager 또는 다른 안전한 비밀 저장 솔루션을 사용하는 것을 고려하세요.

n8n 워크플로우 AWS 자격 증명 설정

이 단계에 도달했을 때, 워크플로우는 새로운 인증서를 발급하기 위해 AWS Certificate Manager에 인증할 수 있어야 합니다. n8n은 이를 위해 자격 증명을 사용합니다. 새로운 AWS 자격 증명을 생성하려면:

1. 작업 공간에서 화면 상단의 자격 증명을 클릭하고 자격 증명 추가를 클릭합니다.

2. 자격 증명 유형으로 AWS를 지정합니다.

3. 이전에 생성된 AWS CLI 명령에서 접근 키와 비밀 접근 키를 제공합니다.

n8n은 자격 증명을 저장할 때 자동으로 테스트하는 멋진 기능이 있어, 자격 증명이 작동하는지 즉시 알 수 있습니다.

HTTP 요청 노드 생성

AWS cerfiticate Manager 서비스에 대한 n8n의 지원이 있지만, 현재 새로운 cerfiticate를 생성하는 지원이 없기 때문에 도움이 안 와요! 일반 HTTP 요청 노드를 사용할 수 있어요. 이 노드는 지원하지 않는 API operatioin에 대한 일반 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 Request node를 생성하기 전에, AWS API가 요구하는 모든 paramter를 정의해야 해요. 그것은:

URL – 작업하고 있는 region의 API endpoint

Authentication – 이전에 생성한 凭据을 利用하기 위해 Predefined Credential Type을 사용하세요.

Credential TypeAWS

AWS – 이전에 생성한 AWS 凭据

Send Headers – API에게 사용하고자 하는 operatioin을 알리기 위해 X-Amz-Target header가 필요해요; 이 경우에는 CertificateManager.RequestCertificate를 사용합니다.

Body Content Typeapplication/x-amz-json-1.1

2. 다음으로, HTTP body를 설정합시다. dev 환경 이름을 이용해 API request를 생성하는 중요한 단계입니다. 이 경우에는 AWS tag를 이름과 함께 인가하고 Slack request로부터 받은 환경 이름의 값을 설정합니다.Environment

이 任务에 대한 동적 입력 또는 표현가 필요합니다. 표현obyekt 필드에 클릭하면, 입력이 함수 텍스트로 변경되는 것을 볼 수 있습니다.

3. obyekt 필드의 우하단 왼쪽 角에 있는 확장 아이콘을 클릭하면, 直観적인 에디터를 얻을 수 있습니다.

HTTP obyekt 값은 JSON로 需要되ます. 이 곳에서는 내 하나의 도메인 이름을 사용하고, DNS를 통해 Cerfiticate를 검증합니다.

아래에서 볼 수 있듯이, Slackから 受信한 값을 이를 표현에 끌어가면 태그 값을 포함할 수 있습니다.

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

이제 값은 {{ $('Webhook').item.json.body.channel_name }}이며, 이 변수는 Slack 채널 이름(이 상황에서는 dev 환경 이름)을 포함하는 API 요청으로 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 응답을 보실 수 있습니다.( cerfiticate ARN也包括在内)

Slack Node를 생성하십시오.

이제, 이 간단한 n8n workflow에서 세 노드 中的 두 노드를 완료했습니다: Slack에 대한 웹훅 트리거와 API 요청을 하는 HTTP 요청 노드입니다. 마지막 노드는 Slack 노드로, 사용자에게 응답 메시지를 시작합니다.

1. Nodes パネル을 개방하고 + 버튼을 클릭하여 workflow에 新的 Slack 노드를 생성하십시오.

2. Slack을 search하고 Send a message action을 선택하십시오.

3. 다음으로 凭证을 연결하기 위해 클릭하여 새 凭证 생성을 선택하여 AWS 凭证과 유사한 Slack 凭证을 생성합니다. 凭证을 설정한 다음, Slack 노드에서 사용할 수 있습니다.

4. Slack 노드에 적절한 パラ미터를 제공하십시오:

  • ResourceMessage (채널 메시지를 送信するため)
  • OperationSend
  • Send Message ToChannel
  • ChannelBy Name. 다시 표현 编辑器를 사용하고 webhook 트리거から channel_name 속성을 끌어다 사용하여 동적 표현을 사용할 수 있습니다.
  • Message Text – 이 경우에는, workflow는 AWSから受け取った 인증서 ARN을 開発자에게 Slack 채널로 반환하ます. AWS는 JSON 문자열을 반환하기 때문에, 内置 expression 関数 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. Test step를 클릭하면, 기originating Slack channel에 메시지가 도착해야 합니다!

Test The Workflow

이 때, 세 노드를 가진 workflow을 갖추어야 합니다. workflow을 모두 시험해봐야 합니다!

Test Workflow를 클릭하면, n8n가 트리거를 기다리는 것을 볼 수 있습니다.

dev environment Slack channel에서 /newcert 명령을 発行하십시오. voila, workflow이 暢快하게 실행되는 것을 볼 수 있습니다!

이제 開発環境에 사용되는 Cerfiticate에 명확하게 태그되어 있으며, 사용자의 이력이 있는 것과 개발자들의 행복도가 많이 좋아졌습니다.

이것이 왜 중요한지

우리가 지금 만든 것을 생각해 보세요:

  • 티켓 시스템 중개자를 제거하였습니다.
  • Cerfiticate 요청 시간을 일에서 초로 줄였습니다.
  • 자동 문서화(AWS 태그)
  • 개발자들의 행복도를 더 많이 없어 javascript에서 가치를 주는 것과 같습니다.

이 部落格 글은 오직 하나의 태스크인 workflow를 빌이었습니다. 이제 이 workflow를 제한 없이 실행할 수 있습니다. Countless hours를 절약하는 것입니다!

그리고 가장 좋은 부분은? 이는 시작뿐입니다. 이 workflow를 다른 Cerfiticate 유형을 처리하거나, 프로 환경에서 승인을 추가하거나, Cerfitificate 갱신 알림을 자동화하는 것을 확장할 수 있습니다.

Pre-Built Templates을 확인하세요

n8n는 이 workflow과 같은 数百의 pre-built templates를 제공합니다. 이 templates는 우리가 다루었던 과정을 짧게 abbreviate하여 n8n에서 built and tested된 workflows를 utility하는 것을 허용합니다.

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

결론

n8n는 이러한 workflows를 자동화하는 것을 어렵게 하지 않습니다. 일반적으로 여러 시스템, 사람, 그리고 기다리는 수준을 포함하는 process를 한 Slack command으로 변경했습니다.

자신이 해봐? 기본 n8n 버전은 무료이며, 이전 방식의 單一 cerificate request 처리보다 더 빨라요. 開発자는 감사 할 것이고, 관리적인 앵CHARACTER이 하나 줄어들게요.

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