
こんにちは、テクニカルサポート課の坂本(@t_sakam)です。今回は、Amazon Managed Grafana に関するブログです。
1 つの Amazon Managed Grafana のワークスペースで複数のアカウントの情報をまとめて確認したいパターンがあると思います。管理アカウントの権限をもっている場合は別の方法がありますが、今回は、管理アカウントを利用できない環境で、複数のメンバーアカウントの CloudWatch のメトリクスの情報を表示する方法を確認していきます。
実現するためのポイントは以下の 2 つになります。
- CloudWatch のクロスアカウントオブザーバビリティ機能を利用する
- Grafana のワークスペースへのログインは SAML 認証を利用する
Point 1 CloudWatch のクロスアカウントオブザーバビリティ機能を利用する
まずは、CloudWatch のクロスアカウントオブザーバビリティ機能を利用し、モニタリング用のアカウントで、他のアカウントの CloudWatch のメトリクスの情報を見られるようにします。
Point 2 Grafana のワークスペースへのログインは SAML 認証を利用する
SAML の他に IAM Identity Center を利用する方法がありますが、その場合は、管理アカウントが必要になりますので、メンバーアカウントしか利用できない環境の場合は、SAML 認証を選択することになります。
それでは、早速手順を確認していきます。今回、手順が長いため、ブログを 2 つに分けたいと思います。今回のブログでは、主に Point 1 の「CloudWatch のクロスアカウントオブザーバビリティ機能を利用する」の手順までを確認したいと思います。
- Point 1 CloudWatch のクロスアカウントオブザーバビリティ機能を利用する
- Point 2 Grafana のワークスペースへのログインは SAML 認証を利用する
- CloudWatch のクロスアカウントオブザーバビリティの設定
- モニタリングアカウントで CloudWatch のメトリクスを確認する
- まとめ
CloudWatch のクロスアカウントオブザーバビリティの設定
まずは、CloudWatch のクロスアカウントオブザーバビリティの設定をしていきます。手順が長くなってしまうので、今回は、モニタリング用のメンバーアカウント A ともう一つのメンバーアカウントであるアカウント B、の 2 つのアカウントのみ設定をおこないます。確認するアカウントを追加したい場合は、同じ手順で追加する流れになります。
モニタリング用のアカウントの CloudWatch の設定
まずは、モニタリング用のアカウントで CloudWatch の設定をおこなっていきます。

マネジメントコンソールの CloudWatch の画面左メニュー下の「設定」を選択します。

モニタリングアカウント設定
画面中央の「モニタリングアカウント設定」項目の「設定」を選択します。

データを選択
今回は、EC2 の CloudWatch のメトリクスを Grafana で確認できるようにしていきたいので、「メトリクス」にチェックを入れます。

ソースアカウントを一覧表示
ソースアカウント B の 12 桁 の AWS のアカウント ID を入力します。今回は、1 つのソースアカウントのみ設定しますが、追加で他のアカウントも設定したい場合は、カンマ区切りで追加していきます。ソースアカウント B の 12 桁 の AWS のアカウント ID が仮に YYYYYYYYYYYY として、追加で設定したいアカウントが、ZZZZZZZZZZZZ だとすると、「YYYYYYYYYYYY, ZZZZZZZZZZZZ」と設定します。

ソースアカウントを識別するのに役立つラベルを定義する
モニタリング用のアカウントの CloudWatch でメトリクスを確認する際に、ソースアカウントを見分けるために何を利用するかを選択します。アカウント名、グローバルに一意の E メール、ドメインなしの E メール、カスタムラベルから選択できます。今回は、グローバルに一意の E メールを選択しました。最後に「設定」ボタンを押します。

アカウントをリンクするためのリソース
これで、モニタリングアカウントが有効になりました。今度は、ソースアカウントを設定するための準備をしていきます。画面中央左の「アカウントをリンクするためのリソース」を選択します。

ソースアカウントをリンクする方法を決定
次は、ソースアカウントを設定する方法を選択します。今回は、管理アカウントの権限がないというパターンを想定しているので「任意のアカウント」を選択します。その後、「CloudFormation のテンプレートをダウンロード」ボタンを押します。

ダウンロードした CloudFormation のテンプレート
CloudFormation のテンプレートは以下のようになっています。モニタリングアカウントのアカウント ID は XXXXXXXXXXXX で置き換えています。
link_to_XXXXXXXXXXXX_cloudformation_template.yaml
AWSTemplateFormatVersion: 2010-09-09
Conditions:
SkipMonitoringAccount: !Not
- !Equals
- !Ref AWS::AccountId
- "XXXXXXXXXXXX"
Resources:
Link:
Type: AWS::Oam::Link
Condition: SkipMonitoringAccount
Properties:
LabelTemplate: "$AccountEmail"
ResourceTypes:
- "AWS::CloudWatch::Metric"
SinkIdentifier: "arn:aws:oam:ap-northeast-1:XXXXXXXXXXXX:sink/11111111-1111-1111-1111-111111111111"
テンプレート内に Sink や Link という記載がありますが、Sink はモニタリングアカウント側のアタッチメントポイントになります。Link をソースアカウント側に設定することで、モニタリングアカウントとの接続が確立されます。
ソースアカウントで、このテンプレートを使用して、CloudFormation で設定することで、ソースアカウントに Link が作成されます。
※ 以下、クロスアカウントオブザーバビリティの AWS のドキュメント 抜粋。
シンクは、モニターリングアカウントのアタッチメントポイントを表すリソースです。ソースアカウントは、シンクにリンクすることでオブザーバビリティデータを共有できます。各アカウントにリージョンあたり 1 つのシンクを設定できます。各シンクは、そのシンクがあるモニターリングアカウントによって管理されます。オブザーバビリティリンクは、ソースアカウントとモニターリングアカウントの間に確立されたリンクを表すリソースです。リンクはソースアカウントによって管理されます。

ソースアカウントの CloudWatch の設定
CloudFormation のテンプレートをダウンロードできたので、今度はこのテンプレート使って、ソースアカウントで CloudWatch の設定をおこなっていきます。

CloudFormation でスタックを作成
CloudFormation のマネジメントコンソールの左メニューで「スタック」を選択します。画面右上の「スタックの作成」を選択し「新しいリソースを使用(標準)」を選択します。

スタックを作成
「テンプレートの準備」は「既存のテンプレートを選択」を選択します。次の「テンプレートの指定」で「テンプレートファイルのアップロード」を選択します。「ファイルの選択」で、先ほどモニタリングアカウントでダウンロードした、テンプレートをアップロードします。

スタックの詳細を設定、スタック名を提供
適宜、スタック名を入力します。今回は「CrossAccountObservability」としておきました。

スタックオプションの設定、アクセス許可
CloudFormation が使う IAM ロールを設定します。ここでは、事前に作成しておいた「CloudFormationRole」を選択しています。「CloudFormationRole」の作成は、次の手順で説明します。

CloudFormation が使う IAM ロールの作成
IAM のマネジメントコンソールの左メニューで「アクセス管理」-「ロール」を選択し、画面右上の「ロールを作成」ボタンを押します。
信頼されたエンティティを選択
「信頼されたエンティティタイプ」で「AWS のサービス」を選択し、「ユースケース」で「CloudFormation」を選択します。

許可を追加
ここでは、事前に作成しておいた「CloudFormationPolicy」を選択しています。 事前に作成しておいた IAM ポリシーの内容も以下に記載しておきます。

CloudFormationPolicy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "001",
"Effect": "Allow",
"Action": [
"oam:CreateLink",
"cloudwatch:Link"
],
"Resource": "*"
}
]
}
このスタックで作成されるのは、先ほどの Link のみのため、「oam:CreateLink」と「cloudwatch:Link」のみ権限があれば問題ありません。
※ oam は、「Amazon CloudWatch Observability Access Manager」を略して OAM とのことです。
名前、確認、および作成
確認画面で確認をし、問題がなければ画面下の「ロールを作成」ボタンを押して完了です。

ソースアカウントの CloudWatch の設定(続き)
では、ソースアカウントの CloudWatch の設定に戻ります。「確認して作成」画面で確認をし、問題がなければ画面下の「送信」ボタンを押して完了です。
CloudFormation の画面で確認
CloudFormation のマネジメントコンソールへ移動し、先ほどのスタック「CrossAccountObservability」を選択します。画面右の「リソース」タブを確認すると、Link が作成されていることがわかります。これで、クロスアカウントオブザーバビリティの設定は完了です。

モニタリングアカウントで CloudWatch のメトリクスを確認する
設定が完了したので、モニタリングアカウントに戻り、ちゃんと設定できているかを確認します。

CloudWatch のマネジメントコンソールで EC2 の CPUUtilization を確認
CloudWatch のマネジメントコンソールでそれぞれのアカウントにある EC2 の CPUUtilization を確認してみます。画面右下の「アカウントラベル」で「モニタリングアカウント」とそれ以外が見分けられるようになっています。
今回は、手順の「ソースアカウントを識別するのに役立つラベルを定義する」の箇所で「グローバルに一意の E メール」を選択しているのでソースアカウントの「アカウントラベル」は E メールになっています。

また、画面右上で「モニタリングアカウント」と表示されるようになっています。
まとめ
今回は「【Amazon Managed Grafana】CloudWatch の クロスアカウントオブザーバビリティと SAML 認証で複数メンバーアカウントを一括モニタリングする方法」全 2 回(予定)の第 1 回として、「CloudWatch のクロスアカウントオブザーバビリティ機能を利用する」の手順までを確認しました。
Amazon Managed Grafana のブログですが、手順が長く Amazon Managed Grafana がまだ出てきておらず、恐れ入ります…。ただ、今回の設定で既に他のアカウントの情報がモニタリングアカウントで取得できているので、Amazon Managed Grafana でも表示できることをイメージしていただけたのではないかと思います。
第 2 回は、OneLogin を使用して Amazon Managed Grafana でユーザー認証をするための設定と Amazon Managed Grafana で今回と同じ EC2 の CPUUtilization のグラフを表示する設定をおこなっていきたいと思います。
いや〜、CloudWatch のクロスアカウントオブザーバビリティ機能って本当にいいものですね!