「Ubuntu 20.04にGrafanaをインストールしてセキュアにする方法」

著者は「Write for Donations」プログラムの一環として、寄付金を受け取るためにCOVID-19救済基金を選びました。

イントロダクション

Grafanaは、Prometheus、InfluxDB、Graphite、およびElasticSearchのようなデータソースからの複雑なデータを統合するオープンソースのデータ可視化および監視ツールです。Grafanaでは、アラート、通知、およびアドホックフィルタを作成することができます。また、組み込まれた共有機能により、チームメンバーとの協力が容易になります。

このチュートリアルでは、Grafanaをインストールし、SSL証明書とNginxリバースプロキシでセキュアにします。Grafanaをセットアップした後、GitHubを使用してユーザー認証を設定するオプションがあります。これにより、チーム権限をより良く整理することができます。

前提条件

このチュートリアルに従うためには、以下のものが必要です:

  • One Ubuntu 20.04 server set up by following the Initial Server Setup Guide for Ubuntu 20.04, including a non-root user with sudo privileges and a firewall configured with ufw.
  • A fully registered domain name. This tutorial uses your_domain throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.
  • The following DNS records set up for your server. You can follow the How To Add Domains article for details on how to add them if you are using Silicon Cloud.An A record with your_domain pointing to your server’s public IP address.
    An A record with www.your_domain pointing to your server’s public IP address.
  • Nginx set up by following the How To Install Nginx on Ubuntu 20.04 tutorial, including a server block for your domain.
  • An Nginx server block with Let’s Encrypt configured, which you can set up by following How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04.
  • Optionally, to set up GitHub authentication, you’ll need a GitHub account associated with an organization.

Step 1 — Grafanaのインストール

最初の手順では、Ubuntu 20.04 サーバーに Grafana をインストールします。Grafana は、公式ウェブサイトから直接ダウンロードするか、APT リポジトリを利用してインストールすることができます。このチュートリアルでは、APT リポジトリを使用することで Grafana のインストールとアップデート管理を簡単にするため、この方法を使用します。

wgetコマンドを使用してGrafanaのGPGキーをダウンロードし、その出力をapt-keyにパイプします。これにより、キーがAPTインストールの信頼されたキーのリストに追加され、GPGで署名されたGrafanaパッケージをダウンロードして検証することができるようになります。

  1. wget -q -O – https://packages.grafana.com/gpg.key | sudo apt-key add

 

このコマンドでは、オプションの-qはwgetのステータス更新メッセージを無効にし、-Oはダウンロードしたファイルを端末に出力します。これらの二つのオプションによって、ダウンロードしたファイルの内容のみがapt-keyにパイプラインされることが保証されます。

次に、APTソースにGrafanaのリポジトリを追加してください。

  1. sudo add-apt-repository “deb https://packages.grafana.com/oss/deb stable main”

 

パッケージリストを更新するためにAPTキャッシュをリフレッシュしてください。

  1. sudo apt update

 

インストールを進めてください。

  1. sudo apt install grafana

 

Grafanaをインストールしたら、systemctlを使用してGrafanaサーバーを起動します。

  1. sudo systemctl start grafana-server

 

次に、サービスのステータスを確認して、Grafanaが実行されていることを確認してください。

  1. sudo systemctl status grafana-server

 

あなたはこれに似た出力を受け取ります。 (Anata wa kore ni nita shuturyoku o uketorimasu.)

Output

● grafana-server.service – Grafana instance Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago Docs: http://docs.grafana.org Main PID: 15982 (grafana-server) Tasks: 7 (limit: 1137) …

この出力には、Grafanaのプロセスに関する情報が含まれており、その状態、メインプロセス識別子(PID)などが示されています。active(running)は、プロセスが正常に実行されていることを示しています。

最後に、サービスを自動的に起動させて、Grafanaが起動するようにしてください。

  1. sudo systemctl enable grafana-server

 

以下の出力を受け取ります。

Output

Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

これにより、systemdがGrafanaを自動起動するために必要なシンボリックリンクを作成したことが確認されました。

Grafanaは現在インストールされ、使用の準備が完了しています。次に、リバースプロキシとSSL証明書を使用してGrafanaへの接続を安全にする必要があります。

ステップ2 – リバースプロキシの設定

SSL証明書を使用することで、Grafanaへの接続とその往復が暗号化され、データが安全に保護されます。ただし、この接続を利用するためには、まずNginxをGrafanaのリバースプロキシとして再設定する必要があります。

「プレリクイジットでLet’s Encryptと一緒にNginxサーバーブロックを設定した時に作成したNginx設定ファイルを開いてください。どのテキストエディタでも構いませんが、このチュートリアルではnanoを使用します。」

  1. sudo nano /etc/nginx/sites-available/your_domain

 

以下のブロックを見つけてください。

「/etc/nginx/sites-available/your_domain」
...
	location / {
        try_files $uri $uri/ =404;
	}
...

NginxをSSL通信設定済みであり、またすべてのウェブトラフィックが既にNginxを経由してサーバーに送信されているため、Grafanaにすべてのリクエストを転送するようNginxに指示するだけです。Grafanaはデフォルトでポート3000で実行されています。

この場所ブロック内にある既存のtry_files行を削除し、以下のオプションで置き換えてください。

以下は日本語で再解釈したものです:
「/etc/nginx/sites-available/your_domain」
...
	location / {
	   proxy_set_header Host $http_host;
	   proxy_pass http://localhost:3000;
	}
...

これにより、プロキシが適切なポートにマッピングされ、ヘッダーにサーバー名が渡されます。

また、Grafana Live WebSocket接続が正常に機能するために、次のセクションをサーバーセクションの外に追加してください。

/あなたのドメインの/etc/nginx/sites-available
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    ...

その後、サーバーブロックに以下の場所セクションを追加してください。

以下の文を日本語で表現すると、次のようになります:
「/etc/nginx/sites-available/your_domain」
server {
...
        location /api/live {
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection $connection_upgrade;
           proxy_set_header Host $http_host;
           proxy_pass http://localhost:3000;
	 }
...

以下の文を日本語で表現すると、1つのオプションが必要です:
クライアントからプロキシサーバーには、ヘッダーのUpgradeとConnectionが送信されません。したがって、プロキシサーバーにクライアントのWebSocketへのプロトコル変更の意図を知らせるためには、これらのヘッダーを明示的に渡す必要があります。

最終的な構成は以下のようになります。

ご自身のドメインの/etc/nginx/sites-available/your_domain
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

	location / {
	   proxy_set_header Host $http_host;
	  	proxy_pass http://localhost:3000;
	}

	location /api/live {
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection $connection_upgrade;
           proxy_set_header Host $http_host;
           proxy_pass http://localhost:3000;
	}
}

作業が終わったら、nanoを使用している場合は、CTRL+X、Y、それからENTERを押してファイルを保存して閉じてください。

今、新しい設定をテストして、すべてが正しく構成されているかどうか確認してください。

  1. sudo nginx -t

 

以下の出力が提供されます。

Output

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

最後に、Nginxを再読み込みして変更を有効にします。

  1. sudo systemctl reload nginx

 

以下の日本語のパラフレーズを提供します:

ウェブブラウザをhttps://your_domainに向けることで、デフォルトのGrafanaログイン画面にアクセスできます。Grafanaにアクセスできない場合は、ファイアウォールがポート443のトラフィックを許可するように設定されているかを確認し、前の指示を再度実行してください。

Grafanaの接続が暗号化されることで、追加のセキュリティ対策を実装できるようになります。まずは、Grafanaのデフォルトの管理者の資格情報を変更することから始めましょう。

ステップ3 — 資格情報の更新

Grafanaのインストールはデフォルトで同じ管理者認証情報を使用するため、セキュリティを向上するためにログイン情報をできるだけ早く変更するのがベストプラクティスです。この手順では、認証情報を更新します。

最初に、ウェブブラウザからhttps://your_domainに移動してください。そうすると、Grafanaのロゴが表示され、メールアドレスまたはユーザー名とパスワードを入力するフォーム、ログインボタン、パスワードを忘れた場合のリンクが表示されるデフォルトのログイン画面が表示されます。

Grafana Login

「メールアドレスまたはユーザー名」と「パスワード」のフィールドに両方とも管理者を入力し、ログインボタンをクリックしてください。」

次の画面では、デフォルトのパスワードを変更して、アカウントをより安全にするように求められます。

Change Password

新しいパスワードと新しいパスワードの確認フィールドに使用したいパスワードを入力してください。

ここから新しい情報を保存するために「提出」をクリックするか、「スキップ」を押すことができます。スキップした場合、次回ログイン時にパスワードの変更を促されます。

Grafanaセットアップのセキュリティ強化のために、送信をクリックしてください。そうすると、Grafanaのダッシュボードへ移動します。

Home Dashboard

デフォルトの資格情報を変更することで、アカウントのセキュリティを確保しました。次に、他の人が許可なしに新しいGrafanaアカウントを作成できないよう、Grafanaの設定を変更します。

ステップ4 – Grafanaの登録と匿名アクセスの無効化

Grafanaは、訪問者が自分自身のユーザーアカウントを作成し、登録せずにダッシュボードをプレビューすることができるオプションを提供しています。Grafanaがインターネット経由でアクセスできない場合や、サービスの状態などの公開可能なデータと連携している場合には、これらの機能の使用を許可することができます。しかし、機密データを扱うためにGrafanaをオンラインで使用する場合、匿名アクセスはセキュリティ上の問題になる可能性があります。この問題を解決するために、Grafanaの設定にいくつかの変更を加えます。

Grafanaのメインの設定ファイルを編集するために、まずは開いてください。

  1. sudo nano /etc/grafana/grafana.ini

 

[ユーザー] の見出しの下にある [allow_sign_up] ディレクティブを見つけてください。

(Note: The translation assumes that the terms “allow_sign_up” and “[users]” are already known in the context.)

/etc/grafana/grafana.ini を日本語で言い換えると、「/etc/grafana/grafana.ini」です。
...
[users]
# disable user signup / registration
;allow_sign_up = true
...

trueを使用してこの指示を有効にすると、ログイン画面に「サインアップ」ボタンが追加され、ユーザーは自己登録してGrafanaにアクセスすることができます。

この指令を偽に設定することで、サインアップボタンが削除され、Grafanaのセキュリティとプライバシーが強化されます。

このディレクティブの「;」を行頭から削除し、オプションを偽に設定してください。

/etc/grafana/grafana.iniを日本語で言い換える。一つだけのオプションでお願いします。

– グラファナの設定ファイルである「/etc/grafana/grafana.ini」

...
[users]
# disable user signup / registration
allow_sign_up = false
...

次に、[auth.anonymous]の見出しの下で次の有効な指示を探します。

/etc/grafana/grafana.iniを日本語にネイティブに言い換える:
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

設定をtrueにすると、未登録のユーザーもダッシュボードにアクセスできます。しかし、falseに設定すると、登録済みのユーザーのみがダッシュボードにアクセスできるよう制限されます。

行の先頭の “;” を取り除き、オプションを false に設定することで、このディレクティブのコメントを解除してください。

以下の文を日本語で自然に言い換えてください(一つのオプションのみ):
/etc/grafana/grafana.iniグラファナの設定ファイル、/etc/grafana/grafana.ini

...
[auth.anonymous]
# enable anonymous access
enabled = false
...

ファイルを保存して、テキストエディタを終了してください。

変更を有効化するために、Grafanaを再起動してください。

  1. sudo systemctl restart grafana-server

 

グラファナのサービスステータスを確認して、すべてが正常に動作しているか確認してください。

  1. sudo systemctl status grafana-server

 

以前のように、出力はGrafanaがアクティブ(実行中)であることを報告します。

今、ウェブブラウザをhttps://your_domainに向けてください。サインアップ画面に戻るには、画面の左下にある自分のアバターにカーソルを移動して、表示される[サインアウト]オプションをクリックしてください。

ログアウトした後、サインアップボタンがないことと、ログイン認証情報を入力しなければログインできないことを確認してください。

この時点で、Grafanaは完全に設定され、使用の準備が整っています。次に、組織内のログインプロセスを簡素化するために、GitHubを通じて認証を行います。

(任意)ステップ5—GitHubのOAuthアプリケーションの設定

別のログイン方法として、GrafanaをGitHubと連携して認証することができます。これにより、承認されたGitHub組織のすべてのメンバーがログインアクセスを提供します。この方法は、複数の開発者が共同作業し、Grafana固有の資格情報を作成せずにメトリックにアクセスする必要がある場合に特に便利です。

自分の組織に関連付けられたGitHubアカウントでログインし、GitHubのプロフィールページに移動してください。

画面の左側にある自分の名前をクリックして、ドロップダウンメニューから組織を選択することで、設定のコンテキストを切り替えることができます。これにより、個人設定から組織設定に切り替わります。

次の画面で、組織のプロフィールを表示します。そこでは、組織の表示名、組織のメールアドレス、組織のURLなどの設定を変更することができます。

GitHubを通じてユーザーを認証するために、GrafanaはOAuthを使用しています。OAuthは、ローカルリソースへのリモートサードパーティのアクセスを許可するためのオープンスタンダードですので、GitHub内で新しいOAuthアプリケーションを作成する必要があります。

画面の左下にあるデベロッパー設定の下にあるOAuth Appsリンクをクリックしてください。

もしGitHub上であなたの組織に関連付けられているOAuthアプリケーションがまだ存在しない場合、”組織が所有するアプリケーションはありません”と表示されます。それ以外の場合、既にアカウントに接続されているOAuthアプリケーションのリストが表示されます。

新しいアプリケーションを登録するために、「新しいアプリケーションを登録」ボタンをクリックして続けてください。

次の画面で、Grafanaのインストールに関連する以下の詳細を入力してください。

  • Application name: This helps you distinguish your different OAuth applications from one another.
  • Homepage URL: This tells GitHub where to find Grafana. Type https://your_domain into this field, replacing your_domain with your domain.
  • Application Description: This provides a description of your OAuth application’s purpose.
  • Application callback URL: This is the address where users will be sent once successfully authenticated. For Grafana, this field must be set to https://your_domain/login/github.

GitHubでログインしているGrafanaユーザーは、最初の3つの欄に入力した値を表示するので、意味のある適切な情報を入力することを忘れずに考えてください。

完成後、フォームはこのように見えるでしょう。

GitHub Register OAuth Application

「登録アプリケーション」のボタンをクリックしてください。

あなたは今、新しいOAuthアプリケーションに関連付けられたクライアントIDとクライアントシークレットが記載されたページにリダイレクトされます。両方の値をメモしておいてください。セットアップを完了するために、それらをGrafanaのメイン設定ファイルに追加する必要があります。

Warning

警告:クライアントIDとクライアントシークレットは安全で非公開の場所に保管してください。攻撃の基盤として利用される可能性があるためです。

GitHubのOAuthアプリケーションを作成したら、Grafanaを再設定してGitHubを認証に使用する準備が整いました。

(オプション)ステップ6 — GrafanaをGitHub OAuthアプリとして設定する

GrafanaのセットアップにおけるGitHub認証を完了するために、Grafanaの設定ファイルにいくつかの変更を加える必要があります。

始めるには、メインのGrafanaの設定ファイルを開いてください。

  1. sudo nano /etc/grafana/grafana.ini

 

「[auth.github]」の見出しを探し、このセクションの”;allowed_domains =”と”;team_ids =”以外の行の先頭の;を削除して、コメントを解除してください。ただし、このチュートリアルでは、これらの行は変更されません。」

次に、以下の変更を行ってください。

  • Set enabled and allow_sign_up to true. This will enable GitHub Authentication and permit members of the allowed organization to create accounts themselves. Note that this setting is different from the allow_sign_up property under [users] that you changed in Step 4.
  • Set client_id and client_secret to the values you got while creating your GitHub OAuth application.
  • Set allowed_organizations to the name of your organization to ensure that only members of your organization can sign up and log in to Grafana.

完全な構成は次のようになります。

/etc/grafana/grafana.iniを日本語で言い換えると、「グラファナ設定ファイル(grafana.ini)は、/etc/grafana/ディレクトリにあります」となります。
...
[auth.github]
enabled = true
allow_sign_up = true
client_id = your_client_id_from_github
client_secret = your_client_secret_from_github
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
;allowed_domains =
;team_ids =
allowed_organizations = your_organization_name
...

現在、あなたはGrafanaにGitHubについて知っておくべきすべての情報を伝えました。セットアップを完了するためには、リバースプロキシによるリダイレクトを有効にする必要があります。これは、[server]セクションのroot_url値を設定することで行われます。

以下の文を日本語で自然な表現にパラフレーズする(1つのオプション):
「/etc/grafana/grafana.ini」
...
[server]
root_url = https://your_domain
...

設定を保存し、ファイルを閉じる。

その後、変更を有効にするためにグラファナを再起動してください。

  1. sudo systemctl restart grafana-server

 

最後に、サービスが稼働しているか確認してください。

  1. sudo systemctl status grafana-server

 

出力結果は、サービスがアクティブ(実行中)であることを示すでしょう。

新しい認証システムをテストするために、https://your_domainに移動してください。Grafanaに既にログインしている場合は、画面の左下隅にあるアバターログにマウスを重ね、名前の横に表示されるサブメニューで「ログアウト」をクリックしてください。

ログインページでは、元の「ログイン」ボタンの下に、GitHubのロゴが付いた「GitHubでサインインする」ボタンが表示される新しいセクションがあります。

Grafana Login page with GitHub

「GitHubでのサインインボタンをクリックすると、GitHubにリダイレクトされ、GitHubアカウントにサインインし、Grafanaへの承認意向を確認します。」

緑色の「あなたのGitHub組織を承認する」ボタンをクリックしてください。

Note

注意: GitHubアカウントが承認された組織のメンバーであり、GrafanaのメールアドレスがGitHubのメールアドレスと一致していることを確認してください。承認された組織のメンバーでないGitHubアカウントで認証を試みると、「ログインに失敗しました」というメッセージが表示され、必要な組織のメンバーではないことが伝えられます。

あなたは今、既存のGrafanaアカウントでログインされます。もし、ログインしたユーザーに既にGrafanaアカウントが存在しない場合、GrafanaはViewer権限を持つ新しいユーザーアカウントを作成し、新規ユーザーが既存のダッシュボードのみを使用できるようにします。

新しいユーザーのデフォルト権限を変更するには、メインのGrafana設定ファイルを編集してください。

  1. sudo nano /etc/grafana/grafana.ini

 

[ユーザー]見出しの下にauto_assign_org_roleディレクティブを見つけて、行の先頭の;を削除して設定をコメント解除してください。

以下の値の指示を設定する。

  • Viewer: can only use existing dashboards.
  • Editor: can use, modify, and add dashboards.
  • Admin: has permission to do everything.

このチュートリアルでは、オートアサインを閲覧者に設定します。

「/etc/grafana/grafana.ini」を日本語で言い換えると、「/etc/grafana/grafana.ini」となります。
...
[users]
...
auto_assign_org_role = Viewer
...

変更を保存したら、ファイルを閉じてGrafanaを再起動してください。

  1. sudo systemctl restart grafana-server

 

サービスの状態をチェックしてください。

  1. sudo systemctl status grafana-server

 

以前と同様に、ステータスはアクティブ(実行中)と表示されます。

この時点で、GitHub組織のメンバーがGrafanaに登録し、Grafanaのインストールを利用できるように完全に設定が完了しました。

結論

このチュートリアルでは、Grafanaをインストールし、設定し、セキュリティを強化し、組織のメンバーがGitHubを通じて認証する方法も学びました。

現在のGrafanaの拡張については、公式およびコミュニティが提供するダッシュボードやプラグインの一覧をご覧ください。一般的なGrafanaの使用方法について詳しく学ぶには、公式のGrafanaドキュメントを参照するか、他の監視チュートリアルをご覧ください。

コメントを残す 0

Your email address will not be published. Required fields are marked *