Apache GuacamoleでRed Hat OpenShift on IBM Cloudに踏み台サーバを構築する(デプロイ編)
目的
Apache GuacamoleはSSHやRDPのためのプロクシソフトウェアです。ブラウザから各環境にリモートログインすることができます。また、SSHログの取得やRDPの画面操作を録画することができますので、エンタープライズな環境できちんとアクセス監査をしたい場合にも有用です。
今回はGuacamoleをRed Hat OpenShift on IBM Cloud上にコンテナとして構築してみます。
構成
デフォルトであるデータベース認証の場合、Guacamoleは3つのコンポーネントから構成されます。
- guacamole: UI
- guacd: ゲートウェイサービス
- データベース: PostgreSQL、MySQLまたはSQL Server
今回はguacamoleとguacdをコンテナとして実行します。データベースはIBM Cloud Databases for PostgreSQLを使用します。
手順
IBM Cloud Databases for PostgreSQLの設定
オーダー
とりあえずは最低スペックでオーダーします。EndpointsはデフォルトでPublicですが、Bothにしておくと、構成作業は自PCからPublicを、Guacamoleからの接続はPrivateを使うことができて便利です。実運用の際はPrivateのみにするのがよいでしょう。後から変更することもできます。
管理者パスワードの設定
インスタンスの管理者のパスワードを設定します。ポータルまたはCLIで可能です。今回はCLIを使用します。
$ ibmcloud cdb user-password guacdb admin ${パスワード}
DBスキーマの作成
PostgreSQLにDBスキーマを作成します。guacamoleのコンテナからSQLを生成することができます。
$ docker run --rm guacamole/guacamole:1.2.0 /opt/guacamole/bin/initdb.sh --postgres > initdb.sql
$ ls -l initdb.sql
-rw-r--r-- 1 teruq teruq 24448 Dec 21 05:00 initdb.sql
CLIを使用してSQLを実行します。
$ ibmcloud cdb deployment-connections guacdb --start
Database Password>> ${管理者パスワード}
ibmclouddb=> \i initdb.sql
CREATE TYPE
CREATE TYPE
CREATE TYPE
...
ibmclouddb=> \q
DB接続ユーザーの作成
管理者とは別にDB接続用ユーザーを作成します。
$ ibmcloud resource service-key-create guacdb-creds-1 --instance-name guacdb
次の値を控えておきます。
- ホスト名
- ポート番号
- ユーザー名
- パスワード
ホスト名は、~.databases.appdomain.cloudを~.private.databases.appdomain.cloudに変更します。そうすることで、通信経路をプライベートネットワーク経由にすることができます。
DB接続ユーザーに権限を付与
今作成したユーザーは先ほど管理者で作成したオブジェクトへの権限を持っていないため、権限を付与します。
ibmcloud cdb deployment-connections guacdb --start
Database Password>> ${管理者パスワード}
ibmclouddb=> grant all on all tables in schema public to "ibm-cloud-base-user";
GRANT
ibmclouddb=> grant all on all sequences in schema public to "ibm-cloud-base-user";
GRANT
ibmclouddb=> \q
guacdのデプロイ
単に動かすだけならそのままデプロイしても動くのですが、RDP接続をする際に実行ユーザーのホームディレクトリにファイルを書き込むため、実行ユーザーはOpenShiftのランダムではなく固定にする必要があります。anyuidのサービスアカウントを作成します。
$ oc create sa guacd
$ oc adm policy add-scc-to-user anyuid -z guacd
サービスアカウントを指定してデプロイします。
$ oc new-app --docker-image guacamole/guacd:1.2.0 -o yaml --dry-run | sed "/containers/i\ serviceAccountName: guacd" | oc apply -f -
imagestream.image.openshift.io/guacd created
deploymentconfig.apps.openshift.io/guacd created
service/guacd created
$ oc get pods | grep guacd
guacd-1-deploy 0/1 Completed 0 59s
guacd-1-wkjw8 1/1 Running 0 58s
$ oc logs guacd-1-wkjw8
guacd[8]: INFO: Guacamole proxy daemon (guacd) version 1.2.0 started
guacd[8]: INFO: Listening on host 0.0.0.0, port 4822
guacamoleのデプロイ
guacamoleのコンテナはrootで実行され、ホームディレクトリに一時ディレクトリを作成します。そのため、コンテナのサービスアカウントを新たに作り、SCCをanyuidにしてrootで実行可能にします。
$ oc create sa guacamole
$ oc adm policy add-scc-to-user anyuid -z guacamole
先ほど控えた接続情報を環境変数にセットします。
$ PGHOST=********.private.databases.appdomain.cloud
$ PGPORT=ポート番号
$ PGUSER=ユーザー名
$ PGPASSWORD=パスワード
次のようにデプロイします。
$ oc new-app --docker-image guacamole/guacamole:1.2.0 \
-e GUACD_HOSTNAME=guacd \
-e GUACD_PORT=4822 \
-e POSTGRES_HOSTNAME=${PGHOST} \
-e POSTGRES_PORT=${PGPORT} \
-e POSTGRES_DATABASE=ibmclouddb \
-e POSTGRES_USER=${PGUSER} \
-e POSTGRES_PASSWORD=${PGPASSWORD} \
-e POSTGRESQL_SSL_MODE=require \
-o yaml --dry-run | sed "/containers/i\ serviceAccountName: guacamole" | oc apply -f -
imagestream.image.openshift.io/guacamole created
deploymentconfig.apps.openshift.io/guacamole created
service/guacamole created
$ oc get pods | grep guacamole
guacamole-1-deploy 0/1 Completed 0 4m3s
guacamole-1-gl5sb 1/1 Running 0 4m2s
$ oc logs guacamole-1-gl5sb
...
20-Dec-2020 21:50:29.273 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
20-Dec-2020 21:50:29.281 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
20-Dec-2020 21:50:29.285 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 4454 ms
SSL_MODE=requireとすることで、SSL証明書の検証を無効化しています。こうすることでCA証明書のコンテナへのマウントの手間を軽減しています。実運用ではきちんとCA証明書をマウントしてSSL_MODE=fullにすることをお勧めします。
サービスの公開
guacamoleを公開します。
$ oc create route edge --service guacamole --path /guacamole
route.route.openshift.io/guacamole created
$ oc get route | grep guacamole
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
guacamole guacamole-******.jp-tok.containers.appdomain.cloud /guacamole guacamole 8080-tcp edge None
Guacamoleへのログイン
RouterのURLにhttpsでアクセスします。
https://guacamole-******.jp-tok.containers.appdomain.cloud/guacamole
ログイン画面が表示されます。管理者はguacadmin、初期パスワードはguacadminです。
ログインできたら初期パスワードを変更しておきましょう。
今回はここまでです。次回以降にGuacamoleを踏み台とした構成を検証していきます。
Author And Source
この問題について(Apache GuacamoleでRed Hat OpenShift on IBM Cloudに踏み台サーバを構築する(デプロイ編)), 我々は、より多くの情報をここで見つけました https://qiita.com/teruq/items/cb9172fa4424329ae187著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .