nikuyoshiのブログ

記事の内容については個人の見解であり、所属企業の意見を代表するものではありません

Grafana + Amazon Cognito (OAuth)の設定手順

前提

以下のリージョン、バージョンで確認してます。バージョン違いで異なる動作、設定となる可能性があります。

  • Cognito - 東京リージョン(ap-northeast-1)
  • Grafana 6.6.1
  • Docker 19.03.5
$ docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:22:34 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea
  Built:            Wed Nov 13 07:29:19 2019
  OS/Arch:          linux/amd64
  Experimental:     false

大まかな設定の流れ

  1. Cognitoのユーザープール作成、設定
  2. Grafanaの設定
  3. Grafana(Docker)の起動

設定手順

Cognitoのユーザープール作成、設定

1.Conitoの画面から、ユーザープールを作成するボタンをクリック → デフォルト値で作成していきます f:id:nikuyoshi:20200210152227p:plain

f:id:nikuyoshi:20200210152316p:plain

f:id:nikuyoshi:20200210152355p:plain

2.アプリクライアントを作成します。アプリクライアント作成後に表示されるアプリクライアントIDをメモしておきます。Grafana設定時に利用します。

f:id:nikuyoshi:20200210152723p:plain

f:id:nikuyoshi:20200210153128p:plain

3.アプリクライントの設定を行います。Grafanaをlocalhostで動かす場合は、 http://localhost:3000/login/generic_oauth となりますが、デプロイ先に応じてドメインを変更してください。なお、Grafanaは、OAuthフローのImplicit grantは対応していない*1ので、OAuthフローのチェックから外しています。

f:id:nikuyoshi:20200210154433p:plain

4.CognitoのホストされたUI(ログインページ)を利用するため、左側メニューのドメイン名をクリックして、任意のドメイン名を入力します。Grafanaの設定で、ここで設定したURLが必要となってくるため、メモをしておきます。

f:id:nikuyoshi:20200210154643p:plain

5.ログインするユーザーを作成します

f:id:nikuyoshi:20200210155140p:plain

f:id:nikuyoshi:20200210155322p:plain

Grafanaの設定

GrafanaをDockerで起動する前に設定を行います。設定ファイルはgrafana.iniで、任意の場所に作成して問題ありません。client_idについてはCognito設定の手順2番、auth_url, token_url, api_urlについては、Cognito設定の手順4番でメモしたものを利用します。なお、手順2番にて、クライアントシークレットを作成した場合は、client_secretの設定が必要になります。今回の手順についてはクライアントシークレットの作成のチェックボックスを入れてないので問題ありませんが、必要に応じて設定してください。

[auth.generic_oauth]
enabled = true
name = OAuth
allow_sign_up = true
client_id = {手順2番でメモしたものを記載}
client_secret = {手順2番でメモしたものを記載}
scopes = phone email profile aws.cognito.signin.user.admin openid
auth_url = https://{手順4番でメモしたものを記載}.auth.ap-northeast-1.amazoncognito.com/oauth2/authorize
token_url = https://{手順4番でメモしたものを記載}.auth.ap-northeast-1.amazoncognito.com/oauth2/token
api_url = https://{手順4番でメモしたものを記載}.auth.ap-northeast-1.amazoncognito.com/oauth2/userInfo

GrafanaをDockerで起動します

docker run -d -p 3000:3000 -v {任意のパス}/grafana.ini:/etc/grafana/grafana.ini --name grafana-oauth grafana/grafana

http://localhost:3000/にアクセスすると、次のような画面が表示されます。Sign in with OAuthをクリックして、Cognitoで作成したユーザーでログインできれば完了です。 f:id:nikuyoshi:20200210155745p:plain

参考リンク

Grafanaの設定ファイル、grafana.ini に記述する auth_urltoken_urlapi_urlのURL確認 Amazon Cognito ユーザープール の Auth API リファレンス - Amazon Cognito

Grafanaの設定ファイル関連のStack Overflow stackoverflow.com

aws.amazon.com

サインアップおよびサインインに Amazon Cognito のホストされた UI を使用する - Amazon Cognito

grafana.com

docs.docker.com

How To SSH Into A Running Docker Container And Run Commands