
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モジュール構成を生成するには、次の手順を実行します。
SAMLクライアントのインストールページに移動します。
Mod Auth Mellonファイルオプションを選択します。
ダウンロードをクリックして、必要なXML記述子ファイルとPEMファイルが含まれるZIPファイルをダウンロードします。
関係するホストは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の使用に関連する構成ファイルを1か所にまとめておくことをお勧めします。
Apache構成ルート/etc/httpd
の下にsaml2という名前の新しいディレクトリを作成します。
mkdir /etc/httpd/saml2
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サービスプロバイダーを設定するには、次の手順を実行します。
次の内容で/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メタデータを作成するには、次の手順を実行します。
いくつかのヘルパーシェル変数を作成します
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')"
次のコマンドを実行して、Mellonメタデータ作成ツールを呼び出します
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_url
生成されたファイルを宛先(上記で作成した/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
前提条件:Keycloak IdPは$idp_hostに既にインストールされていること。
Keycloakは、すべてのユーザー、クライアントなどがレルムと呼ばれるものにグループ化されるマルチテナンシーをサポートしています。各レルムは他のレルムから独立しています。Keycloakで既存のレルムを使用できますが、この例では、test_realmという新しいレルムを作成して使用する方法を示します。
これらの操作はすべてKeycloak管理コンソールを使用して実行されます。次の手順を実行するには、$idp_hostの管理者ユーザー名とパスワードが必要です。
管理コンソールを開き、管理者ユーザー名とパスワードを入力してログオンします。
管理コンソールにログインすると、既存のレルムがあります。Keycloakを最初にセットアップすると、ルートレルムであるmasterがデフォルトで作成されます。以前に作成されたレルムは、管理コンソールの左上隅のドロップダウンリストに一覧表示されます。
レルムドロップダウンリストからレルムの追加を選択します。
[名前]フィールドにtest_realm
と入力し、作成をクリックします。
Keycloakでは、SAML SPはクライアントとして知られています。SPを追加するには、レルムの[クライアント]セクションにいる必要があります。
左側の[クライアント]メニュー項目をクリックし、クライアントのインポートボタンをクリックします。
リソースファイルフィールドに、上記で作成したMellon SPメタデータファイル(/etc/httpd/saml2/mellon_metadata.xml
)を指定します。
ブラウザが実行されている場所によっては、ブラウザがファイルを見つけられるように、$sp_hostからブラウザが実行されているマシンにSPメタデータをコピーする必要がある場合があります。
保存をクリックします。
重要なクライアント構成パラメータを設定するには、この手順を使用します。
Force POST Bindingがオンになっていることを確認します。
有効なリダイレクトURIリストにpaosResponseを追加します
有効なリダイレクトURIのpostResponse URLをコピーして、すぐ下の「+」の下にある空のテキストフィールドに貼り付けます。
postResponse
をpaosResponse`に変更します。(paosResponse URLはSAML ECPに必要です。)
下部の保存をクリックします。
多くのSAML SPは、ユーザーのグループメンバーシップに基づいて承認を決定します。Keycloak IdPはユーザーグループ情報を管理できますが、IdPがSAML属性として提供するように構成されていない限り、ユーザーのグループを提供しません。
IdPがユーザーのグループをSAML属性として提供するように構成するには、次の手順を実行します。
クライアントのクライアントスコープタブをクリックします。
最初の行に配置されている専用スコープをクリックします。
[マッパー]ページで、マッパーの追加ボタンをクリックし、構成によるを選択します。
[マッパータイプ]リストからグループリストを選択します。
[名前]をgroup list
に設定します。
SAML属性名をgroups
に設定します。
保存をクリックします。
残りの手順は、$sp_hostで実行されます。
IdPにレルムを作成したので、Mellon SPがそれを認識できるように、それに関連付けられたIdPメタデータを取得する必要があります。以前に作成した/etc/httpd/conf.d/mellon.conf
ファイルでは、MellonIdPMetadataFile
は/etc/httpd/saml2/idp_metadata.xml
として指定されていますが、これまでそのファイルは$sp_hostに存在していませんでした。
IdPからそのファイルを取得するには、この手順を使用します。
このコマンドを使用し、$idp_hostの正しい値に置き換えます
curl -k -o /etc/httpd/saml2/idp_metadata.xml \
https://$idp_host/realms/test_realm/protocol/saml/descriptor
Mellonは完全に構成されました。
Apache構成ファイルの構文チェックを実行するには、次のコマンドを使用します
apachectl configtest
Configtestは、apachectlへの-t引数と同等です。構成テストでエラーが表示された場合は、続行する前に修正してください。 |
Apacheサーバーを再起動します
systemctl restart httpd.service
これで、Keycloakをtest_realmのSAML IdPとして、mod_auth_mellonを$idp_host
IdPに対して認証することにより、URL $sp_host/protected(およびその下にあるすべて)を保護するSAML SPとして設定しました。