#1.さて...システムをどうやって作ろう...
前回、ゼロトラストネットワークとはなんぞやについて簡単に語った。
端末、人などから通信の全てを認証するゼロトラストネットワークなんて、簡単に実装できるわけがない。
##認証と認可
前回は結構曖昧に話していたが、認証と認可の違いをここではっきりしておく。
一連の通信の中で、認証はセッションごと、認可はリクエストごと行われる。
例えばどこかのサーバに繋ぐときに行われるのが「認証」、サーバに何かしらのアクションを要求するときに行われるのが「認可」である。今後、この二つをきちんと区別して書き残していきたい。
PKI(公開鍵基盤)は通信の安全性を証明するのに用いられる。これは、「認証」の技術である。
わかりやすく言えば、「この通信は間違いなく〇〇さんからの通信だよ!」というものである。
次に認可についてである。ゼロトラストネットワークシステム構築の重要性はこちらの認可のシステムをまずメインに作っていきたい。
わかりやすく言えば、「このコマンド(アクション)は〇〇さんからの命令だけど、実行していいかな?」というものである。unixシステムのsudoなども認可などに近いような気がする。
どちらも、ゼロトラストを実現する上で欠かせない技術である。
#2.認可はどうやって行われる?
現在のほとんどのシステムの現段階の認可-「アクションを通していいか」っていうのは「管理者権限があるか」に収束すると思う。
前回話したように、ゼロトラストを実現する上で、認可のために必要な要素は管理者権限だけではない。場所、IP、などなどから作成される「エージェント」が必要である。
##エージェントとは
ネットワークエージェントとは、ネットワークリクエストをするエンティティ(端末とか)についてわかっているデータの組み合わせのことをいう。
エージェントのデータフィールドは以前述べた認可を下すための様々な情報である。挙げられるものとして、IPアドレス、位置情報などに加え、エージェントの参考スコア、ユーザの居住地、デバイスメーカなどもある。ここで大事なのは、
####データフィールドの標準が存在しないこと
である。つまり、認可を下すにあたって必要なデータ( =特徴量)が定まっていないのである。
今回のプロジェクトでは、この特徴量の算出から簡単に行ってみたいと考えている。
多分、データフィールドに関してはJSONやらXMLなどにまとめることになりそうである。
では、次にエージェントを通してどのように「認可」を下すか見ていく。
#「認可」アーキテクチャ
認可とは、先ほど述べたとおり、これ、実行していいの?というものである。端末自体の「認証」は既に済んでいるものとして考える。
ゼロトラストの認可アーキテクチャは主に4つのアーキテクチャから構成される
・エンフォーサ
・ポリシーエンジン
・トラストエンジン
・データストア
エンフォーサはデータプレーンに属していて、その他はコントロールプレーンに分かれている。
以下にそれぞれの特徴を書いていく。
###エンフォーサ
エンフォーサはポリシーエンジンとのやりとり(=認可リクエストそのもの)を行う。
###ポリシーエンジン
ポリシーエンジンは、認可の判断を決定するコンポーネントである。その際にリスク分析を行うのがトラストエンジンである。ポリシー(ルール)自体は、ポリシーストレージとして別の場所(理想的にはバージョン管理システム)に格納するのが望ましい。
トラストエンジンから返されたエージェントを受け取り、ポリシーと照合して、分析を行う。
###トラストエンジン
トラストエンジンは特定のリクエストに対してリスク分析を行うシステムである。
最終的な認可の判断にこの機構から算出されるスコアを用いることになる
この判断には静的なルールに加えて、機械学習モデルも導入するのが望ましい。
そして、何よりトラストエンジンは、先述したエージェントを生成する。
###データストア
認可の判断に使われるデータストアである。システムは現在と過去の状態を保管し、認可の判断の際に、トラストエンジンとやりとりをしながらデータを取得していく。
###まとめると...
簡単な例を引き合いに出して考える。
AliceはBobの会社のサービスに近所のコーヒーショップからアクセスしようとしている。
-
AliceはBobの会社のサービスにアクセス申請をする。
-
Aliceの端末とリンクしている(内蔵されているエンフォーサ)はコントロールプレーン(ポリシーエンジン)に向かってサービスへのアクセスを要求する
3.ポリシーエンジンはエンフォーサからリクエストとコンテキストをポリシーと比較するべく、リスク分析をするトラストエンジンにそのデータを渡す。
4.トラストエンジンは受け取ったデータ、そして過去のデータなどから認可のためのスコアを算出。ポリシーエンジンに返す。
5.ポリシーエンジンはそのスコアと静的な情報(リクエストやそのコンテキスト)から認可の判断を下す。
6.エンフォーサはポリシーエンジンから認可の可否を受け取り、端末に通知する。
7.認可が下りた場合、Aliceは一時的にBobのサービスへのアクセス権を獲得する。
といったところだろう。
そのほか、ユーザ、端末、アプリケーション自体の信用はそれぞれなされなければならないので、憂慮するべき項目はたくさんあるのだが、とりあえず仮定のポリシーから認可の判断を下す、トラストエンジンの簡易版をとりあえず作ってみたいと思う。