web-dev-qa-db-ja.com

Apachemod_mellonを使用したIdPからのSplunkSAMLSSOが失敗する

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について知っているだけだと想定しています

1
Brett

多くのことが間違っていたようです。まず、その側の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_はサポートせず、ローカルホストのままにする必要があります。

2
Brett

次のデバッグ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 ...など)に変更できます。

1
473183469

ほとんどの場合、IDPはLDAPで正しく構成されておらず、Mellon/Apacheに追加の構成は必要ありません。

問題をさらにドリルダウンするのに役立つSAML応答のダンプを投稿できる場合。

さらに話し合いたい場合はお知らせください。

ありがとう、Sandy E- [email protected]

0
Sandy S