3年前に買ったiMacは実質無料

Mac miniの新製品がでたのでリプレースしたいな〜と思いつつ、そこまで買いかえたいわけでもないなという気分。今使っているiMacは 2013 Laterのモデルで、2014年の12月に買ったもの。3.2GHz 4コア Core i5、メモリ32GBに交換、SSD 256GBというスペックで本体が215000円、交換メモリが34000円。もう3年以上使っているけどなんなら仕事で使っているマシンより快適(ストレージ256GBは少し失敗したし、モニターは4Kとかではないのだけど)なくらいなのだよな。十分元はとってるしなんならまだ数年は使えるので実質無料である。次買うならMac miniなのだけどモニターがないので買うとしたら先にそちらかなあ。後はサーバー用機材とか。

STNSと連携して公開鍵認証し、gRPCでサーバーに定義した処理を実行させるツールalpette

今年の4月頃にgRPCの独自認証周りを調べて、勉強がてらそれを使ってツールを作っていた。ものとしては、サーバー側でタスクを定義しておくとgRPC経由で実行させられるというもの。リポジトリは takaishi/alpette

挙動としては、まずサーバー側で以下のようにタスクを定義する。

そして、クライアント側からタスクを指定するとgRPCでサーバーと通信、サーバーはタスクを実行、実行結果を返すというもの。

サーバーで何かするときにSSHすることが多いと思う。しかし、SSHだと実行者が持つ権限が結構大きい。適切に権限を設定すればよいのだけど、別のアプローチとして定義した処理しか実行できないようにするのはどうかと思い試しに実装した。また、gRPCの認証部分でSTNSと連携した公開鍵認証を実装している。標準で使えるSSL/TLSやGoogleを使ってもいいのだけど、STNSと連携することでユーザー管理をSTNSにまかせたり、将来的には監査などに活用できるのでは?と思いやってみた。

gRPCで独自の認証機構を利用する(SSH公開鍵認証編) という記事に書いているように、WithTransportCredentialを使うことで独自に認証機構を実装できる。基本的にはSSHと同じなのだが、サーバーはSTNSから公開鍵を取得するのでフローとしては以下の図のようになるはず(間違っている箇所があったら教えてくれるとうれしいです)。

なお、これだけだと認証通過後の通信は暗号化されない。そのため、パケットキャプチャすると処理結果が見えてしまう。例えばSSHのように共通鍵を用いて暗号化するという処理が必要である。