EC2上で動作させるGrafanaで、CloudWatchをデータソースとして追加する(IAMロール利用)


TL;DR

  • EC2上で動かしているGrafanaで、CloudWatch経由でメトリクスを取得したい
  • Credentialsを直接指定するのではなく、IAMロールでの指定としたい
  • IAMロールを使用する場合、Auth ProviderはCredentialsまたはAccess & secret keyを選び、profileAccess key IDSecret access keyは指定しない

Amazon CloudWatchをGrafanaのデータソースとする

Grafanaのドキュメントとしては、以下に記載があります。

CloudWatchにアクセスするための情報取得の優先順位としては、以下のようになります。

Grafana / AWS CloudWatch

If Auth Provider is Credentials file, Grafana try to get credentials by following order.

・Environment variables. (AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY)
・Hard-code credentials.
・Shared credentials file.
・IAM role for Amazon EC2.

AWS credentials

ここは、Credentialの情報を直接入力したりファイルに書いたりするのではなく、IAMロールを使ってやりたいところですね。

環境

利用するGrafana。

$ bin/grafana-server -v
Version 6.3.5 (commit: 67bad72, branch: HEAD)

OSの情報。

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

$ uname -a
Linux ip-xx-xx-xx-xx.ap-northeast-1.compute.internal 4.14.133-113.112.amzn2.x86_64 #1 SMP Tue Jul 30 18:29:50 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

IAMロールを作成してEC2にアタッチする

GrafanaからAmazon CloudWatchを利用する際に、作成が必要なIAMロール(ロールに付与すべきポリシー)は、ドキュメントに記載があります。

IAM Policies

まずは、こちらをEC2にアタッチしておきます。

Amazon CloudWatchをGrafanaのデータソースとして追加する

ここで、ついついAuth ProviderにARNを選んで、Assume Role ARNに作成したIAMロールのARNを入力したくなるのですが、これはうまくいきません。

Credentials fileまたはAccess & secret keyを選択します。

Credentials fileを選んだ場合は、Credentials profile nameを指定しない、

Access & secret keyを選んだ場合は、Access key IDおよびScret access keyを指定しないようにすれば、データソースに追加することができます。

ちょっとしたハマりどころ(?)なので、メモとして。