LoginSignup
4

More than 5 years have passed since last update.

一時的なSSOサーバのログイン監視

Last updated at Posted at 2017-12-20

一時的なSSOサーバのログイン監視

はじめに

AWSのEC2インスタンスにリバースプロキシ型のSSO(Single Sign On)をのせていて、
Zabbixでログイン監視をしていたのですが、
一旦、Zabbixを外すことにしたので、一時的にログイン監視を入れることになったお話です。
※ 説明ながい・・:unamused:

Zabbixってなんすか?

簡単に言いますと、
 サーバー動いてんの?
 ログイン出来ないよ・・
 アプリ死んでない?
 メモリ枯渇してるっぽい・・等、
統合的にまるっとサーバを監視するツールになります。
詳しくはWikiで。
https://ja.wikipedia.org/wiki/Zabbix

このZabbixを使ってログイン監視をしていたけれど、
今回、この便利なZabbixを停止して、
取り急ぎ、ログイン監視だけ組み込んでみました。
※メモリや容量辺りはAWSのCloudWatchでOK:thumbsup:

Jenkins使うかな

やっぱりここはCIツール界のエース Jenkins を活用して、
定期的な監視運用を進める事にしました。
※ cronは古すぎます・・・

ざっくりアーキテクト

Jenkinsで定期的にログイン監視を行い、
ログイン失敗したらSNSへ通知 ⇒ Lambdaへ依頼 ⇒ Twilioから電話 ⇒ がっかり・・
という流れにしました。
※ Lambda ⇒ Twilio連携は元から使っていたので

image.png

ログイン監視シェル

Jenkinsから叩くログイン監視シェルはこんな感じ。
ログインしてログアウトして問題無ければ終了ですね。
※ログアウトしとかないとセッション溜まるし。

SNSへの通知もシェルの中で実行しています:v_tone3:


#!/bin/sh

# Topic ARN指定 -> Lambdaへ依頼するためのTopic
snsname="arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:telephone-call"

# 第一パラメータ:証明書チェック有無(0:無、1:有)
# 第二パラメータ:SSOサーバURL
# 今回はgetoptも使わず直で指定
if [ $# -ne 2 ]; then
  exit 9
fi

# 第一パラメータが 0 なら証明書チェックをSKIP(-kオプション追加)
sslopt=""
if [ ${1} -eq 0 ]; then
  sslopt="-k"
fi
# 第二パラメータ格納
sso_url=${2}

# cookeファイルパス定義
cookie_file=$(cd $(dirname $0) && pwd)"/tmp/cookie.txt"

# sso login 実行
# ログイン後のページに "SSO TOP Page" が含まれていればログイン成功
# 諸事情によりステータスコードは見ていない
login=`curl -v ${sso_url} -d 'ACCOUNTUID=ADMIN' -d 'PASSWORD=ADMINPASSWD' ${sslopt} -c ${cookie_file} -L | grep "SSO TOP Page" | wc -l`

# login失敗したらSNS Topicへ通知
if [ ${login} != 1 ]; then
  # SNSへ通知 「SSOへのログインに失敗しました。」と電話で連絡
  aws sns publish --region ap-northeast-1 \
      --message "SSOへのログインに失敗しました。" \
      --topic-arn ${snsname}
  exit 9;
fi

# logout 実行
logout=`curl ${sso_url} -d 'LOGOUT=SSO_LOGOUT' -b ${cookie_file} ${sslopt} -o /dev/null -w '%{http_code}\n'`

# ステータスコードが200以外はエラー
# logout 失敗したらSNS Topicへ通知
if [ ${logout} != 200 ]; then
  # SNSへ通知 「SSOへのログアウトに失敗しました。」と電話で連絡
  aws sns publish --region ap-northeast-1 \
      --message "SSOへのログアウトに失敗しました。" \
      --topic-arn ${snsname}
  exit 9;
fi

exit 0;

おわり

Lambda ⇒ Twilio で電話するところは元々存在していたので、
説明は省きましたがざっとこんな感じです。
もっと色々方法あると思いますが、サクッと対応という感じであれば良い方法かなと。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4