0

我有一个 Powershell 脚本,用于设置 Azure Web 应用程序、数据库等,但在运行脚本之前,我必须执行以下操作:

PS C:/> Login-AzureRmAccount

这会弹出一个 GUI,我必须在其中手动添加我的用户、密码和我的 2 因素身份验证代码。我最终想将该脚本用作构建/部署自动化脚本的一部分。

我从几篇关于使用“服务主体”的文章中收集到以下内容。

首先我这样做:

PS C:\> Add-AzureRmAccount

在这个调用中,我必须输入我的用户、密码和验证码

之后我必须执行以下操作(即使我不完全理解)。

$app = New-AzureRmADApplication -DisplayName "GGReal" -HomePage    "https://www.example.org/ggreal" -IdentifierUris     "https://www.example.org/ggreal" -Password "mysecretpass"

New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId

这似乎有效:

然后我试试这个,它失败了。

New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipalName $app.ApplicationId

我收到以下错误:

New-AzureRmRoleAssignment : AuthorizationFailed: The client jay@myemail.com' with object id '8ee9a6ec-yyyy-xxxx-xxxx-4ac0883f2a12' does not have authorization to perform action 'Microsoft.Authorization/roleAssignments/write' over scope '/subscriptions/5ba06de5-xxxx-zzzz-yyyy-27f7d2c8bba6'.
At line:1 char:1
+ New-AzureRmRoleAssignment -RoleDefinitionName Reader -ServicePrincipa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : CloseError: (:) [New-AzureRmRoleAssignment], CloudException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureRoleAssignmentCommand

我必须做什么才能在没有人工干预的情况下启用脚本授权?

4

2 回答 2

1

根据异常,它表明您对此没有足够的权限。我们可以在文档之后检查活动目录的权限。我们的帐户需要有权Microsoft.Authorization/*/Write 将 AD 应用分配给角色。这意味着我们的帐户应分配给 所有者角色或 用户访问管理员 角色。如果没有,请让您的订阅管理员将您添加到用户访问管理员角色。如何添加或更改 Azure 管理员角色请参考文档

之后,请尝试使用以下代码自动登录 Azure Powershell 脚本。

$azureAplicationId ="Azure AD Application Id"
$azureTenantId= "Your Tenant Id"
$azurePassword = ConvertTo-SecureString "strong password" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($azureAplicationId , $azurePassword)
Add-AzureRmAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal 

在此处输入图像描述

我还找到了一些有关创建身份验证和内置角色的相关文档:
https ://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal
https:// docs.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles#roles-in-azurel

于 2016-12-19T05:38:01.867 回答
0

好吧,您无权将该角色分配给该服务主体,您需要适当的权限。那些将是:Microsoft.Authorization/roleAssignments/write和范围/subscriptions/5ba06de5-xxxx-zzzz-yyyy-27f7d2c8bba6

您可以创建一个新的自定义角色并将其分配给您的帐户,或者将诸如订阅管理员之类的东西(不确定它是否是最不可能的方法,但您可以稍后将其收回)分配给您的帐户。

于 2016-12-16T19:09:10.050 回答