у нас есть мультитенантное приложение, которое мы развертываем в средах наших клиентов. В рамках нашего программного решения мы будем собирать различные данные из вашей среды с помощью командлетов 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'
Чтобы прочитать настройки диагностики именно в 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