LoginSignup
0
0

GuacamoleとADFSでSAML連携

Last updated at Posted at 2023-12-10

はじめに

GuacamoleはLDAP連携できるので、わざわざADFSと連携させることはあまりないと思います。ADFSを初めて扱ったので試してみました。

試した構成

ざっくりこんな構成です。実際には全部1台のPCに仮想マシンとして構築しました。
image.png

  • ドメインやFQDNはデタラメに設定しましたが、動作には影響なさそうでした。
  • 認証はブラウザとGuacamole、ブラウザとADFS間で行われるため、GuacamoleとADFSは直接通信は必要ないと思います。

ADFSの設定

Windows Serverの役割と機能の追加で、ADFSはインストールされた状態です。
途中でADFSのFQDNのTLS証明書が必要になったので、自己署名証明書を設定しました。

image.png

ADFSの管理ツールで、Guacamole用の証明書利用者信頼を追加します。
image.png

証明書利用者の識別子を追加します。これは後の工程でGuacamoleに設定するsaml-entity-idの値と同じにしておく必要があります。
image.png

SAMLアサーションコンシューマーエンドポイントを追加します。GuacamoleのアプリのURLを登録します。
image.png

image.png

次に、要求発行ポリシーを登録します。ADFSがブラウザからのログイン情報を受け取ってから、ブラウザに返す情報をどうやって取得するかの定義だと思います。
image.png

認証したユーザをActiveDirectoryで検索し、電子メールアドレスのフィールドのデータを取得する設定です。
image.png

取得したデータをGuacamoleのログインIDとして使用できるように出力するための変換と思います。
image.png

ADのユーザーの電子メールに値を登録します。最初これを登録しなかったためか、ADFS認証OK→Guacamoleへリダイレクト、ログイン失敗→ADFSへリダイレクトを繰り返す状態になってしまいました。
image.png

Guacamoleの設定

docker-composeを使用すると、設定が便利でした。いろいろなサイトを参考にさせて頂きました。
image.png

guacamoleのホームディレクトリの直下にextensionsディレクトリを作成し、その中にsamlモジュールを配置します。
image.png

docker-compose.yaml
version: "3"
services:

  postgres:
    image: postgres:latest
    restart: unless-stopped
    environment:
      PGDATA: /var/lib/postgresql/data/guacamole
      POSTGRES_DB: guacamole_db
      POSTGRES_PASSWORD: guacamole123456789
      POSTGRES_USER: guacamole_user
    volumes:
      - ./pginit:/docker-entrypoint-initdb.d
      - ./pgdata:/var/lib/postgresql/data

  guacd:
    image: guacamole/guacd:latest
    restart: unless-stopped

  guacamole:
    image: guacamole/guacamole:latest
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      GUACD_HOSTNAME: guacd
      POSTGRES_DATABASE: guacamole_db
      POSTGRES_HOSTNAME: postgres
      POSTGRES_PASSWORD: guacamole1234567890
      POSTGRES_USER: guacamole_user
      GUACAMOLE_HOME: /etc/guacamole
    volumes:
      - ./guacamole:/etc/guacamole
    depends_on:
      - postgres
      - guacd

  nginx:
    image: nginx:latest
    restart: unless-stopped
    ports:
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/ssl:/etc/nginx/ssl:ro

SAML関連の設定について、環境変数からは設定が有効にならなかったため、guacamoleホームディレクトリに、guacamole.propertiesを配置し、その中で設定を行いました。
また、ADFSからメタデータをダウンロードし、設定ファイルから参照できる位置に配置しました。
image.png

guacamole.properties
# SAML Metadata URL from IdP (Azure AD, Okta, etc)
saml-idp-metadata-url: file:///etc/guacamole/FederationMetadata.xml

# Alternative: Single Sign On URL
# saml-idp-url: https://www.test.com/adfs/ls/IdpInitiatedSignOn.aspx

# These must match what was entered into Azure AD or Okta
saml-entity-id: https://guac.company.com
saml-callback-url: https://guac.company.com/guacamole

# Change this to true if SSO is not working
saml-debug: true

# Automatically redirect to SSO portal for sign-on
extension-priority: saml

# Alternative: Go to Guacamole local login before SSO
# extension-priority: *, saml

# SAML attribute/claim for group membership
saml-group-attribute: groups

# If SAML extension fails, default back to local login
skip-if-unavailable: saml
saml-strict: false

nginxに自己署名証明書を導入
image.png

image.png

default.conf
server {
    listen 443 ssl;
    server_name  localhost;
    ssl_certificate      /etc/nginx/ssl/nginx.pem;
    ssl_certificate_key  /etc/nginx/ssl/nginx.key;

    location /guacamole/ {
        proxy_pass http://guacamole:8080/guacamole/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        client_max_body_size 10g;
        access_log off;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Guacamoleにアクセス

docker compose up -dを実行して、ブラウザからアクセスします。
image.png

ADFSのログイン画面へリダイレクトされました。この画面はカスタマイズできるみたいです。
image.png

ADのユーザとパスワードでサインイン後
image.png

無事アクセスできました。

途中でハマったこと

  • ActiveDirectoryのユーザーのメールアドレスを設定していないと、GuacamoleとAFDSのサインインの画面をループした。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0