「Ubuntu 18.04でのGrafanaのインストールとセキュリティの確保方法」
作者は、Write for Donationsプログラムの一環として、寄付を受けるために/dev/colorを選択しました。
はじめに
Grafanaは、Prometheus、InfluxDB、Graphite、ElasticSearchなどのソースからの複雑なデータを統合するオープンソースのデータ可視化および監視ツールです。Grafanaを使用すると、データに対してアラート、通知、およびアドホックフィルタを作成することができます。また、組み込みの共有機能を通じてチームメートとのコラボレーションも容易になります。
このチュートリアルでは、Grafanaをインストールし、SSL証明書とNginxリバースプロキシでセキュリティを強化します。Grafanaを設定した後、GitHubを介してユーザー認証を設定するオプションがあり、チームの権限をより効果的に管理することができます。
必要条件 (Hitsuyō jōken)
このチュートリアルに従うためには、次のものが必要です。
- One Ubuntu 18.04 server set up by following the Initial Server Setup Guide for Ubuntu 18.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 How To Set Up a Host Name with Silicon Cloud for details on how to add them.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 18.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 18.04.
- Optionally, to set up GitHub authentication, you’ll need a GitHub account associated with an organization.
ステップ1 — Grafanaのインストール
この最初のステップでは、Ubuntu 18.04 サーバーに Grafana をインストールします。公式ウェブサイトから直接ダウンロードする方法や、APTリポジトリ経由でインストールする方法の2つがありますが、このチュートリアルではAPTリポジトリを使用します。APTリポジトリはGrafanaのインストールとアップデートの管理が容易になるため、この方法を使用します。
公式のUbuntu 18.04パッケージリポジトリにはGrafanaが利用可能ですが、そこにあるGrafanaのバージョンは最新ではない場合がありますので、Grafanaの公式リポジトリを使用してください。
wgetを使用してGrafanaのGPGキーをダウンロードし、その出力をapt-keyにパイプします。これにより、APTインストールの信頼済みキーリストにキーが追加され、GPG署名されたGrafanaパッケージをダウンロードして検証することができます。
- wget -q -O – https://packages.grafana.com/gpg.key | sudo apt-key add –
このコマンドでは、オプション-qはwgetのステータス更新メッセージをオフにし、-Oはダウンロードしたファイルをターミナルに出力します。これらの2つのオプションにより、ダウンロードしたファイルの内容のみがapt-keyにパイプラインされることが保証されます。
次に、APTソースにGrafanaリポジトリを追加します。
- sudo add-apt-repository “deb https://packages.grafana.com/oss/deb stable main”
パッケージリストを更新するために、APTキャッシュをリフレッシュしてください。
- sudo apt update
次に、GrafanaがGrafanaリポジトリからインストールされることを確認してください。
- apt-cache policy grafana
前のコマンドの出力には、インストールする Grafana のバージョンと、パッケージを取得する場所が表示されます。リストの先頭にあるインストール候補が、公式 Grafana リポジトリ https://packages.grafana.com/oss/deb から提供されるものであることを確認してください。
grafana: Installed: (none) Candidate: 9.1.3 Version table: 9.1.3 500 500 https://packages.grafana.com/oss/deb stable/main amd64 Packages …
インストールを進めることができます。
- sudo apt install grafana
Grafanaがインストールされたら、systemctlを使用してGrafanaサーバーを起動してください。
- sudo systemctl start grafana-server
次に、Grafanaが稼働しているかをサービスの状態を確認することで確認してください。
- sudo systemctl status grafana-server
あなたはこのような結果を受け取ることになります。
● grafana-server.service – Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-06 09:35:00 UTC; 5s ago Docs: http://docs.grafana.org Main PID: 22886 (grafana-server) Tasks: 5 (limit: 546) …
この出力には、Grafanaのプロセスに関する情報が含まれており、ステータス、メインプロセスの識別子(PID)などがわかります。active (running) は、プロセスが正常に実行されていることを示しています。
最後に、サービスを自動的に起動時にGrafanaを開始できるようにします。
- sudo systemctl enable grafana-server
次の出力を受け取ることになります。 (Tsugi no shutsuryoku o uketoru koto ni narimasu.)
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のリバースプロキシとして再構成する必要があります。
「Prerequisites」の手順で、Let’s Encryptを使用してNginxサーバーブロックを設定した際に作成したNginxの設定ファイルを開いてください。テキストエディタはどれでも使用できますが、このチュートリアルではnanoを使用します。
- sudo nano /etc/nginx/sites-available/your_domain
以下のブロックを探してください。
...
location / {
try_files $uri $uri/ =404;
}
...
すでにNginxがSSLで通信するように設定されており、すべてのWebトラフィックがすでにNginxを通過しているため、Grafanaに対するすべてのリクエストを転送するためにNginxに指示するだけで十分です。Grafanaはデフォルトでポート3000で実行されます。
この場所ブロック内の現在のtry_files行を削除して、以下のオプションに置き換えてください。
...
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
}
...
これによって、プロキシは適切なポートにマッピングされ、ヘッダにサーバー名が渡されます。
また、Grafana LiveのWebSocket接続が正常に機能するためには、サーバーセクションの外に以下のセクションを追加してください。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
...
以下のような場所のセクションを追加してください。 (I apologize, I cannot provide a translation in Japanese as it goes beyond my current capabilities.)
...
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;
}
...
クライアントからプロキシサーバーには、ヘッダーの「Upgrade」と「Connection」は送信されません。したがって、プロキシサーバーがクライアントのWebSocketへのプロトコル変更の意図を知るためには、これらのヘッダーを明示的に渡す必要があります。
最終的な配置はこのようになるべきです。 (Saishū-teki na haichi wa kono yō ni narubekidesu.)
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
...
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;
}
}
...
Note
作業が完了したら、nano を使用している場合は、CTRL+X を押してから Y を押し、最後にENTER キーを押してファイルを保存し、閉じてください。
今、すべてが正しく設定されていることを確認するために、新しい設定をテストしてください。
- sudo nginx -t
以下の出力を受け取ります。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
最後に、Nginxを再読み込みして変更を有効化してください。
- sudo systemctl reload nginx
ウェブブラウザをhttps://your_domainに向けることで、デフォルトのGrafanaログイン画面にアクセスできます。Grafanaにアクセスできない場合は、ファイアウォールがポート443のトラフィックを許可していることを確認し、前の手順を再追跡してください。
Grafanaの接続が暗号化されることで、追加のセキュリティ対策を実装することができます。最初に、Grafanaのデフォルト管理者認証情報を変更してください。
ステップ3 – 資格情報の更新
すべてのGrafanaのインストールでは、デフォルトで同じ管理者の資格情報が使用されているため、できるだけ早くログイン情報を変更することがベストプラクティスです。この手順では、セキュリティを向上させるために資格情報を更新します。
最初に、ウェブブラウザからhttps://your_domainに移動してください。すると、デフォルトのログイン画面が表示されます。そこにはGrafanaのロゴ、メールアドレスまたはユーザー名とパスワードを入力するためのフォーム、ログインボタン、そしてパスワードを忘れた場合のリンクが表示されます。
以下の文を日本語で自然に言い換えてください。オプションは1つだけで結構です:
「メールアドレスまたはユーザー名、パスワード欄の両方に「admin」と入力し、その後ログインボタンをクリックしてください。」
次の画面では、デフォルトのパスワードを変更してアカウントのセキュリティを向上させるように求められます。
新しいパスワードと確認用の新しいパスワードのフィールドに使用したいパスワードを入力してください。
ここから、「送信」ボタンをクリックして新しい情報を保存するか、「スキップ」ボタンを押してこのステップをスキップすることができます。スキップした場合、次回ログイン時にパスワードの変更を求められます。
Grafanaセットアップのセキュリティを向上させるために、保存をクリックしてください。そうすると、Grafanaへのウェルカムページに戻ります。
現在、デフォルトの資格情報を変更することにより、アカウントを確保しました。次に、Grafanaの設定を変更し、誰もあなたの許可なしに新しいGrafanaアカウントを作成できないようにします。
ステップ4—Grafanaの登録と匿名アクセスの無効化
Grafanaは、訪問者がユーザーアカウントを作成し、登録せずにダッシュボードをプレビューすることができるオプションを提供しています。Grafanaがインターネット経由でアクセスできない場合やサービスの状態など公開可能なデータと連動している場合は、これらの機能を許可することが望ましいかもしれません。ただし、Grafanaをオンラインで利用して機密データを扱う場合、匿名アクセスはセキュリティ上の問題になり得ます。この問題を解決するには、Grafanaの設定に一部変更を加えてください。
Grafanaのメイン設定ファイルを編集するために、まずは開いてください。
- sudo nano /etc/grafana/grafana.ini
「[users]」の見出しの下にある「allow_sign_up」ディレクティブを探してください。
/etc/grafana/grafana.iniを日本語で言い換えると、次のようになります。
・「/etc/grafana/grafana.ini」
...
[users]
# disable user signup / registration
;allow_sign_up = true
...
trueを設定することで、この指示を有効にすると、ログイン画面にサインアップボタンが追加され、ユーザーは自身を登録してGrafanaにアクセスすることができます。
このディレクティブを “false” に設定することで、サインアップボタンが削除され、Grafanaのセキュリティとプライバシーが強化されます。
このディレクティブをコメントアウトするために、行の先頭にある;を削除し、その後オプションをfalseに設定してください。
“/etc/grafana/grafana.ini” を日本語で言い換えると、以下のようになります:
「/etc/grafana/grafana.ini」
...
[users]
# disable user signup / registration
allow_sign_up = false
...
次に、[auth.anonymous]の見出しの下で、次の有効な指示を探してください。
グラフェーナの設定ファイルである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を再起動してください。
- sudo systemctl restart grafana-server
グラファナのサービス状態を確認して、すべてが正常に動作しているかを検証してください。
- sudo systemctl status grafana-server
以前と同様に、出力はGrafanaがアクティブ(動作中)であると報告します。
今、ウェブブラウザを https://your_domain に向けてください。サインアップ画面に戻るには、画面の左下にあるアバターにカーソルを移動し、表示されるサインアウトオプションをクリックしてください。
ログアウトした後、サインアップボタンがないことを確認し、ログイン情報を入力しなければログインできないことを確認してください。
この時点で、Grafanaは完全に設定されており、使用する準備ができています。次に、GitHubを通じて認証することにより、組織のログインプロセスを簡略化することができます。
(任意)ステップ5 — GitHub OAuthアプリの設定
別のアプローチとして、GrafanaをGitHubで認証するように設定することができます。これにより、認可されたGitHub組織のすべてのメンバーがログインアクセスを提供します。これは、複数の開発者がGrafana固有の資格情報を作成せずにメトリックにアクセスし、共同作業を行う場合に特に便利です。
最初に、所属する組織に関連づけられたGitHubアカウントにログインし、その後GitHubのプロフィールページに移動してください。
画面の左側にあるナビゲーションメニューの組織設定の下に、組織名をクリックしてください。
次の画面で、団体のプロフィールが表示されます。そこで、団体の表示名、団体のメールアドレス、団体のURLなどの設定を変更することができます。
Grafanaでは、GitHubを介してユーザーを認証するために、OAuth(ローカルリソースへのリモートサードパーティへのアクセスを許可するためのオープン標準)を使用していますので、GitHub内で新しいOAuthアプリケーションを作成する必要があります。
画面の左下にある開発者設定の下にあるOAuthアプリリンクをクリックしてください。
もし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つのフィールドに入力した値を表示しますので、意味のある適切な情報を入力してください。
完成したら、フォームはこんな感じになります。 (Kansei shitara, fōmu wa konna kanji ni narimasu.)
「登録アプリボタン」をクリックしてください。
以下の要件を満たす、新しいOAuthアプリケーションに関連するクライアントIDとクライアントシークレットが記載されているページにリダイレクトされます。セットアップを完了するために、Grafanaのメイン設定ファイルにこれらの値を追加する必要がありますので、両方の値をメモしてください。
Warning
GitHubのOAuthアプリケーションを作成したら、GrafanaをGitHubの認証に使用するように再構成する準備が整いました。
(オプション)ステップ6 – GitHub OAuthアプリとしてのGrafanaの設定
Grafanaの設定を完了するために、GitHub認証を行うためのいくつかの変更をGrafanaの設定ファイルに行います。
最初に、メインのGrafana設定ファイルを開いてください。
- sudo nano /etc/grafana/grafana.ini
[auth.github] ヘッディングを探し、このセクションの全ての行の先頭の ; を削除してコメント解除してください。ただし、allowed_domainsとteam_ids=は変更しないでください。
次に、OAuthアプリケーションのclient_idとclient_secretの値を使用して、GrafanaをGitHubと連携するように設定してください。
- 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 than 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 into Grafana.
完全な構成は以下のようになります: (Kanzen na kōsei wa ika no yō ni narimasu)
...
[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の値を設定することによって行われます。
「/etc/grafana/grafana.ini」
...
[server]
root_url = https://your_domain
...
設定を保存してファイルを閉じてください。
次に、変更を有効にするためにGrafanaを再起動してください。
- sudo systemctl restart grafana-server
最後に、サービスが稼働していることを確認してください。
- sudo systemctl status grafana-server
出力は、サービスがアクティブ(実行中)であることを示します。
新しい認証システムをテストするために、https://your_domain に移動してください。すでにGrafanaにログインしている場合は、画面の左下のアバターログインにマウスを重ね、名前の横に表示されるサブメニューで「サインアウト」をクリックしてください。
ログインページでは、元の「ログイン」ボタンの下に、GitHubのロゴを含む「GitHubでサインイン」ボタンがある新しいセクションが表示されます。
GitHubにアクセスするには、「GitHubでサインイン」のボタンをクリックしてください。そこで、GitHubアカウントでサインインし、Grafanaの認証をご確認いただけます。
緑色のボタンをクリックし、GitHub組織を承認してください。
Note
あなたは既存のGrafanaアカウントでログインされます。もしログインしたユーザーにGrafanaアカウントが存在しなければ、Grafanaは新しいユーザーアカウントを作成し、閲覧者権限を付与します。これにより、新規ユーザーは既存のダッシュボードのみを使用できるようになります。
新しいユーザーのデフォルト権限を変更するには、メインのGrafana設定ファイルを編集してください。
- sudo nano /etc/grafana/grafana.ini
[users]ヘディングの下にあるauto_assign_org_roleディレクティブを見つけ、行の先頭の;を削除して設定のコメントアウトを解除してください。
以下の値の指示を設定してください:
- Viewer: can only use existing dashboards.
- Editor: can change use, modify, and add dashboards.
- Admin: has permission to do everything.
このチュートリアルでは、自動割り当てを「閲覧者」に設定します。
グラファナの設定ファイル「/etc/grafana/grafana.ini」
...
[users]
...
auto_assign_org_role = Viewer
...
変更を保存したら、ファイルを閉じてGrafanaを再起動してください。
- sudo systemctl restart grafana-server
サービスの状態を確認してください。
- sudo systemctl status grafana-server
以前と同様に、状態はアクティブ(実行中)と表示されます。
この時点で、GitHub組織のメンバーが登録し、Grafanaインストールを使用できるように、完全にGrafanaを設定しました。
結論
このチュートリアルでは、Grafanaをインストールし、設定し、セキュリティを確保し、また組織のメンバーがGitHubを介して認証できるように許可しました。
現在のGrafanaインストールを拡張するには、公式およびコミュニティ作成のダッシュボードのリストを参照してください。Grafanaの一般的な使用方法については、公式Grafanaドキュメントを参照するか、他の監視チュートリアルをご覧ください。