Чтение настроек диагностики Azure Entra ID

у нас есть мультитенантное приложение, которое мы развертываем в средах наших клиентов. В рамках нашего программного решения мы будем собирать различные данные из вашей среды с помощью командлетов Microsoft Graph и Azure PowerShell.

Мы пытаемся прочитать настройки диагностики в Entra ID, что работает, запустив приведенный ниже код:

$accessToken = (Get-AzAccessToken -ResourceUrl "https://management.azure.com").Token
$apiEndpoint = "https://management.azure.com/providers/microsoft.aadiam/diagnosticSettings?api-version=2017-04-01-preview"

$headers = @{
    "Authorization" = "Bearer $accessToken"
    "Content-Type" = "application/json"
}

$response = Invoke-RestMethod -Uri $apiEndpoint -Headers $headers -Method Get

В настоящее время мы развертываем наше мультитенантное приложение в средах наших клиентов, используя шаблон ARM для назначения необходимых разрешений. Однако мы сталкиваемся с проблемами при успешном добавлении разрешений, необходимых для чтения настроек диагностики. Если мы запустим его без каких-либо изменений, мы получим ошибку:

"message": "The client 'blabla' with object id 'blabla' does not have authorization to perform action 'microsoft.aadiam/diagnosticSettings/write' over scope '/providers/microsoft.aadiam/diagnosticSettings/testDiagSetting' or the scope is invalid. If access was recently granted, please refresh your credentials."

Когда мы вручную запускаем команду ниже, она работает. Однако мы не хотели бы просить ИТ-администраторов запускать эту команду вручную. Есть ли способ назначить эти разрешения через шаблон ARM? В качестве альтернативы, можем ли мы использовать API Graph, чтобы назначить область действия приложению и запросить у клиента согласие на это?

New-AzRoleAssignment -ObjectId "e348be5c-fc9b-4852-8e04-540093bd461b" -Scope "/providers/Microsoft.aadiam" -RoleDefinitionName 'Contributor' -ObjectType 'ServicePrincipal'
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы прочитать настройки диагностики именно в Entra ID, вам необходимо назначить разрешения на уровне клиента. Вы можете автоматизировать назначение разрешений на чтение настроек диагностики в Entra ID с помощью Microsoft.Authorization/roleAssignments. Создайте RoleAssignmentTemplate.json, чтобы назначить необходимую роль.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "The principal (user or application) ID to assign the role to."
      }
    },
    "roleDefinitionId": {
      "type": "string",
      "defaultValue": "b24988ac-6180-42a0-ab88-20f7382dd24c",
      "metadata": {
        "description": "The role definition ID for the role to assign."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/roleAssignments",
      "apiVersion": "2020-04-01-preview",
      "name": "[guid(parameters('principalId'), parameters('roleDefinitionId'))]",
      "properties": {
        "roleDefinitionId": "[tenantResourceId('Microsoft.Authorization/roleDefinitions', parameters('roleDefinitionId'))]",
        "principalId": "[parameters('principalId')]",
        "scope": "/providers/Microsoft.aadiam"
      }
    }
  ]
}

Развертывание шаблона ARM

RESOURCE_GROUP_NAME = "YourResourceGroupName"
TEMPLATE_FILE_PATH = "path/to/your/template.json"
PRINCIPAL_ID = "your-principal-id"

az deployment group create --resource-group $RESOURCE_GROUP_NAME --template-file $TEMPLATE_FILE_PATH --parameters principalId=$PRINCIPAL_ID

Другие вопросы по теме

Похожие вопросы

Конечная точка диспетчера трафика Azure: следующие местоположения, указанные в свойстве geoMapping для конечной точки, не поддерживаются
Измените конфигурацию для регистрации приложения, чем для корпоративного приложения
Новая сетевая карта с общедоступным IP-адресом не имеет подключения к Интернету, а существующая сетевая карта работает нормально
Как скопировать все контейнеры без явного упоминания в массиве между двумя разными учетными записями хранения
Предоставление доступа субъекту службы управляемой идентификации — Microsoft Graph PowerShell
Репликация базы данных SQL Azure и хранилища BLOB-объектов в конфигурации с несколькими регионами
Application Insights иногда не отображает запрос из вызова SQL
Скрипт Powershell работает в ISE, но не работает в Azure Runbook
Как создать переменную инициализации приложения логики Azure после действия анализа json
Data Factory Parquet неправильно принимает десятичные дроби