CloudWatch クロスアカウントオブザーバビリティ機能により AWS Organizations メンバーアカウントのメトリクス情報を集約する
Amazon CloudWatch には他の AWS アカウントのロググループやメトリクスを集約して閲覧できる「CloudWatch クロスアカウントオブザーバビリティ」機能があります。下記のブログで CloudWatch クロスアカウントオブザーバビリティの概要や設定例について紹介されており、わかりやすいです。
本ブログでは、東京リージョンを対象に CloudWatch クロスアカウントオブザーバビリティ機能を組織単位で設定して、モニタリングアカウントで組織配下のアカウントのメトリクスを確認できるようにしてみます。
設定後は 1 つのアカウントで複数アカウントのメトリクスが確認できます。下図は VPC エンドポイントのメトリクス例となります。
CloudWatch クロスアカウントオブザーバビリティの設定
今回設定する環境のイメージ図です。OU 構成は簡略化して記載しています。
Sandbox-01 Account をモニタリングアカウントとして、AWS Organizations のメンバーアカウントをソースアカウントにします(今回の環境では管理アカウント以外に 2 アカウントしかないため、Sandbox-02 のみがソースアカウントになります)。モニタリングアカウントにおいて、ソースアカウントのメトリクスが閲覧できるようになります。
CloudWatch クロスアカウントオブザーバビリティを設定します。
モニタリングアカウントとする AWS アカウントにおいて「Amazon CloudWatch」→「設定」→「グローバル」タブからモニタリングアカウントを設定します。
「データを選択」ではメトリクスのみを対象にしてみます。「ソースアカウントを一覧表示」では単一アカウントの設定や OU 指定の設定ができ、今回は組織全体を対象とするため組織 ID を指定しています。
モニタリングアカウント設定の後は、ソースアカウントのリンク設定をするために「アカウントをリンクするためのリソース」から CloudFormation テンプレートをダウンロードして展開します。
「AWS 組織」を選択してテンプレートをダウンロードします。
テンプレートの中身です。ソースアカウントからモニタリングアカウントをリンクする設定となります。モニタリングアカウントでは処理がスキップされるようになっているようです。
AWSTemplateFormatVersion: 2010-09-09
Conditions:
SkipMonitoringAccount: !Not
- !Equals
- !Ref AWS::AccountId
- "111122223333"
Resources:
Link:
Type: AWS::Oam::Link
Condition: SkipMonitoringAccount
Properties:
LabelTemplate: "$AccountName"
ResourceTypes:
- "AWS::CloudWatch::Metric"
SinkIdentifier: "arn:aws:oam:ap-northeast-1:111122223333:sink/192d13bc-d0ke-49db-if8c-8f48fexample"
このテンプレートを CloudFormatioon StackSets で展開します。
管理アカウントもしくは CloudFormation の委任先アカウントにサインインして設定します。サービスマネージドアクセス許可の StackSets において、テンプレートをアップロードします。
Step2 では StackSets 名を入力し、Step3 はデフォルトのまま進めます。
Step4 において、デプロイ先のアカウントを指定します。テンプレートにはモニタリングアカウントでは処理がスキップされる動作が入っていそうでしたが、今回は意図的にモニタリングアカウントをデプロイ対象から除外する設定にしてみました。
最後の Step で設定内容を確認して実行します。
実行後にオペレーションのステータスが SUCCEEDED
になれば完了です。
CloudFormation StackSets の展開完了後に数分待つと、モニタリングアカウントでソースアカウントの情報を確認できるようになりました。
下記は VPC エンドポイントのメトリクスです。アカウントラベル列とアカウント ID 列が追加されています。アカウントラベルはモニタリングアカウントの設定で指定した内容です(今回の場合はアカウント名です)。
さいごにソースアカウントの設定も確認してみたところ、モニターアカウントへのリンク設定が有効になっていました(CloudFormation で設定した内容です)。
リンクされたアカウントは、モニタリングアカウント設定をしたアカウントになっています。
以上で、CloudWatch クロスアカウントオブザーバビリティの設定は終わりです。
さいごに
AWS Organizations 組織配下の利用されていない VPC エンドポイントの洗い出しを、メトリクスを用いて確認したい場合があり、CloudWatch クロスアカウントオブザーバビリティを組織単位で設定してみました。メンバーアカウントの情報を集約して確認できるのは便利でした。
以上、このブログがどなたかのご参考になれば幸いです。