OneloginとGuacamoleでSSO設定
Gucamoleについて詳しく知りたい方は、以前書いたブログを参照してみてください。Guacamoleの現在のバージョン(v1.1.0)では、残念ながらSAML連携はできません。(実装は進められているようです。)そのため、OneloginのVirtual LDAPを使ってSSO連携させたいと思います。
前提
以前のブログで構築したGucamole環境をベースに設定を進めます。
OneloginでVLDAPを設定する
以下のようにVLDAPサービスを有効化します。
stunnelコンテナの構築
OneloginのVLDAPにはLDAPS(SSLまたはTLSを使用してLDAP通信する)での接続となります。Guacamoleから直接LDAPSで接続するのは少し大変そうなのでstunnelにプロキシさせることとしました。そのためGuacamoleからはstunnelにLDAP接続します。
まずはstunnelコンテナを作ります。前回立てたサーバーにssh接続を行い、適当なディレクトリで以下の2つのファイルを作成します。
Dockerfileの作成
FROM ubuntu
RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install stunnel4
COPY docker-entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD ["/entrypoint.sh"]
docker-entrypoint.shの作成
#! /bin/sh # Create configulation cat <<EOF > /etc/stunnel/ldap.conf foreground = yes [ldap] client = yes accept = $ACCEPT_IP_ADDR:$ACCEPT_PORT connect = $LDAP_CONNECT_URL:$LDAP_CONNECT_PORT EOF # enable stunnel echo ENABLED=1 >> /etc/default/stunnel4 # start stunnel4 echo "Start stunnel4" /usr/bin/stunnel4 /etc/stunnel/ldap.conf
イメージのビルド
以下のコマンドでイメージをビルドします。正常に作成できていればstunnel_oneloginという名前でイメージが作成されるはずです。
docker build -t stunnel_onelogin .
docker-composeの作成
${your_domain}には自身のOneloginのサブドメインを設定してください。
stunnelコンテナは、ポート1636でguacamoleコンテナから接続を待ち受けを行い、接続があればOneloginのVLDAPのエンドポイント(ldap.us.onelogin.com)のポート636に接続します。
version: "3" services: guacd: image: guacamole/guacd:latest restart: always expose: - "4822" environment: - GUACD_LOG_LEVEL=debug guacamole: image: guacamole_latest restart: always links: - guacd:guacd ports: - "8080:8080" environment: - GUACD_HOSTNAME=guacd - GUACD_LOG_LEVEL=debug - LDAP_HOSTNAME=stunnel - LDAP_PORT=1636 - LDAP_ENCRYPTION_METHOD=none - LDAP_USER_BASE_DN=cn=email,ou=users,dc=${your_domain},dc=onelogin,dc=com - LDAP_USERNAME_ATTRIBUTE=cn - LDAP_CONFIG_BASE_DN=ou=users,dc=${your_domain},dc=onelogin,dc=com #- TOTP_ENABLED=true - 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 stunnel: image: stunnel_onelogin restart: always ports: - "1636:1636" environment: - ACCEPT_IP_ADDR=0.0.0.0 - ACCEPT_PORT=1636 - LDAP_CONNECT_PORT=636 - LDAP_CONNECT_URL=ldap.us.onelogin.com
起動
以下のコマンドで起動します。
docker-compose up -d
ログイン確認
ユーザー名はOneloginで登録しているメールアドレスになります。パスワードもOneloginで登録したものになります。
ログインできない場合は、ログの内容を確認して対処してください。
まとめ
Guacamoleは現状SAML連携ができないため、SSOを行うにはLDAPを使うしかありませんが、IDPによってはLDAP接続を提供しているものもあるため検討の余地はあると思います。
また、MFAについては、Onelogin側で設定も可能となっています。Guacamole側でMFA設定も可能ですが、端末を紛失した際の初期化対応が少し手間なので、MFA設定が必要であればOneloginで設定するのもありだと思います。また、VLDAPのエンドポイントに対して接続元のIP制限もかけれるため、よりセキュアにすることも可能です。
Gucamoleのユーザー認証の方法の一つとしてこういったIDPを検討してもいいのではないでしょうか。