はじめに
こんにちは、最近は真冬日続きで肩こりが辛い佐々木です。
今回は前から気になっていたApache Guacamoleに触ってみました。
Apache Guacamoleとは
Apache Guacamoleはブラウザベースのリモートデスクトップクライアントです。 HTML5対応のブラウザからリモートのコンピューターにRDP、VNC、SSHなどのプロトコルで接続し操作することができます。
アーキテクチャ
Guacamoleは下記のようなアーキテクチャになっています。(図は公式サイトより引用)
- servlet container : ブラウザからのアクセスを受け付けてguacdを経由してリモートデスクトップセッションを作成します
- guacd: リモートのコンピューターとのRDPやVNCのセッションを担当するプロセスです
- (mysql or postgresql): 図中にはないのですが、接続情報や、認証情報などを保存するために使用します
AWS上で使うならこんな感じ
Guacamoleのことを知った時すぐに下記のようなアーキテクチャが思いつきました。
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/guachamole_on_aws-320×180.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/guachamole_on_aws-768×432.png 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/guachamole_on_aws-960×540.png 960w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/guachamole_on_aws.png 1280w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
ELB経由でGuacamole Serverにアクセスすることで、次のメリットがあります。
- リモートデスクトップ先のインスタンスをプライベートなサブネットに配置できる
- RDP GatewayやSSHトンネリングが必要ない、一度設定してしまえばブラウザからアクセスできる
- Certificate ManagerのSSL証明書を使えば安全にアクセスできる
メンテナンス対象のWindowsサーバが多いけれどインターネットアクセスはさせたくない、しかしRDPゲートウェイを構築するのは面倒という場合にマッチするのではないでしょうか。
環境構築
ではこの構成で環境構築してみます。下記の手順の一部についてざっくり説明していきます。 (なお接続先としてWindows Server 2012 R2インスタンスが構築済みの前提です)
- ec2インスタンス(Amazon Linux)上のdockerサーバとdocker-composeをインストールする
- Guacamole Serverを起動する
- ALBを構成する
docker/docker-composeのインストール
公式ドキュメントや他のwebサイトで紹介されている手順で問題なくインストールできます。 今回使用したコマンドを掲載しておきます。
1 2 3 4 5 6 7 8 9 10 |
|
Guacamole Serverを起動する
Guacamole ServerはDocker Composeを使って起動します。下記のファイルを作成します 使用している各イメージの詳細はGuacamoleのドキュメントおよびmysqlのドキュメントを参照してください
1 2 3 4 |
|
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
.env
1 2 3 |
|
envファイル内のDB、ユーザー名、パスワードは任意のものに変更してください。
initdb.sql
initdb.sqlファイルは下記のコマンドで生成できます(生成済みのものもgistに貼っておきました)
1 |
|
起動する
ファイルが揃ったら一旦guacamoleを起動してみましょう。起動後にdocker-compose ps
で状態を確認します。StateがUpになっていれば起動中です。 ちなみにdocker-compose logs
で各コンテナのメッセージ出力を表示できるので問題があるときに参照しましょう。
1 2 3 4 5 6 7 |
|
ALBを構成する
下記の設定でALBを構成します。ターゲットとしてGuacamole Serverを指定します。
ターゲットグループ
プロトコル: HTTP
ポート: 8080
維持設定(sticky session): 有効
ヘルスチェックプロトコル: HTTP
ヘルスチェックポート: トラフィックポート
ヘルスチェックパス: /guacamole
ロードバランサー
リスナー: HTTPS:443 -> 上記のターゲットグループ(8080)
動作確認
ここまで済んだらブラウザからGuacamoleにアクセスしてみましょう。 ALBのDNS名に下記のようにguacamole
というパスを加えます。
図のようなログイン画面が表示され、下記のアカウントでログインできれば動作確認は完了です。
ユーザー名: guacadmin
パスワード: guacadmin
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login-320×200.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login-768×480.png 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login-960×600.png 960w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login.png 1280w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
長くなってきたので今回はここまでにします。 次回はRDPでWindowsインスタンスに接続してみます。
はじめに
こんにちは。最近文庫本のカバーをハードカバーに付け替えるワークショップに参加してきました。 2時間ちょっとかかってなかなか大変だったのですが自分で選んだ紙や栞紐を使った本が出来上がったときにはとても嬉しかったです。
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/IMG_0362-320×427.jpg 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/IMG_0362-768×1024.jpg 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/IMG_0362-960×1280.jpg 960w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
さて前回の続きです。Guacamoleを使ってWindowsにリモートデスクトップ接続してみます。
Guacamoleにログインする
Guacamoleにログインします。ログイン画面のURLはALBのDNS名に下記のようにguacamole
というパスを加えます。
図のようなログイン画面が表示され、下記のアカウントでログインします。
ユーザー名: guacadmin
パスワード: guacadmin
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login-320×200.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login-768×480.png 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login-960×600.png 960w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/login.png 1280w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
コネクションの作成
ログイン後の画面の右側から「Settings」を選択し「Connections」タブを表示し、「Create Connection」から接続設定を作成します。
パラメータの設定
接続名、接続先のホスト名、ポート番号(3389)、ユーザー名、パスワードをなどを入力します。 ここで「Ignore server certificate」をチェックしないと証明書の検証エラーのため接続できませんでした。
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/02_parameters-320×228.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/02_parameters-768×546.png 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/02_parameters-960×683.png 960w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/02_parameters.png 1094w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
必要な情報を入力したら作成画面の下部にあるボタンで保存します。
保存するとリストに作成したコネクションが表示されます。
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/03_connection_created-320×191.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/03_connection_created-768×458.png 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/03_connection_created-960×573.png 960w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/03_connection_created.png 1254w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
接続してみる
コネクション作成時に使った右側のメニューに作成したコネクションが追加されています。メニューから選択するとRDPセッションが開始されます。
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/04_0_newconnection-320×320.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/04_0_newconnection-200×200.png 200w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/04_0_newconnection-400×400.png 400w” sizes=”(max-width: 458px) 100vw, 458px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/04_rdp_session-320×197.png 320w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/04_rdp_session-768×474.png 768w, cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2017/12/04_rdp_session-960×592.png 960w” sizes=”(max-width: 640px) 100vw, 640px” class=”” style=”max-width: 100%; margin: 0.5em auto; display: block; height: auto;”>
見慣れたデスクトップが表示されました!
はまったところ
今回実際にやってみてはまったところをまとめておきます。
- コネクション作成時に「Ignore server certificate」をチェックしないと証明書の検証エラーが発生する
- docker-composeでコンテナをフォアグラウンドで起動したときtmuxを使っているとログが正しく表示されない
- 一度RDPセッションを開始した後ブラウザをリロードしたり、ログインすると設定画面ではなくRDPセッションが表示される
- 上記の対策として設定画面を表示したい場合は
/guacamole/#/settings/mysql
にアクセスする
最後に
2回に分けてApache GuacamoleをAWS上で構築する手順について紹介しました。
実際に運用するためには今回検討しなかった下記の点について考慮が必要でしょう。
- Guacamoleのユーザー管理をAD連携で行いたい
- Guacamoleの死活監視
- MySQL/PostgresqlにコンテナではなくRDSを使う
- Connectionにアカウント情報を保存せず、ユーザーに入力させる or SSOなどができないか検討する
9月ごろにApache Guacamoleのことを知ってから試してみようかなとずっと考えていたので、年内に触ることができてすっきりしました。