【问题标题】:Azure Policy Definition Permission Error : AuthorizationFailedAzure 策略定义权限错误:授权失败
【发布时间】:2021-03-26 00:40:55
【问题描述】:

我正在使用 this azure template(azure 的官方 github 存储库)定义 自定义 azure 策略。 作为参数,我只是在参数中传递日志分析工作区名称。下面的 powershell 代码(取自 azure repo)用于此目的,我刚刚在第二个命令中添加了-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 

策略已正确创建。但是当我尝试创建 修复任务 时,任务失败并且我收到以下错误:

详情 代码授权失败 消息对象 id 为“xxxx-xxx-xxxx-xxxx-xxxx”的客户端“xxxx-xxx-xxxx-xxxx-xxxx”无权在范围内执行操作“Microsoft.Resources/deployments/validate/action”“/ subscriptions/xxxx-xxx-xxxx-xxxx-xxxx/resourcegroups/rg-test/providers/Microsoft.Resources/deployments/PolicyDeployment_17825756917269472742' 或范围无效。如果最近授予访问权限,请刷新您的凭据。

在门户网站上,我看到 政策定义 具有我定义的所有者权利。 但我也在政策补救页面上看到了这一点:

我不明白这个错误的原因。有人知道吗?

【问题讨论】:

  • 请问您是如何创建修复任务的?
  • 通过门户。

标签: azure azure-managed-identity azure-policy


【解决方案1】:

经测试,可能是您的帐号权限问题。我认为这与您的政策定义的角色没有任何关系。

显示相同错误消息的一种情况是使用错误的订阅或错误的资源组进行操作,但我认为选择错误的订阅或资源组的可能性非常低,因为您是在门户网站上进行的。

显示此错误消息的另一种情况是我在我身边测试的。我用一个帐户测试没有被分配一个具有足够权限的角色,它显示相同的错误消息。所以请检查您的帐户角色并分配更高权限的角色,然后创建补救任务。

【讨论】:

    【解决方案2】:

    我找到了解决办法。因此,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
    

    有一个已经打开的问题here。我已经从那里调整了解决方案。

    【讨论】:

      猜你喜欢
      • 2019-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      相关资源
      最近更新 更多