サービス可用性と基本監視のシミュレーション
このステップでは、CIA セキュリティトライアドの 3 番目の要素である**可用性(Availability)**の原則を探求します。可用性とは、システムやサービスが必要なときに運用可能であり、アクセス可能であることを保証します。簡単な Web サービスをシミュレートし、それが実行されているかを確認する方法、サービス障害をシミュレートする方法、そして可用性チェックを自動化する基本的な監視スクリプトを作成します。
まず、~/projectディレクトリにいることを確認してください。
組み込みの Python Web サーバーを使用して、実行中のサービスをシミュレートします。このコマンドはポート8000で Web サーバーを開始し、現在のディレクトリのファイルを配信します。末尾の&は、プロセスをバックグラウンドで実行するため、ターミナルを使い続けることができます。
python3 -m http.server 8000 &
プロセスが開始されたことを示すメッセージと、そのプロセス ID(PID)が表示されます。
[1] 12345
続行するにはEnterキーを押してください。
サービスは現在実行中です。サービスが実行されているかを確認する基本的な方法は、そのプロセスが存在するかどうかを確認することです。pgrepコマンドを使用して、プロセス名を基にプロセスの PID を見つけることができます。
pgrep -f http.server
これにより、サーバープロセスの PID が返され、メモリ内で実行されていることが確認されます。
12345
ただし、実行中のプロセスがサービスが正しく機能していることを保証するわけではありません。より良い確認方法は、ユーザーが行うように、それに接続してみることです。curlコマンドを使用して、ローカルサーバーにリクエストを送信します。
curl http://localhost:8000/confidential_data.txt
サービスが利用可能であるため、前のステップで作成したファイルのコンテンツで応答します。
Top Secret Details
This is an unauthorized modification.
次に、サービス障害をシミュレートしましょう。killコマンドを使用して Web サーバープロセスを終了します。以前に見つけた PID が必要です。
## pgrepコマンドから取得した実際のPIDを12345に置き換えてください
kill 12345
killを実行した後、バックグラウンドジョブに対して「Terminated」というメッセージが表示される場合があります。次に、curlで再度サービスにアクセスしてみましょう。
curl http://localhost:8000/confidential_data.txt
今回は、サービスが実行されておらず接続を受け付けられないため、コマンドは失敗します。これは可用性の欠如を示しています。
curl: (7) Failed to connect to localhost port 8000 after 0 ms: Connection refused
最後に、このチェックを自動化するための簡単な監視スクリプトを作成しましょう。nanoを使用してmonitor.shという名前の新しいファイルを作成します。
nano monitor.sh
エディタに次のスクリプトを入力します。このスクリプトはcurlを使用してサービスをチェックします。成功した応答(200 OK)が得られた場合は「UP」、それ以外の場合は「DOWN」と報告します。
#!/bin/bash
## localhost:8000 のサービスが応答しているか確認します
if curl -s --head http://localhost:8000 | grep "200 OK" > /dev/null; then
echo "Service Status: UP"
else
echo "Service Status: DOWN"
fi
ファイルを保存し、Ctrl+X、次にY、そしてEnterを押してnanoを終了します。
chmodを使用してスクリプトを実行可能にします。
chmod +x monitor.sh
それでは、監視スクリプトを実行してください。サービスは停止しているため、「DOWN」と報告されるはずです。
./monitor.sh
Service Status: DOWN
これで、サービスを開始し、その可用性をチェックし、障害をシミュレートし、それを監視するための基本的なスクリプトを作成する方法を学びました。