Ubuntu16.04にGrafanaをインストールして保護する方法
序章
Grafana は、 Prometheus 、 InfluxDB 、 Graphite 、およびElasticSearch。 Grafanaを使用すると、データのアラート、通知、アドホックフィルターを作成できると同時に、組み込みの共有機能を通じてチームメートとのコラボレーションが容易になります。
このチュートリアルでは、Grafanaをインストールし、SSL証明書とNginxリバースプロキシで保護してから、Grafanaのデフォルト設定を変更してセキュリティをさらに強化します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- Ubuntu 16.04 チュートリアルを使用した初期サーバーセットアップ(sudo非rootユーザーとファイアウォールを含む)に従ってセットアップされた1つのUbuntu16.04サーバー。
- 完全に登録されたドメイン名。 このチュートリアルでは、全体で
example.com
を使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - サーバー用に設定された次のDNSレコード。 追加方法の詳細については、DigitalOceanでホスト名を設定する方法に従ってください。
サーバーのパブリックIPアドレスを指すexample.comのAレコード。 サーバーのパブリックIPアドレスを指すwww.example.comのAレコード。 - Nginxは、 Ubuntu16.04チュートリアルにNginxをインストールする方法の最初の2つの手順に従ってセットアップします。
- Let’sEncryptが構成されたNginxサーバーブロック。Ubuntu16.04でNginxサーバーブロックを使用してLet’sEncryptを設定する方法に従って設定できます。
- オプションで、 GitHub 認証を設定するには、組織に関連付けられたGitHubアカウントが必要です。
ステップ1—Grafanaのインストール
Grafanaをインストールするには、公式Webサイトから直接ダウンロードするか、APTリポジトリを使用します。 APTリポジトリを使用すると、Grafanaのアップデートのインストールと管理が簡単になるため、この方法を使用します。
Grafanaは公式Ubuntu16.04パッケージリポジトリで利用できますが、Grafanaのバージョンは最新ではない可能性があるため、packagecloudでGrafanaの公式リポジトリを使用します。
packagecloud GPG keyとcurl
をダウンロードし、出力をapt-key
にパイプします。 これにより、APTインストールの信頼できるキーのリストにキーが追加され、GPGで署名されたGrafanaパッケージをダウンロードして検証できるようになります。
- curl https://packagecloud.io/gpg.key | sudo apt-key add -
次に、packagecloudリポジトリをAPTソースに追加します。
- sudo add-apt-repository "deb https://packagecloud.io/grafana/stable/debian/ stretch main"
注:このチュートリアルはUbuntu 16.04向けに書かれていますが、packagecloudはDebian、Python、RPM、およびRubyGemパッケージのみを提供します。 ただし、前のコマンドでDebianベースのリポジトリを使用できます。これは、そこに含まれるGrafanaパッケージがUbuntuのものと同じであるためです。 必ずstretch
リポジトリを使用して、Grafanaの最新バージョンを入手してください。
APTキャッシュを更新して、パッケージリストを更新します。
- sudo apt-get update
また、Grafanaがpackagecloudリポジトリからインストールされることを確認してください。
- apt-cache policy grafana
出力には、インストールされるGrafanaのバージョンと、パッケージの取得元が示されます。 インストール候補がhttps://packagecloud.io/grafana/stable/debian
の公式Grafanaリポジトリから取得されることを確認します。
Output of apt-cache policy grafanagrafana:
Installed: (none)
Candidate: 4.6.2
Version table:
4.6.2 500
500 https://packagecloud.io/grafana/stable/debian stretch/main amd64 Packages
...
これで、インストールを続行できます。
- sudo apt-get install grafana
Grafanaをインストールすると、開始する準備が整います。
- sudo systemctl start grafana-server
次に、サービスのステータスを確認して、Grafanaが実行されていることを確認します。
- sudo systemctl status grafana-server
出力には、ステータス、メインプロセス識別子(PID)、メモリ使用量など、Grafanaのプロセスに関する情報が含まれます。
サービスステータスがactive (running)
でない場合は、出力を確認し、前の手順を再トレースして問題を解決します。
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 Thu 2017-12-07 12:10:33 UTC; 19s ago
Docs: http://docs.grafana.org
Main PID: 14796 (grafana-server)
Tasks: 6
Memory: 32.0M
CPU: 472ms
CGroup: /system.slice/grafana-server.service
└─14796 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins
...
最後に、サービスが起動時にGrafanaを自動的に開始できるようにします。
- sudo systemctl enable grafana-server
出力は、systemd
がGrafanaを自動起動するために必要なシンボリックリンクを作成したことを確認します。 エラーメッセージが表示された場合は、端末の指示に従って問題を修正してから続行してください。
Output of systemctl enable grafana-serverSynchronizing state of grafana-server.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
これでGrafanaがインストールされ、使用できるようになりました。 次に、リバースプロキシとSSL証明書を使用してGrafanaへの接続を保護します。
ステップ2—リバースプロキシの設定
SSL証明書を使用すると、Grafanaとの間の接続を暗号化することで、データの安全性が確保されます。 ただし、この接続を利用するには、最初にNginxを再構成する必要があります。
前提条件でLet’sEncryptを使用してNginxサーバーブロックを設定したときに作成したNginx構成ファイルを開きます。
- sudo nano /etc/nginx/sites-available/example.com
次のブロックを見つけます。
...
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
...
SSLを介して通信するようにNginxを構成済みであり、サーバーへのすべてのWebトラフィックがすでにNginxを通過しているため、デフォルトでポート3000
で実行されるGrafanaにすべてのリクエストを転送するようにNginxに指示する必要があります。
このロケーションブロックの既存のtry_files
行を削除し、すべてproxy_
で始まる次のコンテンツに置き換えます。
...
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
...
完了したら、ファイルを保存してテキストエディタを閉じます。
次に、新しい設定をテストして、すべてが正しく構成されていることを確認します。
- sudo nginx -t
出力には、syntax is ok
とtest is successful
が示されているはずです。 エラーメッセージが表示された場合は、画面の指示に従ってください。
最後に、Nginxをリロードして変更をアクティブにします。
- sudo systemctl reload nginx
Webブラウザでhttps://example.com
を指定すると、デフォルトのGrafanaログイン画面にアクセスできるようになります。 Grafanaに到達できない場合は、ファイアウォールがポート443
でのトラフィックを許可するように設定されていることを確認してから、前の手順を再度トレースしてください。
暗号化されたGrafanaへの接続により、Grafanaのデフォルトの管理者資格情報の変更から始めて、追加のセキュリティ対策を実装できるようになりました。
ステップ3—クレデンシャルを更新する
すべてのGrafanaインストールはデフォルトで同じ管理ログインクレデンシャルを使用するため、このステップでは、セキュリティを向上させるためにクレデンシャルを更新します。
Webブラウザからhttps://example.com
に移動することから始めます。 これにより、デフォルトのログイン画面が表示され、Grafanaのロゴが表示されます。このフォームには、ユーザーとパスワード、ログインボタンの入力を求めるフォームが表示されます。 、およびパスワードをお忘れですか?リンク。
ユーザーとパスワードの両方のフィールドにadminと入力し、ログインボタンをクリックします。
次の画面で、ホームダッシュボードにようこそ。 ここでは、データソースを追加し、ダッシュボードを作成、プレビュー、および変更できます。
画面の左上隅にある小さなGrafanaロゴをクリックして、アプリケーションのメインメニューを表示します。 次に、マウスで admin ボタンにカーソルを合わせて、メニューオプションの2番目のセットを開きます。 最後に、プロファイルボタンをクリックします。
これで、ユーザープロファイルページが表示され、アカウントに関連付けられている名前、メール、およびユーザー名を変更できます。 環境設定をUIテーマなどの設定に更新したり、パスワードを変更したりすることもできます。
名前、メール、ユーザー名の各フィールドに名前、メールアドレス、使用するユーザー名を入力し、更新[ 情報セクションのボタンをクリックして、設定を保存します。
必要に応じて、UIテーマとタイムゾーンをニーズに合わせて変更し、設定の更新ボタンを押すこともできます。変更を保存する領域。 Grafanaは、DarkおよびLight UIテーマに加えて、Defaultテーマを提供します。これらはデフォルトでDarkに設定されています。
最後に、ページ下部の [パスワードの変更]ボタンをクリックして、アカウントに関連付けられているパスワードを変更します。 パスワードの変更画面が表示されます。
現在のパスワードadminをOldPassword フィールドに入力し、使用を開始するパスワードを NewPasswordとに入力します。パスワードフィールドを確認します。
パスワードの変更をクリックして新しい情報を保存するか、キャンセルを押して変更を破棄します。
そこから、ユーザープロファイルページに戻り、画面の右上隅に
これで、デフォルトのクレデンシャルを変更してアカウントを保護したので、許可なく新しい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
でこのディレクティブを有効にすると、ログイン画面に Sign Up ボタンが追加され、ユーザーは自分で登録してGrafanaにアクセスできるようになります。
false
でこのディレクティブを無効にすると、サインアップボタンが削除され、Grafanaのセキュリティとプライバシーが強化されます。
匿名の訪問者が自分自身を登録できるようにする必要がない限り、行の先頭にある;
を削除してこのディレクティブのコメントを解除し、オプションをfalse
に設定します。
...
[users]
# disable user signup / registration
allow_sign_up = false
...
次に、[auth.anonymous]
見出しの下にある次のenabled
ディレクティブを見つけます。
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...
enabled
をtrue
に設定すると、未登録のユーザーがダッシュボードにアクセスできるようになります。 このオプションをfalse
に設定すると、ダッシュボードへのアクセスが登録ユーザーのみに制限されます。
ダッシュボードへの匿名アクセスを許可する必要がない限り、行の先頭にある;
を削除してこのディレクティブのコメントを解除し、オプションをfalse
に設定します。
...
[auth.anonymous]
enabled = false
...
ファイルを保存して、テキストエディタを終了します。
変更を有効にするには、Grafanaを再起動します。
- sudo systemctl restart grafana-server
Grafanaのサービスステータスをチェックして、すべてが機能していることを確認します。
- sudo systemctl status grafana-server
前と同じように、出力はGrafanaがactive (running)
であることを報告するはずです。 そうでない場合は、追加のヘルプが必要な場合は、端末メッセージを確認してください。
次に、Webブラウザでhttps://example.com
をポイントして、サインアップボタンがないこと、およびログイン資格情報を入力せずにサインインできないことを確認します。
サインアップボタンが表示された場合、または匿名でログインできる場合は、チュートリアルを続行する前に、前の手順を再確認して問題を解決してください。
この時点で、Grafanaは完全に構成され、使用できるようになっています。 オプションで、GitHubを介して認証することにより、組織のログインプロセスを簡素化できます。
(オプション)ステップ5 —GitHubOAuthアプリを設定する
サインインの別の方法として、GitHubを介して認証するようにGrafanaを構成できます。これにより、承認されたGitHub組織のすべてのメンバーにログインアクセスが提供されます。 これは、Grafana固有のクレデンシャルを作成せずに、複数の開発者がコラボレーションしてメトリックにアクセスできるようにする場合に特に便利です。
組織に関連付けられているGitHubアカウントにログインすることから始めて、https://github.com/settings/profile
のGitHubプロファイルページに移動します。
画面左側のナビゲーションメニューの組織設定で組織名をクリックします。
次の画面に、組織プロファイルが表示されます。ここで、組織表示名、組織メール、組織URLなどの設定を変更できます。 。
GrafanaはOAuth(リモートのサードパーティにローカルリソースへのアクセスを許可するためのオープンスタンダード)を使用してGitHubを介してユーザーを認証するため、GitHub内に新しいOAuthアプリケーションを作成する必要があります。
画面左下の開発者設定の下にあるOAuthアプリリンクをクリックします。
GitHubで組織に関連付けられているOAuthアプリケーションをまだ持っていない場合は、組織所有のアプリケーションがないと通知されます。 それ以外の場合は、アカウントにすでに接続されているOAuthアプリケーションのリストが表示されます。
アプリケーションの登録ボタンをクリックして続行します。
次の画面で、Grafanaのインストールに関する次の詳細を入力します。
- アプリケーション名-これは、異なるOAuthアプリケーションを互いに区別するのに役立ちます。
- ホームページのURL-これはGitHubにGrafanaの場所を指示します。
- アプリケーションの説明-これは、OAuthアプリケーションの目的の説明を提供します。
- アプリケーションコールバックURL-これは、認証に成功するとユーザーが送信されるアドレスです。 Grafanaの場合、このフィールドは
https://example.com/login/github
に設定する必要があります。
GitHubを介してログインするGrafanaユーザーには、前の3つのフィールドに入力した値が表示されることに注意してください。そのため、意味のある適切なものを入力してください。
完了すると、フォームは次のようになります。
緑色のアプリケーションの登録ボタンをクリックします。
これで、新しいOAuthアプリケーションに関連付けられたクライアントIDとクライアントシークレットを含むページにリダイレクトされます。 セットアップを完了するには、両方の値をGrafanaのメイン構成ファイルに追加する必要があるため、両方の値をメモしてください。
警告: クライアントIDとクライアントシークレットは、攻撃の基礎として使用される可能性があるため、安全で非公開の場所に保管してください。 。
GitHub OAuthアプリケーションを作成したら、Grafanaを再構成する準備が整います。
(オプション)ステップ6 —GrafanaをGitHubOAuthアプリとして構成する
まず、メインのGrafana構成ファイルを開きます。
- sudo nano /etc/grafana/grafana.ini
[auth.github]
の見出しを見つけ、このチュートリアルでは使用しない;team_ids=
を除いて、すべての行の先頭にある;
を削除して、このセクションのコメントを解除します。
次に、OAuthアプリケーションのclient_id
とclient_secret
の値でGitHubを使用するようにGrafanaを構成します。
enabled
とallow_sign_up
をtrueに設定します。 これにより、GitHub認証が有効になり、許可された組織のメンバーが自分でアカウントを作成できるようになります。 この設定は、ステップ4で変更した[users]
のallow_sign_up
プロパティとは異なることに注意してください。client_id
とclient_secret
を、GitHubOAuthアプリケーションの作成中に取得した値に設定します。allowed_organizations
を組織の名前に設定して、組織のメンバーのみがサインアップして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
;team_ids =
allowed_organizations = your_organization_name
...
これで、GitHubについて知っておく必要のあるすべてのことをGrafanaに伝えましたが、セットアップを完了するには、リバースプロキシの背後でリダイレクトを有効にする必要があります。 これは、[server]
見出しの下にroot_url
値を設定することによって行われます。
...
[server]
root_url = https://example.com
...
構成を保存してファイルを閉じます。
次に、Grafanaを再起動して変更を有効にします。
- sudo systemctl restart grafana-server
最後に、サービスが稼働していることを確認します。
- sudo systemctl status grafana-server
サービスがactive (running)
であることを出力が示さない場合は、画面上のメッセージで詳細を確認してください。
次に、https://example.com
に移動して、新しい認証システムをテストします。 すでにGrafanaにログインしている場合は、画面の左上隅にある小さなGrafanaロゴをクリックし、ユーザー名の上にマウスを置いて、表示されるセカンダリメニューのサインアウトをクリックします。あなたの名前の右側に。
ログインページでは、元のログインボタンの下に、GitHubロゴの付いたGitHubボタンを含む新しいセクションが表示されます。
GitHub ボタンをクリックすると、GitHubにリダイレクトされます。ここで、Grafanaを承認する意図を確認する必要があります。
緑色のyour_github_organizationボタンを承認します。 この例では、ボタンはSharkTheSammyを承認します。
承認された組織のメンバーではないGitHubアカウントで認証しようとすると、ログイン失敗メッセージが表示され、ユーザーは必要な組織のメンバーではありません。 。
GitHubアカウントが承認された組織のメンバーであり、GrafanaのメールアドレスがGitHubのメールアドレスと一致する場合は、既存のGrafanaアカウントでログインします。
ただし、ログインしたユーザーのGrafanaアカウントがまだ存在しない場合、Grafanaは Viewer 権限を持つ新しいユーザーアカウントを作成し、新しいユーザーが既存のダッシュボードのみを使用できるようにします。
新規ユーザーのデフォルトの権限を変更するには、編集用にメインのGrafana構成ファイルを開きます。
- sudo nano /etc/grafana/grafana.ini
[users]
見出しの下にあるauto_assign_org_role
ディレクティブを見つけ、行の先頭にある;
を削除して設定のコメントを解除します。
ディレクティブを次のいずれかの値に設定します。
Viewer
—既存のダッシュボードのみを使用できますEditor
—ダッシュボードの使用を変更、変更、および追加できますAdmin
—すべてを実行する権限があります
...
[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をシステム監視ソフトウェアスタックの一部として使用するには、 Ubuntu16.04にPrometheusをインストールする方法およびPrometheusダッシュボードをGrafanaに追加する方法を参照してください。
現在のGrafanaのインストールを拡張するには、公式およびコミュニティで構築されたダッシュボードのリストを参照してください。
また、Grafanaの一般的な使用方法の詳細については、公式のGrafanaドキュメントを参照してください。