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

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

組み込みの監視の役割

Azure ロールベースのアクセス制御 (Azure RBAC) には、ユーザー、グループ、サービス プリンシパル、マネージド ID に割り当てることができる監視用の組み込みロールが用意されています。 最も一般的なロールは "監視閲覧者" と "監視共同作成者" であり、それぞれ読み取りと書き込みのアクセス許可に対応しています。

監視ロールの詳細については、RBAC の監視ロールに関する記事を参照してください。

Monitoring Reader

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

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

Note

この役割では、イベント ハブにストリーミングされたログ データ、またはストレージ アカウントに保存されたログ データへの読み取りアクセス権は付与されません。 これらのリソースへのアクセスを構成する方法については、この記事の後半の「データ監視のセキュリティに関する考慮事項」セクションを参照してください。

Monitoring Contributor

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

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

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

1 診断設定を作成または編集するには、ターゲット リソース (ストレージ アカウントまたはイベント ハブ名前空間) で、ListKeys アクセス許可がユーザーに対して個別に付与されている必要があります。

Note

この役割では、イベント ハブにストリーミングされたログ データ、またはストレージ アカウントに保存されたログ データへの読み取りアクセス権は付与されません。 これらのリソースへのアクセスを構成する方法については、この記事の後半の「データ監視のセキュリティに関する考慮事項」セクションを参照してください。

アクセス許可と 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/mySubscription")
New-AzRoleDefinition -Role $role 

Note

リソースのアラート、診断設定、およびメトリックにアクセスするユーザーには、そのリソースの種類とスコープへの読み取りアクセスが必要です。 ストレージ アカウントにデータを送信する、またはイベント ハブにストリーミングする診断設定を作成する には、ターゲット リソースにおける ListKeys アクセス許可も必要です。

ロールの割り当て

注意

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

ロールを割り当てる方法については、「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 portal を使って Azure ロールを割り当てることもできます。

重要

  • 指定したスコープ内でロールを割り当てるために必要なアクセス許可を持っていることを確認します。 サブスクリプションまたはリソース グループの "所有者" 権限が必要です。
  • リソース自体ではなく、リソースが属するリソース グループまたはサブスクリプションでアクセスを割り当てます。

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

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

管理者ロール + 共同作成者ロールについてサブスクリプション全体にクエリを実行する

(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 ", "

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

$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 Storage へのサービス レベルの読み取り専用アクセスが付与されている、監視データが含まれるストレージ アカウントで、共有アクセス署名 (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/mySubscription/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/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.ServiceBus/namespaces/mySBNameSpace")
    New-AzRoleDefinition -Role $role 
    

次のステップ