テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(akashic report) 一般ユーザがユーザ管理を出来ないようにする

akashic-storageが提供するAPIは2種類に分類される.

  1. ユーザ管理
  2. S3 APIの処理
  val apiRoute =
    handleExceptions(adminErrHandler) { adminRoute } ~
    handleExceptions(serviceErrHandler) { serviceRoute }

このうち後者は, S3の署名認証やACLを実装しているため, 悪意のあるユーザが他ユーザの領域を乱すことは難しいが, 前者は現在のところノーガードである. つまり, 誰でも全ユーザのリストを調べることが出来るし, 他人のアカウントを消し去ることも出来る.

なぜこうなっているかというと, 単に後者の方に集中していて, 前者はほぼプロトタイプだからなのだが, 4/1のリリースに向けてこれではあまりに良くない.

しかし完全に悪いというわけではない. akashic-storageは基本的にオンプレミスに導入される. 従って, 本当の第三者はそもそもローカルネットワークにアクセス出来ないから, その組織の中に悪意のあるユーザがいなければ問題がないということになる. 逆に, 管理者が突然死した場合のリスクなどを考えると, 認証はしない方がいいという考え方すら出来る.

さきほど「基本的に」と言ったのは, ユーザがakashic-storageをVPSにインストールして仲間内での情報共有に使うということがあるからだ. 例えば, 異なる企業間でファイルをやりとりする場合, 現在は, 1) 暗号化zipで送る 2) 別メールでpasswdを送る という日式プロトコルが使われているが, 相手方にもアカウントを提供し, ACL制御によって共有するという方がスマートである.

今, この条件下においてバランスのとれた解決策を探してる.

良い悪いは置いといて, ぱっと思いつくものは,

  1. サーバの設定にadmin passwdを書いておき, これをAuthorizationヘッダにつけないとrejectすることにする (盗み見られることはないか?)
  2. 自サーバからのアクセス以外はrejectするようにする (判定方法は?改竄は出来ないか?)

アカウント管理を, サーバにログインすることを前提とするのはたぶん悪くないので, 完璧なものが出来るなら2, そうでなければ1にして, admin-toolsを作り, HOMEに設定ファイルが置いてあるならばパスワードを自動的に設定したリクエストを飛ばしてくれるという設計が妥当だと思う.

(追記)

Basic認証をすることにしました. サーバ管理者がサーバにログインして, その中でユーザ管理するという用途であれば安全です. 管理者が突然死したら終わりますけど, それはあらゆるシステムがそうなのでしょうがないこと