「証明書が 30 日後に失効しますが、対応の準備はできていますか?」
「…その証明書って、どれですか?」

その瞬間、IT 担当者の手が止まった。Microsoft 365 のサインインに使われている SAML 署名証明書。有効期限まで 1 か月を切っていた。

01|概要

ある中小製造業では、オンプレミス Active Directory をユーザー管理の起点として、Google Workspace と Microsoft 365 の両クラウドを並行運用している。アカウント同期は、Google Cloud Directory Sync(GCDS)で AD → Google Workspace へ、Entra Connect で AD → Microsoft 365(Entra ID)へという二経路で行われている。

アカウント同期の構成
オンプレミス
Active Directory
ユーザー管理の起点
👤
👤
👤
従業員アカウント群
GCDS

Entra Connect

クラウド
G
Google Workspace
同期先 ①
IdP(認証の主)
SAML SSO 認証

Microsoft 365
同期先 ②(Entra ID)
SP(サービス受信側)

GCDS 同期

Entra Connect 同期

SAML SSO(認証連携)

この構成の特徴は、認証の主(IdP)が Google Workspace であり、Microsoft 365 がサービスを受ける側(SP)として位置づけられている点だ。ユーザーは Google のログイン画面で一度認証し、その認証情報をもとに Microsoft 365 を利用する。

世間に多い「Microsoft Entra ID が IdP」の構成とは向きが逆で、日本語の技術情報が極めて少ない領域である。顧客のシステムで SAML 署名証明書の有効期限が約 30 日後に迫り、更新作業が必要になった。本稿はその対応プロセスを記録した技術事例報告である。

02|直面した課題

① 証明書の失効期限が迫っていた
SAML 署名証明書が失効すると、Google Workspace と Microsoft 365 の間の SAML 連携が切れ、ユーザーは Microsoft 365 にサインインできなくなる。社内業務の一部が ExcelやPowerPointなど Microsoft Office アプリに依存していたため、SSO の停止は業務停止に直結する深刻なリスクだった。

② この構成を扱った日本語情報がほぼ存在しない
ネット上に存在する SAML 証明書更新の手順の大半は「Entra ID が IdP」の構成を前提としている。「Google が IdP」の構成に絞ると、参照できる日本語情報は極めて少なく、手順の設計自体を一から行う必要があった。

③ 無停止で切り替えなければならない
業務時間中の SSO 停止は許容できない。証明書の新旧を、認証が途切れない状態のまま入れ替える方法を選択する必要があった。

03|なぜ PowerShell(Microsoft Graph)を選んだか

Entra ID の GUI での更新が不可能だとわかった時点で、選択肢は PowerShell(Microsoft Graph API)による直接操作に絞られた。

無停止での切り替えには、Update-MgDomainFederationConfiguration コマンドの -NextSigningCertificate パラメーターを使う「次期証明書方式」を採用した。

この方式では、新しい証明書を「次期証明書」として登録した時点で Microsoft 365 が新旧両方の証明書を受け入れる状態になる。その間に Google 側を新証明書に切り替え、動作確認後に正式昇格させる。この手順により、認証停止時間ゼロでの更新が可能となる。

下図は本事例(B方式:Google が IdP)と参考比較の A方式(Entra ID が IdP・世間に多い向き)の作業概念図だ。見出しをクリックすると内容を展開できる。

TECHNICAL REFERENCE — SAML CERTIFICATE ROTATION
SAML 証明書更新 作業概念図
Google Workspace ⇔ Microsoft 365 の SAML フェデレーションにおける署名証明書の無停止更新手順。見出しをクリックすると展開します。
B方式(本事例)実機検証済み
IdP:Google Workspace / Google で認証 → Microsoft 365 へ ▼
👤
ユーザー
Google Workspace
IdP(認証元・署名する側)
更新対象①:新証明書を生成(.pem ダウンロード)
Microsoft 365
SP(検証する側)
更新対象②:GUI 不可 → PowerShell のみで更新

ユーザーは Google で認証 → Microsoft 365 を利用。証明書は Google(IdP)側で生成し、Microsoft(SP)側は PowerShell で更新する。世間に多い「Entra ID が IdP」とは向きが逆で、日本語情報が極めて少ない構成。

② 作業ステップ(順序厳守)
1Google
新証明書を生成・取得
管理コンソールで生成
.pem を個別DL
割り当ては旧のまま
2PowerShell
Graph に接続・現状保全
緊急用アカウントで認証
$fid 自動取得
現設定を保全
3PowerShell
新証明書を登録 ★先
-WhatIf 空打ち確認
-NextSigningCertificate
新旧両方有効(無停止)
4Google
割り当てを切替 ★後
証明書を新に切替
SAMLログインをテスト
逆順→AADSTS5000811
5確認
動作確認
シークレットウィンドウ
m365.cloud.microsoft
反映に最大24時間
6PowerShell
正式証明書へ昇格
安定確認後
-SigningCertificate
で正式昇格
7完了後
旧証明書を削除
1週間経過観察後
Google・MS両側で削除
次回90日前アラート設定
③ 効きどころ・注意点
順序厳守:Microsoft(SP)登録が先、Google(IdP)切替が後。逆は署名検証エラー(AADSTS5000811)。
自動ロールオーバーは効かない(本事例構成に限る)。MetadataExchangeUri が空 ― 公式手順どおりの標準状態。
緊急用クラウド専用管理者(SSO非依存)を用意。作業中にSSOが切れても管理操作を継続できる。
認証ループ時は accounts.google.com/Logout でサインアウト→再ログインで解消。
A方式(参考:世間に多い構成)公式手順準拠
IdP:Microsoft Entra ID / Microsoft で認証 → Google へ ▼
👤
ユーザー
Microsoft Entra ID
IdP(認証元・署名する側)
更新対象①:GUI で発行・有効化
Google Workspace
SP(検証する側)
更新対象②:管理コンソールで証明書を登録

ユーザーは Microsoft で認証 → Google サービスを利用。証明書は Entra ID(IdP)側で GUI から発行・管理でき、PowerShell 不要。世間に多い構成。本事例とは向きが逆。

② 作業ステップ(順序厳守)
1Entra ID
新証明書を発行
エンタープライズアプリ→SSO
SAML証明書→新しい証明書
保存(非アクティブ)→Base64取得
2Google
新証明書を登録 ★先
管理コンソール→IdPのSSO
別の証明書をアップロード
旧証明書も有効なまま
3Entra ID
アクティブ化 ★後
新証明書の「…」→アクティブ化
Google側が両方受付
無停止で切替
4確認
動作確認
シークレットウィンドウ
Googleサービスにアクセス
Entra IDユーザーでログイン
5完了後
旧証明書を削除
動作安定を確認後
Entra ID・Google両側で削除
次回失効をカレンダー登録
③ 効きどころ・注意点
順序:Entra で発行(非アクティブ)→ Google(SP)に登録が先 → Entra でアクティブ化が後。
SP側未登録のままアクティブ化すると署名検証に失敗する。
証明書は新旧2枚を保持できる間に無停止で切替。Google 側は反映に時間がかかる場合あり。
本方式は Entra ID が IdP の構成(Microsoft で認証 → Google へ)が対象。本事例とは向きが逆。
デジタル工房 HABAねっと

04|実施プロセス

確立した手順は以下の 7 ステップである。順序の厳守が最重要であり、特にステップ 3(Microsoft 側次期証明書登録)とステップ 4(Google 側切替)の順番を絶対に逆にしてはならない。

実施内容実施環境
(1) Google 管理コンソールで新証明書を生成し、.pem ファイルを個別ダウンロード
※ メタデータ XML は 2 枚問題があるため使用しない
Google 管理コンソール
(2) PowerShell で Microsoft Graph に接続し、現在のフェデレーション設定を取得・保全PowerShell
(3) .pem を変数に読み込み、-WhatIf で空打ち確認してから -NextSigningCertificate新証明書を登録(新旧両方有効→無停止)PowerShell
(4) Google 管理コンソールでアプリ割り当てを新証明書に切替 → 「SAML ログインをテスト」で動作確認Google 管理コンソール
(5) シークレットウィンドウで m365.cloud.microsoft にアクセスして実際の SSO 動作を確認(「portal.office.com」は同 URL にリダイレクトされる)ブラウザ
(6) 動作安定を確認後、-SigningCertificate で新証明書を正式昇格PowerShell
(7) 1 週間の経過観察後、Google・Microsoft 両側で旧証明書を削除。次回失効の 90 日前にアラートを設定両コンソール

PowerShell コマンド詳細(ステップ 2〜6)

以下に各ステップで実行する PowerShell コマンドの全文を示す。コマンド中の your-domain.jp<username><証明書ファイル名> は実環境に合わせて置換すること。すべての PowerShell 操作は、SAML フェデレーション対象外ドメインの緊急用クラウド管理者アカウントで認証すること(典型的な例:{your-tenant}.onmicrosoft.com)。

【事前準備】Microsoft Graph モジュールのインストール(初回のみ)

# 実行ポリシーを設定(初回のみ)―「管理者として実行」で起動する
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

# Microsoft Graph モジュールをインストール(数分かかる)
Install-Module Microsoft.Graph.Identity.DirectoryManagement -Scope CurrentUser

# インストール確認
Get-InstalledModule Microsoft.Graph

Step 2:Microsoft Graph への接続

Connect-MgGraph -Scopes "Domain.ReadWrite.All", "Directory.AccessAsUser.All"
# ブラウザが開く → 緊急用管理者アカウント(例:{your-tenant}.onmicrosoft.com など SSO 非依存ドメイン)でサインイン
# フェデレーション対象のカスタムドメイン(your-domain.jp 等)は Google SSO が適用されるため使用不可

Step 2(続き):現在のフェデレーション設定を取得・保全

$domain = 'your-domain.jp'   # ← 実際のドメイン名に置換
$fed    = Get-MgDomainFederationConfiguration -DomainId $domain
$fid    = $fed.Id   # InternalDomainFederationId を変数に自動格納(手入力ミス防止)
$fed | Format-List   # 現設定を全表示―ロールバック用にメモまたはファイルに保存すること

Step 3:新証明書(.pem)を変数に読み込む

$pemPath = 'C:Users<username>Downloads<証明書ファイル名>.pem'
Test-Path $pemPath   # True を確認

$cert = (Get-Content $pemPath |
         Where-Object { $_ -notmatch '-----BEGIN' -and $_ -notmatch '-----END' }) -join ''
$cert   # 先頭が MIID... の1行になっていることを確認

Step 3(続き):-WhatIf で空打ち確認→本番登録

# 空打ち確認(変更は実行されない)
Update-MgDomainFederationConfiguration `
    -DomainId $domain `
    -InternalDomainFederationId $fid `
    -NextSigningCertificate $cert `
    -WhatIf

# 本番:次期証明書として登録(新旧両方有効→無停止)
Update-MgDomainFederationConfiguration `
    -DomainId $domain `
    -InternalDomainFederationId $fid `
    -NextSigningCertificate $cert

Get-MgDomainFederationConfiguration -DomainId $domain | Format-List
# NextSigningCertificate に MIID... が入っていることを確認

Step 6:新証明書を正式な SigningCertificate へ昇格(Step 4・5 の動作確認後)

Update-MgDomainFederationConfiguration `
    -DomainId $domain `
    -InternalDomainFederationId $fid `
    -SigningCertificate $cert

Get-MgDomainFederationConfiguration -DomainId $domain | Format-List
# SigningCertificate に新証明書が、NextSigningCertificate が空になっていることを確認

【ロールバック:必要な場合のみ】Microsoft 側を旧証明書に戻す

# Step 2 で保全した旧証明書の Base64 値を $oldcert に入れて実行
Update-MgDomainFederationConfiguration `
    -DomainId $domain `
    -InternalDomainFederationId $fid `
    -SigningCertificate $oldcert

05|成果

  • ダウンタイム 0 での更新完了:証明書の切り替えを SSO の停止なしで完了した。
  • 失効を未然に回避:期限前に更新を完了し、全社的な Microsoft 365 への接続断を防いだ。
  • 再現可能な手順書の確立:実機検証を通じて、この構成に特化した正確な手順書が完成した。担当者が変わっても次回の失効(約 5 年後)に対応できる状態になった。
  • 緊急用アカウントの運用ルール化:今回の作業を通じて SSO 非依存の緊急用クラウド管理者アカウントの重要性が認識され、管理ルールとして明文化された。

06|示唆と注意点

自動ロールオーバーは機能しない(Google Workspace が IdP の構成に限る)
Google Workspace を IdP とするこの構成では、MetadataExchangeUri が空であるため、証明書の自動更新(自動ロールオーバー)が動作しない。これは設定ミスではなく、Microsoft 公式手順どおりに構成した標準状態だ。手動更新が唯一の選択肢であることを、あらかじめ運用計画に組み込んでおく必要がある。
なお、Okta など WS-Federation に対応した IdP を用いる構成では MetadataExchangeUri が設定されるため、自動ロールオーバーが機能する場合がある。本注意事項はあくまで「Google Workspace が IdP」の構成に限った話である。

緊急用アカウントが生命線になる
作業中に SSO が一時的に切れると、SSO に依存した管理者アカウントでは管理操作自体ができなくなる。重要なのは、SAML フェデレーション対象外のドメインで緊急用クラウド管理者アカウントを用意しておくことだ。Entra ID のテナントには初期状態から {your-tenant}.onmicrosoft.com という初期ドメインが存在し、このドメインは SAML フェデレーションを設定できないため緊急用に最適だが、必須ではない。独自のカスタムドメインを複数持っている場合、フェデレーション対象外のドメインがあればそれでも構わない。ドメインが SAML 対象外であることが本質であり、その資格情報で作業することが前提条件だ。

切り替えの順序を絶対に守ること
実機検証中、誤って Google 側を先に新証明書に切り替えてしまい、署名検証エラー AADSTS5000811 が発生して SSO が停止した。正しい順序は 「① Microsoft(SP)に新証明書を次期証明書として登録 → ② Google(IdP)を新証明書に切替」 だ。

反映に最大 24 時間かかる場合がある
切り替え直後に認証ループが発生した場合は、accounts.google.com/Logout からサインアウトし、再ログインすることで解消できる。

手順書は実機検証を経て初めて本物になる
GUI で更新できると書いていた手順が実際には使えず、実機検証の中で正しい手順を発見した。手順書の精度は実機検証によってのみ担保される。

07|今後の備え

  • 90 日前アラートの設定:証明書有効期限の 90 日前にカレンダー通知を設定し、余裕を持って準備を開始できるようにした。
  • 引き継ぎ資料の整備:今回確立した手順を事例ページとセットで引き継ぎ資料として整備し、次の担当者がゼロから調査しなくて済む状態にした。
  • 緊急用アカウントの定期点検:SSO 非依存の緊急用クラウド管理者アカウントについて、半期に 1 度ログイン確認を行う運用とした。

08|同じ課題を抱えている方へ

「Google が IdP で、Microsoft 365 が SP」という構成は、導入当時の判断や経緯によって成立していることが多い。日本語情報が少ないまま、気づいたら証明書の失効が迫っていた、という状況に直面している情シス担当者や、システムを引き継いだ SE の方は少なくないはずだ。

この事例が、同じ構成で証明書更新に直面している方の一助になれば幸いである。

HABAねっとでは、こうした「既存の手順書が使えない」「情報が少なくて自社構成に確信が持てない」という場面での技術的な整理・伴走支援も行っている。


参考・出典


🛠 デジタル工房 HABAねっと
北陸を拠点に、中小企業経営者・個人事業主がデジタル経営を実現するためのお手伝いを行っています。
「外注で完結」ではなく「自社で動かせる体制を作る」伴走型の支援を、北陸から提供しています。

サービス一覧 ▶ https://habanet.jp/services/
お問い合わせ ▶ https://habanet.jp/contact/