Azure サービス正常性のスコープ

azure
Published: 2024-08-26

はじめに

Azure にはサービス正常性という仕組みがあります。この仕組みを利用して、利用者は次の情報を受け取ることができます。

  • サービスに関する問題
  • 計画メンテナンス
  • 正常性の勧告
  • セキュリティアドバイザリ

参考:Azure portal を使用してサービス正常性通知を表示する

このサービス正常性にはスコープという考え方があります。スコープにはサブスクリプションとテナントが存在しています。

Azure Service Health ポータルの更新プログラム

直近の過去の通知を見ると、次のようなものがテナントスコープで通知されていました

  • KK85-LW0 : ServiceIssue : Post Incident Review (PIR) – Microsoft Entra ID Multi-Factor Authentication (MFA) – Sign-in logs
  • __RK-PTG : ServiceIssue : Entra ID Application Provisioning Service - No Impact
  • 4V20-VX0 : HealthAdvisory : Action required: Enable multifactor authentication for your tenant by 15 October 2024
  • WNWK-L9Z : SecurityAdvisory : [Action Required] We’ll enable Conditional Access policies for your organization during the week of June 17, 2024

ドキュメントの修正履歴を見ると、2022年7月ごろからサービス正常性の画面でテナントスコープの通知を見れるようになったようです。

updating docs for new experience

この機能が反映された新しいエクスペリエンスな画面にはスコープが存在しています。

新しいエクスペリエンスな画面

クラシックなエクスペリエンスな画面にはスコープが存在していません。また、テナントがスコープになっているサービス正常性が存在しません。

クラシックなエクスペリエンスな画面

気になったのでスコープによる違いを調べました。

API のパス

スコープによって API にアクセスする時のパスが異なります。

テナントスコープの場合、パスは /providers/Microsoft.ResourceHealth/events?api-version=2018-07-01 になります。API のパスにおなじみの /subscriptions/サブスクリプション ID/ が含まれていません。サブスクリプションスコープの場合には、パスは /subscriptions/サブスクリプション ID/providers/Microsoft.ResourceHealth/events?api-version=2018-07-01 になります。

API にアクセスするための権限

テナントスコープのサービス正常性を表示するためには、Entra ID に対する権限が必要です。Azure サブスクリプションに対して所有者権限を持っていたとしても、テナントスコープのサービス正常性は確認できません。

テナント管理者のアクセス権を持つロール

また、サブスクリプションスコープのサービス正常性を確認するためには、Azure サブスクリプションに対する権限が必要です。Entra ID に対してグローバル管理者を持っていたとしても、サブスクリプションスコープのサービス正常性は確認できません。

簡単なスクリプトで動作確認しました。ログインしている Entra ID の資格情報を利用して API 経由で Azure サービス正常性を取得するものです。

$trackingId = New-Object System.Collections.ArrayList

$path = "/providers/Microsoft.ResourceHealth/events?api-version=2018-07-01&queryStartTime=2024-01-31T15:00:00.000Z&"
$tenantResult = Invoke-AzRest -Path $path -Method GET
($tenantResult.content | convertfrom-json).value | ForEach-Object {
    $trackingId.Add($_.name + ":" + $_.properties.EventType + ":" + $_.properties.title) | Out-Null
}

$path = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-1558cc49f261/providers/Microsoft.ResourceHealth/events?api-version=2018-07-01&queryStartTime=2024-07-22T15:00:00.000Z&`$filter=(Properties/EventType eq 'HealthAdvisory')"
$subscriptionResult = Invoke-AzRest -Path $path -Method GET
($subscriptionResult.content | convertfrom-json).value | ForEach-Object {
    $trackingId.Add($_.name) | Out-Null
}

$result = [PSCustomObject]@{
    id = (Get-AzContext).Account.Id
    trackingId = $trackingId
}

$result

Azure サブスクリプションの所有者と Entra ID のグローバル管理者を持つアカウントでは、テナントスコープとサブスクリプションスコープあわせて3つの情報を確認できます。4V20-VX0 がテナントスコープ、KT32-VR0 と H_L6-7_0 がサブスクリプションスコープです。

> $result
id                   trackingId
--                   ----------
xxxxxxxxx@aimless.jp {4V20-VX0, KT32-VR0, H_L6-7_0}

一方で、Entra ID のグローバル閲覧者のみを持つアカウントでは、テナントスコープの 4V20-VX0 のみを確認できます。サブスクリプションスコープのサービス正常性の API にアクセスした際には、権限不足でエラーが返ってきています。

> $result
id                      trackingId
--                      ----------
xxxxxxxxxxxx@aimless.jp {4V20-VX0, $null}


> $subscriptionResult

StatusCode : 403
Content    : {
               "error": {
                 "code": "AuthorizationFailed",
                 "message": "The client 'xxxxxxxxxxxx@aimless.jp' with object id '58e681fc-56a0-4345-a5d7-8106bca7757c' does not have authorization to perform a 
             ction 'Microsoft.ResourceHealth/events/read' over scope '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-1558cc49f261' or the scope is invalid. If access wa 
             s recently granted, please refresh your credentials."
               }
             }

サブスクリプションスコープの閲覧者権限を持つアカウントの場合、サブスクリプションスコープの KT32-VR0 と H_L6-7_0 のみを確認できます。テナントスコープのサービス正常性の API にアクセスした際には、権限不足でエラーが返ってきています。

> $result
id                             trackingId
--                             ----------
xxxxxxxxxxxxxxxxxxx@aimless.jp {$null, KT32-VR0, H_L6-7_0}

> $tenantResult

StatusCode : 403
Content    : {
               "error": {
                 "code": "AuthorizationFailed",
                 "message": "The client 'xxxxxxxxxxxxxxxxxxx@aimless.jp' with object id '42b341e1-2452-4c00-9195-936fa82046a3' does not have authorization to pe 
             rform action 'Microsoft.ResourceHealth/events/read' over scope '/providers/Microsoft.ResourceHealth' or the scope is invalid. If access was recentl 
             y granted, please refresh your credentials."
               }

アラートの設定方法

サブスクリプションスコープのサービス正常性には、サービス正常性アラートを利用できます。サービス正常性アラートを利用することで、Azure からの通知をメールで受け取れます。

Azure portal を使用してサービス正常性通知を表示する

このサービス正常性アラートは現時点でテナントスコープのサービス正常性に対応していません。テナントスコープのサービス正常性の中で利用者に対応を求めるものについては、Entra ID のグローバル管理者に対してメールが送信されるはずなので、グローバル管理者のメールアドレスはメールを受信できるものにしておくと良いでしょう。

おわり

サービス正常性のスコープについてまとめました。アカウントの持つ権限によって見え方が変わってくる点と現時点でサービス正常性のアラートの対象ではない点に注意が必要です。2つのスコープのサービス正常性の通知をもれなく受け取り対応することで、安定した運用を目指しましょう。

Note

  • 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
  • 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
  • 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。