Grafana v10.4 の Amazon Managed Grafana ワークスペースで AWS IoT TwinMaker App plugin を設定してみた

Grafana v10.4 の Amazon Managed Grafana ワークスペースで AWS IoT TwinMaker App plugin を設定してみた

Clock Icon2024.10.12

こんにちは、製造ビジネステクノロジー部の若槻です。

今年の 5 月に Amazon Managed Grafana で Grafana バージョン 10.4 のサポートが開始されました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/05/amazon-managed-grafana-supports-version-10-4/

この v10.4 のワークスペースで、AWS IoT TwinMaker App plugin を設定しようとしたところ、データソースの設定メニューが増えていたり、設定方法によって必要な権限が変わっていたりしたので、その内容を共有します。

AWS IoT TwinMaker App plugin とは

AWS IoT TwinMaker App plugin は、AWS IoT TwinMaker Application Plugin for Grafana
とも呼ばれ、AWS IoT TwinMaker をデータソースとしたデジタルツインのダッシュボードを実装できる Grafana プラグインです。

https://grafana.com/grafana/plugins/grafana-iot-twinmaker-app/

Grafana v10.4 ではデータソース追加のメニューがアップデートされていた

さて Amazon Managed Grafana のワークスペースを Grafana v10.4 で構築し、AWS IoT TwinMaker App plugin の最新版をインストールしてデータソースを追加しようとしたところ、以前に試した時からデータソース設定のレフトサイドバーメニューが大きくアップデートされていました。

以前に Grafana v8.4 で試した時は、以下のように Configuration > Data Sources のメニューからデータソースを追加する UI でした。

今回の Grafana v10.4 では、レフトサイドバーから以前まで使えていた Configuration が無くなり、次の 2 つのメニューからデータソースを追加できるようになっていました。

  1. Connections > Data sources
  2. Apps > AWS Data Sources > Data sources

Amazon Managed Garafana で AWS 上のリソースにアクセスする場合の権限周りのおさらい

実際に新しいメニューからデータソースの追加を試す前に、Amazon Managed Garafana で AWS 上のリソースにアクセスする場合の権限周りのおさらいをしておきます。なぜここでおさらいをするかというと 2 つ目のメニュー Apps > AWS Data Sources > Data sources を試す際に本部分の理解が重要となってくるからです。

まず、AWS 上のリソースにアクセスが行われる際には次の 2 種類のロールが関わってきます。

  • Grafana ワークスペース実行ロール
  • 認証プロバイダー用ロール(ダッシュボード実行ロール)

それぞれの特徴をまとめると次のようになります。Grafana ワークスペース実行ロールは Grafana ワークスペース自体から AssumeRole され、さらに認証プロバイダー用ロールはデータソースへのアクセス権限を持ち、Grafana ワークスペース実行ロールから AssumeRole される、という使われ方となります。

ロール種類 権限ポリシー 信頼ポリシー ロールの設定箇所
Grafana ワークスペース実行ロール 必須ではない Grafana ワークスペース自体のサービスプリンシパルによる sts:AssumeRole Grafana ワークスペース
認証プロバイダー用ロール データソースへのアクセス権限 Grafana ワークスペース実行ロールによる sts:AssumeRole データソース

それぞれの権限ポリシーおよび信頼ポリシーの設定例を以下に示します。

Grafana ワークスペース実行ロールの信頼ポリシー設定例
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "grafana.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:SourceArn": "arn:aws:grafana:ap-northeast-1:XXXXXXXXXXXX:/workspaces/*"
                }
            }
        }
    ]
}
認証プロバイダー用ロールの権限ポリシー設定例
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::<Bucket Name>",
                "arn:aws:s3:::<Bucket Name>/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "iottwinmaker:Get*",
                "iottwinmaker:List*"
            ],
            "Resource": [
                "arn:aws:iottwinmaker:ap-northeast-1:XXXXXXXXXXXX:workspace/CookieFactory",
                "arn:aws:iottwinmaker:ap-northeast-1:XXXXXXXXXXXX:workspace/CookieFactory/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": "iottwinmaker:ListWorkspaces",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "kinesisvideo:GetDataEndpoint",
                "kinesisvideo:GetHLSStreamingSessionURL"
            ],
            "Resource": [
                "arn:aws:kinesisvideo:ap-northeast-1:XXXXXXXXXXXX:stream/cookiefactory_mixerroom_camera_01/*",
                "arn:aws:kinesisvideo:ap-northeast-1:XXXXXXXXXXXX:stream/cookiefactory_mixerroom_camera_02/*"
            ],
            "Effect": "Allow"
        }
    ]
}
認証プロバイダー用ロールの信頼ポリシー設定例
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXXXXX:role/CookieFactory-GrafanaWorkspaceExecutionRole498ACDE0-2R0XaMHQAVyd"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

そして Grafana ワークスペース実行ロールは、Amazon Managed Grafana のマネジメントコンソールで指定します。

一方で認証プロバイダー用ロールは、Grafana へのログイン後にアクセスできるデータソース設定メニューから指定をします。

2 つのロールの使われ方をシステム構成図上に示すと次のようになります。

上記図での流れを説明すると次のようになります。

  1. ワークスペースが、Grafana ワークスペース実行ロールに対して AssumeRole を行う
  2. Grafana ワークスペース実行ロールの権限が、認証プロバイダー用ロールに対する、AssumeRole を行う
  3. 認証プロバイダー用ロールが、各種 AWS サービスに対するアクセス権限を持つ

以上が権限周りのおさらいとなります。

Connections > Data sources でのデータソース追加

1 つ目の Connections > Data sources からデータソースを追加する方法です。

UI は以下のようになっています。データソースを追加してみます。

Add data source をクリック。

TwinMaker で検索をするとヒットするので選択。

認証プロバイダー用ロールとデータソースのリージョンを指定して、Save & test をクリック。

すると Missing WorkspaceID configuration というエラーが出るがワークスペースが選択可能になるので選択。

再度 Save & test をクリック。

CookieFactory という IoT TwinMaker ワークスペースをデータソースとして追加できました。

レフトサイドバーのメニューは変わっているが、データソース設定の UI はほぼ変わっていなかった

ここで、Grafana v10.4 のワークスペースに以前試したことのある AWS IoT TwinMaker App plugin の v1.10.1 をインストールしてみます。

すると、レフトサイドバーメニューはそのままで、Connections > Data sources 内のデータソース設定メニューはほぼ変わっていないことがわかりました。

一方でレフトサイドバーメニューの大きな UI 変更はやはりプラグインではなく Grafana 側のバージョンアップによるもののようです。

Apps > AWS Data Sources > Data sources でのデータソース追加

次に 2 つ目の Apps > AWS Data Sources > Data sources からデータソースを追加する方法です。

UI は以下のようになっています。Grafana v8 までは無かったまったく新しいメニューですね。ここからデータソースを追加してみます。

最初に結論を述べると、Grafana ワークスペース実行ロールの権限ポリシーを次のように設定する必要があります。Connections > Data sources から設定する場合は不要でしたが、Apps > AWS Data Sources > Data sources から設定する場合はこの権限が必要なのです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "iottwinmaker:ListWorkspaces",
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "iottwinmaker:GetWorkspace",
                "iottwinmaker:ListTagsForResource"
            ],
            "Resource": "arn:aws:iottwinmaker:ap-northeast-1:XXXXXXXXXXXX:workspace/CookieFactory",
            "Effect": "Allow"
        }
    ]
}

さらに IoT TwinMaker ワークスペースの TwinMakerDashboardRole タグに認証プロバイダー用ロールの Arn を設定しておく必要があります。このタグが ListTagsForResource アクションによりルックアップされて取得されます。

実際に Apps > AWS Data Sources > Data sources からデータソースを追加してみます。

Service で TwinMaker を選択。

Regions で TwinMaker ワークスペースが作成されているリージョン(今回は US East)を選択。注意点として、ここで Tokyo (ap-northeast-1) は選択肢にありません。よって東京リージョンのリソースに接続したい場合は Apps > AWS Data Sources > Data sources からデータソースの設定は行えないという制限が現状ではあります。

リージョンを選択するとデータソースとして接続可能な IoT TwinMaker ワークスペースと、認証プロバイダー用ロールのペアが取得できます。この認証プロバイダー用ロールの値は IoT TwinMaker ワークスペースの TwinMakerDashboardRole タグから取得されています。

このワークスペースと認証プロバイダー用ロールの取得の流れを図で示すと次のようになります。

チェックを入れて Add 1 data source をクリック。

すると Data source が追加された。Go to settings をクリック。

Connections > Data sources に遷移し、接続に必要な項目が埋められた状態でデータソースの設定画面が開く。あとは前章と同じ手順を行えばデータソースの設定が完了します。

このように Apps > AWS Data Sources > Data sources メニューは、データソースの設定自体を行うのではなく、データソースの設定に必要な情報を簡単に取得するためのメニューという位置づけになっているようです。

トラブルシュート

権限ポリシー不足の場合

ワークスペース実行ロールに必要な権限ポリシーが設定されていない場合は、次のような警告が表示されて手順を進めることができなくなります。

There were some errors while fetching your AWS information. Take a look carefully, please.
AccessDeniedException: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/CdkSampleStack-GrafanaExecutionRole526A01F0-4qvLiAQylQlZ/AWSGrafana_ASSUME_ROLE_SESSION-1728035695855 is not authorized to perform: iottwinmaker:ListWorkspaces on resource: * because no identity-based policy allows the iottwinmaker:ListWorkspaces action

必要な権限ポリシーが設定されているか確認しましょう。

IoT TwinMaker ワークスペースに TwinMakerDashboardRole タグが未設定の場合

IoT TwinMaker ワークスペースに TwinMakerDashboardRole タグが未設定の場合は、ワークスペースは取得されますが、認証プロバイダー用ロールは取得されず、また一覧から選択もできなくなります。よってデータソースとしての追加もできません。

IoT TwinMaker ワークスペースにタグが設定されているか確認しましょう。

すべての IoT TWinMaker ワークスペースに対するアクセス権限が無い場合

指定したリージョンに複数の IoT TWinMaker ワークスペースがあり、すべてのワークスペースに対するアクセス権限がワークスペース実行ロールで不足している場合は、次のような警告が表示されて手順を進めることができなくなります。

There were some errors while fetching your AWS information. Take a look carefully, please.
AccessDeniedException: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/CdkSampleStack-GrafanaExecutionRole526A01F0-4qvLiAQylQlZ/AWSGrafana_ASSUME_ROLE_SESSION-1728039119888 is not authorized to perform: iottwinmaker:ListTagsForResource on resource: arn:aws:iottwinmaker:us-east-1:XXXXXXXXXXXX:workspace/CookieFactory2 because no identity-based policy allows the iottwinmaker:ListTagsForResource action

不要な IoT TwinMaker ワークスペースは削除するか、ワークスペース実行ロールに必要な権限ポリシー側を設定するようにしましょう。

おわりに

今回は Amazon Managed Grafana の v10.4 で AWS IoT TwinMaker App plugin を設定する際のデータソース設定メニューの変更点について紹介しました。

以前までの UI を踏襲している「Connections > Data sources」と、新しく追加された「Apps > AWS Data Sources > Data sources」という 2 つのメニューからデータソースを追加できるようになっており、それぞれのメニューで必要な権限や事前設定が異なることがわかりました。

後者は、IoT TwinMaker ワークスペースや認証プロバイダー用ロールの情報を自動取得できるのは便利ですが、追加のタグの設定や権限が必要となるため、設定時には注意が必要です。

参考

https://dev.classmethod.jp/articles/aws-iot-twinmaker-getting-started/

https://dev.classmethod.jp/articles/creating-aws-iot-twinmaker-sample-cookie-factory-resources-with-aws-cdk/

https://dev.classmethod.jp/articles/aws-iot-twinmaker-grafana-dashboard-integration-iam-permissions/

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.