【问题标题】:Error while creating new role assignment in Azure在 Azure 中创建新角色分配时出错
【发布时间】:2017-09-23 02:38:11
【问题描述】:

对于给定的 Azure 订阅,我想将自定义角色分配给服务主体。为了实现这一点,我首先检查订阅中是否存在自定义角色定义。如果角色不存在,我会更新角色定义的可分配范围以包含此订阅。当我尝试分配角色时,我间歇性地面临“RoleDefinitionDoesNotExist”错误。我该如何解决这个问题?

我的代码:

$roleDef = Get-AzureRmRoleDefinition -Name $azureRmRole
if($roleDef -eq $null)
{
    Select-AzureRmSubscription -SubscriptionName $prodSubscription
    #Role definition exists in $prodSubscription
    $newRole = Get-AzureRmRoleDefinition -Name $azureRmRole
    #$scope = '/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx'
    $newRole.AssignableScopes.Add($scope)
    $def = Set-AzureRmRoleDefinition -Role $newRole
    # I have verified that role definition is updated
}

Select-AzureRmSubscription -SubscriptionName $SubscriptionName
New-AzureRmRoleAssignment -RoleDefinitionName $azureRmRole -ObjectId $SPNid -Scope $scope

错误:

New-AzureRmRoleAssignment:ID 为“xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx”的指定角色定义不存在。 在 C:\Untitled1.ps1:71 char:1 + 新 AzureRmRoleAssignment -RoleDefinitionName $azureRmRole -ObjectId ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [New-AzureRmRoleAssignment], CloudException + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureRoleAssignmentCommand

【问题讨论】:

  • 嗨,你能在 Azure 门户上找到你的自定义角色吗?您可以使用New-AzureRmRoleDefinition 创建自定义角色。
  • @Walter-MSFT 是的,我可以在 Azure 门户上找到自定义角色。
  • $azureRmRole 值是您的自定义名称。在我的例子中,名字是Virtual Machine Power Manager,你确定它存在吗?
  • 奇怪的是,即使我得到了这个例外。我可以看到在 Azure 门户上完成的角色分配。
  • 为了测试,您能否在 Portal 上为您的服务主体分配角色?我可以在我的实验室进行测试。

标签: azure azure-powershell azure-resource-manager


【解决方案1】:

您应该像下面这样定义您的自定义角色:

{
  "Name": "Virtual Machine Power Manager",
  "IsCustom": true,
  "Description": "Can monitor, stop, start and restart v2 ARM virtual machines.",
  "Actions": [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/powerOff/action",    
    "Microsoft.Compute/virtualMachines/deallocate/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Insights/diagnosticSettings/*",
    "Microsoft.Support/*"
  ],
  "NotActions": [

  ],
  "AssignableScopes": [
    "/subscriptions/c25b1c8e-xxxx-1111-abcd-1a12d7012123"
  ]
}

根据你的描述,你的角色定义可能有误,你最好检查一下。

如果您想为服务主体赋予自定义角色,请尝试使用以下 cmdlet。

New-AzureRmRoleAssignment -ServicePrincipalName "https://shuiweb.azurewebsites.net" `
                          -RoleDefinitionName 'Virtual Machine Power Manager' `
                          -Scope '/subscriptions/*******'

blog:AZURE AUTOMATION RUNBOOKS WITH AZURE AD SERVICE PRINCIPALS AND CUSTOM RBAC ROLES 会很有帮助。

【讨论】:

    猜你喜欢
    • 2023-01-21
    • 2023-01-13
    • 2017-05-15
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    相关资源
    最近更新 更多