Amazon Web Services ブログ
Chaos Engineering と可視化を体験できる Chaos Kitty のご紹介
みなさん、いきなりですが、お茶目な猫ちゃんを配線いっぱいのサーバールームで遊ばせたらどうなるのでしょうか?きっとカオスな状況になりますよね? 同じ状況を AWS のワークロードに行い、 Chaos Engineering と可視化をご体験いただけるソリューション “Chaos Kitty” を AWS Summit Tokyo 2023 で出展いたしました。たくさんの方々から良い反応を得られたので、その紹介をさせていただきます。Chaos Kitty がもたらすインタラクティブな体験を通じ、 AWS のサービスや Chaos Engineering を楽しく学べることをお伝えできたらと思います。
Chaos Kitty って何ですか?
Chaos Kitty は 3 つの機能に分かれた体験型 AWS ソリューションです。1 つ目の機能は AWS と連動した IoT 電球がセキュリティの状態を反映している点です。
ブロックと IoT 電球でできた物理的なアーキテクチャは、AWS 環境におけるシンプルな 三層構造の Web アプリを表しています。色付きの IoT 電球は、各アーキテクチャコンポーネント ( Amazon EC2、Amazon RDS、Amazon S3 など) のコンプライアンスステータスを表します。これによってリアルタイムに AWS 上の Web 三層アプリケーションのセキュリティ状況をリアルタイムで監視でき、ワークロードのセキュリティ設定が変更されたときは IoT 電球の色が緑 (安全) から赤 (設定違反) に変わることで、いち早くワークロードのセキュリティ状態変更を確認できます。
2 つ目の機能は、障害挿入機能です。
セットに付属している緑または赤のボタンを押すと、Chaos Kitty 用のリーダーボードのタイマーが動作すると同時に、Web アプリのワークロードに対して設定ミスを意図的に注入し (S3 やセキュリティグループを一般に公開するなど)、設定ミスを反映して IoT 電球の色が緑から赤へと変化します。こうして注入された設定ミスを正しく修正し、すべての電球を緑色に戻すために、ミニゲーム形式でユーザーは AWS コンソールを使って変更された問題箇所を特定し修復します。ダッシュボードで修復までの時間が計測されており、ランキング形式で表示されていますので、AWS サービスに関して自信がある方はぜひトライしてみてください!なお、このミニゲームの目的は、AWS のセキュリティ問題を物理的に表現する方法と、手動で復旧するにはいかに時間がかかるのかを明示的に示すことにあります。
3 つ目の機能は自動修復機能です。
Chaos Kitty のセットには Amazon Alexa が含まれており、Amazon Alexa に英語で「Alexa run my security playbooks 」と声でコマンドを与えると、注入された設定変更を一括で自動修復するスクリプトが実行されます。これによって手動修復のケースと比べて自動実行の優位性と、クリティカルなワークロードだった場合に損失額を抑えることの重要性を実感できます。
Chaos Kitty のアーキテクチャはどうなってますか?
Chaos Kitty で設定ミスを注入するアプリケーションのアーキテクチャを以下に示します。
Elastic Load Balancing(ELB) 、Amazon ECS、RDS の基本的な三層 Web アーキテクチャを基本とし、静的ファイル格納先の S3、操作ログの記録の AWS CloudTrail 、Security Group も監視対象となってます。このアーキテクチャに対して、次の監視の仕組みと IoT デバイスとの通信、自動修復を実装しています。
図1.設定ミスが挿入される三層 Web アプリケーションの監視対象と設定内容
Chaos Kitty の動作フロー
以下は、MQTT キューと AWS IoT Core を使用して開始ボタンを押してから AWS ワークロードに設定ミスが注入され、電球の色が変わるまでのフローを表しています。
1. ボタンが押されると、MQTT メッセージがクラウドに送信されます。
2. MQTTメッセージをトリガーとして、AWS の環境にランダムで設定ミスを挿入する AWS Lambda を起動します。
3. リソースの状態は常に AWS CloudTrail によって追跡され、リソースが変更された場合に Amazon CloudWatch Event がトリガーされます。
4. このイベントは Lambda 関数 (checkResourceCompliance) を実行します。この関数は、リソースの理想的な状態を格納する Amazon DynamoDB テーブルと各リソースの現在の状態を比較することによって、リソースのコンプライアンスをチェックします。
5. コンプライアンス状態に違いがある場合は、Amazon DyanmoDB に格納された、影響を受けるリソースと対応した IoT 電球が持つ ID を参照します。その後 IoT 電球 ID を含む setComplianceState 関数がトリガーされます。
6. IoT 電球 ID は AWS Lambda の PublishMQTT 関数へ送られます。この関数は MQTT メッセージを AWS IoT Core に Publish します。
7. AWS IoT Core に登録された Raspberry Pi 4 が、IoT 電球の色を赤に設定するコマンドと、アラーム状態をアラームで鳴らすコマンドを受け取り、電球の色を変更します。
8. MQTT への Publish と同時に、AWS Amplify にデプロイされている Chaos Kitty リーダーボードページでストップウォッチが開始されます。
上記フローをアーキテクチャ図として表したものが以下となります。
図2. Chaos Kitty の動作フロー
Chaos Kitty で何が学べますか?
Chaos Kitty を体験することで、 Chaos Engineering をベースとして様々な観点でクラウドについて学ぶことが可能です。
Chaos Engineering
なんと言っても Chaos Engineering について学ぶことができます。Chaos Engineering の詳細についてはこちらの資料をご参照ください。Principles of chaos engineering では、「本番環境で検証を実行する」ことが推奨されていますが、多くの企業にとって本番環境で障害を起こして検証することはかなりハードルが高いことかと思われます。AWS では、本番環境に代わり Chaos Engineering を実践いただくために GameDay と呼ばれるイベントを用意していますが、複数チームで構成して半日ほどかけて行うイベントでもあるため、すぐに実施が難しい側面もあります。そこでこの Chaos Kitty を実施いただき、短時間で Chaos Engineering の経験を得ることができます。
Chaos Kitty では Chaos Engineering をお客様のサービスに影響が出ない形で安全に実施できる上、タイムアタックで障害対応することによって、実際の現場に近い形でスキルアップできます。
自動修復
Chaos Kitty では複数の障害を同時に発生させることができます。障害の起きたコンポーネントが多ければ多いほど、障害影響の調査や復旧に時間がかかることは言うまでもありません。これは実際のシステム障害でも同じことが言えます。昨今のシステムは大規模で分散化されているため複雑さを増しており、1 つの障害が別のシステムにまで及んでしまうことは多々あります。障害の際は、手作業で復旧するだけでなく、 オートスケールやフェールオーバーなど自動的に回復する機構があることが望ましいです。このような回復性がシステムに実装されていないと、障害を起こした際に影響が拡大する恐れがあります。
Chaos Kitty は自動修復の機能を持っております。 Amazon Alexa に修復用のコマンドをインプットすると、自動修復スクリプトが実行されるようになっています。Chaos Kitty のゲーム内で手動で作業したのち、この修復コマンドを使用して即座に環境が正常に戻る様子を確認いただくことで、自動修復の重要性を実感いただけます。
可視化
システムの稼働状況を可視化することは、運用保守の観点からも非常に重要です。Chaos Kitty では CloudTrail の操作ログを監視して、システムの状態を可視化します。システムに異常な変更が入ると、CloudTrail の操作内容を検知して AWS Lambda を起動、ライトの色を赤く変更します。システムが正常な状態に戻ると、ライトの色が緑色に戻り、正常な状態を示します。
このようにシステムの正常な状態を常に監視して可視化することで、異常を検知してすばやくシステムを復旧することが可能となります。Chaos Kitty を体験いただくことで、システム運用における可視化の重要性を実感いただけます。
セキュリティ
Chaos Kitty での Chaos Engineering の影響範囲として、Web 三層構造や CloudTrail のセキュリティ設定が変更されます。 実際のワークロードでは、AWS Config などを使用して自動修復しますが、 Chaos Kitty では AWS Lambda を使用した自動修復スクリプトが Alexa Voice Command で起動され、自動的に設定ミスを修復することができます。Chaos Kitty におけるセキュリティ観点のメッセージとして、まず、セキュリティ状態の可視化が重要です。実際のプロダクトでも、セキュリティ設定を変更された場合では SIEM などを通して、リアルタイムで運用・監視チームに通知が行われるべきであり、 Chaos Kitty では変更通知を IoT 電球という形で表現しています。さらに、実際のセキュリティ運用では、各開発者や運用者に適切な権限を付与した上で、セキュリティ状態が変更された場合には自動修復の仕組みが導入されていることが望ましいです。Chaos Kitty では AWS Lambda のスクリプトで自動修復が実行されていますが、プロダクト環境の場合では Config Rule と併用し自動修復を行うことが可能です。
つまり、 Chaos Kitty を体験いただくことで、セキュリティにおいて可視化が重要であり、かつレジリエンスだけではなくセキュリティ設定についても自動修復の仕組みを導入することで、より高度なワークロードのあり方を学ぶことができます。
終わりに
Chaos Kitty は実際の障害を模擬する形でサービスの稼働状況を電球やブロックを使ってわかりやすく表現しております。日頃クラウドサービスに慣れ親しむ機会が少ない方でも、運用における障害対応を気軽に体験いただけます。AWS Summit でも Chaos Kitty の面白さについて多くの皆様に体験いただきました。
お客様からは新人教育や自社向けのデモ環境として利用したいとお声をいただいております。今後皆様にお届けできるように鋭意開発してまいりますので、続報をお待ちください!
Chaos Kitty はシンガポールのソリューションアーキテクトの Yiang Meng Loh、Kevin Low、Benjamin Fheng、Julia Ang が作成しました。
この記事はソリューションアーキテクトの服部、宋、河角が作成しました。