如何使用 powershell 将 AD 组分配给 Azure 中的应用程序角色?
How can I use powershell to assign AD groups to Application Roles in Azure?
我的客户有 AzureAD Premium,因此我们可以将组分配给角色
我们可以编写新组的创建脚本(在他们的本地 AD 中),并将用户添加到这些组,并将这些组同步到 AAD
我们可以对清单文件进行脚本操作
但我还没有解决的是如何自动执行“将组分配给应用程序角色”。有人必须进入 Azure 门户 > 目录 > 应用程序 > 我们的应用程序 > 用户和组 > 找到要分配的组 > 分配 > 找到匹配的角色...(冲洗并重复)。
该应用程序本质上是共享点(在 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 查询。有些会,当我通过门户取消分配它们时,它们也会从响应中删除。缺乏一致性使我对查询没有信心。
是否有本机 powershell cmdlet 可以执行 AppRoleAssignments? (这是我对 GraphAPI 的偏好)。
为什么 GraphAPI 的结果不一致?
提前感谢您的指点
更新
我正在研究 *-AzureAd*
cmdlet(来自 AzureADPreview
模块),但 Microsoft Documentation 有点简单 - 它只是一个预览,但我认为他们可以有比以下更好的文档:
Inputs
The input type is the type of the objects that you can pipe to the cmdlet.
Outputs
The output type is the type of the objects that the cmdlet emits.
这些 cmdlet do 似乎结束了 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 中描述的模块和 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
属性
使用新的 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"
我的客户有 AzureAD Premium,因此我们可以将组分配给角色
我们可以编写新组的创建脚本(在他们的本地 AD 中),并将用户添加到这些组,并将这些组同步到 AAD
我们可以对清单文件进行脚本操作
但我还没有解决的是如何自动执行“将组分配给应用程序角色”。有人必须进入 Azure 门户 > 目录 > 应用程序 > 我们的应用程序 > 用户和组 > 找到要分配的组 > 分配 > 找到匹配的角色...(冲洗并重复)。
该应用程序本质上是共享点(在 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 查询。有些会,当我通过门户取消分配它们时,它们也会从响应中删除。缺乏一致性使我对查询没有信心。
是否有本机 powershell cmdlet 可以执行 AppRoleAssignments? (这是我对 GraphAPI 的偏好)。
为什么 GraphAPI 的结果不一致?
提前感谢您的指点
更新
我正在研究 *-AzureAd*
cmdlet(来自 AzureADPreview
模块),但 Microsoft Documentation 有点简单 - 它只是一个预览,但我认为他们可以有比以下更好的文档:
Inputs
The input type is the type of the objects that you can pipe to the cmdlet.Outputs
The output type is the type of the objects that the cmdlet emits.
这些 cmdlet do 似乎结束了 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 中描述的模块和 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
属性
使用新的 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"