3月 08, 2019

notestock機能追加(二要素認証、Webhook機能)

いつも応援ありがとうございます。
今回はnotestock( https://notestock.osa-p.net )に少し機能追加を行ったのでお知らせです。

  • 二要素認証の設定が追加されました
    これは最近よく見かけるかと思いますが、ログイン時にアカウント名とパスワード以外に、スマホなどに表示されたコードも入力してパスワードだけが漏れても安全なようにするという仕組みの一つです。
    notestockではログイン時にシステムから指示されたコードを投稿してもらう形式になっており、これは投稿できる権限をもつアプリ作者などから悪用が可能です。
    そのため二要素認証を設定すれば、notestockが指示したコード以外に、二要素認証アプリに表示されるトークンが必要となり、安全性が高まります。

    また、ログインを無効にするアカウントの設定も可能となりました。
    notestockではグループ機能により、どのアカウントからでもログインが可能ですが、アカウントが多い場合など、全アカウントで二要素認証を設定するのが面倒なことがあります。
    その場合は、いくつかの主要なアカウントでのみ二要素認証を設定し、他のアカウントではログインを無効とすることで、セキュリティを強化しつつ面倒な設定を回避することが可能です。

  • Webhook機能にて、JSON形式での送信とContent-Typeの送信に対応しました
    もう一つ、使い道が難しいWebhook機能ですが。
    送信Bodyに$JSONだけを書くと、ActivityPubで受信したデータをそのまま送信します。Content-Typeの指定もできますので、自前で送信BodyにJSON形式で記入し送信することも可能となりました。

notestockの公開検索対象で、notestockが含まれている投稿をときどき確認していますので、何かあれば投稿しておいてもらえると、反応したりしなかったりします。
よろしくお願いします。

 

3月 03, 2019

システム稼働状況ページを作った

Service status osa-p.net を作った話。

元々、zabbixでシステムの状況はモニタリングしているのだが、それを外部に公開する仕組みを用意していなかった。zabbixのページをそのまま公開したくなかったので、必要な情報だけ抽出して表示できる仕組みが欲しかった。


SNSでつぶやいてみると

UptimeRobotというサービスを紹介してもらえた。

早速設定してみたところ、格好良い稼働状況ページが出来上がったのだが、うちのシステム上、ウェブサーバとデータベースが分離しており、データベースを使う処理は動かないが、ウェブサーバだけで完結する処理は動くという状況があり得て、その表示がしにくいなと感じた。

そこで、やはり自前で処理を作るかと、ついでに使ったことのなかったVueも試しに取り入れてみた。普段仕事でもまだまだjQueryを使うことが多く、また思い付いたサービスを個人で作るときにも早く公開したくて慣れているjQueryを使ってしまうことが多い。今回は急ぐものでもなかったので、サンプル程度しか動かしたことのなかったVueを使ってみた。といっても、やはりサンプルの継ぎはぎではあるのだけど。

処理自体は問題無くできて、さて公開するかというところで問題があった。
稼働状況ページは、自分が管理しているシステムの中で動かしてしまうと、一緒に落ちたときに肝心の状況が見えなくなってしまうので、公開ページは別のサービスで動かしたかった。まず最初に選んだのがS3で、ここでは静的サイトを公開する情報も整っていたので簡単に設定して公開。あとはネームサーバとして使っているCloudflareでCNAMEを張ってやれば動くだろうと考えていた。

実際に公開してみたところ、httpでは繋がるのだが、httpsでは接続ができなかった。S3の公開では、「https://S3ドメイン/バケット名/」だとhttpsが使えるのだが「https://バケット名.s3ドメイン」ではhttpsが使えない。Cloudflare側でHTTP Proxyを有効にしていたら、オリジンサーバーがhttpでも使えたような記憶があったのだけど、どうも上手く行かないので間にCloudFrontを挟んでhttpsでも繋がるようになった。

しかし別の問題が発生した。ページの作りとしては、zabbixから出力したSLAの情報をS3に5分毎にアップロードし、静的ページ側でそれを読み込んで表示する。CloudFrontは読み込んだ情報をキャッシュしてしまうので、いつまでも古い情報が表示されてしまうのだ。もちろんCloudFrontの設定にも用意されているので、TTLの設定を5分にしてみたり、クエリが付いていたらキャッシュしない設定にしたり、キャッシュをクリアしてみたりしたのだが、どうにも解消できなかった。

結局Netlifyで静的ページ部分を配信しつつ、データはS3から読み込むという仕組みで解決した。このやり方ならGitHub Pagesでも大丈夫だろうが、最初すべてをGitHub Pagesで配信しようと考えてしまい、5分毎にコミットとプッシュをしたら怒られそうだなと思って頭の中からGitHubを使うことを取り除いてしまっていた。

ひとまず大枠の仕組みが完成したので、これを応用して、zabbixに入力したメンテナンス情報を各サービスで表示したり、自動でメンテモードに切り替えたりもできるだろう。今はデータベースを止めるメンテナンスがあるときに、各サービスのcronを止めたり、フラグを立てたりと手動で処理してアクセスが止んだのを確認してから作業したりしているので、この辺りも自動化してしまいたいと考えている。