参照専用フロントサーバの構築

初めて投稿させていただきます。

同じような内容について触れたスレッドがありましたら申し訳
ありません。

当方、現在参照専用のフロントサーバを作れないかについて
目下検討中です。

Zabbixユーザの設定で変更権限のないユーザが作成できることは
知っているのですが、フロントを社内のネットワーク越しに
ソースを絞らない形で公開しようとしているので、アカウント
管理以上にそもそもフロントサーバからの変更クエリを
DBが受け付けない構成にしたいと考えています。

まずは試しにフロントサーバを分離し、read_onlyオプションを
設定した参照用のMySQLサーバ(変更用DBは別途用意し参照用は
そのスレーブとして設定)に接続するようにして検証してみた
のですが、そもそも変更権限のない一般ユーザを
zabbix.conf.php内のDB接続ユーザに設定するとことあるごとに
以下のようなメッセージが出て変更はおろか参照すらままならないようになってしまいました。

[The MySQL server is running with the --read-only option so it cannot execute this statement]

何か参照専用のフロントを構築するよい構成についてアドバイスいただけないでしょうか。

何卒よろしくお願い致します。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー kodai の写真

まずは試しにフロントサーバを分離し、read_onlyオプションを
設定した参照用のMySQLサーバ(変更用DBは別途用意し参照用は
そのスレーブとして設定)に接続するようにして検証してみた
のですが、そもそも変更権限のない一般ユーザを
zabbix.conf.php内のDB接続ユーザに設定するとことあるごとに
以下のようなメッセージが出て変更はおろか参照すらままならないようになってしまいました。

[The MySQL server is running with the --read-only option so it cannot execute this statement]

表示しか行えないユーザでも、ログイン時に監査履歴を保存するために更新系のクエリが発生します。そのためMySQLにread_onlyオプションをつけると上記のようなエラーが出てしまっているのではないかと思います。

監査履歴を残さないというオプション設定はないのでread_onlyオプションを使うにしてもソースを修正する必要が出てきます。

試していませんが、監査ログのテーブルにだけ書き込み権限をつけたMySQLユーザを作成して、そのユーザでアクセスするように設定してみる方法はどうでしょうか?

ユーザー mur_ms_ の写真

ご回答ありがとうございます。

本件、Apache認証を使用することで対応できました。

公開用のフロントにはROユーザのみをApache認証用に作成し、
実際には以下のような手順をフロントサーバ上で実行しました。
------------------------------------------
#htpasswd -c /etc/httpd/.htpasswd rouser
New password:
Re-type new password:
Adding password for user rouser

#vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/zabbix">
AuthType Basic
AuthName "Zabbix Read-Write Front Web"
AuthUserFile /etc/httpd/.htpasswd
Require user rouser
</Directory>
------------------------------------------

WebページにアクセスするとApacheに認証を求められ、上記rouser
でログインするとZabbix認証画面はパスされるという動作です。
Zabbix上でrouserを参照用のユーザとして設定しておけば変更も
できません。

あまりWebの認証関連に詳しくないのでこの方法だとどんな脆弱性が
あるのかなどを正しく把握していませんが、公開用フロントとはいえ、
社内ネットワークなのでいったんは問題なしと判断しています。

表示しか行えないユーザでも、ログイン時に監査履歴を保存するために更新系のクエリが発生します。そのためMySQLにread_onlyオプションをつけると上記のようなエラーが出てしまっているのではないかと思います。

エラーに出力されていたテーブル名がセッションID関連のものだった
ので、エラーの原因はおっしゃる通りだと思ます。

試していませんが、監査ログのテーブルにだけ書き込み権限をつけたMySQLユーザを作成して、そのユーザでアクセスするように設定してみる方法はどうでしょうか?

私もまだ試していませんがこの方法も検討しました。
ただ、運用者が別部隊なのであまりDBの権限を複雑にしたくない
思いがあります。
どうなるのか試してみたい気はするので余裕があれば実行して
結果展開できればと思います。

いったんは上記方法で対応はしていますが、この方法を採用する
注意点などもし思いつくものがあれば教えていただけると非常に
ありがたいです。

ユーザー kodai の写真

Zabbixのインターフェースをインターネットに公開しつつ、社外からの不要なアクセスから守る、という要件であれば、上記のZabbixの認証をBasic認証にする方法で大丈夫だと思います。

WebインターフェースとDB間のアクセス権を考慮し始めると、おそらくソース修正まで考える必要が出てくると思います。