Skip to content

Commit e645e56

Browse files
committed
Merge branch 'main' into freshness-work
2 parents b1efb5b + 7a5aed9 commit e645e56

File tree

283 files changed

+3892
-1242
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

283 files changed

+3892
-1242
lines changed

.openpublishing.publish.config.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,12 @@
386386
"branch": "main",
387387
"branch_mapping": {}
388388
},
389+
{
390+
"path_to_root": "azureml-examples-mavaisma-r-azureml",
391+
"url": "https://github.com/azure/azureml-examples",
392+
"branch": "mavaisma-r-azureml",
393+
"branch_mapping": {}
394+
},
389395
{
390396
"path_to_root": "azureml-examples-v2samplesreorg",
391397
"url": "https://github.com/azure/azureml-examples",

articles/active-directory-b2c/TOC.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
- name: Authentication library
6767
href: ../active-directory/develop/msal-overview.md?bc=%2fazure%2factive-directory-b2c%2fbread%2ftoc.json&toc=%2fazure%2factive-directory-b2c%2fTOC.json
6868
displayName: MSAL, client library, Microsoft Authentication Library
69-
- name: Azure AD B2C global identitiy framework
69+
- name: Azure AD B2C global identity framework
7070
items:
7171
- name: Global identity solutions
7272
href: azure-ad-b2c-global-identity-solutions.md

articles/active-directory/develop/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,8 @@
812812
href: reply-url.md
813813
- name: Validation differences by supported account types
814814
href: supported-accounts-validation.md
815+
- name: Configured permissions limits troubleshooting
816+
href: troubleshoot-required-resource-access-limits.md
815817
- name: Microsoft auth libraries by app type
816818
displayName: MSAL, auth client library, SDK, token validation
817819
href: reference-v2-libraries.md
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
---
2+
title: Troubleshooting the configured permissions limits
3+
description: Learn why some apps may exceed the limits on configured permissions and how to address this issue.
4+
author: Jackson-Woods
5+
ms.author: jawoods
6+
manager: CelesteDG
7+
ms.date: 12/08/2022
8+
ms.topic: reference
9+
ms.subservice: develop
10+
ms.custom: aaddev
11+
ms.service: active-directory
12+
ms.reviewer: phsignor
13+
---
14+
15+
# Troubleshooting the configured permissions limits
16+
17+
The `RequiredResourceAccess` collection (RRA) on an application object contains all the configured API permissions that an app requires for its default consent request. This collection has various limits depending on which types of identities the app supports, For more information on the limits for supported account types, see [Validation differences by supported account types](supported-accounts-validation.md).
18+
19+
The limits on maximum permissions were updated in May 2022, so some apps may have more permissions in their RRA than are now allowed. In addition, apps that change their supported account types after configuring permissions may exceed the limits of the new setting. When apps exceed the configured permissions limit, no new permissions may be added until the number of permissions in the `RequiredResourceAccess` collection is brought back under the limits.
20+
21+
This document offers additional information and troubleshooting steps to resolve this issue.
22+
23+
## Identifying when an app has exceeded the `RequiredResourceAccess` limits
24+
25+
In general, all applications with more than 400 permissions have exceeded the configuration limits. Apps may also be subject to lower limits if they support sign-in for personal Microsoft accounts (MSA). An app that has exceeded the permission limits will receive the following error when trying to add more permissions in the Azure portal:
26+
27+
> `Failed to save permissions for <AppName>. This configuration exceeds the global application object limit. Remove some items and retry your request.`
28+
29+
## Resolution steps
30+
31+
If the application isn't needed anymore, the first option you should consider is to delete the app registration entirely. (You can restore recently deleted applications, in case you discover soon afterwards that it was still needed.)
32+
33+
If you still need the application or are unsure, the following steps will help you resolve this issue:
34+
35+
1. **Remove duplicate permissions.** In some cases, the same permission is listed multiple times. Review the required permissions and remove permissions that are listed two or more times. See the related PowerShell script on the [additional resources](#additional-resources) section of this article.
36+
2. **Remove unused permissions.** Review the permissions required by the application and compare them to what the application or service does. Remove permissions that are configured in the app registration, but which the application or service doesn’t require. For more information on how to review permissions, see [Review application permissions](../manage-apps/manage-application-permissions.md)
37+
3. **Remove redundant permissions.** In many APIs, including Microsoft Graph, some permissions aren't necessary when other more privileged permissions are included. For example, the Microsoft Graph permission User.Read.All (read all users) isn't needed when an application also has User.ReadWrite.All (read, create and update all users). To learn more about Microsoft Graph permissions, see [Microsoft Graph permissions reference](/graph/permissions-reference).
38+
4. **Use multiple app registrations.** If a single app or service requires more than 400 permissions in the required permissions list, the app will need to be configured to use two (or more) different app registrations, each one with 400 or fewer permissions configured on the app registration.
39+
40+
## Frequently asked questions (FAQ)
41+
42+
### *Why has Microsoft revised the limit on total permissions?*
43+
44+
This limit is important for two reasons:
45+
46+
- To help prevent an app from being configured to require more permissions than can be granted during consent.
47+
- To keep the total size of the app registration within the limits required for stability and performance of the underlying storage platform.
48+
49+
### *What will happen if I don’t do anything?*
50+
51+
If your app exceeds the total permissions limit, you'll no longer be able to increase the total number of required permissions for your application.
52+
53+
### *Does the limit change how many permissions my application can be granted?*
54+
55+
No. This limit affects only the list of requested API permissions configured on the app registration. This is different from the list of permissions that have been granted to your application.
56+
57+
Even if it isn't listed in the required API permissions list, a delegated permission can still be requested dynamically by an application. Both delegated permissions and app roles (application permissions) can also be granted directly, using Microsoft Graph API or Microsoft Graph PowerShell.
58+
59+
### *Can the limit be raised for my application?*
60+
61+
No, the limit can't be raised for individual applications or organizations.
62+
63+
### *Are there other limits on the list of required API permissions?*
64+
65+
Yes. The limits can vary depending on the supported account types for the app. Apps that support personal Microsoft Accounts for sign-in (for example, Outlook.com, Hotmail.com, Xbox Live) generally have lower limits. See [Validation differences by supported account types](supported-accounts-validation.md) to learn more.
66+
67+
## Additional resources
68+
69+
Use the following PowerShell script to remove any duplicate permissions from your app registrations.
70+
71+
```PowerShell
72+
<#
73+
.SYNOPSIS
74+
Remove duplicate required API permissions from an app registration's required API permission list.
75+
.DESCRIPTION
76+
This script ensures all API permissions listed in a Microsoft identity platform's app registration are only listed once,
77+
removing any duplicates it finds. This script requires the Microsoft.Graph.Applications PowerShell module.
78+
.EXAMPLE
79+
Get-MgApplication -Filter "appId eq '46c22aca-bcdd-467d-a837-bd544c09b8b4'" | .\Deduplicate_RequiredResourceAccess.ps1"
80+
.EXAMPLE
81+
$apps = Get-MgApplication -Filter "startswith(displayName,'Test_app')"
82+
$apps | .\Deduplicate_RequiredResourceAccess.ps1
83+
#>
84+
85+
#Requires -Modules Microsoft.Graph.Applications
86+
87+
[CmdletBinding()]
88+
param(
89+
[Parameter(ValueFromPipeline = $true)]
90+
$App
91+
)
92+
93+
begin {
94+
$context = Get-MgContext
95+
if (-not $context) {
96+
throw ("You must connect to Microsoft Graph PowerShell first, with sufficient permissions " +
97+
"to manage Application objects. For example: Connect-MgGraph -Scopes ""Application.ReadWrite.All""")
98+
}
99+
}
100+
101+
process {
102+
103+
# Build the unique list of required API permissions for each required API
104+
$originalCount = 0
105+
$tempRras = @{}
106+
foreach ($rra in $App.RequiredResourceAccess) {
107+
if (-not $tempRras.ContainsKey($rra.ResourceAppId)) {
108+
$tempRras[$rra.ResourceAppId] = @{"Scope" = @{}; "Role" = @{}};
109+
}
110+
foreach ($ra in $rra.ResourceAccess) {
111+
if ($tempRras[$rra.ResourceAppId][$ra.Type].ContainsKey($ra.Id)) {
112+
# Skip duplicate required API permission
113+
} else {
114+
$tempRras[$rra.ResourceAppId][$ra.Type][$ra.Id] = $true
115+
}
116+
$originalCount++
117+
}
118+
}
119+
120+
# Now that we have the unique set of required API permissions, iterate over all the keys to build the final requiredResourceAccess structure
121+
$deduplicatedCount = 0
122+
$finalRras = @($tempRras.Keys) | ForEach-Object {
123+
$resourceAppId = $_
124+
@{
125+
"resourceAppId" = $resourceAppId
126+
"resourceAccess" = @(@("Scope", "Role") | ForEach-Object {
127+
$type = $_
128+
$tempRras[$resourceAppId][$type].Keys | ForEach-Object {
129+
$deduplicatedCount++;
130+
@{"type" = $type; "id" = $_}
131+
}
132+
})
133+
}
134+
}
135+
136+
$countDifference = $originalCount - $deduplicatedCount
137+
if ($countDifference) {
138+
Write-Host "Removing $($countDifference) duplicate entries in RequiredResourceAccess for '$($App.DisplayName)' (AppId: $($App.AppId))"
139+
Update-MgApplication -ApplicationId $App.Id -RequiredResourceAccess $finalRras
140+
} else {
141+
Write-Host "No updates necessary for '$($App.DisplayName)' (AppId: $($App.AppId))"
142+
}
143+
}
144+
```
145+
146+
## Learn more
147+
148+
- Learn about API permissions and the Microsoft identity platform: [Overview of permissions and consent in the Microsoft identity platform](permissions-consent-overview.md)
149+
- Understand the permissions available for Microsoft Graph: [Microsoft Graph permissions reference](/graph/permissions-reference)
150+
- Review the limitations to application configurations: [Validation differences by supported account types](supported-accounts-validation.md)

articles/active-directory/governance/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
href: entitlement-management-group-licenses.md
3737
- name: Onboard external users to Azure AD through an approval process
3838
href: entitlement-management-onboard-external-user.md
39+
- name: Migrate an organizational role model
40+
href: identity-governance-organizational-roles.md
3941
- name: Access Reviews
4042
items:
4143
- name: Review access to Microsoft 365 groups - Microsoft Graph

articles/active-directory/governance/entitlement-management-access-package-auto-assignment-policy.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,11 @@ To create a policy for an access package, you need to start from the access pack
7272

7373
There are two ways to create an access package assignment policy for automatic assignment programmatically, through Microsoft Graph and through the PowerShell cmdlets for Microsoft Graph.
7474

75-
### Creating an access package assignment policy through Graph
75+
### Create an access package assignment policy through Graph
7676

7777
You can create a policy using Microsoft Graph. A user in an appropriate role with an application that has the delegated `EntitlementManagement.ReadWrite.All` permission, or an application in a catalog role or with the `EntitlementManagement.ReadWrite.All` permission, can call the [create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-assignmentpolicies?tabs=http&view=graph-rest-1.0&preserve-view=true) API. In your [request payload](/graph/api/resources/accesspackageassignmentpolicy?view=graph-rest-1.0&preserve-view=true), include the `displayName`, `description`, `specificAllowedTargets`, [`automaticRequestSettings`](/graph/api/resources/accesspackageautomaticrequestsettings?view=graph-rest-1.0&preserve-view=true) and `accessPackage` properties of the policy.
7878

79-
### Creating an access package assignment policy through PowerShell
79+
### Create an access package assignment policy through PowerShell
8080

8181
You can also create a policy in PowerShell with the cmdlets from the [Microsoft Graph PowerShell cmdlets for Identity Governance](https://www.powershellgallery.com/packages/Microsoft.Graph.Identity.Governance/) module version 1.16.0 or later.
8282

articles/active-directory/governance/entitlement-management-access-package-create.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,11 @@ On the **Review + create** tab, you can review your settings and check for any v
132132

133133
The new access package appears in the list of access packages.
134134

135-
## Creating an access package programmatically
135+
## Create an access package programmatically
136136

137137
There are two ways to create an access package programmatically, through Microsoft Graph and through the PowerShell cmdlets for Microsoft Graph.
138138

139-
### Creating an access package with Microsoft Graph
139+
### Create an access package with Microsoft Graph
140140

141141
You can create an access package using Microsoft Graph. A user in an appropriate role with an application that has the delegated `EntitlementManagement.ReadWrite.All` permission can call the API to
142142

@@ -147,7 +147,7 @@ You can create an access package using Microsoft Graph. A user in an appropriate
147147
1. [Create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-accesspackageassignmentpolicies?tabs=http&view=graph-rest-beta&preserve-view=true) for each policy needed in the access package.
148148

149149

150-
### Creating an access package with Microsoft PowerShell
150+
### Create an access package with Microsoft PowerShell
151151

152152
You can also create an access package in PowerShell with the cmdlets from the [Microsoft Graph PowerShell cmdlets for Identity Governance](https://www.powershellgallery.com/packages/Microsoft.Graph.Identity.Governance/) module version 1.16.0 or later. This script illustrates using the Graph `beta` profile.
153153

@@ -197,7 +197,7 @@ $rparams = @{
197197
New-MgEntitlementManagementAccessPackageResourceRoleScope -AccessPackageId $ap.Id -BodyParameter $rparams
198198
```
199199

200-
Finally, create the policies. In this policy, only the administrator can assign access, and there are no access reviews. See [create an assignment policy through PowerShell](entitlement-management-access-package-request-policy.md#creating-an-access-package-assignment-policy-through-powershell) and [create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-assignmentpolicies?tabs=http&view=graph-rest-beta&preserve-view=true) for more examples.
200+
Finally, create the policies. In this policy, only the administrator can assign access, and there are no access reviews. See [create an assignment policy through PowerShell](entitlement-management-access-package-request-policy.md#create-an-access-package-assignment-policy-through-powershell) and [create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-assignmentpolicies?tabs=http&view=graph-rest-beta&preserve-view=true) for more examples.
201201

202202
```powershell
203203

articles/active-directory/governance/entitlement-management-access-package-request-policy.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -209,19 +209,19 @@ To change the request and approval settings for an access package, you need to o
209209

210210
1. If you are editing a policy click **Update**. If you are adding a new policy, click **Create**.
211211

212-
## Creating an access package assignment policy programmatically
212+
## Create an access package assignment policy programmatically
213213

214214
There are two ways to create an access package assignment policy programmatically, through Microsoft Graph and through the PowerShell cmdlets for Microsoft Graph.
215215

216-
### Creating an access package assignment policy through Graph
216+
### Create an access package assignment policy through Graph
217217

218218
You can create a policy using Microsoft Graph. A user in an appropriate role with an application that has the delegated `EntitlementManagement.ReadWrite.All` permission, or an application in a catalog role or with the `EntitlementManagement.ReadWrite.All` permission, can call the [create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-assignmentpolicies?tabs=http&view=graph-rest-1.0&preserve-view=true) API.
219219

220-
### Creating an access package assignment policy through PowerShell
220+
### Create an access package assignment policy through PowerShell
221221

222222
You can also create an access package in PowerShell with the cmdlets from the [Microsoft Graph PowerShell cmdlets for Identity Governance](https://www.powershellgallery.com/packages/Microsoft.Graph.Identity.Governance/) module version 1.16.0 or later.
223223

224-
This script below illustrates using the `beta` profile, to create a policy for direct assignment to an access package. In this policy, only the administrator can assign access, and there are no access reviews. See [Create an automatic assignment policy](entitlement-management-access-package-auto-assignment-policy.md#creating-an-access-package-assignment-policy-through-powershell) for an example of how to create an automatic assignment policy, and [create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-assignmentpolicies?tabs=http&view=graph-rest-beta&preserve-view=true) for more examples.
224+
This script below illustrates using the `beta` profile, to create a policy for direct assignment to an access package. In this policy, only the administrator can assign access, and there are no access reviews. See [Create an automatic assignment policy](entitlement-management-access-package-auto-assignment-policy.md#create-an-access-package-assignment-policy-through-powershell) for an example of how to create an automatic assignment policy, and [create an accessPackageAssignmentPolicy](/graph/api/entitlementmanagement-post-assignmentpolicies?tabs=http&view=graph-rest-beta&preserve-view=true) for more examples.
225225

226226
```powershell
227227
Connect-MgGraph -Scopes "EntitlementManagement.ReadWrite.All"

articles/active-directory/governance/entitlement-management-delegate.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ ms.collection: M365-identity-device-management
2525

2626
In Azure AD, you can use role models to manage access at scale through identity governance.
2727

28-
* You can use access packages to represent organizational roles in your organization, such as "sales representative". An access package representing that enterprise role would include all the access rights that a sales representative might typically need, across multiple resources.
28+
* You can use access packages to represent [organizational roles](identity-governance-organizational-roles.md) in your organization, such as "sales representative". An access package representing that organizational role would include all the access rights that a sales representative might typically need, across multiple resources.
2929
* Applications [can define their own roles](../develop/howto-add-app-roles-in-azure-ad-apps.md). For example, if you had a sales application, and that application included the app role "salesperson", you could then [include that role in an access package](entitlement-management-access-package-resources.md).
3030
* You can use roles for delegating administrative access. If you have a catalog for all the access packages needed by sales, you could assign someone to be responsible for that catalog, by assigning them a catalog-specific role.
3131

32-
This article discusses how to use roles to manage aspects within entitlement management.
32+
This article discusses how to use roles to manage aspects within Microsoft Entra entitlement management, for controlling access to the entitlement management resources.
3333

3434
By default, Global administrators and Identity governance administrators can create and manage all aspects of entitlement management. However, the users in these roles may not know all the situations where access packages are required. Typically it's users within the respective departments, teams, or projects who know who they're collaborating with, using what resources, and for how long. Instead of granting unrestricted permissions to non-administrators, you can grant users the least permissions they need to do their job and avoid creating conflicting or inappropriate access rights.
3535

0 commit comments

Comments
 (0)