[UPDATE] CloudFormation StackSetsでドリフト検出をサポートしました #reinvent
こんにちは、臼田です。
みなさん、StackSets使っていますか?(挨拶
CloudFormationのStackSetsはマルチリージョン・マルチアカウントにStackを展開できるちょーべんり機能です。今回StackSetsでのドリフト検出に対応したので検証してみたいと思います。
CloudFormation が StackSet でのドリフト検出サポートを発表
概要
CloudFormationのStackSetsは1つのアカウントから一斉に複数のリージョン・アカウントにテンプレートを展開できる機能です。詳細は下記をご参照ください。
展開するためには親と子それぞれにIAM Roleが必要になります。このIAM Roleをサクッと展開する方法を下記で紹介しています。
ドリフト検出は昨年登場した機能で、Stack展開後に手動で変更されたことを検知できる機能です。これにより正しく設定が維持されているか、どこが変更されているかなど確認できるようになりました。
今回はこれがStackSetsでも利用できるようになりました。
やってみた
今回は複数のリージョン・アカウントに展開してどのように見えるか確認してみます。
展開先は下記の4つにしてみます。
- 親アカウント
- 東京リージョン
- バージニアリージョン
- 子アカウント
- 東京リージョン
- バージニアリージョン
展開するのは下記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からまとめてドリフト検出できるので、コンプライアンス的な管理がだいぶ楽になると思います。
ぜひ使ってみましょう!