0

Azure リソースと付随する ServicePrincipal の作成を自動化する PowerShell デプロイ スクリプトを作成しています。

私が使用しているコードは次のとおりです。これは、最新の Azure 1.0.4 SDK モジュールを使用して PowerShell から直接実行した場合にテストされ、機能します。

$ResourceGroupName = "my-resource-group"
$ADAppIdentifierUri = [string]::Concat("https://", $ResourceGroupName, ".azurewebsites.net")

# Generate a password for the AD application
$ServicePrincipalPassword = [Guid]::NewGuid().ToString().Replace("-", "")

# Create the Azure AD Application and service principal, and only assign access to our resource group
$AzureADApplication = New-AzureRmADApplication -DisplayName $ResourceGroupName -HomePage $ADAppIdentifierUri -IdentifierUris $ADAppIdentifierUri -Password $ServicePrincipalPassword

Visual Studio で ResourceGroup プロジェクト デプロイ スクリプトを使用してこのコードを実行すると、次のエラーが発生します。

New-AzureRmADApplication : タイプ 'Microsoft.Azure.TokenCloudCredentials' のオブジェクトをタイプ 'Microsoft.Azure.Common.Authentication.AccessTokenCredential' にキャストできません。

スタック トレースによると、コマンド New-AzureRmADApplication の開始時に例外が発生したため、残念ながら Azure SDK コードの内部で例外が発生しています。

次のファイルで SDK のソース コードを参照しましたが、洞察が見つかりませんでした。

https://github.com/Azure/azure-powershell/blob/f803b991daa7eeeea1217238ab071c8d83de34be/src/ResourceManager/Resources/Commands.Resources/ActiveDirectory/NewAzureADApplicationCommand.cs

https://github.com/Azure/azure-powershell/blob/956d0ca795acfce67d8f142bf059ab2b8ab2c67b/src/ResourceManager/Resources/Commands.Resources/Models.ActiveDirectory/ActiveDirectoryClient.cs

https://www.symbolsource.org/Public/Metadata/NuGet/Project/Microsoft.Azure.Graph.RBAC/1.6.0-preview/Release/.NETFramework,Version%3Dv4.0/Microsoft.Azure.Graph.RBAC /Microsoft.Azure.Graph.RBAC/Generated/GraphRbacManagementClient.cs?ImageName=Microsoft.Azure.Graph.RBAC

このリンクで同じエラーが発生した人を 1 人だけ見つけることができます: https://azure.microsoft.com/en-us/documentation/articles/resource-group-authenticate-service-principal/

ただし、認証に管理証明書を使用しておらず、manage.windowsazure.com サイトにリストされている管理証明書がないため、このソリューションは私には意味がありません。

4

1 に答える 1

2

これは、AzureRMAD* コマンドレットでトークン ベースの認証を使用する場合の問題 (バグ) です。VS からスクリプトを実行すると、VS は VS サインインから取得したトークンを使用して、認証のプロンプトを回避します。これを回避するには、資格情報を使用して VS の外部で実行する必要があります。

これを追跡する内部作業項目がありますが、進行状況を監視したい場合は、https ://github.com/Azure/azure-powershell/issues/ で問題を報告できます。

于 2016-03-17T18:19:28.793 に答える