New-AzureResourceGroup 在 VSO 构建代理中未经授权
New-AzureResourceGroup unauthorized in VSO build agent
我在 Azure 的 VM 上设置了一个构建代理,linked 到我们的 Visual Studio 在线。
然后我有一个 Azure Powershell 构建步骤,运行是一个尝试执行 New-AzureResourceGroup 的脚本。
结果如下:
新 AzureResourceGroup:未经授权
113 ##[error]At C:\BuildAgents\agent\_work\[...]\Deploy-AzureResourceGroup.ps1:47 char:1
114 ##[error]+ New-AzureResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation ...
115 ##[error]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116 ##[error]+ CategoryInfo : CloseError: (:) [New-AzureResourceGroup], CloudException
117 ##[error]+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupCommand
我可以 运行 在本地毫无问题地运行这些脚本。
我试过在脚本中导入发布设置文件,但似乎不允许通过这种方式验证 New-AzureResourceGroup。
我运行 构建代理作为本地用户帐户下的服务(不是网络服务)。
有谁知道如何让构建代理执行 New-AzureResourceGroup?
我希望能够进行完整的持续部署,包括设置和管理 Azure 中所需的一切,包括资源组。
更新
根据以下文章:
"If you connect using this method [publish settings file], you can only use the Azure Service Management (or the ASM mode) commands."
https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-connect/
我假设这也适用于 Azure powershell。
那么,如果不使用基于帐户的身份验证,真的没有办法在 Azure 中管理资源吗?
更新
感谢@bmoore-msft 提供缺失的部分。我将添加另一个 link 的屏幕截图,我需要在实际帐户下找到将构建设置为 运行。
在 Azure 资源管理器中,您必须使用 Azure Active Directory 身份验证,而不是证书。所以这适用于 cli、PowerShell、REST API 等。
在 VSO 中有一个 Azure PowerShell 的构建任务。当您使用该任务时,您指定一个 "connection" 或订阅来执行该任务...所以您将信用保存在 VSO 中。您可以使用常规的 PowerShell 任务,但是您必须自己保护信用。
最后,当您在 VSO 中设置帐户连接时,它必须是一个 orgID,不支持 MSA(PowerShell 限制)。 Service Principal 支持即将到来。
我在将 Azure 资源管理器与 VSO 一起使用时也遇到了很多麻烦。
通过创建一个在 Azure 订阅上具有足够权限以从 Visual Studio 在线部署的服务主体帐户,我终于找到了解决我的问题的有效方法。
我使用 David Ebbo 的博客 post 创建了服务主体帐户:http://blog.davidebbo.com/2014/12/azure-service-principal.html
在 VSO 中,我删除了 "Azure PowerShell" 步骤并将其替换为 "PowerShell" 步骤。在 PowerShell 脚本中,我首先登录服务主体帐户,然后使用 Azure 资源管理器部署我的应用程序。
可以在 MSDN 论坛上找到有关我发现的更多详细信息:https://social.msdn.microsoft.com/Forums/azure/en-US/d5a940e0-ed83-46ff-9efc-045fb9522c5b/ad-auth-from-azure-powershell-in-vso-fails-with-accessingwsmetadataexchangefailed?forum=azurescripting
我在 Azure 的 VM 上设置了一个构建代理,linked 到我们的 Visual Studio 在线。
然后我有一个 Azure Powershell 构建步骤,运行是一个尝试执行 New-AzureResourceGroup 的脚本。
结果如下:
新 AzureResourceGroup:未经授权
113 ##[error]At C:\BuildAgents\agent\_work\[...]\Deploy-AzureResourceGroup.ps1:47 char:1
114 ##[error]+ New-AzureResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation ...
115 ##[error]+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116 ##[error]+ CategoryInfo : CloseError: (:) [New-AzureResourceGroup], CloudException
117 ##[error]+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureResourceGroupCommand
我可以 运行 在本地毫无问题地运行这些脚本。
我试过在脚本中导入发布设置文件,但似乎不允许通过这种方式验证 New-AzureResourceGroup。
我运行 构建代理作为本地用户帐户下的服务(不是网络服务)。
有谁知道如何让构建代理执行 New-AzureResourceGroup?
我希望能够进行完整的持续部署,包括设置和管理 Azure 中所需的一切,包括资源组。
更新
根据以下文章:
"If you connect using this method [publish settings file], you can only use the Azure Service Management (or the ASM mode) commands."
https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-connect/
我假设这也适用于 Azure powershell。
那么,如果不使用基于帐户的身份验证,真的没有办法在 Azure 中管理资源吗?
更新
感谢@bmoore-msft 提供缺失的部分。我将添加另一个 link 的屏幕截图,我需要在实际帐户下找到将构建设置为 运行。
在 Azure 资源管理器中,您必须使用 Azure Active Directory 身份验证,而不是证书。所以这适用于 cli、PowerShell、REST API 等。
在 VSO 中有一个 Azure PowerShell 的构建任务。当您使用该任务时,您指定一个 "connection" 或订阅来执行该任务...所以您将信用保存在 VSO 中。您可以使用常规的 PowerShell 任务,但是您必须自己保护信用。
最后,当您在 VSO 中设置帐户连接时,它必须是一个 orgID,不支持 MSA(PowerShell 限制)。 Service Principal 支持即将到来。
我在将 Azure 资源管理器与 VSO 一起使用时也遇到了很多麻烦。 通过创建一个在 Azure 订阅上具有足够权限以从 Visual Studio 在线部署的服务主体帐户,我终于找到了解决我的问题的有效方法。
我使用 David Ebbo 的博客 post 创建了服务主体帐户:http://blog.davidebbo.com/2014/12/azure-service-principal.html
在 VSO 中,我删除了 "Azure PowerShell" 步骤并将其替换为 "PowerShell" 步骤。在 PowerShell 脚本中,我首先登录服务主体帐户,然后使用 Azure 资源管理器部署我的应用程序。
可以在 MSDN 论坛上找到有关我发现的更多详细信息:https://social.msdn.microsoft.com/Forums/azure/en-US/d5a940e0-ed83-46ff-9efc-045fb9522c5b/ad-auth-from-azure-powershell-in-vso-fails-with-accessingwsmetadataexchangefailed?forum=azurescripting