AWS Organizations でのアカウント新規作成を通知する

記事タイトルとURLをコピーする

SRE部佐竹です。
本日は、AWS Organizations の運用に関して記載をします。

はじめに

AWS Organizations については過去 SCP に関するブログを記載してきました。

blog.serverworks.co.jp

今回は、AWS Organizations で AWS アカウントを新規に払い出ししたときに、その通知を送りたいという要望に対応します。

背景

AWS Organizations で AWS アカウントを新規に払い出したとき、すぐにそれに気づきたいという要望があります。

AWS アカウントが発行された時、それが正常なものなのかすぐに確認したいということ。それに加えて、作成した AWS アカウントに対してすぐに後続処理をしたいため、となります。

というわけで今回は、CloudWatch Events を利用して AWS アカウントの新規作成時の通知を簡単に実装します。

全体像

以下に AWS 環境構成図として全体像を示します。

f:id:swx-satake:20201221171810p:plain

Region を US East (N. Virginia) に

AWS Organizations の履歴は US East (N. Virginia) に記録される決まりがあります。そのため、まずは Region を US East (N. Virginia) へと変更しましょう。

f:id:swx-satake:20201221161944p:plain

東京リージョンでは CloudTrail のコンソール一切表示がされない AWS Organizations の履歴も US East (N. Virginia) であれば上画像の通り閲覧可能です。

SNS Topic を作成する

f:id:swx-satake:20201221173449p:plain

CloudWatch Events の通知先に SNS を指定するため、先に SNS の Topic を作成します。

f:id:swx-satake:20201221165118p:plain

今回は Organizations-CreateAccount という名前の Topic を新規に作成しました。Subscriptions のメールアドレスは Slack のチャンネル投稿になっています。

なお、SNS の Email でサブスクリプションする場合は、以下のブログに記載する点にご注意ください。

blog.serverworks.co.jp

CloudWatch Events で Rule を作成する

f:id:swx-satake:20201221173548p:plain

Region US East (N. Virginia) のまま操作します。CloudWatch のマネジメントコンソールの左端メニューから Events を選択して進めます。

f:id:swx-satake:20201221173749p:plain

  1. Event pattern を選択します
  2. Build event pattern to match events by service を選択します
  3. サービス名に Organizations と入力検索し Organizations を選択します
  4. Event Type タイプは AWS API Call via CloudTrail を選択します
  5. Specific operation(s) には今回通知を行いたい CreateAccount と記載します

正しく入力すると Event Pattern Preview 配下の通りになります。

{
  "source": [
    "aws.organizations"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "organizations.amazonaws.com"
    ],
    "eventName": [
      "CreateAccount"
    ]
  }
}

f:id:swx-satake:20201221174241p:plain

画面右側、Targets には先ほど作成した SNS の Topic を選択します。Configure input は Matched event のままで問題ありません。

f:id:swx-satake:20201221174403p:plain

最後にルールに名前をつけます。今回は Organizations-CreateAccount としました。

f:id:swx-satake:20201221174504p:plain

ルールが無事に作成完了しました。

動作確認

今回、実際に CreateAccount を行うのはハードルが高いため CreateOrganizationalUnit で代理しました。OU(Organizational Unit) であれば容易に作成と削除が可能なためです。

ルールとして CreateOrganizationalUnit も合わせて通知されるようにルールを追加します。先ほど Specific operation(s) にて設定した CreateAccount の部分を CreateOrganizationalUnit に変更(もしくは追加)するだけで問題ありません。

f:id:swx-satake:20201221174659p:plain

上画像の通り設定した状態で、実際に CreateOrganizationalUnit を操作してみると以下の Notification が Slack に通知されました。

f:id:swx-satake:20201221174908p:plain

問題なくフックできてますね。

Chatbot の動作について

aws.amazon.com

上記の通り設定できる Chatbot ですが残念ながら現時点では AWS Organizations のイベントには対応しておりませんでした。

設定してみたところ以下のエラーとなりました。

Event received is not supported (see https://docs.aws.amazon.com/chatbot/latest/adminguide/related-services.html )

まとめ

f:id:swx-satake:20201221171810p:plain

今回のブログでは、AWS Organizations で AWS アカウントを新規に払い出したタイミングで通知を送る実装方法について記載しました。

実装方法は簡単で SNS と CloudWatch Events を設定するだけで、CloudTrail の API をフックして通知が可能です。ポイントはリージョンを US East (N. Virginia) とするところでしょうか。

今回は通知だけを目的にしたため SNS から Email を送信するのみでしたが、もちろんのこと SNS をトリガーにして AWS Lambda も発火可能です。うまく活用すればアカウント払い出し直後に自動的に OU に AWSアカウントを移動することも可能になるでしょう。

今回はここまで。
ではまたお会いしましょう。

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE2課所属。AWS資格12冠。2010年1月からAWSを利用してきました。
AWSのコスト削減、最適化を得意としています。