9

私は、リソース グループを作成し、含まれているアプリケーション (この例では Web Api) を関連する AAD に登録する powershell スクリプトに取り組んでいます。しかし、Reader権利を割り当てようとして呼び出すと、失敗し続けます。

Visual Studio (2015) の AzureResourceGroup テンプレートに付属する基本的な deploy*.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 の deploy オプションを使用して実行します。Microsoft Azure PowerShellコマンド ウィンドウからこのスクリプトを実行すると、同じエラーが発生します。

しかし、同じPowerShellウィンドウで正確なコマンドを実行すると、機能します!

New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName <ApplicationId>

これが ps1 ファイル内から失敗する理由について誰か考えがありますか? また、スコープを明示的に定義しようとしましたが、それもうまくいきませんでした。

4

2 に答える 2

8

編集:

わかりました、以前の「解決策」は純粋な運でした...明らかに、New-AzureRmADServicePrincipalは非同期で作成されます。そのメソッドはすぐにオブジェクトを返しますが、実際のプリンシパルはすぐには作成されません...

Start-Sleep -s 15コマンドを追加することでこれを回避しました。

これで十分でない場合は、値を増やすか、エラーをキャッチして数秒待ってから再試行してください。

于 2016-03-09T11:37:19.200 に答える
2

同じエラーが発生しましたが、ルートの原因と解決策が異なりました。これは私のコードでした:

New-AzureRmRoleAssignment -ObjectId $ServicePrincipal.ApplicationId -RoleDefinitionName $Role -Scope "/subscriptions/$($Subscription.Context.Subscription.Id)"

そして、常に同じエラーで失敗しました:

New-AzureRmRoleAssignment : プリンシパル 7dfxxxxxxxxxxxxx1b1 がディレクトリ 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が提案されていますが、これは正しくありません。

于 2018-03-16T14:36:42.403 に答える