Microsoft 365を監視する方法に関する以前のブログ(M365)では、サービスの概要と、外形監視ユーザーログイン監視の重要性について詳しく説明しました。このブログでは、安全なIDとアクセス管理のバックボーンを形成するコアコンポーネントである、Active Directoryフェデレーションサービス(AD FS)に着目します。

クラウドへ業務を移行する組織が増えるにつれ、IDと認証メカニズムの堅牢性を確保することが最も重要になります。 この状況においてAD FSは極めて重要な役割を果たし、M365エコシステムでのシームレスで安全なシングルサインオン(SSO)エクスペリエンスの要として機能します。

この記事は、AD FS実装の信頼性とセキュリティを確保する上で必要な知識とツールを提供することを目的としています。証明書の検証とメタデータ交換ドキュメントの領域をナビゲートし、M365環境での慎重な監視を保証する重要な要素を解明します。AD FSの世界に飛び込んで、効果的な監視の本質を発見しましょう。

AD FS証明書の検証

AD FS証明書 の検証は、M365内で安全かつ信頼性の高い認証インフラストラクチャを維持するための重要な側面です。証明書は、AD FS環境のさまざまなコンポーネント間の安全な通信を容易にする暗号キーとして機能します。定期的な検証により、これらの証明書が本物であるだけでなく最新であることが確認され、不正アクセスやセキュリティ侵害のリスクが軽減されます。証明書の有効期限が切れたり侵害されたりすると、サービスが中断され、認証リクエストのシームレスなフローが妨げられることがあります。厳格な証明書の検証を行うことで、組織はAD FSの実装を確固たるものにし、全体的なセキュリティの強化と、一貫した信頼できるSSOエクスペリエンスをユーザーに提供できます。AD FS証明書の監視を開始するには、以下の手順に従ってください。

AD FSの監視は、New Relic Infrastructure エージェントの オンホスト統合 として実装されます。すべての設定と必要なスクリプトは、専用の GitHubリポジトリ で提供されます。このインテグレーションは通常、AD FSロールをホストするのと同じサーバー上で実行されます。インテグレーションをデプロイするには、次の手順に従います。

  1. New Relic Infrastructureエージェントをインストールする(サポートが必要な場合は、ガイド付きインストール に従ってください)

  2. 設定ファイル adfs-cert.yml とPowerShellスクリプト GetExpiringCertificates.ps1 をエージェントのインテグレーションフォルダーにコピーするデフォルトの場所は次のとおりです。

  • Linux: /etc/newrelic-infra/integrations.d/
  • Windows: C:\Program Files\New Relic\newrelic-infra\integrations.d
  1. Infrastructureエージェントを再起動する。

設定ファイルは簡単で、次のようなものです

integrations:
- name: nri-flex
   interval: 24h
   config:
     name: M365AdfsCertificate
     apis:
       - event_type: M365AdfsCertificate
         shell: powershell
         timeout: 299000
         commands:
           - run: '& "C:/Program Files/New Relic/newrelic-infra/integrations.d/GetExpiringCertificates.ps1"'

上の設定の7行目が、このインテグレーションのデータがNew Relicに保存されるイベントの名前を定義します。実行コマンド(11行目)で定義されたスクリプトを呼び出すために、Flex を活用するようにInfrastructureエージェントに指示します。実際のPowerShellスクリプトは次のようになります

$expiring_certs = Get-ChildItem -Path cert: -Recurse -ExpiringInDays 365  | Select-Object Issuer, NotBefore, NotAfter, Subject, FriendlyName, SerialNumber, Thumbprint

# Build an empty array to add our results to
$results = @()

$StartDate = (Get-Date)

foreach ($item in $expiring_certs) {

 $ts = New-TimeSpan -Start $StartDate -End $item.NotAfter
 $tsDaysReverse = $ts.Days * -1

  # 結果を渡すカスタムオブジェクトを構築する
 $cert = [ PSCustomObject ]@{
   certSubject               = $item.Subject
   certIssuer                = $item.Issuer
   certSerialNumber          = $item.SerialNumber
   certNotBefore             = ( [DateTimeOffset ]$item.NotBefore ).ToUnixTimeSeconds()
   certNotAfter              = ( [DateTimeOffset ]$item.NotAfter ).ToUnixTimeSeconds()
   certThumbprint            = $item.Thumbprint
   certExpiringIn            = $ts
   certExpiringInReverseDays = $tsDaysReverse
   certExpirationDate        = $item.NotAfter | Get-Date -Uformat %s
   certFriendlyName          = $item.FriendlyName
 }

 $results += $cert
}

$results | ConvertTo-Json

スクリプトが最初に行うことは、Get-ChildItem モジュールを利用して、365日以内に有効期限が切れるすべての証明書を取得することです。次に、最後に返される空の配列を構築します。ループでは、見つかった証明書ごとに新しいオブジェクトを作成し、すべての詳細を含むオブジェクトを結果配列に追加します。最終的な配列はJSONに変換され、スクリプトの出力として返されます。

New Relic UIでは、エンティティエクスプローラーを使用して、収集されているすべての生データを確認します。

カスタムダッシュボードを構築して、有意義な方法でデータを視覚化することもできます。

データやダッシュボードを参照することはできますが、いちいち手動で確認するものではありません。理想的には、たとえば、30日以内に期限切れになる証明書がある場合にアラート通知を受け取りたいとします。これにより、証明書の更新や新しい証明書の作成に十分な時間を確保できます。New Relicでは、New Relicクエリ言語(NRQL)クエリを使用してアラート条件を設定することで、これを簡単に行えます。

SELECT min(certExpiringIn.Days) as 'Cert expiring' from M365AdfsCertificate facet certSubject

閾値の設定では、クエリが30未満の値を返すたびにインシデントをトリガーするように指定できます。

メタデータ交換ドキュメントの可用性

メタデータ交換ドキュメント の可用性を確保することは、M365環境内で回復力のあるAD FSインフラストラクチャを維持する上で最も重要です。メタデータ交換ドキュメントには、AD FSエンドポイント、証明書、安全な通信と認証に必要なその他の主要なメタデータに関する重要な情報が含まれています。この重要な情報がフェデレーションパートナーやエコシステム内の他のコンポーネントに容易にアクセスできることを保証するには、その可用性を定期的に確認することが不可欠です。メタデータ交換ドキュメントが利用できないと、フェデレーションプロセスが中断され、認証の失敗や稼働停止につながる可能性があります。可用性をプロアクティブに監視することで、組織は問題を迅速に特定・対処できるようになり、中断のない認証データフローが保証され、堅牢で信頼性の高いM365エクスペリエンスをユーザーに提供できます。メタデータ交換ドキュメントの監視を開始するには、以下の手順に従ってください。

AD FSの監視は、New Relic Infrastructure エージェントの オンホスト統合 として実装されます。このインテグレーションは通常、AD FSロールをホストするのと同じサーバー上で実行されます。インテグレーションをデプロイするには、次の手順に従います。

  1. New Relic Infrastructureエージェントをインストールする(サポートが必要な場合は、ガイド付きインストール に従ってください)注:証明書の検証に関して上記の手順をすでに実行している場合は、この手順をスキップして手順2から始めることができます。

  2. 設定ファイル adfs-metadata-xml.yml とPowerShellスクリプト GetMetadataXML.ps1 をエージェントのインテグレーションフォルダーにコピーするデフォルトの場所は次のとおりです

  • Linux: /etc/newrelic-infra/integrations.d/
  • Windows: C:\Program Files\New Relic\newrelic-infra\integrations.d
  1. Infrastructureエージェントサービスを再起動する

繰り返しになりますが、設定ファイルは次のように単純です

integrations:
- name: nri-flex
   interval: 60m
   config:
     name: M365AdfsMetadata
     apis:
       - event_type: M365AdfsMetadata
         shell: powershell
         timeout: 299000
         commands:
           - run: '& "C:/Program Files/New Relic/newrelic-infra/integrations.d/GetMetadataXML.ps1"'

上の設定の7行目は、このインテグレーションのデータがNew Relicに保存されるイベントの名前を定義します。実行コマンド(11行目)で定義されたスクリプトを呼び出すために、Flex インテグレーション(2行目)を利用して、PowerShellシェル(8行目)を活用するようにInfrastructureエージェントに指示します。

PowerShellスクリプトは次のようになります

add-type @"
   using System.Net;
   using System.Security.Cryptography.X509Certificates;
   public class TrustAllCertsPolicy : ICertificatePolicy {
       public bool CheckValidationResult(
           ServicePoint srvPoint, X509Certificate certificate,
           WebRequest request, int certificateProblem) {
           return true;
       }
   }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

$metadataUrl = "https://localhost/FederationMetadata/2007-06/FederationMetadata.xml"
$result = Invoke-WebRequest $metadataUrl -UseBasicParsing

# Build a custom object to pass into the results

$jsonResult = [ PSCustomObject ]@{

   metadataXMLURL    = $metadataUrl
   statusCode        = $result.StatusCode
   statusDescription = $result.StatusDescription
   rawContentLength  = $result.RawContentLength

}

$jsonResult | ConvertTo-Json

14行目ではメタデータ交換ドキュメントのURLを定義し、それをInvoke-WebRequest関数(15行目)に渡します。次に、結果を分析し、ウェブリクエストの結果(リクエストが成功したかどうか)など、メタデータ交換ドキュメントに関する詳細を含むオブジェクトを作成します。

New Relic UIでは、エンティティエクスプローラーを使用して、収集されているすべての生データを確認します。

カスタムダッシュボードを構築して、有意義な方法でデータを視覚化することもできます。

有効期限が切れる証明書に関する前の例で見たように、メタデータ交換ドキュメントが利用できなくなるたびに、New Relicにアラートを発するようにプロアクティブな手段をとりたいと考えています。New Relicでは、NRQL クエリを使用してアラート条件を設定することで、これを簡単に行えます。

SELECT latest(statusCode) FROM M365AdfsMetadata where metadataXMLURL is NOT NULL facet metadataXMLURL

上記のクエリは、監視している各メタデータ交換ドキュメントの最新のステータスコードを返します。これらのパスのいずれかでステータスコード400以上が発生した場合、インシデントをトリガーしたいとします。その場合は下図のように設定を行います。

結論

AD FS監視の細部を解明し、堅牢なソリューションで組織を強化する準備ができました。このブログで説明されている手順に従うことで、監視機能を強化し、Microsoft 365環境を強固にすることができます。