Contents
- 0.概要
- 1. 認証の準備
- 1.1. ユーザー名とパスワードの決定
- 1.2. 設定ファイルの準備
- 2.Node-RED エディタ画面のパスワード認証
- 2.1. パスワードのハッシュ値の生成
- 2.2. 設定ファイルsettings.jsのadminAuthのプロパティの修正
- 2.2.1. adminAuthプロパティのコメントの削除
- 2.2.2.adminAuthプロパティの記述の変更
- 2.3. Node-REDの再起動
- 2.3.1. pm2でNode-REDを起動している場合
- 2.3.2. sytemctlでNode-REDを起動している場合
- 2.4. 起動後のエディタ画面の認証の確認
- 3.Node-REDダッシュボード画面のパスワード認証
- 3.1. Basic認証用アプリ basic_authのインストール
- 3.2. settings.jsファイルの修正
- 3.2.1. basic-authの呼び出しの追加
- 3.2.2. middlewareの記述追加
- 3.3.Node-REDの再起動
- 3.4.起動後の画面の認証の確認
0.概要
Node-REDのダッシュボードを職場ではなく、自宅やその他の公衆回線上のスマートフォンで確認したりする場合には、クラウド上のNode-REDのポートのファイアウォールを緩めていく必要があります。ましてや、一般公開しているポータルサイトにリンクを張り、確認できるようにするような場合には、ポータルサイトと同じレベルでポートを公開していかないとダッシュボードが表示できません。
クラウド上のダッシュボードをローカルで表示するためには、Node-REDのポート番号(一般的には、1880)の上り(ローカルからクラウド方向)を許可する必要があります。Node-REDのファイアウォールの設定方法は、「GCPのUbuntuを使ってみる」の「1.2. ファイアウォールの設定」を参照ください。
ファイアウォールを緩める場合には、最低限のセキュリティ確保のためにユーザー名とパスワード認証が必要になります。
そこで、この投稿では、Ubuntu上に立ち上げたNode-REDのユーザ名とパスワード認証の一つの設定方法に関して述べます。
Node-REDのエディタ画面とダッシュボード画面の両方に関して認証を設定します。
1. 認証の準備
認証の準備としては、以下の2つがあります。
1) ユーザー名とパスワードの決定
2) 設定ファイルの準備
順番に行っていきます。
1.1. ユーザー名とパスワードの決定
まず、ユーザー名とパスワードを決めます。表1に示すように、エディタ画面とダッシュボード画面の2種類があります。ユーザー名とパスワードは同じでもいいですし、変えてもいいです。ここでは、表1のようにユーザー名は同じで、パスワードを変えるという設定で説明します。
エディタ画面では、権限を設定できます。権限は2種類あります。編集可能(すべての権限) か、読み出し可能かの2種類です。
表1.ユーザー名とパスワード一覧
1.2. 設定ファイルの準備
Node-REDの設定ファイルは、ホームディレクトリの下の.node-redのフォルダにあるsettings.jsというファイルです。
設定ファイル:~/.node-red/settings.js
このファイルを修正しますので、バックアップします。具体的には、settings.jsをsettings.js.orgにコピーします。
GCPに、SSHで接続してください。その後、以下のコマンドを入力します。
以上で、設定ファイルの準備は終了です。
2.Node-RED エディタ画面のパスワード認証
ここから、Node-REDのエディタ画面のパスワード認証の設定を行います。次のステップで行います。
1) パスワードのハッシュ値の生成
2) 設定ファイルsettings.jsのadminAuthのプロパティの修正
順に説明していきます。
2.1. パスワードのハッシュ値の生成
エディタ画面のパスワードをハッシュ値に変換します。ハッシュ値に変換するとは、特定の計算手法に基づいて、元のデータを不規則な文字列に置換する処理を指します。Node-REDがインストールされた環境では、パスワードは安全性を高めるためにbcryptアルゴリズムを使用してハッシュ化が行えます。
以下のコマンドを入力します。
$ node-red admin hash-pw
コマンドは、そのまま変更せずに入力してください。すると、パスワードを聞いてきますので、初めに決めたエディタ画面のパスワードを入力します。すると、ハッシュ化された文字列が返されます。このハッシュ値は、次のsettigns.jsファイルの修正時にコピー&ペーストします。
2.2. 設定ファイルsettings.jsのadminAuthのプロパティの修正
つぎに、settings.jsファイルを修正します。ここでは、エディタとしてnanoを使用します。
$ nano setting.js
2.2.1. adminAuthプロパティのコメントの削除
settings.jsの比較的最初の方にあるadminAuthプロパティのコメント記号を外します。
2.2.2.adminAuthプロパティの記述の変更
以下の手順で修正します。
- username:の後ろにユーザー名を記載します。
- password:の後ろに2.1.で作成したハッシュ値をコピーします。
- permissions:の後を権限に従って修正します。”*”か、”read”を記載します。
それぞれ、次の意味になります。
”*”:編集可能(すべての権限)、”read”:読み出しのみ
修正後、[Ctrl]+oで、ファイルを保存します。その後、[Ctrl]+xでnanoを抜けます。
2.3. Node-REDの再起動
2.3.1. pm2でNode-REDを起動している場合
pm2を使って、Node-REDを起動している場合には、pm2で再起動をかけます。
pm2で実行しているかどうかを確認する場合は、
$ pm2 show node-red
で状態が確認できます。pm2で起動している場合には、以下のように状態が表示されます。pm2で起動していない場合には、pm2 not foundが表示されます。
再起動する場合は、
$ pm2 restart node-red
で再起動されます。
2.3.2. sytemctlでNode-REDを起動している場合
systemctlでNode-REDを起動している場合には、systemctlでNode-REDを再起動します。
systemctlで起動している場合には、以下のコマンドで状態が確認できます。
$ systemctl status nodered
画面に状況が表示されます。
再起動は、以下のコマンドで行います。
$ sudo systemctl restart nodered
2.4. 起動後のエディタ画面の認証の確認
再起動後、Node-REDのエディタ(http://外部IPアドレス:1880/)にアクセスすると、ユーザー名とパスワードを聞いてきます。
ユーザー名とパスワードを入力してエディタ画面に入れることを確認してください。
3.Node-REDダッシュボード画面のパスワード認証
ダッシュボード画面のパスワード認証は、以下の手順で行います。
1) Basic認証用アプリ basic_authのインストール
2) settings.jsファイルの修正
順に説明します。
3.1. Basic認証用アプリ basic_authのインストール
Basic認証用アプリbasic_authをインストールします。端末から以下のコマンドを入力します。
3.2. settings.jsファイルの修正
エディタnanoを使って、settings.jsを修正します。
1) basic-authの呼び出しの追加
2) middlewareの記述追加
を行います。
3.2.1. basic-authの呼び出しの追加
以下の1文を、”module.exports = {“の記述の前に追加します。
var auth = require('basic-auth');
3.2.2. middlewareの記述追加
settings.jsには、以下のdashboardに関して以下の記述があります。ここでは、middlewareとしてfunctionを追加します。
/** If you installed the optional node-red-dashboard you can set it's path
* relative to httpNodeRoot
* Other optional properties include
* readOnly:{boolean},
* middleware:{function or array}, (req,res,next) - http middleware
* ioMiddleware:{function or array}, (socket,next) - socket.io middleware
*/
//ui: { path: "ui" },
以下の命令をファイル末の括弧 “}” の前に追加します。そして、追加後、ダッシュボードのユーザー名を’username’と書かれている場所に、パスワードを’password’と書かれている場所を記入して(書き換えて)ください。
ui:{
middleware:function(req,res,next) {
const ui_admins = {
'username': { password: 'password' },
};
const user = auth(req);
if (!user || !ui_admins[user.name] || ui_admins[user.name].password !== user.pass) {
res.set('WWW-Authenticate', 'Basic realm="node-red"');
return res.status(401).send();
}
return next();
}
},
以上で、ダッシュボードのパスワード認証の設定が完了しました。
3.3.Node-REDの再起動
「2.3.Node-REDの再起動」と同じようにして、Node-REDを再起動します。
3.4.起動後の画面の認証の確認
再起動後、Node-REDのダッシュボード(http://外部IPアドレス:1880/ui/)にアクセスすると、ユーザー名とパスワードを聞いてきます。
ユーザー名とパスワードを入力してダッシュボード画面に入れることを確認してください。