Skip to content

Commit b5e4637

Browse files
authored
Merge pull request #191436 from MicrosoftDocs/main
3/11 AM Publish
2 parents 15cdd9f + b959bd3 commit b5e4637

File tree

174 files changed

+732
-2744
lines changed

Some content is hidden

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

174 files changed

+732
-2744
lines changed

.openpublishing.redirection.azure-monitor.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,22 @@
2424
"source_path_from_root": "/articles/azure-monitor/agents/data-collection-rule-overview.md",
2525
"redirect_url": "/azure/azure-monitor/essentials/data-collection-rule-overview",
2626
"redirect_document_id": false
27+
},
28+
{
29+
"source_path_from_root": "/articles/azure-monitor/app/change-analysis.md",
30+
"redirect_url": "/azure/azure-monitor/change/change-analysis",
31+
"redirect_document_id": false
32+
},
33+
{
34+
"source_path_from_root": "/articles/azure-monitor/app/change-analysis-visualizations.md",
35+
"redirect_url": "/azure/azure-monitor/change/change-analysis-visualizations",
36+
"redirect_document_id": false
37+
},
38+
{
39+
"source_path_from_root": "/articles/azure-monitor/app/change-analysis-troubleshoot.md",
40+
"redirect_url": "/azure/azure-monitor/change/change-analysis-troubleshoot",
41+
"redirect_document_id": false
2742
}
43+
2844
]
2945
}

.openpublishing.redirection.json

Lines changed: 93 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5982,7 +5982,7 @@
59825982
"source_path_from_root": "/articles/azure-functions/functions-test-a-function.md",
59835983
"redirect_url": "/azure/azure-functions/supported-languages",
59845984
"redirect_document_id": false
5985-
},
5985+
},
59865986
{
59875987
"source_path_from_root": "/articles/azure-app-configuration/quickstart-azure-function-csharp.md",
59885988
"redirect_url": "/azure/azure-app-configuration/quickstart-azure-functions-csharp",
@@ -7787,7 +7787,7 @@
77877787
"source_path_from_root": "/articles/cognitive-services/LUIS/luis-tutorial-review-endpoint-utterances.md",
77887788
"redirect_url": "/azure/cognitive-services/LUIS/how-to/improve-application",
77897789
"redirect_document_id": false
7790-
},
7790+
},
77917791
{
77927792
"source_path_from_root": "/articles/cognitive-services/LUIS/luis-concept-enterprise.md",
77937793
"redirect_url": "/azure/cognitive-services/LUIS/how-to/improve-application",
@@ -12088,7 +12088,6 @@
1208812088
"redirect_url": "/azure/azure-signalr/signalr-tutorial-authenticate-azure-functions",
1208912089
"redirect_document_id": true
1209012090
},
12091-
1209212091
{
1209312092
"source_path_from_root": "/articles/cognitive-services/form-recognizer/build-training-data-set.md",
1209412093
"redirect_url": "/azure/applied-ai-services/form-recognizer/build-training-data-set",
@@ -14669,7 +14668,7 @@
1466914668
"redirect_url": "/azure/data-explorer/manage-cluster-vertical-scaling",
1467014669
"redirect_document_id": false
1467114670
},
14672-
{
14671+
{
1467314672
"source_path_from_root": "/articles/postgresql/howto-manage-firewall-using-cli.md",
1467414673
"redirect_url": "/azure/postgresql/quickstart-create-server-database-azure-cli#configure-a-server-based-firewall-rule",
1467514674
"redirect_document_id": true
@@ -15188,7 +15187,7 @@
1518815187
"source_path_from_root": "/articles/defender-for-iot/device-builders/quickstart-azure-rtos-security-module.md",
1518915188
"redirect_url": "/azure/defender-for-iot/device-builders/how-to-quickstart-azure-rtos-security-module",
1519015189
"redirect_document_id": false
15191-
},
15190+
},
1519215191
{
1519315192
"source_path_from_root": "/articles/defender-for-iot/organizations/integration-cisco-ise-pxgrid.md",
1519415193
"redirect_url": "/azure/defender-for-iot/organizations/integration-forescout",
@@ -17733,7 +17732,7 @@
1773317732
"source_path_from_root": "/articles/lab-services/class-type-ethical-hacking-virtualbox.md",
1773417733
"redirect_url": "/azure/lab-services/class-types",
1773517734
"redirect_document_id": false
17736-
},
17735+
},
1773717736
{
1773817737
"source_path_from_root": "/articles/lab-services/classroom-labs/class-type-jupyter-notebook.md",
1773917738
"redirect_url": "/azure/lab-services/class-type-jupyter-notebook",
@@ -26038,12 +26037,12 @@
2603826037
"source_path_from_root": "/articles/storage/blobs/storage-quickstart-blobs-javascript-client-libraries-legacy.md",
2603926038
"redirect_url": "/azure/storage/blobs/quickstart-blobs-javascript-browser",
2604026039
"redirect_document_id": false
26041-
},
26040+
},
2604226041
{
2604326042
"source_path_from_root": "/articles/storage/blobs/storage-quickstart-blobs-nodejs-legacy.md",
2604426043
"redirect_url": "/azure/storage/blobs/storage-quickstart-blobs-nodejs",
2604526044
"redirect_document_id": false
26046-
},
26045+
},
2604726046
{
2604826047
"source_path_from_root": "/articles/storage/blobs/storage-quickstart-blobs-nodejs-v10.md",
2604926048
"redirect_url": "/azure/storage/blobs/storage-quickstart-blobs-nodejs",
@@ -33299,7 +33298,7 @@
3329933298
"redirect_url": "https://azure.microsoft.com/services/cognitive-services/",
3330033299
"redirect_document_id": false
3330133300
},
33302-
{
33301+
{
3330333302
"source_path_from_root": "/articles/machine-learning/studio/whats-new.md",
3330433303
"redirect_url": "https://azure.microsoft.com/updates/?product=machine-learning-studio",
3330533304
"redirect_document_id": false
@@ -43955,34 +43954,94 @@
4395543954
"redirect_document_id": false
4395643955
},
4395743956
{
43958-
"source_path_from_root": "/articles/azure/virtual-desktop/azure-advisor.md",
43959-
"redirect_url": "/azure/advisor/advisor-overview",
43960-
"redirect_document_id": false
43957+
"source_path_from_root": "/articles/azure/virtual-desktop/azure-advisor.md",
43958+
"redirect_url": "/azure/advisor/advisor-overview",
43959+
"redirect_document_id": false
4396143960
},
4396243961
{
4396343962
"source_path_from_root": "/articles/azure/cognitive-services/translator/tutorial-wpf-translation-csharp.md",
4396443963
"redirect_url": "/ai-builder/flow-text-translation?toc=/azure/cognitive-services/translator/toc.json&bc=/azure/cognitive-services/translator/breadcrumb/toc.json",
4396543964
"redirect_document_id": false
43966-
},
43967-
{
43968-
"source_path_from_root": "/articles/azure/cognitive-services/translator/tutorial-build-flask-app-translation-synthesis.md",
43969-
"redirect_url": "/learn/modules/translate-text-with-translator-service?toc=/azure/cognitive-services/translator/toc.json&bc=/azure/cognitive-services/translator/breadcrumb/toc.json",
43970-
"redirect_document_id": false
43971-
},
43972-
{
43973-
"source_path": "articles/machine-learning/classic/deploy-with-resource-manager-template.md",
43974-
"redirect_url": "/previous-versions/azure/machine-learning/classic/deploy-with-resource-manager-template",
43975-
"redirect_document_id": false
43976-
},
43977-
{
43978-
"source_path_from_root": "/articles/governance/policy/how-to/guest-configuration-create-group-policy.md",
43979-
"redirect_url": "/azure/governance/policy/how-to/guest-configuration-create",
43980-
"redirect_document_id": false
43981-
},
43982-
{
43983-
"source_path_from_root": "/articles/virtual-desktop/compare-virtual-desktop-windows-365.md",
43984-
"redirect_url": "/azure/virtual-desktop/overview",
43985-
"redirect_document_id": false
43986-
}
43965+
},
43966+
{
43967+
"source_path_from_root": "/articles/azure/cognitive-services/translator/tutorial-build-flask-app-translation-synthesis.md",
43968+
"redirect_url": "/learn/modules/translate-text-with-translator-service?toc=/azure/cognitive-services/translator/toc.json&bc=/azure/cognitive-services/translator/breadcrumb/toc.json",
43969+
"redirect_document_id": false
43970+
},
43971+
{
43972+
"source_path": "articles/machine-learning/classic/deploy-with-resource-manager-template.md",
43973+
"redirect_url": "/previous-versions/azure/machine-learning/classic/deploy-with-resource-manager-template",
43974+
"redirect_document_id": false
43975+
},
43976+
{
43977+
"source_path_from_root": "/articles/governance/policy/how-to/guest-configuration-create-group-policy.md",
43978+
"redirect_url": "/azure/governance/policy/how-to/guest-configuration-create",
43979+
"redirect_document_id": false
43980+
},
43981+
{
43982+
"source_path_from_root": "/articles/virtual-desktop/compare-virtual-desktop-windows-365.md",
43983+
"redirect_url": "/azure/virtual-desktop/overview",
43984+
"redirect_document_id": false
43985+
},
43986+
{
43987+
"source_path_from_root": "/articles/governance/blueprints/samples/cis-azure-1-1-0.md",
43988+
"redirect_url": "/azure/governance/policy/samples/cis-azure-1-1-0",
43989+
"redirect_document_id": false
43990+
},
43991+
{
43992+
"source_path_from_root": "/articles/governance/blueprints/samples/cis-azure-1-3-0.md",
43993+
"redirect_url": "/azure/governance/policy/samples/cis-azure-1-3-0",
43994+
"redirect_document_id": false
43995+
},
43996+
{
43997+
"source_path_from_root": "/articles/governance/blueprints/samples/cmmc-l3.md",
43998+
"redirect_url": "/azure/governance/policy/samples/cmmc-l3",
43999+
"redirect_document_id": false
44000+
},
44001+
{
44002+
"source_path_from_root": "/articles/governance/blueprints/samples/hipaa-hitrust-9-2.md",
44003+
"redirect_url": "/azure/governance/policy/samples/hipaa-hitrust-9-2",
44004+
"redirect_document_id": false
44005+
},
44006+
{
44007+
"source_path_from_root": "/articles/governance/blueprints/samples/irs-1075-sept2016",
44008+
"redirect_url": "/azure/governance/policy/samples/irs-1075-sept2016",
44009+
"redirect_document_id": false
44010+
},
44011+
{
44012+
"source_path_from_root": "/articles/governance/blueprints/samples/nist-sp-800-171-r2",
44013+
"redirect_url": "/azure/governance/policy/samples/nist-sp-800-171-r2",
44014+
"redirect_document_id": false
44015+
},
44016+
{
44017+
"source_path_from_root": "/articles/governance/blueprints/samples/media/control-mapping.md",
44018+
"redirect_url": "/azure/governance/policy/samples",
44019+
"redirect_document_id": false
44020+
},
44021+
{
44022+
"source_path_from_root": "/articles/governance/blueprints/samples/media/deploy.md",
44023+
"redirect_url": "/azure/governance/policy/samples",
44024+
"redirect_document_id": false
44025+
},
44026+
{
44027+
"source_path_from_root": "/articles/governance/blueprints/samples/media/index.md",
44028+
"redirect_url": "/azure/governance/policy/samples",
44029+
"redirect_document_id": false
44030+
},
44031+
{
44032+
"source_path_from_root": "/articles/governance/blueprints/samples/pci-dss-3.2.1/control-mapping.md",
44033+
"redirect_url": "/azure/governance/policy/samples",
44034+
"redirect_document_id": false
44035+
},
44036+
{
44037+
"source_path_from_root": "/articles/governance/blueprints/samples/pci-dss-3.2.1/deploy.md",
44038+
"redirect_url": "/azure/governance/policy/samples",
44039+
"redirect_document_id": false
44040+
},
44041+
{
44042+
"source_path_from_root": "/articles/governance/blueprints/samples/pci-dss-3.2.1/index.md",
44043+
"redirect_url": "/azure/governance/policy/samples",
44044+
"redirect_document_id": false
44045+
}
4398744046
]
43988-
}
44047+
}

articles/active-directory/develop/TOC.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,10 @@
127127
href: zero-trust-for-developers.md
128128
- name: Best practices for least privileged access for apps
129129
href: secure-least-privileged-access.md
130-
- name: Security best practices for Azure AD application registration
130+
- name: Security best practices for Azure AD app registration
131131
href: security-best-practices-for-app-registration.md
132+
- name: Secure access control using groups in Azure AD
133+
href: secure-group-access-control.md
132134
- name: Automatic user provisioning (SCIM)
133135
href: ../app-provisioning/user-provisioning.md?toc=/azure/active-directory/develop/toc.json&bc=/azure/active-directory/develop/breadcrumb/toc.json
134136
- name: Use the Microsoft Graph API
23.9 KB
Loading
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
title: Secure access control using groups in Azure AD - Microsoft identity platform
3+
description: Learn about how groups are used to securely control access to resources in Azure AD.
4+
services: active-directory
5+
author: chrischiedo
6+
manager: CelesteDG
7+
8+
ms.service: active-directory
9+
ms.subservice: develop
10+
ms.topic: conceptual
11+
ms.workload: identity
12+
ms.date: 2/21/2022
13+
ms.custom: template-concept
14+
ms.author: cchiedo
15+
ms.reviewer: jodah, marsma
16+
17+
# Customer intent: As a developer, I want to learn how to most securely use Azure AD groups to control access to resources.
18+
---
19+
20+
# Secure access control using groups in Azure AD
21+
22+
Azure Active Directory (Azure AD) allows the use of groups to manage access to resources in an organization. You should use groups for access control when you want to manage and minimize access to applications. When groups are used, only members of those groups can access the resource. Using groups also allows you to benefit from several Azure AD group management features, such as attribute-based dynamic groups, external groups synced from on-premises Active Directory, and Administrator managed or self-service managed groups. To learn more about the benefits of groups for access control, see [manage access to an application](../manage-apps/what-is-access-management.md).
23+
24+
While developing an application, you can authorize access with the [groups claim](/graph/api/resources/application?view=graph-rest-1.0#properties&preserve-view=true). To learn more, see how to [configure group claims for applications with Azure AD](../hybrid/how-to-connect-fed-group-claims.md).
25+
26+
Today, many applications select a subset of groups with the *securityEnabled* flag set to *true* to avoid scale challenges, that is, to reduce the number of groups returned in the token. Setting the *securityEnabled* flag to be true for a group doesn't guarantee that the group is securely managed. Therefore, we suggest following the best practices described below:
27+
28+
29+
## Best practices to mitigate risk
30+
31+
This table presents several security best practices for security groups and the potential security risks each practice mitigates.
32+
33+
|Security best practice |Security risk mitigated |
34+
|--------------------------|---------------------------|
35+
|**Ensure resource owner and group owner are the same principal**. Applications should build their own group management experience and create new groups to manage access. For example, an application can create groups with *Group. Create* permission and add itself as the owner of the group. This way the application has control over its groups without being over privileged to modify other groups in the tenant.|When group owners and resource owners are different users or entities, group owners can add users to the group who aren't supposed to get access to the resource and thus give access to the resource unintentionally.|
36+
|**Build an implicit contract between resource owner(s) and group owner(s)**. The resource owner and the group owner should align on the group purpose, policies, and members that can be added to the group to get access to the resource. This level of trust is non-technical and relies on human or business contract.|When group owners and resource owners have different intentions, the group owner may add users to the group the resource owner didn't intend on giving access to. This can result in unnecessary and potentially risky access.|
37+
|**Use private groups for access control**. Microsoft 365 groups are managed by the [visibility concept](/graph/api/resources/group?view=graph-rest-1.0#group-visibility-options&preserve-view=true). This property controls the join policy of the group and visibility of group resources. Security groups have join policies that either allow anyone to join or require owner approval. On-premises-synced groups can also be public or private. When they're used to give access to a resource in the cloud, users joining this group on-premises can get access to the cloud resource as well.|When you use a *Public* group for access control, any member can join the group and get access to the resource. When a *Public* group is used to give access to an external resource, the risk of elevation of privilege exists.|
38+
|**Group nesting**. When you use a group for access control and it has other groups as its members, members of the subgroups can get access to the resource. In this case, there are multiple group owners - owners of the parent group and the subgroups.|Aligning with multiple group owners on the purpose of each group and how to add the right members to these groups is more complex and more prone to accidental grant of access. Therefore, you should limit the number of nested groups or don't use them at all if possible.|
39+
40+
## Next steps
41+
42+
For more information about groups in Azure AD, see the following:
43+
44+
- [Manage app and resource access using Azure Active Directory groups](../fundamentals/active-directory-manage-groups.md)
45+
- [Access with Azure Active Directory groups](/azure/devops/organizations/accounts/manage-azure-active-directory-groups)
46+
- [Restrict your Azure AD app to a set of users in an Azure AD tenant](./howto-restrict-your-app-to-a-set-of-users.md)

articles/active-directory/hybrid/concept-azure-ad-connect-sync-architecture.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ When sync engine finds a staging object that matches by distinguished name but n
170170
* If the object located in the connector space has no anchor, then sync engine removes this object from the connector space and marks the metaverse object it is linked to as **retry provisioning on next synchronization run**. Then it creates the new import object.
171171
* If the object located in the connector space has an anchor, then sync engine assumes that this object has either been renamed or deleted in the connected directory. It assigns a temporary, new distinguished name for the connector space object so that it can stage the incoming object. The old object then becomes **transient**, waiting for the Connector to import the rename or deletion to resolve the situation.
172172

173+
Transient objects are not always a problem, and you might see them even in a healthy environment. With [Azure AD Connect sync V2 endpoint API](how-to-connect-sync-endpoint-api-v2.md), transient objects should auto-resolve in subsequent delta synchronization cycles. A common example where you might find transient objects being generated occurs on Azure AD Connect servers installed in staging mode, when an admin permanently deletes an object directly in Azure AD using PowerShell and later synchronizes the object again.
174+
173175
If sync engine locates a staging object that corresponds to the object specified in the Connector, it determines what kind of changes to apply. For example, sync engine might rename or delete the object in the connected data source, or it might only update the object’s attribute values.
174176

175177
Staging objects with updated data are marked as pending import. Different types of pending imports are available. Depending on the result of the import process, a staging object in the connector space has one of the following pending import types:

articles/active-directory/managed-identities-azure-resources/managed-identities-status.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ The following Azure services support managed identities for Azure resources:
3434
| Azure Automation | [Azure Automation account authentication overview](../../automation/automation-security-overview.md#managed-identities) |
3535
| Azure Batch | [Configure customer-managed keys for your Azure Batch account with Azure Key Vault and Managed Identity](../../batch/batch-customer-managed-key.md) </BR> [Configure managed identities in Batch pools](../../batch/managed-identity-pools.md) |
3636
| Azure Blueprints | [Stages of a blueprint deployment](../../governance/blueprints/concepts/deployment-stages.md) |
37+
| Azure Cache for Redis | [Managed identity for storage accounts with Azure Cache for Redis](../../azure-cache-for-redis/cache-managed-identity.md) |
3738
| Azure Container Instance | [How to use managed identities with Azure Container Instances](../../container-instances/container-instances-managed-identity.md) |
3839
| Azure Container Registry | [Use an Azure-managed identity in ACR Tasks](../../container-registry/container-registry-tasks-authentication-managed-identity.md) |
3940
| Azure Cognitive Services | [Configure customer-managed keys with Azure Key Vault for Cognitive Services](../../cognitive-services/encryption/cognitive-services-encryption-keys-portal.md) |

0 commit comments

Comments
 (0)