AWS各通知の構成変更に取り組んでみた

情報システム部でAWS周りの運用保守をしている「ねぎ」です、こんにちは!

弊社ではAWSのHealth、Amazon GuardDuty、AWS SecurityHubに関する通知をSlackに連携して受け取っています。

その際のSlackチャンネルは、Health、Amazon GuardDuty、AWS SecurityHubでそれぞれ1チャンネルずつだったのですが、管理しているAWSアカウント数が増えたこともあり、通知された情報がすぐ流れて見落としてしまうようなことも発生していました。

※弊社のAWSアカウント管理については、是非こちらもご覧ください

tech-blog.yayoi-kk.co.jp

今回はそういった課題に対して取り組んだ内容をご紹介していきたいと思います。

各通知構成変更の取り組み

第一段リリース

まずは一番シンプルだったころのSlack通知の仕組みです。

Slack通知の仕組み-変更前

検知内容をEventBridgeで受け取り、ChatbotからSlackへ連携して流す、といったものです。

AWS SecurityHubについても同じ仕組みで通知を実施していました。

Slack通知の仕組み-AHA

Healthの情報については、AWS Health Awareというソリューションを使ってSlackへの連携を実施していました。

こちらのソリューションは、

  • EventBridgeで定期的にlambda関数を呼び出して

  • 各AWSアカウントのHealth情報を受け取り

  • SecretManagerから通知先の情報を取得して

  • DynamoDBにHalth情報のステータス(オープン中、アップデート、クローズ)を書き込む

といったものになります。

参考:AWS Health Aware

aws.amazon.com

Amazon GuardDuty / AWS SecurityHub、Healthの通知構成も、一目でリソース全体がぱっと把握できるくらいの量かなと思います。

続いて各チームから修正の要望が多かった内容について紹介です。

第二段リリース

管理しているAWSアカウント数が50を超えたあたりから、ちらほらと以下のような指摘をいただくことがありました。

「Slack通知にAWSアカウントIDは表示されているけど、AWSアカウント名がないからわからない。」

※AWS Health Awareについては、Slack通知時にアカウント名が表示されます

12桁のAWSアカウントIDを覚えるのは大変ですよね、はい。。。

ということで、Amazon GuardDutyとAWS SecurityHubに関するSlack通知についてAWSアカウント名も表示させるような取り組みをしてみました!

詳細はコチラ

tech-blog.yayoi-kk.co.jp

Chatbotでは通知内容の細かいカスタマイズが出来ないので、Chatbotの便利さを諦め、lambdaでアカウントIDからアカウント名を取得するような構成に変更しました。

その結果lambdaで通知内容のJSONを受け取り、Slackの形式に合わせたJSON形式へと変更するような処理を加えることになりました。

若干複雑になりましたね。

ここまで対応が行えたことで一段落していましたが、さらなる課題が出てくるのでした。

第三段リリース

今回の本題です。

管理するAWSアカウント数が100超となってきて、1つのSlackチャンネルに通知をしていると、情報が流れて見逃してしまうといった課題が出てきました。

1つのSlackチャンネルに通知しているのが限界だと感じ、ならば複数チャンネルだ!と構成変更を実施することにしました。

結論!

各種通知の変更後アーキテクチャ

このようなアーキテクチャで実現することにしました。

どうでしょうか?当初のシンプルさから、手の込んだ構成になったかと思います。

この構成のポイントは以下です。

  1. Amazon GuardDuty / AWS SecurityHubでSlack通知を行うlambda関数を1つに
  2. AuditアカウントにOrganizationsの一部権限を移譲し、Auditアカウント内のlambda関数からAWSアカウント名を取得可能に

1つ目のポイントは、lambda関数を1つにしたことで、今後Firewall Managerの検知も集約したいといった要望が出てきた場合も、同じlambda関数で使いまわしが効くようにしています。

2つ目のポイントは、Organizationsの権限を移譲したことで、Auditアカウント内でやりとりが済むようになりました。

権限移譲していない場合は、親のアカウントに対してAWSアカウント名を取得するようにアカウント跨ぎの仕組みを用意する必要がありました。

(Healthの情報は残念ながら権限移譲の仕組みが用意されていないため、アカウント跨ぎで取得するような構成としています。今後のアップデートに期待したいと思います。)

本構成で運用をしてみてまた新たな課題が出てきたら、その際には第四段リリースでブログを書きたいと思います。

あとがき

いかがでしたでしょうか。

AWSアカウントが少ないうちは、1つの通知先でも問題ないといった声も多いと思います。

しかしAWSアカウント数が増えるにつれて、情報が流れて見落としてしまうと、それがきっかけで重大な障害につながりそうだった、などヒヤリとした経験があるのではないでしょうか?

今回のブログ記事が、AWSマルチアカウント環境で日ごろ多くの通知に悩まされている方の一助となればと思います。

一緒に働く仲間を募集しています

herp.careers