CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
みなさんこんにちは。最近、若手エンジニアと仕事をする機会の多い濱田です。今までは「ある程度できた上での効率化」「さらなる品質向上」を観点としたコラムをお届けしましたが、改めて基本に立ち返ってオペレーションの質を上げる方法を取り上げてみたいと思います。
WEBサーバーのアクセスログや/var/log/messagesなどのシステムログの重要性は言うにおよばず、日ごろの心がけとして作業ログ取得は重要です。では何故作業ログの取得が重要なのでしょう。主に、以下3つの目的があります。
これらの目的をもってログ取得の仕組みを構築するか、ルール化することにより、より信頼性の高いサービスを提供することが可能になります。
そもそも何故作業ログを取得する必要があるのか、という理由づけにもつながるのですが、作業ログがあることで自らの作業を説明しやすくなるというメリットがあります。重要度の低いサービスや障害時の社会的インパクトが低いサービスであればあまり厳しい要求は求められませんが、個人情報を取り扱うサービスや金融機関などのサービスを扱う場合、作業ログの取得が義務付けられることがあります(詳細は「規制上の記録義務」で詳しく触れます)。
しかし、ミッションクリティカルなサービスでなくても、普段から作業ログ取得を行うことで、作業品質の向上と障害調査の迅速化を行うことが可能になります。作業ログ取得が何故作業品質向上に繋がるか、を噛み砕きますと
主にこれらのメリットがあります。1番はどちらかと言えば意識の問題ですので、あまりオペレーションに慣れていないメンバー向けの施策になります。2番目と3番目については、もう1歩踏み込んだログ活用という観点になります。
ログを取得していることを周知することにより、心理的に不正防止・抑止に繋がることが期待できます。JNSA (特定非営利活動法人 日本ネットワークセキュリティ協会) が発表した「2017年 情報セキュリティインシデントに関する調査報告書【速報版】」によると、2017年の個人情報漏えいインシデントの分析結果のうち、内部犯罪・内部不正行為は8件、全体の2.1%でした。
しかし、盗難や不正な情報持ち出し、誤操作や管理ミスなども含めると、情報漏えいのほとんどが人為ミスや不注意に起因し、バグ・セキュリティホールが5件(1.3%)、ワーム・ウィルスが2件(0.5%)と大変低い割合となっています。
設定ミスに関してはログを採るだけでは防ぐことは困難ですが、情報漏えいの原因で大きな割合を占める不正行為については、人間の心理(悪意)に訴えかける手段として、操作ログを採っていることを公言することで、かなりの効果を挙げることが期待できると言えるでしょう。
PCI DSS 《Payment Card Industry(PCI)データセキュリティ基準(DSS)》はペイメント業界におけるグローバルセキュリティ基準です。カード会社のみならず加盟店もPCI DSS準拠を求められており、セキュリティ基準のデファクトスタンダードと言えましょう。
2016年4月に発表されたPCI DSS v3.2 の要件10「ネットワークリソースおよびカード会員データへのすべてのアクセスを追跡および監視する」では、ロギングに関する要件が詳細に書かれています。また、単にログを取得するだけでなく、時刻同期を行うことや監査証跡ファイルを不正な変更から保護するなど、ログの信頼性を担保するための要件も盛り込まれています。
CTC教育サービスでは、PCI DSS解説コースを開講していますので、PCI DSSを理解するうえで必要な基本的知識の習得や、PCI DSSについておさえておくべきポイントを学ぶことができます。金融機関の案件に携わる方やサービス開発をされる方には是非受講していただければと思います。
作業ログ取得の重要性について理解したところで、どうやって作業ログを取得するかについて掘り下げてみたいと思います。ログを取得する方法はいくつかありますが、シェルやSSHクライアントの標準機能でできる機能からご紹介します。
bashなどのシェルにはhistory機能によりコマンド実行履歴が ${HOME}/.bash_history に記録されます。特に何の設定をせずに1000回ぶんの履歴を保存することができ、Ctrl+Rキーで履歴を呼び出せるなど便利な機能ですが、
という欠点がありますので、監査証跡とするには不十分です。
筆者がよく使う方法で一番気軽に導入できるのが、scriptコマンドによるロギングです。historyコマンドと違い、コマンドの実行結果もログに記録されるので、監査証跡としてはやや信頼性が上がります。時刻については、scriptコマンドのシェル開始時と終了時に時刻がログに書き込まれますので、ログの信頼性はやや上がります。
自動でログ採取を行う方法としては、.bash_profileなどにscriptコマンドを記述しておき、ユーザーがシェルにログインしたらすぐログが記録されるようにすることで、ログ採取忘れをなくすことができます。また、ログファイルを定期的に別サーバーやオブジェクトストレージへ同期する仕組みを作っておくことで、ある程度ログの改ざんを防ぐことが可能になります。
Windowsで利用者数の多いターミナルソフト Tera Termにはロギング機能があります。また、設定によりログ採取を自動で行うことも可能です。詳細は以下ページをご覧ください。
Log ([File] メニュー)
http://ttssh6.osdn.jp/manual/ja/menu/file-log.html
ログの取り方、ログの再生機能
https://ttssh6.osdn.jp/manual/ja/usage/tips/loging_howto.html
その他のSSHクライアント、ターミナルソフトもログ採取機能があればこれを積極的に活用しましょう。
ログ採取を行うにあたって、重要なのは以下の2点です。
作業対象機器の時刻はもちろんのこと、作業用端末の時刻同期も忘れずに行いましょう。また、整形が理由であってもログの編集を行ってしまうと、ログの改ざんを疑われてしまいます。どうしてもログの整形をしたい場合は、オリジナルのファイルを残したまま整形用にファイルをコピーし、コピー先のファイルのみを編集するようにしましょう。
PCI DSSなどの要件でログ監査を重要な業務プロセスとして位置づけている場合など、ログ採取を個人の気づきに依存するのはあまりよろしくありません。商用のロギングツールには、SSH操作ログをテキストのほか動画でも採取できるものがあったりしますので、操作ログの信頼性向上や作業工数削減を行うことができます。
いかがでしたでしょうか。作業ログの有用性を理解し、日々の業務に活かしていただければと思います。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes