Ubuntu 18.04でGrafanaをインストールして保護する方法

著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにDev Colorを選択しました。

前書き

Grafanaは、PrometheusInfluxDBGraphiteElasticSearchなどのソースからの複雑なデータと統合するオープンソースのデータ視覚化および監視ツールです。 Grafanaでは、データのアラート、通知、およびアドホックフィルターを作成できるほか、組み込みの共有機能を使用してチームメイトとのコラボレーションを容易にします。

このチュートリアルでは、Grafanaをインストールし、SSL certificateNginx reverse proxyで保護します。 Grafanaをセットアップしたら、GitHubを介してユーザー認証を構成するオプションがあり、チームの権限をより適切に整理できます。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • sudo特権を持つ非rootユーザーとufwで構成されたファイアウォールを含む、Initial Server Setup Guide for Ubuntu 18.04に従ってセットアップされた1つのUbuntu18.04サーバー。

  • 完全に登録されたドメイン名。 このチュートリアルでは、全体でyour_domainを使用します。 Namecheapでドメイン名を購入するか、Freenomで無料でドメイン名を取得するか、選択したドメインレジストラを使用できます。

  • サーバー用に設定された次のDNSレコード。 それらを追加する方法の詳細については、How To Set Up a Host Name with DigitalOceanをたどることができます。

    • サーバーのパブリックIPアドレスを指すyour_domainを含むAレコード。

    • サーバーのパブリックIPアドレスを指すwww.your_domainを含むAレコード。

  • Nginxは、ドメインのserver blockを含め、How To Install Nginx on Ubuntu 18.04チュートリアルに従ってセットアップします。

  • Let’s Encryptが構成されたNginxサーバーブロック。これは、How To Secure Nginx with Let’s Encrypt on Ubuntu 18.04に従って設定できます。

  • オプションで、GitHub認証を設定するには、GitHub account associated with an organizationが必要です。

[[step-1 -—- installing-grafana]] ==ステップ1—Grafanaのインストール

この最初の手順では、Ubuntu 18.04サーバーにGrafanaをインストールします。 Grafanaは、downloading it directly from its official websiteまたはAPT repositoryを使用してインストールできます。 APTリポジトリを使用すると、Grafanaのアップデートのインストールと管理が簡単になるため、このチュートリアルではその方法を使用します。

Grafanaはthe official Ubuntu 18.04 packages repositoryで入手できますが、Grafanaのバージョンは最新ではない可能性があるため、Grafanaの公式リポジトリを使用してください。

GrafanaGPG keywgetと一緒にダウンロードし、次にpipe the outputapt-keyにダウンロードします。 これにより、APTインストールの信頼できるキーのリストにキーが追加され、GPG署名のGrafanaパッケージをダウンロードして検証できるようになります。

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

このコマンドでは、オプション-qwgetのステータス更新メッセージをオフにし、-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のバージョンと、パッケージの取得元を示しています。 リストの一番上にあるインストール候補が、https://packages.grafana.com/oss/debの公式Grafanaリポジトリからのものであることを確認します。

Output of apt-cache policy grafanagrafana:
  Installed: (none)
  Candidate: 6.3.3
  Version table:
     6.3.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

次のような出力が表示されます。

Output of grafana-server status● grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-08-13 08:22:30 UTC; 11s ago
     Docs: http://docs.grafana.org
 Main PID: 13630 (grafana-server)
    Tasks: 7 (limit: 1152)
...

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

最後に、ブート時にGrafanaを自動的に開始するサービスを有効にします。

sudo systemctl enable grafana-server

次の出力が表示されます。

Output of systemctl enable grafana-serverSynchronizing 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への接続を保護します。

[[step-2 -—- setting-up-the-reverse-proxy]] ==ステップ2—リバースプロキシの設定

SSL証明書を使用すると、Grafanaとの接続を暗号化することにより、データの安全性が確保されます。 ただし、この接続を利用するには、まずNginxをGrafanaのリバースプロキシとして再構成する必要があります。

Let’s EncryptをPrerequisitesで使用してNginxサーバーブロックを設定したときに作成したNginx構成ファイルを開きます。 任意のテキストエディタを使用できますが、このチュートリアルではnanoを使用します。

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

次のブロックを見つけます。

/etc/nginx/sites-available/your_domain

...
    location / {
        try_files $uri $uri/ =404;
    }
...

NginxをSSL経由で通信するように構成済みであり、サーバーへのすべてのWebトラフィックがすでにNginxを通過しているため、デフォルトでポート3000で実行されるGrafanaにすべてのリクエストを転送するようにNginxに指示する必要があります。

このlocation blockの既存のtry_files行を削除し、次のproxy_passオプションに置き換えます。

/etc/nginx/sites-available/your_domain

...
    location / {
        proxy_pass http://localhost:3000;
    }
...

これにより、プロキシが適切なポートにマップされます。 完了したら、CTRL+XYnanoを使用している場合はENTERの順に押して、ファイルを保存して閉じます。

次に、新しい設定をテストして、すべてが正しく構成されていることを確認します。

sudo nginx -t

次の出力が表示されます。

Outputnginx: 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

Webブラウザでhttps://your_domainを指定すると、デフォルトのGrafanaログイン画面にアクセスできるようになりました。 Grafanaに到達できない場合は、ファイアウォールがポート443でのトラフィックを許可するように設定されていることを確認してから、前の手順を再度トレースします。

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

[[step-3 -—- updating-credentials]] ==ステップ3—資格情報の更新

すべてのGrafanaインストールはデフォルトで同じ管理者資格情報を使用するため、ログイン情報をできるだけ早く変更することをお勧めします。 この手順では、セキュリティを改善するために資格情報を更新します。

Webブラウザからhttps://your_domainに移動することから始めます。 これにより、デフォルトのログイン画面が表示され、Grafanaロゴ、email or usernamepasswordの入力を求めるフォーム、Log inボタン、およびForgot your password?が表示されます。 sリンク。

Grafana Login

UserフィールドとPasswordフィールドの両方にadminを入力し、Log inボタンをクリックします。

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

Change Password

使用を開始するパスワードをNew passwordフィールドとConfirm new passwordフィールドに入力します。

ここから、Saveをクリックして新しい情報を保存するか、Skipを押してこの手順をスキップできます。 スキップすると、次回ログインするときにパスワードを変更するように求められます。

Grafanaセットアップのセキュリティを強化するには、Saveをクリックします。 Home Dashboardページに戻ります。

Home Dashboard

これで、デフォルトの認証情報を変更してアカウントを保護できました。 次に、Grafanaの設定を変更して、許可なく誰も新しいGrafanaアカウントを作成できないようにします。

[[step-4 -—- disabling-grafana-registrations-and-anonymous-access]] ==ステップ4—Grafana登録と匿名アクセスの無効化

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

編集のためにGrafanaのメイン構成ファイルを開くことから始めます。

sudo nano /etc/grafana/grafana.ini

[users]見出しの下にある次のallow_sign_upディレクティブを見つけます。

/etc/grafana/grafana.ini

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

trueでこのディレクティブを有効にすると、ログイン画面にSign Upボタンが追加され、ユーザーは自分で登録してGrafanaにアクセスできるようになります。

このディレクティブをfalseで無効にすると、Sign Upボタンが削除され、Grafanaのセキュリティとプライバシーが強化されます。

行の先頭にある;を削除し、オプションをfalseに設定して、このディレクティブのコメントを解除します。

/etc/grafana/grafana.ini

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

次に、[auth.anonymous]見出しの下にある次のenabledディレクティブを見つけます。

/etc/grafana/grafana.ini

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

enabledtrueに設定すると、未登録のユーザーがダッシュボードにアクセスできるようになります。このオプションをfalseに設定すると、ダッシュボードへのアクセスが登録ユーザーのみに制限されます。

行の先頭にある;を削除し、オプションをfalseに設定して、このディレクティブのコメントを解除します。

/etc/grafana/grafana.ini

...
[auth.anonymous]
enabled = false
...

ファイルを保存し、テキストエディターを終了します。

変更を有効にするには、Grafanaを再起動します。

sudo systemctl restart grafana-server

Grafanaのサービスステータスを確認して、すべてが機能していることを確認します。

sudo systemctl status grafana-server

前と同様に、出力はGrafanaがactive (running)であることを報告します。

次に、Webブラウザでhttps://your_domainを指定します。 Sign Up画面に戻るには、画面の左下にあるアバターにカーソルを合わせ、表示されるSign outオプションをクリックします。

サインアウトしたら、Sign Upボタンがないこと、およびログイン資格情報を入力せずにサインインできないことを確認します。

この時点で、Grafanaは完全に構成され、使用できる状態になります。 次に、GitHubを介して認証することにより、組織のログインプロセスを簡素化できます。

[[optional-step-5 -—- setting-up-a-github-oauth-app]] ==(オプション)ステップ5 — GitHubOAuthアプリのセットアップ

サインインの代替方法として、GitHubを介して認証するようにGrafanaを構成できます。GitHubは、承認されたGitHub組織のすべてのメンバーにログインアクセスを提供します。 これは、複数の開発者がGrafana固有の資格情報を作成せずに共同でメトリックにアクセスできるようにする場合に特に役立ちます。

組織に関連付けられているGitHubアカウントにログインすることから始めて、https://github.com/settings/profileでGitHubプロファイルページに移動します。

画面左側のナビゲーションメニューのOrganization settingsの下にある組織の名前をクリックします。

GitHub Organization settings

次の画面に、Organization display name、組織Email、組織URLなどの設定を変更できるOrganization profileが表示されます。

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

画面左下のDeveloper settingsの下にあるOAuth Appsリンクをクリックします。

GitHubで組織に関連付けられているOAuthアプリケーションをまだ持っていない場合は、No Organization Owned Applicationsがあることが通知されます。 それ以外の場合は、アカウントに既に接続されているOAuthアプリケーションのリストが表示されます。

続行するには、Register an applicationボタンをクリックしてください。

次の画面で、Grafanaインストールに関する次の詳細を入力します。

  • Application name-これは、異なるOAuthアプリケーションを互いに区別するのに役立ちます。

  • Homepage URL-これはGitHubにGrafanaの場所を指示します。 このフィールドにhttps://your_domainと入力し、your_domainをドメインに置き換えます。

  • Application Description-これは、OAuthアプリケーションの目的の説明を提供します。

  • Application callback URL-これは、認証に成功したときにユーザーが送信されるアドレスです。 Grafanaの場合、このフィールドはhttps://your_domain/login/githubに設定する必要があります。

GitHub経由でログインするGrafanaユーザーには、前の最初の3つのフィールドに入力した値が表示されるため、意味のある適切なものを入力してください。

完了すると、フォームは次のようになります。

GitHub Register OAuth Application

緑色のRegister applicationボタンをクリックします。

これで、新しいOAuthアプリケーションに関連付けられたClient IDClient Secretを含むページにリダイレクトされます。 設定を完了するにはGrafanaのメイン構成ファイルに追加する必要があるため、両方の値をメモします。

[.warning]#Warning:Client IDClient Secretは攻撃の基礎として使用される可能性があるため、安全で非公開の場所に保管してください。%(t3 )s#

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

[[optional-step-6 -—- configuring-grafana-as-a-github-oauth-app]] ==(オプション)ステップ6 —GrafanaをGitHubOAuthアプリとして構成する

GrafanaセットアップのGitHub認証を完了するために、Grafana構成ファイルにいくつかの変更を加えます。

まず、メインのGrafana構成ファイルを開きます。

sudo nano /etc/grafana/grafana.ini

[auth.github]の見出しを見つけ、このチュートリアルでは変更されない;team_ids=を除くすべての行の先頭にある;を削除して、このセクションのコメントを解除します。

次に、OAuthアプリケーションのclient_idclient_secretの値でGitHubを使用するようにGrafanaを構成します。

  • enabledallow_sign_uptrueに設定します。 これにより、GitHub認証が有効になり、許可された組織のメンバーが自分でアカウントを作成できるようになります。 この設定は、Step 4で変更した[users]の下のallow_sign_upプロパティとは異なることに注意してください。

  • client_idclient_secretを、GitHubOAuthアプリケーションの作成中に取得した値に設定します。

  • allowed_organizationsを組織の名前に設定して、組織のメンバーだけがサインアップしてGrafanaにログインできるようにします。

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

/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
;team_ids =
allowed_organizations = your_organization_name
...

これで、GitHubについて知る必要があるすべてをGrafanaに伝えました。 設定を完了するには、リバースプロキシの背後でリダイレクトを有効にする必要があります。 これは、[server]見出しの下にroot_url値を設定することによって行われます。

/etc/grafana/grafana.ini

...
[server]
root_url = https://your_domain
...

設定を保存してファイルを閉じます。

次に、Grafanaを再起動して変更を有効にします。

sudo systemctl restart grafana-server

最後に、サービスが稼働していることを確認します。

sudo systemctl status grafana-server

出力は、サービスがactive (running)であることを示します。

次に、https://your_domainに移動して、新しい認証システムをテストします。 すでにGrafanaにログインしている場合は、画面の左下隅にあるアバターログにマウスを合わせ、名前の横に表示されるセカンダリメニューのSign outをクリックします。

ログインページでは、元のLog inボタンの下に、GitHubロゴの付いたSign in with GitHubボタンを含む新しいセクションが表示されます。

Grafana Login page with GitHub

Sign in with GitHubボタンをクリックしてGitHubにリダイレクトします。ここで、GitHubアカウントにサインインし、Authorize Grafanaへの意図を確認します。

緑色のAuthorize your_github_organizationボタンをクリックします。

[.note]#Note: GitHubアカウントが承認された組織のメンバーであり、GrafanaのメールアドレスがGitHubのメールアドレスと一致していることを確認してください。 承認された組織のメンバーではないGitHubアカウントで認証しようとすると、User not a member of one of the required organizations
#を通知するLogin Failedメッセージが表示されます。

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

新規ユーザーのデフォルトの許可を変更するには、メインのGrafana構成ファイルを開いて編集します。

sudo nano /etc/grafana/grafana.ini

[users]見出しの下にあるauto_assign_org_roleディレクティブを見つけ、行の先頭にある;を削除して設定のコメントを解除します。

ディレクティブを次の値のいずれかに設定します。

  • Viewer —既存のダッシュボードのみを使用できます

  • Editor —ダッシュボードの使用、変更、追加を変更できます

  • Admin —すべてを実行する権限があります

このチュートリアルでは、自動割り当てをViewerに設定します。

/etc/grafana/grafana.ini

...
[users]
...
auto_assign_org_role = Viewer
...

変更を保存したら、ファイルを閉じてGrafanaを再起動します。

sudo systemctl restart grafana-server

サービスのステータスを確認します。

sudo systemctl status grafana-server

以前と同様に、ステータスはactive (running)になります。

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

結論

このチュートリアルでは、Grafanaをインストール、構成、および保護し、組織のメンバーがGitHubを介して認証することを許可する方法も学びました。

現在のGrafanaインストールを拡張するには、list of official and community-built dashboardsを参照してください。 一般的なGrafanaの使用の詳細については、official Grafana documentationを参照するか、other monitoring tutorialsを確認してください。

Related