Slide 1

Slide 1 text

管理ツールの 
 権限管理で改善したこと 
 株式会社MIXI
 みてねプラットフォーム部 
 CREグループ
 
 佐々木 達也


Slide 2

Slide 2 text

©MIXI 自己紹介
 - ささたつ / @sasata299
 - 男子3兄弟の父
 - 騒がしい毎日・・
 - みてねのCREとして頑張っています


Slide 3

Slide 3 text

家族アルバム みてねはスマホで撮った子どもの写真や動画を家族と共有 し、コミュニケーションして楽しむ家族アルバムサービスです。

Slide 4

Slide 4 text

©MIXI みてねのミッション 
 世界中の家族のこころのインフラをつくる

Slide 5

Slide 5 text

©MIXI みてねのCRE 
 - 一般的なCREよりもスコープが広い
 - もともと CXE (Customer eXperience Engineering) チームだった 
 - カスタマーサポート向け、マーケティング向け、それ以外 
 - ユーザの信頼性向上に繋がることをやっていく!
 CS向け
 マーケ向け
 それ以外


Slide 6

Slide 6 text

©MIXI みてねのCRE 
 - 一般的なCREよりもスコープが広い
 - もともと CXE (Customer eXperience Engineering) チームだった 
 - カスタマーサポート向け、マーケティング向け、それ以外 
 - ユーザの信頼性向上に繋がることをやっていく!
 ここの話をします! 
 CS向け
 マーケ向け
 それ以外


Slide 7

Slide 7 text

©MIXI 前提)みてねの管理ツール 
 - Ruby
 - ActiveAdmin + 自作のコントローラ
 - 複雑な処理を ActiveAdmin でやるの大変なので.. 
 - CanCanCan で権限管理
 - モデル単位で権限を指定する 
 - 個人ではなく Role に対して権限を付与する 
 権限設定のイメージ 


Slide 8

Slide 8 text

©MIXI セキュリティ面での漠然とした不安 
 - 管理ツールでは様々な情報を扱っている
 - 機能改修や権限追加は、各チームが進めている
 - 日々、機能や権限が増えていく 
 チームA
 チームB
 チームC
 管理ツール


Slide 9

Slide 9 text

©MIXI 「何が課題なのか?」を具体化する 
 - セキュリティチームとあるべき姿を検討
 - 特に守るべき重要な情報は何か? 
 - 権限は、必要な人に、必要なものだけにしたい 
 - 後から追跡可能に、など 
 - 現状とのギャップ(=解決すべき課題)が見えてきた


Slide 10

Slide 10 text

©MIXI 解決すべき課題 
 - 必要以上の権限付与
 - 重要情報への適切なアクセス
 - みてねでは、アップロードされた写真や動画 
 最小権限の原則
 アクセスされる
 情報の最小化
 ✖


Slide 11

Slide 11 text

©MIXI 課題① 必要以上の権限付与 
 - 権限の棚卸し + 不要な権限の剥奪
 - 権限付与に気付ける仕組み
 - パスごとのアクセス制御の見える化


Slide 12

Slide 12 text

©MIXI 課題① 必要以上の権限付与 
 - 権限の棚卸し + 不要な権限の剥奪
 - 直近1ヶ月のアクセス数を洗い出して、アクセスの少ない機能から段階的に棚卸しを依頼 
 - 業務に支障が出ないよう徐々に権限を絞っていった 
 - 権限付与に気付ける仕組み
 - パスごとのアクセス制御の見える化


Slide 13

Slide 13 text

©MIXI 課題① 必要以上の権限付与 
 - 権限の棚卸し + 不要な権限の剥奪
 - 権限付与に気付ける仕組み
 - GitHubのコードオーナーを指定 
 - PR時に開発マネージャーに通知が飛ぶようにした 
 - パスごとのアクセス制御の見える化


Slide 14

Slide 14 text

©MIXI 課題① 必要以上の権限付与 
 - 権限の棚卸し + 不要な権限の剥奪
 - 権限付与に気付ける仕組み
 - パスごとのアクセス制御の見える化
 - 権限を追加/削除したときに、どのパスがアクセス可/不可になったのか?がわかりにくい 
 - 実際に確認できると安心なのでは? 
 - 各 Role で実際にアクセスして、そのときの status code をチェックするテストを作った 
 - テストが今後も追加されるように管理ツールに機能追加されたらPRでコメントを残す 


Slide 15

Slide 15 text

©MIXI この部分を見れば、どの Role がア クセスできるのか一目瞭然
 
 (生きたドキュメントにもなる )


Slide 16

Slide 16 text

©MIXI このテストで気付いたこと 
 - 誰も権限の無いパス
 - 権限管理が効いていないパス
 - ActiveAdmin で member_action や collection_action を使って RESTful ではないカスタムメソッドを 定義することもできるが、権限チェックされない(!) 
 - 公式にも書かれている けど明示的に authorize! を呼ぶ必要がある 
 - 権限の不整合状態
 - 読み取り権限がないのに書き込み権限だけ持っていた、など 


Slide 17

Slide 17 text

©MIXI - リクエストしたユーザの情報だけが一時的に閲覧可能な仕組み
 - リクエストはDBに残るので後から検証可能 
 - アクセスする必要のない情報には(うっかり)アクセスできないようにする 
 参考: 内部不正の理由の約6割は故意が認められない“うっかり” 
 課題② 重要情報への適切なアクセス 
 閲覧制御
 事前のリクエストあり 
 事前のリクエストなし 
 ❌
 ⭕


Slide 18

Slide 18 text

©MIXI まとめ
 - 権限を必要なものに絞り、アクセスされる情報を最小化した
 - 継続的な見直しや改善は必要
 - 不要な権限を検知する仕組み 
 - 重要情報が表示される機能が増えた際の対応、など 
 - あるべき姿に向かって、引き続き一歩ずつ改善を進めていく