Skip to content

Commit 781e62e

Browse files
Merge branch 'main' of https://github.com/MicrosoftDocs/azure-docs-pr into WI-55498-episode-twenty-three
2 parents a8ec479 + 9ae27f7 commit 781e62e

File tree

10 files changed

+193
-19
lines changed

10 files changed

+193
-19
lines changed

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/azure-monitor/alerts/alerts-overview.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ For stateful alerts, the alert is considered resolved when:
9595

9696
When the alert is considered resolved, the alert rule sends out a resolved notification using webhooks or email and the monitor state in the Azure portal is set to resolved.
9797

98+
> [!NOTE]
99+
> Log search alert is resolved after time range that teh alert wasn't met. Threrefore the resolve evaluation window is based on last unhealthy window.
100+
98101
## Manage your alerts programmatically
99102

100103
You can query your alerts instances to create custom views outside of the Azure portal, or to analyze your alerts to identify patterns and trends.

articles/azure-netapp-files/azacsnap-release-notes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ This page lists major changes made to AzAcSnap to provide new functionality or r
2222

2323
## Dec-2022
2424

25-
### AzAcSnap 7 (Build: 1A8F367)
25+
### AzAcSnap 7 (Build: 1A8FDFF)
2626

2727
AzAcSnap 7 is being released with the following fixes and improvements:
2828

articles/cosmos-db/nosql/throughput-control-spark.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ In the above example, the `targetThroughputThreshold` is defined as **0.95**, so
7979
}
8080
```
8181
> [!NOTE]
82-
> Throughput control does not do RU pre-calculation of each operation. Instead, it tracks the RU usages *after* the operation based on the response header. As such, throughput control is based on an approximation - and **does not guarantee** that amount of throughput will be available for the group at any given time. For example, if the configured RU is so low that a single operation can use it all, then throughput control cannot avoid the RU exceeding the configured limit. Therefore, throughput control works best when the configured limit is higher than any single operation that can be executed by a client in the given control group.
82+
> Throughput control does not do RU pre-calculation of each operation. Instead, it tracks the RU usages *after* the operation based on the response header. As such, throughput control is based on an approximation - and **does not guarantee** that amount of throughput will be available for the group at any given time. This means that if the configured RU is so low that a single operation can use it all, then throughput control cannot avoid the RU exceeding the configured limit. Therefore, throughput control works best when the configured limit is higher than any single operation that can be executed by a client in the given control group. With that in mind, when reading via query or change feed, you should configure the page size in `spark.cosmos.read.maxItemCount` (default 1000) to be a modest amount, so that client throughput control can be re-calculated with higher frequency, and therefore reflected more accurately at any given time. However, when using throughput control for a write-job using bulk, the number of documents executed in a single request will automatically be tuned based on the throttling rate to allow the throughput control to kick-in as early as possible.
8383
8484
> [!WARNING]
8585
> The `targetThroughputThreshold` is **immutable**. If you change the target throughput threshold value, this will create a new throughput control group (but as long as you use Version 4.10.0 or later it can have the same name). You need to restart all Spark jobs that are using the group if you want to ensure they all consume the new threshold immediately (otherwise they will pick-up the new threshold after the next restart).

articles/defender-for-iot/organizations/ot-virtual-appliances.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ This section outlines considerations for virtual appliance components, for both
4141

4242
## OT network sensor VM requirements
4343

44-
The following tables list system requirements for OT network sensors on virtual appliances.
44+
The following tables list system requirements for OT network sensors on virtual appliances, and performance measured in our qualification labs.
4545

4646
For all deployments, bandwidth results for virtual machines may vary, depending on the distribution of protocols and the actual hardware resources that are available, including the CPU model, memory bandwidth, and IOPS.
4747

@@ -53,7 +53,7 @@ For all deployments, bandwidth results for virtual machines may vary, depending
5353
|**E500** | **Max bandwidth**: 800 Mb/sec <br>**Max monitored assets**: 10,000 | **vCPU**: 8 <br>**Memory**: 32 GB <br>**Storage**: 500 GB (300 IOPS) |
5454
|**L500** | **Max bandwidth**: 160 Mb/sec <br>**Max monitored assets**: 1,000 | **vCPU**: 4 <br>**Memory**: 8 GB <br>**Storage**: 500 GB (150 IOPS) |
5555
|**L100** | **Max bandwidth**: 100 Mb/sec <br>**Max monitored assets**: 800 | **vCPU**: 4 <br>**Memory**: 8 GB <br>**Storage**: 100 GB (150 IOPS) |
56-
|**L64** | **Max bandwidth**: 10 Mb/sec <br>**Max monitored assets**: 100 | **vCPU**: 4 <br>**Memory**: 8 GB <br>**Storage**: 60 GB (150 IOPS) |
56+
|**L60** | **Max bandwidth**: 10 Mb/sec <br>**Max monitored assets**: 100 | **vCPU**: 4 <br>**Memory**: 8 GB <br>**Storage**: 60 GB (150 IOPS) |
5757

5858

5959
## On-premises management console VM requirements

0 commit comments

Comments
 (0)