[アップデート]Amazon CloudWatch Network Monitoring Flow MonitorがOrganizations統合されました
お疲れさまです。とーちです。
皆さんは Amazon CloudWatch Network Monitoring Network Flow Monitor というサービスはご存知でしょうか?私は今まで触ったことがなかったのですが、どうやら re:Invent 2024 で新しく登場したネットワーク監視サービスのようです。
Amazon EC2 や Amazon EKS などのコンピューティングインスタンスと、Amazon S3、Amazon RDS、Amazon DynamoDB などの AWS サービス間のワークロードのネットワークパフォーマンスをほぼリアルタイムで可視化するサービスとなっており、ネットワークに起因する障害を検出して原因を特定するのに役立つものとなっています。
Network Flow Monitor には大きく2つの機能があります
-
ワークロードインサイト:
- 設定を有効化したリージョンで、どこからどこに対してどのような通信(サイズや再送信回数等)が発生しているか等の通信の概要を確認できる機能
-
モニター:
- 監視したいネットワークとその宛先を設定することで、2点間のネットワーク接続状態を監視し、通信速度や遅延時間などの具体的な数値(パフォーマンスメトリック)と、接続の健全性を示す指標(ネットワークヘルスインジケーター)を使って問題を見つけるための機能
今回のアップデートでは、この Network Flow Monitor が AWS Organizations と統合されました。Organizations 統合されたことで以下のようなことができるようになりました
- 管理アカウントから Organizations 組織内の AWS アカウントに対して簡単に Network Flow Monitor を初期化できるようになった
- 複数のアカウントのネットワークパフォーマンスを一つのアカウントから一元的にモニタリングできるようになった
- 複数のアカウントにまたがるワークロードのネットワークパスも可視化できる
それでは早速やってみましょう。
やってみた
前提条件
- AWS Organizations が有効化済みであること
手順の概要
手順の概要は以下のとおりです
STEP 1: 管理アカウントでの準備
- CloudWatch の信頼済みアクセスを有効化
- (オプション)委任された管理者アカウントを登録
STEP 2: 委任された管理者アカウントでの設定
- 監視対象アカウントに対してNetwork Flow Monitor をまとめて初期化
STEP 3: 監視対象アカウントでの設定
- クロスアカウントアクセス用の IAM ロールを作成
- 監視対象 EC2 インスタンスにエージェントをインストール
STEP 4: 詳細監視の設定(委任された管理者アカウント)
- (オプション)特定のリソース間のモニターを作成
それでは公式ドキュメントの手順に則り実際にやってみましょう。
管理アカウントで CloudWatch を AWS Organizations と統合
まずは管理アカウントにサインインし、CloudWatch の信頼済みアクセスを有効にします。
信頼されたアクセスはマネージメントコンソールの AWS Organizations の画面から行うケースもありますが、CloudWatch の場合は CloudWatch の画面から行うようです。
オプションですが、委任された管理者アカウントを登録できます。管理アカウントは特殊なアカウントであるため、管理アカウントにアクセスできるユーザーを制限するためにも別アカウントに機能を委任するのがベストプラクティスとされています。今回は委任を行います。
委任が完了すると以下の状態になります。
委任された管理者アカウントで Network Flow Monitor をまとめて初期化する
ここからは委任された管理者アカウントで作業します。まずはマネージメントコンソールで CloudWatch の画面にいき、Network Flow Monitor を有効化します。
CloudWatch の管理アカウントとなっている場合、以下のように組織内の監視対象アカウントを追加する画面が出てきます。追加を押してアカウントを追加します。
追加するアカウントを選択します。(委任された管理者アカウントではない本来の)管理アカウントも追加できるようです。なお、追加できるアカウントの最大数は自身のアカウントも含め 100 個までのようです。
アカウントを追加した状態で、サービスの初期化の項目にある「Network Flow Monitor を有効にする」をクリックします。Organizations 連携していない場合、1アカウントずつ Network Flow Monitor を有効化する必要がありますが、これを組織内の任意のアカウントに対して一括して行えるというわけです。
Network Flow Monitor の有効化が完了すると以下のメッセージが出ました。有効化完了まで 30 分かかるというメッセージが出ていたのでどのくらいかかるか心配でしたが、20 分はかかっていなかったと思います。
現在の監視対象アカウントは設定タブから確認できます。追加したアカウントの Status が Permissions missing
となっていますね。これは追加したアカウントに必要な IAM ロールが作成されていないからです。ということで、次の手順で追加したアカウントに対して IAM ロールを作成していきます。
監視対象アカウントで特定の IAM ロールを作成する
委任された管理者アカウントが他のアカウントのリソースを表示できるようにするためには監視対象のアカウントに特定の IAM ロールを作成する必要があります。(このロールも一緒に作ってくれればいいのですが・・・)
IAM ロールは各監視対象アカウントにて作成します。監視対象アカウントがたくさんある場合は一つずつやるのは大変なので CloudFormation StackSets 等を使って作るのが良いでしょう。今回は手で作っていきます。
監視対象アカウントにログインしマネージメントコンソールの IAM の画面から以下の通り IAM ロールを作成します。IAM ロール名等に指定があるので公式ドキュメントも確認しながら作ったほうが良いです。また、信頼ポリシーは委任された管理者アカウントの ID を信頼するよう設定してください。
追加する IAM ポリシーは AmazonEC2ReadOnlyAccess
です。
ロール名は NetworkFlowMonitorAccountResourceAccess
という名前で作りましょう。
作成が完了した後、委任された管理者アカウントで再度確認すると以下のようにステータスが Permissions added
に変わるはずです。
監視対象アカウントで監視対象 EC2 インスタンスを作成する
今回は監視対象アカウントに対して、2台の EC2 を別々の AZ に立てその通信メトリクスを委任された管理者アカウントから確認してみようと思います。
前提として監視対象アカウントに VPC 及び EC2 インスタンスは作成済みであるものとします。EC2 インスタンスには AWS 管理 IAM ポリシーである CloudWatchNetworkFlowMonitorAgentPublishPolicy
を含む IAM ロールをつけるようにしてください。
公式ドキュメントに従い、EC2 インスタンスに Network Flow Monitor 用のエージェントをインストールします。
次の画面でターゲットとして、作成した2台の EC2 インスタンスを選択してインストールを実行します。
以下のようになれば OK です。
委任された管理者アカウントで Network Flow Monitor のモニターを作成
この状態でも通信が発生すればワークロードインサイトで通信の概要を確認することはできますが、より詳細にポイントを絞って確認したいときは「モニター」を作成します。
モニターは以下の画面から設定していきます。Organizations 連携している場合は委任された管理者アカウントで作成していきます。
ローカルリソースが監視したいネットワーク、リモートリソースが監視したいネットワークからの通信先です。それぞれで指定できる最小単位はサブネットになっており、リモートリソースでは S3 や DynamoDB といった AWS サービスも指定できます。Organizations 連携の設定が出来ているのでアカウントという項目から監視対象のアカウントのリソースが選べるようになってますね。今回は監視対象アカウントの az-1c のパブリックサブネット(送信元)と az-1a のパブリックサブネット(送信先)間でモニターを設定してみました。
この状態で以下のコマンドを実行し、EC2インスタンス上にある100MBのファイルを別AZのEC2インスタンスでダウンロードしてみます。
# ap-northeast-1aのEC2インスタンスにて
root@ip-172-18-128-25:/var/www/html# cd /var/www/html/
root@ip-172-18-128-25:/var/www/html# fallocate -l 100M large.txt
root@ip-172-18-128-25:/var/www/html# ls -l
total 102408
-rw-r--r-- 1 root root 44 May 7 22:45 index.html
-rw-r--r-- 1 root root 615 May 7 22:44 index.nginx-debian.html
-rw-r--r-- 1 root root 104857600 May 8 01:43 large.txt
# ap-northeast-1cのEC2インスタンスにて
root@ip-172-18-129-247:~# curl http://172.18.128.25/large.txt --output large.txt # 何回か実行
しばらくしてから委任された管理者アカウントで確認してみるとワークロードインサイトにデータが表示されていました。
またモニターのほうでもデータを見ることが出来ました。
まとめ
以上、Network Flow Monitor が Organizations 統合されたというアップデートでした。Network Flow Monitor は使ったことがなかったのですが、自分の VPC から、S3 や DynamoDB 等のマネージドなサービスへのネットワークに異常がないかを確認できるので、AWS サービス側の障害を迅速に検知できそうですね。機会があれば使ってみようと思いました。
以上、とーちでした。