如何在命令行中为Azure Service Principal分配目录读写权限

57次阅读
没有评论

问题描述

正在尝试使用Terraform的AzureAD提供程序在Azure Active Directory中创建用户。在azuread_user文档的顶部,它指出:

注意:如果您使用服务主体进行身份验证,则必须具有对Windows Azure Active Directory API中的Directory.ReadWrite.All权限。

用户已经使用az命令行创建了Azure Active Directory用户,但是该用户没有Directory.ReadWrite.All权限,因为这将是一个相当疯狂的安全风险。用户想知道如何使用az命令行(优先)或Azure Powershell Cmdlets为服务主体添加Directory.*权限。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
用户需要使用az ad app permission命令来实现目录权限的添加。以下是一个完整的示例(假设使用PowerShell):

$apiId = "00000002-0000-0000-c000-000000000000" # Windows Azure Active Directory
$apiPermissionsId = "78c8a3c8-a07e-4b9e-af1b-b5ccab50a175" # Directory.ReadWrite.All
$spn = az ad sp create-for-rbac --role="Owner" --name blah | ConvertFrom-Json
az ad app permission add --id $spn.appId --api $apiId --api-permissions ("{0}=Scope" -f $apiPermissionsId)
az ad app permission grant --id $spn.appId --api $apiId
az ad app permission admin-consent --id $spn.appId

在上面的示例中,我们首先定义了$apiId$apiPermissionsId变量,分别表示Windows Azure Active Directory和Directory.ReadWrite.All的API ID。然后,我们使用az ad sp create-for-rbac命令创建了一个服务主体,并将其转换为JSON格式。接下来,我们使用az ad app permission add命令将目录权限添加到服务主体。然后,我们使用az ad app permission grant命令授予服务主体的权限。最后,我们使用az ad app permission admin-consent命令为服务主体授予管理员同意。

如果在特定应用程序/权限的魔术GUID上找不到文档,可以通过手动在门户中添加它们(Azure Active Directory ➔ 应用程序注册 ➔ 必需权限)然后读取JSON清单来查看所需的GUID,然后将其插入到自动化中。

请注意,上述解决方案中的GUID是示例值,您需要根据您的实际情况进行相应的更改。

希望这可以帮助到您!

正文完