AzureAD PowerShell New-AzureRmRoleAssignment 不断失败
AzureAD PowerShell New-AzureRmRoleAssignment keeps failing
我正在编写一个 powershell 脚本,它将创建一个资源组,将包含的应用程序(在本例中为 Web Api)注册到关联的 AAD。
但是,当调用尝试分配 Reader
权限时,它总是失败。
我从 Visual Studio (2015) 中 AzureResourceGroup 模板附带的基本部署*.ps1 文件开始。
我正在运行宁以下代码:
#Requires -Version 3.0
#Requires -Module AzureRM.Resources
#Requires -Module Azure.Storage
Import-Module Azure -ErrorAction SilentlyContinue
Set-StrictMode -Version 3
Login-AzureRmAccount
$tenantWebSite = New-AzureRmADApplication -DisplayName "TheSiteName" -HomePage "http://MySignOnUrl" -IdentifierUris "http://MyIdentifierUrl" -Password "MyClientSecret"
$tenantWebSiteServicePrincipal = New-AzureRmADServicePrincipal -ApplicationId $tenantWebSite.ApplicationId
New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $tenantWebSite.ApplicationId
最后一个命令 (New-AzureRmRoleAssignment
) 一直失败并出现以下错误:
09:58:26 - [ERROR] New-AzureRmRoleAssignment : PrincipalNotFound: Principal
09:58:26 - [ERROR] 50f3d430c68b485b8c11a63552171550 does not exist in the directory
09:58:26 - [ERROR] <MyTenantId>.
09:58:26 - [ERROR] At D:\dev_new_2010\cto\src\dev\d.tom.0\deploy\calidos.maat.deploy.azureresource
09:58:26 - [ERROR] group\Scripts\Deploy-AzureResourceGroup.ps1:115 char:1
09:58:26 - [ERROR] + New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipa ...
09:58:26 - [ERROR] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
09:58:26 - [ERROR] + CategoryInfo : CloseError: (:) [New-AzureRmRoleAssignment], Clo
09:58:26 - [ERROR] udException
09:58:26 - [ERROR] + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureRoleA
09:58:26 - [ERROR] ssignmentCommand
通常,我 运行 使用 visual studio 中的部署选项来执行此脚本。当我从 Microsoft Azure PowerShell
命令 window 运行 这个脚本时,我得到了同样的错误。
但是,当我 运行 在同一个 powershell window 中执行确切的命令时,它起作用了!
New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName <ApplicationId>
有人知道为什么在 ps1 文件中会失败吗?我也尝试过明确定义范围,但这也没有成功。
编辑:
好吧,之前的"solution"纯属运气……显然,New-AzureRmADServicePrincipal
是异步创建的。该方法立即 return 一个对象,但不会立即创建实际主体...
我通过添加 Start-Sleep -s 15
命令解决了这个问题。
如果这还不够,请增加它,或者捕获错误并再等几秒钟再重试。
我有同样的错误,但原因和解决方案不同。
这是我的代码:
New-AzureRmRoleAssignment -ObjectId $ServicePrincipal.ApplicationId -RoleDefinitionName $Role -Scope "/subscriptions/$($Subscription.Context.Subscription.Id)"
它总是失败并出现同样的错误:
New-AzureRmRoleAssignment : Principal 7dfxxxxxxxxxxxxx1b1 does not
exist in the directory 3141xxxxxxxxxxxxxx736.
等待没有帮助。
问题已通过使用 $ServicePrincipal.Id
而不是 $ServicePrincipal.ApplicationId
作为 -ObjectId
参数得到解决
https://docs.microsoft.com/en-us/powershell/module/azurerm.resources/new-azurermroleassignment?view=azurermps-5.5.0 处的示例 5 建议使用 $ServicePrincipal.ApplicationId
,这是不正确的。
我正在编写一个 powershell 脚本,它将创建一个资源组,将包含的应用程序(在本例中为 Web Api)注册到关联的 AAD。
但是,当调用尝试分配 Reader
权限时,它总是失败。
我从 Visual Studio (2015) 中 AzureResourceGroup 模板附带的基本部署*.ps1 文件开始。
我正在运行宁以下代码:
#Requires -Version 3.0
#Requires -Module AzureRM.Resources
#Requires -Module Azure.Storage
Import-Module Azure -ErrorAction SilentlyContinue
Set-StrictMode -Version 3
Login-AzureRmAccount
$tenantWebSite = New-AzureRmADApplication -DisplayName "TheSiteName" -HomePage "http://MySignOnUrl" -IdentifierUris "http://MyIdentifierUrl" -Password "MyClientSecret"
$tenantWebSiteServicePrincipal = New-AzureRmADServicePrincipal -ApplicationId $tenantWebSite.ApplicationId
New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $tenantWebSite.ApplicationId
最后一个命令 (New-AzureRmRoleAssignment
) 一直失败并出现以下错误:
09:58:26 - [ERROR] New-AzureRmRoleAssignment : PrincipalNotFound: Principal
09:58:26 - [ERROR] 50f3d430c68b485b8c11a63552171550 does not exist in the directory
09:58:26 - [ERROR] <MyTenantId>.
09:58:26 - [ERROR] At D:\dev_new_2010\cto\src\dev\d.tom.0\deploy\calidos.maat.deploy.azureresource
09:58:26 - [ERROR] group\Scripts\Deploy-AzureResourceGroup.ps1:115 char:1
09:58:26 - [ERROR] + New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipa ...
09:58:26 - [ERROR] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
09:58:26 - [ERROR] + CategoryInfo : CloseError: (:) [New-AzureRmRoleAssignment], Clo
09:58:26 - [ERROR] udException
09:58:26 - [ERROR] + FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureRoleA
09:58:26 - [ERROR] ssignmentCommand
通常,我 运行 使用 visual studio 中的部署选项来执行此脚本。当我从 Microsoft Azure PowerShell
命令 window 运行 这个脚本时,我得到了同样的错误。
但是,当我 运行 在同一个 powershell window 中执行确切的命令时,它起作用了!
New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName <ApplicationId>
有人知道为什么在 ps1 文件中会失败吗?我也尝试过明确定义范围,但这也没有成功。
编辑:
好吧,之前的"solution"纯属运气……显然,New-AzureRmADServicePrincipal
是异步创建的。该方法立即 return 一个对象,但不会立即创建实际主体...
我通过添加 Start-Sleep -s 15
命令解决了这个问题。
如果这还不够,请增加它,或者捕获错误并再等几秒钟再重试。
我有同样的错误,但原因和解决方案不同。 这是我的代码:
New-AzureRmRoleAssignment -ObjectId $ServicePrincipal.ApplicationId -RoleDefinitionName $Role -Scope "/subscriptions/$($Subscription.Context.Subscription.Id)"
它总是失败并出现同样的错误:
New-AzureRmRoleAssignment : Principal 7dfxxxxxxxxxxxxx1b1 does not exist in the directory 3141xxxxxxxxxxxxxx736.
等待没有帮助。
问题已通过使用 $ServicePrincipal.Id
而不是 $ServicePrincipal.ApplicationId
作为 -ObjectId
参数得到解决
https://docs.microsoft.com/en-us/powershell/module/azurerm.resources/new-azurermroleassignment?view=azurermps-5.5.0 处的示例 5 建议使用 $ServicePrincipal.ApplicationId
,这是不正确的。