200以上あるアカウントのセキュリティに関する運用状況を可視化したい
200以上のアカウントを運用している仕事をしていますが、以下のような問題に直面していました。
どのアカウントにも同じようなリソースを立てていますが、運用していくうちに個別の設定が入ってしまうことが多々あります。
中にはセキュリティ的に問題のある設定だったり・・・・・・
リソースの設定状況が把握しきれない
標準的な設定をしていますが、実際にはヒューマンエラーで入っていなかったり変わってしまっていたりします。
セキュリティ的に問題のある設定が入っている、あるいは必要な設定が入っていないことをアカウント横断で監視する仕組みを必要としていました。
セキュリティに関するイベント発生を把握したい
rootユーザーでのログインや、セキュリティグループに対する変更について、発生したことをアカウント横断で検知する仕組みを作って、野放しにしないようにしたいです。
実現方法
EventBridge、ConfigルールをStacksetsで配る
前回の記事でご紹介したConfigルールや、イベント検知用のEventBridgeを各アカウントにStacksetsで配ります。
これでリソース設定のルール違反やセキュリティに関するイベントを検知できます。
クロスアカウントでEventBridgeを起動して単一のSNSトピックで通知する
検知はすべてのアカウントで個別に行いますが、SNSトピックは単一のアカウントで実行します。(親アカウントと呼んでいます)
SNSトピックを個別に作らない理由は「サブスクリプションの確認が1回で済む」、「SNSトピックの料金を一つのアカウントに寄せたかった」です。
下記の図のように子アカウントのConfigルールの違反検知で子アカウント(前述Stacksetsの対象)でEventBridgeが起動します。
子アカウントのEventBridgeはイベントを親アカウントのEventバスに送信して、親アカウントのEventBridgeがSNSトピックを実行します。
用途によって通知先を分けておく
通知は人間が見て対応することを想定しているので、レベル感によって通知先を分けます。
以下のような分類にして、今すぐ対応が必要なものがすぐ見分けられるようにします。
- 今すぐ対応が必要なセキュリティ上の危機 ex. SSHポートがインターネット開放されている
- 正規の変更か確認したい ex. セキュリティグループのルール変更があった
- 標準の設定から外れている ex. ELBアクセスログが標準通りに設定されていない
できたこと
以下のようなセキュリティ上の問題を200以上のアカウントから即通知
- rootユーザーでログイン
- rootユーザーのMFAが無効の場合
- VPCフローログが無効になっている
- ELBアクセスログが標準通りの設定でない
- ELBがTLS1.2未満のアクセスを許可している
- セキュリティグループルールに変更があった
- SSHなど特定のポートが0.0.0.0/0に対して開放されている
