GuacamoleがSAML対応したのでOneloginと連携してみた
前提
以前のブログで構築したGucamole環境(Docker)をベースに設定を進めますので、基本の環境についてはこのブログを参照してください。
構成
ELB + EC2構成とします。
設定手順
SAMLモジュールの取り込み
公式で提供されているguacamole(1.2.0)のDockerイメージについては、ldapモジュールのように起動時に自動で取り込みしてくれるような設定となっていません。そのため、SAMLモジュールを取り込んだイメージを作成する必要があります。このイメージについては、こちらにも置いてありますので、直接参照してもらってもいいのですが、ここではローカルでビルドする想定で手順を記載しています。
Oneloginの設定
「Applications」タブを選択し、「Add App」をクリックして、「SAML Test Connector」を検索してください。一覧から「SAML Test Connector (IdP w/ attr w/ sign response)」を選択します。
Display Nameに適当な名前を入力し保存します。
保存後に右上の「More Actions」からSAML Metadataをダウンロードします。
左ペインの「Configuration」を選択し、「Recipient」、「ACS (Consumer) URL Validator」、「ACS (Consumer) URL」に以下のURLを設定し、保存します。
http://[YOUR_ELB_DNS]/guacamole/api/ext/saml/callback
Usersでログイン可能なユーザーを追加しておいてください。
docker-composeの作成
以下の通りdocker-composeファイルを作成してください。guacamoleのイメージについては、Docker Hubから取得するかlocalから取得するかによって内容を変更してください。
SAML_IDP_URLは利用しているのIDPのURLになります。oneloginの場合、以下のようなURLとなります。
https://[YOUR_SUBDOMAIN].onelogin.com/
SAML_ENTITY_IDについては、oneloginから取得したmetadataファイルにENTITY_IDがありますので、それを記載します。
SAML_CALLBACK_URLについては、guacamoleのURLを記載してください。なぜこの設定が必要なのかはドキュメントを読んでもよく分かりませんでした。また、設定項目としてSAML_IDP_METADATA_URLという項目があるので、これだけ設定すればいけるかと思いましたが、うまく動作しなかったので最終的に上記の設定項目としました。
version: "3" services: guacd: image: guacamole/guacd:1.2.0 restart: always expose: - "4822" environment: - GUACD_LOG_LEVEL=debug guacamole: # From Docker Hub #image: cloudfish/guacamole-client-saml:1.2.0 # From local image: guacamole-client-saml:1.2.0 restart: always links: - guacd:guacd ports: - "8080:8080" environment: - GUACD_HOSTNAME=guacd - SAML_IDP_URL=[YOUR_IDP_URL] - SAML_ENTITY_ID=[YOUR_ENTITY_ID] - SAML_CALLBACK_URL=http://ELB_DNS/guacamole - MYSQL_HOSTNAME=mysql - MYSQL_DATABASE=guacamole - MYSQL_USER=guacamole - MYSQL_PASSWORD=guacamole mysql: image: mysql/mysql-server:5.7 restart: always volumes: - "./mysql/data:/var/lib/mysql" - "./mysql/init:/docker-entrypoint-initdb.d" expose: - "3306" ports: - "3306:3306" environment: - MYSQL_DATABASE=guacamole - MYSQL_USER=guacamole - MYSQL_PASSWORD=guacamole||< ** ディレクトリの作成 docker-compose.yamlファイルと同じ階層に以下のディレクトリを作成します。 >|csh| mkdir -p mysql/data mkdir -p mysql/init
tree -d mysql/ mysql/ ├── data └── init
初期データ作成
以下のコマンドで初期化用のスクリプトを作成します。
docker run --rm guacamole-client-saml:1.2.0 /opt/guacamole/bin/initdb.sh --mysql > mysql/init/initdb.sql
ログイン確認
以下のURLにアクセスするとOneloginのログイン画面にリダイレクトされます。
http://ELB_DNS/guacamole/
ポータル画面から「Guacamole」選択します。
正しく設定できていれば、Guacamoleにログインできます。
SAML設定をすると管理者ユーザー(guacadmin)でログインできなくなります。そのため、予めSAML設定を外して起動することでパスワードログインが可能になりますので、Oneloginユーザーと同名のユーザーを作成して管理者権限を付与しておく必要があります。