SplunkでSAML認証を利用していると、ログイン時に次のようなエラーが表示されることがあります。


1つ目は、IdP (Identity Provider)から送られてきたSAMLレスポンスの署名検証に失敗したことを意味します。
2つ目は、SAML Responseに含まれるグループ情報をSplunkがロールに結びつけられなかったことを意味します。
代表的な原因としては、例えば次のようなものが考えられます。
SAMLのIdPとしてはOkta、OneLogin、PingFederateなど様々な製品を利用できますが、本記事ではMicrosoft Entra IDを具体例として設定例やSAMLResponseの中身を紹介します。なお、本記事中の画面キャプチャはSplunk Cloudを用いていますが、切り分け手順や確認観点はSplunk Enterprise環境でも同様に有効です。
ここで扱う「クレーム(claim)」は、SAML / OAuth2全体で使われる一般的な概念です。本記事では、IdPから送られてくるユーザー属性(メールアドレスやグループなど)を、SAMLの用語に合わせて「クレーム(claim)」と呼びます。
他のIdPをご利用の場合も、
「IdP側でどのクレーム(属性)が構成されているか」→「SAMLResponseにどう出てくるか」→「Splunk側でどう解釈されるか」
という考え方・流れは共通ですので、自環境に置き換えてご覧いただければと思います。
本記事では、こうしたSAMLに関するエラーが出たときに以下3つの観点で、切り分け手順をまとめます。
まずは、Splunkに届いているSAMLResponseの中身を実際に確認します。

PHNhbWxw...
コピーしたSAMLResponseを、コマンドラインでデコードしてXMLとして整形します。
Linux / macOS / WSL環境などで:
$ echo 'PHNhbWxw...(省略)...' \ | base64 -d \ | xmllint --format - 2>/dev/null
これで、きれいにインデントされたSAMLResponseが表示されます。
確認したい主なポイントは次の3つです。
今回のIdP側の設定例は次の通りです。

※本節の設定は、執筆時点のMicrosoftEntra IDの画面に基づく一例です。最新の推奨設定については、各IdPベンダーの公式ドキュメントを参照してください。
必要な要求
追加の要求
| クレーム名 | 値 |
|---|---|
| http://schemas.microsoft.com/ws/2008/06/identity/claims/groups | user.groups [SecurityGroup] |
| http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress | user.mail |
| http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname | user.givenname |
| http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name | user.userprincipalname |
| http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname | user.surname |
xmllintで整形したSAMLResponseの中に、例えば次のようなブロックがあるかを確認します。
<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"> samltest@XXXXX.onmicrosoft.com </NameID> ... </subject> <AttrobuteStatement> ... <Attribute Name="http://schemas.microsoft.com/identity/claims/displayname"> <AttributeValue>samltest</AttributeValue> </Attribute> <Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/groups"> <AttributeValue>groupid</AttributeValue> </Attribute> <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"> <AttributeValue>samltest@XXXXX.onmicrosoft.com</AttributeValue> </Attribute> ... </AttributeStatement>
ここで確認したいのは:
この時点で、IdPから送られてくるSAMLの中身自体は正しいかを切り分けられます。
署名検証エラー(failed to verify signature with cert)の場合、重要なのはどの証明書で署名されているかです。これはSAMLResponse内の<Signature>セクションから確認できます。
SAMLResponseから、次のようなブロックを探します。
<Signature xmlns=>
...
<KeyInfo>
<X509Data>
<X509Certificate>MIIC8D...</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
以降では、<X509Certificate>部分(Base64)を環境変数X509_CERTIFICATEに入れて、opensslで確認します。
# X509_CERTIFICATE変数にBase64文字列をセットした前提
$ echo "$X509_CERTIFICATE" \ | base64 -d \ | openssl x509 -inform der -noout -dates notBefore=Feb 16 05:13:11 2023 GMT notAfter=Feb 20 04:28:54 2025 GMT

``` $ echo "$X509_CERTIFICATE" \ | base64 -d \ | openssl x509 -inform der -noout -fingerprint -sha1 SHA1 Fingerprint=12:34:56:78:AB...
この値を、Entra IDの「拇印(Thumbprint)」の証明書と比較します。
よくあるパターン
同じSAMLResponseから、グループ情報の有無も確認できます。
AttributeStatementに、次のようなブロックがあるかを確認します。
<Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/groups"> <AttributeValue>groupid-1</AttributeValue> <AttributeValue>groupid-2</AttributeValue> <AttributeValue>groupid-3</AttributeValue> </Attribute>
SAMLResponseにgroupsが入っているのにエラーになる場合は、Splunk側設定との噛み合わせを確認します。
Role alias = http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsこの設定で、SplunkはEntra IDのgroupsクレームをロール決定用のグループ情報として認識します。
この登録が漏れていると、SAMLResponseにgroupsは存在していても、Splunk側で有効なロールに変換できず、「Saml response does not contain group information.」が発生します。
今回のケースでは、SAMLResponseに含まれていたGroup Object IDがSAML GroupsのGroup Nameとして登録されていないユーザーでログインしたため、このエラーが発生していました。
本記事で扱った以下2種類のエラーはいずれも、SAMLResponseを実際に見て中身を確認することで、切り分けることができます。
1. Verification of SAML assertion using the IDP's certificate provided failed. Error: failed to verify signature with cert
2. Saml response does not contain group information.
チェックフローとしては、次のように整理できます。
この一連の手順により、
を具体的に確認できるようになります。
本記事の内容は、あくまで代表的な構成を前提とした一例ですが、SAMLトラブル発生時に「何を確認し、どの順番で進めるべきか」を検討する際の参考情報としてご活用いただければ幸いです。