【问题标题】:How to manage Azure AD App Roles for Azure AD Users如何为 Azure AD 用户管理 Azure AD 应用角色
【发布时间】:2018-12-10 13:46:20
【问题描述】:

1:是否有人知道可以为 Azure AD 中的企业应用程序管理 Azure AD 用户角色的分配(清单中定义的 appRoles)的工具?

我正在谈论如何将角色(特定于应用程序)分配给现有 Azure AD 用户。使用 Azure 门户的过程非常缓慢。

当然,我们可以创建这个工具,但如果这样的工具已经存在就更好了。目前拥有许多 Azure AD 企业应用的大型组织都在使用什么?

2:在门户中手动编辑清单文件真的是最佳实践吗?将文件(AppRoles 部分)与应用程序代码放在 git 中会更有意义。

【问题讨论】:

  • 我在这里第二个 PowerShell。即使没有可用的 GUI,也为我工作。
  • 好吧。 Powershell 很棒,可以工作。但是假设您的公司在 Azure AD 中有 1000 个用户和 50 个应用程序。并且您想要管理角色的分配。这项任务很可能由少数业务用户完成。不是开发人员或管理员。
  • 这就是组和策略的用途。

标签: azure authorization azure-active-directory microsoft-graph-api azure-powershell


【解决方案1】:

是否有人知道可以为 Azure AD 用户管理角色的工具

AFAIK,没有任何特定工具可用于管理应用程序角色。

总体而言,您应该能够使用以下选项来添加/编辑/更新与应用程序角色相关的选项并将权限分配给现有 AD 用户:

注意:如果您要处理大量用户,您可以考虑将安全组分配给应用角色,而不是为单个用户分配安全组。这是一个值得考虑的选项,尽管它需要 Azure AD 高级许可证。 (更新 - 另请参阅此答案末尾 Philippe Signoret 关于将组分配给应用角色、委派管理分配的组和self-service group management 的评论)

  1. 通过编辑应用程序清单 json 的 Azure 门户(您已经知道这一点)

  2. PowerShell -

    我在最后添加了一个脚本。您可以在使用New-AzureADApplication 创建新应用或使用Set-AzureADApplication 为现有应用创建新应用时执行此操作。

    要将这些角色分配给现有用户,您可以使用New-AzureADUserAppRoleAssignment,如下面的更新脚本所示。

  3. Azure AD 图形 API -

    您可以使用 AppRole 类型和应用程序实体来管理应用角色本身。 Documentation here

    您可以使用 AppRoleAssignment Entity 将这些角色分配给现有的 Azure AD 用户等。Documentation here

  4. 微软图形 API -

    Documentation here - 请注意这仅在 beta 版本中可用 - 所以它还不适合生产应用程序。

    在这里寻找working with App Role Assignments

对于您的生产应用程序,您可以从 json 文件(源代码控制的一部分,如 git 等)读取应用程序角色,并将其提供给 PowerShell 或 Azure AD Graph API 等编程选项之一。

这是 PowerShell 脚本。还可以查看这些 SO Post,我们在其中讨论了类似但仅在 PowerShell 范围内的内容。

SO Post 1

SO Post 2(本题讨论解析 json 文件和使用 PowerShell 更新应用程序清单)

Connect-AzureAD -TenantId <Tenant GUID>

# Create an application role of given name and description
Function CreateAppRole([string] $Name, [string] $Description)
{
    $appRole = New-Object Microsoft.Open.AzureAD.Model.AppRole
    $appRole.AllowedMemberTypes = New-Object System.Collections.Generic.List[string]
    $appRole.AllowedMemberTypes.Add("User");
    $appRole.DisplayName = $Name
    $appRole.Id = New-Guid
    $appRole.IsEnabled = $true
    $appRole.Description = $Description
    $appRole.Value = $Name;
    return $appRole
}

# ObjectId for application from App Registrations in your AzureAD
$appObjectId = "<Your Application Object Id>"
$app = Get-AzureADApplication -ObjectId $appObjectId
$appRoles = $app.AppRoles
Write-Host "App Roles before addition of new role.."
Write-Host $appRoles

$newRole = CreateAppRole -Name "MyNewApplicationRole" -Description "This is my new Application Role"
$appRoles.Add($newRole)

Set-AzureADApplication -ObjectId $app.ObjectId -AppRoles $appRoles

完成上述脚本以添加 AppRole 后,为用户分配角色非常简单,并且可以使用直接命令。这是一个示例脚本 -

# Assign the values to the variables
$username = "<You user's UPN>"
$app_name = "<Your App's display name>"
$app_role_name = "<App role display name>"

# Get the user to assign, and the service principal for the app to assign to
$user = Get-AzureADUser -ObjectId "$username"
$sp = Get-AzureADServicePrincipal -Filter "displayName eq '$app_name'"
$appRole = $sp.AppRoles | Where-Object { $_.DisplayName -eq $app_role_name }

# Assign the user to the app role
New-AzureADUserAppRoleAssignment -ObjectId $user.ObjectId -PrincipalId 
$user.ObjectId -ResourceId $sp.ObjectId -Id $appRole.Id

【讨论】:

  • 对于#1,如果正在谈论管理分配给用户的角色。不是角色本身。 “我正在谈论如何将角色(特定于应用程序)分配给现有 Azure AD 用户。” 抱歉,如果我不清楚这一点。同样,现在拥有许多 Azure AD 企业应用程序的大型组织在使用什么?电源外壳。真的吗?
  • @Thomas 我已更新答案,为所有选项(即 PowerShell、Azure AD Graph API 和 Microsoft Graph API)的用户分配所有角色添加详细信息。我无法具体回答大型组织今天为此做了什么,但我试图列出可用的方法,我想到的另一件事是利用安全组将角色分配给一大群用户,而不是在个人用户级别.. 仅当您可以选择时.. 但它需要 Azure AD 高级许可证。我也在回答中添加了注释。
  • 谢谢。好答案。我假设更大的组织。正在创建他们自己的工具(基于 API)来管理它。
  • 不客气。如果没有其他选项可以解决所有需求,例如您提到业务用户的使用情况,并且以比门户允许的方式更快的方式进行操作,那么使用 API 来定制一些东西是合乎逻辑的。
  • @PhilippeSignoret 好点。自助服务组管理是缺失的部分。谢谢。
【解决方案2】:

延迟响应,但迟到总比没有好,Terraform 对此提供支持: https://www.terraform.io/docs/providers/azuread/r/application.html

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2015-05-10
    • 2018-09-18
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多