Ubuntu 22.04にGrafanaをインストールしてセキュアにする方法
イントロダクション
Grafanaは、Prometheus、InfluxDB、Graphite、ElasticSearchなどの複雑なデータソースと統合されるオープンソースのデータ可視化および監視ツールです。Grafanaを使用すると、データに対するアラートや通知、アドホックフィルタを作成でき、さらに組み込みの共有機能を通じてチームメートとの協力が容易になります。
このチュートリアルでは、Grafanaをインストールし、SSL証明書とNginxリバースプロキシでセキュリティを確保します。Grafanaを設定した後、GitHubを介してユーザー認証を設定するオプションがあり、チームの権限をより良く管理することができます。
必要条件
このチュートリアルを進めるためには、次のものが必要です。
- One Ubuntu 22.04 server set up by following the Initial Server Setup Guide for Ubuntu 22.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 22.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 22.04.
- Optionally, to set up GitHub authentication, you’ll need a GitHub account associated with an organization.
ステップ1:Grafanaのインストール
最初のステップでは、GrafanaをUbuntu 22.04のサーバーにインストールします。Grafanaは公式ウェブサイトから直接ダウンロードするか、APTリポジトリを利用してインストールすることができます。このチュートリアルでは、APTリポジトリを利用する方法を使用します。APTリポジトリを使用すると、Grafanaのインストールとアップデートの管理が容易になります。
wgetコマンドを使用してGrafanaのGPGキーをダウンロードし、その出力をgpgにパイプします。これにより、GPGキーがbase64形式からバイナリ形式に変換されます。そして、出力をteeにパイプして、キーを/usr/share/keyrings/grafana.gpgファイルに保存します。
- wget -q -O – https://packages.grafana.com/gpg.key | gpg –dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null
このコマンドでは、オプション-qはwgetの状態更新メッセージをオフにし、-Oはダウンロードしたファイルを端末に出力します。これらの2つのオプションにより、ダウンロードされたファイルの内容のみがパイプラインに送られます。セキュリティ上の理由から、> /dev/nullオプションはターミナルからの出力を非表示にします。
次に、APTソースにGrafanaリポジトリを追加してください。
- echo “deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main” | sudo tee -a /etc/apt/sources.list.d/grafana.list
パッケージリストを更新するためにAPTキャッシュをリフレッシュしてください。
- sudo apt update
インストールを進めてください。
- 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 (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2022-09-27 14:42:15 UTC; 6s ago Docs: http://docs.grafana.org Main PID: 4132 (grafana-server) Tasks: 7 (limit: 515) …
この出力には、Grafanaのプロセスに関する情報が含まれています。その状態、メインプロセス識別子(PID)などが含まれています。active(running)は、プロセスが正常に実行されていることを示しています。
最後に、Grafanaを起動時に自動的に開始するサービスを有効にしてください。
- sudo systemctl enable grafana-server
以下の出力を受け取ることになります。
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の自動起動のために必要なシンボリックリンクを作成したことが確認されます。
グラファナは現在インストールされ、使用準備ができています。次に、逆プロキシとSSL証明書を使用してグラファナへの接続を確保します。
ステップ2 — リバースプロキシの設定を行います。
SSL証明書を使用することで、Grafanaとの通信を暗号化し、データの安全性を確保できます。ただし、この通信を利用するためには、まずNginxをGrafanaのリバースプロキシとして再設定する必要があります。
前提条件でNginxサーバブロックをLet’s Encryptと設定したときに作成したNginx設定ファイルを開きます。テキストエディタは何でも使用できますが、このチュートリアルではnanoを使用します。
- sudo nano /etc/nginx/sites-available/your_domain
以下のブロックを探してください。 (Ika no burokku wo sagashite kudasai.)
...
location / {
try_files $uri $uri/ =404;
}
...
あなたがすでにNginxをSSL通信に設定しており、またすべてのウェブトラフィックがサーバーを通過するため、Nginxには単にGrafanaへのすべてのリクエストを転送するように指示する必要があります。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 {
...
その後、サーバーブロックに次の場所セクションを追加してください。
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;
}
...
クライアントからプロキシサーバーには、ヘッダの「Upgrade」や「Connection」は送信されません。そのため、クライアントがプロトコルをWebSocketに変更する意図をプロキシサーバーが知るためには、これらのヘッダを明示的に渡す必要があります。
最終的な配置は、このように見えるでしょう。
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のロゴ、メールアドレスまたはユーザ名とパスワードを入力するためのフォーム、ログインボタン、そしてパスワードを忘れた場合のリンクが表示されます。
Emailまたはユーザー名フィールドとパスワードフィールドの両方に「admin」を入力し、ログインボタンをクリックしてください。
次の画面では、デフォルトのパスワードを変更して、アカウントのセキュリティを向上させるように求められます。
「新しいパスワード」と「新しいパスワードの確認」欄に、使用したいパスワードを入力してください。」
ここから、新しい情報を保存するために「送信」をクリックするか、このステップをスキップするために「スキップ」を押すことができます。スキップした場合は、次回ログイン時にパスワードの変更を求められます。
Grafana セットアップのセキュリティを向上させるために、提出をクリックしてください。Grafana ダッシュボードへ移動します。
あなたはデフォルトの資格情報を変更することでアカウントを安全に確保しました。次に、Grafanaの設定を変更して、あなたの許可なしに誰もが新しいGrafanaアカウントを作成できないようにします。
ステップ4 — Grafanaの登録および匿名アクセスの無効化
Grafanaは、訪問者が自分自身のユーザーアカウントを作成し、登録せずにダッシュボードをプレビューできるオプションを提供しています。Grafanaがインターネット経由でアクセスできない場合や、サービス状態などの公開データと連携している場合、これらの機能を許可することが望ましい場合があります。ただし、機密データを扱うためにGrafanaをオンラインで使用する場合、匿名アクセスはセキュリティの問題になり得ます。この問題を解決するために、Grafanaの設定をいくつか変更します。
最初に、Grafanaのメインの設定ファイルを編集するために開きます。
- sudo nano /etc/grafana/grafana.ini
「[users]」の見出しの下で、以下の「allow_sign_up」ディレクティブを見つけてください。
...
[users]
# disable user signup / registration
;allow_sign_up = true
...
このディレクティブをtrueに変更すると、ログイン画面に「サインアップ」ボタンが追加され、ユーザーは自身で登録し、Grafanaにアクセスすることができます。
この指示を「false」に設定すると、サインアップボタンが非表示になり、Grafanaのセキュリティとプライバシーが強化されます。
このディレクティブを無効にするために、行の最初の;を削除し、オプションをfalseに設定してください。
「/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」
...
[auth.anonymous]
# enable anonymous access
enabled = false
...
ファイルを保存して、テキストエディターを終了してください。
変更を有効にするために、Grafanaを再起動してください。
- sudo systemctl restart grafana-server
Grafanaのサービスの状態を確認して、すべてが正常に動作していることを確認してください。
- 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 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つの前のフィールドに入力した値が表示されることに注意してください。したがって、意味のある適切な情報を入力するようにしてください。
完成した時点で、フォームはこのように見えるでしょう。
登録アプリボタンをクリックしてください。
以下は、あなたの新しい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 =
- ;role_attribute_path =
- ;role_attribute_strict = false
- ;allow_assign_grafana_admin = false
次に、以下の変更を行ってください。
- 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.
完全な設定は、以下のようになります。 (Kanzen na settei wa, ika no yō ni narimasu.)
グラファナの設定ファイル「/etc/grafana/grafana.ini」
...
[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
;role_attribute_path =
;role_attribute_strict = false
;allow_assign_grafana_admin = false
...
あなたは現在、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へリダイレクトされ、GitHubアカウントにサインインし、Grafanaの認証を許可する意向を確認します。
緑の「your_github_organization」ボタンをクリックして認証してください。
Note
あなたは現在、既存のGrafanaアカウントでログインされます。もし既にそのユーザーに対応するGrafanaアカウントが存在しない場合は、Grafanaは新しいユーザーアカウントを作成し、表示権限を付与します。これにより、新規ユーザーは既存のダッシュボードのみを利用できるようになります。
新しいユーザーのデフォルト権限を変更するには、メインのGrafana設定ファイルを編集してください。
- sudo nano /etc/grafana/grafana.ini
「[users]」見出しの下にある「auto_assign_org_role」ディレクティブを探し、行の先頭にある「;」を削除して設定をコメント解除してください。
次の値のうちいずれかの指示を設定してください。
- Viewer: can only use existing dashboards.
- Editor: can use, modify, and add dashboards.
- Admin: has permission to do everything.
このチュートリアルでは、自動割り当てをViewerに設定します。
「/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ドキュメントを参照するか、他の監視チュートリアルをご覧ください。