[UPDATE] CloudFormation StackSetsでドリフト検出をサポートしました #reinvent

CloudFormationのStackSetsでドリフト検出がサポートされたので試してみました。マルチリージョン・マルチアカウントに展開したスタックをまとめて管理できるので便利なチェック機能として使えそうです。
2019.12.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

みなさん、StackSets使っていますか?(挨拶

CloudFormationのStackSetsはマルチリージョン・マルチアカウントにStackを展開できるちょーべんり機能です。今回StackSetsでのドリフト検出に対応したので検証してみたいと思います。

CloudFormation が StackSet でのドリフト検出サポートを発表

概要

CloudFormationのStackSetsは1つのアカウントから一斉に複数のリージョン・アカウントにテンプレートを展開できる機能です。詳細は下記をご参照ください。

[新機能] CloudFormation StackSetsを試してみた

展開するためには親と子それぞれにIAM Roleが必要になります。このIAM Roleをサクッと展開する方法を下記で紹介しています。

StackSets用IAM Roleのクイック作成リンク作ってみた

ドリフト検出は昨年登場した機能で、Stack展開後に手動で変更されたことを検知できる機能です。これにより正しく設定が維持されているか、どこが変更されているかなど確認できるようになりました。

AWS CloudFormationで手動で行った変更が検出可能になりました!!!

今回はこれがStackSetsでも利用できるようになりました。

やってみた

今回は複数のリージョン・アカウントに展開してどのように見えるか確認してみます。

展開先は下記の4つにしてみます。

  • 親アカウント
    • 東京リージョン
    • バージニアリージョン
  • 子アカウント
    • 東京リージョン
    • バージニアリージョン

展開するのは下記GuardDutyの有効化と通知を入れてみます。

一発でGuardDutyを全リージョン有効化して通知設定するテンプレート作った

それではやっていきます。

StackSetsの展開

先述のブログの通りIAM Roleをそれぞれのアカウントで準備しておきます。親アカウントのStackSetsからGuardDutyのテンプレートを選択してデプロイしていきます。

デプロイ先に親アカウント自身と子アカウントのアカウントIDを入力し、東京リージョンとバージニアリージョンを選択し、展開します。

展開が完了しました。この状態ではドリフトステータスはNOT_CHECKEDです。アクションからドリフトの検出を選択します。

ドリフトステータスがIN_SYNCとなり前回のドリフトチェック時刻が更新されました。

ドリフトの検出

実際にドリフトを発生させて検出してみます。

展開先のそれぞれのアカウントのバージニアリージョンでSNS Topicを削除してみます。

再度StackSetsの画面からドリフトの検出を行うと、該当スタックインスタンスのステータスがDRIFTEDとなりました。

他のタブも確認してみます。オペレーションタブではDETECT_DRIFTの操作が記録されています。

StackSetの情報ではドリフトステータスで何件ドリフトしているか確認できました。

ドリフトの概要はStackSetsで確認できますが、具体的にどの箇所がドリフトとなっているかは確認することができませんでした。詳細は展開された各スタックから確認する必要があります。

スタックの画面に移動してドリフト結果を表示を押します。

SNS Topicが削除されていることが確認できました。

まとめ

CloudFormationのStackSetsでドリフト検出がサポートされたので試してみました。管理下のアカウントに設定を展開して、それが守られているかチェックすることはこれまではAWS Configなどを使う必要があり大変でしたが、StackSetsからまとめてドリフト検出できるので、コンプライアンス的な管理がだいぶ楽になると思います。

ぜひ使ってみましょう!