APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

【CloudTrail to Slack】Webhooksの設定

はじめに

こんにちは、クラウド事業部の清水です。

プロダクト開発の中でCloudTrailのイベントをSlackに通知する仕組みを作りました。
今回はイベントは「AWSアカウント作成通知」受け取り先は「Slack」をベースにしてますが
トリガーを置き換えることで、汎用的に使えると思ったので記事に残させていただきます

目次

どんなひとに読んで欲しい

  • CloudTrailイベント通知を受け取りたい人
  • Webhooksの設定に困っている人

関連記事

※プロダクト紹介記事
techblog.ap-com.co.jp

※EventBrdigeの設定
techblog.ap-com.co.jp

※プロダクト構築手順の1例
techblog.ap-com.co.jp

AWSアカウント作成通知ツール: 環境構築手順

前提条件

以下の前提を満たす必要があります。

  • AWSアカウントを所有している
  • AWS Organizationを作成している
  • Slackを利用している

環境構成図

環境構築手順

0. 環境構築準備

  • AWSマネジメントコンソールにログインしてください。
  • 画面左下の CloudShell を選択し、AWS Cloud Shellを起動してください。
  • AWS Cloud Shell画面右上の Actions を選択し、 Upload files を選択してください。
  • slack-account-notification-create.zip を選択し、ファイルをアップロードしてください。
  • アップロード完了後、以下のコマンドを実行し、Zipファイルを解凍してください。
$ unzip slack-account-notification-create.zip

1. Slackの設定

  • Basic Information 画面が表示されたら、画面左メニュー Incoming Webhooks を選択してください。

  • Activate Incoming Webhooks 画面が表示されたら、off をクリックしてください。

  • offon に切り替わり下に表示が追加されます。Add New Webhook to Workspace をクリックしてください。

  • 権限リクエスト 画面が表示されたら、通知先のチャンネルを選択し、許可する をクリックしてください。

  • Activate Incoming Webhooks 画面が表示されたら、最下部に Webhook URL にある Copy をクリックしてURLをメモしておいてください。

2. Lambda関数の作成

AWS Cloud Shell環境にアクセスし、以下のコマンドを実行してください。

  • 手順に記載している各種テンプレートやソースは以下アンケートにお答え頂けるとダウンロードできる仕様となります。
    よろしかったらお試しください。

www.ap-com.co.jp

# 作業ディレクトリに移動
$ cd <解凍したフォルダ名>

# lambdaの編集(項番1でコピーしたURLを入力してください)
$ WEB_HOOK="コピーしたURL"

# 入力したURLが表示されることを確認してください
$ echo $WEB_HOOK

# 取得したURLに置換します
$ sed -ie "s#Edit_Web_Hook_Url#$WEB_HOOK#" source/slack-account-notification-create-excute-handler.py

# 置換されていることを確認します
$ grep $WEB_HOOK source/slack-account-notification-create-excute-handler.py
    url = "<置換したURL>"
$ 

# 一時的に使用するAmazon S3バケットを作成します
$ BUCKET_NAME_1=`date "+%Y%m%d-%H%M%S"`
$ aws s3api create-bucket --region us-east-1 --bucket ${BUCKET_NAME_1}

# 1つ目のLambda関数を作成します
$ STACK_NAME_1=account-notification-create-request-lambda-01
$ aws cloudformation package --region us-east-1 --s3-bucket ${BUCKET_NAME_1} \
    --template-file template/slack-account-notification-create-excute-handler.yaml \
    --output-template-file template/slack-account-notification-create-excute-handler-packaged.yaml
$ aws cloudformation deploy --region us-east-1 --stack-name ${STACK_NAME_1} \
    --template-file template/slack-account-notification-create-excute-handler-packaged.yaml \
    --capabilities CAPABILITY_IAM

# 次の工程で利用するため、以下のコマンドを実行し、Lambda関数のARNをシェル変数に設定してください。

$ Lambda_ARN=$(aws lambda get-function --region us-east-1\
    --function-name slack-account-notification-create-excute-handler \
    --query "Configuration.FunctionArn" \
    --output text)
$ echo $Lambda_ARN

3. EventBrigeルールの作成

# EventBrigeルールを作成します。出力されるARNをコピーしてください
$ aws events put-rule --region us-east-1 --name "slack-notification-account-create-event" --state ENABLED --event-pattern file://slack-notification-account-create-event.json

# EventBrigeルールとSNSトピックを関連付けます。
$ aws events put-targets --region us-east-1 --rule "slack-notification-account-create-event" --targets '[{"Id":"1","Arn":"'"$Lambda_ARN"'"}]'

# Lambda側からもターゲット登録します。
$ aws lambda add-permission  --region us-east-1 --function-name $Lambda_ARN --statement-id event-enable --action 'lambda:InvokeFunction' --principal events.amazonaws.com --source-arn <EventBrigeルールのARNを入力してください>

5. 動作確認

  • slackのチャンネルに作成が完了したアカウントの情報が通知される事を確認してください。

おわりに

Webhooksアイデア次第では色々できそうですね!
今後も通知の手段として考えてみようと思いました!

お知らせ

APCはAWS Advanced Tier Services(アドバンストティアサービスパートナー)認定を受けております。


その中で私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
www.ap-com.co.jp

https://www.ap-com.co.jp/service/utilize-aws/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: y-shimizu
AWSをメインにインフラ系のご支援を担当しています。 https://www.credly.com/users/giiiiiyu777/badges