#builderscon 2019 参加レポート

今年もbuildersconに参加してきました。

builderscon.io

参加したセッション内容のメモと簡単な所感、全体所感を書き残しておきます。資料が公開されているものはリンクを張っておきました。

※一部、私個人の解釈でメモしているものもあり、発表者の方の本来の意図とズレているものがあるかもしれませんがご了承下さい。

昨年と一昨年の参加レポートのリンク。

本編1日目

Open SKT: メルペイ開発の裏側 - builderscon tokyo 2019

builderscon.io

資料: Open SKT: メルペイ開発の裏側 / builderscon tokyo 2019 Open SKT : Speaker Deck

内容

  • 決済はお金のトランザクション管理が難しい
  • SKTってなに?
    • Super Kazegusuri Time
    • オンボーディングも兼ねた社員研修
  • メルペイの開発で重視していること
    • インフラのように安定して信頼できるシステム
    • サービス開発をメインにしない
  • アーキテクチャ
    • GKE使ってる
    • 4階層のアーキテクチャ
      • Client
      • API Gateway
        • インターネットからのリクエストを安全に内部に届ける
      • API Service
        • クライアントとのメッセージに責任を持つ
      • Backend Service
  • 分散システムにおけるトランザクション
    • 難しい
    • 中央で一元管理する方向に
    • エラー処理も含めたモデルの一般化が必須
      • エラー処理を例外として扱わない
  • お金のモデルは全て状態遷移モデルを定義している
    • 引き算はいきなり確定させるとキャンセル時など不都合が生じる
    • いったん確保、その後に確定する
  • 不正検知
    • メルカリだけの時より本人確認、リアルタイム不正検知が重要に
    • AML/CFT
      • 金融庁からガイドラインがでている
      • 疑わしい人を見つけ出す、疑わしい取引を見つけ出す
      • ルールベースと機械学習の両方でやっている
        • ルールベースはSplunkを使っている
  • 開発フロー自体はメルカリと共通だが多少違いがある
    • メルペイでは各フェイズで追加のルールを設けている
    • Design Docはアーキテクチャ、SRE、関連チームからのレビュー必須
    • Testは第三者がテスト結果を検証可能な状態に
    • サービスの安定性の指標としてSLOを重視
      • まだ運用には課題がある
    • 本番環境にアクセスできるのはSERのみ
  • 業界全体のレベルをあげるために事例をどんどん公開していきたい

所感

メルペイのシステムアーキテクチャ、決済サービスの難しいところ、メルカリとの開発体制の違いなどが語られたセッションでした。
お金を扱うという特性から信頼できるインフラとなるようなシステムにするために、コストをかけてもより安全に開発していくという信念がとても伝わってくる内容でした。
サービスの安定性の指標としてSLOを重視するという話がありましたが値の設定とそれの運用はとても難しそうだと思いました。SLOをどのように設定し、どのようにアップデートしていくかの知見を今後是非聞いてみたいですね。

Android Architecture Componentを使って、改善・効率化するAndroidアプリ開発 - builderscon tokyo 2019

builderscon.io

資料: まだ未公開?

内容

  • AACの全体像
    • 便利に使える、公式、モダン、部分的に導入可能
    • Android Architecture Components  :  Android Developers
    • Data Binding
      • xmlからBindingクラスが生成される
    • Lifecycle-Aware Components
      • @OnLifecycleEvent(...)を使ってどのライフサイクルイベントでそれを実行するか書ける
      • ライフサイクルを外だしできる
    • Live Data
      • Lifecycleを考慮してくれるObservable
    • ViewModel
      • 画面が回転したとき画面は再生成されるがViewModelは変わらない
    • Room
      • SQLiteのオブジェクトマッパー
    • WorkManager
      • 少し長い処理や遅延できるものを実行するときに使える
      • 電力状態などデバイスの状態で実行するかどうか決められる
    • Paging
      • ページネーションに必要なPageのデータを持てるもの
    • Navigation
      • iOSでいうSegue
  • 既存プロダクト(Wantedly People)への導入とその変化
    • RealmからRoomへ
      • Roomの方がテスタビリティが高い
    • MVPからMVVMへ
      • ViewModel
    • WorkManagerの利用
      • 端末の連絡先と同期部分で利用。遅延実行することでUXの改善に繋がった

所感

Android Architecture Componentの概要とWontedly PeopleのAndroidアプリでどのように使っているのかが語られたセッションでした。
最近Android開発に関する情報はあまりちゃんと追っていなかったのでいろいろと知れました。公式でこれだけ用意されている状況なので、新規でAndroidアプリを開発するときはまずは公式のものを使ってどこまでできるかを考えて、それでまかないきれないものに対して他のライブラリを使うかどうか検討していくのが良さそうだと思いました。 Android Architecture Componentはいきなり全部入れないで自分たちに必要なものを徐々に入れていけるので、今回の発表の例のように既存の実装を置きかえていきやすいのもGoodですね。

WebAuthn/FIDOのUX徹底解説 ~実サービスへの導入イメージを添えて~ - builderscon tokyo 2019

builderscon.io

資料: WebAuthn/FIDOのUX徹底解説 ~実サービスへの導入イメージを添えて~ / builderscon tokyo 2019 ritou : Speaker Deck

内容

  • パスワード認証にはさまざまな問題がある
  • ワンタイムパスワード認証
    • 結局はユーザーが入力する必要がある
  • FIDO
  • FIDOのユースケース
    • パスワードレス認証として(所持+ローカル認証)
    • 追加認証として(所持)
  • FIDO 2
    • WebアプリからもFIDO
    • WebAuthn
      • FIDOを利用するサービス側が呼び出す
    • CTAP
      • セキュリティキーとやり取りするための仕様、ブラウザが実装
  • WebAuthnのフィッシング耐性
    • origin単位で鍵ペアを生成しているのでそもそもフィッシングサイトにログインできない
  • WebAuthnのUX
    • 追加の認証方式として利用しているユースケース(パスワード認証 + FIDO)
      • Dropbox
        • ソーシャルログイン後にも聞いてくる
      • GitHub
        • 重要な処理前のパスワード確認時にもセキュリティーキーを利用可能
      • Google
        • Android端末だと独自の方式を使っている(caBLE)
      • ポイント
        • 複数の認証方式を提供して「詰みにくい」仕組みが必要
    • メインの認証方式として利用しているユースケース(パスワード認証 or FIDO)
      • Yahoo!JAPAN
        • Android + Chrome環境に限定
        • ユーザー識別後に認証方式を出し分け
      • Microsoft
        • Windows Helloが動作する環境 + MS Edge限定
      • ヌーラボ
        • メインの認証方式としてパスワード認証と併用可能
      • ポイント
        • userVerificationは必須
        • サポート環境の制限
          • 制限ありだとメンテナンスが必要、制限なしならFIDO2対応環境なら勝手に対応可能
    • パスワードレスに向けて
      • 新規サービスではパスワード認証を導入しない
      • WebAuthn/FIDOが使えない環境のケア
      • 既存のサービスからパスワード認証を取り除く
        • 依存をなくす、強制もしくは任意で無効化する
  • Q&A: Authenticator自体が脆弱性を持っている場合もあるのでは?
    • どのデバイスで認証しているかを検証することは一応できるはず
    • これにより指定したデバイス以外は弾くこともできるかも

所感

WebAuthnの認証フローを実際に実装しているサービスの認証画面を元に説明してくれるセッションだったのでとても分かりやすかったです。
WebAuthnを使っているといっても思ったよりサービスごとにフローがバラバラで分かりづらい状況ということが理解できました。ITリテラシに疎い人からしたら現状この仕組みはかなり難しい気がします。今まではAuthenticatorの普及だけが問題だと思っていましたが、それだけでなくこのあたりのフローも業界内である程度統一できないとなかなか普及は難しそうだと感じました。

ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ - builderscon tokyo 2019

builderscon.io

資料: ビジネスの構造を扱うアーキテクチャとユーザとの接点を扱うアーキテクチャ #builderscon : Speaker Deck

内容

  • SoRとSoEを各設計原則や設計パターンをベースに言語化したかった
  • モデルとは何か
    • SoRとSoEでは扱うモデルが違う
    • 解決した問題領域から必要と思われる情報を抽出して記号化、可視化したもの
    • どのようなモデルが有効化は対象とする領域に依存する
  • E-コマースサービスで考えると
    • SoRは事業者アクターを要求元とするドメインモデルをもとにしたアプリ
    • SoEは利用者アクターを容共元とするプレゼンテーションモデルをもとにしたアプリ
  • CQRSとの関係
    • SoR/SoEという分類とCommand、Queryの非対称性に着目した分離は共通している部分が多いのでは?
  • SoR/SoEの実践
    • バリデーション
      • バリデーションには種類がある
        • 入力値のチェック
        • その事業において必要な不変条件
      • 値のみでチェック可能なもの(入力チェックなど)はSoE側で可能
    • 整合性
      • SoR的にはシステム全体で不整合がないことが求められる
      • SoE的には利用者一人ひとりが自身の世界を持っている
    • 状態遷移
      • SoEのベースにあるのは特定の利用者アクターにとってのモデル
        • SoRが持つ全体の状態遷移モデルとは違う
      • SoRの状態遷移の一部だけが利用者にとっての関心領域
        • SoEにその複雑さを持ち込まないように
    • キャッシュ
      • 基本的にSoE側の関心
      • 戦略はいろいろある
        • 毎回、SoRに問い合わせる
        • Pub/Subによるリフレッシュ
        • Expireをもつ

所感

モール型のE-コマースサービスを例にして、アクターの分け方やSoRとSoEのシステム間連携をどのような考えで行うかが説明されたセッションでした。DDD本とClean Architecture本をあらためて読み直して考えたくなるような内容でした。
SoRとSoEって確かにバズワードっぽい感じになっている感じもするのでこうやってきちんと設計に落とし込んで考えられるようにするというのは非常に大事なことだと思います。
B2BがSoRで、B2CがSoEなのか?」のような質問があった気がしますが(うまく聞き取れなかったので違っていたらすいません)、そういう区分ではないと思っています。B2B、B2CのシステムそれぞれにSoE、SoRの分類があると考えます。今回の発表にもあったようにアクターで分けて考えればそれは自明だと思います。そういう意味でもこの発表の内容はとても分かりやすかったです。

本編2日目

レガシーサーバーを現代の技術で再構築する - builderscon tokyo 2019

builderscon.io

資料: レガシーサーバーを現代の技術で再構築する/builderscon2019 : Speaker Deck

内容

  • SVNとかRedmineなどがのった古いサーバーを何とかする話
    • やらないことを決める
    • URLは維持する
    • マネージドサービスを使っていく
  • 4年おきくらいに一応再構築はしていた
  • Redmineに気軽にモンキーパッチを当てるなどしてとりあえず便利にしてしまっていた
    • バーションアップが実質不可能に
    • Redmineにモンキーパッチを当てない、バージョンアップの障害になるのでプラグインは入れないという方針に変更
  • やらないことを決める
    • SVN
      • 今後移行してもらうことを前提に維持する
      • 新規作成はなし
    • Git
      • アクティブなものはGitHub
    • Redmine
      • バージョンアップも含め維持
  • EC2を分解しマネージドサービスで再構築
    • ALB導入
    • EBSをAmazon EFS/S3に置きかえ
      • ファイルじゃ無いといけないものはEFS、アプリを書き換えられるものはS3
    • アプリをECSを使ってコンテナ化、ALBから振り分け
    • ALBでルーティングし、URLを維持したまま段階移行が可能に
  • ファイルがディレクトリに大量にあるとlsコマンドが返ってこない
    • findを使いましょう
  • 認証どうするか
    • いろんなものにhtpasswdを使っていた
    • 最近のものはG Suite
    • htpasswdはどうにもできないのでGitHubでバージョン管理、Circle CIでworkflowを実行しサーバー上に配置
  • FargateからEFSは現状使えない
  • 定期的にシステムと業務を見直し、維持するもの切り捨てるものを決めることが大事

所感

歴史のあるサーバーをモダン化していくにあたっての取り組みやそこで得た知見が語られたセッションでした。
Redmineで使っていたプラグインが原因でバージョンアップが困難になったという話はあるあるだなと思いました。こういうプラグインって便利だからついつい入れちゃうんですよね。で、数年後もうメンテされて無くてどうしようというパターン。利便性との天秤がとても難しいので苦労が伝わってきました。
質疑応答で出ていた、使っているか使っていないのかよく分からないものはとりあえず黙って止めて文句がでるか様子を見るという方針は私もやったことがあるので皆やってるんだとちょっと安心しました。

htpasswdをGitHubで管理してることがちょっと気になってつぶやいていたらfujiwaraさんから返事を頂いたので貼っておきます。

スーパーカミオカンデの開発と運用 - builderscon tokyo 2019

builderscon.io

資料 : Introduction to Super-Kamiokande for geeks(?)

内容

所感

本当に初めて聞くような内容でした。まさに知らない世界。でも発表もテンポがよくとても楽しく聞かせていただきました。
前半は量子力学的な話、後半はデータ取得/保存のためのIT寄りの話でした。
こういう世界でもインフラ周りやソースコード管理などで考えないといけないことは割と同じ感じで「おーこういう分野の仕事や研究においても今やってる知識って使えるんだ」と思いました。まあでてくる単位の桁は違いましたけど。

入門サービスメッシュ - builderscon tokyo 2019

builderscon.io

資料 : builderscon Tokyo 2019: Intro Service Mesh : Speaker Deck

内容

  • サービスメッシュのような概念は今のコンテナブームの前からあった
    • マイクロサービス化により分散化し複雑なシステム構成に
    • 今までのツールデは対応できない運用課題が増加
      • Observability
      • Failure recover、fault isolation
    • Finagleに代表されるライブラリアプローチの興隆
      • 自前で作っている会社も多かった
      • 実装の一貫性の問題も
  • 歴史
    • 2016年にLinkerdがリリースされたときに初めてサービスメッシュって言葉が使われた
    • 2016年9月にEnvoyがPublic release
    • 2017年5月にIstioがPublic release
  • EnvoyはProxyの実装
    • Control Planeは自分で用意する必要がある
      • 自作
      • Istio
      • マネージドサービス: Traffic Director、AppApp MEsh
      • Consul
  • Linkerd v2はProxy、Control Plane両方持ってる
  • サービスメッシュ選球眼
    • 自分たちの規模を見据える
      • 大規模になるなら分散化が重要、高度に分散化した環境では通信層での仕事は必須
    • 自分たちの環境を分析してソフトウエアを選ぶ
      • 自分たちのやりたいこととIstioでできることの差分は?などを考える
  • Service Mesh is not for Kubernetes only
    • ただし、ハイブリッドクラウド環境などで使える製品はほとんどないし事例も少ないので頑張りが必要

所感

サービスメッシュ登場の背景や考え方をざっと学べるセッションでした。
コンテナ技術の流行から出てきた概念だと思っていたのですがそんなことはなくそれより前からあった概念だということに驚きました。「Service Mesh is not for Kubernetes only」という言葉は今まではサービスメッシュ=コンテナで使うものという思考しかなかったので考えを柔軟にするいいきっかけになりました。

もしもハッカーの「サイバー攻撃日誌」が読めたら - builderscon tokyo 2019

builderscon.io

資料 : 公開なし

内容

  • Red Teamサービスとは
    • サイバー攻撃シミュレーションサービス
    • サイバー攻撃に備えたい企業や組織がお客様
    • 特徴
      • 攻撃目標の設定
        • 1番守りたいものを設定。それを狙う
      • 事前通知はしない
      • 攻撃対象は組織全体
    • あらゆる手段を駆使して攻撃する
  • 攻撃例のケーススタディ
    • SNS使って従業員の情報集めてメール送信
      • ターゲットに大学の後輩からOB訪問お願いしますという形のメール送付
        • 社員数が多いと数名は必ずひっかかる
      • 添付で履歴書付ける。VBAでマルウエア仕込んでおく
    • 権限昇格させる
      • SYSTEM権限で動作するサービスのEXEを置きかえ
    • パスワードハッシュの取得
      • ローカルアカウントのハッシュダンプを取得し解析
      • IT管理者の特定
        • 座先表や社員番号、機器番号等が載っているファイル等を探して推測
    • 横断的侵害
      • 取得済みアカウントによるリモートコマンドの実行
    • ドメイン管理者アカウントの取得
      • Mimikatz: メモリ上の認証情報を取得
    • ドメインコントローラーに侵入
      • 全ユーザーのパスワードハッシュを取得、解析
      • これを使ってWebメールにアクセス、システム構成図などを探す
      • 2要素認証が設定されているとここで詰まるので対応策を考える
        • ユーザーの端末はもうのっとっているので2要素を突破しているユーザーの端末経由で入り込む
        • ユーザーがお昼などで席を外している間にRDPで入り込んで操作
  • 防御側が理解しておくべき事
    • 検知の仕組み
    • 後から分析できる仕組み
    • 危険度を判断できるスキル
    • 初動、情報共有が早いと侵入に苦労する
  • Hardening projectで練習できる
    • 各チームにECサイトが与えられ主催者がひたすら攻撃、それを守る
  • わざわざそこまでやるやつはいないだろうと誰かが言うたびにわざわざそこまでやるやつが現れる
  • QA: Macの場合はやはり大変なのか?
    • ADに参加していない場合も多く、マシン単体で動作していることが多いので他のマシンに攻撃を展開していきづらい
  • QA : 秘密の質問とかがあるだけでも侵入しづらいって思ったりするのか?
    • たいがいマイドキュメントとかにメモがあるので侵入が難しくなることはない。2要素認証だと本当にやりづらい。

所感

ここまで詳細な攻撃方法を聞けるとは思っていなかったのでとても面白かったです。個人的には今年のベストセッションでした。攻撃のケーススタディはずっとなるほどー!という声を口に出してしまっていました。
やはり2要素認証は使える場合は使うべきってことがはっきりしました。なぜか使わないという謎の選択を過去実際に見てきたのでこのセッションをそのときの関係者に見せたくて仕方なくなりました。
あとは、検知の仕組みをきちんと整えて対応できるようにすることもあらためて大事だと思い知らされました。本気で攻撃されたらやられるときはやられるので、いかに早く反応できるかが勝負になってきますからね。

全体所感

3年連続で参加していますが、本当に毎回知らないことを聞くことができるカンファレンスです。
特に今回は、スーパーカミオカンデのセッションともしもハッカーの「サイバー攻撃日誌」が読めたらのセッションの2つに感銘を受けました。まだまだ自分の知らない世界はたくさんありますな。
会場はいつもの慶応日吉キャンパスではなく北千住の東京電機大学のキャンパスでの開催でしたが、ベンチなども割と多くてちょっと休憩することも日吉よりはできたので快適でした。

運営の皆様、発表者の皆様、参加者の皆様、楽しいカンファレンスをありがとうございました!今年も本当に刺激を受けました!

(おまけ)運営フィードバック

最後に運営面で気づいた点をメモ。

  • 受付がすべてQRコードで済むのは体験としてとてもよい
  • アンケートへの誘導が参加者証の裏のQRコードからいけるの便利
  • 最後に余ったノベルティや水を無理矢理渡している感が少し出てしまっていた
    • さばききりたい気持ちは十分に分かるのですが
  • 質疑応答時にマイクを持っている人が一人であっち行ったりこっち行ったりで大変そうだった
    • もう一名くらい入れて手分けした方がスムーズかも