annotate Paper/chapter/chatsystem.tex @ 7:f8a7b9b234ce

...
author kiyama <e185758@ie.u-ryukyu.ac.jp>
date Sun, 04 Feb 2024 19:56:15 +0900
parents 61ff8d827f08
children 5d7e6a380735
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \chapter{メッセージングコマンドを使用した手法の提案}
7
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
2 演習科目では学生にシステム管理を体験させる活動を行ってきた.システム管理ではlinuxサーバーにアクセスしてコマンドを使用する.しかし,CLIでの操作に慣れていない学生が多く,稼働しているサーバー対して影響を与えるコマンドを実行することは学生にとって不安を感じさせるものだった.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
3 これらの事からチャットツールであるMattermostを使用したシステム管理手法を提案する.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
4
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 \section{システム概要}
7
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
7 システムの管理をオープンソースのセルフホスティング式のチャットサービスであるmattermostのスラッシュコマンドを通して実行する.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
8 スラッシュコマンドにはMattermostが提供する組み込みスラッシュコマンドとユーザー自身が作成するカスタムスラッシュコマンドが存在する.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
9 カスタムスラッシュコマンドではメッセージボックス上に /から始まる文字列を入力することで開発者が登録したエンドポイントに対しリクエストを送ることができる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
10 スラッシュコマンドには空のメッセージボックスに / を入力すると,すべてのスラッシュコマンドのリストが表示される.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
11 カスタムスラッシュコマンドの後ろに空白くぎりで入力した文字列がリクエストボディとしてエンドポイントに送信される.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
12
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
13
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
14 本手法では学科で管理しているシステムの状態を確認できる機能を提供するHTTPサーバーを立て,それにGET/POSTリクエストを送信することで処理を行う.図\ref{fig:chat-system}に構成図を示す.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
15 学科システムは複数のサーバーから構成されている.それぞれでHTTPサーバーを立てるとサービス毎にリクエスト先を変更しないといけない為,統括して管理するHTTPサーバーを1つ立てる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
16 そのHTTPサーバーから他の基幹サーバー内で動作しているサービスに対し処理を送り結果をmattermostから確認できる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
17 HTTPサーバーはgolangのwebフレームワークのechoを使用してコンテナ上に構築した.
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 \begin{figure}[htpb]
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 \begin{center}
7
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
21 \includegraphics[clip,width=11.0cm]{fig/chatsystem4.png}
5
61ff8d827f08 考察追加
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 4
diff changeset
22 \caption{システム構成図.}
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 \label{fig:chat-system}
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 \end{center}
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 \end{figure}
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
7
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
27 \newpage
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
28
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
29 実装したスラッシュコマンドは「/syskan」から始まり,空白区切りで特定の文字列を入力することで様々な処理が行われる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
30 Mattermostのスラッシュコマンドは通常のチャットと違い,実行するとユーザーの入力は表示されず結果のみチャンネルに出力される.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
31 その為,図\ref{fig:syskan-command-exp}に示すように実行ユーザーと実行コマンドを先頭行に表示しその下に実行結果を出力するようにした.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
32
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
33 \begin{figure}[htpb]
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
34 \begin{center}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
35 \includegraphics[clip,width=12.0cm]{fig/syskan-exp-2.png}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
36 \caption{ユーザーとコマンドが表示される様子.}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
37 \label{fig:syskan-command-exp}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
38 \end{center}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
39 \end{figure}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
40
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
41 実装したコマンドの一覧は「/syskan help」と入力することで表示される.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
42 コマンドの表示は異なるユーザーが確認として複数回実行すると想定した.その為,メッセージとしてチャンネルに投下するとコマンド一覧でログが埋まり,メッセージを圧迫する恐れがあった.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
43 その為,「/syskan help」を含むコマンド自体の説明や一覧のコマンドは実行したユーザーのみに表示されるようにした.図\ref{fig:helpcommand}にその様子を示す.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
44
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
45 \begin{figure}[htpb]
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
46 \begin{center}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
47 \includegraphics[clip,width=15.0cm]{fig/helpcommand.png}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
48 \caption{/syskanコマンドの一覧.}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
49 \label{fig:helpcommand}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
50 \end{center}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
51 \end{figure}
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 \section{認証機能の実装}
4
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
55 mattermostはクラウドサーバー上で運用されているが今回実装したHTTPサーバーは基幹サーバー内で運用している.mattermostからHTTPサーバーにアクセスするためにグローバルIPを紐付け公開している.学科サーバーは在学中の生徒と教員のみがアクセス可能でありシステムの情報は秘匿するべきである.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
56 その為外部からのアクセスを制限しmattermostからのみHTTPサーバーへのアクセスを許可した.
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57
7
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
58 本研究で実装したスラッシュコマンドはmattermostのシステム管理チームが管理するワークスペースのチャンネルから実行可能である.mattermostは学科に所属する全ての生徒がログインできシステム管理チームのワークスペースも制限を授けていない為全生徒がスラッシュコマンドの実行が可能である.
1
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 しかし,学科のシステム利用者の情報はLDAPを用いて管理されており,サーバー上でシステム管理者として全ての操作を行えるのはsyskan,sudoのユーザー属性が割り振られているアカウントとなっている.
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 スラッシュコマンドでは一部rootユーザーが実行する処理があることやシステム管理の操作に慣れていない学生には操作ミスやセキュリティの観点から制限をつけるのが適切だと判断した.
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 その為,システム管理チームとそれ以外の利用者でスラッシュコマンド経由で実行できる操作に制限をかけた.
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 mattermostはログインの際にgitlab認証を使用しており,gitlabはLDAP情報からログインを行う.
564982476950 一章を追加した
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 その為mattermostのアカウント名などはLDAPに登録されている情報から作成される.
7
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
64 また,mattermostはスラッシュコマンドを実行する際にコマンド以外に実行したチャンネル情報や実行した操作者の情報をデータをして送信する.データの中にユーザー名がありHTTPサーバーでユーザー名でLDAP認証を行いsudo,syskanのユーザー属性を持つかを確認することによって実行できる操作に制限をかけることができる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
65
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
66 \section{}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
67
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
68
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
69
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
70
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
71
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
72 % \begin{quote}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
73 % \begin{itemize}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
74 % /syskan ceph health \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
75 % /syskan ceph status \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
76 % /syskan ceph help \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
77 % /syskan df \{aman, braun, christina, daru\} \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
78 % /syskan df help \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
79 % /syskan backup podman \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
80 % /syskan backup kvm-tpl \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
81 % /syskan backup help \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
82 % /syskan vm audit \$vm\_name \$vm\_user \$vm\_ip \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
83 % /syskan vm key-gen \$vm\_name \$vm\_ip \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
84 % /syskan vm list \{aman, braun, christina, daru\} \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
85 % /syskan vm help \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
86 % /syskan podman ps \{aman, braun, christina, daru\} \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
87 % /syskan podman logs \$podman\_name \{aman, braun, christina, daru\} \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
88 % /syskan podman inspect \$podman\_name \{aman, braun, christina, daru\} \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
89 % /syskan podman help \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
90 % /syskan ldap search \$username \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
91 % /syskan ldap add sudoers \$username \$minutes \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
92 % /syskan ldap delete sudoers \$username \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
93 % /syskan ldap help \\
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
94 % \end{itemize}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
95 % \end{quote}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
96
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
97 \section{実装結果}
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
98 システムの状態を確認するコマンドや演習授業で一時的に権限を付与する為のコマンドを実装した.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
99 授業の中でコマンド操作の指示を出している途中に実行してしまう事例やコマンドのタイプミスが何度か見受けられた.この場合,システムに予期しない変更を与える可能性が考えられる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
100 今回提案したスラッシュコマンドはシステムの状態を確認する処理がほとんどである事やコマンドを途中で実行してしまっても決められた引数を使用しないと実行されないこと,権限の追加・削除といった処理は認証が必要な事から安心してコマンドを実行できると考えられる.
kiyama <e185758@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
101 またスラッシュコマンドで実装したシステム管理ではやり取りが個人で閉じずチャンネル参加者全員に表示される.その為誰が何を実行したかが一目瞭然であり,実験演習のような多人数が参加するシステム管理活動に有効と言える.