Mod_mellonとmodproxyを使用してIdPからApacheへのSSOをsplunkに構成しようとしています。
環境:Ubuntu 14.04; Apache 2.4.7; mod-auth-mellon0.7.0。
デフォルトのSSLサイトでメロンが生成したキー/証明書を使用して構成されたApache。 mod proxyは、ポート8000でローカルにsplunkするためのプロキシに使用されています。
auth_mellon.conf
:
MellonCacheSize 100
MellonLockFile "/var/lock/mod_auth_mellon.lock"
MellonPostDirectory "/var/cache/Apache2/mod_auth_mellon/"
ProxyRequests Off
ProxyPass /secret/ !
ProxyPassInterpolateEnv On
<Location />
MellonEnable "info"
Require valid-user
AuthType "Mellon"
MellonVariable "cookie"
MellonSamlResponseDump On
MellonSPPrivateKeyFile /etc/Apache2/mellon/urn_splunk.key
MellonSPCertFile /etc/Apache2/mellon/urn_splunk.cert
MellonSPMetadataFile /etc/Apache2/mellon/urn_splunk.xml
MellonIdpMetadataFile /etc/Apache2/mellon/idp-meta.xml
MellonEndpointPath /secret/endpoint
MellonUser "NAME_ID"
MellonDefaultLoginPath /en-US/
RequestHeader set SplunkWebUser %{MELLON_NAME_ID}e
MellonSamlResponseDump On
ProxyPass http://127.0.0.1:8000/
ProxyPassReverse http://127.0.0.1:8000/
ProxyPassInterpolateEnv On
</Location>
idp-meta.xml
には、IDPからのメタデータが含まれます(IDPx509証明書およびHTTPPost/HTTPリダイレクトパラメーターを含む)。 urn_service.*
ファイルは、SPおよびxml構成ファイルにx509証明書とキーを作成するmellon_create_metadata.sh
スクリプトから生成されます。
IdPからSplunkにアクセスしようとすると、Apacheログファイルにエラーが表示され、500 /内部サーバーエラー応答が返されます。
[authz_core:debug] mod_authz_core.c(802): AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[authz_core:debug] mod_authz_core.c(802): AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[core:error] AH00027: No authentication done but request not allowed without authentication for /secret/endpoint/login. Authentication not configured?
SAML認証が失敗しているようです。私はこのガイドに従っています: http://blogs.splunk.com/2013/10/09/splunk-sso-using-saml-through-okta/
SplunkはLDAPで認証するように構成されており、正しく認証されています。有効なユーザーを識別するために、ApacheもLDAP認証で構成する必要がありますか? (Apache/mellonでユーザーがどのように認証されるかはわかりません。すべて、IdPからのペイロードによって処理され、mellonはIDについて知っているだけだと想定しています
多くのことが間違っていたようです。まず、その側のSAML設定を変更したときに、メタデータをIdPからApache構成に再コピーする必要があることに気づきませんでした。とにかく、IdPとSP xmlファイルがApacheで正しく構成されていることを確認した後、次に進むことができました(エンティティIDを変更したと思います)
エラーログに有効なユーザーを要求することに関して、まだエラーが発生していました。 _MellonEnable "auth"
_が有効なユーザーの確保を処理しているのに対し、何らかの理由で_Require valid-user
_および_AuthType "Mellon"
_パラメーターがエラーと500サーバー応答をトリガーしていたことが判明しました。
これらの2つのディレクティブを削除した後も、エラーが発生していました。今回はCould not find metadata for the IdP "(null)"
-クイック検索の結果、Ubuntu 14.04 LTS(2.4.0)で利用可能な最新バージョンのlasso
が見つかりましたIdPがデフォルトで使用していたSHA256署名では機能しません。 Lasso2.5はSHA256をサポートします。互換性のあるアルゴリズムでIdP構成を更新した後、識別は正しく行われていました。
しかし、その後、コンテキストが原因でリダイレクトループに直面しました。 splunkのWebルートをルート(_/splunk
_)ではなく_/
_コンテキストに移動することを提案する別の投稿を見つけました。これを更新することで、IdPからメロン経由でSplunkに認証できるようになりました。 。関連する作業構成は次のとおりです。
_MellonLockFile "/var/lock/mod_auth_mellon.lock"
MellonPostDirectory "/var/cache/Apache2/mod_auth_mellon/"
ProxyRequests Off
ProxyPassInterpolateEnv On
# Move the proxy directives out of <location> and specify the context / mapping
ProxyPass /splunk http://127.0.0.1:8000/splunk
ProxyPassReverse /splunk http://127.0.0.1:8000/splunk
<Location />
MellonEnable "info"
MellonVariable "cookie"
MellonSamlResponseDump On
MellonSPPrivateKeyFile /etc/Apache2/mellon/urn_splunkweb.key
MellonSPCertFile /etc/Apache2/mellon/urn_splunkweb.cert
MellonSPMetadataFile /etc/Apache2/mellon/urn_splunkweb.xml
MellonIdpMetadataFile /etc/Apache2/mellon/idp-metadata.xml
MellonEndpointPath /secret/endpoint
MellonUser "NAME_ID"
MellonDefaultLoginPath /splunk/en-US/
RequestHeader set SplunkWebUser %{MELLON_NAME_ID}e
ProxyPassInterpolateEnv On
</Location>
<Location /splunk/>
# Forces /splunk requests to be authenticated via the IdP.
MellonEnable "auth"
</Location>
_
$ SPLUNK_HOME/etc/system/local/web.conf:
_[settings]
trustedIP=127.0.0.1
remoteUser SplunkWebUser
SSOMode=permissive
root_endpoint = /splunk
_
そして$ SPLUNK_HOME/etc/system/local/server.conf
_[general]
trustedIP=127.0.0.1
_
これは明らかに、Apache/mellonサーバーがsplunkと同じホストで実行されるセットアップ用です。 _web.conf
_(splunk)および_auth_mellon.conf
_(Apache)は、そうでない場合はリモートIPで更新する必要があります。 _web.conf
_は信頼できるホストのコンマ区切りリストをサポートしますが、_server.conf
_はサポートせず、ローカルホストのままにする必要があります。
次のデバッグWebページをステージングします。
<?php
header('Content-Type: text/plain');
foreach($_SERVER as $key=>$value) {
if(substr($key, 0, 7) == 'MELLON_') {
echo($key . '=' . $value . "\r\n");
}
}
?>
ユーザーのIDがにあるかどうかを確認できますか
MellonUser "NAME_ID"
NAME_ID
属性?それは私には疑わしいようです。通常はuid
または同様のものです。テストフェーズでは、500の問題を回避するために、IdPがリリースすることがわかっている任意の属性(メール、cn ...など)に変更できます。
ほとんどの場合、IDPはLDAPで正しく構成されておらず、Mellon/Apacheに追加の構成は必要ありません。
問題をさらにドリルダウンするのに役立つSAML応答のダンプを投稿できる場合。
さらに話し合いたい場合はお知らせください。
ありがとう、Sandy E- [email protected]