3.2. Apache HTTPD モジュール mod_auth_mellon
mod_auth_mellon モジュールは、SAML の Apache HTTPD プラグインです。言語/環境が Apache HTTPD をプロキシーとして使用することをサポートしている場合は、mod_auth_mellon を使用して SAML で Web アプリケーションを保護できます。このモジュールの詳細は、GitHub リポジトリー mod_auth_mellon を参照してください。
mod_auth_mellon を設定するには、以下が必要になります。
- アイデンティティープロバイダー (IdP) エンティティー記述子 XML ファイル。Red Hat Single Sign-On または他の SAML IdP への接続を記述します。
- セキュリティー保護するアプリケーションの SAML 接続および設定を記述する SP エンティティー記述子 XML ファイル。
- 秘密鍵 PEM ファイル。これは、アプリケーションがドキュメントの署名に使用するプライベートキーを定義する PEM 形式のテキストファイルです。
- アプリケーションの証明書を定義するテキストファイルである証明書 PEM ファイル。
- mod_auth_mellon 固有の Apache HTTPD モジュール設定。
3.2.1. Red Hat Single Sign-On での mod_auth_mellon の設定
以下の 2 つのホストがあります。
- Red Hat Single Sign-On が実行されているホスト。Red Hat Single Sign-On は SAML アイデンティティープロバイダー (IdP) であるため、$idp_host と呼ばれます。
- Web アプリケーションが実行されているホスト。これは $sp_host と呼ばれます。SAML では、IdP を使用するアプリケーションはサービスプロバイダー (SP) と呼ばれます。
以下のすべての手順は、root 権限で $sp_host で実行する必要があります。
3.2.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
3.2.1.2. Apache SAML の設定ディレクトリーの作成
Apache の SAML の使用に関連する設定ファイルを 1 つの場所で維持することを推奨します。
Apache 設定の root /etc/httpd の下に、saml2 という名前の新規ディレクトリーを作成します。
mkdir /etc/httpd/saml2
mkdir /etc/httpd/saml2
3.2.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 ファイルを作成します。
<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>
<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>
上記のコードで参照されるファイルの一部は、後の手順で作成されます。
3.2.2. mod_auth_mellon で使用される cookie の SameSite 値を設定します。
ブラウザーは、cookie の SameSite
属性の値を Lax
に設定することを計画しています。この設定は、リクエストが同じドメインにある場合にのみ、cookie がアプリケーションに送信されることを意味します。この動作は SAML POST バインディングに影響を与える可能性があり、機能しなくなる可能性があります。mod_auth_mellon モジュールの完全な機能を保持するには、mod_auth_mellon が作成した cookie の SameSite
値を None
に設定することを推奨します。このように設定しないと、Red Hat Single Sign-On を使用してログインできなくなる可能性があります。
SameSite
の値を None
に設定するには、以下の設定を、mellon.conf
ファイルの <Location / >
タグに追加します。
MellonSecureCookie On MellonCookieSameSite none
MellonSecureCookie On
MellonCookieSameSite none
この設定のサポートは、バージョン 0.16.0 の mod_auth_mellon モジュールで利用できます。
3.2.2.1. サービスプロバイダーメタデータの作成
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! 以下のコマンドを実行して、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_url
Copy to Clipboard Copied! 生成されたファイルを (上記で作成した /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
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
Copy to Clipboard Copied!
3.2.2.2. Red Hat Single Sign-On ID プロバイダーへの Mellon サービスプロバイダーの追加
前提条件: Red Hat Single Sign-On IdP が $idp_host にすでにインストールされています。
Red Hat Single Sign-On は、すべてのユーザー、クライアントなどが、いわゆるレルムにグループ化されるマルチテナンシーをサポートします。各レルムは、他のレルムとは独立しています。Red Hat Single Sign-On で既存のレルムを使用できますが、この例では test_realm という新しいレルムを作成し、そのレルムを使用する方法が示されています。
これらの操作はすべて、Red Hat Single Sign-On 管理コンソールを使用して実行されます。以下の手順を実行するには、$idp_host の管理者のユーザー名およびパスワードが必要です。
手順
管理コンソールを開き、管理者のユーザー名とパスワードを入力してログオンします。
管理コンソールにログインすると、既存のレルムがあります。Red Hat Single Sign-On が最初に設定されると、root レルム (master) がデフォルトで作成されます。以前に作成されたレルムは、管理コンソールの左上隅のドロップダウンリストにリスト表示されます。
- レルムドロップダウンリストから Add レルム を選択します。
-
Name フィールドに
test_realm
と入力して、Create をクリックします。
3.2.2.2.1. レルムのクライアントとしての Mellon Service Provider の追加
Red Hat Single Sign-On SAML SP はクライアントと呼ばれます。SP を追加するには、レルムの Clients セクションにいる必要があります。
- 左側の Clients メニュー項目をクリックし、右上隅の Create をクリックして新規クライアントを作成します。
3.2.2.2.2. Mellon SP クライアントの追加
Mellon SP クライアントを追加するには、以下の手順を実行します。
手順
- クライアントプロトコルを SAML に設定します。
- Client Protocol ドロップダウンリストから、saml を選択します。
上記で作成されたすべての SP メタデータファイル (/etc/httpd/saml2/mellon_metadata.xml) を提供します。
ブラウザーが実行している場所に応じて、ブラウザーがファイルを見つけられるように、SP メタデータを $sp_host からブラウザーが実行されているマシンにコピーする必要があります。
- Save をクリックします。
3.2.2.2.3. 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 Single Sign-On IdP はユーザーグループ情報を管理できますが、IdP が SAML 属性として提供するように設定されていない限り、ユーザーのグループは提供しません。
ユーザーのグループを SAML 属性として提供するように IdP を設定するには、以下の手順を実行します。
手順
- クライアントの Mappers タブをクリックします。
- Mappers ページの右上隅にある Create をクリックします。
- Mapper Type ドロップダウンリストから Group list を選択します。
- Name を "group list" に設定します。
- SAML 属性名をグループに設定します。
- Save をクリックします。
残りの手順は $sp_host で実行されます。
3.2.2.2.4. アイデンティティープロバイダーメタデータの取得
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/auth/realms/test_realm/protocol/saml/descriptor
curl -k -o /etc/httpd/saml2/idp_metadata.xml \ https://$idp_host/auth/realms/test_realm/protocol/saml/descriptor
Copy to Clipboard Copied! Mellon が完全に設定されるようになりました。
Apache 設定ファイルの構文チェックを実行するには、以下のコマンドを使用します。
apachectl configtest
apachectl configtest
Copy to Clipboard Copied! 注記Configtest は apachectl の -t 引数と同じです。設定テストでエラーが表示される場合には、次に進む前に修正してください。
Apache サーバーを再起動します。
systemctl restart httpd.service
systemctl restart httpd.service
Copy to Clipboard Copied!
これで、Red Hat Single Sign-On を test_realm の SAML IdP として、mod_auth_mellon を SAML SP として設定し、$idp_host
に対して認証することで URL $sp_host/protected (およびその下のすべてのもの) を保護することができました。