【Amazon Managed Grafana】CloudWatch の クロスアカウントオブザーバビリティと SAML 認証で複数メンバーアカウントを一括モニタリングする方法(1)

記事タイトルとURLをコピーする

Amazon Managed Grafana の構成図

 こんにちは、テクニカルサポート課の坂本(@t_sakam)です。今回は、Amazon Managed Grafana に関するブログです。
 
 1 つの Amazon Managed Grafana のワークスペースで複数のアカウントの情報をまとめて確認したいパターンがあると思います。管理アカウントの権限をもっている場合は別の方法がありますが、今回は、管理アカウントを利用できない環境で、複数のメンバーアカウントの CloudWatch のメトリクスの情報を表示する方法を確認していきます。

 実現するためのポイントは以下の 2 つになります。
 

  1. CloudWatch のクロスアカウントオブザーバビリティ機能を利用する
  2. Grafana のワークスペースへのログインは SAML 認証を利用する

Point 1 CloudWatch のクロスアカウントオブザーバビリティ機能を利用する

 まずは、CloudWatch のクロスアカウントオブザーバビリティ機能を利用し、モニタリング用のアカウントで、他のアカウントの CloudWatch のメトリクスの情報を見られるようにします。

docs.aws.amazon.com

Point 2 Grafana のワークスペースへのログインは SAML 認証を利用する

 SAML の他に IAM Identity Center を利用する方法がありますが、その場合は、管理アカウントが必要になりますので、メンバーアカウントしか利用できない環境の場合は、SAML 認証を選択することになります。

docs.aws.amazon.com

 それでは、早速手順を確認していきます。今回、手順が長いため、ブログを 2 つに分けたいと思います。今回のブログでは、主に Point 1 の「CloudWatch のクロスアカウントオブザーバビリティ機能を利用する」の手順までを確認したいと思います。

CloudWatch のクロスアカウントオブザーバビリティの設定

 まずは、CloudWatch のクロスアカウントオブザーバビリティの設定をしていきます。手順が長くなってしまうので、今回は、モニタリング用のメンバーアカウント A ともう一つのメンバーアカウントであるアカウント B、の 2 つのアカウントのみ設定をおこないます。確認するアカウントを追加したい場合は、同じ手順で追加する流れになります。

モニタリング用のアカウントの CloudWatch の設定

 まずは、モニタリング用のアカウントで CloudWatch の設定をおこなっていきます。

Amazon Managed Grafana の構成図(モニタリング用のアカウント)
モニタリング用のアカウントで CloudWatch の設定

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

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

モニタリングアカウント設定

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

CloudWatch のマネジメントコンソール
画面中央左の「設定」を選択

データを選択

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

CloudWatch のマネジメントコンソール
「メトリクス」にチェックを入れる

ソースアカウントを一覧表示

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

CloudWatch のマネジメントコンソール
ソースアカウント B の AWS のアカウント ID を入力

ソースアカウントを識別するのに役立つラベルを定義する

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

CloudWatch のマネジメントコンソール
「グローバルに一意の E メール」を選択

アカウントをリンクするためのリソース

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

CloudWatch のマネジメントコンソール
「アカウントをリンクするためのリソース」を選択

ソースアカウントをリンクする方法を決定

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

CloudWatch のマネジメントコンソール
「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 つのシンクを設定できます。各シンクは、そのシンクがあるモニターリングアカウントによって管理されます。オブザーバビリティリンクは、ソースアカウントとモニターリングアカウントの間に確立されたリンクを表すリソースです。リンクはソースアカウントによって管理されます。

Grafana の構成図(Sink と Link)
Sink(モニタリングアカウントのアタッチメントポイント)と Link(ソースアカウントのリンクを表すリソース)

ソースアカウントの CloudWatch の設定

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

Amazon Managed Grafana の構成図(ソースアカウント B)
ソースアカウント B で CloudWatch の設定

CloudFormation でスタックを作成

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

CloudFormation のマネジメントコンソール
「新しいリソースを使用(標準)」を選択

スタックを作成

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

CloudFormation のマネジメントコンソール
ダウンロードしたテンプレートをアップロード

スタックの詳細を設定、スタック名を提供

 適宜、スタック名を入力します。今回は「CrossAccountObservability」としておきました。

CloudFormation のマネジメントコンソール
スタック名を入力

スタックオプションの設定、アクセス許可

 CloudFormation が使う IAM ロールを設定します。ここでは、事前に作成しておいた「CloudFormationRole」を選択しています。「CloudFormationRole」の作成は、次の手順で説明します。

CloudFormation のマネジメントコンソール
CloudFormation が使う IAM ロールを選択

CloudFormation が使う IAM ロールの作成

 IAM のマネジメントコンソールの左メニューで「アクセス管理」-「ロール」を選択し、画面右上の「ロールを作成」ボタンを押します。

信頼されたエンティティを選択

 「信頼されたエンティティタイプ」で「AWS のサービス」を選択し、「ユースケース」で「CloudFormation」を選択します。

IAM のマネジメントコンソール
「ユースケース」で「CloudFormation」を選択

許可を追加

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

IAM のマネジメントコンソール
許可を追加で「CloudFormationPolicy」を選択

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 とのことです。

名前、確認、および作成

 確認画面で確認をし、問題がなければ画面下の「ロールを作成」ボタンを押して完了です。

IAM のマネジメントコンソール
確認画面で問題がなければ「ロールを作成」ボタンを押して完了

ソースアカウントの CloudWatch の設定(続き)

 では、ソースアカウントの CloudWatch の設定に戻ります。「確認して作成」画面で確認をし、問題がなければ画面下の「送信」ボタンを押して完了です。

CloudFormation の画面で確認

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

CloudFormation のマネジメントコンソール
CloudFormation で Link が作成されていることを確認する

モニタリングアカウントで CloudWatch のメトリクスを確認する

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

Amazon Managed Grafana の構成図(モニタリング用のアカウント)
モニタリングアカウントで確認する

CloudWatch のマネジメントコンソールで EC2 の CPUUtilization を確認

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

CloudWatch のマネジメントコンソール
それぞれのアカウントの EC2 の CPUUtilization が確認できる

 また、画面右上で「モニタリングアカウント」と表示されるようになっています。

まとめ

 今回は「【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 のクロスアカウントオブザーバビリティ機能って本当にいいものですね!
 

坂本 知子(記事一覧)

サーバーワークスのこけしの人(@t_sakam)。2024 Japan AWS Ambassadors、2020 APN AWS Top Engineers。

"; doc.innerHTML = entry_notice + doc.innerHTML; }
' } }) e.innerHTML = codeBlock; });