Azure Monitor でのロール、アクセス許可、セキュリティ

この記事では、 ロールベースのアクセス制御 (RBAC) 監視ロールを適用してアクセスを許可または制限する方法について説明し、Azure Monitor 関連リソースのセキュリティに関する考慮事項について説明します。

組み込み監視ロール

Azureロールベースのアクセス制御 (Azure RBAC) には、ユーザー、グループ、サービス プリンシパル、マネージド ID に割り当てるための監視用の組み込みロールが用意されています。 最も一般的なロールは、読み取りアクセス許可と書き込みアクセス許可の 監視閲覧者 と 監視共同作成者 です。 ロールを割り当てるときは、ロールの割り当てのスコープを指定します。 ロールは、サブスクリプション、リソース グループ、またはリソース レベルで割り当てることができます。 スコープが広いほど、ロールの割り当てが適用されるリソースが多くなります。 ユーザーが必要とするリソースのみにアクセスを制限するには、適切なスコープでロールを割り当てます。

監視ロールの詳細については、「 RBAC 監視ロール」を参照してください。

モニタリング閲覧者 vs モニタリング共同作成者

「Monitoring 共同作成者」は、「Monitoring 閲覧者」の上位集合です。 次の表は、2 つのロールを一目で比較したものです。 機能の完全な一覧については、以下のセクションを参照してください。

Capability 監視リーダー モニタリング貢献者
監視データ、ダッシュボード、メトリック、アラートを表示する はい はい
アクティビティ ログと Log Analytics ワークスペースのデータを照会する はい はい
診断設定、自動スケール設定、および Application Insights データを表示する はい はい
プライベート監視ダッシュボードを作成する いいえ はい
診断設定の作成と編集 いいえ はい 1
アラート ルールとアラート設定を設定する いいえ はい
Log Analytics ワークスペースの共有キーを一覧表示する いいえ はい
保存された検索を作成、削除、実行する いいえ はい
Application Insights の Web テストとコンポーネントを作成する いいえ はい

1ListKeys の前提条件: ストレージ アカウントまたはストリームにデータをイベント ハブに送信する診断設定を作成または編集するには、監視共同作成者ロールに加えて、ターゲット リソース (ストレージ アカウントまたは Event Hubs 名前空間) に対する ListKeys アクセス許可が必要です。 リソースまたはリソース グループ のスコープで ListKeys を付与します。監視アクセスのみを必要とするユーザーには、サブスクリプション スコープでは許可されません。 詳細については、 データの監視に関するセキュリティに関する考慮事項を参照してください。

どちらのロールでも、イベント ハブにストリーミングされたログ データやストレージ アカウントに格納されているログ データへの読み取りアクセス権は付与されません。 そのデータへのアクセスを構成するには、データの 監視に関するセキュリティに関する考慮事項を参照してください。

監視リーダー

監視閲覧者の役割が割り当てられている場合は、サブスクリプション内の監視データすべてを表示できますが、リソースを変更したり、監視リソースに関連する設定を編集したりすることはできません。 この役割は、次の作業を行う必要がある、サポート エンジニア、運用エンジニアなどの組織内のユーザーに適しています。

  • Azure portal に監視ダッシュボードを表示する。
  • Azure アラートで定義されている アラート ルールを表示します。
  • Azure Monitor REST API、PowerShell コマンドレット、またはAzure CLIを使用して、Azure Monitorメトリックにクエリを実行します。
  • ポータル、Azure Monitor REST API、PowerShell コマンドレット、または Azure CLI を使用して、アクティビティ ログを照会します。
  • リソースの 診断設定 を表示します。
  • サブスクリプションの ログ プロファイル を表示します。 ログ プロファイルは、アクティビティ ログをルーティングするための従来の機能です。 それらに新しい依存関係を構築しないでください。
  • 自動スケールの設定を表示する。
  • アラート アクティビティと設定を表示する。
  • ワークスペースの使用状況データなど、Log Analytics ワークスペースのデータを検索する。
  • Log Analytics ワークスペーステーブルスキーマを取得する。
  • Log Analytics ワークスペースにログクエリを取得および実行する。
  • Application Insights データにアクセスします。

モニタリング貢献者

監視共同作業者ロールが割り当てられている場合、サブスクリプション内の監視データすべてを表示できます。 また、監視設定を作成または変更することもできますが、他のリソースを変更することはできません。

このロールは、監視閲覧者ロールを包含する上位ロールです。 これは、前述のアクセス許可に加えて、以下を実行する必要がある組織の監視チームまたはマネージド サービス プロバイダーのメンバーに適しています。

  • ポータルで監視ダッシュボードを表示し、独自のプライベート監視ダッシュボードを作成する。
  • リソースの 診断設定 を作成および編集します。 診断設定を作成または編集するには、 ListKeys の前提条件も必要です。
  • Azure アラートを使用してアラート ルールのアクティビティと設定 を設定します。
  • Log Analytics ワークスペースの共有キーを一覧表示する。
  • Log Analytics ワークスペースに保存する検索を作成、削除、および実行する。
  • Log Analytics のワークスペースのストレージ構成を作成および削除する。
  • Application Insights の Web テストとコンポーネントを作成する。

アクセス許可と Azure カスタム ロールの監視

組み込みロールがチームのニーズを満たしていない場合は、詳細なアクセス許可を持つAzureカスタム ロールを作成します。

たとえば、詳細なアクセス許可を使用して、次の PowerShell スクリプトを使用してアクティビティ ログ閲覧者のAzureカスタム ロールを作成します。

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Activity Log Reader"
$role.Description = "Can view activity logs."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Insights/eventtypes/*")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/<SubscriptionId>")
New-AzRoleDefinition -Role $role 

リソースのアラート、診断設定、メトリックにアクセスするには、そのリソースの種類とスコープへの読み取りアクセスが必要です。 ストレージ アカウントまたはストリームにデータをイベント ハブに送信する診断設定を作成するには、 ListKeys の前提条件も必要です。

ロールを割り当てる

ロールを割り当てるには、「 Azure PowerShell を使用して Azure ロールを割り当てる」を参照してください。

たとえば、次の PowerShell スクリプトを使って、指定したユーザーにロールを割り当てます。

<RoleId>を、割り当てる RBAC 監視ロール ID に置き換えます。

<SubscriptionID>、<ResourceGroupName>、および <UserPrincipalName> を実際の環境の適切な値に置き換えます。

# Define variables
$SubscriptionId = "<SubscriptionID>"
$ResourceGroupName = "<ResourceGroupName>"
$UserPrincipalName = "<UserPrincipalName>"  # The UPN of the user to whom you want to assign the role
$RoleId = "<RoleId>"  # The ID of the role

# Get the user object
$User = Get-AzADUser -UserPrincipalName $UserPrincipalName

# Define the scope (e.g., subscription or resource group level)
$Scope = "/subscriptions/$SubscriptionId/resourceGroups/$ResourceGroupName"

# Assign the role
New-AzRoleAssignment -ObjectId $User.Id -RoleDefinitionId $RoleId -Scope $Scope

代わりにポータルを使用するには、「Azure ポータルを使用してAzureロールを割り当てる」を参照してください。

重要

  • ロールを割り当てるには、所有者、ロール ベースのAccess Control管理者、またはユーザー アクセス管理者ロール、またはターゲット スコープでMicrosoft.Authorization/roleAssignments/writeアクセス許可を持つカスタム ロールが必要です。
  • サブスクリプション、リソース グループ、またはリソース スコープでアクセス権を割り当てます。 要件を満たす最も狭いスコープを使用します。

ロール メンバーシップを特定する PowerShell クエリ

特定のロールに属するユーザーの一覧を生成すると便利です。 以下のサンプル クエリを必要に応じて調整し、そのような一覧の生成に役立ててください。

サブスクリプション全体の管理者ロールと共同作成者ロールを照会する

-IncludeClassicAdministrators パラメーターとクラシック ServiceAdministratorロールとCoAdministrator ロールは従来のロールです。 Azure 2024 年 8 月にクラシック管理者ロールが廃止されるため、このクエリでは従来の管理者エントリが返されないことがよくあります。 これらのロールを引き続き参照する環境の場合にのみ、ここに残ります。

(Get-AzRoleAssignment -IncludeClassicAdministrators | Where-Object {$_.RoleDefinitionName -in @('ServiceAdministrator', 'CoAdministrator', 'Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

所有者と共同作成者について特定の Application Insights リソースのコンテキスト内でクエリを実行する

$resourceGroup = "ResourceGroupName"
$resourceName = "AppInsightsName"
$resourceType = "microsoft.insights/components"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup -ResourceType $resourceType -ResourceName $resourceName | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

特定のリソース グループのコンテキストで、所有者と共同作成者を照会する

$resourceGroup = "ResourceGroupName"
(Get-AzRoleAssignment -ResourceGroup $resourceGroup | Where-Object {$_.RoleDefinitionName -in @('Owner', 'Contributor') } | Select -ExpandProperty SignInName | Sort-Object -Unique) -Join ", "

データ監視のセキュリティに関する考慮事項

Azure Monitor のデータ は、ストレージ アカウントで送信することも、イベント ハブにストリーミングすることもできます。どちらも汎用 Azure リソースです。 汎用のリソースであるため、それらの作成、削除、アクセスは管理者用に予約された特権操作です。 このデータには IP アドレスやユーザー名などの機密情報が含まれている可能性があるため、誤用を防ぐために、監視関連のリソースに次のプラクティスを使用します:

  • 1 つの専用ストレージ アカウントを使用して、データを監視します。 監視データを複数のストレージ アカウントに分割する必要がある場合、ストレージ アカウントは監視データにのみ使用する必要があります。 監視とその他の種類のデータ用のストレージ アカウントを共有すると、監視データのみにアクセスする必要がある組織に、誤って他のデータへのアクセス権を付与する可能性があります。 たとえば、セキュリティ情報とイベント管理に対応する Microsoft 以外の組織は、監視データへのアクセスのみを必要とします。
  • 前述の箇所で説明した同じ理由で、すべての診断設定にわたって 1 つの専用のサービス バスまたはイベント ハブ名前空間を使用します。
  • 監視関連のストレージ アカウントまたはイベント ハブを別のリソース グループに保持して、そのストレージ アカウントとイベント ハブへのアクセスを制限します。 監視ロールのスコープを使用して、そのリソース グループのみにアクセスを制限します。
  • ユーザーによるアクセス対象が監視データだけの場合、ListKeys アクセス許可は、サブスクリプション スコープでストレージ アカウントまたはイベント ハブに付与しないでください。 代わりに、このアクセス許可は、リソースまたはリソース グループ スコープ (専用監視リソース グループの場合) でユーザーに付与します。

ユーザーまたはアプリケーションがストレージ アカウント内の監視データにアクセスする必要がある場合は、BLOB ストレージへのサービス レベルの読み取り専用アクセス権を持つ監視データを含むストレージ アカウントに Shared Access Signature (SAS) を生成 します。 PowerShell では、アカウント SAS は次のコードのようになります。

$context = New-AzStorageContext -ConnectionString "[connection string for your monitoring Storage Account]"
$token = New-AzStorageAccountSASToken -ResourceType Service -Service Blob -Permission "rl" -Context $context

そのストレージ アカウントから読み取る必要があるエンティティにトークンを渡します。 エンティティは、そのストレージ アカウント内のすべての BLOB を一覧表示し、読み取ることができます。

または、Azure RBAC でこのアクセス許可を制御するには、そのエンティティに、その特定のストレージ アカウントに対するMicrosoft.Storage/storageAccounts/listkeys/actionアクセス許可を付与します。 このアクセス許可は、ストレージ アカウントにデータを送信するための診断設定を行う必要があるユーザーに必要です。 たとえば、1 つのストレージ アカウントからのみ読み取る必要があるユーザーまたはアプリケーションに対して、次のAzureカスタム ロールを作成します。

$role = Get-AzRoleDefinition "Reader"
$role.Id = $null
$role.Name = "Monitoring Storage Account Reader"
$role.Description = "Can get the storage account keys for a monitoring storage account."
$role.Actions.Clear()
$role.Actions.Add("Microsoft.Storage/storageAccounts/listkeys/action")
$role.Actions.Add("Microsoft.Storage/storageAccounts/Read")
$role.AssignableScopes.Clear()
$role.AssignableScopes.Add("/subscriptions/<SubscriptionId>/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/myMonitoringStorageAccount")
New-AzRoleDefinition -Role $role 

警告

ListKeys アクセス許可により、ユーザーがプライマリ ストレージ アカウントとセカンダリ ストレージ アカウントのキーの一覧を表示できます。 これらのキーは、そのストレージ アカウントのすべての署名済みサービス (BLOB、キュー、テーブル、ファイル) にわたる、すべての署名済みアクセス許可 (読み取り、書き込み、BLOB の作成、BLOB の削除など) を、ユーザーに付与します。 可能な場合は、アカウント SAS を使用することをお勧めします。

イベント ハブで同様のパターンに従いますが、最初にリッスン用の専用の承認規則を作成します。 監視関連のイベント ハブのみをリッスンする必要があるアプリケーションへのアクセスを許可するには、次の手順に従います。

  1. ポータルで、監視データのストリーミング用に作成されたイベント ハブに、リッスン権限のみを持つ共有アクセス ポリシーを作成します。 たとえば、これを "monitoringReadOnly" と呼ぶとします。可能な場合は、そのキーをコンシューマーに直接提供し、次の手順をスキップします。

  2. コンシューマーが必要に応じてキーを取得する必要がある場合は、そのイベント ハブの ListKeys アクションをユーザーに付与します。 この手順は、診断設定をイベント ハブにストリーミングするように設定する必要があるユーザーにも必要です。 たとえば、Azure RBAC ルールを作成する場合があります。

    $role = Get-AzRoleDefinition "Reader"
    $role.Id = $null
    $role.Name = "Monitoring Event Hub Listener"
    $role.Description = "Can get the key to listen to an event hub streaming monitoring data."
    $role.Actions.Clear()
    $role.Actions.Add("Microsoft.EventHub/namespaces/authorizationrules/listkeys/action")
    $role.Actions.Add("Microsoft.EventHub/namespaces/Read")
    $role.AssignableScopes.Clear()
    $role.AssignableScopes.Add("/subscriptions/<SubscriptionId>/resourceGroups/myResourceGroup/providers/Microsoft.EventHub/namespaces/myEventHubNamespace")
    New-AzRoleDefinition -Role $role 
    

次のステップ