2015年5月30日土曜日

[大規模システムの設計]基本概念(2)

 大規模システムの原理原則は前述した通りであるが、例外事例について一応の補足を行う。
 管理者にとって、システムの運営は簡明かつ迅速なものでなければならないが、同時に大規模で複雑なシステムは様々な機密情報を取り扱うことも多い。そのような場合、車のキーを入れてエンジンをかけ、簡単に自動車そのものを運転して逃げられてしまうようなセキュリティにしておくと、重大な事故につながってしまう。
 大規模システムが目指すところは簡明かつ迅速な目的の達成、最大効率の実現であるが、システムのセキュリティを考えたとき、手続き的な安全策を入れることを忘れてはならない。たとえばインターネット上のWebサイトで入力を受け付けたら、同じネットワークでそれ以降の処理を進めてはいけない。受付のデータは必然、Webからアクセスできるマシンから参照できるDBに置かなければならないが、OSやミドルウェアにはどのようなセキュリティホールが隠れているか分からないから、オンラインからアクセスするマシンで全てのソフトウェア的な手続きができるようにしてしまうと、重大事故を招きかねないのである。
 このような場合Webで受け付けたデータはミラーリングで2つ以上のハードディスクに保管し、ある一定期間ごと(たとえば毎日午前0時)に1台のハードディスクを切り離して、Webからは参照できないネットワークに持って行って処理するべきである。HDDは一度スタンドアロンのマシンでウィルス感染をチェックし、DBのデータは1項目ごとにSQLインジェクションのような不正なコードがないか確認した上で、特定の形式に変換して抜き出し、更に別のネットワークでその変換後の安全なデータを処理すべきである。こうすることによって、Web上の攻撃者から全く推測のできないデータ形式で内部の処理は実施されることになる。また万一、データを移動するHDDにある不正なプログラムが自動実行されてウィルス感染したとしても、そこから外部のネットワークに接続できなければ情報を外に持ち出されることはない。HDDの内容を消去する不正プログラムを実行されても、内部のシステムをバックアップから戻せばよいだけであり、データを変える不正なプログラムに備えてデータチェックを別のスタンドアロンマシンで行えばよい。リスクは限りなく0に近づけることができる。
 このような一見煩雑な仕組み採用したとしても、HDDを切り離したり別のネットワークに接続する仕組みを機械化すれば、完全な自動化が実現できる。この管理体系全体をメンテナンス可能なものとすれば、ソフトウェア更新もメンテナンスもそれぞれ個別のネットワークやスタンドアロンマシンで行うことができ、入れ替えるソフトを上書きして再起動するだけでメンテナンスは終了する。適用したプログラムがヒューマンオペレーション(産業スパイによる人間の手動操作)で改変されたり、同じくヒューマンオペレーションによってネットワークを不正につなぎかえられたりしていないか不安だろうか。それは周期的に実行するチェックプログラムでチェックできるはずのことである。ネットワークの不正なつなぎかえも、データの改変も、接続しているネットワークの随時チェックやファイルサイズ、更新日時の簡単なチェックだけで異常を検出することが可能であり、どんなチェックが動いているか知らなければそれを回避することもできない。
 コンピュータシステムは処理にかかる時間が一瞬で、なおかつ複雑な挙動を実現することが可能であるため、従来では考えられなかったような複雑な異常検出、侵入検出の仕組みを組み込むことができる。しかもコンピュータは故障以外で誤動作しない。管理体系全体をいつでも予備系に切り替え可能な二重系統としておけば、より完璧である。
 通常はここまでのコストをかけられないので、「誰がいつ何をした」ということを後から追跡できるよう、紙ベースの申請書類を担当者に書かせた上で、2人以上で手動操作による更新を行い、それを更に管理者が確認し、作業しないときはマシン室に物理ロックをかける、といった手順が多くなる。このような場合、多少管理が複雑となり、ソフトウェア更新にも時間がかかることになるが、これはセキュリティ考慮上やむを得ないもので、許容されなければならない。
 前項で指摘したのは、セキュリティなどほとんど考えていないシステムでも、管理可能性を失っているものが多数存在する点である。ソフトウェア開発もこのような側面を次第に重視するようになってきつつあるとはいえ、まだ非効率があることを知りつつ更に複雑な手順を追加するなど、本末転倒な状況がそこかしこに散見されるがゆえの苦言である。大規模なシステムはちょっとしたことで管理可能性を失って混乱に陥りやすい。原理原則が守られているか、日常的に確認することが重要である。

0 件のコメント:

コメントを投稿