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プロパティの記述の変更

以下の手順で修正します。

  1. username:の後ろにユーザー名を記載します。
  2. password:の後ろに2.1.で作成したハッシュ値をコピーします。
  3. 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/)にアクセスすると、ユーザー名とパスワードを聞いてきます。

ユーザー名とパスワードを入力してダッシュボード画面に入れることを確認してください。