どうも、freee でエンジニアリングマネージャー をやっている sentokun です。
以前に私の所属しているチームで開発している権限管理基盤マイクロサービスの記事を書いたのですが、そういえば「権限制御ってなに?」という説明をしていないと思ったので、今回記事にしました。
権限制御とは?
freee の権限管理基盤が行なっている権限制御とは?を一文でまとめると以下となります。
- アクセス制御ポリシーを元に、ユーザーの属性に合わせた適切なアクセス制御を行うこと
というわけで、この記事は権限制御について説明しました。ありがとうございました!
… とはなりませんよね。ちゃんと一文の中の要素を分解してそれぞれ解説していきます。
- ユーザーの属性
- 適切なアクセス制御
- アクセス制御ポリシー
ユーザー属性とは?
freee ユーザーが持っている、様々な属性のことです。例えば以下が挙げられます。
- 管理者やメンバーといった freee プロダクトを利用する上での役割 (ロール)
- 対象ユーザーが契約しているプラン (ライセンス)
- etc
適切なアクセス制御とは?
アクセス制御とは、画面やエンドポイント、データなどにアクセスできるかどうかを制御すること。 この制御を適切に、つまり、アクセスしていいユーザーだけがアクセスできるように制御します。
freee の権限管理基盤 が提供しているアクセス制御には以下があります。
- エンドポイントの保護
- UI の表示制御
これらのアクセス制御については freee の権限管理基盤マイクロサービスの今を語ろう! - freee Developers Hub 内の同名の章で解説していますので、気になる方はぜひリンク先を見てみてください。
アクセス制御ポリシーとは?
アクセス制御ポリシーとは、アクセス制御を行うことができる条件の集まりです。ユーザー属性に対する機能やエンドポイントのアクセス許可・拒否定義 (=アクセス制御ポリシー) を設定することができます。例えば、承認機能は管理者には許可されているが、メンバーには許可されていないといった内容です。
freee の権限管理基盤では、設定ファイルによりアクセス制御ポリシーを記述する形をとっています。以下が設定ファイルの関係図です。
設定ファイルでは、まずユーザーの持つ属性と許可された機能の紐付けを記載します。そして、エンドポイント側の許可設定は、どの機能が使えれば許可するかを記載する形としています。機能はユーザー属性と紐づけられているので最終的に対象ユーザーの許可・拒否がわかる仕組みとなっています。
権限制御 = アクセス制御ポリシーを元に、ユーザーの属性に合わせた適切なアクセス制御を行うこと
freee の権限管理基盤は、解説した要素を使って以下のように制御を行います。
- ユーザーが freee プロダクトにアクセス
- 権限管理基盤は、アクセスしてきたユーザーの属性を見て、許可された機能やエンドポイントを探す
- このとき、アクセス制御ポリシーを用いる
- 権限管理基盤は、許可された機能やエンドポイント情報を元に、ユーザーのアクセスを許可するかどうかを判定する
- アクセスが許可された場合のみ、ユーザーはプロダクトの対象画面やエンドポイントにアクセスすることができる
この一連の流れを一文でまとめると、「アクセス制御ポリシーを元に、ユーザーの属性に合わせた適切なアクセス制御を行うこと」となるわけです。
さいごに
今回は権限制御とは?の解説をさせてもらいました。担当領域の価値を適切に説明するためにも、文章化して説明することは大切だなと感じています。 freee の権限管理基盤の取り組みについては 2024/5/31, 6/1 の 2 日間で開催される freee 技術の日 2024 の 2 日目に話をしますので、よければご参加ください。youtube 配信も予定しています。
ついでに昨年実施した第一回 freee 技術の日の配信リンクも貼っておきます。