如何使用powershell将AD组分配给Azure中的应用程序角色?

时间:2016-10-31 20:12:35

标签: powershell azure-active-directory azure-ad-graph-api

我的客户端有AzureAD Premium,因此我们可以将组分配给角色 我们可以编写新组的脚本(在其内部AD中),并将用户添加到这些组,并将组同步到AAD
我们可以对清单文件的脚本进行操作 但我没有解决的是如何自动执行“将组分配给App角色”。有人必须进入Azure门户>目录>应用程序>我们的应用>用户和群组>找到要分配的组>分配>找到匹配的角色......(冲洗并重复)。

该应用程序本质上是sharepoint(Azure外部 - 我们只是将本地AD联合到AAD以便A& A到应用程序),并且这些组匹配限制访问各种库的角色。不幸的是,我的客户的商业模式非常多样化,这意味着我们有很多小组可以映射到很多角色。

PowerShell是我们选择的脚本管理语言。

我在Get-AzureAdGroup -SearchString "groupname"取得了一些进展,它给了我objectId。我可以将其传递给Get-AzureAdGroupAppRoleAssignment,这使我id与清单文件中的GUID相匹配。所以这一切都链接在一起,除了实际将小组分配给一个角色。

所以,接下来我开始根据this blog查看GraphAPI。 (该博客是关于在没有AAD Premium时将用户批量添加到单个特定角色的全部内容)。

我已经设法通过GET https://graph.windows.net/[tenant].onmicrosoft.com/servicePrincipals/[app id]/appRoleAssignments?api-version=1.6取得了一些成功,但我的一些测试组,即使它们在Azure门户中显示为已分配,也不会显示在对上述REST的响应中查询。有些人这样做,当我通过门户取消分配它们时,它们也会从响应中删除。缺乏一致性并不能让我对我的查询充满信心。

  • 是否有用于AppRoleAssignments的native PowerShell cmdlet? (这将是我对GraphAPI的偏好)。
  • 为什么GraphAPI的结果不一致?

    提前感谢任何指针

更新
我正在调查*-AzureAd* cmdlet(来自AzureADPreview模块),但Microsoft Documentation有点亮 - 它只是预览,但我认为它们可以提供比以下更好的文档:

  

输入
  输入类型是可以管道到cmdlet的对象的类型。

     

输出
  输出类型是cmdlet发出的对象的类型。

这些cmdlet 似乎结束了GraphAPI REST调用。

更新2
AzureADPreview cmdlet是正确的解决方案。

Connect-AzureAD -TenantId xxxxx-xxxx-xxxx-etc
$app = Get-AzureADServicePrincipal -SearchString "display name of app"

foreach ($AD_group_name in $list_of_names_to_map) {
$AADGroup = Get-AzureADGroup -SearchString $AD_group_name
$AppRole = $App.AppRoles | ?{$_.value -like $AADGroup.DisplayName}

$NewAssignmentParams = @{
'id'          = $AppRole.Id;
'objectid'    = $AADGroup.ObjectId;
'PrincipalId' = $AADGroup.ObjectId;
'ResourceId'  = $App.ObjectId;
}

New-AzureADGroupAppRoleAssignment @NewAssignmentParams

}

2 个答案:

答案 0 :(得分:1)

我在 Update 2 中描述的模块和cmdlet是正确的解决方案。

$NewAssignmentParams = @{
'id'          = $AppRole.Id;
'objectid'    = $AADGroup.ObjectId;
'PrincipalId' = $AADGroup.ObjectId;
'ResourceId'  = $App.ObjectId;
}

New-AzureADGroupAppRoleAssignment @NewAssignmentParams

其中
id可以从应用程序的AppRoles属性或清单文件中获取 objectId& principalId是AD组的objectId属性,映射到角色
ResourceId是应用程序的objectId属性

答案 1 :(得分:0)

使用新的AZ模块:

Get-AzADGroup -SearchString "Your azure ad or on prem ad group"

这将生成一些信息。复制ID,然后运行:

New-AzRoleAssignment -ObjectId 8baabe9f-245e-456b-9bd8-b8c09002df52 -RoleDefinitionName Contributor -ResourceGroupName "Your RG Name"
相关问题