第8章 mod_auth_mellon Apache モジュール
mod_auth_mellonは Apache の認証モジュールです。言語/環境が Apache HTTPD をプロキシーとして使用することをサポートしている場合は、mod_auth_mellon を使用して SAML で Web アプリケーションを保護できます。このモジュールの詳細は、GitHub リポジトリー mod_auth_mellon を参照してください。
Red Hat build of Keycloak では、mod_auth_mellon に対する公式サポートは提供されません。以下の手順は最善を尽くしたものですが、最新の情報ではない可能性があります。この章では、サーバーが RHEL システムであると想定しています。ただし、他の Linux システムでも同様の手順が必要になります。詳細は、公式の mod_auth_mellon ドキュメントを参照することを推奨します。
mod_auth_mellon を設定するには、次のファイルが必要です。
- アイデンティティープロバイダー (IdP) エンティティー記述子 XML ファイル。これは、Red Hat build of Keycloak または別の SAML IdP への接続を記述します。
- セキュリティー保護するアプリケーションの SAML 接続および設定を記述する SP エンティティー記述子 XML ファイル。
- 秘密鍵 PEM ファイル。これは、アプリケーションがドキュメントの署名に使用するプライベートキーを定義する PEM 形式のテキストファイルです。
- アプリケーションの証明書を定義するテキストファイルである証明書 PEM ファイル。
- mod_auth_mellon 固有の Apache HTTPD モジュール設定。
Red Hat build of Keycloak アプリケーションサーバーのレルム内にクライアントアプリケーションをすでに定義して登録している場合は、Red Hat build of Keycloak によって、Apache HTTPD モジュール設定を除く必要なファイルがすべて生成されます。
Apache HTTPD モジュール設定を生成するには、次の手順を実行します。
手順
- SAML クライアントのインストールページに移動します。
Mod Auth Mellon ファイルオプションを選択します。
図8.1 mod_auth_mellon 設定のダウンロード
- Download をクリックして、必要な XML 記述子と PEM ファイルを含む ZIP ファイルをダウンロードします。
8.1. Red Hat build of Keycloak を使用した mod_auth_mellon の設定 リンクのコピーリンクがクリップボードにコピーされました!
以下の 2 つのホストがあります。
- Red Hat build of Keycloak が実行されているホスト。Red Hat build of Keycloak は SAML アイデンティティープロバイダー (IdP) であるため、これは $idp_host と呼ばれます。
- Web アプリケーションが実行されているホスト。これは $sp_host と呼ばれます。SAML では、IdP を使用するアプリケーションはサービスプロバイダー (SP) と呼ばれます。
以下のすべての手順は、root 権限で $sp_host で実行する必要があります。
8.1.1. パッケージのインストール リンクのコピーリンクがクリップボードにコピーされました!
必要なパッケージをインストールするには、以下が必要です。
- Apache Web Server (httpd)
- Apache の Mellon SAML SP アドオンモジュール
- X509 証明書を作成するツール
必要なパッケージをインストールするには、以下のコマンドを実行します。
yum install httpd mod_auth_mellon mod_ssl openssl
yum install httpd mod_auth_mellon mod_ssl openssl
8.1.2. Apache SAML の設定ディレクトリーの作成 リンクのコピーリンクがクリップボードにコピーされました!
Apache の SAML の使用に関連する設定ファイルを 1 つの場所で維持することを推奨します。
Apache の設定ルート /etc/httpd の下に、saml2 という名前の新しいディレクトリーを作成します。
mkdir /etc/httpd/saml2
mkdir /etc/httpd/saml2
8.1.3. Mellon サービスプロバイダーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Apache アドオンモジュールの設定ファイルは /etc/httpd/conf.d ディレクトリーにあり、ファイル名の拡張子は .conf になります。/etc/httpd/conf.d/mellon.conf ファイルを作成し、Mellon の設定ディレクティブをこれに配置する必要があります。
Mellon の設定ディレクティブは、大まかに 2 つのクラスの情報に分類できます。
- SAML 認証を保護する URL
- 保護された URL が参照された場合に使用される SAML パラメーター。
Apache 設定ディレクティブは通常、場所と呼ばれる URL 領域内の階層ツリー構造に従います。Mellon が保護するには、URL の場所を 1 つ以上指定する必要があります。各場所に適用される設定パラメーターを追加する方法に柔軟性があります。必要なパラメーターをすべてロケーションブロックに追加するか、Mellon パラメーターを特定の保護された場所が継承する URL の場所階層にある共通の場所に追加するかのいずれかを実行できます (またはこの 2 つのなんらかの組み合わせを実行)。どの場所が SAML アクションをトリガーしても、SP は同じように動作するのが一般的であるため、ここで使用する設定例では、一般的な Mellon 設定ディレクティブを階層の root に配置してから、Mellon によって保護される特定の場所を最小限のディレクティブで定義できます。このストラテジーでは、保護されている場所ごとに同じパラメーターが重複しないようにします。
この例には保護された場所が 1 つ (https://$sp_host/private) しかありません。
Mellon サービスプロバイダーを設定するには、以下の手順を実行します。
手順
-
以下の内容で
/etc/httpd/conf.d/mellon.confファイルを作成します。
上記のコードで参照されるファイルの一部は、後の手順で作成されます。
8.1.4. mod_auth_mellon で使用される cookie の SameSite 値を設定します。 リンクのコピーリンクがクリップボードにコピーされました!
ブラウザーは、cookie の SameSite 属性の値を Lax に設定することを計画しています。この設定は、リクエストが同じドメインにある場合にのみ、cookie がアプリケーションに送信されることを意味します。この動作は SAML POST バインディングに影響を与える可能性があり、機能しなくなる可能性があります。mod_auth_mellon モジュールの完全な機能を保持するには、mod_auth_mellon が作成した cookie の SameSite 値を None に設定することを推奨します。作成しないと、Red Hat build of Keycloak を使用してログインできなくなる可能性があります。
SameSite の値を None に設定するには、以下の設定を、mellon.conf ファイルの <Location / > タグに追加します。
MellonSecureCookie On MellonCookieSameSite none
MellonSecureCookie On
MellonCookieSameSite none
この設定のサポートは、バージョン 0.16.0 の mod_auth_mellon モジュールで利用できます。
8.1.5. サービスプロバイダーメタデータの作成 リンクのコピーリンクがクリップボードにコピーされました!
SAML IdP および SP は、XML 形式の SAML メタデータを交換します。メタデータのスキーマは標準であるため、参加している 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')"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')"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、Mellon メタデータ作成ツールを呼び出します。
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_url
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_urlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成されたファイルを (上記で作成した
/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.xmlmv ${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.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.1.6. Red Hat build of Keycloak アイデンティティープロバイダーに Mellon サービスプロバイダーを追加する リンクのコピーリンクがクリップボードにコピーされました!
前提: Red Hat build of Keycloak IdP が $idp_host にすでにインストールされている。
Red Hat build of Keycloak は、すべてのユーザー、クライアントなどがレルムと呼ばれるものにグループ化される複数のテナンシーをサポートします。各レルムは、他のレルムとは独立しています。Red Hat build of Keycloak で既存のレルムを使用することもできますが、この例では test_realm という新しいレルムを作成し、そのレルムを使用する方法を示します。
これらの操作はすべて、Red Hat build of Keycloak 管理コンソールを使用して実行されます。以下の手順を実行するには、$idp_host の管理者のユーザー名およびパスワードが必要です。
手順
管理コンソールを開き、管理者のユーザー名とパスワードを入力してログオンします。
管理コンソールにログインすると、既存のレルムがあります。Red Hat build of Keycloak が最初にセットアップされると、デフォルトでルートレルム (master) が作成されます。以前に作成されたレルムは、管理コンソールの左上隅のドロップダウンリストにリスト表示されます。
- レルムドロップダウンリストから Add レルム を選択します。
-
Name フィールドに
test_realmと入力して、Create をクリックします。
8.1.6.1. レルムのクライアントとしての Mellon Service Provider の追加 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak では、SAML SP はクライアントとして知られています。SP を追加するには、レルムの Clients セクションにいる必要があります。
- 左側の Clients メニュー項目をクリックし、Import client ボタンをクリックします。
Resource file フィールドに、上記で作成した Mellon SP メタデータファイル (
/etc/httpd/saml2/mellon_metadata.xml) を指定します。ブラウザーが実行している場所に応じて、ブラウザーがファイルを見つけられるように、SP メタデータを $sp_host からブラウザーが実行されているマシンにコピーする必要があります。
- Save をクリックします。
8.1.6.2. Mellon SP クライアントの編集 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用して、重要なクライアント設定パラメーターを設定します。
手順
- Force POST Binding が On であることを確認します。
- paosResponse を 有効なリダイレクト URI リストに追加します。
- Valid Redirect URIs の postResponse URL をコピーし、"+" のすぐ下の空の add text フィールドに貼り付けます。
-
postResponseを paosResponse` に変更します。(SAML ECP には paosResponse URL が必要です。) - 下部の Save をクリックします。
多くの SAML SP は、グループのユーザーのメンバーシップに基づいて認可を決定します。Red Hat build of Keycloak IdP は、ユーザーグループ情報を管理できますが、IdP が SAML 属性としてユーザーグループを提供するように設定されていない限り、ユーザーのグループは提供されません。
ユーザーのグループを SAML 属性として提供するように IdP を設定するには、以下の手順を実行します。
手順
- クライアントの Client scopes タブをクリックします。
- 最初の行に配置された専用スコープをクリックします。
- Mappers ページで、Add mapper ボタンをクリックし、By configuration を選択します。
- Mapper Type リストから Group list を選択します。
-
Name を
group listに設定します。 -
SAML 属性名を
groupsに設定します。 - Save をクリックします。
残りの手順は $sp_host で実行されます。
8.1.6.3. アイデンティティープロバイダーメタデータの取得 リンクのコピーリンクがクリップボードにコピーされました!
IdP でレルムを作成したので、それに関連付けられた IdP メタデータを取得して、Mellon SP がそれを認識するようにする必要があります。以前に作成した /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
curl -k -o /etc/httpd/saml2/idp_metadata.xml \ https://$idp_host/realms/test_realm/protocol/saml/descriptorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Mellon が完全に設定されるようになりました。
Apache 設定ファイルの構文チェックを実行するには、以下のコマンドを使用します。
apachectl configtest
apachectl configtestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Configtest は apachectl の -t 引数と同じです。設定テストでエラーが表示される場合には、次に進む前に修正してください。
Apache サーバーを再起動します。
systemctl restart httpd.service
systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
これで、Red Hat build of Keycloak を test_realm の SAML IdP として、mod_auth_mellon を SAML SP としてセットアップし、$idp_host IdP に対して認証することで URL $sp_host/protected (およびその下のすべてのもの) を保護することができました。