CloudWatchを別アカウントに共有して1アカウントでまとめてモニタリングしたい

別アカウントにCloudWatchの内容を共有した際に何が確認できるのか気になったので確認しました。
2021.05.21

複数のAWSアカウントがあり、CloudWatchの内容を集約してモニタリングしたい。モニタリング用のAWSアカウントを用意したとしましょう。 CloudWatchダッシュボードをクロスアカウント(別のアカウント)で共有できることは以下のブログで紹介されています。

CloudWatchダッシュボード以外に個々のメトリクスや、CloudWatch Logsの内容など他に確認できるものがあるのか気になったので検証しました。

Icons made by Freepik from www.flaticon.com

検証結果

  • CloudWatchダッシュボード、アラート、個々のメトリクスも共有先のモニタリングアカウントから確認できる
  • CloudWatch Logs、Container Insightsなど一部確認できない項目もある
  • ダッシュボードの共有設定を行うと共有先から共有している側スイッチロールしへログインできる設定も作成される
  • スイッチロールしてログインするとCloudWatch Logsなど一部確認できていなかった項目も確認できる
  • AWS Organizationsはなくても設定できる

検証アカウント説明

モニタリングアカウントで他アカウントのCloudWatchダッシュボードを確認します。ダッシュボードの共有以外に何ができるのか検証しました。検証した際の設定手順を紹介します。モニタリングアカウントは特殊なアカウントではなく、集約してCloudWatchを確認したいだけの普通のアカウントです。

種別 アカウント名 仮アカウントID
見る側 モニタリングアカウント 111111111111
見られる側 監視対象のアカウント(例:アプリケーション実行環境アカウント) 222222222222

下記のドキュメントをベースに進めます。

見られる側(監視対象のアカウント)の設定

クロスアカウントクロスリージョンを設定します。

データを共有をクリック。

アカウントを追加をクリック。

モニタリングアカウントのアカウントIDを登録します。

アクセス許可は以下の設定にしました。

項目の説明はドキュメントより引用します。

CloudWatch のメトリクス、ダッシュボード、アラームへの読み取り専用アクセスを提供する:このオプションを使用すると、モニタリングアカウントで、アカウントの CloudWatch データが入ったウィジェットを含むクロスアカウントダッシュボードを作成できます。

CloudWatch 自動ダッシュボードを含める:このオプションを選択すると、モニタリングアカウントのユーザーは、このアカウントの自動ダッシュボードの情報も表示できます。詳細については、「Amazon CloudWatch の使用開始」をご参照ください。

ServiceLens への X-Ray 読み取り専用アクセスを含める:このオプションを選択すると、モニタリングアカウントのユーザーは、このアカウントの ServiceLens サービスマップと X-Ray トレース情報も表示できます。詳細については、「ServiceLens を使用してアプリケーションの健全性を監視する」をご参照ください。

CloudFormationテンプレートを起動をクリックします。必要なIAMロールを作成してくれます、便利。

確認画面が表示されます。

CloudFormationの画面が開きます。IAMロールを作成するためチェックを忘れずにスタックを作成します。

3分ほど作成完了しました。

作成されたIAMロールを確認します。基本、読み取り専用の管理ポリシーが付与されています。

信頼関係タブを確認すると、モニタリングアカウントのアカウントIDが指定されていました。

IAMロール作成して見られる側の設定は完了です。

見る側(モニタリングアカウント)の設定

クロスアカウントクロスリージョンを設定します。設定への入り方はまったく同じで紛らわしいですが、モニタリングアカウントで作業しています。

クロスアカウントクロスリージョンを表示を有効化します。

カスタムアカウントセレクタを選択。複数アカウントをモニタリングするケースも多いかと思います。アカウントIDにラベルを付け管理すると判別しやすいです。

アカウントIDとラベルを入力し、有効化します。ラベルは日本語も使えます。

ステータスが有効になりました。

モニタリングアカウントで見てみる

画面上部に項目を選択する表示が追加されています。

設定したラベル名を選択して確認対象のアカウントを切り替えできます。

アプリケーション実行環境アカウントのダッシュボードが表示されました。

ダッシュボード内容を確認できました。

アラームも確認できます。

個々のメトリクスもモニタリングアカウントから確認できます。

CloudWatchLogsは表示できませんでした。しかし、この後説明するスイッチロールすれば確認できます。

その他、表示できなかった項目に「×」マークしました。

スイッチロールもできる

確認対象のアカウントを選択すると右上にこのアカウントに切り替えるが表示されます。

ロールの切り替えが表示されます。表示名を入力してロールを切り替えてみます。

アプリケーション実行環境アカウントにログインできました。ダッシュボードはもちろん確認できます。

当然、アラームも確認できます。

スイッチロールするとCloudWatchLogsも確認できるようになりました。障害調査するときはスイッチロールすれば良さそうです。

スイッチロールはできても基本的にCloudWatchの読み取り権限しかないです。たとえば障害の一次対応で停止状態のEC2を起動させようとしても権限不足で失敗します。

共有をやめたい

見られる側の設定です。IAMでロールを管理をクリックすると、IAMロールの画面に遷移します。

IAMロールを削除します。※ CloudFormationのスタックから削除すべきだったので踏みとどまってください。

設定前の状態に戻りました。

削除してから気がついたのですがIAMロールはCloudFormationで作成したものです。

最初からスタックを削除するか、先にIAMロール削除した場合でもスタックを削除しましょう。再度CloudWatchを共有するためにCloudFormationからIAMロールを作成するときのスタック名は同じです。スタックが残ったままだとスタック名が重複してエラーになります(なりました)

TIPS

見られる側のアカウントでIAMロールを作成したスタックを削除するとモニタリングアカウントからダッシュボードの確認や、スイッチロールができなくなります。安全に運用するにはスタックの削除保護を有効にし、誤削除防止措置を取った方がよいでしょう。

その他、見られる側の設定

アクセス許可の権限強い方で試してみます。

作成されたIAMロールを確認するとViewOnlyAccessが追加で付与されました。

スイッチロールしてアカウントにログインするときの障害調査の幅が広がります。読み取り専用とは言え、CloudWatch以外のリソースを確認する必要がない場合は権限の範囲が広いのでご注意ください。

まとめ

CloudWatchの情報はモニタリングアカウントに集約して確認できることがわかりました。オペレーション担当者はモニタリングアカウントのみにIAMユーザを作成し、スイッチロールで他アカウントへ読み取り専用でログインもできます。障害対応を行う場合は読み取り専用だと対応できないです。アクションを行う場合は所定のアクション可能なIAMロールを作成しておき、復旧対応時はそのIAMロールへスイッチロールするような設計も必要になってくるかと思います。

おわりに

監視対象のアカウントへスイッチロールまでできるとは思っていませんでした。権限を絞られた状態で標準設定されてて手間省けて嬉しい。

AWSだからといってCloudWatchに限定せず、サードパーティーの監視サービス(Mackerelなど)で集約してモニタリングするのも手です。

Mackerel の記事一覧 | DevelopersIO

2021/8/20追記
アラーム設定も1アカウントでまとめて設定できるようになりました。
詳しくは以下のブログをご確認ください。