6
|
1 \chapter{組織中の許認可管理\\アプリケーションmaTrix}
|
2
|
2
|
22
|
3 maTrixとは株式会社Symphonyが開発しているアカウント管理、許諾判定システムのことである。
|
20
|
4 人、組織、役割等の情報などを木構造として持っており、それらの情報を関連付けることで組織の構造を表現しアクセスルールが書かれたポリシーファイルを用いて許認可管理を行う。
|
18
|
5 本章ではmaTrixの説明と、Jungle上におけるmaTrixの実装方法の説明を行う。
|
6
|
6
|
0
|
7 \label{chap:concept}
|
1
|
8
|
3
|
9 \section{maTrixの保持するデータ構造}
|
6
|
10 matrixは人、役職、役割、役割記述要素といったデータ(表\ref{list:maTrixData})を用いた組織構造と、許認可の判断に用いるポリシーファイルの2つのデータを持っている。
|
|
11
|
|
12 \begin{table}[h]
|
18
|
13 \caption{maTrixの保持する木構造データの例}
|
6
|
14 \label{list:maTrixData}
|
|
15 \begin{center}
|
|
16 \begin{tabular}{|l|l|} \hline
|
18
|
17 人物 & 人のデータが入っている。personIdを持つ \\ \hline
|
|
18 組織 & 組織のデータが入っている。orgIdを持つ ~\\ \hline
|
|
19 役割 & 人や組織の役割データが入っている。roleIdを持つ ~ \\ \hline
|
|
20 役割記述要素 & 役割が持っている要素が記述されている。rdeIdを持つ ~\\ \hline
|
6
|
21 \end{tabular}
|
|
22 \end{center}
|
|
23 \end{table}
|
|
24
|
18
|
25 これらのデータはIdを用いて他の木の参照を行い、組織構造を構築している。
|
|
26 組織構造の例として、人物と組織の組み合わせで組織運用モデルを表現しており、役割は自身のみで役割モデルを表現している。
|
|
27 このように様々な木構造が参照しあうことで多数のデータモデルを表現している。
|
6
|
28 以下にmaTrixの組織情報モデルを記す(図\ref{fig:sosikiTree})。
|
|
29
|
|
30 \begin{figure}[h]
|
|
31 \begin{center}
|
|
32 \includegraphics[height = 10cm ,bb=0 0 563 325]{fig/sosikiTree.pdf}
|
|
33 \caption{組織モデル表現例}
|
|
34 \label{fig:sosikiTree}
|
|
35 \end{center}
|
|
36 \end{figure}
|
|
37
|
|
38 \newpage
|
|
39 maTrixのデータ構造は、保持している組織情報をxmlやjson形式で出力することができる。
|
|
40 以下に人物Treeをxml形式で出力したデータの一部として、1人分のデータを記述する
|
|
41
|
|
42 \begin{itembox}[l]{}
|
|
43 \begin{verbatim}
|
|
44 <Persons>
|
18
|
45 <Person id="p:1" type="Person">
|
|
46 <accountId>a:26</accountId>
|
|
47 <lastName>東</lastName>
|
|
48 <name>東俊一</name>
|
|
49 <nameReading>あずましゅんいちくん</nameReading>
|
|
50 <roleRefIds>r:10 r:34</roleRefIds>
|
|
51 <parentOrganizations type="OrganizationMappedByRole">
|
|
52 <OrganizationMappedByRole type="OrganizationMappedByRole">
|
|
53 <organizationRefId>o:2</organizationRefId>
|
|
54 <roleRefId>r:10</roleRefId>
|
|
55 </OrganizationMappedByRole>
|
|
56 <OrganizationMappedByRole type="OrganizationMappedByRole">
|
|
57 <organizationRefId>o:11</organizationRefId>
|
|
58 <roleRefId>r:34</roleRefId>
|
|
59 </OrganizationMappedByRole>
|
|
60 </parentOrganizations>
|
|
61 <priorities type="PriorityMappedByRole">
|
|
62 <PriorityMappedByRole type="PriorityMappedByRole">
|
|
63 <priority>0</priority>
|
|
64 <roleRefId>r:10</roleRefId>
|
|
65 </PriorityMappedByRole>
|
|
66 <PriorityMappedByRole type="PriorityMappedByRole">
|
|
67 <priority>1</priority>
|
|
68 <roleRefId>r:34</roleRefId>
|
|
69 </PriorityMappedByRole>
|
|
70 </priorities>
|
|
71 </Person>
|
6
|
72 </Persons>
|
|
73 \end{verbatim}
|
|
74 \end{itembox}
|
|
75
|
|
76 \newpage
|
|
77
|
|
78 \begin{table}[h]
|
|
79 \caption{Person.xmlの要素}
|
|
80 \label{list:TreeNode}
|
|
81 \begin{center}
|
|
82 \begin{tabular}{|l|l|} \hline
|
|
83 Persons & この要素以下にPersonの情報があることを意味する~ \\ \hline
|
18
|
84 Person & 人の情報が以下にあることを示す。PersonIdが割り振られている ~\\ \hline
|
6
|
85 accontId & そのPersonのアカウントId。Tree同士の参照に用いる。 ~ \\ \hline
|
|
86 lastName & 苗字 ~ \\ \hline
|
|
87 name & フルネーム ~\\ \hline
|
|
88 nameReading & 名前のふりがな ~\\ \hline
|
|
89 roleRefIds & 役割のIdを記述する ~\\ \hline
|
|
90 parentOrganizations & この要素以下にその人が所属している組織のIdを記述する ~\\ \hline
|
|
91 OrganizationMappedByRole & この要素以下に組織と、その組織の役割を記述する ~\\ \hline
|
|
92 organizationRefId & 所属している組織のId ~\\ \hline
|
|
93 priorities & 人物に割り振られている役割の優先順位を以下に記述する ~\\ \hline
|
|
94 PriorityMappedByRole & この要素以下に役割と優先順位をペアで記述する ~\\ \hline
|
|
95 priority & 役割の優先順位を記述する \\ \hline
|
|
96 \end{tabular}
|
|
97 \end{center}
|
|
98 \end{table}
|
|
99
|
18
|
100 Person.xmlを例で上げたが、役職や役割も同じような構造でデータを保持しており、maTrixには組織情報からデータを取得するFunctionが15種類実装されている。
|
6
|
101
|
|
102
|
|
103 \section{Jungle上でのmaTrixのデータ構造の表現}
|
|
104
|
18
|
105 maTrixが保持している、人物や役職は、木構造のデータであるため直接Jungleに格納できる。
|
|
106 実際に人物のデータを格納したJungleの構造を(図\ref{fig:PersonTree}、図\ref{fig:PersonTree})に示した。
|
6
|
107
|
|
108 \newpage
|
|
109
|
|
110 \begin{figure}[h]
|
|
111 \begin{center}
|
|
112 \includegraphics[height = 8cm , bb=0 0 398 367]{fig/TreePersonJungle.pdf}
|
|
113 \caption{Jungle上での人物Treeの表現例(1)}
|
|
114 \label{fig:PersonTree}
|
|
115 \end{center}
|
|
116 \end{figure}
|
|
117
|
|
118 \begin{table}[h]
|
|
119 \caption{図\ref{fig:PersonTree}に対応したXML}
|
|
120 \label{list:PersonTree}
|
|
121 \begin{center}
|
|
122 \begin{tabular}{|l|} \hline
|
|
123 \verb|<|Persons\verb|>| \\
|
18
|
124 \ \verb|<|Person id="p:1" type="Person"\verb|>| \\
|
|
125 \ \ \verb|<|PersonData\verb|>| \verb|<|/PersonData\verb|>| \\
|
|
126 \ \verb|<|/Person\verb|>| \\
|
|
127 \ \verb|<|Person id="p:2" type="Person"\verb|>| \\
|
|
128 \ \ \verb|<|PersonData\verb|>| \verb|<|/PersonData\verb|>| \\
|
|
129 \ \verb|<|/Person\verb|>| \\
|
6
|
130 \verb|<|/Persons\verb|>|\\ \hline
|
|
131 \end{tabular}
|
|
132 \end{center}
|
|
133 \end{table}
|
|
134
|
|
135
|
|
136
|
|
137 図\ref{fig:PersonTree}は、表\ref{list:PersonTree}をJungleに格納したものである。
|
|
138 Jungleは、TreeNodeに\verb|<|Key String, Value Attribtue\verb|>|の組み合わせでデータを保持する。
|
18
|
139 そのため、XMLのデータをTreeNodeに格納する際、要素の格納は\verb|<| Key "element", Value "要素名"\verb|>|、属性の格納は\verb|<|Key "要素名-属性名", Value "属性値"\verb|>|で格納する。
|
|
140 属性格納時のKeyを、"要素名-属性名"にした理由は、Indexで検索を行う際にKeyの重複を避けるためである。
|
6
|
141
|
|
142 \clearpage
|
|
143
|
|
144 \begin{figure}[h]
|
|
145 \begin{center}
|
|
146 \includegraphics[height = 12cm , bb=100 0 823 502]{fig/TreePersonJungle2.pdf}
|
|
147 \caption{Jungle上での人物Treeの表現例(2)}
|
|
148 \label{fig:PersonTree2}
|
|
149 \end{center}
|
|
150 \end{figure}
|
|
151
|
18
|
152 \clearpage
|
6
|
153
|
|
154 \begin{table}[h]
|
|
155 \caption{図\ref{fig:PersonTree2}に対応したXML}
|
|
156 \label{list:PersonTree2}
|
|
157 \begin{center}
|
|
158 \begin{tabular}{|l|} \hline
|
|
159 \verb|<|Person id="p:1" type="Person"\verb|>| \\
|
18
|
160 \ \verb|<|accountId\verb|>|a:26\verb|<|/accountId\verb|>| \\
|
|
161 \ \verb|<|lastName\verb|>|東\verb|<|/lastName\verb|>| \\
|
|
162 \ \verb|<|name\verb|>|東俊一\verb|<|/name\verb|>| \\
|
|
163 \ \verb|<|nameReading\verb|>|あずましゅんいちくん\verb|<|/nameReading\verb|>| \\
|
|
164 \ \verb|<|roleRefIds\verb|>|r:10 r:34\verb|<|/roleRefIds\verb|>| \\
|
|
165 \ \verb|<|その他の値\verb|>| \verb|<|/その他の値\verb|>| \\
|
6
|
166 \verb|<|/Person\verb|>| \\
|
|
167 \hline
|
|
168 \end{tabular}
|
|
169 \end{center}
|
|
170 \end{table}
|
|
171
|
|
172 図\ref{fig:PersonTree2}と表\ref{list:PersonTree2}も同じくPersonTreeの一部をJungleに格納した時の図である。
|
|
173 基本的な構造は図\ref{fig:PersonTree}と変わらないが、1箇所XMLの構造を変えてJungleに格納した箇所があるのでそこの解説を行う。
|
18
|
174 Jungleはノードにデータを格納する際に、List構造を持つことが出来ないため、keyに対応するvalueは1つしか格納できない。
|
|
175 よって、表\ref{list:PersonTree2}の\verb|<|roleRefIds\verb|>|r:10 r:34\verb|<|/roleRefId\verb|>| の様に、2つの値をテキスト部分が保持している場合どちらか片方しか格納することが出来ない。
|
6
|
176 そこで、読み込む際にデータ構造を、表\ref{list:maTrixDataChild}の様に書き換えてJungleに格納する。
|
|
177
|
|
178 \begin{table}[h]
|
|
179 \caption{Jungleに対応したXML文例}
|
|
180 \label{list:maTrixDataChild}
|
|
181 \begin{center}
|
|
182 \begin{tabular}{|l|} \hline
|
|
183 \verb|<|roleRefIds\verb|>| \\
|
20
|
184 \ \verb|<|roleRefId\verb|>|r:10\verb|<|/roleRefId\verb|>| \\
|
|
185 \ \verb|<|roleRefId\verb|>|r:34\verb|<|/roleRefId\verb|>| \\
|
6
|
186 \verb|<|/roleRefIds\verb|>| \\
|
|
187 \hline
|
|
188
|
|
189 \end{tabular}
|
|
190 \end{center}
|
|
191 \end{table}
|
|
192
|
|
193 この様にmaTrixのデータ構造をJungleにマッピングしていく。
|
18
|
194 また木構造同士の参照を用いて行う組織構造の表現は、JungleではTreeに対する検索で表現する。
|
6
|
195 \clearpage
|
|
196
|
|
197
|
|
198
|
|
199 \section{maTrixのデータの版管理}
|
|
200
|
|
201 maTrixは、組織構造を構成情報モデルとして表現し、版管理している。
|
18
|
202 構成情報モデルはversion毎に存在し、各versionに対応した組織構造を構成する木構造の集合を保持している。
|
|
203
|
1
|
204 \begin{figure}[h]
|
|
205 \begin{center}
|
|
206 \includegraphics[height = 6cm , bb=0 0 463 271]{fig/maTrixVersion1.pdf}
|
|
207 \caption{maTrixの構成情報例1}
|
|
208 \label{fig:maTrixVersion1}
|
|
209 \end{center}
|
|
210 \end{figure}
|
|
211
|
|
212 人物と役職のTreeのversionが共に1の時、構成情報モデルのversionも1とする。
|
|
213
|
|
214 \begin{figure}[h]
|
|
215 \begin{center}
|
|
216 \includegraphics[height = 6cm , bb=0 0 463 271]{fig/maTrixVersion2.pdf}
|
|
217 \caption{maTrixの構成情報例1}
|
|
218 \label{fig:maTrixVersion2}
|
|
219 \end{center}
|
|
220 \end{figure}
|
3
|
221 構成情報モデルのversion:1の人物Treeを更新した場合、version:2の構成情報が構築され、maTrixはversion:1の構成情報とversion:2の構成情報の両方を保持し、両方の構成情報にアクセスすることが可能である。
|
1
|
222
|
6
|
223 \clearpage
|
|
224
|
|
225 \section{JungleでのmaTrixの版管理の表現}
|
1
|
226
|
18
|
227 JungleのTreeは、全てのversionのTreeで単一なIdを保持しているため、Idを指定すれば、過去のTreeにアクセスすることが可能である。
|
6
|
228 それを利用し、Jungle上での過去の変更履歴を保持する構成情報モデルの表現は、構成情報モデルのversionと、各Treeのversionを保持し、関連付ける構成情報モデルTreeを作成し表現した。(図\ref{fig:configTree})。
|
|
229 \begin{figure}[h]
|
|
230 \begin{center}
|
|
231 \includegraphics[height = 8cm ,bb=0 0 563 325]{fig/configTree.pdf}
|
|
232 \caption{構成情報モデルTree表現例}
|
|
233 \label{fig:configTree}
|
|
234 \end{center}
|
|
235 \end{figure}
|
4
|
236
|
1
|
237
|
|
238
|
4
|
239 \begin{table}[h]
|
6
|
240 \caption{構成情報TreeのTreeNodeが保持しているAttribute}
|
|
241 \label{list:configTree}
|
1
|
242 \begin{center}
|
|
243 \begin{tabular}{|l|l|} \hline
|
6
|
244 version & 構成情報モデルのversion ~ \\ \hline
|
|
245 person & 構成情報モデルのversionに対応する人物Treeのversion ~\\ \hline
|
|
246 organization & 構成情報モデルのversionに対応する組織Treeのversion ~ \\ \hline
|
|
247 role & 構成情報モデルのversionに対応する役割Treeのversion ~ \\ \hline
|
|
248 rde & 構成情報モデルのversionに対応する役割記述要素Treeのversion ~\\ \hline
|
1
|
249 \end{tabular}
|
|
250 \end{center}
|
|
251 \end{table}
|
|
252
|
6
|
253
|
1
|
254
|
|
255
|
6
|
256 実際にどのようにJungle上で過去の構成情報モデルにアクセスするか、例題を用いて説明する。
|
|
257 構成情報モデルversion:3に対応する人物Treeにアクセスする手順を以下に示す。
|
1
|
258
|
6
|
259 \begin{enumerate}
|
18
|
260 \item 構成情報Treeからアクセスしたいversion情報を保持しているNodeを取得する(今回の例題ではversion3)
|
|
261 \item 取得したTreeNodeには、構成情報:version:3に対応した人物Treeなどのversionが記述されているため、人物Treeのverson(v:5)を取得する
|
|
262 \item 2で取得したversionの人物Treeにアクセスする。
|
6
|
263 \end{enumerate}
|
|
264 といった手順でJungleではmaTrixの構成情報モデルを表現する。
|
2
|
265
|
|
266
|
|
267 \section{申請の許認可}
|
18
|
268 maTrixを用いた許認可は、組織構造だけで判断されるわけではない。
|
22
|
269 アクセス可能な時間や、貸出の場合は同時貸出数の上限などのアクセスルールは組織構造だけでは表現できない。
|
18
|
270 そのため、maTrixはアクセス管理のルールを表現方法を定義するXACMLという言語で記述された、ポリシーファイルを用いて許認可判断を行う。。
|
2
|
271 ポリシーファイルは、リポジトリで管理されており、アクセス要求にあったポリシーファイルが利用される。
|
|
272 以下にmaTrixでの申請の許認可の流れを記述する。
|
1
|
273
|
|
274 \begin{enumerate}
|
6
|
275 \item Aさんが、学科のノートPCの借りるために、maTrixに貸出許可を求める。
|
|
276 \item maTrixはリポジトリから、貸出許可を与えるかを判断するためのポリシーを取得する。
|
22
|
277 \item ポリシーファイルを元に、データにアクセスを行い許可を与えるかどうかを判断する。
|
1
|
278 \end{enumerate}
|
2
|
279 といった流れになる。
|
1
|
280
|
18
|
281 maTrixの許認可を使用するメリットとして、許認可のログをとっておくことで、いつ、誰が、どのポリシーを元に、どんなことをしたか、の情報がいつでも取得可能であるため、データの不正改竄等の問題発生時の解決等役立つ。
|
4
|
282 といったメリットもある。
|
1
|
283
|
|
284 \clearpage
|
2
|
285 \section{XACML}
|
|
286 本節ではmaTrixのポリシーファイルの記述に用いられているXACMLについての説明を行う。
|
3
|
287 XACMLは、データに関するアクセス要求について、その要求元の情報と要求の内容、アクセス対象の組み合わせから、その
|
2
|
288 アクセス要求が許可されるか否認されるかを判断するためのルールを記述できる。
|
|
289 実際に使用する際は、XACML自体がアクセス制御を行うのではなく、アクセス管理アプリケーションがXACMLを参照しアクセス制御を行う。XACMLは以下の様なデータ構造を持つ(図\ref{fig:xacml})
|
1
|
290
|
|
291 %\begin{figure}[h]
|
|
292 %\begin{center}
|
|
293 %\includegraphics[height=10cm,bb=0 0 439 610]{fig/XACMLDataflow.pdf}
|
|
294 %\caption{アクセス制御のデータフロー}
|
|
295 %\label{fig:xacmlDataflow}
|
|
296 %\end{center}
|
|
297 %\end{figure}
|
|
298
|
|
299 \begin{figure}[h]
|
|
300 \begin{center}
|
18
|
301 \includegraphics[height=10cm,bb=0 0 526 308]{fig/XACML.pdf}
|
1
|
302 \caption{XACMLのデータ構造}
|
|
303 \label{fig:xacml}
|
|
304 \end{center}
|
|
305 \end{figure}
|
|
306
|
|
307
|
3
|
308 Targetは、誰に対して(Subject)、どのような資源を(Resource)、どのように扱うか(Action)の3つの要素を持ち、それぞれの要素で、評価関数を用いて評価を行う。評価の結果は、Match、No-Match、Indeterminate(評価不能)の3つである
|
1
|
309 。
|
|
310
|
|
311
|
3
|
312 Ruleは、Targetに対する規則を定めるもので、ルールの方針にそってアクセス要求がこのルールに適合した場合に決定する値(Permit、Deny)を、Effectとして設定しておく。
|
|
313 また、Targetとは別にオプションとして条件(Conditions)を付けることも可能である(条件の例としては、アクセスを許可する時間の指定などがある)。
|
|
314 ルールの評価は、Targetの評価関数の結果とConditionの、ルール結合アルゴリズム(表\ref{list:rule})にそって結合する。
|
1
|
315
|
|
316 \begin{table}[h]
|
2
|
317 \caption{Ruleの評価}
|
1
|
318 \label{list:rule}
|
|
319 \begin{center}
|
|
320 \begin{tabular}{|l|l|l|} \hline
|
|
321 Target & Condition & 評価 ~ \\ \hline
|
|
322 Match & true & Efferct(Permit or Deny) ~\\ \hline
|
|
323 Match& false & NotApplicable ~ \\ \hline
|
|
324 Match& Indeteminate & Indeteminate ~ \\ \hline
|
|
325 No-Macth & - & NotApplicate ~ \\ \hline
|
|
326 Indeterminate & - & Indeteminate \\ \hline
|
|
327 \end{tabular}
|
|
328 \end{center}
|
|
329 \end{table}
|
|
330 \newpage
|
2
|
331
|
1
|
332 Policy
|
|
333
|
|
334 複数のRuleをまとめたものをPolicyという。
|
|
335 Policyの子要素には、Target、Rule、Obligations(責務)がある。
|
|
336 もしも、PolicyにObligationsが規定された場合は、たとえ、ルール結合後の結果がpermitであったとしても、Obiligationsに記述されていることを同時に実施することが出来なかった場合、承認を拒否する必要がある。
|
|
337 またPolicyが複数のRuleを評価するときは、ルール結合アルゴリズム(表\ref{list:policy})を用いる。
|
|
338
|
|
339 \begin{table}[h]
|
|
340 \caption{XACMLのルール結合アルゴリズム}
|
|
341 \label{list:policy}
|
|
342 \begin{center}
|
|
343 \begin{tabular}{|l|l|} \hline
|
|
344 Deny-overrides & どれか1つのルールのEffectがDenyであれば結果はDenyとする ~ \\ \hline
|
|
345 Permit-overrides & どれか1つのルールのEffectががPermitであれば結果はPermitとする ~\\ \hline
|
|
346 First-applicable & ポリシー内のすべてのルールについて順番に評価して、対象がマッチした場合、\\
|
|
347 & 対象の評価結果をMatchとし、次にConditionを評価し、これがTrueなら\\
|
|
348 &結果はEffectで指定されたPermitまたはDenyとする。 ~ \\ \hline
|
|
349 \end{tabular}
|
|
350 \end{center}
|
|
351 \end{table}
|
|
352
|
4
|
353 XACMLの評価が終わり、最終的にPermitだった場合その申請は許可される。
|
6
|
354
|
|
355 \section{Jungle上の許認可}
|
|
356 Jungle上でmaTrixの許認可を行う際は、ポリシーファイルを読み込み、各Treeに対して検索関数を用いて、その結果から許
|
|
357 認可を行う。
|
|
358
|
|
359 maTrixと同じ例題で、Aさんが、学科のノートPCの借りるために貸出申請を行った際の許認可の流れを以下に記す。
|
|
360
|
|
361 \begin{enumerate}
|
|
362 \item 人物Treeから、Aさんのデータを取得し、Aさんに割り振られている役割のIDを取得する。
|
|
363 \item 役割Treeから、1で取得した役割IDのデータを取得し、その役割IDに割り振られている役割記述要素IDを取得する
|
|
364 \item 役割記述要素Treeから、2で取得した役割記述要素IDのデータを取得し、役割記述要素名を取得する
|
|
365 \item 3で取得した役割記述要素名が、琉球大学工学部学生かどうかを調べ、一致した場合は貸出を許可し、一致しなかった場合は貸出を許可しない。
|
|
366 \end{enumerate}
|
|
367
|
|
368 といった流れになる。
|
18
|
369 Jungleが提供しているのはあくまで組織構造であるため、アクセス可能な時間等の条件に関してJungleは一切関与しない。
|