Google WorkspaceとAzure ADFS環境でOffice 365のSAML証明書を更新する手順
概要
ある日、突然Office 365へログインできなくなりました。
Error: malformed_certificate
原因はSAMLの有効期限切れだったので、問題の発見方法と設定手順を説明します。
背景
弊社のアカウント管理がどのようになっているかを以下に説明します。
- Google Workspaceを利用しているのでGoogle Workspaceのユーザマスタを主として運用している。
- Microsoft Azureを利用してADFS(Active Directory Federation Service)を使っている。
- ADFSを利用することによってOffice 365のユーザをADFSのユーザと同期できるようになってライセンス付与を自動化している。
上記の設定によって以下のようなユースケースを実現しています。
- ユーザマスタ管理者がGoogle Workspace上でユーザを作成
- 自動的にMicrosoft AzureのADFSにユーザ情報が同期される。(5分ぐらいかかる)
- Office 365のライセンスがOrganization Unitに応じて付与される。
当時、ADFSの設定をしたときにはドキュメントがほとんど存在していなくて設定をするのにまる1日ぐらいかかったと思います。
今、検索してみたら以下の記事にわかりやすくまとまっているのを見つけました。
(当時、手順書をかブログにまとめようと思っていましたが複雑だったのと、色々トライアンドエラーをしていたし、スクショにマスクをしないといけなかったりで面倒なので諦めました)
原因
最初に挙げた問題に対して軽く調べましたところ、原因はGoogle Workspace上のMicrosoft 365アプリで発行したSAMLの証明書が切れたからでした。
SAML連携の設定時にService ProviderへIdPで発行した証明書を登録します。
関連づいている証明書はこちらから確認できます。スクショではすでに更新済みなので有効期限が未来になっています。
上記のボタンを押すと証明書の削除や新規発行が行える画面になるのでここで証明書の管理をします。本来なら有効期限が切れる前にこの操作をして登録をしておく必要があります。
更新手順
ADFS環境にてSAMLを設定するための手順書は存在しているのですが、更新する際の手順書が見つかりませんでした。
この更新作業にはWindowsのPCが必要になります。Windowsが手元に無いのでAzureのVMを立ち上げて作業します。
ちなみに、Azure上のPowerShellで更新ができたら楽だったのですができませんでした。
Azure上で適当にWindowsを立ち上げます。無料クレジットがあると思いますので、無料で立ち上げられると思います。
手元のmacからRemote Desktopを使ってこのVMへ接続します。PowerShellを立ち上げます。
まず、設定を確認してみます。
以下のコマンドでADFSに使っているSAMLの設定情報を出力します。
$DomainName = "example.com"
Get-MsolDomainFederationSettings -DomainName $DomainName
古い証明書が登録されていることを確認しておきます。
まず、Federatedの状態を解除してManagedにします。
Set-MsolDomainAuthentication -Authentication Managed -DomainName example.com
以下のようなコマンドを打ち込んで、SAMLの設定を更新します。
xxxxxxxx
は伏せ字です
$ssoUrl = "https://accounts.google.com/o/saml2/idp?idpid=xxxxxxxx"
$entity = "https://accounts.google.com/o/saml2?idpid=xxxxxxxx"
$domain = "xxxxxx"
$cert = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Set-MsolDomainAuthentication -Authentication Federated -DomainName $domain -ActiveLogOnUri $ssoUrl -PassiveLogOnUri $ssoUrl -IssuerUri $entity -LogOffUri $ssoUrl -SigningCertificate $cert -PreferredAuthenticationProtocol SAMLP
証明書が更新されているかを以下のコマンドで確認します。
$DomainName = "example.com"
Get-MsolDomainFederationSettings -DomainName $DomainName
そのあと、以下のコマンドを打ち込んでドメインの状態がFederatedになっているかを確認します。
Get-MsolDomainFederationSettings
テスト
Google WorkspaceのOffice 365のアプリ画面から TEST SAML LOGIN
をクリックしてログインが成功するかを検証します。冒頭のエラーが出なくログインできれば成功です。
最後に、立ち上げたVMを綺麗サッパリ削除して終わりにします。
考察
Federatedを解除しないで更新できるか?
できませんでした。
Set-MsolDomainAuthentication
コマンドを使って新しい証明書を設定しようとしましたができませんでした。コマンド自体は成功しますが、証明書が書き換わりませんでした。
VMを立ち上げないでCloud Shellでできるのか?
Connect-MsolService
で接続できないので無理かなと思います。
自動更新できないのか?
でき無さそう。自分でリマインダーを設定しておきましょう。
Discussion