Kasm Workspaces を Linode で動かす例を紹介します。インストールしてからアプリケーションの起動を体感するまで一時間もかからないと思います。Linode はアウトバウンドのトラフィックコストがインスタンスに一定量含まれており、リモートデスクトップサービスのようにクラウドからクライアントに大量のネットワークを消費する場合、コストメリットがあります。
Kasm Workspaces とは
Kasm Workspaces はコンテナ化されたストリーミングプラットフォームであり、ブラウザーベースの Desktop as a Service です。利用できるアプリケーションはコンテナで提供され拡張性が高いです。また、セキュアな配信、ゼロトラスト、かつ独立したワークスペースを提供できます。
Kasm Technologies 社の Web ページにある動画を見てイメージを掴んでください。
KasmVNC
Kasm Workspaces を提供する Kasm Technologies 社はコアとなる VNC 技術を KasmVNC としてオープンソースで提供しています。
VNCの名前がついていますが、ストリーミングについては最新の技術を使い、かつセキュアに配信できることを目的としています。最新のブラウザーに対応し、ネイティブなクライアントアプリケーションは不要です。よって、マルチデバイス化も容易となります。
構成
シングルサーバーのアーキテクチャは下図になります。
シングルサーバー構成でインストールされるテクノロジースタックです。
この後詳細にインストールを説明するのはシングルサーバー構成ですが、スケーラブルな構成を取ることもできます。
また、DoD と NIST のガイダンスにも遵守するようドキュメント類も豊富に用意されています。
インストールで参考にした情報
Linode の YouTube チャネルの手順通り実施すれば簡単に設定できます。この後で、実際に利用したコマンドなどを説明します。
作業時間のほとんどはコンテナイメージをダウンロードする待ち時間です。Ubuntu 22.04 LTS を選択すれば全く問題なく進みます。まだ正式にサポートされていない Ubuntu 22.10 でも、数カ所手作業でトラブルシューティングしたら動きました。
日本語の紹介ページもあります。
フリーで使える Community Edition では同時接続数 5 までしか許されていません。
適切な Linode インスタンスの選択
Kasm Workspaces の Document ページでは、最小要件は 2 Core, 4GB Memory, 50GB (SSD) となっています。
今回、OS は Ubuntu 22.04 LTS を選びます。
Ubuntu 22.04 LTS は US Federal Government and Department of Defense でもガイドラインが出て採用されているバージョンとなっています。
Kasm が提供するドキュメントも参照ください。
動作確認するのに 4GB メモリでも十分ですが、今回は 16GB メモリのプランを選びます。
Kasm Workspaces のインストール
Linode が立ち上がったら、ssh でログインします。今回はスキップしますが、本番環境では以下のページのようにセキュアな設定をしてください。
最初に環境のアップデートをします。
apt update && apt upgrade
その後、リブートしましょう。
reboot now
再起動したら、再度 ssh でログインします。その後、必要なソフトウエアをダウンロードします。まず kasm Workspaces のサイトのトップページにアクセスします。
Resources から Downloads のページに行きます。
Kasm Workspaces のページの Downloads のリンクをコピーします。
次に、Linode のターミナルに戻り、作業ディレクトリとして /tmp を選択します。
cd /tmp
先程、Kasm Workspaces の Downloads ページでコピーした URL を wget します。
wget https://kasm-static-content.s3.amazonaws.com/kasm_release_1.12.0.d4fd8a.tar.gz
ファイルがダウンロードされていることを確認します。
localhost:/tmp# ls -l
total 16996
-rw-r--r-- 1 root root 17376477 Nov 23 21:48 kasm_release_1.12.0.d4fd8a.tar.gz
tar ファイルを解凍します。
localhost:/tmp# tar -xf kasm_release_1.12.0.d4fd8a.tar.gz
localhost:/tmp# ls -l
total 17000
drwxr-xr-x 8 root root 4096 Jan 24 10:10 kasm_release
-rw-r--r-- 1 root root 17376477 Nov 23 21:48 kasm_release_1.12.0.d4fd8a.tar.gz
Kasm はインストールが簡単で、スクリプトファイルを動かすだけで多くの作業を実施してくれます。
localhost:/tmp# bash kasm_release/install.sh
スクリプトの終了まで数十分かかります。インストールが完成すると、Kasm Workspaces に必要なクレデンシャル情報が表示されます。この情報は漏れないように保管してください。ログイン時に必要となります。
次に Kasm Workspaces にアクセスするために Linode インスタンスの IP もしくはドメイン名を確認します。Cloud Manager にログインし、Linode インスタンスの Network タブから IP アドレスもしくは Reverse DNS にドメイン名を確認します。
ドメイン名の表示です。
以下はドメイン名を使って、ブラウザーからアクセスしたときの TLS 証明書の警告です。まだ、TLS 証明書の設定をしていないため、ホスト名マッチが合っていないので HTTPS でアクセスしたときに警告がでています。Let's Encrypt を使えば簡単に設定できますが、今回はスキップします。警告に対して自己責任でアクセスするようにブラウザーに指示します。
Kasm Workspaces の環境作成が終了したら、是非証明書の設定をしてください。下記ページが参考になります。
ログイン表示画面に先程メモした admin@kasm.local ユーザーとパスワードを入力してログインします。
次のように Admin 画面が表示されます。以下は、少し触った後の画面です。
WORKSPACES をクリックした画面です。様々なアプリケーションが表示され、クリックするとそのアプリケーションのデスクトップが表示されます。
以下は、terminal を選択した画面です。
以下は、 Chrome を選択し、その中で www.linode.com を閲覧している例です。
Docker イメージ
Kasm Workspaces はデスクトップ環境で利用できるアプリケーションを Docker イメージで提供しています。
今回のインストールでは以下のイメージが見えます。
localhost:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 12-alpine 2b840024c973 2 weeks ago 237MB
kasmweb/vivaldi 1.12.0 3f0bed091267 7 weeks ago 2.62GB
kasmweb/ubuntu-focal-desktop 1.12.0 1d80eec2ae28 7 weeks ago 7.08GB
kasmweb/centos-7-desktop 1.12.0 fa2529cbcf44 7 weeks ago 3.64GB
kasmweb/chromium 1.12.0 1fceb96df8f1 7 weeks ago 2.53GB
kasmweb/tor-browser 1.12.0 2e4baba94ab3 7 weeks ago 2.51GB
kasmweb/firefox 1.12.0 f7a4cbb4a83c 7 weeks ago 2.48GB
kasmweb/chrome 1.12.0 760f7664bd94 7 weeks ago 2.57GB
kasmweb/vs-code 1.12.0 f061ccbeb9e8 7 weeks ago 2.64GB
kasmweb/terminal 1.12.0 bbea423e8362 7 weeks ago 2.72GB
kasmweb/edge 1.12.0 e5e1590b020e 7 weeks ago 2.75GB
kasmweb/brave 1.12.0 a7c7f6dffc02 7 weeks ago 2.59GB
kasmweb/thunderbird 1.12.0 b34f80191856 7 weeks ago 2.47GB
kasmweb/zoom 1.12.0 74f4bf5a54c0 7 weeks ago 2.75GB
kasmweb/libre-office 1.12.0 ee0411f694eb 7 weeks ago 3.28GB
kasmweb/vlc 1.12.0 ab7aa323b23a 7 weeks ago 2.32GB
kasmweb/telegram 1.12.0 ecbf616718c9 7 weeks ago 2.38GB
kasmweb/sublime-text 1.12.0 9c1197305cda 7 weeks ago 2.28GB
kasmweb/teams 1.12.0 21a5c3673fc1 7 weeks ago 2.53GB
kasmweb/signal 1.12.0 f2b4b6ac924b 7 weeks ago 2.67GB
kasmweb/remmina 1.12.0 c14c9140ef4b 7 weeks ago 2.24GB
kasmweb/only-office 1.12.0 bf5c5d4a704e 7 weeks ago 3.1GB
kasmweb/insomnia 1.12.0 566a415371b6 7 weeks ago 2.63GB
kasmweb/gimp 1.12.0 a2cb5e9170c4 7 weeks ago 2.33GB
kasmweb/filezilla 1.12.0 a4b2dd06cbea 7 weeks ago 2.26GB
kasmweb/discord 1.12.0 25f208eedd51 7 weeks ago 2.42GB
kasmweb/kasm-guac 1.12.0 31d58d34e81d 2 months ago 483MB
kasmweb/share 1.12.0 12e334524f0e 2 months ago 171MB
kasmweb/agent 1.12.0 bdb9655e9f42 2 months ago 161MB
kasmweb/api 1.12.0 06cd165a8b8f 2 months ago 348MB
kasmweb/manager 1.12.0 3583b08011b2 2 months ago 294MB
redis 5-alpine 7558bc54e8a2 2 months ago 22.9MB
kasmweb/nginx latest 95cbbc869690 15 months ago 25.3MB
hello-world latest feb5d9fea6a5 16 months ago 13.3kB
コンテナの情報は admin@kasm.local でログインしたときに Admin 画面の Workspace から見えます。
Kasm Workspaces の利用者が使える機能
様々な機能がありますが、パーシステント設定、音声、ファイルのアップロードとダウンロード、クリップボード、IME について簡単に紹介します。
パーシステント設定
Kasm Workspaces で起動されたアプリケーションは起動する度にリフレッシュされた新しい環境になります。もし、常時利用する開発環境として、アプリケーション内部で設定した状態を保持させる場合は、パーシステント (Persistent Profile) 機能を使います。
先程紹介した Admin 画面の Workspace から、Terminal コンテナの設定をユーザー単位でパーシステントにする場合は、Persistent Profile Path を設定することでユーザーの環境が維持できます。
設定の詳細についてはドキュメントを参照ください。
上記例のように設定することで、ユーザーがログインした状態が Ubuntu のサーバー環境に保存されています。
localhost# pwd
/mnt/local/persistent_profile/kasm_Terminal/
localhost# ls
admin@kasm.local user@kasm.local
localhost# ls admin@kasm.local
aaa.txt bbb.txt Desktop Documents Downloads Music Pictures Public Templates Uploads Videos
admin@kasm.local
で Kasm Workspaces にログインし、Terminal を動かしたときのホームディレクトリの構造が見えます。
また、パーシステントな状況ではなく、フレッシュな状態で使うことを、ユーザーに選択させることもできるので、とても使い勝手が良いです。以下は、Terminal アプリケーションを選択したときに表示される画面です。Persistent Profile 機能を使うか否かを選択できます。
音声
Kasm Workspaces では管理者がユーザーの権限を管理できます。例えば、音声をイネーブルにしていれば、ユーザーのセッションで音声の On/Off をブラウザーの画面に表示される操作機能(コントロールパネル)で操作できます。
YouTube を見ながら音声も聞けます。
ファイルのアップロードとダウンロード
ファイルのアップロードとダウンロードもローカルコンピューターの間で簡単に操作できます。
クリップボードへのコピー
ローカルホストと Kasm Workspace 内でのコピー&ペーストもできるので、使い勝手が良いですね。
IME
Kasm Workspace で起動したアプリケーション上で IME (Input Method Editor) も使えるので日本語入力もできます。
Ubuntu Focal Desktop コンテナの中の Chrome で日本語入力で検索した例です。
ユーザー管理とグループ管理
Kasm Workspaces は LDAP、SAML、OpenID にも対応しています。今回は、これらを使わない簡単なユーザー管理の例です。
ユーザー作成したあと、グループで権限管理ができます。グループを作成した後、Edit ではなく View から編集します。
グループに利用するワークスペース(コンテナ)を割り当てられます。
グループ browsers
に、ユーザー nosound
、ワークスペース Chrome
を割り当てたときのログイン画面です。
Chrome ブラウザーを立ち上げたときのコントロールパネルです。Admin で設定したように、クライアントは音声の設定ができないようになっています。
まとめ
Kasm Workspaces は Desktop as a Service に特化したソフトウエアです。Kasm Technologies 社からは、大規模ユーザーのケースや、セキュリティに敏感な組織への導入や、開発者向けのデスクトップサービスなど、たくさん情報をいただきました。Kasm Workspaces は内部で Docker を使いながら、エンドユーザーにはブラウザー経由で様々なアプリケーションにアクセスできる環境を提供しています。今回紹介した以外にも UI やコンテナのカスタマイズなど機能は豊富にあります。ドキュメント類も充実していますし、インストールも簡単ですので、一度お試しください。