Skip to content

Commit 039b198

Browse files
authored
Merge pull request #247524 from MicrosoftDocs/main
Sync main to release-arc-data
2 parents 1a1d2fe + df2d1cd commit 039b198

File tree

54 files changed

+1437
-689
lines changed

Some content is hidden

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

54 files changed

+1437
-689
lines changed

articles/active-directory/authentication/how-to-certificate-based-authentication.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ Make sure that the following prerequisites are in place:
3636
>[!IMPORTANT]
3737
>Make sure the PKI is secure and can't be easily compromised. In the event of a compromise, the attacker can create and sign client certificates and compromise any user in the tenant, both users whom are synchronized from on-premises and cloud-only users. However, a strong key protection strategy, along with other physical and logical controls, such as HSM activation cards or tokens for the secure storage of artifacts, can provide defense-in-depth to prevent external attackers or insider threats from compromising the integrity of the PKI. For more information, see [Securing PKI](/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn786443(v=ws.11)).
3838
39+
>[!IMPORTANT]
40+
>Please visit the [Microsoft recommendations](/security/sdl/cryptographic-recommendations#security-protocol-algorithm-and-key-length-recommendations) for best practices for Microsoft Cryptographic involving algorithm choice, key length and data protection. Please make sure to use one of the recommended algorithms, key length and NIST approved curves.
41+
42+
3943
>[!NOTE]
4044
>When evaluating a PKI, it is important to review certificate issuance policies and enforcement. As mentioned, adding certificate authorities (CAs) to Azure AD configuration allows certificates issued by those CAs to authenticate any user in Azure AD. For this reason, it is important to consider how and when the CAs are allowed to issue certificates, and how they implement reusable identifiers. Where administrators need to ensure only a specific certificate is able to be used to authenticate a user, admins should exclusively use high-affinity bindings to achieve a higher level of assurance that only a specific certificate is able to authenticate the user. For more information, see [high-affinity bindings](concept-certificate-based-authentication-technical-deep-dive.md#understanding-the-username-binding-policy).
4145

articles/active-directory/conditional-access/concept-conditional-access-users-groups.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ services: active-directory
66
ms.service: active-directory
77
ms.subservice: conditional-access
88
ms.topic: conceptual
9-
ms.date: 10/03/2022
9+
ms.date: 08/07/2023
1010

1111
ms.author: joflore
1212
author: MicrosoftGuyJFlo
@@ -17,7 +17,7 @@ ms.collection: M365-identity-device-management
1717
---
1818
# Conditional Access: Users, groups, and workload identities
1919

20-
A Conditional Access policy must include a user, group, or workload identity assignment as one of the signals in the decision process. These can be included or excluded from Conditional Access policies. Azure Active Directory evaluates all policies and ensures that all requirements are met before granting access.
20+
A Conditional Access policy must include a user, group, or workload identity assignment as one of the signals in the decision process. These identities can be included or excluded from Conditional Access policies. Azure Active Directory evaluates all policies and ensures that all requirements are met before granting access.
2121

2222
> [!VIDEO https://www.youtube.com/embed/5DsW1hB3Jqs]
2323
@@ -42,9 +42,9 @@ The following options are available to include when creating a Conditional Acces
4242
- Other external users, or users not represented by the other user type selections
4343
- One or more tenants can be specified for the selected user type(s), or you can specify all tenants.
4444
- Directory roles
45-
- Allows administrators to select specific [built-in Azure AD directory roles](../roles/permissions-reference.md) used to determine policy assignment. For example, organizations may create a more restrictive policy on users assigned the Global Administrator role. Other role types aren't supported, including administrative unit-scoped roles and custom roles.
45+
- Allows administrators to select specific [built-in Azure AD directory roles](../roles/permissions-reference.md) used to determine policy assignment. For example, organizations may create a more restrictive policy on users actively assigned the Global Administrator role. Other role types aren't supported, including administrative unit-scoped roles and custom roles.
4646
- Users and groups
47-
- Allows targeting of specific sets of users. For example, organizations can select a group that contains all members of the HR department when an HR app is selected as the cloud app. A group can be any type of user group in Azure AD, including dynamic or assigned security and distribution groups. Policy will be applied to nested users and groups.
47+
- Allows targeting of specific sets of users. For example, organizations can select a group that contains all members of the HR department when an HR app is selected as the cloud app. A group can be any type of user group in Azure AD, including dynamic or assigned security and distribution groups. Policy is applied to nested users and groups.
4848

4949
> [!IMPORTANT]
5050
> When selecting which users and groups are included in a Conditional Access Policy, there is a limit to the number of individual users that can be added directly to a Conditional Access policy. If there are a large amount of individual users that are needed to be added to directly to a Conditional Access policy, we recommend placing the users in a group, and assigning the group to the Conditional Access policy instead.
@@ -60,7 +60,7 @@ The following options are available to include when creating a Conditional Acces
6060
6161
## Exclude users
6262

63-
When organizations both include and exclude a user or group the user or group is excluded from the policy, as an exclude action overrides an include in policy. Exclusions are commonly used for emergency access or break-glass accounts. More information about emergency access accounts and why they're important can be found in the following articles:
63+
When organizations both include and exclude a user or group, the user or group is excluded from the policy. The exclude action overrides the include action in policy. Exclusions are commonly used for emergency access or break-glass accounts. More information about emergency access accounts and why they're important can be found in the following articles:
6464

6565
* [Manage emergency access accounts in Azure AD](../roles/security-emergency-access.md)
6666
* [Create a resilient access control management strategy with Azure Active Directory](../authentication/concept-resilient-controls.md)
@@ -79,15 +79,15 @@ The following options are available to exclude when creating a Conditional Acces
7979
- Directory roles
8080
- Allows administrators to select specific Azure AD directory roles used to determine assignment. For example, organizations may create a more restrictive policy on users assigned the Global Administrator role.
8181
- Users and groups
82-
- Allows targeting of specific sets of users. For example, organizations can select a group that contains all members of the HR department when an HR app is selected as the cloud app. A group can be any type of group in Azure AD, including dynamic or assigned security and distribution groups. Policy will be applied to nested users and groups.
82+
- Allows targeting of specific sets of users. For example, organizations can select a group that contains all members of the HR department when an HR app is selected as the cloud app. A group can be any type of group in Azure AD, including dynamic or assigned security and distribution groups. Policy is applied to nested users and groups.
8383

8484
### Preventing administrator lockout
8585

86-
To prevent an administrator from locking themselves out of their directory when creating a policy applied to **All users** and **All apps**, they'll see the following warning.
86+
To prevent administrator lockout, when creating a policy applied to **All users** and **All apps**, the following warning appears.
8787

8888
> Don't lock yourself out! We recommend applying a policy to a small set of users first to verify it behaves as expected. We also recommend excluding at least one administrator from this policy. This ensures that you still have access and can update a policy if a change is required. Please review the affected users and apps.
8989
90-
By default the policy will provide an option to exclude the current user from the policy, but this default can be overridden by the administrator as shown in the following image.
90+
By default the policy provides an option to exclude the current user from the policy, but an administrator can override as shown in the following image.
9191

9292
![Warning, don't lock yourself out!](./media/concept-conditional-access-users-groups/conditional-access-users-and-groups-lockout-warning.png)
9393

articles/active-directory/enterprise-users/licensing-powershell-graph-examples.md

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -210,45 +210,44 @@ if ($count -le 0) {
210210
Connect-MgGraph -Scopes "User.Read.All"
211211
212212
# Get all users using Get-MgUser with a filter
213-
$users = Get-MgUser -Filter "accountEnabled eq true"
214-
215-
# Create a hash table to store the SKU IDs for each user
216-
$skus = @{}
213+
$users = Get-MgUser -All -Property AssignedLicenses, LicenseAssignmentStates, DisplayName | Select-Object DisplayName, AssignedLicenses -ExpandProperty LicenseAssignmentStates | Select-Object DisplayName, AssignedByGroup, State, Error, SkuId
217214
218-
# Loop through all users and get their license details using Get-MgUserLicenseDetail
219-
foreach ($user in $users) {
220-
$userSkus = @{}
215+
$output = @()
221216
222-
# Get the user's license details using Get-MgUserLicenseDetail
223-
$licenseDetails = Get-MgUserLicenseDetail -UserId $user.Id
224217
225-
# Loop through all the licenses and add the SKU ID to the hash table
226-
foreach ($license in $licenseDetails) {
227-
$userSkus[$license.SkuId] = @{
228-
AssignedDirectly = $license.AssignedLicenses.Count -gt 0
229-
AssignedThroughGroups = $license.AssignedLicensesViaGroup.Count -gt 0
218+
# Loop through all users and get the AssignedByGroup Details which will list the groupId
219+
foreach ($user in $users) {
220+
# Get the group ID if AssignedByGroup is not empty
221+
if ($user.AssignedByGroup -ne $null)
222+
{
223+
$groupId = $user.AssignedByGroup
224+
$groupName = Get-MgGroup -GroupId $groupId | Select-Object -ExpandProperty DisplayName
225+
Write-Host "$($user.DisplayName) is assigned by group - $($groupName)" -ErrorAction SilentlyContinue -ForegroundColor Yellow
226+
$result = [pscustomobject]@{
227+
User=$user.DisplayName
228+
AssignedByGroup=$true
229+
GroupName=$groupName
230+
GroupId=$groupId
230231
}
232+
$output += $result
231233
}
232234
233-
# Add the user's SKU IDs to the main hash table
234-
$skus[$user.Id] = $userSkus
235-
}
236-
237-
# Display the SKU IDs for each user
238-
foreach ($userId in $skus.Keys) {
239-
$user = Get-MgUser -Filter "userPrincipalName eq '$userId'"
240-
Write-Host "User: $($user.UserPrincipalName)"
241-
Write-Host "SKU IDs:"
242-
243-
foreach ($skuId in $skus[$userId].Keys) {
244-
$sku = Get-MgSubscribedSku -SubscribedSkuId $skuId
245-
Write-Host "- $($sku.DisplayName)"
246-
Write-Host " Assigned directly: $($skus[$userId][$skuId].AssignedDirectly)"
247-
Write-Host " Assigned through groups: $($skus[$userId][$skuId].AssignedThroughGroups)"
235+
else {
236+
$result = [pscustomobject]@{
237+
User=$user.DisplayName
238+
AssignedByGroup=$false
239+
GroupName="NA"
240+
GroupId="NA"
241+
}
242+
$output += $result
243+
Write-Host "$($user.DisplayName) is Not assigned by group" -ErrorAction SilentlyContinue -ForegroundColor Cyan
248244
}
249-
250-
Write-Host ""
245+
246+
251247
}
248+
249+
# Display the result
250+
$output | ft
252251
```
253252

254253

articles/active-directory/governance/licensing-fundamentals.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,24 +77,24 @@ The following table shows what features are available with each license. Note t
7777
|Automated user provisioning to SaaS apps|x|x|x|x|
7878
|Automated group provisioning to SaaS apps||x|x|x|
7979
|Automated provisioning to on-premises apps||x|x|x|
80-
|CA - Terms of use attestation||x|x|x|
81-
|Entitlement Management (EM) - Basic entitlement management|||x|x|
82-
|EM CA Scoping|||x|x|
83-
|EM MyAccess Search|||x|x|
84-
|EM with Verified ID||||x|
85-
|EM + Custom Extensions (Logic Apps)||||x|
86-
|EM + Auto Assignment Policies||||x|
87-
|EM - Invite+Assign Any||||x|
88-
|EM - Guest Conversion API||||x|
89-
|EM - Grace Period - Public Preview|||x|x|
90-
|EM - Sponsors Policy - Public Preview||||x|
80+
|Conditional Access - Terms of use attestation||x|x|x|
81+
|Entitlement management - Basic entitlement management|||x|x|
82+
|Entitlement management - Conditional Access Scoping|||x|x|
83+
|Entitlement management MyAccess Search|||x|x|
84+
|Entitlement management with Verified ID||||x|
85+
|Entitlement management + Custom Extensions (Logic Apps)||||x|
86+
|Entitlement management + Auto Assignment Policies||||x|
87+
|Entitlement management - Invite+Assign Any||||x|
88+
|Entitlement management - Guest Conversion API||||x|
89+
|Entitlement management - Grace Period - Public Preview|||x|x|
90+
|Entitlement management - Sponsors Policy - Public Preview||||x|
9191
|Privileged Identity Management (PIM)|||x|x|
9292
|PIM For Groups|||x|x|
9393
|PIM CA Controls|||x|x|
94-
|Access Reviews (AR) - Basic access certifications and reviews|||x|x|
95-
|AR - PIM For Groups - Public Preview||||x|
96-
|AR - Inactive Users||||x|
97-
|AR - Machine learning assisted access certifications and reviews||||x|
94+
|Access Reviews - Basic access certifications and reviews|||x|x|
95+
|Access reviews - PIM For Groups - Public Preview||||x|
96+
|Access reviews - Inactive Users||||x|
97+
|Access reviews - Machine learning assisted access certifications and reviews||||x|
9898
|Lifecycle Workflows (LCW) J/M/L||||x|
9999
|LCW + Custom Extensions (Logic Apps)||||x|
100100
|Identity governance dashboard - Public Preview||x|x|x|

articles/communication-services/concepts/voice-video-calling/includes/user-facing-diagnostics-android.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ ms.subservice: calling
1717
User-facing diagnostics is an extended feature of the core `Call` API and allows you to diagnose an active call.
1818

1919
```java
20-
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.DIAGNOSTICS_CALL);
20+
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
2121
```
2222

2323
## User Facing Diagnostic events
2424

2525
- Get feature object and add listeners to the diagnostics events.
2626

2727
```java
28-
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.DIAGNOSTICS_CALL);
28+
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
2929

3030
/* NetworkDiagnostic */
3131
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
@@ -34,36 +34,36 @@ FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
3434
};
3535

3636
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
37-
networkDiagnostics.addOnNoNetworkChangedListener(listener);
37+
networkDiagnostics.addOnNetworkUnreachableChangedListener(listener);
3838

3939
// To remove listener for network quality event
40-
networkDiagnostics.removeOnNoNetworkChangedListener(listener);
40+
networkDiagnostics.removeOnNetworkUnreachableChangedListener(listener);
4141

4242
// Quality Diagnostics
43-
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.DIAGNOSTICS_CALL);
43+
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
4444
QualityDiagnosticChangedListener listener = (QualityDiagnosticChangedEvent args) -> {
4545
DiagnosticQuality diagnosticQuality = args.getValue();
4646
// Handle new value for network reconnect diagnostic.
4747
};
4848

4949
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetworkDiagnostics();
50-
networkDiagnostics.addOnNetworkReconnectChangedListener(listener);
50+
networkDiagnostics.addOnNetworkReconnectionQualityChangedListener(listener);
5151

5252
// To remove listener for media flag event
53-
networkDiagnostics.removeOnNetworkReconnectChangedListener(listener);
53+
networkDiagnostics.removeOnNetworkReconnectionQualityChangedListener(listener);
5454

5555
/* MediaDiagnostic */
56-
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.DIAGNOSTICS_CALL);
56+
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
5757
FlagDiagnosticChangedListener listener = (FlagDiagnosticChangedEvent args) -> {
5858
Boolean mediaValue = args.getValue();
5959
// Handle new value for speaker not functioning diagnostic.
6060
};
6161

6262
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
63-
mediaDiagnostics.addOnSpeakerNotFunctioningChangedListener(listener);
63+
mediaDiagnostics.addOnIsSpeakerNotFunctioningChangedListener(listener);
6464

6565
// To remove listener for media flag event
66-
mediaDiagnostics.removeOnSpeakerNotFunctioningChangedListener(listener);
66+
mediaDiagnostics.removeOnIsSpeakerNotFunctioningChangedListener(listener);
6767

6868
```
6969

@@ -72,15 +72,15 @@ mediaDiagnostics.removeOnSpeakerNotFunctioningChangedListener(listener);
7272
- Get the latest diagnostic values that were raised in current call. If we still didn't receive a value for the diagnostic, an exception is thrown.
7373

7474
```java
75-
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.DIAGNOSTICS_CALL);
75+
DiagnosticsCallFeature diagnosticsCallFeature = call.feature(Features.LOCAL_USER_DIAGNOSTICS);
7676
NetworkDiagnostics networkDiagnostics = diagnosticsCallFeature.getNetwork();
7777
MediaDiagnostics mediaDiagnostics = diagnosticsCallFeature.getMedia();
7878

79-
NetworkDiagnosticValues latestNetwork = networkDiagnostics.getLatest();
80-
Boolean lastNetworkValue = latestNetwork.isNoNetwork(); // null if there isn't a value for this diagnostic.
79+
NetworkDiagnosticValues latestNetwork = networkDiagnostics.getLatestDiagnostics();
80+
Boolean lastNetworkValue = latestNetwork.isNetworkUnavailable(); // null if there isn't a value for this diagnostic.
8181
DiagnosticQuality lastReceiveQualityValue = latestNetwork.getNetworkReceiveQuality(); // UNKNOWN if there isn't a value for this diagnostic.
8282

83-
MediaDiagnosticValues latestMedia = networkDiagnostics.getLatest();
83+
MediaDiagnosticValues latestMedia = networkDiagnostics.getLatestDiagnostics();
8484
Boolean lastSpeakerNotFunctionValue = latestMedia.isSpeakerNotFunctioning(); // null if there isn't a value for this diagnostic.
8585

8686
// Use the last values ...

0 commit comments

Comments
 (0)