mod_auth_mellon Apacheモジュール

Keycloakでのmod_auth_mellon Apacheモジュールの設定

mod_auth_mellonは、Apache用の認証モジュールです。お使いの言語/環境がApache HTTPDをプロキシとして使用することをサポートしている場合、mod_auth_mellonを使用してSAMLでWebアプリケーションを保護できます。このモジュールの詳細については、mod_auth_mellon GitHubリポジトリを参照してください。

Keycloakは、mod_auth_mellonに対する公式なサポートを提供していません。以下の手順は、可能な限り正確を期していますが、最新ではない可能性があります。このガイドは、サーバーがRHELシステムであることを前提としています。ただし、他のLinuxシステムでも同様の手順が必要になります。詳細については、mod_auth_mellonの公式ドキュメントを参照することを推奨します。

mod_auth_mellonを設定するには、以下のファイルが必要です

  • アイデンティティプロバイダー(IdP)エンティティ記述子XMLファイル。Keycloakまたは別のSAML IdPへの接続を記述します。

  • SPエンティティ記述子XMLファイル。保護するアプリケーションのSAML接続と構成を記述します。

  • 秘密鍵PEMファイル。アプリケーションがドキュメントに署名するために使用する秘密鍵を定義するPEM形式のテキストファイルです。

  • 証明書PEMファイル。アプリケーションの証明書を定義するテキストファイルです。

  • mod_auth_mellon固有のApache HTTPDモジュール構成。

Keycloakアプリケーションサーバー上のレルム内でクライアントアプリケーションをすでに定義および登録している場合、KeycloakはApache HTTPDモジュール構成を除く、必要なすべてのファイルを生成できます。

Apache HTTPDモジュール構成を生成するには、次の手順を実行します。

手順
  1. SAMLクライアントのインストールページに移動します。

  2. Mod Auth Mellonファイルオプションを選択します。

    Download auth-melon configuration
    図1. mod_auth_mellon構成のダウンロード
  3. ダウンロードをクリックして、必要なXML記述子ファイルとPEMファイルが含まれるZIPファイルをダウンロードします。

Keycloakでのmod_auth_mellonの設定

関係するホストは2つあります

  • Keycloakが実行されているホスト。KeycloakはSAMLアイデンティティプロバイダー(IdP)であるため、$idp_hostと呼びます。

  • Webアプリケーションが実行されているホスト。$sp_hostと呼びます。SAMLでは、IdPを使用するアプリケーションはサービスプロバイダー(SP)と呼ばれます。

以下のすべての手順は、$sp_host上でroot権限で実行する必要があります。

パッケージのインストール

必要なパッケージをインストールするには、以下が必要です

  • Apache Web Server (httpd)

  • Apache用Mellon SAML SPアドオンモジュール

  • X509証明書を作成するためのツール

必要なパッケージをインストールするには、次のコマンドを実行します

yum install httpd mod_auth_mellon mod_ssl openssl

Apache SAML用の構成ディレクトリの作成

ApacheのSAMLの使用に関連する構成ファイルを1か所にまとめておくことをお勧めします。

Apache構成ルート/etc/httpdの下にsaml2という名前の新しいディレクトリを作成します。

mkdir /etc/httpd/saml2

Mellonサービスプロバイダーの設定

Apacheアドオンモジュールの構成ファイルは、/etc/httpd/conf.dディレクトリにあり、ファイル名拡張子は.confです。/etc/httpd/conf.d/mellon.confファイルを作成し、Mellonの構成ディレクティブをその中に配置する必要があります。

Mellonの構成ディレクティブは、大きく2つのクラスの情報に分類できます

  • SAML認証で保護するURL

  • 保護されたURLが参照されたときに使用されるSAMLパラメータ。

Apache構成ディレクティブは通常、URL空間内の階層ツリー構造に従い、これはロケーションとして知られています。Mellonで保護する1つまたは複数のURLロケーションを指定する必要があります。各ロケーションに適用する構成パラメータを追加する方法には柔軟性があります。必要なすべてのパラメータをロケーションブロックに追加することも、特定の保護されたロケーションが継承するURLロケーション階層の上位にある共通のロケーションにMellonパラメータを追加することもできます(またはその2つの組み合わせ)。SPがどのロケーションがSAMLアクションをトリガーする場合でも同じように動作するのが一般的なため、ここで使用する構成例では、共通のMellon構成ディレクティブを階層のルートに配置し、Mellonで保護される特定のロケーションを最小限のディレクティブで定義できます。この戦略により、保護されたロケーションごとに同じパラメータを複製することを回避できます。

この例には、保護されたロケーションが1つだけあります:https://$sp_host/private。

Mellonサービスプロバイダーを設定するには、次の手順を実行します。

手順
  1. 次の内容で/etc/httpd/conf.d/mellon.confファイルを作成します

 <Location / >
    MellonEnable info
    MellonEndpointPath /mellon/
    MellonSPMetadataFile /etc/httpd/saml2/mellon_metadata.xml
    MellonSPPrivateKeyFile /etc/httpd/saml2/mellon.key
    MellonSPCertFile /etc/httpd/saml2/mellon.crt
    MellonIdPMetadataFile /etc/httpd/saml2/idp_metadata.xml
 </Location>
 <Location /private >
    AuthType Mellon
    MellonEnable auth
    Require valid-user
 </Location>
上記のコードで参照されているファイルの一部は、後の手順で作成されます。

ブラウザは、CookieのSameSite属性のデフォルト値をLaxに設定することを計画しています。この設定は、リクエストが同じドメインから発信された場合にのみ、Cookieがアプリケーションに送信されることを意味します。この動作は、SAML POSTバインディングに影響を与える可能性があり、機能しなくなる可能性があります。mod_auth_mellonモジュールの完全な機能を維持するために、mod_auth_mellonによって作成されたCookieのSameSite値をNoneに設定することをお勧めします。そうしないと、Keycloakを使用したログインができない場合があります。

SameSite値をNoneに設定するには、mellon.confファイル内の<Location / >タグに次の構成を追加します。

MellonSecureCookie On
MellonCookieSameSite none

この構成のサポートは、バージョン0.16.0以降のmod_auth_mellonモジュールで利用可能です。

サービスプロバイダーのメタデータの作成

SAMLでは、IdPとSPはSAMLメタデータを交換します。これはXML形式です。メタデータスキーマは標準であるため、参加しているSAMLエンティティが互いのメタデータを消費できることが保証されます。必要なものは

  • SPが利用するIdPのメタデータ

  • IdPに提供されるSPを記述するメタデータ

SAMLメタデータのコンポーネントの1つはX509証明書です。これらの証明書は、2つの目的で使用されます

  • SAMLメッセージに署名して、受信側がメッセージが予期された当事者から発信されたことを証明できるようにします。

  • 転送中にメッセージを暗号化します(SAMLメッセージは通常TLSで保護された転送で発生するため、めったに使用されません)

認証局(CA)を既にお持ちの場合は、独自の証明書を使用するか、自己署名証明書を生成できます。この例では、簡単にするために自己署名証明書を使用します。

MellonのSPメタデータは、インストールされているmod_auth_mellonのバージョンの機能、有効なSPメタデータXMLである必要があり、X509証明書(X509証明書の生成に精通していない限り、その作成は理解しにくい場合があります)を含める必要があるため、SPメタデータを生成する最も迅速な方法は、mod_auth_mellonパッケージに含まれているツール(mellon_create_metadata.sh)を使用することです。生成されたメタデータはテキストファイルであるため、後でいつでも編集できます。このツールは、X509キーと証明書も作成します。

SAML IdPとSPは、EntityIDとして知られる一意の名前を使用して自身を識別します。Mellonメタデータ作成ツールを使用するには、以下が必要です

  • EntityID。通常はSPのURLであり、多くの場合SPメタデータを取得できるSPのURLです。

  • SPのSAMLメッセージが消費されるURL。MellonはこれをMellonEndPointPathと呼びます。

SPメタデータを作成するには、次の手順を実行します。

手順
  1. いくつかのヘルパーシェル変数を作成します

    fqdn=`hostname`
    mellon_endpoint_url="https://${fqdn}/mellon"
    mellon_entity_id="${mellon_endpoint_url}/metadata"
    file_prefix="$(echo "$mellon_entity_id" | sed 's/[^A-Za-z.]/_/g' | sed 's/__*/_/g')"
  2. 次のコマンドを実行して、Mellonメタデータ作成ツールを呼び出します

    /usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_url
  3. 生成されたファイルを宛先(上記で作成した/etc/httpd/conf.d/mellon.confファイルで参照)に移動します

    mv ${file_prefix}.cert /etc/httpd/saml2/mellon.crt
    mv ${file_prefix}.key /etc/httpd/saml2/mellon.key
    mv ${file_prefix}.xml /etc/httpd/saml2/mellon_metadata.xml

MellonサービスプロバイダーをKeycloakアイデンティティプロバイダーに追加する

前提条件:Keycloak IdPは$idp_hostに既にインストールされていること。

Keycloakは、すべてのユーザー、クライアントなどがレルムと呼ばれるものにグループ化されるマルチテナンシーをサポートしています。各レルムは他のレルムから独立しています。Keycloakで既存のレルムを使用できますが、この例では、test_realmという新しいレルムを作成して使用する方法を示します。

これらの操作はすべてKeycloak管理コンソールを使用して実行されます。次の手順を実行するには、$idp_hostの管理者ユーザー名とパスワードが必要です。

手順
  1. 管理コンソールを開き、管理者ユーザー名とパスワードを入力してログオンします。

    管理コンソールにログインすると、既存のレルムがあります。Keycloakを最初にセットアップすると、ルートレルムであるmasterがデフォルトで作成されます。以前に作成されたレルムは、管理コンソールの左上隅のドロップダウンリストに一覧表示されます。

  2. レルムドロップダウンリストからレルムの追加を選択します。

  3. [名前]フィールドにtest_realmと入力し、作成をクリックします。

Mellonサービスプロバイダーをレルムのクライアントとして追加する

Keycloakでは、SAML SPはクライアントとして知られています。SPを追加するには、レルムの[クライアント]セクションにいる必要があります。

  1. 左側の[クライアント]メニュー項目をクリックし、クライアントのインポートボタンをクリックします。

  2. リソースファイルフィールドに、上記で作成したMellon SPメタデータファイル(/etc/httpd/saml2/mellon_metadata.xml)を指定します。

    ブラウザが実行されている場所によっては、ブラウザがファイルを見つけられるように、$sp_hostからブラウザが実行されているマシンにSPメタデータをコピーする必要がある場合があります。

  3. 保存をクリックします。

Mellon SPクライアントの編集

重要なクライアント構成パラメータを設定するには、この手順を使用します。

手順
  1. Force POST Bindingがオンになっていることを確認します。

  2. 有効なリダイレクトURIリストにpaosResponseを追加します

  3. 有効なリダイレクトURIのpostResponse URLをコピーして、すぐ下の「+」の下にある空のテキストフィールドに貼り付けます。

  4. postResponseをpaosResponse`に変更します。(paosResponse URLはSAML ECPに必要です。)

  5. 下部の保存をクリックします。

多くのSAML SPは、ユーザーのグループメンバーシップに基づいて承認を決定します。Keycloak IdPはユーザーグループ情報を管理できますが、IdPがSAML属性として提供するように構成されていない限り、ユーザーのグループを提供しません。

IdPがユーザーのグループをSAML属性として提供するように構成するには、次の手順を実行します。

手順
  1. クライアントのクライアントスコープタブをクリックします。

  2. 最初の行に配置されている専用スコープをクリックします。

  3. [マッパー]ページで、マッパーの追加ボタンをクリックし、構成によるを選択します。

  4. [マッパータイプ]リストからグループリストを選択します。

  5. [名前]をgroup listに設定します。

  6. SAML属性名をgroupsに設定します。

  7. 保存をクリックします。

残りの手順は、$sp_hostで実行されます。

アイデンティティプロバイダーのメタデータの取得

IdPにレルムを作成したので、Mellon SPがそれを認識できるように、それに関連付けられたIdPメタデータを取得する必要があります。以前に作成した/etc/httpd/conf.d/mellon.confファイルでは、MellonIdPMetadataFile/etc/httpd/saml2/idp_metadata.xmlとして指定されていますが、これまでそのファイルは$sp_hostに存在していませんでした。

IdPからそのファイルを取得するには、この手順を使用します。

手順
  1. このコマンドを使用し、$idp_hostの正しい値に置き換えます

    curl -k -o /etc/httpd/saml2/idp_metadata.xml \
    https://$idp_host/realms/test_realm/protocol/saml/descriptor

    Mellonは完全に構成されました。

  2. Apache構成ファイルの構文チェックを実行するには、次のコマンドを使用します

    apachectl configtest
    Configtestは、apachectlへの-t引数と同等です。構成テストでエラーが表示された場合は、続行する前に修正してください。
  3. Apacheサーバーを再起動します

    systemctl restart httpd.service

これで、Keycloakをtest_realmのSAML IdPとして、mod_auth_mellonを$idp_host IdPに対して認証することにより、URL $sp_host/protected(およびその下にあるすべて)を保護するSAML SPとして設定しました。

このページについて