Ошибка разрешения определения политики Azure: AuthorizationFailed

Я определяю настраиваемую политику Azure с помощью этот шаблон Azure (официальное репозиторий Azure на github). В качестве параметра я просто передаю имя рабочей области аналитики журнала в параметре. Для этой цели используется приведенный ниже код PowerShell (взятый из репозитория Azure), я только что добавил -AssignIdentity ко второй команде, если это необходимо. В качестве определения роли я даю права владельцу подписки внутри шаблона.

$definition = New-AzPolicyDefinition -Name "deploy-oms-vm-extension-windows-vm" -DisplayName "Deploy default Log Analytics VM Extension for Windows VMs." -description "This policy deploys the Log Analytics VM Extensions on Windows VMs, and connects to the selected Log Analytics workspace." -Policy 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/Compute/deploy-oms-vm-extension-windows-vm/azurepolicy.rules.json' -Parameter 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/Compute/deploy-oms-vm-extension-windows-vm/azurepolicy.parameters.json' -Mode Indexed 
$definition
$assignment = New-AzPolicyAssignment -Name <assignmentname> -Scope <scope> -logAnalytics <logAnalytics> -PolicyDefinition $definition -AssignIdentity
$assignment 

Политика создана правильно. Но когда я пытаюсь создать задачу исправления, задача не выполняется, и я получаю следующую ошибку:

Подробности Сообщение об ошибке авторизации кода Клиент «xxxx-xxx-xxxx-xxxx-xxxx» с идентификатором объекта «xxxx-xxx-xxxx-xxxx-xxxx» не имеет авторизации для выполнения действия «Microsoft.Resources / deployments / validate / action» сверх scope '/subscriptions/xxxx-xxx-xxxx-xxxx-xxxx/resourcegroups/rg-test/providers/Microsoft.Resources/deployments/PolicyDeployment_17825756917269472742' или область недопустима. Если доступ был предоставлен недавно, обновите свои учетные данные.

На портале я вижу, что определение политики имеет права владельца, как я определил. введите здесь описание изображения Но я также вижу это на странице исправления политики:  введите описание изображения здесь

Я не понимаю причину этой ошибки. Есть у кого-нибудь идеи?


person MoonHorse    schedule 15.12.2020    source источник
comment
Могу я узнать, как вы создали задачу по исправлению положения?   -  person Hury Shen    schedule 16.12.2020
comment
Через портал.   -  person MoonHorse    schedule 16.12.2020


Ответы (2)


Согласно некоторым тестам, это может быть вызвано разрешением вашей учетной записи. Я не думаю, что это имеет какое-либо отношение к роли вашего определения политики.

Одно и то же сообщение об ошибке появляется в одном случае - это выполнить операцию с неправильной подпиской или неправильной группой ресурсов, но я думаю, что очень мала вероятность выбрать неправильную подписку или группу ресурсов, потому что вы делаете это на портале.

Другой случай появления этого сообщения об ошибке - это то, что я тестирую на своей стороне. Я тестирую с одной учетной записью, которой не назначена роль, у которой достаточно прав, отображается такое же сообщение об ошибке. Поэтому, пожалуйста, проверьте роль своей учетной записи и назначьте роль с более высоким разрешением, а затем создайте задачу исправления.

person Hury Shen    schedule 17.12.2020

Я нашел решение. Таким образом, управляемое удостоверение, созданное во время выполнения команды New-AzPolicyAssignment, не создается с правильным разрешением. Обходное решение выглядит так:

$definition = New-AzPolicyDefinition -Name "deploy-oms-vm-extension-windows-vm" -DisplayName "Deploy default Log Analytics VM Extension for Windows VMs." -description "This policy deploys the Log Analytics VM Extensions on Windows VMs, and connects to the selected Log Analytics workspace." -Policy 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/Compute/deploy-oms-vm-extension-windows-vm/azurepolicy.rules.json' -Parameter 'https://raw.githubusercontent.com/Azure/azure-policy/master/samples/Compute/deploy-oms-vm-extension-windows-vm/azurepolicy.parameters.json' -Mode Indexed 
$assignment = New-AzPolicyAssignment -Name <assignmentname> -Scope <scope> -logAnalytics <logAnalytics> -PolicyDefinition $definition -AssignIdentity

## Get newly created policy assignment object
$PolicyAssignment = Get-AzPolicyAssignment -Name $assignmentname -Scope $scope

## Extract the RoleID and ObjectID
$roleDefinitionId = [GUID]($definition.properties.policyRule.then.details.roleDefinitionIds -split "/")[4]
$objectID = [GUID]($PolicyAssignment.Identity.principalId)

## Create a role assignment from the previous information
New-AzRoleAssignment -Scope $scope -ObjectId $objectID -RoleDefinitionId $roleDefinitionId

здесь уже существует. Я адаптировал решение оттуда.

person MoonHorse    schedule 17.12.2020