Skip to content

Commit 8e21e4f

Browse files
authored
Merge pull request #205777 from MicrosoftDocs/main
Merge main to live, 4 AM
2 parents ba38f77 + 107b06c commit 8e21e4f

File tree

142 files changed

+948
-523
lines changed

Some content is hidden

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

142 files changed

+948
-523
lines changed

articles/active-directory/app-provisioning/how-provisioning-works.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ You can use scoping filters to define attribute-based rules that determine which
7474

7575
### B2B (guest) users
7676

77-
It's possible to use the Azure AD user provisioning service to provision B2B (or guest) users in Azure AD to SaaS applications.
77+
It's possible to use the Azure AD user provisioning service to provision B2B (guest) users in Azure AD to SaaS applications.
7878
However, for B2B users to sign in to the SaaS application using Azure AD, the SaaS application must have its SAML-based single sign-on capability configured in a specific way. For more information on how to configure SaaS applications to support sign-ins from B2B users, see [Configure SaaS apps for B2B collaboration](../external-identities/configure-saas-apps.md).
7979

8080
> [!NOTE]
81-
> The userPrincipalName for a guest user is often displayed as "alias#EXT#@domain.com". When the userPrincipalName is included in your attribute mappings as a source attribute, the #EXT# is stripped from the userPrincipalName. If you require the #EXT# to be present, replace userPrincipalName with originalUserPrincipalName as the source attribute.
82-
userPrincipalName = alias@domain.com
83-
originalUserPrincipalName = alias#EXT#@domain.com
81+
> The userPrincipalName for a B2B user represents the external user's email address alias@theirdomain as "alias_theirdomain#EXT#@yourdomain". When the userPrincipalName attribute is included in your attribute mappings as a source attribute, and a B2B user is being provisioned, the #EXT# and your domain is stripped from the userPrincipalName, so only their original alias@theirdomain is used for matching or provisioning. If you require the full user principal name including #EXT# and your domain to be present, replace userPrincipalName with originalUserPrincipalName as the source attribute. <br />
82+
userPrincipalName = alias@theirdomain<br />
83+
originalUserPrincipalName = alias_theirdomain#EXT#@yourdomain
8484

8585
## Provisioning cycles: Initial and incremental
8686

articles/active-directory/authentication/feature-availability.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ This following tables list Azure AD feature availability in Azure Government.
3333
|| Service-level agreement | &#x2705; |
3434
|**Applications access**|SaaS apps with modern authentication (Azure AD application gallery apps, SAML, and OAUTH 2.0) | &#x2705; |
3535
|| Group assignment to applications | &#x2705; |
36-
|| Cloud app discovery (Microsoft Cloud App Security) | &#x2705; |
36+
|| Cloud app discovery (Microsoft Defender for Cloud Apps) | &#x2705; |
3737
|| Application Proxy for on-premises, header-based, and Integrated Windows Authentication | &#x2705; |
3838
|| Secure hybrid access partnerships (Kerberos, NTLM, LDAP, RDP, and SSH authentication) | &#x2705; |
3939
|**Authorization and Conditional Access**|Role-based access control (RBAC) | &#x2705; |

articles/active-directory/governance/identity-governance-applications-existing-users.md

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -226,25 +226,30 @@ The first time your organization uses these cmdlets for this scenario, you need
226226

227227
1. Retrieve the IDs of those users in Azure AD.
228228

229-
The following PowerShell script uses the `$dbusers`, `$db_match_column_name`, and `$azuread_match_attr_name` values specified earlier. It will query Azure AD to locate a user that has a matching value for each record in the source file. If there are many users in the database, this script might take several minutes to finish.
229+
The following PowerShell script uses the `$dbusers`, `$db_match_column_name`, and `$azuread_match_attr_name` values specified earlier. It will query Azure AD to locate a user that has an attribute with a matching value for each record in the source file. If there are many users in the database, this script might take several minutes to finish. If you don't have an attribute in Azure AD that has the value, and need to use a `contains` or other filter expression, then you will need to customize this script and that in step 11 below to use a different filter expression.
230230

231231
```powershell
232232
$dbu_not_queried_list = @()
233233
$dbu_not_matched_list = @()
234234
$dbu_match_ambiguous_list = @()
235235
$dbu_query_failed_list = @()
236236
$azuread_match_id_list = @()
237+
$azuread_not_enabled_list = @()
238+
$dbu_values = @()
239+
$dbu_duplicate_list = @()
237240
238241
foreach ($dbu in $dbusers) {
239242
if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) {
240243
$val = $dbu.$db_match_column_name
241244
$escval = $val -replace "'","''"
245+
if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
242246
$filter = $azuread_match_attr_name + " eq '" + $escval + "'"
243247
try {
244-
$ul = @(Get-MgUser -Filter $filter -All -ErrorAction Stop)
248+
$ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
245249
if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
246250
$id = $ul[0].id;
247251
$azuread_match_id_list += $id;
252+
if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
248253
}
249254
} catch { $dbu_query_failed_list += $dbu }
250255
} else { $dbu_not_queried_list += $dbu }
@@ -261,19 +266,27 @@ The first time your organization uses these cmdlets for this scenario, you need
261266
if ($dbu_not_queried_count -ne 0) {
262267
Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
263268
}
269+
$dbu_duplicate_count = $dbu_duplicate_list.Count
270+
if ($dbu_duplicate_count -ne 0) {
271+
Write-Error "Unable to locate Azure AD users for $dbu_duplicate_count rows as multiple rows have the same value"
272+
}
264273
$dbu_not_matched_count = $dbu_not_matched_list.Count
265274
if ($dbu_not_matched_count -ne 0) {
266275
Write-Error "Unable to locate $dbu_not_matched_count records in Azure AD by querying for $db_match_column_name values in $azuread_match_attr_name."
267276
}
268277
$dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
269278
if ($dbu_match_ambiguous_count -ne 0) {
270-
Write-Error "Unable to locate $dbu_match_ambiguous_count records in Azure AD."
279+
Write-Error "Unable to locate $dbu_match_ambiguous_count records in Azure AD as attribute match ambiguous."
271280
}
272281
$dbu_query_failed_count = $dbu_query_failed_list.Count
273282
if ($dbu_query_failed_count -ne 0) {
274283
Write-Error "Unable to locate $dbu_query_failed_count records in Azure AD as queries returned errors."
275284
}
276-
if ($dbu_not_queried_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0) {
285+
$azuread_not_enabled_count = $azuread_not_enabled_list.Count
286+
if ($azuread_not_enabled_count -ne 0) {
287+
Write-Error "$azuread_not_enabled_count users in Azure AD are blocked from sign-in."
288+
}
289+
if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count) {
277290
Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
278291
}
279292
$azuread_match_count = $azuread_match_id_list.Count
@@ -284,7 +297,7 @@ The first time your organization uses these cmdlets for this scenario, you need
284297

285298
For example, someone's email address might have been changed in Azure AD without their corresponding `mail` property being updated in the application's data source. Or, the user might have already left the organization but is still in the application's data source. Or there might be a vendor or super-admin account in the application's data source that does not correspond to any specific person in Azure AD.
286299

287-
1. If there were users who couldn't be located in Azure AD, but you want to have their access reviewed or their attributes updated in the database, you need to create Azure AD users for them. You can create users in bulk by using either:
300+
1. If there were users who couldn't be located in Azure AD, or weren't active and able to sign in, but you want to have their access reviewed or their attributes updated in the database, you need to update or create Azure AD users for them. You can create users in bulk by using either:
288301

289302
- A CSV file, as described in [Bulk create users in the Azure AD portal](../enterprise-users/users-bulk-add.md)
290303
- The [New-MgUser](/powershell/module/microsoft.graph.users/new-mguser?view=graph-powershell-1.0#examples) cmdlet
@@ -299,17 +312,22 @@ The first time your organization uses these cmdlets for this scenario, you need
299312
$dbu_match_ambiguous_list = @()
300313
$dbu_query_failed_list = @()
301314
$azuread_match_id_list = @()
315+
$azuread_not_enabled_list = @()
316+
$dbu_values = @()
317+
$dbu_duplicate_list = @()
302318
303319
foreach ($dbu in $dbusers) {
304320
if ($null -ne $dbu.$db_match_column_name -and $dbu.$db_match_column_name.Length -gt 0) {
305321
$val = $dbu.$db_match_column_name
306322
$escval = $val -replace "'","''"
323+
if ($dbu_values -contains $escval) { $dbu_duplicate_list += $dbu; continue } else { $dbu_values += $escval }
307324
$filter = $azuread_match_attr_name + " eq '" + $escval + "'"
308325
try {
309-
$ul = @(Get-MgUser -Filter $filter -All -ErrorAction Stop)
326+
$ul = @(Get-MgUser -Filter $filter -All -Property Id,accountEnabled -ErrorAction Stop)
310327
if ($ul.length -eq 0) { $dbu_not_matched_list += $dbu; } elseif ($ul.length -gt 1) {$dbu_match_ambiguous_list += $dbu } else {
311328
$id = $ul[0].id;
312329
$azuread_match_id_list += $id;
330+
if ($ul[0].accountEnabled -eq $false) {$azuread_not_enabled_list += $id }
313331
}
314332
} catch { $dbu_query_failed_list += $dbu }
315333
} else { $dbu_not_queried_list += $dbu }
@@ -319,19 +337,27 @@ The first time your organization uses these cmdlets for this scenario, you need
319337
if ($dbu_not_queried_count -ne 0) {
320338
Write-Error "Unable to query for $dbu_not_queried_count records as rows lacked values for $db_match_column_name."
321339
}
340+
$dbu_duplicate_count = $dbu_duplicate_list.Count
341+
if ($dbu_duplicate_count -ne 0) {
342+
Write-Error "Unable to locate Azure AD users for $dbu_duplicate_count rows as multiple rows have the same value"
343+
}
322344
$dbu_not_matched_count = $dbu_not_matched_list.Count
323345
if ($dbu_not_matched_count -ne 0) {
324346
Write-Error "Unable to locate $dbu_not_matched_count records in Azure AD by querying for $db_match_column_name values in $azuread_match_attr_name."
325347
}
326348
$dbu_match_ambiguous_count = $dbu_match_ambiguous_list.Count
327349
if ($dbu_match_ambiguous_count -ne 0) {
328-
Write-Error "Unable to locate $dbu_match_ambiguous_count records in Azure AD."
350+
Write-Error "Unable to locate $dbu_match_ambiguous_count records in Azure AD as attribute match ambiguous."
329351
}
330352
$dbu_query_failed_count = $dbu_query_failed_list.Count
331353
if ($dbu_query_failed_count -ne 0) {
332354
Write-Error "Unable to locate $dbu_query_failed_count records in Azure AD as queries returned errors."
333355
}
334-
if ($dbu_not_queried_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0) {
356+
$azuread_not_enabled_count = $azuread_not_enabled_list.Count
357+
if ($azuread_not_enabled_count -ne 0) {
358+
Write-Error "$azuread_not_enabled_count users in Azure AD are blocked from sign-in."
359+
}
360+
if ($dbu_not_queried_count -ne 0 -or $dbu_duplicate_count -ne 0 -or $dbu_not_matched_count -ne 0 -or $dbu_match_ambiguous_count -ne 0 -or $dbu_query_failed_count -ne 0 -or $azuread_not_enabled_count -ne 0) {
335361
Write-Output "You will need to resolve those issues before access of all existing users can be reviewed."
336362
}
337363
$azuread_match_count = $azuread_match_id_list.Count
@@ -465,6 +491,8 @@ When an application role assignment is created in Azure AD for a user to an appl
465491

466492
If you don't see users being provisioned, check the [troubleshooting guide for no users being provisioned](../app-provisioning/application-provisioning-config-problem-no-users-provisioned.md). If you see an error in the provisioning status and are provisioning to an on-premises application, check the [troubleshooting guide for on-premises application provisioning](../app-provisioning/on-premises-ecma-troubleshoot.md).
467493

494+
1. Check the [provisioning log](../reports-monitoring/concept-provisioning-logs.md). Filter the log to the status **Failure**. If there are failures with an ErrorCode of **DuplicateTargetEntries**, this indicates an ambiguity in your provisioning matching rules, and you'll need to update the Azure AD users or the mappings that are used for matching to ensure each Azure AD user matches one application user. Then filter the log to the action **Create** and status **Skipped**. If users were skipped with the SkipReason code of **NotEffectivelyEntitled**, this may indicate that the user accounts in Azure AD were not matched because the user account status was **Disabled**.
495+
468496
After the Azure AD provisioning service has matched the users based on the application role assignments you've created, subsequent changes will be sent to the application.
469497

470498
## Next steps

articles/active-directory/roles/permissions-reference.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ This article lists the Azure AD built-in roles you can assign to allow managemen
4343
> | [B2C IEF Keyset Administrator](#b2c-ief-keyset-administrator) | Can manage secrets for federation and encryption in the Identity Experience Framework (IEF). | aaf43236-0c0d-4d5f-883a-6955382ac081 |
4444
> | [B2C IEF Policy Administrator](#b2c-ief-policy-administrator) | Can create and manage trust framework policies in the Identity Experience Framework (IEF). | 3edaf663-341e-4475-9f94-5c398ef6c070 |
4545
> | [Billing Administrator](#billing-administrator) | Can perform common billing related tasks like updating payment information. | b0f54661-2d74-4c50-afa3-1ec803f12efe |
46-
> | [Cloud App Security Administrator](#cloud-app-security-administrator) | Can manage all aspects of the Cloud App Security product. | 892c5842-a9a6-463a-8041-72aa08ca3cf6 |
46+
> | [Cloud App Security Administrator](#cloud-app-security-administrator) | Can manage all aspects of the Defender for Cloud Apps product. | 892c5842-a9a6-463a-8041-72aa08ca3cf6 |
4747
> | [Cloud Application Administrator](#cloud-application-administrator) | Can create and manage all aspects of app registrations and enterprise apps except App Proxy. | 158c047a-c907-4556-b7ef-446551a6b5f7 |
4848
> | [Cloud Device Administrator](#cloud-device-administrator) | Limited access to manage devices in Azure AD. | 7698a772-787b-4ac8-901f-60d6b08affd2 |
4949
> | [Compliance Administrator](#compliance-administrator) | Can read and manage compliance configuration and reports in Azure AD and Microsoft 365. | 17315797-102d-40b4-93e0-432062caca18 |
@@ -450,12 +450,12 @@ Makes purchases, manages subscriptions, manages support tickets, and monitors se
450450
451451
## Cloud App Security Administrator
452452

453-
Users with this role have full permissions in Cloud App Security. They can add administrators, add Microsoft Cloud App Security (MCAS) policies and settings, upload logs, and perform governance actions.
453+
Users with this role have full permissions in Defender for Cloud Apps. They can add administrators, add Microsoft Defender for Cloud Apps policies and settings, upload logs, and perform governance actions.
454454

455455
> [!div class="mx-tableFixed"]
456456
> | Actions | Description |
457457
> | --- | --- |
458-
> | microsoft.directory/cloudAppSecurity/allProperties/allTasks | Create and delete all resources, and read and update standard properties in Microsoft Cloud App Security |
458+
> | microsoft.directory/cloudAppSecurity/allProperties/allTasks | Create and delete all resources, and read and update standard properties in Microsoft Defender for Cloud Apps |
459459
> | microsoft.office365.webPortal/allEntities/standard/read | Read basic properties on all resources in the Microsoft 365 admin center |
460460
461461
## Cloud Application Administrator
@@ -590,7 +590,7 @@ In | Can do
590590
> | Actions | Description |
591591
> | --- | --- |
592592
> | microsoft.directory/authorizationPolicy/standard/read | Read standard properties of authorization policy |
593-
> | microsoft.directory/cloudAppSecurity/allProperties/allTasks | Create and delete all resources, and read and update standard properties in Microsoft Cloud App Security |
593+
> | microsoft.directory/cloudAppSecurity/allProperties/allTasks | Create and delete all resources, and read and update standard properties in Microsoft Defender for Cloud Apps |
594594
> | microsoft.azure.informationProtection/allEntities/allTasks | Manage all aspects of Azure Information Protection |
595595
> | microsoft.azure.serviceHealth/allEntities/allTasks | Read and configure Azure Service Health |
596596
> | microsoft.azure.supportTickets/allEntities/allTasks | Create and manage Azure support tickets |
@@ -928,7 +928,7 @@ Users with this role have access to all administrative features in Azure Active
928928
> | microsoft.directory/users/authenticationMethods/basic/update | Update basic properties of authentication methods for users |
929929
> | microsoft.directory/authorizationPolicy/allProperties/allTasks | Manage all aspects of authorization policy |
930930
> | microsoft.directory/bitlockerKeys/key/read | Read bitlocker metadata and key on devices |
931-
> | microsoft.directory/cloudAppSecurity/allProperties/allTasks | Create and delete all resources, and read and update standard properties in Microsoft Cloud App Security |
931+
> | microsoft.directory/cloudAppSecurity/allProperties/allTasks | Create and delete all resources, and read and update standard properties in Microsoft Defender for Cloud Apps |
932932
> | microsoft.directory/connectors/create | Create application proxy connectors |
933933
> | microsoft.directory/connectors/allProperties/read | Read all properties of application proxy connectors |
934934
> | microsoft.directory/connectorGroups/create | Create application proxy connector groups |
@@ -1087,7 +1087,7 @@ Users in this role can read settings and administrative information across Micro
10871087
> | microsoft.directory/users/authenticationMethods/standard/restrictedRead | Read standard properties of authentication methods that do not include personally identifiable information for users |
10881088
> | microsoft.directory/authorizationPolicy/standard/read | Read standard properties of authorization policy |
10891089
> | microsoft.directory/bitlockerKeys/key/read | Read bitlocker metadata and key on devices |
1090-
> | microsoft.directory/cloudAppSecurity/allProperties/read | Read all properties for Cloud app security |
1090+
> | microsoft.directory/cloudAppSecurity/allProperties/read | Read all properties for Defender for Cloud Apps |
10911091
> | microsoft.directory/connectors/allProperties/read | Read all properties of application proxy connectors |
10921092
> | microsoft.directory/connectorGroups/allProperties/read | Read all properties of application proxy connector groups |
10931093
> | microsoft.directory/contacts/allProperties/read | Read all properties for contacts |

0 commit comments

Comments
 (0)