ゆるテックノート

SAMLメタデータ運用

署名付きメタデータの扱いやローテーション時の手順を整理し、IdP/SP間の設定ズレを防ぐためのヒントをまとめました。

📥 メタデータの取り込み

取り込みルールを決めて自動化しておくと、設定ズレや期限切れを防ぎやすくなります。

基本フロー

  • 署名付きメタデータであれば署名検証を有効化する
  • IdP/SPで自動インポートをスケジュールすると設定ズレを減らせる
  • ダウンロードURLが変わらないかを監視し、失効に備える

🔐 署名付きメタデータの検証

OASISのSAML Metadata仕様では、署名付きメタデータを検証して信頼を確立することが推奨されています。

検証ポイント

  • メタデータの署名をIdP/SPが相互に検証する(信頼できる鍵で署名されているか)
  • entityID の一意性を確認し、意図しないエンティティと混在させない
  • KeyDescriptor の use="signing" / use="encryption" が正しく宣言されているか
  • 配布URLを固定し、改ざん検知のために定期的な署名検証を行う

🔁 ローテーションと通知

証明書やエンドポイントが変わる際の段取りを決めておくと事故を防げます。

運用ポイント

  • 📌 更新予定日を共有し、事前にテスト環境で反映する
  • 📌 旧証明書の猶予期間を設定し、並行稼働で切り替える
  • 📌 ローテーション通知はメール+メタデータ更新で二重化する

📄 メタデータ構造の基本

主要な要素を押さえておくと、設定の抜け漏れを防げます。

主な要素

  • EntityDescriptor: IdPまたはSPを表す最上位タグ
  • KeyDescriptor: 署名/暗号化に使う証明書情報を記述(use="signing"/"encryption")
  • SingleSignOnService: ログイン処理を受け付けるエンドポイント(IdP)
  • AssertionConsumerService: SPがレスポンスを受け取るエンドポイント

ベストプラクティス

  • 証明書の期限切れで拒否されるため、有効期限を定期確認する
  • エンドポイントURLのプロトコル・タイポを二重チェックする
  • 独自生成する場合はスキーマ準拠を確認する

📝 IdP / SP メタデータの例

最低限チェックすべき要素を押さえておくとトラブルシュートしやすくなります。サンプルは最小構成の例です。

確認チェックリスト

  • 🧭 EntityID が期待通りか(URL形式/URN形式の違いに注意)
  • 🧭 SingleSignOnService / AssertionConsumerService のURLやBindingが正しいか
  • 🧭 KeyDescriptor に署名/暗号化の証明書が正しく載っているか

SPメタデータの例(最小)

署名/暗号化用証明書とACSを含む最小構成の例です。

<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://sp.example.com/metadata">
  <md:SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data><ds:X509Certificate>MIIC...sign...</ds:X509Certificate></ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:KeyDescriptor use="encryption">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data><ds:X509Certificate>MIIC...enc...</ds:X509Certificate></ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://sp.example.com/acs" index="0" />
  </md:SPSSODescriptor>
</md:EntityDescriptor>

IdPメタデータの例(最小)

署名用証明書とSSOエンドポイントを含む最小構成の例です。

<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://idp.example.com/metadata">
  <md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data><ds:X509Certificate>MIIC...idp-sign...</ds:X509Certificate></ds:X509Data>
      </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://idp.example.com/sso" />
  </md:IDPSSODescriptor>
</md:EntityDescriptor>