Dev&Ops/DevOps

[Automation] AWS User 생성 알림 자동화(1)

zeroneCoder 2022. 1. 29. 20:39

안녕하세요! zerone-code입니다.

 

요즘 Cloud를 많이 사용하게 되면서 AWSAzure와 같은 Cloud Service를 많이 사용하고 있습니다.

 

제가 속해있는 조직에서는 AWS를 아주 다양하게 사용하고 있는데요,

 

이번 글에서는 인프라 자동화와 관련된 글로 최근에 구현한 AWS의 여러 서비스를 이용해 User 생성 알림 자동화에 대해 다뤄보고자 합니다.

 

어떤 부분 때문에 자동화를 하고자 했으며, 어떤 구조로 구현했는지에 대해 말해보고자 합니다. 

 

이 글을 읽으시는 분들은 완벽히 이해하고 가셨으면 좋겠습니다 :)

 

** 글을 읽기 전에 앞서서 TerraformAWS 리소스에 대해 알고 읽으시면 더 쉽게 이해가 됩니다.

 

Why Automation?

제가 속해있는 조직에서는 AWSTerraform을 이용해서 사용자들에게 E-mail의 형태로 AWS계정을 만들어주고, 이를 사용자에게 메일이나 Slack을 이용해 알려주는 프로세스를 갖추고 있습니다.

이 프로세스의 과정에서 크게 두 가지 문제점을 발견했고, 이를 자동화로 풀고자 했습니다.

 

1. 커뮤니케이션 비용이 크게 발생한다는 점입니다.
계정이 생성될때마다 해당 정보로 메시지를 만들고 각각의 사용자와 커뮤니케이션해야 합니다.

이 과정에서 새로운 사용자들이 많이 들어오면 이를 처리하고, 커뮤니케이션을 해야 하는 비용이 크게 발생하게 됩니다.

2. 계정 정보를 전달해주는 과정이 자동화되어 있지 않아 휴먼 에러가 발생할 확률이 크다는 점입니다.
콘솔에 만들어진 Password를 잘못 전달하는 경우 Reset에 대한 재요청을 받게 되면 이 요청을 처리하는 과정이 다시 걸리게 됩니다.

 

위에서 언급한 두 가지 문제점을 해결하기 위해 생각한 순서는 다음과 같습니다.

  1. 사용자(User)로부터 계정 생성 요청이 들어오면
  2. 관리자(Admin)가 Terraform을 이용해 User 리소스를 만들고
  3. 이를 감지해서 사용자 계정에 Password를 설정하고 이를 메일로 보낸다.

위의 순서로 구성한 Architecture은 아래에서 좀 더 자세히 설명하도록 하겠습니다.

Architecture

이 과정에서 사용된 AWS 서비스는 총 5가지입니다.

  • IAM (AWS Identity and Access Management)
  • EventBridge (AWS EventBridge)
  • SNS (AWS Simple Notification Service)
  • Lambda (AWS Lambda)
  • SES (AWS Simple Email Service)

전체적인 Architecture는 위의 그림과 같습니다.

 

동작하는 과정을 살펴보기 전에 Terraform으로 AWS 리소스를 생성하게 되면 해당 기능에 맞는 AWS API가 호출된다는 것을 인지하시고 설명을 보시면 좋을 것 같습니다.

 

Architecture가 동작하기 전에 먼저 선행되어야 할 5가지 조건을 짚고 넘어가겠습니다.

  • SES에서 메일을 보낼 도메인이 미리 Verify & Production request가 돼있어야 합니다.
  • SNS는 Topic과 Subscription을 만들어둬야 한다.
  • SNS Subscription에서는 동작할 Lambda를 Target으로 설정해놓는다.
  • EventBridge에서는 CreateUser라는 API가 호출되면 SNS의 Topic으로 알려주도록  Rule을 등록한다.

 

위의 4가지 조건을 만족한 상태에서 Architecture의 동작 순서는 아래와 같습니다.

  1. Terraform으로 User 리소스를 생성하게 되면 AWS 내부적으로는 CreateUser라는 API가 호출됩니다.
  2. EventBridge는 CreateUser가 호출된 것을 감지하여 SNS의 Target Topic으로 알려준다.
  3. SNS의 Topic에 알림이 오면 Subscription이 동작하여 Lambda가 동작한다.
  4. Lambda는 내부적으로 AWS API를 호출하여 사용자 계정에 Password를 무작위로 생성해 사용자 계정의 LoginProfile을 생성한다.
  5. 그리고 생성한 이후, Lambda에서 SES의 API를 호출하여 사용자 메일로 생성된 계정 정보와 Password를 보낸다.

위 5가지 과정으로 사용자로부터 계정 생성 요청이 오면 계정을 생성하고 자동으로 사용자 메일로 알려주는 자동화를 구축했습니다.

 

지금까지 Architecture에 대한 설명이었으며, 다음 글에서는 구현한 코드와 더불어 설명으로 돌아오겠습니다.

 

잘 읽으셨다면 많은 공감 부탁드립니다!

 

Reference

Terraform AWS IAM User: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_user

Serverless Resource: https://www.serverless.com/framework/docs/providers/aws/guide/resources

Serverless EventBridge: https://www.serverless.com/blog/eventbridge-use-cases-and-tutorial/

AWS EventBridge: https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-use-sam.html

Send Mail using AWS SDK: https://docs.aws.amazon.com/ko_kr/ses/latest/dg/send-an-email-using-sdk-programmatically.html