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
大まかな設定の流れ
- Cognitoのユーザープール作成、設定
- Grafanaの設定
- Grafana(Docker)の起動
設定手順
Cognitoのユーザープール作成、設定
1.Conitoの画面から、ユーザープールを作成するボタンをクリック → デフォルト値で作成していきます
2.アプリクライアントを作成します。アプリクライアント作成後に表示されるアプリクライアントIDをメモしておきます。Grafana設定時に利用します。
3.アプリクライントの設定を行います。Grafanaをlocalhostで動かす場合は、 http://localhost:3000/login/generic_oauth
となりますが、デプロイ先に応じてドメインを変更してください。なお、Grafanaは、OAuthフローのImplicit grantは対応していない*1ので、OAuthフローのチェックから外しています。
4.CognitoのホストされたUI(ログインページ)を利用するため、左側メニューのドメイン名をクリックして、任意のドメイン名を入力します。Grafanaの設定で、ここで設定したURLが必要となってくるため、メモをしておきます。
5.ログインするユーザーを作成します
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で作成したユーザーでログインできれば完了です。
参考リンク
Grafanaの設定ファイル、grafana.ini
に記述する auth_url
、token_url
、api_url
のURL確認
Amazon Cognito ユーザープール の Auth API リファレンス - Amazon Cognito
Grafanaの設定ファイル関連のStack Overflow stackoverflow.com
サインアップおよびサインインに Amazon Cognito のホストされた UI を使用する - Amazon Cognito