クラスメソッドメンバーズ提供の CUR を保存先と異なるアカウントの QuickSight から参照する設定方法

クラスメソッドメンバーズ提供の CUR を保存先と異なるアカウントの QuickSight から参照する設定方法

2025.08.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

クラスメソッドでは、弊社サービスのクラスメソッドメンバーズに対応した AWS Cost and Usage Reports(CUR) を提供しています。その メンバーズ CUR のデータを他のアカウントの QuickSight から参照したくなりました。

本記事ではメンバーズ CUR を別アカウントの QuickSight から参照する手順を解説します。

MCUR−QS.png

前提条件

以下の環境が整っていることを前提とします。

  • データ共有元アカウント:111111111111(メンバーズ CUR 保有アカウント)
    • メンバーズ CUR の設定が完了している
  • データ参照先アカウント:222222222222(QuickSight 利用アカウント)
    • QuickSight がセットアップ済み

AWS 組織レベルで出力したメンバーズ CUR が S3 バケットに保存されている状態が前提です。

MCUR−QS-前提条件.png

QuickSight はサインアップまで済ませた状態が前提です。

MCUR−QS-前提条件(1).png

全体構成

本記事で構築するクロスアカウントアクセスの全体構成を以下に示します。2 つのアカウントでそれぞれ設定します。

MCUR−QS-1.png

  1. データ共有側アカウント(メンバーズ CUR 保有するアカウント)

    • Glue データカタログの共有設定
    • S3 バケットポリシーの追加
  2. データ参照側アカウント(QuickSight を利用するアカウント)

    • IAM ポリシーの作成とアタッチ
    • Athena でのデータソース設定
    • QuickSight でのデータセット作成

データ共有側アカウントの設定

Glue データカタログの共有設定

データ共有側アカウントで Glue データカタログの共有設定を行います。

MCUR−QS-A-1.png

AWS Glue コンソールでデータカタログの設定画面を開きます。Catalog settings から Permissons にポリシーを設定します。

Data_catalog_settings_-_AWS_Glue_Console.png

Principalは参照先アカウントの IAM ロールと QuickSight サービスロールを許可します。IAM ロールは Athena から動作確認用のため任意です。

Resourceはデータ共有側のアカウント ID と、Glue のカタログ情報を指定します。前提条件で紹介したブログ通りに作成すれば、データベース名、テーブル名は変更する必要ありません。

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Principal": {
				"AWS": [
					"arn:aws:iam::222222222222:role/athena-user-role",
					"arn:aws:iam::222222222222:role/service-role/aws-quicksight-service-role-v0"
				]
			},
			"Action": "glue:*",
			"Resource": [
				"arn:aws:glue:ap-northeast-1:111111111111:catalog",
				"arn:aws:glue:ap-northeast-1:111111111111:database/mcur",
				"arn:aws:glue:ap-northeast-1:111111111111:table/*"
			]
		}
	]
}

S3 バケットポリシーの追加

S3 バケットポリシーを設定します。

MCUR−QS-A-2.png

メンバーズ CUR データ格納先の S3 バケットにポリシーを追加します。既存のバケットポリシーはそのまま残して、以下の記述を追加してください。

Principalは参照先アカウントのスイッチロールして作業用する IAM ロールと QuickSight サービスロールを許可します。ここでも同様に IAM ロールは Athena から動作確認用のため任意です。

{
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::222222222222:role/service-role/aws-quicksight-service-role-v0",
            "arn:aws:iam::222222222222:role/athena-user-role"
        ]
    },
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::cur-data-bucket-111111111111/*"
},
{
    "Effect": "Allow",
    "Principal": {
        "AWS": [
            "arn:aws:iam::222222222222:role/service-role/aws-quicksight-service-role-v0",
            "arn:aws:iam::222222222222:role/athena-user-role"
        ]
    },
    "Action": "s3:ListBucket",
    "Resource": "arn:aws:s3:::cur-data-bucket-111111111111"
}

データ参照側アカウントの設定

IAM ポリシーの作成

データ参照側アカウントで IAM ポリシーを作成します。

MCUR−QS-B-1.png

ポリシー名は GlueDataCatalogCrossAccountPolicy とします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::cur-data-bucket-111111111111/*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::cur-data-bucket-111111111111"
        },
        {
            "Effect": "Allow",
            "Action": "glue:*",
            "Resource": [
                "arn:aws:glue:ap-northeast-1:111111111111:catalog",
                "arn:aws:glue:ap-northeast-1:111111111111:database/mcur",
                "arn:aws:glue:ap-northeast-1:111111111111:table/*"
            ]
        }
    ]
}

メンバーズ CUR を保存しているアカウント側の作業は以上です。

IAM ロールへのポリシーアタッチ

作成したポリシーを QuickSight サービスロールにアタッチします。私は動作確認のためスイッチロールしたロールから Athena を操作するため、IAM ロールにもアタッチしています。

  1. QuickSight サービスロール(aws-quicksight-service-role-v0
  2. Athena を操作するユーザーの IAM ロール(athena-user-role

aws-quicksight-service-role-v0___IAM___Global.png

Athena でデータソース作成・動作確認

別アカウントの Glue カタログへアクセスするため Athena コンソールでデータソースを作成します。

MCUR−QS-B-2(1).png

データソースの作成

まず Athena コンソールの「データソースとカタログ」を開きます。

データソースとカタログ___Athena___ap-northeast-1.png

「データソースを作成」をクリックし AWS Glue Data Catalog を選択します。

データソースの作成___データソースとカタログ___Athena___ap-northeast-1.png

データソース名とカタログ ID を入力します。

  • データソース名:mcur-from-other-account(任意)
  • カタログ ID:111111111111(データ共有元アカウント ID)

データソースの作成___データソースとカタログ___Athena___ap-northeast-1-2.png

作成したデータソースが一覧に表示されることを確認します。

mcur-from-other-account___データソースとカタログ___Athena___ap-northeast-1.png

クエリの実行テスト

作成したデータソースを使用して Athena クエリエディタでクエリを実行します。

Cursor_と_クエリエディタ___Athena___ap-northeast-1.png

以下のクエリで動作を確認します。メンバーズ CUR に保存されているのデータから請求期間情報を表示します。

SELECT
  distinct bill_billing_period_start_date
FROM
  mcur.cur
ORDER BY
  bill_billing_period_start_date desc;

結果が返ればクロスアカウントアクセスが正常に設定されています。

QuickSight での可視化

Athena での確認が完了したら QuickSight で可視化を設定します。

MCUR−QS-B-2.png

データセットの作成

QuickSight コンソールで新しいデータセットを作成します。Athena を選択します。

New_Data_Set-24.png

任意の名前でデータソースを作成します。

New_Data_Set-25.png

Athena で作成したデータソース名を選択すると、データベース、テーブル名が表示されます。テーブルを選択して上で「データ編集/プレビュー」を選択します。

New_Data_Set-26.png

データが表示されることを確認し保存して公開します。ここで表示されなければ権限周りか、タイムアウトなどが疑われます。エラーメッセージを確認して切り分けてください。

Data_Prep-2.png

カスタム SQL の使用

SPICE 容量に制限がある場合や、特定のデータのみ使う場合はカスタム SQL でデータを絞り込みます。

今回は検証のために特定のアカウントのみで良かったため、WHERE 句の line_item_usage_account_id でコスト分析したいアカウント ID を指定しました。

Data_Prep-3.png

SELECT
    *
FROM
    "mcur-from-other-account"."mcur"."cur"
WHERE
    line_item_usage_account_id IN ('333333333333', '444444444444')

分析の作成

データセット準備完了後クロスアカウントで取得したデータを使用して分析を作成します。

MCUR_analysis_と_ピクチャ.png

これで設定完了です。

まとめ

メンバーズ CUR を別アカウントの QuickSight から参照する設定を解説しました。

おわりに

権限設定で上手くいかず四苦八苦したので書き残しておきました。

QuickSight や、コスト分析(データ分析)なんもわからん、独自に分析してもその後の運用ができないという方は、Cost Intelligence Dashboards からはじめることをオススメします。

https://dev.classmethod.jp/articles/how-to-create-cid-with-mcur/

参考資料

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事