Updates from: 08/15/2023 01:45:33
Service Microsoft Docs article Related commit history on GitHub Change details
active-directory-b2c Partner Nok Nok https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory-b2c/partner-nok-nok.md
To get started, you need:
* If you don't have one, get a [Azure free account](https://azure.microsoft.com/free/) * An Azure AD B2C tenant linked to the Azure subscription * [Tutorial: Create an Azure Active Directory B2C tenant](tutorial-create-tenant.md)
-* Go to [noknok.com](https://noknok.com/products/strong-authentication-service/). On the top menu, select **Demo**.
+* Go to [noknok.com](https://noknok.com/). On the top menu, select **Demo**.
## Scenario description
active-directory Sap Successfactors Integration Reference https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/app-provisioning/sap-successfactors-integration-reference.md
# How Azure Active Directory provisioning integrates with SAP SuccessFactors
-[Azure Active Directory user provisioning service](../app-provisioning/user-provisioning.md) integrates with [SAP SuccessFactors Employee Central](https://www.successfactors.com/products-services/core-hr-payroll/employee-central.html) to manage the identity life cycle of users. Azure Active Directory offers three prebuilt integrations:
+[Azure Active Directory user provisioning service](../app-provisioning/user-provisioning.md) integrates with [SAP SuccessFactors Employee Central](https://www.sap.com/products/hcm/employee-central-payroll.html) to manage the identity life cycle of users. Azure Active Directory offers three prebuilt integrations:
* [SuccessFactors to on-premises Active Directory user provisioning](../saas-apps/sap-successfactors-inbound-provisioning-tutorial.md) * [SuccessFactors to Azure Active Directory user provisioning](../saas-apps/sap-successfactors-inbound-provisioning-cloud-only-tutorial.md)
If you want to exclude processing of prehires in the Onboarding module, update y
1. Save the mapping and validate that the scoping filter works using provisioning on demand. ### Enabling OData API Audit logs in SuccessFactors
-The Azure AD SuccessFactors connector uses SuccessFactors OData API to retrieve changes and provision users. If you observe issues with the provisioning service and want to confirm what data was retrieved from SuccessFactors, you can enable OData API Audit logs in SuccessFactors. To enable audit logs, follow the steps documented in [SAP support note 2680837](https://userapps.support.sap.com/sap/support/knowledge/en/2680837). Retrieve the request payload sent by Azure AD from the audit logs. To troubleshoot, you can copy this request payload in a tool like [Postman](https://www.postman.com/downloads/), set it up to use the same API user that is used by the connector and see if it returns the desired changes from SuccessFactors.
+The Azure AD SuccessFactors connector uses SuccessFactors OData API to retrieve changes and provision users. If you observe issues with the provisioning service and want to confirm what data was retrieved from SuccessFactors, you can enable OData API Audit logs in SuccessFactors. Retrieve the request payload sent by Azure AD from the audit logs. To troubleshoot, you can copy this request payload in a tool like [Postman](https://www.postman.com/downloads/), set it up to use the same API user that is used by the connector and see if it returns the desired changes from SuccessFactors.
## Writeback scenarios This section covers different write-back scenarios. It recommends configuration approaches based on how email and phone number is set up in SuccessFactors.
active-directory Skip Out Of Scope Deletions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/app-provisioning/skip-out-of-scope-deletions.md
This article describes how to use the Microsoft Graph API and the Microsoft Grap
* If ***SkipOutOfScopeDeletions*** is set to 0 (false), accounts that go out of scope are disabled in the target. * If ***SkipOutOfScopeDeletions*** is set to 1 (true), accounts that go out of scope aren't disabled in the target. This flag is set at the *Provisioning App* level and can be configured using the Graph API.
-Because this configuration is widely used with the *Workday to Active Directory user provisioning* app, the following steps include screenshots of the Workday application. However, the configuration can also be used with *all other apps*, such as ServiceNow, Salesforce, and Dropbox and [cross-tenant synchronization](../multi-tenant-organizations/cross-tenant-synchronization-configure.md). To successfully complete this procedure, you must have first set up app provisioning for the app. Each app has its own configuration article. For example, to configure the Workday application, see [Tutorial: Configure Workday to Azure AD user provisioning](../saas-apps/workday-inbound-cloud-only-tutorial.md).
+Because this configuration is widely used with the *Workday to Active Directory user provisioning* app, the following steps include screenshots of the Workday application. However, the configuration can also be used with *all other apps*, such as ServiceNow, Salesforce, and Dropbox. To successfully complete this procedure, you must have first set up app provisioning for the app. Each app has its own configuration article. For example, to configure the Workday application, see [Tutorial: Configure Workday to Azure AD user provisioning](../saas-apps/workday-inbound-cloud-only-tutorial.md). SkipOutOfScopeDeletions does not work for cross-tenant synchronization.
## Step 1: Retrieve your Provisioning App Service Principal ID (Object ID)
active-directory Application Proxy Add On Premises Application https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/app-proxy/application-proxy-add-on-premises-application.md
To use Application Proxy, you need a Windows server running Windows Server 2012
For high availability in your production environment, we recommend having more than one Windows server. For this tutorial, one Windows server is sufficient. > [!IMPORTANT]
-> If you are installing the connector on Windows Server 2019, you must disable HTTP2 protocol support in the WinHttp component for Kerberos Constrained Delegation to properly work. This is disabled by default in earlier versions of supported operating systems. Adding the following registry key and restarting the server disables it on Windows Server 2019. Note that this is a machine-wide registry key.
+> **.NET Framework**
+>
+> You must have .NET version 4.7.1 or higher to install, or upgrade, Application Proxy version 1.5.3437.0 or later. Windows Server 2012 R2 and Windows Server 2016 may not have this by default.
+>
+> See [How to: Determine which .NET Framework versions are installed](/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed) for more information.
+>
+> **HTTP 2.0**
+>
+> If you are installing the connector on Windows Server 2019, you must disable HTTP2 protocol support in the WinHttp component for Kerberos Constrained Delegation to properly work. This is disabled by default in earlier versions of supported operating systems. Adding the following registry key and restarting the server disables it on Windows Server 2019. Note that this is a machine-wide registry key.
> > ``` > Windows Registry Editor Version 5.00
active-directory Application Proxy Configure Complex Application https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/app-proxy/application-proxy-configure-complex-application.md
This article provides you with the information you need to configure wildcard ap
## Pre-requisites Before you get started with Application Proxy Complex application scenario apps, make sure your environment is ready with the following settings and configurations:-- You need to enable Application Proxy and install a connector that has line of site to your applications. See the tutorial [Add an on-premises application for remote access through Application Proxy](application-proxy-add-on-premises-application.md#add-an-on-premises-app-to-azure-ad) to learn how to prepare your on-premises environment, install and register a connector, and test the connector.
+- You need to enable Application Proxy and install a connector that has line of sight to your applications. See the tutorial [Add an on-premises application for remote access through Application Proxy](application-proxy-add-on-premises-application.md#add-an-on-premises-app-to-azure-ad) to learn how to prepare your on-premises environment, install and register a connector, and test the connector.
## Configure application segment(s) for complex application.
active-directory Application Proxy Connectors https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/app-proxy/application-proxy-connectors.md
Previously updated : 11/17/2022 Last updated : 08/09/2023
To deploy Application Proxy successfully, you need at least one connector, but w
### Windows Server You need a server running Windows Server 2012 R2 or later on which you can install the Application Proxy connector. The server needs to connect to the Application Proxy services in Azure, and the on-premises applications that you're publishing.
+Starting from the version 1.5.3437.0, having the .NET version 4.7.1 or greater is required for successful installation (upgrade).
+ The server needs to have TLS 1.2 enabled before you install the Application Proxy connector. To enable TLS 1.2 on the server: 1. Set the following registry keys:
The server needs to have TLS 1.2 enabled before you install the Application Prox
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2] [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319] "SchUseStrongCrypto"=dword:00000001
+ [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.8.4250.0] "SchUseStrongCrypto"=dword:00000001
``` A `regedit` file you can use to set these values follows:
The server needs to have TLS 1.2 enabled before you install the Application Prox
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server] "DisabledByDefault"=dword:00000000 "Enabled"=dword:00000001
- [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
+ [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.8.4250.0]
"SchUseStrongCrypto"=dword:00000001 ```
active-directory Concept Authentication Passwordless https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/authentication/concept-authentication-passwordless.md
The following providers offer FIDO2 security keys of different form factors that
| [IDmelon Technologies Inc.](https://www.idmelon.com/#idmelon) | ![y] | ![y]| ![y]| ![y]| ![n] | | [Kensington](https://www.kensington.com/solutions/product-category/why-biometrics/) | ![y] | ![y]| ![n]| ![n]| ![n] | | [KONA I](https://konai.com/business/security/fido) | ![y] | ![n]| ![y]| ![y]| ![n] |
-| [Movenda](https://www.movenda.com/en/authentication/fido2/overview) | ![y] | ![n]| ![y]| ![y]| ![n] |
| [NeoWave](https://neowave.fr/en/products/fido-range/) | ![n] | ![y]| ![y]| ![n]| ![n] | | [Nymi](https://www.nymi.com/nymi-band) | ![y] | ![n]| ![y]| ![n]| ![n] | | [Octatco](https://octatco.com/) | ![y] | ![y]| ![n]| ![n]| ![n] |
active-directory Concept Fido2 Hardware Vendor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/authentication/concept-fido2-hardware-vendor.md
The following table lists partners who are Microsoft-compatible FIDO2 security k
| [IDmelon Technologies Inc.](https://www.idmelon.com/#idmelon) | ![y] | ![y]| ![y]| ![y]| ![n] | | [Kensington](https://www.kensington.com/solutions/product-category/why-biometrics/) | ![y] | ![y]| ![n]| ![n]| ![n] | | [KONA I](https://konai.com/business/security/fido) | ![y] | ![n]| ![y]| ![y]| ![n] |
-| [Movenda](https://www.movenda.com/en/authentication/fido2/overview) | ![y] | ![n]| ![y]| ![y]| ![n] |
| [NeoWave](https://neowave.fr/en/products/fido-range/) | ![n] | ![y]| ![y]| ![n]| ![n] | | [Nymi](https://www.nymi.com/nymi-band) | ![y] | ![n]| ![y]| ![n]| ![n] | | [Octatco](https://octatco.com/) | ![y] | ![y]| ![n]| ![n]| ![n] |
active-directory Tutorial Enable Sspr https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/authentication/tutorial-enable-sspr.md
In this tutorial you learn how to:
> * Set up authentication methods and registration options > * Test the SSPR process as a user
+> [!IMPORTANT]
+> In March 2023, we announced the deprecation of managing authentication methods in the legacy multifactor authentication (MFA) and self-service password reset (SSPR) policies. Beginning September 30, 2024, authentication methods can't be managed in these legacy MFA and SSPR policies. We recommend customers use the manual migration control to migrate to the Authentication methods policy by the deprecation date.
++ ## Video tutorial You can also follow along in a related video: [How to enable and configure SSPR in Azure AD](https://www.youtube.com/embed/rA8TvhNcCvQ?azure-portal=true).
active-directory Onboard Gcp https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/cloud-infrastructure-entitlement-management/onboard-gcp.md
Previously updated : 06/16/2023 Last updated : 08/09/2023 # Onboard a Google Cloud Platform (GCP) project
-This article describes how to onboard a Google Cloud Platform (GCP) project on Permissions Management.
+This article describes how to onboard a Google Cloud Platform (GCP) project in Microsoft Entra Permissions Management.
> [!NOTE] > A *global administrator* or *super admin* (an admin for all authorization system types) can perform the tasks in this article after the global administrator has initially completed the steps provided in [Enable Permissions Management on your Azure Active Directory tenant](onboard-enable-tenant.md). ## Explanation
-For GCP, permissions management is scoped to a *GCP project*. A GCP project is a logical collection of your resources in GCP, like a subscription in Azure, albeit with further configurations you can perform such as application registrations and OIDC configurations.
+For GCP, Permissions Management is scoped to a *GCP project*. A GCP project is a logical collection of your resources in GCP, like a subscription in Azure, but with further configurations you can perform such as application registrations and OIDC configurations.
<!-- Diagram from Gargi-->
-There are several moving parts across GCP and Azure, which are required to be configured before onboarding.
+There are several moving parts across GCP and Azure, which should be configured before onboarding.
* An Azure AD OIDC App * A Workload Identity in GCP
There are several moving parts across GCP and Azure, which are required to be co
- In the Permissions Management home page, select **Settings** (the gear icon), and then select the **Data Collectors** subtab.
-1. On the **Data Collectors** tab, select **GCP**, and then select **Create Configuration**.
+1. On the **Data Collectors** tab, select **GCP**, then select **Create Configuration**.
### 1. Create an Azure AD OIDC app.
There are several moving parts across GCP and Azure, which are required to be co
1. To create the app registration, copy the script and run it in your command-line app. > [!NOTE]
- > 1. To confirm that the app was created, open **App registrations** in Azure and, on the **All applications** tab, locate your app.
+ > 1. To confirm the app was created, open **App registrations** in Azure and, on the **All applications** tab, locate your app.
> 1. Select the app name to open the **Expose an API** page. The **Application ID URI** displayed in the **Overview** page is the *audience value* used while making an OIDC connection with your GCP account. > 1. Return to the Permissions Management window, and in the **Permissions Management Onboarding - Azure AD OIDC App Creation**, select **Next**.
Choose from three options to manage GCP projects.
#### Option 1: Automatically manage
-The automatically manage option allows projects to be automatically detected and monitored without extra configuration. Steps to detect list of projects and onboard for collection:
+The automatically manage option allows you to automatically detect and monitor projects without extra configuration. Steps to detect a list of projects and onboard for collection:
-1. Firstly, grant **Viewer** and **Security Reviewer** role to service account created in previous step at organization, folder or project scope.
+1. Grant **Viewer** and **Security Reviewer** roles to a service account created in the previous step at a project, folder or organization level.
-To enable controller mode 'On' for any projects, add following roles to the specific projects:
+To enable Controller mode **On** for any projects, add these roles to the specific projects:
- Role Administrators - Security Admin
-2. Once done, the steps are listed in the screen, which shows how to further configure in the GPC console, or programmatically with the gCloud CLI.
+The required commands to run in Google Cloud Shell are listed in the Manage Authorization screen for each scope of a project, folder or organization. This is also configured in the GPC console.
3. Select **Next**.
You have the ability to specify only certain GCP member projects to manage and m
2. You can choose to download and run the script at this point, or you can do it via Google Cloud Shell.
- To enable controller mode 'On' for any projects, add following roles to the specific projects:
+ To enable controller mode 'On' for any projects, add these roles to the specific projects:
- Role Administrators - Security Admin
You have the ability to specify only certain GCP member projects to manage and m
#### Option 3: Select authorization systems
-This option detects all projects that are accessible by the Cloud Infrastructure Entitlement Management application.
+This option detects all projects accessible by the Cloud Infrastructure Entitlement Management application.
-1. Firstly, grant Viewer and Security Reviewer role to service account created in previous step at organization, folder or project scope
+1. Grant **Viewer** and **Security Reviewer** roles to a service account created in the previous step at a project, folder or organization level.
+
+To enable Controller mode **On** for any projects, add these roles to the specific projects:
+- Role Administrators
+- Security Admin
+
+The required commands to run in Google Cloud Shell are listed in the Manage Authorization screen for each scope of a project, folder or organization. This is also configured in the GPC console.
- To enable controller mode 'On' for any projects, add following roles to the specific projects:
- - Role Administrators
- - Security Admin
-2. Once done, the steps are listed in the screen to do configure manually in the GPC console, or programmatically with the gCloud CLI
3. Select **Next**.
This option detects all projects that are accessible by the Cloud Infrastructure
- In the **Permissions Management Onboarding ΓÇô Summary** page, review the information you've added, and then select **Verify Now & Save**.
- The following message appears: **Successfully Created Configuration.**
+ The following message appears: **Successfully Created Configuration**.
On the **Data Collectors** tab, the **Recently Uploaded On** column displays **Collecting**. The **Recently Transformed On** column displays **Processing.**
- You have now completed onboarding GCP, and Permissions Management has started collecting and processing your data.
+ You've completed onboarding GCP, and Permissions Management has started collecting and processing your data.
### 4. View the data.
active-directory Concept Token Protection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/conditional-access/concept-token-protection.md
description: Learn how to use token protection in Conditional Access policies.
Previously updated : 07/18/2023 Last updated : 08/14/2023
Token protection (sometimes referred to as token binding in the industry) attempts to reduce attacks using token theft by ensuring a token is usable only from the intended device. When an attacker is able to steal a token, by hijacking or replay, they can impersonate their victim until the token expires or is revoked. Token theft is thought to be a relatively rare event, but the damage from it can be significant.
-Token protection creates a cryptographically secure tie between the token and the device (client secret) it's issued to. Without the client secret, the bound token is useless. When a user registers a Windows 10 or newer device in Azure AD, their primary identity is [bound to the device](../devices/concept-primary-refresh-token.md#how-is-the-prt-protected). What this means is that a policy can ensure that only bound sign-in session (or refresh) tokens, otherwise known as Primary Refresh Tokens (PRTs) are used by applications when requesting access to a resource.
+Token protection creates a cryptographically secure tie between the token and the device (client secret) it's issued to. Without the client secret, the bound token is useless. When a user registers a Windows 10 or newer device in Azure AD, their primary identity is [bound to the device](../devices/concept-primary-refresh-token.md#how-is-the-prt-protected). What this means: A policy can ensure that only bound sign-in session (or refresh) tokens, otherwise known as Primary Refresh Tokens (PRTs) are used by applications when requesting access to a resource.
> [!IMPORTANT] > Token protection is currently in public preview. For more information about previews, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
With this preview, we're giving you the ability to create a Conditional Access p
## Requirements
-This preview supports the following configurations:
+This preview supports the following configurations for access to resources with Token Protection conditional access policies applied:
* Windows 10 or newer devices that are Azure AD joined, hybrid Azure AD joined, or Azure AD registered. * OneDrive sync client version 22.217 or later * Teams native client version 1.6.00.1331 or later
+* Power BI desktop version 2.117.841.0 (May 2023) or later
+* Visual Studio 2022 or later when using the 'Windows authentication broker' Sign-in option
* Office Perpetual clients aren't supported ### Known limitations - External users (Azure AD B2B) aren't supported and shouldn't be included in your Conditional Access policy. - The following applications don't support signing in using protected token flows and users are blocked when accessing Exchange and SharePoint:
- - Power BI Desktop client
- PowerShell modules accessing Exchange, SharePoint, or Microsoft Graph scopes that are served by Exchange or SharePoint - PowerQuery extension for Excel - Extensions to Visual Studio Code which access Exchange or SharePoint
- - Visual Studio
- - The new Teams 2.1 preview client gets blocked after sign out due to a bug. This bug should be fixed in an August release.
+ - The new Teams 2.1 preview client gets blocked after sign out due to a bug. This bug should be fixed in a future service update.
- The following Windows client devices aren't supported: - Windows Server - Surface Hub - Windows-based Microsoft Teams Rooms (MTR) systems
+## Licensing requirements
++
+> [!NOTE]
+> Token Protection enforcement is part of Microsoft Entra ID Protection and will be part of the P2 license at general availability.
+ ## Deployment For users, the deployment of a Conditional Access policy to enforce token protection should be invisible when using compatible client platforms on registered devices and compatible applications.
You can also use [Log Analytics](../reports-monitoring/tutorial-log-analytics-wi
Here's a sample Log Analytics query searching the non-interactive sign-in logs for the last seven days, highlighting **Blocked** versus **Allowed** requests by **Application**. These queries are only samples and are subject to change. > [!NOTE]
-> **Sign In logs output:** The value of the string used in "enforcedSessionControls" and "sessionControlsNotSatisfied" changed from "Binding" to "SignInTokenProtection" in late June 2023. Queries on Sign In Log data should be updated to reflect this change.
+> **Sign In logs output:** The value of the string used in "enforcedSessionControls" and "sessionControlsNotSatisfied" changed from "Binding" to "SignInTokenProtection" in late June 2023. Queries on Sign In Log data should be updated to reflect this change. The examples cover both values to include historical data.
```kusto //Per Apps query
AADNonInteractiveUserSignInLogs
//Add userPrinicpalName if you want to filter // | where UserPrincipalName =="<user_principal_Name>" | mv-expand todynamic(ConditionalAccessPolicies)
-| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
+| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["Binding"]' or ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
| where ConditionalAccessPolicies.result !="reportOnlyNotApplied" and ConditionalAccessPolicies.result !="notApplied" | extend SessionNotSatisfyResult = ConditionalAccessPolicies["sessionControlsNotSatisfied"]
-| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
+| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection' or SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
| summarize by Id,UserPrincipalName, AppDisplayName, Result | summarize Requests = count(), Users = dcount(UserPrincipalName), Block = countif(Result == "Block"), Allow = countif(Result == "Allow"), BlockedUsers = dcountif(UserPrincipalName, Result == "Block") by AppDisplayName | extend PctAllowed = round(100.0 * Allow/(Allow+Block), 2)
AADNonInteractiveUserSignInLogs
//Add userPrincipalName if you want to filter // | where UserPrincipalName =="<user_principal_Name>" | mv-expand todynamic(ConditionalAccessPolicies)
-| where ConditionalAccessPolicies.enforcedSessionControls contains '["SignInTokenProtection"]'
+| where ConditionalAccessPolicies ["enforcedSessionControls"] contains '["Binding"]' or ConditionalAccessPolicies ["enforcedSessionControls"] contains '["SignInTokenProtection"]'
| where ConditionalAccessPolicies.result !="reportOnlyNotApplied" and ConditionalAccessPolicies.result !="notApplied" | extend SessionNotSatisfyResult = ConditionalAccessPolicies.sessionControlsNotSatisfied
-| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
+| extend Result = case (SessionNotSatisfyResult contains 'SignInTokenProtection' or SessionNotSatisfyResult contains 'SignInTokenProtection', 'Block','Allow')
| summarize by Id, UserPrincipalName, AppDisplayName, ResourceDisplayName,Result | summarize Requests = count(),Block = countif(Result == "Block"), Allow = countif(Result == "Allow") by UserPrincipalName, AppDisplayName,ResourceDisplayName | extend PctAllowed = round(100.0 * Allow/(Allow+Block), 2)
active-directory Howto Conditional Access Policy Registration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/conditional-access/howto-conditional-access-policy-registration.md
After administrators confirm the settings using [report-only mode](howto-conditi
Administrators will now have to issue Temporary Access Pass credentials to new users so they can satisfy the requirements for multifactor authentication to register. Steps to accomplish this task, are found in the section [Create a Temporary Access Pass in the Azure AD Portal](../authentication/howto-authentication-temporary-access-pass.md#create-a-temporary-access-pass).
-Organizations may choose to require other grant controls with or in place of **Require multifactor authentication** at step 7a. When selecting multiple controls, be sure to select the appropriate radio button toggle to require **all** or **one** of the selected controls when making this change.
+Organizations may choose to require other grant controls with or in place of **Require multifactor authentication** at step 8a. When selecting multiple controls, be sure to select the appropriate radio button toggle to require **all** or **one** of the selected controls when making this change.
### Guest user registration
active-directory App Sign In Flow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/app-sign-in-flow.md
Previously updated : 02/17/2023 Last updated : 08/11/2023
active-directory Application Model https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/application-model.md
Previously updated : 02/17/2023 Last updated : 08/17/2023
active-directory Howto Call A Web Api With Curl https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/howto-call-a-web-api-with-curl.md
Title: Call an ASP.NET Core web API with cURL description: Learn how to call a protected ASP.NET Core Web API using the Microsoft identity platform with cURL-+ -+ +++ Last updated 03/14/2023 zone_pivot_groups: web-api-howto-prereq
active-directory Howto Call A Web Api With Postman https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/howto-call-a-web-api-with-postman.md
Title: Call an ASP.NET Core web API with Postman description: Learn how to call a protected ASP.NET Core Web API using the Microsoft identity platform and Postman-+ -+ +++ Last updated 05/25/2023 zone_pivot_groups: web-api-howto-prereq
active-directory Publisher Verification Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/publisher-verification-overview.md
Previously updated : 04/27/2023 Last updated : 08/11/2023
active-directory Quickstart Create New Tenant https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/quickstart-create-new-tenant.md
Previously updated : 04/19/2023 Last updated : 07/11/2023
If you don't have a tenant associated with your account, you'll see a GUID under
### Create a new Azure AD tenant
-If you don't already have an Azure AD tenant or if you want to create a new one for development, see [Create a new tenant in Azure AD](../fundamentals/active-directory-access-create-new-tenant.md). Or use the [directory creation experience](https://portal.azure.com/#create/Microsoft.AzureActiveDirectory) in the Azure portal.
+If you don't already have an Azure AD tenant or if you want to create a new one for development, see [Create a new tenant in Azure AD](../fundamentals/active-directory-access-create-new-tenant.md) or use the [directory creation experience](https://portal.azure.com/#create/Microsoft.AzureActiveDirectory) in the Azure portal. If you want to create a tenant for app testing, see [build a test environment](test-setup-environment.md).
You'll provide the following information to create your new tenant:
active-directory Single Page App Tutorial 01 Register App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/single-page-app-tutorial-01-register-app.md
Title: "Tutorial: Register a Single-page application with the Microsoft identity platform" description: Register an application in an Azure Active Directory tenant.+ - + ++ Last updated 02/27/2023 #Customer intent: As a React developer, I want to know how to register my application with the Microsoft identity platform so that the security token service can issue access tokens to client applications that request them.
active-directory Single Page App Tutorial 02 Prepare Spa https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/single-page-app-tutorial-02-prepare-spa.md
Title: "Tutorial: Prepare an application for authentication" description: Register a tenant application and configure it for a React SPA.+ - + ++ Last updated 02/27/2023 #Customer intent: As a React developer, I want to know how to create a new React project in an IDE and add authentication.
active-directory Single Page App Tutorial 03 Sign In Users https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/single-page-app-tutorial-03-sign-in-users.md
Title: "Tutorial: Create components for sign in and sign out in a React single-page app" description: Add sign in and sign out components to your React single-page app+ -+ ++ Last updated 02/28/2023
active-directory Single Page App Tutorial 04 Call Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/single-page-app-tutorial-04-call-api.md
Title: "Tutorial: Call an API from a React single-page app" description: Call an API from a React single-page app.+ -+ ++ Last updated 11/28/2022 #Customer intent: As a React developer, I want to know how to create a user interface and access the Microsoft Graph API
active-directory Troubleshoot Publisher Verification https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/troubleshoot-publisher-verification.md
Previously updated : 03/16/2023 Last updated : 08/11/2023
active-directory Web Api Tutorial 01 Register App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-api-tutorial-01-register-app.md
Title: "Tutorial: Register a web API with the Microsoft identity platform" description: In this tutorial, you learn how to register a web API with the Microsoft identity platform.+ +++ - Last updated 11/1/2022 #Customer intent: As an application developer, I want to know how to register my application with the Microsoft identity platform so that the security token service can issue access tokens to client applications that request them.
active-directory Web Api Tutorial 02 Prepare Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-api-tutorial-02-prepare-api.md
Title: "Tutorial: Create and configure an ASP.NET Core project for authentication" description: "Create and configure the API in an IDE, add configuration for authentication and install required packages"+ +++ - Last updated 11/1/2022 #Customer intent: As an application developer, I want to create an ASP.NET Core project in an IDE, then configure it in such a way that I can add authentication with Azure AD.
active-directory Web Api Tutorial 03 Protect Endpoint https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-api-tutorial-03-protect-endpoint.md
Title: "Tutorial: Implement a protected endpoint to your API" description: Protect the endpoint of an API, then run it to ensure it's listening for HTTP requests.+ +++ - Last updated 11/1/2022 #Customer intent: As an application developer I want to protect the endpoint of my API and run it to ensure it is listening for HTTP requests
active-directory Web App Tutorial 01 Register Application https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-app-tutorial-01-register-application.md
Title: "Tutorial: Register an application with the Microsoft identity platform" description: In this tutorial, you learn how to register a web application with the Microsoft identity platform.+ +++ - Last updated 02/09/2023 #Customer intent: As an application developer, I want to know how to register my application with the Microsoft identity platform so that the security token service can issue access tokens to client applications that request them.
active-directory Web App Tutorial 02 Prepare Application https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-app-tutorial-02-prepare-application.md
Title: "Tutorial: Prepare a web application for authentication" description: Prepare an ASP.NET Core application for authentication using Visual Studio.+ +++ - Last updated 02/09/2023 #Customer intent: As an application developer, I want to use an IDE to set up an ASP.NET Core project, set up and upload a self signed certificate to the Azure portal and configure the application for authentication.
active-directory Web App Tutorial 03 Sign In Users https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-app-tutorial-03-sign-in-users.md
Title: "Tutorial: Add sign in to an application" description: Add sign in to an ASP.NET Core application using Visual Studio.+ +++ - Last updated 02/09/2023 #Customer intent: As an application developer, I want to install the NuGet packages necessary for authentication in my IDE, and implement authentication in my web app.
active-directory Web App Tutorial 04 Call Web Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/web-app-tutorial-04-call-web-api.md
Title: "Tutorial: Call an API and display the results" description: Call an API and display the results.+ +++ - Last updated 02/09/2023 #Customer intent: As an application developer, I want to use my app to call a web API, in this case Microsoft Graph. I need to know how to modify my code so the API can be called successfully.
active-directory Howto Vm Sign In Azure Ad Windows https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/devices/howto-vm-sign-in-azure-ad-windows.md
The AADLoginForWindows extension must be installed successfully for the VM to co
| Command to run | Expected output | | | |
- | `curl -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-08-01"` | Correct information about the Azure VM |
- | `curl -H Metadata:true "http://169.254.169.254/metadata/identity/info?api-version=2018-02-01"` | Valid tenant ID associated with the Azure subscription |
- | `curl -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?resource=urn:ms-drs:enterpriseregistration.windows.net&api-version=2018-02-01"` | Valid access token issued by Azure Active Directory for the managed identity that is assigned to this VM |
+ | `curl.exe -H Metadata:true "http://169.254.169.254/metadata/instance?api-version=2017-08-01"` | Correct information about the Azure VM |
+ | `curl.exe -H Metadata:true "http://169.254.169.254/metadata/identity/info?api-version=2018-02-01"` | Valid tenant ID associated with the Azure subscription |
+ | `curl.exe -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?resource=urn:ms-drs:enterpriseregistration.windows.net&api-version=2018-02-01"` | Valid access token issued by Azure Active Directory for the managed identity that is assigned to this VM |
> [!NOTE] > You can decode the access token by using a tool like [calebb.net](http://calebb.net/). Verify that the `oid` value in the access token matches the managed identity that's assigned to the VM.
active-directory Licensing Service Plan Reference https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/enterprise-users/licensing-service-plan-reference.md
Previously updated : 07/28/2023 Last updated : 08/14/2023
When [managing licenses in the Azure portal](https://portal.azure.com/#blade/Mic
- **Service plans included (friendly names)**: A list of service plans (friendly names) in the product that correspond to the string ID and GUID >[!NOTE]
->This information last updated on July 28th, 2023.<br/>You can also download a CSV version of this table [here](https://download.microsoft.com/download/e/3/e/e3e9faf2-f28b-490a-9ada-c6089a1fc5b0/Product%20names%20and%20service%20plan%20identifiers%20for%20licensing.csv).
+>This information last updated on August 14th, 2023.<br/>You can also download a CSV version of this table [here](https://download.microsoft.com/download/e/3/e/e3e9faf2-f28b-490a-9ada-c6089a1fc5b0/Product%20names%20and%20service%20plan%20identifiers%20for%20licensing.csv).
><br/> | Product name | String ID | GUID | Service plans included | Service plans included (friendly names) |
When [managing licenses in the Azure portal](https://portal.azure.com/#blade/Mic
| Microsoft 365 Domestic Calling Plan (120 Minutes) | MCOPSTN_5 | 11dee6af-eca8-419f-8061-6864517c1875 | MCOPSTN5 (54a152dc-90de-4996-93d2-bc47e670fc06) | MICROSOFT 365 DOMESTIC CALLING PLAN (120 min) (54a152dc-90de-4996-93d2-bc47e670fc06) | | Microsoft 365 Domestic Calling Plan for GCC | MCOPSTN_1_GOV | 923f58ab-fca1-46a1-92f9-89fda21238a8 | MCOPSTN1_GOV (3c8a8792-7866-409b-bb61-1b20ace0368b)<br/>EXCHANGE_S_FOUNDATION_GOV (922ba911-5694-4e99-a794-73aed9bfeec8) | Domestic Calling for Government (3c8a8792-7866-409b-bb61-1b20ace0368b)<br/>Exchange Foundation for Government (922ba911-5694-4e99-a794-73aed9bfeec8) | | Microsoft 365 E3 | SPE_E3 | 05e9a617-0261-4cee-bb44-138d3ef5d965 | RMS_S_ENTERPRISE (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>CDS_O365_P2 (95b76021-6a53-4741-ab8b-1d1f3d66a95a)<br/>EXCHANGE_S_ENTERPRISE (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>ContentExplorer_Standard (2b815d45-56e4-4e3a-b65c-66cb9175b560)<br/>MIP_S_CLP1 (5136a095-5cf0-4aff-bec3-e84448b38ea5)<br/>MYANALYTICS_P2 (33c4f319-9bdd-48d6-9c4d-410b750a4a5a)<br/>OFFICESUBSCRIPTION (43de0ff5-c92c-492b-9116-175376d08c38)<br/>M365_LIGHTHOUSE_CUSTOMER_PLAN1 (6f23d6a9-adbf-481c-8538-b4c095654487)<br/>M365_LIGHTHOUSE_PARTNER_PLAN1 (d55411c9-cfff-40a9-87c7-240f14df7da5)<br/>MICROSOFTBOOKINGS (199a5c09-e0ca-4e37-8f7c-b05d533e1ea2)<br/>MDE_LITE (292cc034-7b7c-4950-aaf5-943befd3f1d4)<br/>FORMS_PLAN_E3 (2789c901-c14e-48ab-a76a-be334d9d793a)<br/>KAIZALA_O365_P3 (aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1)<br/>PROJECTWORKMANAGEMENT (b737dad2-2f6c-4c65-90e3-ca563267e8b9)<br/>MICROSOFT_SEARCH (94065c59-bc8e-4e8b-89e5-5138d471eaff)<br/>Deskless (8c7d2df8-86f0-4902-b2ed-a0458298f3b3)<br/>STREAM_O365_E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>INTUNE_O365 (882e1d05-acd1-4ccb-8708-6ee03664b117)<br/>Nucleus (db4d623d-b514-490b-b7ef-8885eee514de)<br/>SHAREPOINTWAC (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>PROJECT_O365_P2 (31b4e2fc-4cd6-4e7d-9c1b-41407303bd66)<br/>SHAREPOINTENTERPRISE (5dbe027f-2339-4123-9542-606e4d348a72)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>SWAY (a23b959c-7ce8-4e57-9140-b90eb88a9e97)<br/>BPOS_S_TODO_2 (c87f142c-d1e9-4363-8630-aaea9c4d9ae5)<br/>VIVA_LEARNING_SEEDED (b76fb638-6ba6-402a-b9f9-83d28acb3d86)<br/>WHITEBOARD_PLAN2 (94a54592-cd8b-425e-87c6-97868b000b91)<br/>YAMMER_ENTERPRISE (7547a3fe-08ee-4ccb-b430-5077c5041653)<br/>UNIVERSAL_PRINT_01 (795f6fe0-cc4d-4773-b050-5dde4dc704c9)<br/>WIN10_PRO_ENT_SUB (21b439ba-a0ca-424f-a6cc-52f954a5b111)<br/>WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE (7bf960f6-2cd9-443a-8046-5dbff9558365)<br/>AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>RMS_S_PREMIUM (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>DYN365_CDS_O365_P2 (4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14)<br/>MFA_PREMIUM (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>ADALLOM_S_DISCOVERY (932ad362-64a8-4783-9106-97849a1a30b9)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>POWERAPPS_O365_P2 (c68f8d98-5534-41c8-bf36-22fa496fa792)<br/>FLOW_O365_P2 (76846ad7-7776-4c40-a281-a386362dd1b9)<br/>POWER_VIRTUAL_AGENTS_O365_P2 (041fe683-03e4-45b6-b1af-c0cdc516daee)<br/>VIVAENGAGE_CORE (a82fbf69-b4d7-49f4-83a6-915b2cf354f4)<br/>Windows_Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3) | Azure Rights Management (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>Common Data Service for Teams (95b76021-6a53-4741-ab8b-1d1f3d66a95a)<br/>Exchange Online (Plan 2) (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>Information Protection and Governance Analytics - Standard (2b815d45-56e4-4e3a-b65c-66cb9175b560)<br/>Information Protection for Office 365 - Standard (5136a095-5cf0-4aff-bec3-e84448b38ea5)<br/>Insights by MyAnalytics (33c4f319-9bdd-48d6-9c4d-410b750a4a5a)<br/>Microsoft 365 Apps for Enterprise (43de0ff5-c92c-492b-9116-175376d08c38)<br/>Microsoft 365 Lighthouse (Plan 1) (6f23d6a9-adbf-481c-8538-b4c095654487)<br/>Microsoft 365 Lighthouse (Plan 2) (d55411c9-cfff-40a9-87c7-240f14df7da5)<br/>Microsoft Bookings (199a5c09-e0ca-4e37-8f7c-b05d533e1ea2)<br/>Microsoft Defender for Endpoint Plan 1 (292cc034-7b7c-4950-aaf5-943befd3f1d4)<br/>Microsoft Forms (Plan E3) (2789c901-c14e-48ab-a76a-be334d9d793a)<br/>Microsoft Kaizala Pro (aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1)<br/>Microsoft Planner (b737dad2-2f6c-4c65-90e3-ca563267e8b9)<br/>Microsoft Search (94065c59-bc8e-4e8b-89e5-5138d471eaff)<br/>Microsoft StaffHub (8c7d2df8-86f0-4902-b2ed-a0458298f3b3)<br/>Microsoft Stream for Office 365 E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Mobile Device Management for Office 365 (882e1d05-acd1-4ccb-8708-6ee03664b117)<br/>Nucleus (db4d623d-b514-490b-b7ef-8885eee514de)<br/>Office for the Web (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>Project for Office (Plan E3) (31b4e2fc-4cd6-4e7d-9c1b-41407303bd66)<br/>SharePoint (Plan 2) (5dbe027f-2339-4123-9542-606e4d348a72)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Sway (a23b959c-7ce8-4e57-9140-b90eb88a9e97)<br/>To-Do (Plan 2) (c87f142c-d1e9-4363-8630-aaea9c4d9ae5)<br/>Viva Learning Seeded (b76fb638-6ba6-402a-b9f9-83d28acb3d86)<br/>Whiteboard (Plan 2) (94a54592-cd8b-425e-87c6-97868b000b91)<br/>Yammer Enterprise (7547a3fe-08ee-4ccb-b430-5077c5041653)<br/>Universal Print (795f6fe0-cc4d-4773-b050-5dde4dc704c9)<br/>Windows 10/11 Enterprise (Original) (21b439ba-a0ca-424f-a6cc-52f954a5b111)<br/>Windows Update for Business Deployment Service (7bf960f6-2cd9-443a-8046-5dbff9558365)<br/>Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Azure Information Protection Premium P1 (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>Common Data Service (4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14)<br/>Microsoft Azure Multi-Factor Authentication (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>Microsoft Defender for Cloud Apps Discovery (932ad362-64a8-4783-9106-97849a1a30b9)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Power Apps for Office 365 (c68f8d98-5534-41c8-bf36-22fa496fa792)<br/>Power Automate for Office 365 (76846ad7-7776-4c40-a281-a386362dd1b9)<br/>Power Virtual Agents for Office 365 (041fe683-03e4-45b6-b1af-c0cdc516daee)<br/>Viva Engage Core (a82fbf69-b4d7-49f4-83a6-915b2cf354f4)<br/>Windows Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3) |
+| Microsoft 365 E3 Extra Features | Microsoft_365_E3_Extra_Features | f5b15d67-b99e-406b-90f1-308452f94de6 | Windows_Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3) | Windows Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3) |
| Microsoft 365 E3 - Unattended License | SPE_E3_RPA1 | c2ac2ee4-9bb1-47e4-8541-d689c7e83371 | RMS_S_ENTERPRISE (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>CDS_O365_P2 (95b76021-6a53-4741-ab8b-1d1f3d66a95a)<br/>EXCHANGE_S_ENTERPRISE (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>MIP_S_CLP1 (5136a095-5cf0-4aff-bec3-e84448b38ea5)<br/>MYANALYTICS_P2 (33c4f319-9bdd-48d6-9c4d-410b750a4a5a)<br/>OFFICESUBSCRIPTION_unattended (8d77e2d9-9e28-4450-8431-0def64078fc5)<br/>M365_LIGHTHOUSE_CUSTOMER_PLAN1 (6f23d6a9-adbf-481c-8538-b4c095654487)<br/>M365_LIGHTHOUSE_PARTNER_PLAN1 (d55411c9-cfff-40a9-87c7-240f14df7da5)<br/>MICROSOFTBOOKINGS (199a5c09-e0ca-4e37-8f7c-b05d533e1ea2)<br/>MDE_LITE (292cc034-7b7c-4950-aaf5-943befd3f1d4)<br/>FORMS_PLAN_E3 (2789c901-c14e-48ab-a76a-be334d9d793a)<br/>KAIZALA_O365_P3 (aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1)<br/>PROJECTWORKMANAGEMENT (b737dad2-2f6c-4c65-90e3-ca563267e8b9)<br/>MICROSOFT_SEARCH (94065c59-bc8e-4e8b-89e5-5138d471eaff)<br/>Deskless (8c7d2df8-86f0-4902-b2ed-a0458298f3b3)<br/>STREAM_O365_E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>INTUNE_O365 (882e1d05-acd1-4ccb-8708-6ee03664b117)<br/>Nucleus (db4d623d-b514-490b-b7ef-8885eee514de)<br/>SHAREPOINTWAC (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>PROJECT_O365_P2 (31b4e2fc-4cd6-4e7d-9c1b-41407303bd66)<br/>SHAREPOINTENTERPRISE (5dbe027f-2339-4123-9542-606e4d348a72)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>SWAY (a23b959c-7ce8-4e57-9140-b90eb88a9e97)<br/>BPOS_S_TODO_2 (c87f142c-d1e9-4363-8630-aaea9c4d9ae5)<br/>VIVA_LEARNING_SEEDED (b76fb638-6ba6-402a-b9f9-83d28acb3d86)<br/>WHITEBOARD_PLAN2 (94a54592-cd8b-425e-87c6-97868b000b91)<br/>YAMMER_ENTERPRISE (7547a3fe-08ee-4ccb-b430-5077c5041653)<br/>UNIVERSAL_PRINT_01 (795f6fe0-cc4d-4773-b050-5dde4dc704c9)<br/>WIN10_PRO_ENT_SUB (21b439ba-a0ca-424f-a6cc-52f954a5b111)<br/> Windows Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3)<br/>WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE (7bf960f6-2cd9-443a-8046-5dbff9558365)<br/>AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>RMS_S_PREMIUM (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>DYN365_CDS_O365_P2 (4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14)<br/>MFA_PREMIUM (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>ADALLOM_S_DISCOVERY (932ad362-64a8-4783-9106-97849a1a30b9)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>POWERAPPS_O365_P2 (c68f8d98-5534-41c8-bf36-22fa496fa792)<br/>FLOW_O365_P2 (76846ad7-7776-4c40-a281-a386362dd1b9)<br/>POWER_VIRTUAL_AGENTS_O365_P2 (041fe683-03e4-45b6-b1af-c0cdc516daee) | Azure Rights Management (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>Common Data Service for Teams (95b76021-6a53-4741-ab8b-1d1f3d66a95a)<br/>Exchange Online (Plan 2) (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>Information Protection for Office 365 - Standard (5136a095-5cf0-4aff-bec3-e84448b38ea5)<br/>Insights by MyAnalytics (33c4f319-9bdd-48d6-9c4d-410b750a4a5a)<br/>Microsoft 365 Apps for Enterprise (Unattended) (8d77e2d9-9e28-4450-8431-0def64078fc5)<br/>Microsoft 365 Lighthouse (Plan 1) (6f23d6a9-adbf-481c-8538-b4c095654487)<br/>Microsoft 365 Lighthouse (Plan 2) (d55411c9-cfff-40a9-87c7-240f14df7da5)<br/>Microsoft Bookings (199a5c09-e0ca-4e37-8f7c-b05d533e1ea2)<br/>Microsoft Defender for Endpoint Plan 1 (292cc034-7b7c-4950-aaf5-943befd3f1d4)<br/>Microsoft Forms (Plan E3) (2789c901-c14e-48ab-a76a-be334d9d793a)<br/>Microsoft Kaizala Pro (aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1)<br/>Microsoft Planner (b737dad2-2f6c-4c65-90e3-ca563267e8b9)<br/>Microsoft Search (94065c59-bc8e-4e8b-89e5-5138d471eaff)<br/>Microsoft StaffHub (8c7d2df8-86f0-4902-b2ed-a0458298f3b3)<br/>Microsoft Stream for Office 365 E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Mobile Device Management for Office 365 (882e1d05-acd1-4ccb-8708-6ee03664b117)<br/>Nucleus (db4d623d-b514-490b-b7ef-8885eee514de)<br/>Office for the Web (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>Project for Office (Plan E3) (31b4e2fc-4cd6-4e7d-9c1b-41407303bd66)<br/>SharePoint (Plan 2) (5dbe027f-2339-4123-9542-606e4d348a72)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Sway (a23b959c-7ce8-4e57-9140-b90eb88a9e97)<br/>To-Do (Plan 2) (c87f142c-d1e9-4363-8630-aaea9c4d9ae5)<br/>Viva Learning Seeded (b76fb638-6ba6-402a-b9f9-83d28acb3d86)<br/>Whiteboard (Plan 2) (94a54592-cd8b-425e-87c6-97868b000b91)<br/>Yammer Enterprise (7547a3fe-08ee-4ccb-b430-5077c5041653)<br/>Universal Print (795f6fe0-cc4d-4773-b050-5dde4dc704c9)<br/>Windows 10/11 Enterprise (Original) (21b439ba-a0ca-424f-a6cc-52f954a5b111)<br/> Windows Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3)<br/>Windows Update for Business Deployment Service (7bf960f6-2cd9-443a-8046-5dbff9558365)<br/>Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Azure Information Protection Premium P1 (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>Common Data Service (4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14)<br/>Microsoft Azure Multi-Factor Authentication (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>Microsoft Defender for Cloud Apps Discovery (932ad362-64a8-4783-9106-97849a1a30b9)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Power Apps for Office 365 (c68f8d98-5534-41c8-bf36-22fa496fa792)<br/>Power Automate for Office 365 (76846ad7-7776-4c40-a281-a386362dd1b9)<br/>Power Virtual Agents for Office 365 (041fe683-03e4-45b6-b1af-c0cdc516daee) | | Microsoft 365 E3 (500 seats min) HUB | Microsoft_365_E3 | 0c21030a-7e60-4ec7-9a0f-0042e0e0211a | RMS_S_ENTERPRISE (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>CDS_O365_P2 (95b76021-6a53-4741-ab8b-1d1f3d66a95a)<br/>EXCHANGE_S_ENTERPRISE (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>ContentExplorer_Standard (2b815d45-56e4-4e3a-b65c-66cb9175b560)<br/>MIP_S_CLP1 (5136a095-5cf0-4aff-bec3-e84448b38ea5)<br/>MYANALYTICS_P2 (33c4f319-9bdd-48d6-9c4d-410b750a4a5a)<br/>OFFICESUBSCRIPTION (43de0ff5-c92c-492b-9116-175376d08c38)<br/>M365_LIGHTHOUSE_CUSTOMER_PLAN1 (6f23d6a9-adbf-481c-8538-b4c095654487)<br/>M365_LIGHTHOUSE_PARTNER_PLAN1 (d55411c9-cfff-40a9-87c7-240f14df7da5)<br/>MICROSOFTBOOKINGS (199a5c09-e0ca-4e37-8f7c-b05d533e1ea2)<br/>MDE_LITE (292cc034-7b7c-4950-aaf5-943befd3f1d4)<br/>FORMS_PLAN_E3 (2789c901-c14e-48ab-a76a-be334d9d793a)<br/>KAIZALA_O365_P3 (aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1)<br/>PROJECTWORKMANAGEMENT (b737dad2-2f6c-4c65-90e3-ca563267e8b9)<br/>MICROSOFT_SEARCH (94065c59-bc8e-4e8b-89e5-5138d471eaff)<br/>Deskless (8c7d2df8-86f0-4902-b2ed-a0458298f3b3)<br/>STREAM_O365_E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>INTUNE_O365 (882e1d05-acd1-4ccb-8708-6ee03664b117)<br/>Nucleus (db4d623d-b514-490b-b7ef-8885eee514de)<br/>SHAREPOINTWAC (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>PROJECT_O365_P2 (31b4e2fc-4cd6-4e7d-9c1b-41407303bd66)<br/>SHAREPOINTENTERPRISE (5dbe027f-2339-4123-9542-606e4d348a72)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>SWAY (a23b959c-7ce8-4e57-9140-b90eb88a9e97)<br/>BPOS_S_TODO_2 (c87f142c-d1e9-4363-8630-aaea9c4d9ae5)<br/>VIVA_LEARNING_SEEDED (b76fb638-6ba6-402a-b9f9-83d28acb3d86)<br/>WHITEBOARD_PLAN2 (94a54592-cd8b-425e-87c6-97868b000b91)<br/>YAMMER_ENTERPRISE (7547a3fe-08ee-4ccb-b430-5077c5041653)<br/>UNIVERSAL_PRINT_01 (795f6fe0-cc4d-4773-b050-5dde4dc704c9)<br/>WIN10_PRO_ENT_SUB (21b439ba-a0ca-424f-a6cc-52f954a5b111)<br/> Windows Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3)<br/>WINDOWSUPDATEFORBUSINESS_DEPLOYMENTSERVICE (7bf960f6-2cd9-443a-8046-5dbff9558365)<br/>AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>RMS_S_PREMIUM (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>DYN365_CDS_O365_P2 (4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14)<br/>MFA_PREMIUM (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>ADALLOM_S_DISCOVERY (932ad362-64a8-4783-9106-97849a1a30b9)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>POWERAPPS_O365_P2 (c68f8d98-5534-41c8-bf36-22fa496fa792)<br/>FLOW_O365_P2 (76846ad7-7776-4c40-a281-a386362dd1b9)<br/>POWER_VIRTUAL_AGENTS_O365_P2 (041fe683-03e4-45b6-b1af-c0cdc516daee) | Azure Rights Management (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>Common Data Service for Teams (95b76021-6a53-4741-ab8b-1d1f3d66a95a)<br/>Exchange Online (Plan 2) (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>Information Protection and Governance Analytics ΓÇô Standard (2b815d45-56e4-4e3a-b65c-66cb9175b560)<br/>Information Protection for Office 365 - Standard (5136a095-5cf0-4aff-bec3-e84448b38ea5)<br/>Insights by MyAnalytics (33c4f319-9bdd-48d6-9c4d-410b750a4a5a)<br/>Microsoft 365 Apps for Enterprise (43de0ff5-c92c-492b-9116-175376d08c38)<br/>Microsoft 365 Lighthouse (Plan 1) (6f23d6a9-adbf-481c-8538-b4c095654487)<br/>Microsoft 365 Lighthouse (Plan 2) (d55411c9-cfff-40a9-87c7-240f14df7da5)<br/>Microsoft Bookings (199a5c09-e0ca-4e37-8f7c-b05d533e1ea2)<br/>Microsoft Defender for Endpoint Plan 1 (292cc034-7b7c-4950-aaf5-943befd3f1d4)<br/>Microsoft Forms (Plan E3) (2789c901-c14e-48ab-a76a-be334d9d793a)<br/>Microsoft Kaizala Pro (aebd3021-9f8f-4bf8-bbe3-0ed2f4f047a1)<br/>Microsoft Planner (b737dad2-2f6c-4c65-90e3-ca563267e8b9)<br/>Microsoft Search (94065c59-bc8e-4e8b-89e5-5138d471eaff)<br/>Microsoft StaffHub (8c7d2df8-86f0-4902-b2ed-a0458298f3b3)<br/>Microsoft Stream for Office 365 E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Mobile Device Management for Office 365 (882e1d05-acd1-4ccb-8708-6ee03664b117)<br/>Nucleus (db4d623d-b514-490b-b7ef-8885eee514de)<br/>Office for the Web (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>Project for Office (Plan E3) (31b4e2fc-4cd6-4e7d-9c1b-41407303bd66)<br/>SharePoint (Plan 2) (5dbe027f-2339-4123-9542-606e4d348a72)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Sway (a23b959c-7ce8-4e57-9140-b90eb88a9e97)<br/>To-Do (Plan 2) (c87f142c-d1e9-4363-8630-aaea9c4d9ae5)<br/>Viva Learning Seeded (b76fb638-6ba6-402a-b9f9-83d28acb3d86)<br/>Whiteboard (Plan 2) (94a54592-cd8b-425e-87c6-97868b000b91)<br/>Yammer Enterprise (7547a3fe-08ee-4ccb-b430-5077c5041653)<br/>Universal Print (795f6fe0-cc4d-4773-b050-5dde4dc704c9)<br/>Windows 10/11 Enterprise (Original) (21b439ba-a0ca-424f-a6cc-52f954a5b111)<br/> Windows Autopatch (9a6eeb79-0b4b-4bf0-9808-39d99a2cd5a3)<br/>Windows Update for Business Deployment Service (7bf960f6-2cd9-443a-8046-5dbff9558365)<br/>Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Azure Information Protection Premium P1 (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>Common Data Service (4ff01e01-1ba7-4d71-8cf8-ce96c3bbcf14)<br/>Microsoft Azure Multi-Factor Authentication (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>Microsoft Defender for Cloud Apps Discovery (932ad362-64a8-4783-9106-97849a1a30b9)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Power Apps for Office 365 (c68f8d98-5534-41c8-bf36-22fa496fa792)<br/>Power Automate for Office 365 (76846ad7-7776-4c40-a281-a386362dd1b9)<br/>Power Virtual Agents for Office 365 (041fe683-03e4-45b6-b1af-c0cdc516daee) | | Microsoft 365 E3_USGOV_DOD | SPE_E3_USGOV_DOD | d61d61cc-f992-433f-a577-5bd016037eeb | AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>RMS_S_PREMIUM (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>EXCHANGE_S_ENTERPRISE (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>RMS_S_ENTERPRISE (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>MFA_PREMIUM (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>STREAM_O365_E3 (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>TEAMS_AR_DOD (fd500458-c24c-478e-856c-a6067a8376cd)<br/>OFFICESUBSCRIPTION (43de0ff5-c92c-492b-9116-175376d08c38)<br/>SHAREPOINTWAC (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>SHAREPOINTENTERPRISE (5dbe027f-2339-4123-9542-606e4d348a72)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c) | Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Azure Information Protection Premium P1 (6c57d4b6-3b23-47a5-9bc9-69f17b4947b3)<br/>Exchange Online (Plan 2) (efb87545-963c-4e0d-99df-69c6916d9eb0)<br/>Microsoft Azure Active Directory Rights (bea4c11e-220a-4e6d-8eb8-8ea15d019f90)<br/>Microsoft Azure Multi-Factor Authentication (8a256a2b-b617-496d-b51b-e76466e88db0)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Microsoft Stream for O365 E3 SKU (9e700747-8b1d-45e5-ab8d-ef187ceec156)<br/>Microsoft Teams for DOD (AR) (fd500458-c24c-478e-856c-a6067a8376cd)<br/>Office 365 ProPlus (43de0ff5-c92c-492b-9116-175376d08c38)<br/>Office Online (e95bec33-7c88-4a70-8e19-b10bd9d0c014)<br/>SharePoint Online (Plan 2) (5dbe027f-2339-4123-9542-606e4d348a72)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c) |
When [managing licenses in the Azure portal](https://portal.azure.com/#blade/Mic
| Microsoft Defender Vulnerability Management | TVM_Premium_Standalone | 1925967e-8013-495f-9644-c99f8b463748 | TVM_PREMIUM_1 (36810a13-b903-490a-aa45-afbeb7540832) | Microsoft Defender Vulnerability Management (36810a13-b903-490a-aa45-afbeb7540832) | | Microsoft Defender Vulnerability Management Add-on | TVM_Premium_Add_on | ad7a56e0-6903-4d13-94f3-5ad491e78960 | TVM_PREMIUM_1 (36810a13-b903-490a-aa45-afbeb7540832) | Microsoft Defender Vulnerability Management (36810a13-b903-490a-aa45-afbeb7540832) | | Microsoft Dynamics CRM Online | CRMSTANDARD | d17b27af-3f49-4822-99f9-56a661538792 | CRMSTANDARD (f9646fb2-e3b2-4309-95de-dc4833737456)<br/>FLOW_DYN_APPS (7e6d7d78-73de-46ba-83b1-6d25117334ba)<br/>MDM_SALES_COLLABORATION (3413916e-ee66-4071-be30-6f94d4adfeda)<br/>NBPROFESSIONALFORCRM (3e58e97c-9abe-ebab-cd5f-d543d1529634)<br/>POWERAPPS_DYN_APPS (874fc546-6efe-4d22-90b8-5c4e7aa59f4b) | MICROSOFT DYNAMICS CRM ONLINE PROFESSIONAL(f9646fb2-e3b2-4309-95de-dc4833737456)<br/>FLOW FOR DYNAMICS 365 (7e6d7d78-73de-46ba-83b1-6d25117334ba)<br/>MICROSOFT DYNAMICS MARKETING SALES COLLABORATION - ELIGIBILITY CRITERIA APPLY (3413916e-ee66-4071-be30-6f94d4adfeda)<br/>MICROSOFT SOCIAL ENGAGEMENT PROFESSIONAL - ELIGIBILITY CRITERIA APPLY (3e58e97c-9abe-ebab-cd5f-d543d1529634)<br/>POWERAPPS FOR DYNAMICS 365 (874fc546-6efe-4d22-90b8-5c4e7aa59f4b) |
+| Microsoft Fabric (Free) | POWER_BI_STANDARD | a403ebcc-fae0-4ca2-8c8c-7a907fd6c235 | EXCHANGE_S_FOUNDATION (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>BI_AZURE_P0 (2049e525-b859-401b-b2a0-e0a31c4b1fe4) | Exchange Foundation (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>Power BI (free) (2049e525-b859-401b-b2a0-e0a31c4b1fe4) |
+| Microsoft Fabric (Free) for faculty | POWER_BI_STANDARD_FACULTY | ade29b5f-397e-4eb9-a287-0344bd46c68d | EXCHANGE_S_FOUNDATION (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>BI_AZURE_P0 (2049e525-b859-401b-b2a0-e0a31c4b1fe4) | Exchange Foundation (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>Power BI (free) (2049e525-b859-401b-b2a0-e0a31c4b1fe4) |
+|Microsoft Fabric (Free) for student | POWER_BI_STANDARD_STUDENT | bdcaf6aa-04c1-4b8f-b64e-6e3bd505ac64 | EXCHANGE_S_FOUNDATION (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>BI_AZURE_P0 (2049e525-b859-401b-b2a0-e0a31c4b1fe4) | Exchange Foundation (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>Power BI (free) (2049e525-b859-401b-b2a0-e0a31c4b1fe4) |
| Microsoft Imagine Academy | IT_ACADEMY_AD | ba9a34de-4489-469d-879c-0f0f145321cd | IT_ACADEMY_AD (d736def0-1fde-43f0-a5be-e3f8b2de6e41) | MS IMAGINE ACADEMY (d736def0-1fde-43f0-a5be-e3f8b2de6e41) | | Microsoft Intune Device | INTUNE_A_D | 2b317a4a-77a6-4188-9437-b68a77b4e2c6 | EXCHANGE_S_FOUNDATION (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) | Exchange Foundation (113feb6c-3fe4-4440-bddc-54d774bf0318)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) | | Microsoft Intune Device for Government | INTUNE_A_D_GOV | 2c21e77a-e0d6-4570-b38a-7ff2dc17d2ca | EXCHANGE_S_FOUNDATION_GOV (922ba911-5694-4e99-a794-73aed9bfeec8)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) | Exchange Foundation for Government (922ba911-5694-4e99-a794-73aed9bfeec8)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) |
When [managing licenses in the Azure portal](https://portal.azure.com/#blade/Mic
| Microsoft Teams Rooms Basic for EDU | Microsoft_Teams_Rooms_Basic_FAC | a4e376bd-c61e-4618-9901-3fc0cb1b88bb | MCOMEETADV (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Teams_Room_Basic (8081ca9c-188c-4b49-a8e5-c23b5e9463a8)<br/>Teams_Room_Pro (ec17f317-f4bc-451e-b2da-0167e5c260f9)<br/>WHITEBOARD_PLAN3 (4a51bca5-1eff-43f5-878c-177680f191af) | Microsoft 365 Audio Conferencing (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Teams Rooms Basic (8081ca9c-188c-4b49-a8e5-c23b5e9463a8)<br/>Teams Rooms Pro (ec17f317-f4bc-451e-b2da-0167e5c260f9)<br/>Whiteboard (Plan 3) (4a51bca5-1eff-43f5-878c-177680f191af) | | Microsoft Teams Rooms Basic without Audio Conferencing | Microsoft_Teams_Rooms_Basic_without_Audio_Conferencing | 50509a35-f0bd-4c5e-89ac-22f0e16a00f8 | TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>WHITEBOARD_PLAN3 (4a51bca5-1eff-43f5-878c-177680f191af) | Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Whiteboard (Plan 3) (4a51bca5-1eff-43f5-878c-177680f191af) | | Microsoft Teams Rooms Pro | Microsoft_Teams_Rooms_Pro | 4cde982a-ede4-4409-9ae6-b003453c8ea6 | AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>MCOMEETADV (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>MCOEV (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>WHITEBOARD_PLAN3 (4a51bca5-1eff-43f5-878c-177680f191af) | Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Microsoft 365 Audio Conferencing (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>Microsoft 365 Phone System (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Whiteboard (Plan 3) (4a51bca5-1eff-43f5-878c-177680f191af) |
+| Microsoft Teams Rooms Pro for EDU | Microsoft_Teams_Rooms_Pro_FAC | c25e2b36-e161-4946-bef2-69239729f690 | AAD_BASIC_EDU (1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426)<br/>MCOMEETADV (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>MCOEV (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>MTRProManagement (ecc74eae-eeb7-4ad5-9c88-e8b2bfca75b8)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Teams_Room_Basic (8081ca9c-188c-4b49-a8e5-c23b5e9463a8)<br/>Teams_Room_Pro (ec17f317-f4bc-451e-b2da-0167e5c260f9)<br/>WHITEBOARD_PLAN3 (4a51bca5-1eff-43f5-878c-177680f191af)<br/>WINDEFATP (871d91ec-ec1a-452b-a83f-bd76c7d770ef)<br/>AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) | Azure Active Directory Basic for Education (1d0f309f-fdf9-4b2a-9ae7-9c48b91f1426)<br/>Microsoft 365 Audio Conferencing (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>Microsoft 365 Phone System (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Microsoft Teams Rooms Pro Management (ecc74eae-eeb7-4ad5-9c88-e8b2bfca75b8)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Teams Rooms Test 1 (8081ca9c-188c-4b49-a8e5-c23b5e9463a8)<br/>Teams Rooms Test 2 (ec17f317-f4bc-451e-b2da-0167e5c260f9)<br/>Whiteboard (Plan 3) (4a51bca5-1eff-43f5-878c-177680f191af)<br/>Microsoft Defender for Endpoint (871d91ec-ec1a-452b-a83f-bd76c7d770ef)<br/>Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Microsoft Intune Plan 1 (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) |
| Microsoft Teams Rooms Pro without Audio Conferencing | Microsoft_Teams_Rooms_Pro_without_Audio_Conferencing | 21943e3a-2429-4f83-84c1-02735cd49e78 | AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>MCOEV (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>WHITEBOARD_PLAN3 (4a51bca5-1eff-43f5-878c-177680f191af) | Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Microsoft 365 Phone System (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Whiteboard (Plan 3) (4a51bca5-1eff-43f5-878c-177680f191af) | | Microsoft Teams Rooms Standard | MEETING_ROOM | 6070a4c8-34c6-4937-8dfb-39bbc6397a60 | AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>MCOMEETADV (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>MCOEV (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Teams_Room_Standard (92c6b761-01de-457a-9dd9-793a975238f7)<br/>WHITEBOARD_PLAN3 (4a51bca5-1eff-43f5-878c-177680f191af)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) | Azure Active Directory Premium Plan 1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Microsoft 365 Audio Conferencing (3e26ee1f-8a5f-4d52-aee2-b81ce45c8f40)<br/>Microsoft 365 Phone System (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>Microsoft Teams (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>Skype for Business Online (Plan 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Teams Room Standard (92c6b761-01de-457a-9dd9-793a975238f7)<br/>Whiteboard (Plan 3) (4a51bca5-1eff-43f5-878c-177680f191af)<br/>Microsoft Intune Plan 1 (c1ec4a95-1f05-45b3-a911-aa3fa01094f5) | | Microsoft Teams Shared Devices | MCOCAP | 295a8eb0-f78d-45c7-8b5b-1eed5ed02dff | MCOEV (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>TEAMS1 (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>MCOSTANDARD (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>INTUNE_A (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>AAD_PREMIUM (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>EXCHANGE_S_ENTERPRISE (efb87545-963c-4e0d-99df-69c6916d9eb0) | MICROSOFT 365 PHONE SYSTEM (4828c8ec-dc2e-4779-b502-87ac9ce28ab7)<br/>MICROSOFT TEAMS (57ff2da0-773e-42df-b2af-ffb7a2317929)<br/>SKYPE FOR BUSINESS ONLINE (PLAN 2) (0feaeb32-d00e-4d66-bd5a-43b5b83db82c)<br/>Microsoft Intune (c1ec4a95-1f05-45b3-a911-aa3fa01094f5)<br/>Azure Active Directory Premium P1 (41781fb2-bc02-4b7c-bd55-b576c07bb09d)<br/>Exchange Online (Plan 2) (efb87545-963c-4e0d-99df-69c6916d9eb0) |
active-directory Authentication Conditional Access https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/authentication-conditional-access.md
# Authentication and Conditional Access for External Identities
+> [!TIP]
+> This article applies to B2B collaboration and B2B direct connect. If your tenant is configured for customer identity and access management, see [Security and governance in Azure AD for customers](customers/concept-security-customers.md).
+ When an external user accesses resources in your organization, the authentication flow is determined by the collaboration method (B2B collaboration or B2B direct connect), user's identity provider (an external Azure AD tenant, social identity provider, etc.), Conditional Access policies, and the [cross-tenant access settings](cross-tenant-access-overview.md) configured both in the user's home tenant and the tenant hosting resources. This article describes the authentication flow for external users who are accessing resources in your organization. Organizations can enforce multiple Conditional Access policies for their external users, which can be enforced at the tenant, app, or individual user level in the same way that they're enabled for full-time employees and members of the organization.
active-directory Tutorial Desktop App Maui Sign In Sign Out https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/customers/tutorial-desktop-app-maui-sign-in-sign-out.md
The next steps will organize our code so that the `main view` is defined.
1. Select **Add**. 1. The _MainView.xaml_ file will open in a new document tab, displaying all of the XAML markup that represents the UI of the page. Replace the XAML markup with the following markup: - :::code language="xaml" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/MainView.xaml" ::: 1. Save the file.
The next step is to add the code for the button's `Clicked` event.
:::code language="csharp" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/MainView.xaml.cs" :::
-The `MainView` class is a content page responsible for displaying the main view of the app. In the constructor, it retrieves the cached user account using the `MSALClientHelper` from the `PublicClientSingleton` instance and enables the sign-in button, if no cached user account is found.
+The `MainView` class is a content page responsible for displaying the main view of the app. In the constructor, it retrieves the cached user account using the `MSALClientHelper` from the `PublicClientSingleton` instance and enables the sign-in button, if no cached user account is found.
When the sign-in button is clicked, it calls the `AcquireTokenSilentAsync` method to acquire a token silently and navigates to the `claimsview` page using the `Shell.Current.GoToAsync` method. Additionally, the `OnBackButtonPressed` method is overridden to return true, indicating that the back button is disabled for this view.
The next steps will organize the code so that `ClaimsView` page is defined. The
1. Select **Add**. 1. The _ClaimsView.xaml_ file will open in a new document tab, displaying all of the XAML markup that represents the UI of the page. Replace the XAML markup with the following markup: - :::code language="xaml" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/ClaimsView.xaml" :::
- This XAML markup code represents the UI layout for a claim view in a .NET MAUI app. It starts by defining the `ContentPage` with a title and disabling the back button behavior.
-
- Inside a `VerticalStackLayout`, there are several `Label` elements displaying static text, followed by a `ListView` named `Claims` that binds to a collection called `IdTokenClaims` to display the claims found in the ID token. Each claim is rendered within a `ViewCell` using a `DataTemplate` and displayed as a centered `Label` within a Grid.
-
- Lastly, there's a `Sign Out` button centered at the bottom of the layout, which triggers the `SignOutButton_Clicked` event handler when clicked.
+ This XAML markup code represents the UI layout for a claim view in a .NET MAUI app. It starts by defining the `ContentPage` with a title and disabling the back button behavior.
+
+ Inside a `VerticalStackLayout`, there are several `Label` elements displaying static text, followed by a `ListView` named `Claims` that binds to a collection called `IdTokenClaims` to display the claims found in the ID token. Each claim is rendered within a `ViewCell` using a `DataTemplate` and displayed as a centered `Label` within a Grid.
+
+ Lastly, there's a `Sign Out` button centered at the bottom of the layout, which triggers the `SignOutButton_Clicked` event handler when clicked.
#### Handle the ClaimsView data
The next step is to add the code to handle `ClaimsView` data.
:::code language="csharp" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/ClaimsView.xaml.cs" :::
- The _ClaimsView.xaml.cs_ code represents the code-behind for a claim view in a .NET MAUI app. It starts by importing the necessary namespaces and defining the `ClaimsView` class, which extends `ContentPage`. The `IdTokenClaims` property is an enumerable of strings, initially set to a single string indicating no claims found.
+ The _ClaimsView.xaml.cs_ code represents the code-behind for a claim view in a .NET MAUI app. It starts by importing the necessary namespaces and defining the `ClaimsView` class, which extends `ContentPage`. The `IdTokenClaims` property is an enumerable of strings, initially set to a single string indicating no claims found.
The `ClaimsView` constructor sets the binding context to the current instance, initializes the view components, and calls the `SetViewDataAsync` method asynchronously. The `SetViewDataAsync` method attempts to acquire a token silently, retrieves the claims from the authentication result, and sets the `IdTokenClaims` property to display them in the `ListView` named `Claims`. If a `MsalUiRequiredException` occurs, indicating that user interaction is needed for authentication, the app navigates to the claims view.
To create `appsettings.json`, follow these steps:
Set the **Debug Target** in the Visual Studio toolbar to the device you want to debug and test with. The following steps demonstrate setting the **Debug Target** to _Windows_: 1. Select **Debug Target** drop-down.
-1. Select **Framework**
+1. Select **Framework**
1. Select **net7.0-windows...** Run the app by pressing _F5_ or select the _play button_ at the top of Visual Studio.
Run the app by pressing _F5_ or select the _play button_ at the top of Visual St
## Next Steps -- [Customize the default branding](how-to-customize-branding-customers.md).-- [Configure sign-in with Google](how-to-google-federation-customers.md).
+> [!div class="nextstepaction"]
+> [Tutorial: Add app roles to .NET MAUI app and receive them in the ID token](tutorial-desktop-maui-role-based-access-control.md)
active-directory Tutorial Desktop Maui Role Based Access Control https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/customers/tutorial-desktop-maui-role-based-access-control.md
+
+ Title: "Tutorial: Use role-based access control in your .NET MAUI"
+description: This tutorial demonstrates how to add app roles to .NET Multi-platform App UI (.NET MAUI) shell and receive them in the ID token.
+++++++ Last updated : 07/17/2023++
+# Tutorial: Use role-based access control in your .NET MAUI
+
+This tutorial demonstrates how to add app roles to .NET Multi-platform App UI (.NET MAUI) and receive them in the ID token.
+
+In this tutorial, you learn how to:
+
+> [!div class="checklist"]
+>
+> - Access the roles in the ID token.
+
+## Prerequisites
+
+- [Tutorial: Sign in users in .NET MAUI shell app](tutorial-desktop-app-maui-sign-in-sign-out.md)
+- [Using role-based access control for applications](how-to-use-app-roles-customers.md)
+
+## Receive groups and roles claims in .NET MAUI
+
+Once you configure your customer's tenant, you can retrieve your roles and groups claims in your client app. The roles and groups claims are both present in the ID token and the access token. Access tokens are only validated in the web APIs for which they were acquired by a client. The client shouldn't validate access tokens.
+
+The .NET MAUI needs to check for the app roles claims in the ID token to implement authorization in the client side.
+
+In this tutorial series, you created a .NET MAUI app where you developed the [_ClaimsView.xaml.cs_](tutorial-desktop-app-maui-sign-in-sign-out.md#handle-the-claimsview-data) to handle `ClaimsView` data. In this file, we inspect the contents of ID tokens. The value of the roles claim is checked in the following code snippet:
+
+To access the role claim, you can modify the code snippet as follows:
+
+```csharp
+var idToken = PublicClientSingleton.Instance.MSALClientHelper.AuthResult.IdToken;
+var handler = new JwtSecurityTokenHandler();
+var token = handler.ReadJwtToken(idToken);
+// Get the role claim value
+var roleClaim = token.Claims.FirstOrDefault(c => c.Type == "roles")?.Value;
+
+if (!string.IsNullOrEmpty(roleClaim))
+{
+ // If the role claim exists, add it to the IdTokenClaims
+ IdTokenClaims = new List<string> { roleClaim };
+}
+else
+{
+ // If the role claim doesn't exist, add a message indicating that no role claim was found
+ IdTokenClaims = new List<string> { "No role claim found in ID token" };
+}
+
+Claims.ItemsSource = IdTokenClaims;
+```
+
+> [!NOTE]
+> To read the ID token, you must install the `System.IdentityModel.Tokens.Jwt` package.
+
+If you assign a user to multiple roles, the roles string contains all roles separated by a comma, such as `Orders.Manager, Store.Manager,...`. Make sure you build your application to handle the following conditions:
+
+- Absence of roles claims in the token
+- User hasn't been assigned to any role
+- Multiple values in the roles claim when you assign a user to multiple roles
+
+When you define app roles for your app, it is your responsibility to implement authorization logic for those roles.
+
+## Next steps
+
+For more information about group claims and making informed decisions regarding the usage of app roles or groups, see:
+
+- [Configuring group claims and app roles in tokens](/security/zero-trust/develop/configure-tokens-group-claims-app-roles)
+- [Choose an approach](../../develop/custom-rbac-for-developers.md#choose-an-approach)
active-directory Tutorial Mobile App Maui Sign In Sign Out https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/customers/tutorial-mobile-app-maui-sign-in-sign-out.md
The next step is to add the code for the button's `Clicked` event.
:::code language="csharp" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/MainView.xaml.cs" :::
- The `MainView` class is a content page responsible for displaying the main view of the app. In the constructor, it retrieves the cached user account using the `MSALClientHelper` from the `PublicClientSingleton` instance and enables the sign-in button, if no cached user account is found.
-
+ The `MainView` class is a content page responsible for displaying the main view of the app. In the constructor, it retrieves the cached user account using the `MSALClientHelper` from the `PublicClientSingleton` instance and enables the sign-in button, if no cached user account is found.
+ When the sign-in button is clicked, it calls the `AcquireTokenSilentAsync` method to acquire a token silently and navigates to the `claimsview` page using the `Shell.Current.GoToAsync` method. Additionally, the `OnBackButtonPressed` method is overridden to return true, indicating that the back button is disabled for this view. ### Add claims view page
The next steps will organize the code so that `ClaimsView` page is defined. The
:::code language="xaml" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/ClaimsView.xaml" :::
- This XAML markup code represents the UI layout for a claim view in a .NET MAUI app. It starts by defining the `ContentPage` with a title and disabling the back button behavior.
-
- Inside a `VerticalStackLayout`, there are several `Label` elements displaying static text, followed by a `ListView` named `Claims` that binds to a collection called `IdTokenClaims` to display the claims found in the ID token. Each claim is rendered within a `ViewCell` using a `DataTemplate` and displayed as a centered `Label` within a Grid.
-
- Lastly, there's a `Sign Out` button centered at the bottom of the layout, which triggers the `SignOutButton_Clicked` event handler when clicked.
+ This XAML markup code represents the UI layout for a claim view in a .NET MAUI app. It starts by defining the `ContentPage` with a title and disabling the back button behavior.
+
+ Inside a `VerticalStackLayout`, there are several `Label` elements displaying static text, followed by a `ListView` named `Claims` that binds to a collection called `IdTokenClaims` to display the claims found in the ID token. Each claim is rendered within a `ViewCell` using a `DataTemplate` and displayed as a centered `Label` within a Grid.
+
+ Lastly, there's a `Sign Out` button centered at the bottom of the layout, which triggers the `SignOutButton_Clicked` event handler when clicked.
#### Handle the ClaimsView data
The next step is to add the code to handle `ClaimsView` data.
:::code language="csharp" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Views/ClaimsView.xaml.cs" :::
- The _ClaimsView.xaml.cs_ code represents the code-behind for a claim view in a .NET MAUI app. It starts by importing the necessary namespaces and defining the `ClaimsView` class, which extends `ContentPage`. The `IdTokenClaims` property is an enumerable of strings, initially set to a single string indicating no claims found.
+ The _ClaimsView.xaml.cs_ code represents the code-behind for a claim view in a .NET MAUI app. It starts by importing the necessary namespaces and defining the `ClaimsView` class, which extends `ContentPage`. The `IdTokenClaims` property is an enumerable of strings, initially set to a single string indicating no claims found.
The `ClaimsView` constructor sets the binding context to the current instance, initializes the view components, and calls the `SetViewDataAsync` method asynchronously. The `SetViewDataAsync` method attempts to acquire a token silently, retrieves the claims from the authentication result, and sets the `IdTokenClaims` property to display them in the `ListView` named `Claims`. If a `MsalUiRequiredException` occurs, indicating that user interaction is needed for authentication, the app navigates to the claims view.
The `AppShell` class defines an app's visual hierarchy, the XAML markup used in
1. In the **Solution Explorer** pane of Visual Studio, expand the **AppShell.xaml** file to reveal its code-behind file **AppShell.xaml.cs**. Open the **AppShell.xaml.cs** and replace the content of the file with following code: :::code language="csharp" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/AppShell.xaml.cs" :::
-
+ You update the `AppShell.xaml.cs` file to include the necessary route registrations for the `MainView` and `ClaimsView`. By calling the `InitializeComponent()` method, you ensure the initialization of the `AppShell` class. The `RegisterRoute()` method associate the `mainview` and `claimsview` routes with their respective view types, `MainView` and `ClaimsView`. ## Add platform-specific code
A .NET MAUI app project contains a Platforms folder, with each child folder repr
- Set **Minimum Android version** to _Android 5.0 (API level 21)_. 1. Double-click `Platforms/Android/MainActivity.cs` file in the **Solution Explorer** pane to open the csharp editor. Replace the content of the file with following code:
-
+ :::code language="csharp" source="~/ms-identity-ciam-dotnet-tutorial/1-Authentication/2-sign-in-maui/Platforms/Android/MainActivity.cs" :::
-
- Let's break down the key parts of the code you have added:
-
- - The necessary `using` statements are included at the top.
- - The `MainActivity` class is defined, inheriting from `MauiAppCompatActivity`, which is the base class for the Android platform in .NET MAUI.
- - The [Activity] attribute is applied to the `MainActivity` class, specifying various settings for the Android activity.
- - `Theme = "@style/Maui.SplashTheme"` sets the splash theme for the activity.
- - `MainLauncher = true` designates this activity as the main entry point of the application.
- - `ConfigurationChanges` specifies the configuration changes that the activity can handle, such as _screen size_, _orientation_, _UI mode_, _screen layout_, _smallest screen size_, and _density_.
- - `OnCreate` method is overridden to provide custom logic when the activity is being created.
- - `base.OnCreate(savedInstanceState)` calls the base implementation of the method.
- - `PlatformConfig.Instance.RedirectUri` is set to a dynamically generated value based on `PublicClientSingleton.Instance.MSALClientHelper.AzureAdConfig.ClientId`. It configures the redirect URI for the MSAL client.
- - `PlatformConfig.Instance.ParentWindow` is set to the current activity instance, which specifies the parent window for authentication-related operations.
- - `PublicClientSingleton.Instance.MSALClientHelper.InitializePublicClientAppAsync()` initializes the MSAL client app asynchronously using a helper method from a singleton instance called `MSALClientHelper`. The `Task.Run` is used to execute the initialization on a background thread, and `.Result` is used to synchronously wait for the task to complete.
- - `OnActivityResult` method is overridden to handle the result of an activity launched by the current activity.
- - `base.OnActivityResult(requestCode, resultCode, data)` calls the base implementation of the method.
- - `AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data)` sets the authentication continuation event arguments based on the received request code, result code, and intent data. This is used to continue the authentication flow after an external activity returns a result.
+
+ Let's break down the key parts of the code you have added:
+
+ - The necessary `using` statements are included at the top.
+ - The `MainActivity` class is defined, inheriting from `MauiAppCompatActivity`, which is the base class for the Android platform in .NET MAUI.
+ - The [Activity] attribute is applied to the `MainActivity` class, specifying various settings for the Android activity.
+ - `Theme = "@style/Maui.SplashTheme"` sets the splash theme for the activity.
+ - `MainLauncher = true` designates this activity as the main entry point of the application.
+ - `ConfigurationChanges` specifies the configuration changes that the activity can handle, such as _screen size_, _orientation_, _UI mode_, _screen layout_, _smallest screen size_, and _density_.
+ - `OnCreate` method is overridden to provide custom logic when the activity is being created.
+ - `base.OnCreate(savedInstanceState)` calls the base implementation of the method.
+ - `PlatformConfig.Instance.RedirectUri` is set to a dynamically generated value based on `PublicClientSingleton.Instance.MSALClientHelper.AzureAdConfig.ClientId`. It configures the redirect URI for the MSAL client.
+ - `PlatformConfig.Instance.ParentWindow` is set to the current activity instance, which specifies the parent window for authentication-related operations.
+ - `PublicClientSingleton.Instance.MSALClientHelper.InitializePublicClientAppAsync()` initializes the MSAL client app asynchronously using a helper method from a singleton instance called `MSALClientHelper`. The `Task.Run` is used to execute the initialization on a background thread, and `.Result` is used to synchronously wait for the task to complete.
+ - `OnActivityResult` method is overridden to handle the result of an activity launched by the current activity.
+ - `base.OnActivityResult(requestCode, resultCode, data)` calls the base implementation of the method.
+ - `AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data)` sets the authentication continuation event arguments based on the received request code, result code, and intent data. This is used to continue the authentication flow after an external activity returns a result.
1. In the **Solution Explorer** pane of Visual Studio, select **Platforms**. 1. Right-click on the **Android** folder > **Add** > **New Item...**.
To create `appsettings.json`, follow these steps:
Set the **Debug Target** in the Visual Studio toolbar to the device you want to debug and test with. The following steps demonstrate setting the **Debug Target** to _Android_: 1. Select **Debug Target** drop-down.
-1. Select **Android Emulators**.
+1. Select **Android Emulators**.
1. Select emulator device. Run the app by pressing _F5_ or select the _play button_ at the top of Visual Studio.
active-directory Tutorial Mobile Maui Role Based Access Control https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/customers/tutorial-mobile-maui-role-based-access-control.md
+
+ Title: "Tutorial: Use role-based access control in your .NET MAUI app"
+description: This tutorial demonstrates how to add app roles to .NET Multi-platform App UI (.NET MAUI) and receive them in the ID token.
+++++++ Last updated : 07/17/2023++
+# Tutorial: Use role-based access control in your .NET MAUI app
+
+This tutorial demonstrates how to add app roles to .NET Multi-platform App UI (.NET MAUI) and receive them in the ID token.
+
+In this tutorial, you learn how to:
+
+> [!div class="checklist"]
+>
+> - Access the roles in the ID token.
+
+## Prerequisites
+
+- [Tutorial: Sign in users in .NET MAUI shell app](tutorial-mobile-app-maui-sign-in-sign-out.md)
+- [Using role-based access control for applications](how-to-use-app-roles-customers.md)
+
+## Receive groups and roles claims in .NET MAUI
+
+Once you configure your customer's tenant, you can retrieve your roles and groups claims in your client app. The roles and groups claims are both present in the ID token and the access token. Access tokens are only validated in the web APIs for which they were acquired by a client. The client shouldn't validate access tokens.
+
+The .NET MAUI needs to check for the app roles claims in the ID token to implement authorization in the client side.
+
+In this tutorial series, you created a .NET MAUI app where you developed the [_ClaimsView.xaml.cs_](tutorial-mobile-app-maui-sign-in-sign-out.md#handle-the-claimsview-data) to handle `ClaimsView` data. In this file, we inspect the contents of ID tokens.
+
+To access the role claim, you can modify the code snippet as follows:
+
+```csharp
+var idToken = PublicClientSingleton.Instance.MSALClientHelper.AuthResult.IdToken;
+var handler = new JwtSecurityTokenHandler();
+var token = handler.ReadJwtToken(idToken);
+// Get the role claim value
+var roleClaim = token.Claims.FirstOrDefault(c => c.Type == "roles")?.Value;
+
+if (!string.IsNullOrEmpty(roleClaim))
+{
+ // If the role claim exists, add it to the IdTokenClaims
+ IdTokenClaims = new List<string> { roleClaim };
+}
+else
+{
+ // If the role claim doesn't exist, add a message indicating that no role claim was found
+ IdTokenClaims = new List<string> { "No role claim found in ID token" };
+}
+
+Claims.ItemsSource = IdTokenClaims;
+```
+
+> [!NOTE]
+> To read the ID token, you must install the `System.IdentityModel.Tokens.Jwt` package.
+
+If you assign a user to multiple roles, the roles string contains all roles separated by a comma, such as `Orders.Manager, Store.Manager,...`. Make sure you build your application to handle the following conditions:
+
+- Absence of roles claims in the token
+- User hasn't been assigned to any role
+- Multiple values in the roles claim when you assign a user to multiple roles
+
+When you define app roles for your app, it is your responsibility to implement authorization logic for those roles.
+
+## Next steps
+
+For more information about group claims and making informed decisions regarding the usage of app roles or groups, see:
+
+- [Configuring group claims and app roles in tokens](/security/zero-trust/develop/configure-tokens-group-claims-app-roles)
+- [Choose an approach](../../develop/custom-rbac-for-developers.md#choose-an-approach)
active-directory Facebook Federation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/facebook-federation.md
# Add Facebook as an identity provider for External Identities
+> [!TIP]
+> This article describes adding Facebook as an identity provider for B2B collaboration. If your tenant is configured for customer identity and access management, see [Add Facebook as an identity provider](customers/how-to-facebook-federation-customers.md) for customers.
+ You can add Facebook to your self-service sign-up user flows so that users can sign in to your applications using their own Facebook accounts. To allow users to sign in using Facebook, you'll first need to [enable self-service sign-up](self-service-sign-up-user-flow.md) for your tenant. After you add Facebook as an identity provider, set up a user flow for the application and select Facebook as one of the sign-in options. After you've added Facebook as one of your application's sign-in options, on the **Sign in** page, a user can simply enter the email they use to sign in to Facebook, or they can select **Sign-in options** and choose **Sign in with Facebook**. In either case, they'll be redirected to the Facebook sign in page for authentication.
active-directory Google Federation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/google-federation.md
# Add Google as an identity provider for B2B guest users
+> [!TIP]
+> This article describes adding Google as an identity provider for B2B collaboration. If your tenant is configured for customer identity and access management, see [Add Google as an identity provider](customers/how-to-google-federation-customers.md) for customers.
+ By setting up federation with Google, you can allow invited users to sign in to your shared apps and resources with their own Gmail accounts, without having to create Microsoft accounts. After you've added Google as one of your application's sign-in options, on the **Sign in** page, a user can simply enter the Gmail address they use to sign in to Google. ![Sign in options for Google users](media/google-federation/sign-in-with-google-overview.png)
active-directory Identity Providers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/identity-providers.md
# Identity Providers for External Identities
+> [!TIP]
+> This article applies to B2B collaboration identity providers. If your tenant is configured for customer identity and access management, see [Authentication methods and identity providers for customers](customers/concept-authentication-methods-customers.md).
+ An *identity provider* creates, maintains, and manages identity information while providing authentication services to applications. When sharing your apps and resources with external users, Azure AD is the default identity provider for sharing. This means when you invite external users who already have an Azure AD or Microsoft account, they can automatically sign in without further configuration on your part. External Identities offers a variety of identity providers.
active-directory Self Service Sign Up Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/self-service-sign-up-overview.md
Previously updated : 09/28/2022 Last updated : 08/14/2023
# Self-service sign-up
-When sharing an application with external users, you might not always know in advance who will need access to the application. As an alternative to sending invitations directly to individuals, you can allow external users to sign up for specific applications themselves by enabling [self-service sign-up user flow](self-service-sign-up-user-flow.md). You can create a personalized sign-up experience by customizing the self-service sign-up user flow. For example, you can provide options to sign up with Azure AD or social identity providers and collect information about the user during the sign-up process.
+Self-service sign-up is an essential feature for your External ID workforce and customer scenarios. It gives your partners, consumers, and other external users a frictionless way to sign up and get access to your apps without any intervention on your part.
+
+- In a B2B collaboration scenario, you might not always know in advance who will need access to an application you want to share. As an alternative to sending invitations directly to individuals, you can allow external users to sign up for specific applications themselves. Learn how to [create a self-service sign-up user flow for B2B collaboration](self-service-sign-up-user-flow.md).
+- In a customer identity and access management (CIAM) scenario, it's important to add a self-service sign-up experience to the apps you build for consumers. You can do so by configuring self-service sign-up user flows. Learn more about [planning the customer experience](customers/concept-planning-your-solution.md) or [creating a sign-up and sign-in user flow for customers](customers/how-to-user-flow-sign-up-sign-in-customers.md).
+
+In either scenario, you can create a personalized sign-up experience by customizing the look and feel, providing sign-in with social identity providers, and collecting information about the user during the sign-up process.
> [!NOTE] > You can associate user flows with apps built by your organization. User flows can't be used for Microsoft apps, like SharePoint or Teams. ## User flow for self-service sign-up
-A self-service sign-up user flow creates a sign-up experience for your external users through the application you want to share. The user flow can be associated with one or more of your applications. First you'll enable self-service sign-up for your tenant and federate with the identity providers you want to allow external users to use for sign-in. Then you'll create and customize the sign-up user flow and assign your applications to it.
-You can configure user flow settings to control how the user signs up for the application:
+A self-service sign-up user flow creates a sign-up experience for the application you're providing to external users. You can configure user flow settings to control how the user signs up for the application:
- Account types used for sign-in, such as social accounts like Facebook, or Azure AD accounts - Attributes to be collected from the user signing up, such as first name, postal code, or country/region of residency
-The user can sign in to your application, via the web, mobile, desktop, or single-page application (SPA). The application initiates an authorization request to the user flow-provided endpoint. The user flow defines and controls the user's experience. When the user completes the sign-up user flow, Azure AD generates a token and redirects the user back to your application. Upon completion of sign-up, a guest account is provisioned for the user in the directory. Multiple applications can use the same user flow.
+The user can sign in to your application, via the web, mobile, desktop, or single-page application (SPA). The application initiates an authorization request to the user flow-provided endpoint. The user flow defines and controls the user's experience. When the user completes the sign-up user flow, Azure AD generates a token and redirects the user back to your application. Upon completion of sign-up, an account is provisioned for the user in the directory. Multiple applications can use the same user flow.
## Example of self-service sign-up
-The following example illustrates how we're bringing social identity providers to Azure AD with self-service sign-up capabilities for guest users.
-A partner of Woodgrove opens the Woodgrove app. They decide they want to sign up for a supplier account, so they select Request your supplier account, which initiates the self-service sign-up flow.
+The following B2B collaboration example illustrates self-service sign-up capabilities for guest users. A partner of Woodgrove opens the Woodgrove app. They decide they want to sign up for a supplier account, so they select Request your supplier account, which initiates the self-service sign-up flow.
![Example of self-service sign-up starting page](media/self-service-sign-up-overview/example-start-sign-up-flow.png)
The user enters the information, continues the sign-up flow, and gets access to
## Next steps
- For details, see how to [add self-service sign-up to an app](self-service-sign-up-user-flow.md).
+User flows for B2B collaboration:
+
+- [Create a self-service sign-up user flow for B2B collaboration](self-service-sign-up-user-flow.md)
+
+User flows for customer identity and access management (CIAM):
+
+- [Plan a sign-up experience for customers or consumers](customers/concept-planning-your-solution.md)
+- [Create a sign-up and sign-in user flow for customers or consumers](customers/how-to-user-flow-sign-up-sign-in-customers.md).
active-directory Self Service Sign Up User Flow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/self-service-sign-up-user-flow.md
# Add a self-service sign-up user flow to an app
+> [!TIP]
+> This article applies to B2B collaboration user flows. If your tenant is configured for customer identity and access management, see [Create a sign-up and sign-in user flow for customers](customers/how-to-user-flow-sign-up-sign-in-customers.md).
+ For applications you build, you can create user flows that allow a user to sign up for an app and create a new guest account. A self-service sign-up user flow defines the series of steps the user will follow during sign-up, the [identity providers](identity-providers.md) you'll allow them to use, and the user attributes you want to collect. You can associate one or more applications with a single user flow. > [!NOTE]
active-directory User Flow Add Custom Attributes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/user-flow-add-custom-attributes.md
# Define custom attributes for user flows
+> [!TIP]
+> This article applies to B2B collaboration user flows. If your tenant is configured for customer identity and access management, see [Collect user attributes during sign-up](customers/how-to-define-custom-attributes.md) for customers.
+ For each application, you might have different requirements for the information you want to collect during sign-up. Azure AD comes with a built-in set of information stored in attributes, such as Given Name, Surname, City, and Postal Code. With Azure AD, you can extend the set of attributes stored on a guest account when the external user signs up through a user flow. You can create custom attributes in the Azure portal and use them in your [self-service sign-up user flows](self-service-sign-up-user-flow.md). You can also read and write these attributes by using the [Microsoft Graph API](../../active-directory-b2c/microsoft-graph-operations.md). Microsoft Graph API supports creating and updating a user with extension attributes. Extension attributes in the Graph API are named by using the convention `extension_<extensions-app-id>_attributename`. For example:
active-directory User Flow Customize Language https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/external-identities/user-flow-customize-language.md
# Language customization in Azure Active Directory
+> [!TIP]
+> This article applies to B2B collaboration user flows. If your tenant is configured for customer identity and access management, see [Customize the language of the authentication experience](customers/how-to-customize-languages-customers.md) for customers.
+ Language customization in Azure Active Directory (Azure AD) allows your user flow to accommodate different languages to suit your user's needs. Microsoft provides the translations for [36 languages](#supported-languages). In this article, you'll learn how to customize the attribute names on the [attribute collection page](self-service-sign-up-user-flow.md#select-the-layout-of-the-attribute-collection-form), even if your experience is provided for only a single language. ## How language customization works
active-directory Concept Support Access Requests https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/concept-support-access-requests.md
+
+ Title: Support access requests in Microsoft Entra ID
+description: Learn how Microsoft Support engineers can access identity diagnostic information in Microsoft Entra ID.
+++++++++ Last updated : 07/31/2023+++
+# About Microsoft Support access requests (preview)
+
+Microsoft Support requests are automatically assigned to a support engineer with expertise in solving similar problems. To expedite solution delivery, our support engineers use diagnostic tooling to read [identity diagnostic data](/troubleshoot/azure/active-directory/support-data-collection-diagnostic-logs) for your tenant.
+
+Microsoft Support's access to your identity diagnostic data is granted only with your approval, is read-only, and lasts only as long as we are actively working with you to solve your problem.
+
+For many support requests created in the Microsoft Entra admin center, you can manage the access to your identity diagnostic data by enabling the "Allow collection of advanced diagnostic information" property. If this setting is set to "no" our support engineers must ask *you* to collect the data needed to solve your problem, which could slow down your problem resolution.
+
+## Microsoft Support access requests
+
+Sometimes support engineers need additional approval from you to access identity diagnostic data to solve your problem. For example, if a support engineer needs to access identity diagnostic data in a different Microsoft Entra tenant than the one in which you created the support request, the engineer must ask you to grant them access to that data.
+
+Microsoft Support access requests (preview) enable you to manage Microsoft Support's access to your identity diagnostic data for support requests where you cannot manage that access in the Microsoft Entra admin center's support request management experience.
+
+## Support access role permissions
+
+To manage Microsoft Support access requests, you must be assigned to a role that has full permission to manage Microsoft Entra support tickets for the tenant. This role permission is included in Azure Active Directory (Azure AD) built-in roles with the action `microsoft.azure.supportTickets/allEntities/allTasks`. You can see which Azure AD roles have this permission in the [Azure AD built-in roles](../roles/permissions-reference.md) article.
+
+Azure Active Directory is being renamed to Microsoft Entra ID. For more information see [New name for Azure Active Directory](../fundamentals/new-name.md).
+
+## Next steps
+
+- [Approve Microsoft Support access requests](how-to-approve-support-access-requests.md)
+- [Manage Microsoft Support access requests](how-to-manage-support-access-requests.md)
+- [View Microsoft Support access request logs](how-to-view-support-access-request-logs.md)
+- [Learn how Microsoft uses data for Azure support](https://azure.microsoft.com/support/legal/support-diagnostic-information-collection/)
active-directory Custom Security Attributes Manage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/custom-security-attributes-manage.md
The following examples show how to assign a custom security attribute role to a
# [PowerShell](#tab/ms-powershell)
-[New-MgRoleManagementDirectoryRoleAssignment](/powershell/module/microsoft.graph.devicemanagement.enrolment/new-mgrolemanagementdirectoryroleassignment)
+[New-MgRoleManagementDirectoryRoleAssignment](/powershell/module/microsoft.graph.identity.governance/new-mgrolemanagementdirectoryroleassignment?view=graph-powershell-1.0)
```powershell $roleDefinitionId = "58a13ea3-c632-46ae-9ee0-9c0d43cd7f3d"
The following examples show how to assign a custom security attribute role to a
# [PowerShell](#tab/ms-powershell)
-[New-MgRoleManagementDirectoryRoleAssignment](/powershell/module/microsoft.graph.devicemanagement.enrolment/new-mgrolemanagementdirectoryroleassignment)
+[New-MgRoleManagementDirectoryRoleAssignment](/powershell/module/microsoft.graph.identity.governance/new-mgrolemanagementdirectoryroleassignment?view=graph-powershell-1.0)
```powershell $roleDefinitionId = "58a13ea3-c632-46ae-9ee0-9c0d43cd7f3d"
active-directory How To Approve Support Access Requests https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/how-to-approve-support-access-requests.md
+
+ Title: Approve Microsoft Support access requests (preview)
+description: How to approve Microsoft Support access requests to Azure Active Directory identity data
+++++++++ Last updated : 08/10/2023+++
+# Approving Microsoft Support access requests (preview)
+
+In many situations, enabling the collection of **Advanced diagnostic information** during the creation of a support access request is sufficient for Microsoft Support to troubleshoot your issue. In some situations though, a separate approval may be needed to allow Microsoft Support to access your identity diagnostic data.
+
+Microsoft Support access requests (preview) enable you to [give Microsoft Support engineers access to diagnostic data](concept-support-access-requests.md) in your identity service to help solve support requests you submitted to Microsoft. You can use the Microsoft Entra admin center and the Azure Active Directory (Azure AD) portal to manage Microsoft Support access requests (preview).
+
+This article describes how the process works and how to approve Microsoft Support access requests.
+
+## Prerequisites
+
+Only authorized users in your tenant can view and manage Microsoft Support access requests. To view, approve, and reject Microsoft Support access requests, a role must have the permission `microsoft.azure.supportTickets/allEntities/allTasks`. To see which Azure AD roles have this permission, search the [Azure AD built-in roles](../roles/permissions-reference.md) for the required permission.
+
+## Scenarios and workflow
+
+A support access request may be needed when a support request is submitted to Microsoft Support from a tenant that is different from the tenant where the issue is occurring. This scenario is known as a *cross-tenant* scenario. The *resource tenant* is the tenant where the issue is occurring and the tenant where the support request was created is known as the *support request tenant*.
+
+Let's take a closer look at the workflow for this scenario:
+
+- A support request is submitted from a tenant that is different from the tenant where the issue is occurring.
+- A Microsoft Support engineer creates a support access request to access identity diagnostic data for the *resource tenant*.
+- An administrator of *both* tenants approves the Microsoft Support access request.
+- With approval, the support engineer has access to the data only in the approved *resource tenant*.
+- When the support engineer closes the support request, access to your identity data is automatically revoked.
+
+This cross-tenant scenario is the primary scenario where a support access request is necessary. In these scenarios, Microsoft approved access is visible only in the resource tenant. To preserve cross-tenant privacy, an administrator of the *support request tenant* is unable to see whether an administrator of the *resource tenant* has manually removed this approval.
+
+## View pending requests
+
+When you have a pending support access request, you can view and approve that request from a couple places.
+
+1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/) and navigate to **Diagnose and solve problems**.
+
+1. Select the link from the banner message at the top of the page.
+
+ ![Screenshot of the Diagnose and solve problems page with the banner notification highlighted.](media/how-to-approve-support-access-requests/diagnose-solve-problems-banner.png)
+
+ Or scroll to the bottom of the page and select **Manage pending requests** from the **Microsoft Support Access Requests** section.
+
+ :::image type="content" source="media/how-to-approve-support-access-requests/diagnose-solve-problems-access-requests.png" alt-text="Screenshot of the Diagnose and solve problems page with the Manage pending requests link highlighted." lightbox="media/how-to-approve-support-access-requests/diagnose-solve-problems-access-requests-expanded.png":::
+
+1. Select either the **Support request ID** link or **Review for approval** link for the request you need to approve.
+
+ ![Screenshot of the pending request with links to view details highlighted.](media/how-to-approve-support-access-requests/pending-request-view-details-links.png)
+
+## Approve or reject a support request
+
+When viewing the details of a pending support access request, you can approve or reject the request.
+
+- To approve the support access request, select the **Approve** button.
+ - Microsoft Support now has *read-only* access to your identity diagnostic data until your support request is completed.
+- To reject the support access request, select the **Reject** button.
+ - Microsoft Support does *not* have access to your identity diagnostic data.
+ - A message appears, indicating this choice may result in slower resolution of your support request.
+ - Your support engineer may ask you for data needed to diagnose the issue, and you must collect and provide that information to your support engineer.
+
+![Screenshot of the Support Access requests details page with the Reject and Approve buttons highlighted.](media/how-to-approve-support-access-requests/pending-request-details.png)
+
+## Next steps
+
+- [How to create a support request](how-to-get-support.md)
+- [Manage Microsoft Support access requests](how-to-manage-support-access-requests.md)
+- [View Microsoft Support access request logs](how-to-view-support-access-request-logs.md)
+- [Learn how Microsoft uses data for Azure support](https://azure.microsoft.com/support/legal/support-diagnostic-information-collection/)
active-directory How To Manage Support Access Requests https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/how-to-manage-support-access-requests.md
+
+ Title: Manage Microsoft Support access requests (preview)
+description: How to view and control support access requests to Azure Active Directory identity data
+++++++++ Last updated : 08/10/2023+++
+# Manage Microsoft Support access requests (preview)
+
+You can use the Microsoft Entra admin center and the Azure Active Directory (Azure AD) portal to manage Microsoft Support access requests (preview). Microsoft Support access requests enable you to [give Microsoft Support engineers access to identity diagnostic data](concept-support-access-requests.md) in your identity service to help solve support requests you submitted to Microsoft.
+
+## Prerequisites
+
+Only certain Azure AD roles are authorized to manage Microsoft Support access requests. To manage Microsoft Support access requests, a role must have the permission `microsoft.azure.supportTickets/allEntities/allTasks`. To see which Azure AD roles have this permission, search the [Azure AD built-in roles](../roles/permissions-reference.md) for the required permission.
+
+## View support access requests
+
+1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/) and navigate to **Diagnose and solve problems**.
+
+1. Scroll to the bottom of the page and select **Approved access** from the **Microsoft Support Access Requests** section.
+
+ :::image type="content" source="media/how-to-manage-support-access-requests/diagnose-solve-problems-access-requests.png" alt-text="Screenshot of the Diagnose and solve problems page with the Manage pending requests link highlighted." lightbox="media/how-to-manage-support-access-requests/diagnose-solve-problems-access-requests-expanded.png":::
+
+1. Select the **Support request ID** link for the request you need to approve.
+
+ ![Screenshot of the pending request with links to view details highlighted.](media/how-to-manage-support-access-requests/approved-access.png)
+
+## Revoke access to an approved support access request
+
+Closing a support request automatically revokes the support engineer's access to your identity diagnostic data. You can manually revoke Microsoft Support's access to identity diagnostic data for the support request *before* your support request is closed.
+
+Select the **Remove access** button to revoke access to an approved support access request.
+
+![Screenshot of the Support access requests history with the Revoke button highlighted.](media/how-to-manage-support-access-requests/remove-approved-access.png)
+
+When your support request is closed, the status of an approved Microsoft Support access request is automatically set to **Completed.** Microsoft Support access requests remain in the **Approved access** list for 30 days.
+
+## Next steps
+
+- [Approve Microsoft Support access requests](how-to-approve-support-access-requests.md)
+- [View Microsoft Support access request logs](how-to-view-support-access-request-logs.md)
+- [Learn how Microsoft uses data for Azure support](https://azure.microsoft.com/support/legal/support-diagnostic-information-collection/)
active-directory How To View Support Access Request Logs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/how-to-view-support-access-request-logs.md
+
+ Title: View activity logs for Microsoft Support access requests (preview)
+description: How to view activity logs for Microsoft Support access requests.
+++++++++ Last updated : 08/10/2023+++
+# View activity logs for Microsoft Support access requests (preview)
+
+All activities related to Microsoft Support access requests are included in the Microsoft Entra ID audit logs. Activities can include requests from users in your tenant or an automated service. This article describes how to view the different types of activity logs.
+
+## Prerequisites
+
+To access the audit logs for a tenant, you must have one of the following roles:
+
+- Reports Reader
+- Security Reader
+- Security Administrator
+- Global Administrator
+
+## How to access the logs
+
+You can access a filtered view of audit logs for your tenant from the Microsoft Support access requests area. Select **Audit logs** from the side menu to view the audit logs with the category pre-selected.
+
+1. Sign in to the [Microsoft Entra admin center](https://entra.microsoft.com/) and navigate to **Diagnose and solve problems**.
+
+1. Scroll to the bottom of the page and select **Manage pending requests** from the **Microsoft Support Access Requests** section.
+
+1. Select **Audit logs** from the side menu.
+
+You can also access these logs from the Microsoft Entra ID Audit logs. Select **Core Directory** as the service and `MicrosoftSupportAccessManagement` as the category.
+
+## Types of requests
+
+There are some details associated with support access request audit logs that are helpful to understand. Knowing the difference between the types of request may help when exploring the logs.
+
+Activity logs for Microsoft Support access requests fall into two categories: user-initiated activities, and automated activities.
+
+### User-initiated activities
+
+There are three user-initiated activities that you can see in your Azure AD audit logs. These are actions requested by administrators of your tenant.
+
+- Approval of a Microsoft Support access request
+- Rejection of a Microsoft Support access request
+- Manual removal of Microsoft Support access before your support request is closed
+
+### Automated requests
+
+There are three activities that can be associated with an automated or system-initiated Microsoft Support access request:
+
+- Creation of a Microsoft Support access *request* in the support request tenant
+- Creation of a Microsoft Support access *approval* in the resource tenant. This is done automatically after a Microsoft Support access request is approved by a user who is an administrator of both the support request tenant, and the resource tenant
+- Removal of Microsoft Support access upon closure of your support request
+
+## Next steps
+
+- [Manage Microsoft Support access requests](how-to-manage-support-access-requests.md)
+- [Learn about audit logs](../../active-directory/reports-monitoring/concept-audit-logs.md)
active-directory How To Configure https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/cloud-sync/how-to-configure.md
Previously updated : 01/20/2023 Last updated : 08/14/2023
You can scope the agent to synchronize specific users and groups by using on-pre
:::image type="content" source="media/how-to-configure/new-ux-configure-4.png" alt-text="Screenshot of scoping filters icon." lightbox="media/how-to-configure/new-ux-configure-4.png":::
-You can't configure groups and organizational units within a configuration.
+You can configure groups and organizational units within a configuration.
>[!NOTE] > You cannot use nested groups with group scoping. Nested objects beyond the first level will not be included when scoping using security groups. Only use group scope filtering for pilot scenarios as there are limitations to syncing large groups.
active-directory How To Connect Password Hash Synchronization https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/how-to-connect-password-hash-synchronization.md
To support temporary passwords in Azure AD for synchronized users, you can enabl
> If the user has the option "Password never expires" set in Active Directory (AD), the force password change flag will not be set in Active Directory (AD), so the user will not be prompted to change the password during the next sign-in. > > A new user created in Active Directory with "User must change password at next logon" flag will always be provisioned in Azure AD with a password policy to "Force change password on next sign-in", irrespective of the *ForcePasswordChangeOnLogOn* feature being true or false. This is an Azure AD internal logic since the new user is provisioned without a password, whereas *ForcePasswordChangeOnLogOn* feature only affects admin password reset scenarios.
+>
+> If a user was created in Active Directory with "User must change password at next logon" before the feature was enabled, the user will receive an error while signing in. To remediate this issue, un-check and re-check the field "User must change password at next logon" in Active Directory Users and Computers. After synchronizing the user object changes, the user will receive the expected prompt in Azure AD to update their password.
> [!CAUTION] > You should only use this feature when SSPR and Password Writeback are enabled on the tenant. This is so that if a user changes their password via SSPR, it will be synchronized to Active Directory.
active-directory Plan Hybrid Identity Design Considerations Accesscontrol Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-accesscontrol-requirements.md
- Title: Hybrid identity design access control requirements Azure
-description: Covers the pillars of identity, and identifying access requirements for resources for users in a hybrid environment.
------ Previously updated : 01/26/2023-----
-# Determine access control requirements for your hybrid identity solution
-When an organization is designing their hybrid identity solution, they can also use this opportunity to review access requirements for the resources that they are planning to make it available for users. The data access cross all four pillars of identity, which are:
-
-* Administration
-* Authentication
-* Authorization
-* Auditing
-
-The sections that follow will cover authentication and authorization in more details, administration, and auditing are part of the hybrid identity lifecycle. Read [Determine hybrid identity management tasks](plan-hybrid-identity-design-considerations-hybrid-id-management-tasks.md) for more information about these capabilities.
-
-> [!NOTE]
-> Read [The Four Pillars of Identity - Identity Management in the Age of Hybrid IT](https://social.technet.microsoft.com/wiki/contents/articles/15530.the-four-pillars-of-identity-identity-management-in-the-age-of-hybrid-it.aspx) for more information about each one of those pillars.
->
->
-
-## Authentication and authorization
-There are different scenarios for authentication and authorization, these scenarios will have specific requirements that must be fulfilled by the hybrid identity solution that the company is going to adopt. Scenarios involving Business to Business (B2B) communication can add an extra challenge for IT Admins since they will need to ensure that the authentication and authorization method used by the organization can communicate with their business partners. During the designing process for authentication and authorization requirements, ensure that the following questions are answered:
-
-* Will your organization authenticate and authorize only users located at their identity management system?
- * Are there any plans for B2B scenarios?
- * If yes, do you already know which protocols (SAML, OAuth, Kerberos, or Certificates) will be used to connect both businesses?
-* Does the hybrid identity solution that you are going to adopt support those protocols?
-
-Another important point to consider is where the authentication repository that will be used by users and partners will be located and the administrative model to be used. Consider the following two core options:
-
-* Centralized: in this model, the userΓÇÖs credentials, policies and administration can be centralized on-premises or in the cloud.
-* Hybrid: in this model, the userΓÇÖs credentials, policies and administration will be centralized on-premises and a replicated in the cloud.
-
-Which model your organization will adopt will vary according to their business requirements, you want to answer the following questions to identify where the identity management system will reside and the administrative mode to use:
-
-* Does your organization currently have an identity management on-premises?
- * If yes, do they plan to keep it?
- * Are there any regulation or compliance requirements that your organization must follow that dictates where the identity management system should reside?
-* Does your organization use single sign-on for apps located on-premises or in the cloud?
- * If yes, does the adoption of a hybrid identity model affect this process?
-
-## Access Control
-While authentication and authorization are core elements to enable access to corporate data through userΓÇÖs validation, it is also important to control the level of access that these users will have and the level of access administrators will have over the resources that they are managing. Your hybrid identity solution must be able to provide granular access to resources, delegation, and role base access control. Ensure that the following question is answered regarding access control:
-
-* Does your company have more than one user with elevated privilege to manage your identity system?
- * If yes, does each user need the same access level?
-* Would your company need to delegate access to users to manage specific resources?
- * If yes, how frequently this happens?
-* Would your company need to integrate access control capabilities between on-premises and cloud resources?
-* Would your company need to limit access to resources according to some conditions?
-* Would your company have any application that needs custom control access to some resources?
- * If yes, where are those apps located (on-premises or in the cloud)?
- * If yes, where are those target resources located (on-premises or in the cloud)?
-
-> [!NOTE]
-> Make sure to take notes of each answer and understand the rationale behind the answer. [Define Data Protection Strategy](plan-hybrid-identity-design-considerations-data-protection-strategy.md) will go over the options available and advantages/disadvantages of each option. By answering those questions you will select which option best suits your business needs.
->
->
-
-## Next steps
-[Determine incident response requirements](plan-hybrid-identity-design-considerations-incident-response-requirements.md)
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
-
active-directory Plan Hybrid Identity Design Considerations Business Needs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-business-needs.md
- Title: Identity requirements for hybrid cloud identity design Azure
-description: Identify the companyΓÇÖs business needs that will lead you to define the requirements for the hybrid identity design.
------- Previously updated : 01/26/2023-----
-# Determine identity requirements for your hybrid identity solution
-The first step in designing a hybrid identity solution is to determine the requirements for the business organization that will be leveraging this solution. Hybrid identity starts as a supporting role (it supports all other cloud solutions by providing authentication) and goes on to provide new and interesting capabilities that unlock new workloads for users. These workloads or services that you wish to adopt for your users will dictate the requirements for the hybrid identity design. These services and workloads need to leverage hybrid identity both on-premises and in the cloud.
-
-You need to go over these key aspects of the business to understand what it is a requirement now and what the company plans for the future. If you donΓÇÖt have the visibility of the long term strategy for hybrid identity design, chances are that your solution will not be scalable as the business needs grow and change. The diagram below shows an example of a hybrid identity architecture and the workloads that are being unlocked for users. This is just an example of all the new possibilities that can be unlocked and delivered with a solid hybrid identity strategy.
-
-Some components that are part of the hybrid identity architecture
-![hybrid identity architecture](./media/plan-hybrid-identity-design-considerations/hybrid-identity-architechture.png)
-
-## Determine business needs
-Each company will have different requirements, even if these companies are part of the same industry, the real business requirements might vary. You can still leverage best practices from the industry, but ultimately it is the companyΓÇÖs business needs that will lead you to define the requirements for the hybrid identity design.
-
-Make sure to answer the following questions to identify your business needs:
-
-* Is your company looking to cut IT operational cost?
-* Is your company looking to secure cloud assets (SaaS apps, infrastructure)?
-* Is your company looking to modernize your IT?
- * Are your users more mobile and demanding IT to create exceptions into your DMZ to allow different type of traffic to access different resources?
- * Does your company have legacy apps that needed to be published to these modern users but are not easy to rewrite?
- * Does your company need to accomplish all these tasks and bring it under control at the same time?
-* Is your company looking to secure usersΓÇÖ identities and reduce risk by bringing new tools that leverage the expertise of MicrosoftΓÇÖs Azure security expertise on-premises?
-* Is your company trying to get rid of the dreaded ΓÇ£externalΓÇ¥ accounts on premises and move them to the cloud where they are no longer a dormant threat inside your on-premises environment?
-
-## Analyze on-premises identity infrastructure
-Now that you have an idea regarding your company business requirements, you need to evaluate your on-premises identity infrastructure. This evaluation is important for defining the technical requirements to integrate your current identity solution to the cloud identity management system. Make sure to answer the following questions:
-
-* What authentication and authorization solution does your company use on-premises?
-* Does your company currently have any on-premises synchronization services?
-* Does your company use any third-party Identity Providers (IdP)?
-
-You also need to be aware of the cloud services that your company might have. Performing an assessment to understand the current integration with SaaS, IaaS or PaaS models in your environment is very important. Make sure to answer the following questions during this assessment:
-
-* Does your company have any integration with a cloud service provider?
-* If yes, which services are being used?
-* Is this integration currently in production or is it a pilot?
-
-> [!NOTE]
-> Cloud Discovery analyzes your traffic logs against the Microsoft Defender for Cloud Apps catalog of over 16,000 cloud apps that are ranked and scored based on more than 70 risk factors, to provide you with ongoing visibility into cloud use, Shadow IT, and the risk Shadow IT poses into your organization.To get started see [Set up Cloud Discovery](/cloud-app-security/set-up-cloud-discovery).
->
->
-
-## Evaluate identity integration requirements
-Next, you need to evaluate the identity integration requirements. This evaluation is important to define the technical requirements for how users will authenticate, how the organizationΓÇÖs presence will look in the cloud, how the organization will allow authorization and what the user experience is going to be. Make sure to answer the following questions:
-
-* Will your organization be using federation, standard authentication or both?
-* Is federation a requirement? Because of the following:
- * Kerberos-based SSO
- * Your company has an on-premises applications (either built in-house or 3rd party) that uses SAML or similar federation capabilities.
- * MFA via Smart Cards. RSA SecurID, etc.
- * Client access rules that address the questions below:
- 1. Can I block all external access to Microsoft 365 based on the IP address of the client?
- 2. Can I block all external access to Microsoft 365, except Exchange ActiveSync?
- 3. Can I block all external access to Microsoft 365, except for browser-based apps (OWA, SPO)
- 4. Can I block all external access to Microsoft 365 for members of designated AD groups
-* Security/auditing concerns
-* Already existing investment in federated authentication
-* What name will our organization use for our domain in the cloud?
-* Does the organization have a custom domain?
- 1. Is that domain public and easily verifiable via DNS?
- 2. If it is not, then do you have a public domain that can be used to register an alternate UPN in AD?
-* Are the user identifiers consistent for cloud representation?
-* Does the organization have apps that require integration with cloud services?
-* Does the organization have multiple domains and will they all use standard or federated authentication?
-
-## Evaluate applications that run in your environment
-Now that you have an idea regarding your on-premises and cloud infrastructure, you need to evaluate the applications that run in these environments. This evaluation is important to define the technical requirements to integrate these applications to the cloud identity management system. Make sure to answer the following questions:
-
-* Where will our applications live?
-* Will users be accessing on-premises applications? In the cloud? Or both?
-* Are there plans to take the existing application workloads and move them to the cloud?
-* Are there plans to develop new applications that will reside either on-premises or in the cloud that will use cloud authentication?
-
-## Evaluate user requirements
-You also have to evaluate the user requirements. This evaluation is important to define the steps that will be needed for on-boarding and assisting users as they transition to the cloud. Make sure to answer the following questions:
-
-* Will users be accessing applications on-premises?
-* Will users be accessing applications in the cloud?
-* How do users typically login to their on-premises environment?
-* How will users sign-in to the cloud?
-
-> [!NOTE]
-> Make sure to take notes of each answer and understand the rationale behind the answer. [Determine incident response requirements](plan-hybrid-identity-design-considerations-incident-response-requirements.md) will go over the options available and pros/cons of each option. By having answered those questions you will select which option best suits your business needs.
->
->
-
-## Next steps
-[Determine directory synchronization requirements](plan-hybrid-identity-design-considerations-directory-sync-requirements.md)
-
-## See also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Contentmgt Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-contentmgt-requirements.md
- Title: Hybrid identity design - content management requirements Azure
-description: Provides insight into how to determine the content management requirements of your business. Usually when a user has their own device, they might also have multiple credentials that will be alternating according to the application that they use. It is important to differentiate what content was created using personal credentials versus the ones created using corporate credentials. Your identity solution should be able to interact with cloud services to provide a seamless experience to the end user while ensure their privacy and increase the protection against data leakage.
------ Previously updated : 01/26/2023-----
-# Determine content management requirements for your hybrid identity solution
-Understanding the content management requirements for your business may direct affect your decision on which hybrid identity solution to use. With the proliferation of multiple devices and the capability of users to bring their own devices ([BYOD](/mem/intune/fundamentals/byod-technology-decisions)), the company must protect its own data but it also must keep userΓÇÖs privacy intact. Usually when a user has their own device, they might also have multiple credentials that will be alternating according to the application that they use. It is important to differentiate what content was created using personal credentials versus the ones created using corporate credentials. Your identity solution should be able to interact with cloud services to provide a seamless experience to the end user while ensure their privacy and increase the protection against data leakage.
-
-Your identity solution will be leveraged by different technical controls in order to provide content management as shown in the figure below:
-
-![security controls](./media/plan-hybrid-identity-design-considerations/securitycontrols.png)
-
-**Security controls that will be leveraging your identity management system**
-
-In general, content management requirements will leverage your identity management system in the following areas:
-
-* Privacy: identifying the user that owns a resource and applying the appropriate controls to maintain integrity.
-* Data Classification: identify the user or group and level of access to an object according to its classification.
-* Data Leakage Protection: security controls responsible for protecting data to avoid leakage will need to interact with the identity system to validate the userΓÇÖs identity. This is also important for auditing trail purpose.
-
-> [!NOTE]
-> Read [data classification for cloud readiness](https://download.microsoft.com/download/0/A/3/0A3BE969-85C5-4DD2-83B6-366AA71D1FE3/Data-Classification-for-Cloud-Readiness.pdf) for more information about best practices and guidelines for data classification.
->
->
-
-When planning your hybrid identity solution ensure that the following questions are answered according to your organizationΓÇÖs requirements:
-
-* Does your company have security controls in place to enforce data privacy?
- * If yes, will the security controls be able to integrate with the hybrid identity solution that you are going to adopt?
-* Does your company use data classification?
- * If yes, is the current solution able to integrate with the hybrid identity solution that you are going to adopt?
-* Does your company currently have any solution for data leakage?
- * If yes, is the current solution able to integrate with the hybrid identity solution that you are going to adopt?
-* Does your company need to audit access to resources?
- * If yes, what type of resources?
- * If yes, what level of information is necessary?
- * If yes, where the audit log must reside? On-premises or in the cloud?
-* Does your company need to encrypt any emails that contain sensitive data (SSNs, credit card numbers, etc.)?
-* Does your company need to encrypt all documents/contents shared with external business partners?
-* Does your company need to enforce corporate policies on certain kinds of emails (do no reply all, do not forward)?
-
-> [!NOTE]
-> Make sure to take notes of each answer and understand the rationale behind the answer. [Define Data Protection Strategy](plan-hybrid-identity-design-considerations-data-protection-strategy.md) will go over the options available and advantages/disadvantages of each option. By having answered those questions you will select which option best suits your business needs.
->
->
-
-## Next steps
-[Determine access control requirements](plan-hybrid-identity-design-considerations-accesscontrol-requirements.md)
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Data Protection Strategy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-data-protection-strategy.md
- Title: Hybrid identity design - data protection strategy Azure
-description: You define the data protection strategy for your hybrid identity solution to meet the business requirements that you defined.
------- Previously updated : 01/19/2023-----
-# Define data protection strategy for your hybrid identity solution
-In this task, youΓÇÖll define the data protection strategy for your hybrid identity solution to meet the business requirements that you defined in:
-
-* [Determine data protection requirements](plan-hybrid-identity-design-considerations-dataprotection-requirements.md)
-* [Determine content management requirements](plan-hybrid-identity-design-considerations-contentmgt-requirements.md)
-* [Determine access control requirements](plan-hybrid-identity-design-considerations-accesscontrol-requirements.md)
-* [Determine incident response requirements](plan-hybrid-identity-design-considerations-incident-response-requirements.md)
-
-## Define data protection options
-As explained in [Determine directory synchronization requirements](plan-hybrid-identity-design-considerations-directory-sync-requirements.md), Microsoft Azure AD can synchronize with your on-premises Active Directory Domain Services (AD DS). This integration lets organizations use Azure AD to verify users' credentials when they are trying to access corporate resources. You can do this for both scenarios: data at rest on-premises and in the cloud. Access to data in Azure AD requires user authentication via a security token service (STS).
-
-Once authenticated, the user principal name (UPN) is read from the authentication token. Then, the authorization system determines the replicated partition and container corresponding to the userΓÇÖs domain. Information on the userΓÇÖs existence, enabled state, and role then helps the authorization system determine whether access to the target tenant is authorized for the user in that session. Certain authorized actions (specifically, create user and password reset) create an audit trail that a tenant administrator then uses to manage compliance efforts or investigations.
-
-Moving data from your on-premises datacenter into Azure Storage over an Internet connection may not always be feasible due to data volume, bandwidth availability, or other considerations. The [Azure Storage Import/Export Service](../../../import-export/storage-import-export-service.md) provides a hardware-based option for placing/retrieving large volumes of data in blob storage. It allows you to send [BitLocker-encrypted](/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn306081(v=ws.11)#BKMK_BL2012R2) hard disk drives directly to an Azure datacenter where cloud operators upload the contents to your storage account, or they can download your Azure data to your drives to return to you. Only encrypted disks are accepted for this process (using a BitLocker key generated by the service itself during the job setup). The BitLocker key is provided to Azure separately, thus providing out of band key sharing.
-
-Since data in transit can take place in different scenarios, is also relevant to know that Microsoft Azure uses [virtual networking](../../../virtual-network/index.yml) to isolate tenantsΓÇÖ traffic from one another, employing measures such as host- and guest-level firewalls, IP packet filtering, port blocking, and HTTPS endpoints. However, most of AzureΓÇÖs internal communications, including infrastructure-to-infrastructure and infrastructure-to-customer (on-premises), are also encrypted. Another important scenario is the communications within Azure datacenters; Microsoft manages networks to assure that no VM can impersonate or eavesdrop on the IP address of another. TLS/SSL is used when accessing Azure Storage or SQL Databases, or when connecting to Cloud Services. In this case, the customer administrator is responsible for obtaining a TLS/SSL certificate and deploying it to their tenant infrastructure. Data traffic moving between Virtual Machines in the same deployment or between tenants in a single deployment via Microsoft Azure Virtual Network can be protected through encrypted communication protocols such as HTTPS, SSL/TLS, or others.
-
-Depending on how you answered the questions in [Determine data protection requirements](plan-hybrid-identity-design-considerations-dataprotection-requirements.md), you should be able to determine how you want to protect your data and how the hybrid identity solution can assist you with that process. The following table shows the options supported by Azure that are available for each data protection scenario.
-
-| Data protection options | At rest in the cloud | At rest on-premises | In transit |
-| | | | |
-| BitLocker Drive Encryption |X |X | |
-| SQL Server to encrypt databases |X |X | |
-| VM-to-VM Encryption | | |X |
-| SSL/TLS | | |X |
-| VPN | | |X |
-
-> [!NOTE]
-> Read [Compliance by Feature](https://azure.microsoft.com/support/trust-center/services/) at [Microsoft Azure Trust Center](https://azure.microsoft.com/support/trust-center/) to know more about the certifications that each Azure service is compliant with.
-> Since the options for data protection use a multilayer approach, comparison between those options are not applicable for this task. Ensure that you are leveraging all options available for each state of the data.
->
->
-
-## Define content management options
-
-One advantage of using Azure AD to manage a hybrid identity infrastructure is that the process is fully transparent from the end userΓÇÖs perspective. The user tries to access a shared resource, the resource requires authentication, the user has to send an authentication request to Azure AD in order to obtain the token and access the resource. This entire process happens in the background, without user interaction.
-
-Organizations that are concern about data privacy usually require data classification for their solution. If their current on-premises infrastructure is already using data classification, it is possible to use Azure AD as the main repository for the userΓÇÖs identity. A common tool that it is used on-premises for data classification is called [Data Classification Toolkit](/previous-versions/tn-archive/hh204743(v=technet.10)) for Windows Server 2012 R2. This tool can help to identify, classify, and protect data on file servers in your private cloud. It is also possible to use the [Automatic File Classification](/windows-server/identity/solution-guides/deploy-automatic-file-classification--demonstration-steps-) in Windows Server 2012 to accomplish this task.
-
-If your organization doesnΓÇÖt have data classification in place but needs to protect sensitive files without adding new Servers on-premises, they can use Microsoft [Azure Rights Management Service](/azure/information-protection/what-is-azure-rms). Azure RMS uses encryption, identity, and authorization policies to help secure your files and email, and it works across multiple devicesΓÇöphones, tablets, and PCs. Because Azure RMS is a cloud service, thereΓÇÖs no need to explicitly configure trusts with other organizations before you can share protected content with them. If they already have a Microsoft 365 or an Azure AD directory, collaboration across organizations is automatically supported. You can also synchronize just the directory attributes that Azure RMS needs to support a common identity for your on-premises Active Directory accounts, by using Azure Active Directory Synchronization Services (Azure AD Sync) or Azure AD Connect.
-
-A vital part of content management is to understand who is accessing which resource, therefore a rich logging capability is important for the identity management solution. Azure AD provides log over 30 days including:
-
-* Changes in role membership (ex: user added to Global Administrator role)
-* Credential updates (ex: password changes)
-* Domain management (ex: verifying a custom domain, removing a domain)
-* Adding or removing applications
-* User management (ex: adding, removing, updating a user)
-* Adding or removing licenses
-
-> [!NOTE]
-> Read [Microsoft Azure Security and Audit Log Management](https://download.microsoft.com/download/B/6/C/B6C0A98B-D34A-417C-826E-3EA28CDFC9DD/AzureSecurityandAuditLogManagement_11132014.pdf) to know more about logging capabilities in Azure.
-> Depending on how you answered the questions in [Determine content management requirements](plan-hybrid-identity-design-considerations-contentmgt-requirements.md), you should be able to determine how you want the content to be managed in your hybrid identity solution. While all options exposed in Table 6 are capable of integrating with Azure AD, it is important to define which is more appropriate for your business needs.
->
->
-
-| Content management options | Advantages | Disadvantages |
-| | | |
-| Centralized on-premises (Active Directory Rights Management Server) |Full control over the server infrastructure responsible for classifying the data <br> Built-in capability in Windows Server, no need for extra license or subscription <br> Can be integrated with Azure AD in a hybrid scenario <br> Supports information rights management (IRM) capabilities in Microsoft Online services such as Exchange Online and SharePoint Online, as well as Microsoft 365 <br> Supports on-premises Microsoft server products, such as Exchange Server, SharePoint Server, and file servers that run Windows Server and File Classification Infrastructure (FCI). |Higher maintenance (keep up with updates, configuration and potential upgrades), since IT owns the Server <br> Require a server infrastructure on-premises<br> DoesnΓÇÖt leverage Azure capabilities natively |
-| Centralized in the cloud (Azure RMS) |Easier to manage compared to the on-premises solution <br> Can be integrated with AD DS in a hybrid scenario <br> Fully integrated with Azure AD <br> DoesnΓÇÖt require a server on-premises in order to deploy the service <br> Supports on-premises Microsoft server products such as Exchange Server, SharePoint, Server, and file servers that run Windows Server and File Classification, Infrastructure (FCI) <br> IT, can have complete control over their tenantΓÇÖs key with BYOK capability. |Your organization must have a cloud subscription that supports RMS <br> Your organization must have an Azure AD directory to support user authentication for RMS |
-| Hybrid (Azure RMS integrated with, On-Premises Active Directory Rights Management Server) |This scenario accumulates the advantages of both, centralized on-premises and in the cloud. |Your organization must have a cloud subscription that supports RMS <br> Your organization must have an Azure AD directory to support user authentication for RMS, <br> Requires a connection between Azure cloud service and on-premises infrastructure |
-
-## Define access control options
-By leveraging the authentication, authorization and access control capabilities available in Azure AD you can enable your company to use a central identity repository while allowing users and partners to use single sign-on (SSO) as shown in the following figure:
-
-![centralized management](./media/plan-hybrid-identity-design-considerations/centralized-management.png)
-
-Centralized management and fully integration with other directories
-
-Azure Active Directory provides single sign-on to thousands of SaaS applications and on-premises web applications. See the [Azure Active Directory federation compatibility list: third-party identity providers that can be used to implement single sign-on](how-to-connect-fed-compatibility.md) article for more details about the SSO third-party that were tested by Microsoft. This capability enables organization to implement a variety of B2B scenarios while keeping control of the identity and access management. However, during the B2B designing process, is important to understand the authentication method that is used by the partner and validate if this method is supported by Azure. Currently, the following methods are supported by Azure AD:
-
-* Security Assertion Markup Language (SAML)
-* OAuth
-* Kerberos
-* Tokens
-* Certificates
-
-> [!NOTE]
-> read [Azure Active Directory Authentication Protocols](/previous-versions/azure/dn151124(v=azure.100)) to know more details about each protocol and its capabilities in Azure.
->
->
-
-Using the Azure AD support, mobile business applications can use the same easy Mobile Services authentication experience to allow employees to sign into their mobile applications with their corporate Active Directory credentials. With this feature, Azure AD is supported as an identity provider in Mobile Services alongside the other identity providers already supported (which include Microsoft Accounts, Facebook ID, Google ID, and Twitter ID). If the on-premises apps use the userΓÇÖs credential located at the companyΓÇÖs AD DS, the access from partners and users coming from the cloud should be transparent. You can manage userΓÇÖs Conditional Access control to (cloud-based) web applications, web API, Microsoft cloud services, third-party SaaS applications, and native (mobile) client applications, and have the benefits of security, auditing, reporting all in one place. However, it is recommended to validate the implementation in a non-production environment or with a limited number of users.
-
-> [!TIP]
-> it is important to mention that Azure AD does not have Group Policy as AD DS has. In order to enforce policy for devices, you need a mobile device management solution such as [Microsoft Intune](/mem/intune/).
->
->
-
-Once the user is authenticated using Azure AD, it is important to evaluate the level of access that the user has. The level of access that the user has over a resource can vary. While Azure AD can add an additional security layer by controlling access to some resources, keep in mind that the resource itself can also have its own access control list separately, such as the access control for files located in a File Server. The following figure summarizes the levels of access control that you can have in a hybrid scenario:
-
-![access control](./media/plan-hybrid-identity-design-considerations/accesscontrol.png)
-
-Each interaction in the diagram showed in Figure X represents one access control scenario that can be covered by Azure AD. Below you have a description of each scenario:
-
-1. Conditional Access to applications that are hosted on-premises: You can use registered devices with access policies for applications that are configured to use AD FS with Windows Server 2012 R2.
-
-2. Access Control to the Azure portal: Azure also lets you control access to the portal by using Azure role-based access control (Azure RBAC)). This method enables the company to restrict the number of operations that an individual can do in the Azure portal. By using Azure RBAC to control access to the portal, IT Admins can delegate access by using the following access management approaches:
-
- - Group-based role assignment: You can assign access to Azure AD groups that can be synced from your local Active Directory. This lets you leverage the existing investments that your organization has made in tooling and processes for managing groups. You can also use the delegated group management feature of Azure AD Premium.
- - Use built-in roles in Azure: You can use three roles ΓÇö Owner, Contributor, and Reader, to ensure that users and groups have permission to do only the tasks they need to do their jobs.
- - Granular access to resources: You can assign roles to users and groups for a particular subscription, resource group, or an individual Azure resource such as a website or database. In this way, you can ensure that users have access to all the resources they need and no access to resources that they do not need to manage.
-
- > [!NOTE]
- > If you are building applications and want to customize the access control for them, it is also possible to use Azure AD Application Roles for authorization. Review this [WebApp-RoleClaims-DotNet example](https://github.com/AzureADSamples/WebApp-RoleClaims-DotNet) on how to build your app to use this capability.
--
-3. Conditional Access for Microsoft 365 applications with Microsoft Intune: IT admins can provision Conditional Access device policies to secure corporate resources, while at the same time allowing information workers on compliant devices to access the services.
-
-4. Conditional Access for Saas apps: [This feature](https://cloudblogs.microsoft.com/enterprisemobility/2015/06/25/azure-ad-conditional-access-preview-update-more-apps-and-blocking-access-for-users-not-at-work/) allows you to configure per-application multi-factor authentication access rules and the ability to block access for users not on a trusted network. You can apply the multi-factor authentication rules to all users that are assigned to the application, or only for users within specified security groups. Users may be excluded from the multi-factor authentication requirement if they are accessing the application from an IP address that in inside the organizationΓÇÖs network.
-
-Since the options for access control use a multilayer approach, comparison between those options are not applicable for this task. Ensure that you are leveraging all options available for each scenario that requires you to control access to your resources.
-
-## Define incident response options
-Azure AD can assist IT to identity potential security risks in the environment by monitoring userΓÇÖs activity. IT can use Azure AD Access and Usage reports to gain visibility into the integrity and security of your organizationΓÇÖs directory. With this information, an IT admin can better determine where possible security risks may lie so that they can adequately plan to mitigate those risks. [Azure AD Premium subscription](../../fundamentals/active-directory-get-started-premium.md) has a set of security reports that can enable IT to obtain this information. [Azure AD reports](../../reports-monitoring/overview-reports.md) are categorized as follows:
-
-* **Anomaly reports**: Contain sign-in events that were found to be anomalous. The goal is to make you aware of such activity and enable you to make a determination about whether an event is suspicious.
-* **Integrated Application report**: Provides insights into how cloud applications are being used in your organization. Azure Active Directory offers integration with thousands of cloud applications.
-* **Error reports**: Indicate errors that may occur when provisioning accounts to external applications.
-* **User-specific reports**: Display device/sign in activity data for a specific user.
-* **Activity logs**: Contain a record of all audited events within the last 24 hours, last 7 days, or last 30 days, as well as group activity changes, and password reset and registration activity.
-
-> [!TIP]
-> Another report that can also help the Incident Response team working on a case is the [user with leaked credentials](https://cloudblogs.microsoft.com/enterprisemobility/2015/06/15/azure-active-directory-premium-reporting-now-detects-leaked-credentials/) report. This report surfaces any matches between the leaked credentials list and your tenant.
->
--
-Other important built-in reports in Azure AD that can be used during an incident response investigation and are:
-
-* **Password reset activity**: provide the admin with insights into how actively password reset is being used in the organization.
-* **Password reset registration activity**: provides insights into which users have registered their methods for password reset, and which methods they have selected.
-* **Group activity**: provides a history of changes to the group (ex: users added or removed) that were initiated in the Access Panel.
-
-In addition to the core reporting capability of Azure AD Premium that you can use during an Incident Response investigation process, IT can also take advantage of the Audit Report to obtain information such as:
-
-* Changes in role membership (for example, user added to Global Administrator role)
-* Credential updates (for example, password changes)
-* Domain management (for example, verifying a custom domain, removing a domain)
-* Adding or removing applications
-* User management (for example, adding, removing, updating a user)
-* Adding or removing licenses
-
-Since the options for incident response use a multilayer approach, comparison between those options is not applicable for this task. Ensure that you are leveraging all options available for each scenario that requires you to use Azure AD reporting capability as part of your companyΓÇÖs incident response process.
-
-## Next steps
-[Determine hybrid identity management tasks](plan-hybrid-identity-design-considerations-hybrid-id-management-tasks.md)
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Dataprotection Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-dataprotection-requirements.md
- Title: Hybrid identity design - data protection requirements Azure
-description: When planning your hybrid identity solution, identify the data protection requirements for your business and which options are available to best fulfill these requirements.
------ Previously updated : 01/26/2023-----
-# Plan for enhancing data security through a strong identity solution
-The first step in protecting data is to identify who can access that data. Also, you need to have an identity solution that can integrate with your system to provide authentication and authorization capabilities. Authentication and authorization are often confused with each other and their roles misunderstood. In reality, they are different, as shown in the figure below:
-
-![mobile device lifecycle](./media/plan-hybrid-identity-design-considerations/mobile-devicemgt-lifecycle.png)
-
-**Mobile device management lifecycle stages**
-
-When planning your hybrid identity solution, you must understand the data protection requirements for your business and which options are available to best fulfil these requirements.
-
-> [!NOTE]
-> Once you finish planning for data security, review [Determine multi-factor authentication requirements](plan-hybrid-identity-design-considerations-multifactor-auth-requirements.md) to ensure that your selections regarding multi-factor authentication requirements were not affected by the decisions you made in this section.
->
->
-
-## Determine data protection requirements
-In the age of mobility, most companies have a common goal: enable their users to be productive on their mobile devices, while on-premises, or remotely from anywhere in order to increase productivity. Companies that have such requirements will also be concerned about the number of threats that must be mitigated in order to keep the companyΓÇÖs data secure and maintain userΓÇÖs privacy. Each company might have different requirements in this regard; different compliance rules that will vary according to which industry the company is acting will lead to different design decisions.
-
-However, there are some security aspects that should be explored and validated, regardless of the industry.
-
-## Data protection paths
-![data protection paths](./media/plan-hybrid-identity-design-considerations/data-protection-paths.png)
-
-**Data protection paths**
-
-In the above diagram, the identity component will be the first one to be verified before data is accessed. However, this data can be in different states during the time it was accessed. Each number on this diagram represents a path in which data can be located at some point in time. These numbers are explained below:
-
-1. Data protection at the device level.
-2. Data protection while in transit.
-3. Data protection while at rest on-premises.
-4. Data protection while at rest in the cloud.
-
-It is necessary that the hybrid identity solution is capable of leveraging both on-premises and cloud identity management resources to identify the user before it grants access to the data. When planning your hybrid identity solution, ensure that the following questions are answered according to your organizationΓÇÖs requirements:
-
-## Data protection at rest
-Regardless of where the data is at rest (device, cloud or on-premises), it is important to perform an assessment to understand the organization needs in this regard. For this area, ensure that the following questions are asked:
-
-* Does your company need to protect data at rest?
- * If yes, is the hybrid identity solution able to integrate with your current on-premises infrastructure?
- * If yes, is the hybrid identity solution able to integrate with your workloads located in the cloud?
-* Is the cloud identity management able to protect the userΓÇÖs credentials and other data stored in the cloud?
-
-## Data protection in transit
-Data in transit between the device and the datacenter or between the device and the cloud must be protected. However, being in-transit does not necessarily mean a communications process with a component outside of your cloud service; it moves internally, also, such as between two virtual networks. For this area, ensure that the following questions are asked:
-
-* Does your company need to protect data in transit?
- * If yes, is the hybrid identity solution able to integrate with secure controls such as SSL/TLS?
-* Does the cloud identity management keep the traffic to and within the directory store (within and between datacenters) signed?
-
-## Compliance
-Regulations, laws, and regulatory compliance requirements will vary according to the industry that your company belongs. Companies in high regulated industries must address identity-management concerns related to compliance issues. Regulations such as Sarbanes-Oxley (SOX), the Health Insurance Portability and Accountability Act (HIPAA), the Gramm-Leach-Bliley Act (GLBA) and the Payment Card Industry Data Security Standard (PCI DSS) are strict regarding identity and access. The hybrid identity solution that your company will adopt must have the core capabilities that will fulfill the requirements of one or more of these regulations. For this area, ensure that the following questions are asked:
-
-* Is the hybrid identity solution compliant with the regulatory requirements for your business?
-* Does the hybrid identity solution has built
-* in capabilities that will enable your company to be compliant regulatory requirements?
-
-> [!NOTE]
-> Make sure to take notes of each answer and understand the rationale behind the answer. [Define Data Protection Strategy](plan-hybrid-identity-design-considerations-data-protection-strategy.md) will go over the options available and advantages/disadvantages of each option. By having answered those questions you will select which option best suits your business needs.
->
->
-
-## Next steps
- [Determine content management requirements](plan-hybrid-identity-design-considerations-contentmgt-requirements.md)
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
-
active-directory Plan Hybrid Identity Design Considerations Directory Sync Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-directory-sync-requirements.md
- Title: Hybrid identity design - directory sync requirements Azure
-description: Identify what requirements are needed for synchronizing all the users between on=premises and cloud for the enterprise.
------- Previously updated : 01/19/2023-----
-# Determine directory synchronization requirements
-Synchronization is all about providing users an identity in the cloud based on their on-premises identity. Whether or not they will use synchronized account for authentication or federated authentication, the users will still need to have an identity in the cloud. This identity will need to be maintained and updated periodically. The updates can take many forms, from title changes to password changes.
-
-Start by evaluating the organizations on-premises identity solution and user requirements. This evaluation is important to define the technical requirements for how user identities will be created and maintained in the cloud. For a majority of organizations, Active Directory is on-premises and will be the on-premises directory that users will by synchronized from, however in some cases this will not be the case.
-
-Make sure to answer the following questions:
-
-* Do you have one AD forest, multiple, or none?
-
- * How many Azure AD directories will you be synchronizing to?
-
- 1. Are you using filtering?
- 2. Do you have multiple Azure AD Connect servers planned?
-* Do you currently have a synchronization tool on-premises?
-
- * If yes, does your users if users have a virtual directory/integration of identities?
-* Do you have any other directory on-premises that you want to synchronize (e.g. LDAP Directory, HR database, etc)?
- * Are you going to be doing any GALSync?
- * What is the current state of UPNs in your organization?
- * Do you have a different directory that users authenticate against?
- * Does your company use Microsoft Exchange?
- * Do they plan of having a hybrid exchange deployment?
-
-Now that you have an idea about your synchronization requirements, you need to determine which tool is the correct one to meet these requirements. Microsoft provides several tools to accomplish directory integration and synchronization. See the [Hybrid Identity directory integration tools comparison table](plan-hybrid-identity-design-considerations-tools-comparison.md) for more information.
-
-Now that you have your synchronization requirements and the tool that will accomplish this for your company, you need to evaluate the applications that use these directory services. This evaluation is important to define the technical requirements to integrate these applications to the cloud. Make sure to answer the following questions:
-
-* Will these applications be moved to the cloud and use the directory?
-* Are there special attributes that need to be synchronized to the cloud so these applications can use them successfully?
-* Will these applications need to be re-written to take advantage of cloud auth?
-* Will these applications continue to live on-premises while users access them using the cloud identity?
-
-You also need to determine the security requirements and constraints directory synchronization. This evaluation is important to get a list of the requirements that will be needed in order to create and maintain userΓÇÖs identities in the cloud. Make sure to answer the following questions:
-
-* Where will the synchronization server be located?
-* Will it be domain joined?
-* Will the server be located on a restricted network behind a firewall, such as a DMZ?
- * Will you be able to open the required firewall ports to support synchronization?
-* Do you have a disaster recovery plan for the synchronization server?
-* Do you have an account with the correct permissions for all forests you want to synch with?
- * If your company doesnΓÇÖt know the answer for this question, review the section ΓÇ£Permissions for password synchronizationΓÇ¥ in the article [Install the Azure Active Directory Sync Service](/previous-versions/azure/azure-services/dn757602(v=azure.100)#BKMK_CreateAnADAccountForTheSyncService) and determine if you already have an account with these permissions or if you need to create one.
-* If you have multi-forest sync is the sync server able to get to each forest?
-
-> [!NOTE]
-> Make sure to take notes of each answer and understand the rationale behind the answer. [Determine incident response requirements](plan-hybrid-identity-design-considerations-incident-response-requirements.md) will go over the options available. By having answered those questions you will select which option best suits your business needs.
->
->
-
-## Next steps
-[Determine multi-factor authentication requirements](plan-hybrid-identity-design-considerations-multifactor-auth-requirements.md)
-
-## See also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Hybrid Id Management Tasks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-hybrid-id-management-tasks.md
- Title: Hybrid identity design - management tasks Azure
-description: Azure AD checks the specific conditions you pick when authenticating the user and before allowing access to the application with Conditional Access control.
------ Previously updated : 01/19/2023-----
-# Plan for Hybrid Identity Lifecycle
-Identity is one of the foundations of your enterprise mobility and application access strategy. Whether you are signing on to your mobile device or SaaS app, your identity is the key to gaining access to everything. At its highest level, an identity management solution encompasses unifying and syncing between your identity repositories, which includes automating and centralizing the process of provisioning resources. The identity solution should be a centralized identity across on-premises and cloud and also use some form of identity federation to maintain centralized authentication and securely share and collaborate with external users and businesses. Resources range from operating systems and applications to people in, or affiliated with, an organization. Organizational structure can be altered to accommodate the provisioning policies and procedures.
-
-It is also important to have an identity solution geared to empower your users by providing them with self-service experiences to keep them productive. Your identity solution is more robust if it enables single sign-on for users across all the resources they need access. Administrators at all levels can use standardized procedures for managing user credentials. Some levels of administration can be reduced or eliminated, depending on the breadth of the provisioning management solution. Furthermore, you can securely distribute administration capabilities, manually or automatically, among various organizations. For example, a domain administrator can serve only the people and resources in that domain. This user can do administrative and provisioning tasks, but is not authorized to do configuration tasks, such as creating workflows.
-
-## Determine Hybrid Identity Management Tasks
-Distributing administrative tasks in your organization improves the accuracy and effectiveness of administration and improves the balance of the workload of an organization. Following are the pivots that define a robust identity management system.
-
- ![identity management considerations](./media/plan-hybrid-identity-design-considerations/Identity_management_considerations.png)
-
-To define hybrid identity management tasks, you must understand some essential characteristics of the organization that will be adopting hybrid identity. It is important to understand the current repositories being used for identity sources. By knowing those core elements, you will have the foundational requirements and based on that you will need to ask more granular questions that will lead you to a better design decision for your Identity solution.
-
-While defining those requirements, ensure that at least the following questions are answered
-
-* Provisioning options:
-
- * Does the hybrid identity solution support a robust account access management and provisioning system?
- * How are users, groups, and passwords going to be managed?
- * Is the identity lifecycle management responsive?
- * How long does password updates account suspension take?
-* License management:
-
- * Does the hybrid identity solution handles license management?
- * If yes, what capabilities are available?
- * Does the solution handle group-based license management?
-
- * If yes, is it possible to assign a security group to it?
- * If yes, will the cloud directory automatically assign licenses to all the members of the group?
- * What happens if a user is subsequently added to, or removed from the group, will a license be automatically assigned or removed as appropriate?
-* Integration with other third-party identity providers:
- * Can this hybrid solution be integrated with third-party identity providers to implement single sign-on?
- * Is it possible to unify all the different identity providers into a cohesive identity system?
- * If yes, how and which are they and what capabilities are available?
-
-## Synchronization Management
-One of the goals of an identity manager, to be able to bring all the identity providers and keep them synchronized. You keep the data synchronized based on an authoritative master identity provider. In a hybrid identity scenario, with a synchronized management model, you manage all user and device identities in an on-premises server and synchronize the accounts and, optionally, passwords to the cloud. The user enters the same password on-premises as they do in the cloud, and at sign-in, the password is verified by the identity solution. This model uses a directory synchronization tool.
-
-![directory sync](./media/plan-hybrid-identity-design-considerations/Directory_synchronization.png)
-To proper design the synchronization of your hybrid identity solution ensure that the following questions are answered:
-* What are the sync solutions available for the hybrid identity solution?
-* What are the single sign on capabilities available?
-* What are the options for identity federation between B2B and B2C?
-
-## Next steps
-[Determine hybrid identity management adoption strategy](plan-hybrid-identity-design-considerations-lifecycle-adoption-strategy.md)
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
-
active-directory Plan Hybrid Identity Design Considerations Identity Adoption Strategy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-identity-adoption-strategy.md
- Title: Hybrid identity design - adoption strategy Azure
-description: With Conditional Access control, Azure AD checks the specific conditions you pick when authenticating the user and before allowing access to the application.
------ Previously updated : 01/27/2023-----
-# Define a hybrid identity adoption strategy
-In this task, you define the hybrid identity adoption strategy for your hybrid identity solution to meet the business requirements that were discussed in:
-
-* [Determine business needs](plan-hybrid-identity-design-considerations-business-needs.md)
-* [Determine directory synchronization requirements](plan-hybrid-identity-design-considerations-directory-sync-requirements.md)
-* [Determine multi-factor authentication requirements](plan-hybrid-identity-design-considerations-multifactor-auth-requirements.md)
-
-## Define business needs strategy
-The first task addresses determining the organizations business needs. This task can be broad and scope creep can occur if you aren't careful. In the beginning, keep it simple but always remember to plan for a design that will accommodate and facilitate change in the future. Regardless of whether it's a simple design or a complex one, Azure Active Directory is the Microsoft Identity platform that supports Microsoft 365, Microsoft Online Services, and cloud aware applications.
-
-## Define an integration strategy
-Microsoft has three main integration scenarios: cloud identities, synchronized identities, and federated identities. You should plan on adopting one of these integration strategies. The strategy you choose can vary. Decisions in choosing one may include, what type of user experience you want to provide, do you've an existing infrastructure, and what is the most cost effective.
-
-![integration scenarios](./media/plan-hybrid-identity-design-considerations/integration-scenarios.png)
-
-The scenarios defined in the above figure are:
-
-* **Cloud identities**: identities that exist solely in the cloud. For Azure AD, they would reside specifically in your Azure AD directory.
-* **Synchronized**: identities that exist on-premises and in the cloud. Using Azure AD Connect, users are either created or joined with existing Azure AD accounts. The userΓÇÖs password hash is synchronized from the on-premises environment to the cloud in what is called a password hash. Remember that if a user is disabled in the on-premises environment, it can take up to three hours for that account status to show up in Azure AD. This behavior is due to the synchronization time interval.
-* **Federated**: identities exist both on-premises and in the cloud. Using Azure AD Connect, users are either created or joined with existing Azure AD accounts.
-
-> [!NOTE]
-> For more information about the Synchronization options, read [Integrating your on-premises identities with Azure Active Directory](../whatis-hybrid-identity.md).
->
->
-
-The following table helps in determining the advantages and disadvantages of each of the following strategies:
-
-| Strategy | Advantages | Disadvantages |
-| | | |
-| **Cloud identities** |Easier to manage for small organization. <br> Nothing to install on-premises. No extra hardware needed<br>Easily disabled if the user leaves the company |Users will need to sign in when accessing workloads in the cloud <br> Passwords may or may not be the same for cloud and on-premises identities |
-| **Synchronized** |On-premises password authenticates both on-premises and cloud directories <br>Easier to manage for small, medium, or large organizations <br>Users can have single sign-on (SSO) for some resources <br> Microsoft preferred method for synchronization <br> Easier to manage |Some customers may be reluctant to synchronize their directories with the cloud due specific companyΓÇÖs policies |
-| **Federated** |Users can have single sign-on (SSO) <br>If a user is terminated or leaves, the account can be immediately disabled and access revoked,<br> Supports advanced scenarios that can't be accomplished with synchronized |More steps to set up and configure <br> Higher maintenance <br> May require extra hardware for the STS infrastructure <br> May require extra hardware to install the federation server. Other software is required if AD FS is used <br> Require extensive setup for SSO <br> Critical point of failure if the federation server is down, users wonΓÇÖt be able to authenticate |
-
-### Client experience
-The strategy that you use will dictate the user sign-in experience. The following tables provide you with information on what the users should expect their sign-in experience to be. Not all federated identity providers support SSO in all scenarios.
-
-**Domain-joined and private network applications**:
-
-| Application | Synchronized Identity | Federated Identity |
-| | | |
-| Web Browsers |Forms-based authentication |single sign-on, sometimes required to supply organization ID |
-| Outlook |Prompt for credentials |Prompt for credentials |
-| Skype for Business (Lync) |Prompt for credentials |single sign-on for Lync, prompted credentials for Exchange |
-| OneDrive for Business |Prompt for credentials |single sign-on |
-| Office Pro Plus Subscription |Prompt for credentials |single sign-on |
-
-**External or untrusted sources**:
-
-| Application | Synchronized Identity | Federated Identity |
-| | | |
-| Web Browsers |Forms-based authentication |Forms-based authentication |
-| Outlook, Skype for Business (Lync), OneDrive for Business, Office subscription |Prompt for credentials |Prompt for credentials |
-| Exchange ActiveSync |Prompt for credentials |single sign-on for Lync, prompted credentials for Exchange |
-| Mobile apps |Prompt for credentials |Prompt for credentials |
-
-If you've a third-party IdP or are going to use one to provide federation with Azure AD, you need to be aware of the following supported capabilities:
-
-* Any SAML 2.0 provider that is compliant for the SP-Lite profile can support authentication to Azure AD and associated applications
-* Supports passive authentication, which facilitates authentication to OWA, SPO, etc.
-* Exchange Online clients can be supported via the SAML 2.0 Enhanced Client Profile (ECP)
-
-You must also be aware of what capabilities won't be available:
-
-* Without WS-Trust/Federation support, all other active clients break
- * That means no Lync client, OneDrive client, Office Subscription, Office Mobile prior to Office 2016
-* Transition of Office to passive authentication allows them to support pure SAML 2.0 IdPs, but support will still be on a client-by-client basis
-
-> [!NOTE]
-> For the most updated list read the article [Azure AD federation compatibility list](how-to-connect-fed-compatibility.md).
->
->
-
-## Define synchronization strategy
-This task defines the tools that will be used to synchronize the organizationΓÇÖs on-premises data to the cloud and what topology you should use. Because, most organizations use Active Directory, information on using Azure AD Connect to address the questions above is provided in some detail. For environments that don't have Active Directory, there's information about using FIM 2010 R2 or MIM 2016 to help plan this strategy. However, future releases of Azure AD Connect will support LDAP directories, so depending on your timeline, this information may be able to assist.
-
-### Synchronization tools
-Over the years, several synchronization tools have existed and used for various scenarios. Currently Azure AD Connect is the go to tool of choice for all supported scenarios. Azure AD Sync and DirSync are also still around and may even be present in your environment now.
-
-> [!NOTE]
-> For the latest information regarding the supported capabilities of each tool, read [Directory integration tools comparison](plan-hybrid-identity-design-considerations-tools-comparison.md) article.
->
->
-
-### Supported topologies
-When defining a synchronization strategy, the topology that is used must be determined. Depending on the information that was determined in step 2 you can determine which topology is the proper one to use.
-The single forest, single Azure AD topology is the most common and consists of a single Active Directory forest and a single instance of Azure AD. This topology is going to be used in most scenarios and is the expected topology when using Azure AD Connect Express installation as shown in the figure below.
-
-![Supported topologies](./media/plan-hybrid-identity-design-considerations/single-forest.png)
-Single Forest Scenario
-It's common for large and even small organizations to have multiple forests, as shown in Figure 5.
-
-> [!NOTE]
-> For more information about the different on-premises and Azure AD topologies with Azure AD Connect sync read the article [Topologies for Azure AD Connect](plan-connect-topologies.md).
->
->
-
-![multi-forest topology](./media/plan-hybrid-identity-design-considerations/multi-forest.png)
-
-Multi-Forest Scenario
-
-The multi-forest single Azure AD topology should be considered if the following items are true:
-
-* Users have only 1 identity across all forests ΓÇô the uniquely identifying users section below describes this scenario in more detail.
-* The user authenticates to the forest in which their identity is located
-* UPN and Source Anchor (immutable ID) will come from this forest
-* All forests are accessible by Azure AD Connect ΓÇô meaning it does not need to be domain joined and can be placed in a DMZ.
-* Users have only one mailbox
-* The forest that hosts a userΓÇÖs mailbox has the best data quality for attributes visible in the Exchange Global Address List (GAL)
-* If there's no mailbox on the user, then any forest may be used to contribute values
-* If you've a linked mailbox, then there's also another account in a different forest used to sign in.
-
-> [!NOTE]
-> Objects that exist in both on-premises and in the cloud are ΓÇ£connectedΓÇ¥ via a unique identifier. In the context of Directory Synchronization, this unique identifier is referred to as the SourceAnchor. In the context of Single Sign-On, this identifier is referred to as the ImmutableId. [Design concepts for Azure AD Connect](plan-connect-design-concepts.md#sourceanchor) for more considerations regarding the use of SourceAnchor.
->
->
-
-If the above aren't true and you've more than one active account or more than one mailbox, Azure AD Connect will pick one and ignore the other. If you've linked mailboxes but no other account, accounts won't be exported to Azure AD and that user won't be a member of any groups. This behavior is different from how it was in the past with DirSync and is intentional to better support multi-forest scenarios. A multi-forest scenario is shown in the figure below.
-
-![multiple Azure AD tenants](./media/plan-hybrid-identity-design-considerations/multiforest-multipleAzureAD.png)
-
-**Multi-forest multiple Azure AD scenario**
-
-It's recommended to have just a single directory in Azure AD for an organization. However, it's supported if a 1:1 relationship is kept between an Azure AD Connect sync server and an Azure AD directory. For each instance of Azure AD, you need an installation of Azure AD Connect. Also, Azure AD, by design is isolated and users in one instance of Azure AD, won't be able to see users in another instance.
-
-It's possible and supported to connect one on-premises instance of Active Directory to multiple Azure AD directories as shown in the figure below:
-
-![single forest filtering](./media/plan-hybrid-identity-design-considerations/single-forest-flitering.png)
-
-**Single-forest filtering scenario**
-
-The following statements must be true:
-
-* Azure AD Connect sync servers must be configured for filtering so they each have a mutually exclusive set of objects. This done, for example, by scoping each server to a particular domain or OU.
-* A DNS domain can only be registered in a single Azure AD directory so the UPNs of the users in the on-premises AD must use separate namespaces
-* Users in one instance of Azure AD will only be able to see users from their instance. They won't be able to see users in the other instances
-* Only one of the Azure AD directories can enable Exchange hybrid with the on-premises AD
-* Mutual exclusivity also applies to write-back. Thus, some write-back features aren't supported with this topology since it's assumed to be a single on-premises configuration.
- * Group write-back with default configuration
- * Device write-back
-
-The following items aren't supported and should not be chosen as an implementation:
-
-* It isn't supported to have multiple Azure AD Connect sync servers connecting to the same Azure AD directory even if they are configured to synchronize mutually exclusive set of object
-* It's unsupported to sync the same user to multiple Azure AD directories.
-* It's also unsupported to make a configuration change to make users in one Azure AD to appear as contacts in another Azure AD directory.
-* It's also unsupported to modify Azure AD Connect sync to connect to multiple Azure AD directories.
-* Azure AD directories are by design isolated. It's unsupported to change the configuration of Azure AD Connect sync to read data from another Azure AD directory in an attempt to build a common and unified GAL between the directories. It's also unsupported to export users as contacts to another on-premises AD using Azure AD Connect sync.
-
-> [!NOTE]
-> If your organization restricts computers on your network from connecting to the Internet, this article lists the endpoints (FQDNs, IPv4, and IPv6 address ranges) that you should include in your outbound allow lists and Internet Explorer Trusted Sites Zone of client computers to ensure your computers can successfully use Microsoft 365. For more information read [Office 365 URLs and IP address ranges](https://support.office.com/article/Office-365-URLs-and-IP-address-ranges-8548a211-3fe7-47cb-abb1-355ea5aa88a2?ui=en-US&rs=en-US&ad=US).
->
->
-
-## Define multi-factor authentication strategy
-In this task, you'll define the multi-factor authentication strategy to use. Azure AD Multi-Factor Authentication comes in two different versions. One is a cloud-based and the other is on-premises based using the Azure MFA Server. Based on the evaluation you did above you can determine which solution is the correct one for your strategy. Use the table below to determine which design option best fulfills your companyΓÇÖs security requirement:
-
-Multi-factor design options:
-
-| Asset to secure | MFA in the cloud | MFA on-premises |
-| | | |
-| Microsoft apps |yes |yes |
-| SaaS apps in the app gallery |yes |yes |
-| IIS applications published through Azure AD App Proxy |yes |yes |
-| IIS applications not published through the Azure AD App Proxy |no |yes |
-| Remote access as VPN, RDG |no |yes |
-
-Even though you may have settled on a solution for your strategy, you still need to use the evaluation from above. This decision may cause the solution to change. Use the table below to assist you determining this:
-
-| User location | Preferred design option |
-| | |
-| Azure Active Directory |Multi-FactorAuthentication in the cloud |
-| Azure AD and on-premises AD using federation with AD FS |Both |
-| Azure AD and on-premises AD using Azure AD Connect no password sync |Both |
-| Azure AD and on-premises using Azure AD Connect with password sync |Both |
-| On-premises AD |Multi-Factor Authentication Server |
-
-> [!NOTE]
-> You should also ensure that the multi-factor authentication design option that you selected supports the features that are required for your design. For more information read [Choose the multi-factor security solution for you](../../authentication/concept-mfa-howitworks.md).
->
-
-## Multi-Factor Auth Provider
-Multi-factor authentication is available by default for Hybrid Identity Administrators who have an Azure Active Directory tenant. However, if you wish to extend multi-factor authentication to all of your users and/or want to your Hybrid Identity Administrators to be able to take advantage features such as the management portal, custom greetings, and reports, then you must purchase and configure Multi-Factor Authentication Provider.
-
-> [!NOTE]
-> You should also ensure that the multi-factor authentication design option that you selected supports the features that are required for your design.
->
->
-
-## Next steps
-[Determine data protection requirements](plan-hybrid-identity-design-considerations-dataprotection-requirements.md)
-
-## See also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
-
active-directory Plan Hybrid Identity Design Considerations Incident Response Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-incident-response-requirements.md
- Title: Hybrid identity design - incident response requirements Azure
-description: Determine monitoring and reporting capabilities for the hybrid identity solution that can be leveraged by IT to take actions to identify and mitigate a potential threat.
------- Previously updated : 01/27/2023-----
-# Determine incident response requirements for your hybrid identity solution
-Large or medium organizations most likely will have a [security incident response](/previous-versions/tn-archive/cc700825(v=technet.10)) in place to help IT take actions accordingly to the level of incident. The identity management system is an important component in the incident response process because it can be used to help identifying who performed a specific action against the target. The hybrid identity solution must be able to provide monitoring and reporting capabilities that can be leveraged by IT to take actions to identify and mitigate a potential threat. In a typical incident response plan you'll have the following phases as part of the plan:
-
-1. Initial assessment.
-2. Incident communication.
-3. Damage control and risk reduction.
-4. Identification of what it was compromise and severity.
-5. Evidence preservation.
-6. Notification to appropriate parties.
-7. System recovery.
-8. Documentation.
-9. Damage and cost assessment.
-10. Process and plan revision.
-
-During the identification of what it was compromise and severity- phase, it will be necessary to identify the systems that have been compromised, files that have been accessed and determine the sensitivity of those files. Your hybrid identity system should be able to fulfill these requirements to assist you identifying the user that made those changes.
-
-## Monitoring and reporting
-Many times the identity system can also help in initial assessment phase mainly if the system has built in auditing and reporting capabilities. During the initial assessment, IT Admin must be able to identify a suspicious activity, or the system should be able to trigger it automatically based on a pre-configured task. Many activities could indicate a possible attack, however in other cases, a badly configured system might lead to a number of false positives in an intrusion detection system.
-
-The identity management system should assist IT admins to identify and report those suspicious activities. Usually these technical requirements can be fulfilled by monitoring all systems and having a reporting capability that can highlight potential threats. Use the questions below to help you design your hybrid identity solution while taking into consideration incident response requirements:
-
-* Does your company have a security incident response in place?
- * If yes, is the current identity management system used as part of the process?
-* Does your company need to identify suspicious sign-on attempts from users across different devices?
-* Does your company need to detect potential compromised userΓÇÖs credentials?
-* Does your company need to audit userΓÇÖs access and action?
-* Does your company need to know when a user resets their password?
-
-## Policy enforcement
-During damage control and risk reduction-phase, it is important to quickly reduce the actual and potential effects of an attack. That action that you'll take at this point can make the difference between a minor and a major one. The exact response will depend on your organization and the nature of the attack that you face. If the initial assessment concluded that an account was compromised, you'll need to enforce policy to block this account. ThatΓÇÖs just one example where the identity management system will be leveraged. Use the questions below to help you design your hybrid identity solution while taking into consideration how policies will be enforced to react to an ongoing incident:
-
-* Does your company have policies in place to block users from access the network if necessary?
- * If yes, does the current solution integrate with the hybrid identity management system that you're going to adopt?
-* Does your company need to enforce Conditional Access for users that are in quarantine?
-
-> [!NOTE]
-> Make sure to take notes of each answer and understand the rationale behind the answer. [Define data protection strategy](plan-hybrid-identity-design-considerations-data-protection-strategy.md) will go over the options available and advantages/disadvantages of each option. By having answered those questions you'll select which option best suits your business needs.
->
->
-
-## Next steps
-[Define data protection strategy](plan-hybrid-identity-design-considerations-data-protection-strategy.md)
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Lifecycle Adoption Strategy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-lifecycle-adoption-strategy.md
- Title: Hybrid identity design - lifecycle adoption strategy Azure
-description: Helps define the hybrid identity management tasks according to the options available for each lifecycle phase.
------ Previously updated : 01/19/2023-----
-# Determine hybrid identity lifecycle adoption strategy
-In this task, youΓÇÖll define the identity management strategy for your hybrid identity solution to meet the business requirements that you defined in [Determine hybrid identity management tasks](plan-hybrid-identity-design-considerations-hybrid-id-management-tasks.md).
-
-To define the hybrid identity management tasks according to the end-to-end identity lifecycle presented earlier in this step, you will have to consider the options available for each lifecycle phase.
-
-## Access management and provisioning
-With a good account access management solution, your organization can track precisely who has access to what information across the organization.
-
-Access control is a critical function of a centralized, single-point provisioning system. Besides protecting sensitive information, access controls expose existing accounts that have unapproved authorizations or are no longer necessary. To control obsolete accounts, the provisioning system links together account information with authoritative information about the users who own the accounts. Authoritative user identity information is typically maintained in the databases and directories of human resources.
-
-Accounts in sophisticated IT enterprises include hundreds of parameters that define the authorities, and these details can be controlled by your provisioning system. New users can be identified with the data that you provide from the authoritative source. The access request approval capability initiates the processes that approve (or reject) resource provisioning for them.
-
-| Lifecycle management phase | On premises | Cloud | Hybrid |
-| | | | |
-| Account Management and Provisioning |By using the Active Directory® Domain Services (AD DS) server role, you can create a scalable, secure, and manageable infrastructure for user and resource management, and provide support for directory-enabled applications such as Microsoft® Exchange Server. <br><br> [You can provision groups in AD DS through an Identity manager](/previous-versions/mim/ff686261(v=ws.10)) <br>[You can provision users in AD DS](/previous-versions/mim/ff686263(v=ws.10)) <br><br> Administrators can use access control to manage user access to shared resources for security purposes. In Active Directory, access control is administered at the object level by setting different levels of access, or permissions, to objects, such as Full Control, Write, Read, or No Access. Access control in Active Directory defines how different users can use Active Directory objects. By default, permissions on objects in Active Directory are set to the most secure setting. |You have to create an account for every user who will access a Microsoft cloud service. You can also change user accounts or delete them when they’re no longer needed. By default, users do not have administrator permissions, but you can optionally assign them. <br><br> Within Azure Active Directory, one of the major features is the ability to manage access to resources. These resources can be part of the directory, as in the case of permissions to manage objects through roles in the directory, or resources that are external to the directory, such as SaaS applications, Azure services, and SharePoint sites or on-premises resources. <br><br> At the center of Azure Active Directory’s access management solution is the security group. The resource owner (or the administrator of the directory) can assign a group to provide a certain access right to the resources they own. The members of the group will be provided the access, and the resource owner can delegate the right to manage the members list of a group to someone else – such as a department manager or a helpdesk administrator<br> <br> The Managing groups in Azure AD section, provides more information on managing access through groups. |Extend Active Directory identities into the cloud through synchronization and federation |
-
-## Role-based access control
-Azure role-based access control (Azure RBAC) uses roles and provisioning policies to evaluate, test, and enforce your business processes and rules for granting access to users. Key administrators create provisioning policies and assign users to roles and that define sets of entitlements to resources for these roles. Azure RBAC extends the identity management solution to use software-based processes and reduce user manual interaction in the provisioning process.
-Azure RBAC enables the company to restrict the number of operations that an individual can do once they have access to the Azure portal. By using Azure RBAC to control access to the portal, IT Admins ca delegate access by using the following access management approaches:
-
-* **Group-based role assignment**: You can assign access to Azure AD groups that can be synced from your local Active Directory. This enables you to leverage the existing investments that your organization has made in tooling and processes for managing groups. You can also use the delegated group management feature of Azure AD Premium.
-* **Leverage built in roles in Azure**: You can use three roles ΓÇö Owner, Contributor, and Reader, to ensure that users and groups have permission to do only the tasks they need to do their jobs.
-* **Granular access to resources**: You can assign roles to users and groups for a particular subscription, resource group, or an individual Azure resource such as a website or database. In this way, you can ensure that users have access to all the resources they need and no access to resources that they do not need to manage.
-
-## Provisioning and other customization options
-Your team can use business plans and requirements to decide how much to customize the identity solution. For example, a large enterprise might require a phased roll-out plan for workflows and custom adapters that is based on a time line for incrementally provisioning applications that are widely used across geographies. Another customization plan might provide for two or more applications to be provisioned across an entire organization, after successful testing. User-application interaction can be customized, and procedures for provisioning resources might be changed to accommodate automated provisioning.
-
-You can deprovision to remove a service or component. For example, deprovisioning an account means that the account is deleted from a resource.
-
-The hybrid model of provisioning resources combines request and role-based approaches, which are both supported by Azure AD. For a subset of employees or managed systems, a business might want to automate access with role-based assignment. A business might also handle all other access requests or exceptions through a request-based model. Some businesses might start with manual assignment, and evolve toward a hybrid model, with an intention of a fully role-based deployment at a future time.
-
-Other companies might find it impractical for business reasons to achieve complete role-based provisioning, and target a hybrid approach as a wanted goal. Still other companies might be satisfied with only request-based provisioning, and not want to invest additional effort to define and manage role-based, automated provisioning policies.
-
-## License management
-Group-based license management in Azure AD lets administrators assign users to a security group and Azure AD automatically assigns licenses to all the members of the group. If a user is subsequently added to, or removed from the group, a license will be automatically assigned or removed as appropriate.
-
-You can use groups you synchronize from on-premises AD or manage in Azure AD. Pairing this up with Azure AD premium Self-Service Group Management you can easily delegate license assignment to the appropriate decision makers. You can be assured that problems like license conflicts and missing location data are automatically sorted out.
-
-## Self-regulating user administration
-When your organization starts to provision resources across all internal organizations, you implement the self-regulating user administration capability. You can realize the advantages and benefits of provisioning users across organizational boundaries. In this environment, a change in a user's status is automatically reflected in access rights across organization boundaries and geographies. You can reduce provisioning costs and streamline the access and approval processes. The implementation realizes the full potential of implementing role-based access control for end-to-end access management in your organization. You can reduce administrative costs through automated procedures for governing user provisioning. You can improve security by automating security policy enforcement, and streamline and centralize user lifecycle management and resource provisioning for large user populations.
-
-> [!NOTE]
-> For more information, see Setting up Azure AD for self service application access management
->
->
-
-License-based (Entitlement-based) Azure AD services work by activating a subscription in your Azure AD directory/service tenant. Once the subscription is active the service capabilities can be managed by directory/service administrators and used by licensed users.
-
-## Integration with other 3rd party providers
-
-Azure Active Directory provides single-sign on and enhanced application access security to thousands of SaaS applications and on-premises web applications. For more information, see [Integrating applications with Azure Active Directory](../../develop/quickstart-register-app.md)
-
-## Define synchronization management
-Integrating your on-premises directories with Azure AD makes your users more productive by providing a common identity for accessing both cloud and on-premises resources. With this integration, users and organizations can take advantage of the following:
-
-* Organizations can provide users with a common hybrid identity across on-premises or cloud-based services leveraging Windows Server Active Directory and then connecting to Azure Active Directory.
-* Administrators can provide Conditional Access based on application resource, device and user identity, network location and multi-factor authentication.
-* Users can leverage their common identity through accounts in Azure AD to Microsoft 365, Intune, SaaS apps, and third-party applications.
-* Developers can build applications that leverage the common identity model, integrating applications into Active Directory on-premises or Azure for cloud-based applications
-
-The following figure has an example of a high-level view of identity synchronization process.
-
-![Sync](./media/plan-hybrid-identity-design-considerations/identitysync.png)
-
-Identity synchronization process
-
-Review the following table to compare the synchronization options:
-
-| Synchronization Management Option | Advantages | Disadvantages |
-| | | |
-| Sync-based (through DirSync or AADConnect) |Users, and groups synchronized from on-premises and cloud <br> **Policy control**: Account policies can be set through Active Directory, which gives the administrator the ability to manage password policies, workstation, restrictions, lock-out controls, and more, without having to perform additional tasks in the cloud. <br> **Access control**: Can restrict access to the cloud service so that, the services can be accessed through the corporate environment, through online servers, or both. <br> Reduced support calls: If users have fewer passwords to remember, they are less likely to forget them. <br> Security: User identities and information are protected because all of the servers and services used in single sign-on, are mastered and controlled on-premises. <br> Support for strong authentication: You can use strong authentication (also called two-factor authentication) with the cloud service. However, if you use strong authentication, you must use single sign-on. | |
-| Federation-based (through AD FS) |Enabled by Security Token Service (STS). When you configure an STS to provide single sign-on access with a Microsoft cloud service, you will be creating a federated trust between your on-premises STS and the federated domain youΓÇÖve specified in your Azure AD tenant. <br> Allows end users to use the same set of credentials to obtain access to multiple resources <br>end users do not have to maintain multiple sets of credentials. Yet, the users have to provide their credentials to each one of the participating resources.,B2B and B2C scenarios supported. |Requires specialized personnel for deployment and maintenance of dedicated on premises AD FS servers. There are restrictions on the use of strong authentication if you plan to use AD FS for your STS. For more information, see [Configuring Advanced Options for AD FS 2.0](/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/hh237448(v=ws.10)). |
-
-> [!NOTE]
-> For more information see, [Integrating your on-premises identities with Azure Active Directory](../whatis-hybrid-identity.md).
->
->
-
-## See Also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Multifactor Auth Requirements https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-multifactor-auth-requirements.md
- Title: Hybrid identity design - multi-factor authentication requirements Azure
-description: With Conditional Access control, Azure AD verifies the specific conditions you pick when authenticating the user and before allowing access to the application.
------- Previously updated : 01/19/2023-----
-# Determine multi-factor authentication requirements for your hybrid identity solution
-In this world of mobility, with users accessing data and applications in the cloud and from any device, securing this information has become paramount. Every day there is a new headline about a security breach. Although, there is no guarantee against such breaches, multi-factor authentication, provides an additional layer of security to help prevent these breaches.
-Start by evaluating the organizations requirements for multi-factor authentication. That is, what is the organization trying to secure. This evaluation is important to define the technical requirements for setting up and enabling the organizations users for multi-factor authentication.
-
-Make sure to answer the following:
-
-* Is your company trying to secure Microsoft apps?
-* How these apps are published?
-* Does your company provide remote access to allow employees to access on-premises apps?
-
-If yes, what type of remote access?You also need to evaluate where the users who are accessing these applications will be located. This evaluation is another important step to define the proper multi-factor authentication strategy. Make sure to answer the following questions:
-
-* Where are the users going to be located?
-* Can they be located anywhere?
-* Does your company want to establish restrictions according to the userΓÇÖs location?
-
-Once you understand these requirements, it is important to also evaluate the userΓÇÖs requirements for multi-factor authentication. This evaluation is important because it will define the requirements for rolling out multi-factor authentication. Make sure to answer the following questions:
-
-* Are the users familiar with multi-factor authentication?
-* Will some uses be required to provide additional authentication?
- * If yes, all the time, when coming from external networks, or accessing specific applications, or under other conditions?
-* Will the users require training on how to setup and implement multi-factor authentication?
-* What are the key scenarios that your company wants to enable multi-factor authentication for their users?
-
-After answering the previous questions, you will be able to understand if there are multi-factor authentication already implemented on-premises. This evaluation is important to define the technical requirements for setting up and enabling the organizations users for multi-factor authentication. Make sure to answer the following questions:
-
-* Does your company need to protect privileged accounts with MFA?
-* Does your company need to enable MFA for certain application for compliance reasons?
-* Does your company need to enable MFA for all eligible users of these application or only administrators?
-* Do you need have MFA always enabled or only when the users are logged outside of your corporate network?
-
-## Next steps
-[Define a hybrid identity adoption strategy](plan-hybrid-identity-design-considerations-identity-adoption-strategy.md)
-
-## See also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
-
active-directory Plan Hybrid Identity Design Considerations Nextsteps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-nextsteps.md
- Title: Azure Active Directory hybrid identity design considerations- next steps| Microsoft Docs
-description: A synopsis and next steps after you have read the Hybrid Identity design considerations guide
------- Previously updated : 01/19/2023-----
-# Azure Active Directory hybrid identity design considerations- next steps
-Now that youΓÇÖve completed defining your requirements and examining all the options for your mobile device management solution, youΓÇÖre ready to take the next steps for deploying the supporting infrastructure thatΓÇÖs right for you and your organization.
-
-## Hybrid identity documentation
-Conceptual and procedural planning, deployment, and administration content are useful when implementing your mobile device management solution:
-
-* [Microsoft System Center](/previous-versions/system-center/developer/cc817313(v=msdn.10)) solutions can help you capture and aggregate knowledge about your infrastructure, policies, processes, and best practices so that your IT staff can build manageable systems and automate operations.
-* [Microsoft Intune](/mem/intune/) is a cloud-based device management service that helps you to manage your computers and mobile devices and to secure your companyΓÇÖs information.
-* [MDM for Microsoft 365](/microsoft-365/admin/basic-mobility-security/overview) allows you to manage and secure mobile devices when they're connected to your Microsoft 365 organization. You can use MDM for Microsoft 365 to set device security policies and access rules, and to wipe mobile devices if theyΓÇÖre lost or stolen.
-
-## Hybrid identity resources
-Monitoring the following resources often provides the latest news and updates on mobile device management solutions:
-
-* [Microsoft Enterprise Mobility blog](https://cloudblogs.microsoft.com/ENTERPRISEMOBILITY/)
-* [Microsoft In The Cloud blog](https://cloudblogs.microsoft.com/)
-* [Microsoft Intune blog](https://techcommunity.microsoft.com/t5/intune-customer-success/welcome-to-the-new-intune-customer-success-blog/ba-p/281367)
-* [Microsoft Configuration Manager blog](https://techcommunity.microsoft.com/t5/Configuration-Manager-Blog/bg-p/ConfigurationManagerBlog)
-
-## See also
-[Design considerations overview](plan-hybrid-identity-design-considerations-overview.md)
active-directory Plan Hybrid Identity Design Considerations Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-overview.md
- Title: Azure Active Directory hybrid identity design considerations - overview
-description: Overview and content map of Hybrid Identity design considerations guide
------- Previously updated : 01/19/2023-----
-# Azure Active Directory Hybrid Identity Design Considerations
-Consumer-based devices are proliferating the corporate world, and cloud-based software-as-a-service (SaaS) applications are easy to adopt. As a result, maintaining control of usersΓÇÖ application access across internal datacenters and cloud platforms is challenging.
-
-MicrosoftΓÇÖs identity solutions span on-premises and cloud-based capabilities, creating a single user identity for authentication and authorization to all resources, regardless of location. This concept is known as Hybrid Identity. There are different design and configuration options for hybrid identity using Microsoft solutions, and in some case it might be difficult to determine which combination will best meet the needs of your organization.
-
-This Hybrid Identity Design Considerations Guide will help you to understand how to design a hybrid identity solution that best fits the business and technology needs for your organization. This guide details a series of steps and tasks that you can follow to help you design a hybrid identity solution that meets your organizationΓÇÖs unique requirements. Throughout the steps and tasks, the guide will present the relevant technologies and feature options available to organizations to meet functional and service quality (such as availability, scalability, performance, manageability, and security) level requirements.
-
-Specifically, the hybrid identity design considerations guide goals are to answer the following questions:
-
-* What questions do I need to ask and answer to drive a hybrid identity-specific design for a technology or problem domain that best meets my requirements?
-* What sequence of activities should I complete to design a hybrid identity solution for the technology or problem domain?
-* What hybrid identity technology and configuration options are available to help me meet my requirements? What are the trade-offs between those options so that I can select the best option for my business?
-
-## Who is this guide intended for?
- CIO, CITO, Chief Identity Architects, Enterprise Architects, and IT Architects responsible for designing a hybrid identity solution for medium or large organizations.
-
-## How can this guide help you?
-You can use this guide to understand how to design a hybrid identity solution that is able to integrate a cloud-based identity management system with your current on-premises identity solution.
-
-The following graphic shows an example a hybrid identity solution that enables IT Admins to manage to integrate their current Windows Server Active Directory solution located on-premises with Microsoft Azure Active Directory to enable users to use Single Sign-On (SSO) across applications located in the cloud and on-premises.
-
-![Example](media/plan-hybrid-identity-design-considerations/hybridID-example.png)
-
-The above illustration is an example of a hybrid identity solution that is leveraging cloud services to integrate with on-premises capabilities in order to provide a single experience to the end-user authentication process and to facilitate IT managing those resources. Although this example can be a common scenario, every organizationΓÇÖs hybrid identity design is likely to be different than the example illustrated in Figure 1 due to different requirements.
-
-This guide provides a series of steps and tasks that you can follow to design a hybrid identity solution that meets your organizationΓÇÖs unique requirements. Throughout the following steps and tasks, the guide presents the relevant technologies and feature options available to you to meet functional and service quality level requirements for your organization.
-
-**Assumptions**: You have some experience with Windows Server, Active Directory Domain Services, and Azure Active Directory. In this document, it is assumed you are looking for how these solutions can meet your business needs on their own, or in an integrated solution.
-
-## Design considerations overview
-This document provides a set of steps and tasks that you can follow to design a hybrid identity solution that best meets your requirements. The steps are presented in an ordered sequence. Design considerations you learn in later steps may require you to change decisions you made in earlier steps, however, due to conflicting design choices. Every attempt is made to alert you to potential design conflicts throughout the document.
-
-You will arrive at the design that best meets your requirements only after iterating through the steps as many times as necessary to incorporate all of the considerations within the document.
-
-| Hybrid Identity Phase | Topic List |
-| | |
-| Determine identity requirements |[Determine business needs](plan-hybrid-identity-design-considerations-business-needs.md)<br> [Determine directory synchronization requirements](plan-hybrid-identity-design-considerations-directory-sync-requirements.md)<br> [Determine multi-factor authentication requirements](plan-hybrid-identity-design-considerations-multifactor-auth-requirements.md)<br> [Define a hybrid identity adoption strategy](plan-hybrid-identity-design-considerations-identity-adoption-strategy.md) |
-| Plan for enhancing data security through strong identity solution |[Determine data protection requirements](plan-hybrid-identity-design-considerations-dataprotection-requirements.md) <br> [Determine content management requirements](plan-hybrid-identity-design-considerations-contentmgt-requirements.md)<br> [Determine access control requirements](plan-hybrid-identity-design-considerations-accesscontrol-requirements.md)<br> [Determine incident response requirements](plan-hybrid-identity-design-considerations-incident-response-requirements.md) <br> [Define data protection strategy](plan-hybrid-identity-design-considerations-data-protection-strategy.md) |
-| Plan for hybrid identity lifecycle |[Determine hybrid identity management tasks](plan-hybrid-identity-design-considerations-hybrid-id-management-tasks.md) <br> [Synchronization Management](plan-hybrid-identity-design-considerations-hybrid-id-management-tasks.md)<br> [Determine hybrid identity management adoption strategy](plan-hybrid-identity-design-considerations-lifecycle-adoption-strategy.md) |
-
-## Next Steps
-[Determine identity requirements](plan-hybrid-identity-design-considerations-business-needs.md)
-
active-directory Plan Hybrid Identity Design Considerations Tools Comparison https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/connect/plan-hybrid-identity-design-considerations-tools-comparison.md
- Title: 'Hybrid Identity: Directory integration tools comparison'
-description: This is page provides a comprehensive table that compares the various directory integration tools that can be used for directory integration.
------ Previously updated : 01/19/2023----
-# Hybrid Identity directory integration tools comparison
-Over the years the directory integration tools have grown and evolved.
---- [MIM](/microsoft-identity-manager/microsoft-identity-manager-2016) is still supported, and primarily enables synchronization from or between on-premises systems. The [FIM Windows Azure AD Connector](/previous-versions/mim/dn511001(v=ws.10)) is deprecated. Customers with on-premises sources such as Notes or SAP HCM should use MIM in one of two topologies.
- - If users and groups are needed in Active Directory Domain Services (AD DS), then use MIM to populate users and groups into AD DS, and use either Azure AD Connect sync or Azure AD Connect cloud provisioning to synchronize those users and groups from AD DS to Azure AD.
- - If users and groups are not needed in AD DS, then use MIM to populate users and groups into Azure AD through the [MIM Graph connector](/microsoft-identity-manager/microsoft-identity-manager-2016-connector-graph).
-- [Azure AD Connect sync](how-to-connect-sync-whatis.md) incorporates the components and functionality previously released in DirSync and Azure AD Sync, for synchronizing between AD DS forests and Azure AD. -- [Azure AD Connect cloud provisioning](../cloud-sync/what-is-cloud-sync.md) is a new Microsoft agent for synching from AD DS to Azure AD, useful for scenarios such as merger and acquisition where the acquired company's AD forests are isolated from the parent company's AD forests.-
-To learn more about the differences between Azure AD Connect sync and Azure AD Connect cloud provisioning, see the article [What is Azure AD Connect cloud provisioning?](../cloud-sync/what-is-cloud-sync.md). For more information on deployment options with multiple HR sources or directories, then see the article [parallel and combined identity infrastructure options](../../fundamentals/parallel-identity-options.md).
-
-## Next steps
-Learn more about [Integrating your on-premises identities with Azure Active Directory](../whatis-hybrid-identity.md).
active-directory Recommendation Migrate From Adal To Msal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/reports-monitoring/recommendation-migrate-from-adal-to-msal.md
Previously updated : 05/26/2023 Last updated : 08/10/2023
This article covers the recommendation to migrate from the Azure Active Director
The Azure Active Directory Authentication Library (ADAL) is currently slated for end-of-support on June 30, 2023. We recommend that customers migrate to Microsoft Authentication Libraries (MSAL), which replaces ADAL.
-This recommendation shows up if your tenant has applications that still use ADAL.
+This recommendation shows up if your tenant has applications that still use ADAL. The service marks any application in your tenant that makes a token request from the ADAL as an ADAL application. Applications that use both ADAL and MSAL are marked as ADAL applications.
+
+When an application is identified as an ADAL application, each day the recommendation looks back 30 days for any new ADAL requests from applications within the tenant. If an ADAL recommendation doesn't send any new ADAL requests for 30 days, the recommendation is marked as completed. When all applications are completed, the recommendation status changes to completed. If a new ADAL request is detected for an application that was completed, the status changes back to active.
## Value
Existing apps that use ADAL will continue to work after the end-of-support date.
## Action plan
-The first step to migrating your apps from ADAL to MSAL is to identify all applications in your tenant that are currently using ADAL. You can identify your apps in the Azure portal or programmatically.
+The first step to migrating your apps from ADAL to MSAL is to identify all applications in your tenant that are currently using ADAL. You can identify your apps in the Azure portal or programmatically with the Microsoft Graph API or the Microsoft Graph PowerShell SDK.
-### Identify your apps in the Azure portal
+### [Azure portal](#tab/Azure-portal)
There are four steps to identifying and updating your apps in the Azure portal. The following steps are covered in detail in the [List all apps using ADAL](../develop/howto-get-list-of-all-active-directory-auth-library-apps.md) article.
There are four steps to identifying and updating your apps in the Azure portal.
- For example, the steps for .NET and Python applications have separate instructions. - For a full list of instructions for each scenario, see [How to migrate to MSAL](../develop/msal-migration.md#how-to-migrate-to-msal).
-### Identify your apps with the Microsoft Graph API
+### [Microsoft Graph API](#tab/Microsoft-Graph-API)
You can use Microsoft Graph to identify apps that need to be migrated to MSAL. To get started, see [How to use Microsoft Graph with Azure AD recommendations](howto-use-recommendations.md#how-to-use-microsoft-graph-with-azure-active-directory-recommendations).
df.onecloud.azure-test.net/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBla
} ```
-### Identify your apps with Microsoft Graph PowerShell SDK
+### [Microsoft Graph PowerShell SDK](#tab/Microsoft-Graph-PowerShell-SDK)
You can run the following set of commands in Windows PowerShell. These commands use the [Microsoft Graph PowerShell SDK](/graph/powershell/installation) to get a list of all applications in your tenant that use ADAL.
You can run the following set of commands in Windows PowerShell. These commands
1. Update the code for your apps using the instructions in [How to migrate to MSAL](../develop/msal-migration.md#how-to-migrate-to-msal). ++
+## Frequently asked questions
+
+### Why does it take 30 days to change the status to completed?
+
+To reduce false positives, the service uses a 30 day window for ADAL requests. This way, the service can go several days without an ADAL request and not be falsely marked as completed.
+
+### How were ADAL applications identified before the recommendation was released?
+
+The [Azure AD sign-ins workbook](../develop/howto-get-list-of-all-auth-library-apps.md) is an alternative method to identify these apps. The workbook is still available to you, but using the workbook requires streaming sign-in logs to Azure Monitor first. The ADAL to MSAL recommendation works out of the box. Plus, the sign-ins workbook does not capture Service Principal sign-ins, while the recommendation does.
+
+### Why is the number of ADAL applications different in the workbook and the recommendation?
+
+Because the recommendation captures Service Principal sign-ins and the workbook doesn't, the recommendation may show more ADAL applications.
+
+### How do I identify the owner of an application in my tenant?
+
+You can locate owner from the recommendation details. Select the resource, which takes you to the application details. Select **Owners** from the navigation menu.
+
+### Can the status change from *completed* to *active*?
+
+Yes. If an application was marked as completed - so no ADAL requests were made during the 30 day window - that application would be marked as complete. If the service detects a new ADAL request, the status changes back to *active*.
+ ## Next steps - [Review the Azure AD recommendations overview](overview-recommendations.md)
active-directory Groups Assign Role https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/roles/groups-assign-role.md
$group = New-MgGroup -DisplayName "Contoso_Helpdesk_Administrators" -Description
### Get the role definition you want to assign
-Use the [Get-MgRoleManagementDirectoryRoleDefinition](/powershell/module/microsoft.graph.devicemanagement.enrolment/get-mgrolemanagementdirectoryroledefinition?branch=main) command to get a role definition.
+Use the [Get-MgRoleManagementDirectoryRoleDefinition](/powershell/module/microsoft.graph.identity.governance/get-mgrolemanagementdirectoryroledefinition?view=graph-powershell-1.0) command to get a role definition.
```powershell $roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "displayName eq 'Helpdesk Administrator'"
$roleDefinition = Get-MgRoleManagementDirectoryRoleDefinition -Filter "displayNa
### Create a role assignment
-Use the [New-MgRoleManagementDirectoryRoleAssignment](/powershell/module/microsoft.graph.devicemanagement.enrolment/new-mgrolemanagementdirectoryroleassignment?branch=main) command to assign the role.
+Use the [New-MgRoleManagementDirectoryRoleAssignment](/powershell/module/microsoft.graph.identity.governance/new-mgrolemanagementdirectoryroleassignment?view=graph-powershell-1.0) command to assign the role.
```powershell $roleAssignment = New-MgRoleManagementDirectoryRoleAssignment -DirectoryScopeId '/' -RoleDefinitionId $roleDefinition.Id -PrincipalId $group.Id
active-directory Airbase Provisioning Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/airbase-provisioning-tutorial.md
Title: 'Tutorial: Configure Airbase for automatic user provisioning with Azure Active Directory'
-description: Learn how to automatically provision and de-provision user accounts from Azure AD to Airbase.
+description: Learn how to automatically provision and deprovision user accounts from Azure AD to Airbase.
writer: twimmers
# Tutorial: Configure Airbase for automatic user provisioning
-This tutorial describes the steps you need to perform in both Airbase and Azure Active Directory (Azure AD) to configure automatic user provisioning. When configured, Azure AD automatically provisions and de-provisions users to [Airbase](https://www.airbase.com/) using the Azure AD Provisioning service. For important details on what this service does, how it works, and frequently asked questions, see [Automate user provisioning and deprovisioning to SaaS applications with Azure Active Directory](../app-provisioning/user-provisioning.md).
+This tutorial describes the steps you need to perform in both Airbase and Azure Active Directory (Azure AD) to configure automatic user provisioning. When configured, Azure AD automatically provisions and deprovisions users to [Airbase](https://www.airbase.com/) using the Azure AD Provisioning service. For important details on what this service does, how it works, and frequently asked questions, see [Automate user provisioning and deprovisioning to SaaS applications with Azure Active Directory](../app-provisioning/user-provisioning.md).
## Supported capabilities
The scenario outlined in this tutorial assumes that you already have the followi
* Determine what data to [map between Azure AD and Airbase](../app-provisioning/customize-application-attributes.md). ## Step 2. Configure Airbase to support provisioning with Azure AD
-Contact Airbase support to configure Airbase to support provisioning with Azure AD.
+
+1. Log in to Airbase portal.
+1. Navigate to the Users section.
+1. Click Sync with HRIS.
+
+ ![Screenshot of choosing Azure from People - Users page.](media/airbase-provisioning-tutorial/connect-hris.png)
+
+1. Select Azure AD from the list of HRIS.
+1. Make a note of the Base URL and API Token.
+
+ ![Screenshot of tenant url and token.](media/airbase-provisioning-tutorial/generate-token.png)
+
+1. Use these values in Step 5.5.
## Step 3. Add Airbase from the Azure AD application gallery
active-directory Hoxhunt Provisioning Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/hoxhunt-provisioning-tutorial.md
This section guides you through the steps to configure the Azure AD provisioning
1. Sign in to the [Azure portal](https://portal.azure.com). Select **Enterprise Applications**, then select **All applications**.
- ![Enterprise applications blade](common/enterprise-applications.png)
+ ![Screenshot of Enterprise applications blade.](common/enterprise-applications.png)
2. In the applications list, select **Hoxhunt**.
- ![The Hoxhunt link in the Applications list](common/all-applications.png)
+ ![Screenshot of the Hoxhunt link in the Applications list.](common/all-applications.png)
3. Select the **Provisioning** tab.
- ![Provisioning tab](common/provisioning.png)
+ ![Screenshot of Provisioning tab.](common/provisioning.png)
4. Set the **Provisioning Mode** to **Automatic**.
- ![Provisioning tab automatic](common/provisioning-automatic.png)
+ ![Screenshot of Provisioning tab automatic.](common/provisioning-automatic.png)
5. Under the **Admin Credentials** section, input your Hoxhunt Tenant URL and Secret Token. Click **Test Connection** to ensure Azure AD can connect to Hoxhunt. If the connection fails, ensure your Hoxhunt account has Admin permissions and try again.
This section guides you through the steps to configure the Azure AD provisioning
6. In the **Notification Email** field, enter the email address of a person or group who should receive the provisioning error notifications and select the **Send an email notification when a failure occurs** check box.
- ![Notification Email](common/provisioning-notification-email.png)
+ ![Screenshot of Notification Email.](common/provisioning-notification-email.png)
7. Select **Save**.
This section guides you through the steps to configure the Azure AD provisioning
9. Review the user attributes that are synchronized from Azure AD to Hoxhunt in the **Attribute-Mapping** section. The attributes selected as **Matching** properties are used to match the user accounts in Hoxhunt for update operations. If you choose to change the [matching target attribute](../app-provisioning/customize-application-attributes.md), you will need to ensure that the Hoxhunt API supports filtering users based on that attribute. Select the **Save** button to commit any changes.
- |Attribute|Type|Supported for filtering|
- ||||
- |userName|String|&check;|
- |emails[type eq "work"].value|String|
- |active|Boolean|
- |name.givenName|String|
- |name.familyName|String|
- |urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department|String|
- |addresses[type eq "work"].country|String|
+ |Attribute|Type|Supported for filtering|Required by Hoxhunt
+ ||||
+ |userName|String|&check;|&check;
+ |emails[type eq "work"].value|String||&check;
+ |active|Boolean||
+ |name.givenName|String||
+ |name.familyName|String||
+ |urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department|String||
+ |addresses[type eq "work"].country|String||
+ |urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division|String||
+ |preferredLanguage|String||
+ |addresses[type eq "work"].locality|String||
+ |urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager|Reference||
+ 10. To configure scoping filters, refer to the following instructions provided in the [Scoping filter tutorial](../app-provisioning/define-conditional-rules-for-provisioning-user-accounts.md). 11. To enable the Azure AD provisioning service for Hoxhunt, change the **Provisioning Status** to **On** in the **Settings** section.
- ![Provisioning Status Toggled On](common/provisioning-toggle-on.png)
+ ![Screenshot of Provisioning Status Toggled On.](common/provisioning-toggle-on.png)
12. Define the users and/or groups that you would like to provision to Hoxhunt by choosing the desired values in **Scope** in the **Settings** section.
- ![Provisioning Scope](common/provisioning-scope.png)
+ ![Screenshot of Provisioning Scope.](common/provisioning-scope.png)
13. When you are ready to provision, click **Save**.
- ![Saving Provisioning Configuration](common/provisioning-configuration-save.png)
+ ![Screenshot of Saving Provisioning Configuration.](common/provisioning-configuration-save.png)
This operation starts the initial synchronization cycle of all users and groups defined in **Scope** in the **Settings** section. The initial cycle takes longer to perform than subsequent cycles, which occur approximately every 40 minutes as long as the Azure AD provisioning service is running.
Once you've configured provisioning, use the following resources to monitor your
* If the provisioning configuration seems to be in an unhealthy state, the application will go into quarantine. Learn more about quarantine states [here](../app-provisioning/application-provisioning-quarantine-status.md). ## Change Log
-* 04/20/2021 - Added support for "preferredLanguage" and enterprise extension attribute "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division".
+* 04/20/2021 - Added support for core user attribute **preferredLanguage** and enterprise extension attribute **urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division**.
+* 08/08/2023 - Added support for core user attribute **addresses[type eq "work"].locality|String** and enterprise extension attribute **urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:manager**.
## Additional resources
active-directory Sap Cloud Platform Identity Authentication Provisioning Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/sap-cloud-platform-identity-authentication-provisioning-tutorial.md
Title: 'Tutorial: Configure SAP Business Technology Platform Identity Authentication for automatic user provisioning with Azure Active Directory'
-description: Learn how to configure Azure Active Directory to automatically provision and de-provision user accounts to SAP Business Technology Platform Identity Authentication.
+ Title: 'Tutorial: Configure SAP Cloud Identity Services for automatic user provisioning with Microsoft Entra ID'
+description: Learn how to configure Microsoft Entra ID to automatically provision and de-provision user accounts to SAP Cloud Identity Services.
writer: twimmers
Last updated 05/23/2023
-# Tutorial: Configure SAP Business Technology Platform Identity Authentication for automatic user provisioning
+# Tutorial: Configure SAP Cloud Identity Services for automatic user provisioning
-The objective of this tutorial is to demonstrate the steps to be performed in SAP Business Technology Platform Identity Authentication and Azure Active Directory (Azure AD) to configure Azure AD to automatically provision and de-provision users to SAP Business Technology Platform Identity Authentication.
+The objective of this tutorial is to demonstrate the steps to be performed in SAP Cloud Identity Services and Microsoft Entra ID (Azure AD) to configure Microsoft Entra ID to automatically provision and de-provision users to SAP Cloud Identity Services.
> [!NOTE]
-> This tutorial describes a connector built on top of the Azure AD User Provisioning Service. For important details on what this service does, how it works, and frequently asked questions, see [Automate user provisioning and deprovisioning to SaaS applications with Azure Active Directory](../app-provisioning/user-provisioning.md).
+> This tutorial describes a connector built on top of the Microsoft Entra ID User Provisioning Service. For important details on what this service does, how it works, and frequently asked questions, see [Automate user provisioning and deprovisioning to SaaS applications with Microsoft Entra ID](../app-provisioning/user-provisioning.md).
> ## Prerequisites The scenario outlined in this tutorial assumes that you already have the following prerequisites:
-* An Azure AD tenant
-* [A SAP Business Technology Platform Identity Authentication tenant](https://www.sap.com/products/cloud-platform.html)
-* A user account in SAP Business Technology Platform Identity Authentication with Admin permissions.
+* A Microsoft Entra ID tenant
+* [A Cloud Identity Services tenant](https://www.sap.com/products/cloud-platform.html)
+* A user account in SAP Cloud Identity Services with Admin permissions.
> [!NOTE]
-> This integration is also available to use from Azure AD US Government Cloud environment. You can find this application in the Azure AD US Government Cloud Application Gallery and configure it in the same way as you do from public cloud.
+> This integration is also available to use from Microsoft Entra ID US Government Cloud environment. You can find this application in the Microsoft Entra ID US Government Cloud Application Gallery and configure it in the same way as you do from public cloud.
-## Assigning users to SAP Business Technology Platform Identity Authentication
+## Assigning users to SAP Cloud Identity Services
-Azure Active Directory uses a concept called *assignments* to determine which users should receive access to selected apps. In the context of automatic user provisioning, only the users that have been assigned to an application in Azure AD are synchronized.
+Microsoft Entra ID uses a concept called *assignments* to determine which users should receive access to selected apps. In the context of automatic user provisioning, only the users that have been assigned to an application in Microsoft Entra ID are synchronized.
-Before configuring and enabling automatic user provisioning, you should decide which users in Azure AD need access to SAP Business Technology Platform Identity Authentication. Once decided, you can assign these users to SAP Business Technology Platform Identity Authentication by following the instructions here:
+Before configuring and enabling automatic user provisioning, you should decide which users in Microsoft Entra ID need access to SAP Cloud Identity Services. Once decided, you can assign these users to SAP Cloud Identity Services by following the instructions here:
* [Assign a user to an enterprise app](../manage-apps/assign-user-or-group-access-portal.md)
-## Important tips for assigning users to SAP Business Technology Platform Identity Authentication
+## Important tips for assigning users to SAP Cloud Identity Services
-* It is recommended that a single Azure AD user is assigned to SAP Business Technology Platform Identity Authentication to test the automatic user provisioning configuration. Additional users may be assigned later.
+* It is recommended that a single Microsoft Entra ID user is assigned to SAP Cloud Identity Services to test the automatic user provisioning configuration. Additional users may be assigned later.
-* When assigning a user to SAP Business Technology Platform Identity Authentication, you must select any valid application-specific role (if available) in the assignment dialog. Users with the **Default Access** role are excluded from provisioning.
+* When assigning a user to SAP Cloud Identity Services, you must select any valid application-specific role (if available) in the assignment dialog. Users with the **Default Access** role are excluded from provisioning.
-## Setup SAP Business Technology Platform Identity Authentication for provisioning
+## Set up SAP Cloud Identity Services for provisioning
-1. Sign in to your [SAP Business Technology Platform Identity Authentication Admin Console](https://sapmsftintegration.accounts.ondemand.com/admin). Navigate to **Users & Authorizations > Administrators**.
+1. Sign in to your [SAP Cloud Identity Services Admin Console](https://sapmsftintegration.accounts.ondemand.com/admin). Navigate to **Users & Authorizations > Administrators**.
- ![SAP Business Technology Platform Identity Authentication Admin Console](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/adminconsole.png)
+ ![Screenshot of the SAP Cloud Identity Services Admin Console.](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/adminconsole.png)
-2. Press the **+Add** button on the left hand panel in order to add a new administrator to the list. Choose **Add System** and enter the name of the system.
+1. Press the **+Add** button on the left hand panel in order to add a new administrator to the list. Choose **Add System** and enter the name of the system.
-> [!NOTE]
-> The administrator user in SAP Business Technology Platform Identity Authentication must be of type **System**. Creating a normal administrator user can lead to *unauthorized* errors while provisioning.
+ > [!NOTE]
+ > The administrator user in SAP Cloud Identity Services must be of type **System**. Creating a normal administrator user can lead to *unauthorized* errors while provisioning.
-3. Under Configure Authorizations, switch on the toggle button against **Manage Users**.
+1. Under Configure Authorizations, switch on the toggle button against **Manage Users**.
- ![SAP Business Technology Platform Identity Authentication Add SCIM](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/configurationauth.png)
+ ![Screenshot of the SAP Cloud Identity Services Add SCIM.](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/configurationauth.png)
-4. You will receive an email to activate your account and set a password for **SAP Business Technology Platform Identity Authentication Service**.
+1. You will receive an email to activate your account and set a password for **SAP Cloud Identity Services Service**.
-4. Copy the **User ID** and **Password**. These values will be entered in the Admin Username and Admin Password fields respectively in the Provisioning tab of your SAP Business Technology Platform Identity Authentication application in the Azure portal.
+1. Copy the **User ID** and **Password**. These values will be entered in the Admin Username and Admin Password fields respectively in the Provisioning tab of your SAP Cloud Identity Services application in the Azure portal.
-## Add SAP Business Technology Platform Identity Authentication from the gallery
+## Add SAP Cloud Identity Services from the gallery
-Before configuring SAP Business Technology Platform Identity Authentication for automatic user provisioning with Azure AD, you need to add SAP Business Technology Platform Identity Authentication from the Azure AD application gallery to your list of managed SaaS applications.
+Before configuring SAP Cloud Identity Services for automatic user provisioning with Microsoft Entra ID, you need to add SAP Cloud Identity Services from the Microsoft Entra ID application gallery to your list of managed SaaS applications.
-**To add SAP Business Technology Platform Identity Authentication from the Azure AD application gallery, perform the following steps:**
+**To add SAP Cloud Identity Services from the Microsoft Entra ID application gallery, perform the following steps:**
-1. In the **[Azure portal](https://portal.azure.com)**, in the left navigation panel, select **Azure Active Directory**.
+1. In the **[Azure portal](https://portal.azure.com)**, in the left navigation panel, select **Microsoft Entra ID**.
- ![The Azure Active Directory button](common/select-azuread.png)
+ ![Screenshot of the Microsoft Entra ID button.](common/select-azuread.png)
-2. Go to **Enterprise applications**, and then select **All applications**.
+1. Go to **Enterprise applications**, and then select **All applications**.
- ![The Enterprise applications blade](common/enterprise-applications.png)
+ ![Screenshot of the Enterprise applications blade.](common/enterprise-applications.png)
-3. To add a new application, select the **New application** button at the top of the pane.
+1. To add a new application, select the **New application** button at the top of the pane.
- ![The New application button](common/add-new-app.png)
+ ![Screenshot of the New application button.](common/add-new-app.png)
-4. In the search box, enter **SAP Business Technology Platform Identity Authentication**, select **SAP Business Technology Platform Identity Authentication** in the results panel, and then click the **Add** button to add the application.
+1. In the search box, enter **SAP Cloud Identity Services**, select **SAP Cloud Identity Services** in the results panel, and then click the **Add** button to add the application.
- ![SAP Business Technology Platform Identity Authentication in the results list](common/search-new-app.png)
+ ![Screenshot of the SAP Cloud Identity Services in the results list.](common/search-new-app.png)
-## Configuring automatic user provisioning to SAP Business Technology Platform Identity Authentication
+## Configuring automatic user provisioning to SAP Cloud Identity Services
-This section guides you through the steps to configure the Azure AD provisioning service to create, update, and disable users in SAP Business Technology Platform Identity Authentication based on users assignments in Azure AD.
+This section guides you through the steps to configure the Microsoft Entra ID provisioning service to create, update, and disable users in SAP Cloud Identity Services based on users assignments in Microsoft Entra ID.
> [!TIP]
-> You may also choose to enable SAML-based single sign-on for SAP Business Technology Platform Identity Authentication, following the instructions provided in the [SAP Business Technology Platform Identity Authentication Single sign-on tutorial](./sap-hana-cloud-platform-identity-authentication-tutorial.md). Single sign-on can be configured independently of automatic user provisioning, though these two features compliment each other
+> You may also choose to enable SAML-based single sign-on for SAP Cloud Identity Services, following the instructions provided in the [SAP Cloud Identity Services Single sign-on tutorial](./sap-hana-cloud-platform-identity-authentication-tutorial.md). Single sign-on can be configured independently of automatic user provisioning, though these two features complement each other
-### To configure automatic user provisioning for SAP Business Technology Platform Identity Authentication in Azure AD:
+### To configure automatic user provisioning for SAP Cloud Identity Services in Microsoft Entra ID:
1. Sign in to the [Azure portal](https://portal.azure.com). Select **Enterprise Applications**, then select **All applications**.
- ![Enterprise applications blade](common/enterprise-applications.png)
+ ![Screenshot of Enterprise applications blade.](common/enterprise-applications.png)
-2. In the applications list, select **SAP Business Technology Platform Identity Authentication**.
+1. In the applications list, select **SAP Cloud Identity Services**.
- ![The SAP Business Technology Platform Identity Authentication link in the Applications list](common/all-applications.png)
+ ![Screenshot of the SAP Cloud Identity Services link in the Applications list.](common/all-applications.png)
-3. Select the **Provisioning** tab.
+1. Select the **Provisioning** tab.
![Screenshot of the Manage options with the Provisioning option called out.](common/provisioning.png)
-4. Set the **Provisioning Mode** to **Automatic**.
+1. Set the **Provisioning Mode** to **Automatic**.
![Screenshot of the Provisioning Mode dropdown list with the Automatic option called out.](common/provisioning-automatic.png)
-5. Under the **Admin Credentials** section, input `https://<tenantID>.accounts.ondemand.com/service/scim ` in **Tenant URL**. Input the **User ID** and **Password** values retrieved earlier in **Admin Username** and **Admin Password** respectively. Click **Test Connection** to ensure Azure AD can connect to SAP Business Technology Platform Identity Authentication. If the connection fails, ensure your SAP Business Technology Platform Identity Authentication account has Admin permissions and try again.
+1. Under the **Admin Credentials** section, input `https://<tenantID>.accounts.ondemand.com/service/scim ` in **Tenant URL**. Input the **User ID** and **Password** values retrieved earlier in **Admin Username** and **Admin Password** respectively. Click **Test Connection** to ensure Microsoft Entra ID can connect to SAP Cloud Identity Services. If the connection fails, ensure your SAP Cloud Identity Services account has Admin permissions and try again.
- ![Tenant URL + Token](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/testconnection.png)
+ ![Screenshot of the Tenant URL and Token.](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/testconnection.png)
-6. In the **Notification Email** field, enter the email address of a person or group who should receive the provisioning error notifications and check the checkbox - **Send an email notification when a failure occurs**.
+1. In the **Notification Email** field, enter the email address of a person or group who should receive the provisioning error notifications and check the checkbox - **Send an email notification when a failure occurs**.
- ![Notification Email](common/provisioning-notification-email.png)
+ ![Screenshot of the Notification Email.](common/provisioning-notification-email.png)
-7. Click **Save**.
+1. Click **Save**.
-8. Under the **Mappings** section, select **Synchronize Azure Active Directory Users to SAP Business Technology Platform Identity Authentication**.
+1. Under the **Mappings** section, select **Synchronize Microsoft Entra ID Users to SAP Cloud Identity Services**.
- ![SAP Business Technology Platform Identity Authentication User Mappings](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/mapping.png)
+ ![Screenshot of the SAP Cloud Identity Services User Mappings.](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/mapping.png)
-9. Review the user attributes that are synchronized from Azure AD to SAP Business Technology Platform Identity Authentication in the **Attribute Mapping** section. The attributes selected as **Matching** properties are used to match the user accounts in SAP Business Technology Platform Identity Authentication for update operations. Select the **Save** button to commit any changes.
+1. Review the user attributes that are synchronized from Microsoft Entra ID to SAP Cloud Identity Services in the **Attribute Mapping** section. The attributes selected as **Matching** properties are used to match the user accounts in SAP Cloud Identity Services for update operations. Select the **Save** button to commit any changes.
- ![SAP Business Technology Platform Identity Authentication User Attributes](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/userattributes.png)
+ ![Screenshot of the SAP Business Technology Platform Identity Authentication User Attributes.](media/sap-cloud-platform-identity-authentication-provisioning-tutorial/userattributes.png)
-10. To configure scoping filters, refer to the following instructions provided in the [Scoping filter tutorial](../app-provisioning/define-conditional-rules-for-provisioning-user-accounts.md).
+1. To configure scoping filters, refer to the following instructions provided in the [Scoping filter tutorial](../app-provisioning/define-conditional-rules-for-provisioning-user-accounts.md).
-11. To enable the Azure AD provisioning service for SAP Business Technology Platform Identity Authentication, change the **Provisioning Status** to **On** in the **Settings** section.
+1. To enable the Microsoft Entra ID provisioning service for SAP Cloud Identity Services, change the **Provisioning Status** to **On** in the **Settings** section.
- ![Provisioning Status Toggled On](common/provisioning-toggle-on.png)
+ ![Screenshot of Provisioning Status Toggled On.](common/provisioning-toggle-on.png)
-12. Define the users that you would like to provision to SAP Business Technology Platform Identity Authentication by choosing the desired values in **Scope** in the **Settings** section.
+1. Define the users that you would like to provision to SAP Cloud Identity Services by choosing the desired values in **Scope** in the **Settings** section.
- ![Provisioning Scope](common/provisioning-scope.png)
+ ![Screenshot of Provisioning Scope.](common/provisioning-scope.png)
-13. When you are ready to provision, click **Save**.
+1. When you are ready to provision, click **Save**.
- ![Saving Provisioning Configuration](common/provisioning-configuration-save.png)
+ ![Screenshot of Saving Provisioning Configuration.](common/provisioning-configuration-save.png)
-This operation starts the initial synchronization of all users defined in **Scope** in the **Settings** section. The initial sync takes longer to perform than subsequent syncs, which occur approximately every 40 minutes as long as the Azure AD provisioning service is running. You can use the **Synchronization Details** section to monitor progress and follow links to provisioning activity report, which describes all actions performed by the Azure AD provisioning service on SAP Business Technology Platform Identity Authentication.
+This operation starts the initial synchronization of all users defined in **Scope** in the **Settings** section. The initial sync takes longer to perform than subsequent syncs, which occur approximately every 40 minutes as long as the Microsoft Entra ID provisioning service is running. You can use the **Synchronization Details** section to monitor progress and follow links to provisioning activity report, which describes all actions performed by the Microsoft Entra ID provisioning service on SAP Cloud Identity Services.
-For more information on how to read the Azure AD provisioning logs, see [Reporting on automatic user account provisioning](../app-provisioning/check-status-user-account-provisioning.md).
+For more information on how to read the Microsoft Entra ID provisioning logs, see [Reporting on automatic user account provisioning](../app-provisioning/check-status-user-account-provisioning.md).
## Connector limitations
-* SAP Business Technology Platform Identity Authentication's SCIM endpoint requires certain attributes to be of specific format. You can know more about these attributes and their specific format [here](https://help.sap.com/viewer/6d6d63354d1242d185ab4830fc04feb1/Cloud/en-US/b10fc6a9a37c488a82ce7489b1fab64c.html#).
+* SAP Cloud Identity Services's SCIM endpoint requires certain attributes to be of specific format. You can know more about these attributes and their specific format [here](https://help.sap.com/viewer/6d6d63354d1242d185ab4830fc04feb1/Cloud/en-US/b10fc6a9a37c488a82ce7489b1fab64c.html#).
## Additional resources * [Managing user account provisioning for Enterprise Apps](../app-provisioning/configure-automatic-user-provisioning-portal.md)
-* [What is application access and single sign-on with Azure Active Directory?](../manage-apps/what-is-single-sign-on.md)
+* [What is application access and single sign-on with Microsoft Entra ID?](../manage-apps/what-is-single-sign-on.md)
## Next steps
active-directory Slack Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/slack-tutorial.md
Previously updated : 01/25/2023 Last updated : 08/11/2023
Follow these steps to enable Azure AD SSO in the Azure portal.
| emailaddress | user.userprincipalname | | email | user.userprincipalname |
- > [!NOTE]
- > In order to set up the service provider (SP) configuration, you must click on **Expand** next to **Advanced Options** in the SAML configuration page. In the **Service Provider Issuer** box, enter the workspace URL. The default is slack.com.
- 1. On the **Set up single sign-on with SAML** page, in the **SAML Signing Certificate** section, find **Certificate (Base64)** and select **Download** to download the certificate and save it on your computer. ![The Certificate download link](common/certificatebase64.png)
In this section, you'll enable B.Simon to use Azure single sign-on by granting a
c. Choose how the SAML response from your IDP is signed from the two options.
+ > [!NOTE]
+ > In order to set up the service provider (SP) configuration, you must click on **Expand** next to **Advanced Options** in the SAML configuration page. In the **Service Provider Issuer** box, enter the workspace URL. The default is slack.com.
+ 1. Under **Settings**, decide if members can edit their profile information (like their email or display name) after SSO is enabled. You can also choose whether SSO is required, partially required or optional. ![Screenshot of Configure Save configuration single sign-on On App Side.](./media/slack-tutorial/save-configuration-button.png)
active-directory Successfactors Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/successfactors-tutorial.md
Follow these steps to enable Azure AD SSO in the Azure portal.
- `https://<companyname>.sapsf.cn/<companyname>` > [!NOTE]
- > These values are not real. Update these values with the actual Sign-on URL, Identifier and Reply URL. Contact [SuccessFactors Client support team](https://www.sap.com/support.html) to get these values.
+ > These values are not real. Update these values with the actual Sign-on URL, Identifier and Reply URL. Contact [SuccessFactors Client support team](https://www.sap.com/services-support.html) to get these values.
4. On the **Set up Single Sign-On with SAML** page, in the **SAML Signing Certificate** section, find **Certificate (Base64)** and select **Download** to download the certificate and save it on your computer.
In this section, you'll enable B.Simon to use Azure single sign-on by granting a
To enable Azure AD users to sign in to SuccessFactors, they must be provisioned into SuccessFactors. In the case of SuccessFactors, provisioning is a manual task.
-To get users created in SuccessFactors, you need to contact the [SuccessFactors support team](https://www.sap.com/support.html).
+To get users created in SuccessFactors, you need to contact the [SuccessFactors support team](https://www.sap.com/services-support.html).
## Test SSO
active-directory Xledger Provisioning Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/xledger-provisioning-tutorial.md
The scenario outlined in this tutorial assumes that you already have the followi
1. Determine what data to [map between Azure AD and Xledger](../app-provisioning/customize-application-attributes.md). ## Step 2. Configure Xledger to support provisioning with Azure AD
-Contact Xledger support to configure Xledger to support provisioning with Azure AD.
+
+1. Sign into **Xledger** with role of Domain Administrator (or similar) and navigate to **Administration > System Access > API Access Tokens**.
+
+1. Generate a Secret Token and take note of it
+
+ ![Screenshot of API Access Tokens (new token).](media/xledger-provisioning-tutorial/generate-new-token.png)
+
+1. Take note of the Tenant URL
+
+ ![Screenshot of API Access Token (api url).](media/xledger-provisioning-tutorial/generate-new-token-api-url.png)
+
+These values will be used in the Provisioning tab of your Xledger application in the Azure portal. (Step 5)
## Step 3. Add Xledger from the Azure AD application gallery
active-directory Configure Cmmc Level 2 Additional Controls https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/standards/configure-cmmc-level-2-additional-controls.md
# Configure Azure Active Directory to meet CMMC Level 2
-Azure Active Directory helps meet identity-related practice requirements in each Cybersecurity Maturity Model Certification (CMMC) level. To be compliant with requirements in [CMMC V2.0 level 2](https://cmmc-coe.org/maturity-level-two/), it's the responsibility of companies performing work with, and on behalf of, the US Dept. of Defense (DoD) to complete other configurations or processes.
+Azure Active Directory helps meet identity-related practice requirements in each Cybersecurity Maturity Model Certification (CMMC) level. To be compliant with requirements in CMMC V2.0 level 2, it's the responsibility of companies performing work with, and on behalf of, the US Dept. of Defense (DoD) to complete other configurations or processes.
In CMMC Level 2, there are 13 domains that have one or more practices related to identity:
active-directory Configure Cmmc Level 2 Identification And Authentication https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/standards/configure-cmmc-level-2-identification-and-authentication.md
# Configure CMMC Level 2 Identification and Authentication (IA) controls
-Azure Active Directory helps you meet identity-related practice requirements in each Cybersecurity Maturity Model Certification (CMMC) level. To complete other configurations or processes to be compliant with [CMMC V2.0 level 2](https://cmmc-coe.org/maturity-level-two/)requirements, is the responsibility of companies performing work with, and on behalf of, the US Dept. of Defense (DoD).
+Azure Active Directory helps you meet identity-related practice requirements in each Cybersecurity Maturity Model Certification (CMMC) level. To complete other configurations or processes to be compliant with CMMC V2.0 level 2 requirements, is the responsibility of companies performing work with, and on behalf of, the US Dept. of Defense (DoD).
CMMC Level 2 has 13 domains that have one or more practices related to identity. The domains are:
The following table provides a list of practice statement and objectives, and Az
* [Configure Azure Active Directory for CMMC compliance](configure-for-cmmc-compliance.md) * [Configure CMMC Level 1 controls](configure-cmmc-level-1-controls.md) * [Configure CMMC Level 2 Access Control (AC) controls](configure-cmmc-level-2-access-control.md)
-* [Configure CMMC Level 2 additional controls](configure-cmmc-level-2-additional-controls.md)
+* [Configure CMMC Level 2 additional controls](configure-cmmc-level-2-additional-controls.md)
active-directory Configure For Fedramp High Impact https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/standards/configure-for-fedramp-high-impact.md
There are multiple paths towards FedRAMP authorization. You can reuse the existi
## Scope of guidance
-The FedRAMP high baseline is made up of 421 controls and control enhancements from [NIST 800-53 Security Controls Catalog Revision 4](https://csrc.nist.gov/publications/detail/sp/800-53/rev-4/final). Where applicable, we included clarifying information from the [800-53 Revision 5](https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final). This article set covers a subset of these controls that are related to identity, and which you must configure.
+The FedRAMP high baseline is made up of 421 controls and control enhancements from [NIST 800-53 Security Controls Catalog Revision 4](https://csrc.nist.gov/pubs/itlb/2015/01/release-of-nist-special-publication-80053a-revisio/final). Where applicable, we included clarifying information from the [800-53 Revision 5](https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final). This article set covers a subset of these controls that are related to identity, and which you must configure.
We provide prescriptive guidance to help you achieve compliance with controls you're responsible for configuring in Azure Active Directory (Azure AD). To fully address some identity control requirements, you might need to use other systems. Other systems might include a security information and event management tool, such as Microsoft Sentinel. If you're using Azure services outside of Azure Active Directory, there will be other controls you need to consider, and you can use the capabilities Azure already has in place to meet the controls.
active-directory Hipaa Configure For Compliance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/standards/hipaa-configure-for-compliance.md
The remaining articles in this series provide guidance and links to resources, o
* [HHS Zero Trust in Healthcare pdf](https://www.hhs.gov/sites/default/files/zero-trust.pdf)
-* [Combined regulation text](https://www.hhs.gov/ocr/privacy/hipaa/administrative/combined/https://docsupdatetracker.net/index.html?language=es) of all HIPAA Administrative Simplification Regulations found at 45 CFR 160, 162, and 164
+* [Combined regulation text](https://www.hhs.gov/hipaa/for-professionals/privacy/laws-regulations/combined-regulation-text/https://docsupdatetracker.net/index.html) of all HIPAA Administrative Simplification Regulations found at 45 CFR 160, 162, and 164
* [Code of Federal Regulations (CFR) Title 45](https://www.ecfr.gov/current/title-45) describing the public welfare portion of the regulation
active-directory Workload Identities Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/workload-identities/workload-identities-overview.md
Previously updated : 03/08/2023 Last updated : 08/08/2023 -+ #Customer intent: As a developer, I want workload identities so I can authenticate with Azure AD and access Azure AD protected resources.
active-directory Workload Identity Federation Considerations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/workload-identities/workload-identity-federation-considerations.md
Previously updated : 04/07/2023 Last updated : 08/11/2023
ai-services Multivariate Anomaly Detection Synapse https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/Anomaly-Detector/tutorials/multivariate-anomaly-detection-synapse.md
Use this tutorial to detect anomalies among multiple variables in Azure Synapse Analytics in very large datasets and databases. This solution is perfect for scenarios like equipment predictive maintenance. The underlying power comes from the integration with [SynapseML](https://microsoft.github.io/SynapseML/), an open-source library that aims to simplify the creation of massively scalable machine learning pipelines. It can be installed and used on any Spark 3 infrastructure including your **local machine**, **Databricks**, **Synapse Analytics**, and others.
-For more information, see [SynapseML estimator for Multivariate Anomaly Detector](https://microsoft.github.io/SynapseML/docs/documentation/estimators/estimators_cognitive/#fitmultivariateanomaly).
- In this tutorial, you'll learn how to: > [!div class="checklist"]
If you have the need to run training code and inference code in separate noteboo
### About Anomaly Detector * Learn about [what is Multivariate Anomaly Detector](../overview.md).
-* SynapseML documentation with [Multivariate Anomaly Detector feature](https://microsoft.github.io/SynapseML/docs/documentation/estimators/estimators_cognitive/#fitmultivariateanomaly).
-* Recipe: [Azure AI services - Multivariate Anomaly Detector](https://microsoft.github.io/SynapseML/docs/features/cognitive_services/CognitiveServices%20-%20Multivariate%20Anomaly%20Detection/).
* Need support? [Join the Anomaly Detector Community](https://forms.office.com/pages/responsepage.aspx?id=v4j5cvGGr0GRqy180BHbR2Ci-wb6-iNDoBoNxrnEk9VURjNXUU1VREpOT0U1UEdURkc0OVRLSkZBNC4u). ### About Synapse
ai-services Client Library https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/computer-vision/quickstarts-sdk/client-library.md
Previously updated : 07/04/2023 Last updated : 08/07/2023 ms.devlang: csharp, golang, java, javascript, python
ai-services Changelog Release History https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/changelog-release-history.md
monikerRange: '<=doc-intel-3.1.0'
<!-- markdownlint-disable MD001 --> <!-- markdownlint-disable MD033 --> <!-- markdownlint-disable MD051 -->
+<!-- markdownlint-disable MD024 -->
-# Changelog and release history
+# SDK changelog and release history
This reference article provides a version-based description of Document Intelligence feature and capability releases, changes, updates, and enhancements.
-#### Document Intelligence SDK April 2023 preview release
+#### August 2023 (GA) release
+
+### [**C#**](#tab/csharp)
+
+* **Version 4.1.0 (2023-08-10)**
+* **Targets API version2023-07-31 by default**
+* **Version 2023-02-28-preview is no longer supported**
+* [**Breaking changes**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/CHANGELOG.md#breaking-changes-1)
+
+[**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/CHANGELOG.md)
+
+[**Package (NuGet)**](https://www.nuget.org/packages/Azure.AI.FormRecognizer/4.1.0)
+
+[**ReadMe**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/README.md)
+
+[**Samples**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/samples/README.md)
+
+### [**Java**](#tab/java)
+
+* **4.1.0 (2023-08-10)**
+* **Targets API version 2023-07-31 by default**
+* **Version 2023-02-28-preview is no longer supported**
+* [**Breaking changes**](https://github.com/Azure/azure-sdk-for-jav#breaking-changes)
+
+[**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-jav)
+
+[**Package (MVN)**](https://mvnrepository.com/artifact/com.azure/azure-ai-formrecognizer)
+
+[**ReadMe**](https://github.com/Azure/azure-sdk-for-jav)
+
+[**Samples**](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/formrecognizer/azure-ai-formrecognizer/src/samples#readme)
+
+### [**JavaScript**](#tab/javascript)
+
+* **Version 5.0.0 (2023-08-08)**
+* **Targets API version 2023-07-31 by default**
+* **Version 2023-02-28-preview is no longer supported**
+* [**Breaking changes**](https://github.com/witemple-msft/azure-sdk-for-js/blob/ai-form-recognizer/5.0.0-release/sdk/formrecognizer/ai-form-recognizer/CHANGELOG.md#breaking-changes)
+
+[**Changelog/Release History**](https://github.com/witemple-msft/azure-sdk-for-js/blob/ai-form-recognizer/5.0.0-release/sdk/formrecognizer/ai-form-recognizer/CHANGELOG.md)
+
+[**Package (npm)**](https://www.npmjs.com/package/@azure/ai-form-recognizer)
+
+[**ReadMe**](https://github.com/witemple-msft/azure-sdk-for-js/blob/ai-form-recognizer/5.0.0-release/sdk/formrecognizer/ai-form-recognizer/README.md)
+
+[**Samples**](https://github.com/witemple-msft/azure-sdk-for-js/tree/ai-form-recognizer/5.0.0-release/sdk/formrecognizer/ai-form-recognizer/samples/v5)
+
+### [**Python**](#tab/python)
+
+* **Version 3.3.0 (2023-08-08)**
+* **Targets API version 2023-07-31 by default**
+* **Version 2023-02-28-preview is no longer supported**
+* [**Breaking changes**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.3.0/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md#breaking-changes)
+
+[**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.3.0/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md)
+
+[**Package (PyPi)**](https://pypi.org/project/azure-ai-formrecognizer/3.3.0/)
+
+[**ReadMe**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.3.0/sdk/formrecognizer/azure-ai-formrecognizer/README.md)
+
+[**Samples**](https://github.com/Azure/azure-sdk-for-python/tree/azure-ai-formrecognizer_3.3.0/sdk/formrecognizer/azure-ai-formrecognizer/samples)
+++
+#### April 2023 (preview) release
This release includes the following updates:
This release includes the following updates:
* **Targets 2023-02-28-preview by default** * **No breaking changes**
-[**Package (NuGet)**](https://www.nuget.org/packages/Azure.AI.FormRecognizer/4.1.0-beta.1)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/CHANGELOG.md#410-beta1-2023-04-13)
+[**Package (NuGet)**](https://www.nuget.org/packages/Azure.AI.FormRecognizer/4.1.0-beta.1)
+ [**ReadMe**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/README.md) [**Samples**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/samples/README.md)
This release includes the following updates:
* **Targets 2023-02-28-preview by default** * **No breaking changes**
-[**Package (MVN)**](https://mvnrepository.com/artifact/com.azure/azure-ai-formrecognizer/4.1.0-beta.1)
[**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-jav#410-beta1-2023-04-12)
+[**Package (MVN)**](https://mvnrepository.com/artifact/com.azure/azure-ai-formrecognizer/4.1.0-beta.1)
+ [**ReadMe**](https://github.com/Azure/azure-sdk-for-jav) [**Samples**](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/formrecognizer/azure-ai-formrecognizer/src/samples#readme)
This release includes the following updates:
* **Targets 2023-02-28-preview by default** * **No breaking changes**
-[**Package (npm)**](https://www.npmjs.com/package/@azure/ai-form-recognizer/v/4.1.0-beta.1)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-js/blob/a162daee4be05eadff0be1caa7fb2071960bbf44/sdk/formrecognizer/ai-form-recognizer/CHANGELOG.md#410-beta1-2023-04-11)
+[**Package (npm)**](https://www.npmjs.com/package/@azure/ai-form-recognizer/v/4.1.0-beta.1)
+ [**ReadMe**](https://github.com/Azure/azure-sdk-for-js/blob/a162daee4be05eadff0be1caa7fb2071960bbf44/sdk/formrecognizer/ai-form-recognizer/README.md) [**Samples**](https://github.com/Azure/azure-sdk-for-js/tree/a162daee4be05eadff0be1caa7fb2071960bbf44/sdk/formrecognizer/ai-form-recognizer/samples/v4-beta)
This release includes the following updates:
* **Targets 2023-02-28-preview by default** * **No breaking changes**
-[**Package (PyPi)**](https://pypi.org/project/azure-ai-formrecognizer/3.3.0b1/)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.3.0b1/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md#330b1-2023-04-13)
+[**Package (PyPi)**](https://pypi.org/project/azure-ai-formrecognizer/3.3.0b1/)
+ [**ReadMe**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.3.0b1/sdk/formrecognizer/azure-ai-formrecognizer/README.md) [**Samples**](https://github.com/Azure/azure-sdk-for-python/tree/azure-ai-formrecognizer_3.3.0b1/sdk/formrecognizer/azure-ai-formrecognizer/samples)
-#### Document Intelligence SDK September 2022 (GA) release
+#### September 2022 (GA) release
This release includes the following updates:
This release includes the following updates:
* **Version 4.0.0 GA (2022-09-08)** * **Supports REST API v3.0 and v2.0 clients**
-[**Package (NuGet)**](https://www.nuget.org/packages/Azure.AI.FormRecognizer/4.0.0)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/formrecognizer/Azure.AI.FormRecognizer/CHANGELOG.md)
+[**Package (NuGet)**](https://www.nuget.org/packages/Azure.AI.FormRecognizer/4.0.0)
+ [**Migration guide**](https://github.com/Azure/azure-sdk-for-net/blob/Azure.AI.FormRecognizer_4.0.0/sdk/formrecognizer/Azure.AI.FormRecognizer/MigrationGuide.md) [**ReadMe**](https://github.com/Azure/azure-sdk-for-net/blob/Azure.AI.FormRecognizer_4.0.0/sdk/formrecognizer/Azure.AI.FormRecognizer/README.md)
This release includes the following updates:
* **Version 4.0.0 GA (2022-09-08)** * **Supports REST API v3.0 and v2.0 clients**
-[**Package (Maven)**](https://oss.sonatype.org/#nexus-search;quick~azure-ai-formrecognizer)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-jav)
+[**Package (Maven)**](https://oss.sonatype.org/#nexus-search;quick~azure-ai-formrecognizer)
+ [**Migration guide**](https://github.com/Azure/azure-sdk-for-jav) [**ReadMe**](https://github.com/Azure/azure-sdk-for-jav)
This release includes the following updates:
* **Version 4.0.0 GA (2022-09-08)** * **Supports REST API v3.0 and v2.0 clients**
-[**Package (npm)**](https://www.npmjs.com/package/@azure/ai-form-recognizer)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-js/blob/%40azure/ai-form-recognizer_4.0.0/sdk/formrecognizer/ai-form-recognizer/CHANGELOG.md)
+[**Package (npm)**](https://www.npmjs.com/package/@azure/ai-form-recognizer)
+ [**Migration guide**](https://github.com/Azure/azure-sdk-for-js/blob/%40azure/ai-form-recognizer_4.0.0/sdk/formrecognizer/ai-form-recognizer/MIGRATION-v3_v4.md) [**ReadMe**](https://github.com/Azure/azure-sdk-for-js/blob/%40azure/ai-form-recognizer_4.0.0/sdk/formrecognizer/ai-form-recognizer/README.md)
This release includes the following updates:
* **Version 3.2.0 GA (2022-09-08)** * **Supports REST API v3.0 and v2.0 clients**
-[**Package (PyPi)**](https://pypi.org/project/azure-ai-formrecognizer/3.2.0/)
- [**Changelog/Release History**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.2.0/sdk/formrecognizer/azure-ai-formrecognizer/CHANGELOG.md)
+[**Package (PyPi)**](https://pypi.org/project/azure-ai-formrecognizer/3.2.0/)
+ [**Migration guide**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.2.0/sdk/formrecognizer/azure-ai-formrecognizer/MIGRATION_GUIDE.md) [**ReadMe**](https://github.com/Azure/azure-sdk-for-python/blob/azure-ai-formrecognizer_3.2.0/sdk/formrecognizer/azure-ai-formrecognizer/README.md)
This release includes the following updates:
----
-#### Document Intelligence SDK beta August 2022 preview release
+#### August 2022 (preview) release
This release includes the following updates:
This release includes the following updates:
----
-### Document Intelligence SDK beta June 2022 preview release
+### June 2022 (preview) release
This release includes the following updates:
This release includes the following updates:
[**SDK reference documentation**](/python/api/azure-ai-formrecognizer/azure.ai.formrecognizer?view=azure-python-preview&preserve-view=true) -----+
ai-services Concept Add On Capabilities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/concept-add-on-capabilities.md
The task of recognizing small text from large-size documents, like engineering d
## Barcode extraction
-The Read OCR model extracts all identified barcodes in the `barcodes` collection as a top level object under `content`. Inside the `content`, detected barcodes are represented as `:barcode:`. Each entry in this collection represents a barcode and includes the barcode type as `kind` and the embedded barcode content as `value` along with its `polygon` coordinates. Initially, barcodes appear at the end of each page. Here, the `confidence` is hard-coded for the public preview (`2023-02-28`) release.
+The Read OCR model extracts all identified barcodes in the `barcodes` collection as a top level object under `content`. Inside the `content`, detected barcodes are represented as `:barcode:`. Each entry in this collection represents a barcode and includes the barcode type as `kind` and the embedded barcode content as `value` along with its `polygon` coordinates. Initially, barcodes appear at the end of each page. Here, the `confidence` is hard-coded for the API (GA) version (`2023-07-31`).
### Supported barcode types
ai-services Concept Custom Classifier https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/concept-custom-classifier.md
Custom classification models require a minimum of five samples per class to trai
## Training a model
-Custom classification models are only available in the [v3.1 API](v3-1-migration-guide.md) starting with API version ```2023-02-28-preview```. [Document Intelligence Studio](https://formrecognizer.appliedai.azure.com/studio) provides a no-code user interface to interactively train a custom classifier.
+Custom classification models are only available in the [v3.1 API](v3-1-migration-guide.md) version ```2023-07-31```. [Document Intelligence Studio](https://formrecognizer.appliedai.azure.com/studio) provides a no-code user interface to interactively train a custom classifier.
When using the REST API, if you've organized your documents by folders, you can use the ```azureBlobSource``` property of the request to train a classification model.
ai-services Concept Custom Neural https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/concept-custom-neural.md
monikerRange: '>=doc-intel-3.0.0'
[!INCLUDE [applies to v3.1 and v3.0](includes/applies-to-v3-1-v3-0.md)] - Custom neural document models or neural models are a deep learned model type that combines layout and language features to accurately extract labeled fields from documents. The base custom neural model is trained on various document types that makes it suitable to be trained for extracting fields from structured, semi-structured and unstructured documents. The table below lists common document types for each category: |Documents | Examples |
Neural models support documents that have the same information, but different pa
## Supported languages and locales
-1. Neural models now support added languages in the ```v3.1 and v3.0``` APIs.
+>[!NOTE]
+> Document Intelligence auto-detects language and locale data.
++
+Neural models now support added languages for the ```v3.1``` APIs.
+
+|Language| Code (optional) |
+|:--|:-:|
+|Afrikaans| `af`|
+|Albanian| `sq`|
+|Arabic|`ar`|
+|Bulgarian|`bg`|
+|Chinese (Han (Simplified variant))| `zh-Hans`|
+|Chinese (Han (Traditional variant))|`zh-Hant`|
+|Croatian|`hr`|
+|Czech|`cs`|
+|Danish|`da`|
+|Dutch|`nl`|
+|Estonian|`et`|
+|Finnish|`fi`|
+|French|`fr`|
+|German|`de`|
+|Hebrew|`he`|
+|Hindi|`hi`|
+|Hungarian|`hu`|
+|Indonesian|`id`|
+|Italian|`it`|
+|Japanese|`ja`|
+|Korean|`ko`|
+|Latvian|`lv`|
+|Lithuanian|`lt`|
+|Macedonian|`mk`|
+|Marathi|`mr`|
+|Modern Greek (1453-)|`el`|
+|Nepali (macrolanguage)|`ne`|
+|Norwegian|`no`|
+|Panjabi|`pa`|
+|Persian|`fa`|
+|Polish|`pl`|
+|Portuguese|`pt`|
+|Romanian|`rm`|
+|Russian|`ru`|
+|Slovak|`sk`|
+|Slovenian|`sl`|
+|Somali (Arabic)|`so`|
+|Somali (Latin)|`so-latn`|
+|Spanish|`es`|
+|Swahili (macrolanguage)|`sw`|
+|Swedish|`sv`|
+|Tamil|`ta`|
+|Thai|`th`|
+|Turkish|`tr`|
+|Ukrainian|`uk`|
+|Urdu|`ur`|
+|Vietnamese|`vi`|
+++
+Neural models now support added languages for the ```v3.0``` APIs.
| Languages | API version | |:--:|:--:|
Neural models support documents that have the same information, but different pa
| Spanish | `2023-07-31` (GA)| | Dutch | `2023-07-31` (GA)| + ## Tabular fields With the release of API versions **2022-06-30-preview** and later, custom neural models will support tabular fields (tables):
ai-services Concept Custom Template https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/concept-custom-template.md
The following table lists the supported languages for print text by the most rec
:::row::: :::column span="":::
- |Language| Code (optional) |
+ |Language| Code (optional) |
|:--|:-:|
- |Abaza|abq|
- |Abkhazian|ab|
- |Achinese|ace|
- |Acoli|ach|
- |Adangme|ada|
- |Adyghe|ady|
- |Afar|aa|
- |Afrikaans|af|
- |Akan|ak|
- |Albanian|sq|
- |Algonquin|alq|
- |Angika (Devanagari)|anp|
- |Arabic|ar|
- |Asturian|ast|
- |Asu (Tanzania)|asa|
- |Avaric|av|
- |Awadhi-Hindi (Devanagari)|awa|
- |Aymara|ay|
- |Azerbaijani (Latin)|az|
- |Bafia|ksf|
- |Bagheli|bfy|
- |Bambara|bm|
- |Bashkir|ba|
- |Basque|eu|
+ |Abaza|`abq`|
+ |Abkhazian|`ab`|
+ |Achinese|`ace`|
+ |Acoli|`ach`|
+ |Adangme|`ada`|
+ |Adyghe|`ady`|
+ |Afar|`aa`|
+ |Afrikaans|`af`|
+ |Akan|`ak`|
+ |Albanian|`sq`|
+ |Algonquin|`alq`|
+ |Angika (Devanagari)|`anp`|
+ |Arabic|`ar`|
+ |Asturian|`ast`|
+ |Asu (Tanzania)|`asa`|
+ |Avaric|`av`|
+ |Awadhi-Hindi (Devanagari)|`awa`|
+ |Aymara|`ay`|
+ |Azerbaijani (Latin)|`az`|
+ |Bafia|`ksf`|
+ |Bagheli|`bfy`|
+ |Bambara|`bm`|
+ |Bashkir|`ba`|
+ |Basque|`eu`|
|Belarusian (Cyrillic)|be, be-cyrl| |Belarusian (Latin)|be, be-latn|
- |Bemba (Zambia)|bem|
- |Bena (Tanzania)|bez|
- |Bhojpuri-Hindi (Devanagari)|bho|
- |Bikol|bik|
- |Bini|bin|
- |Bislama|bi|
- |Bodo (Devanagari)|brx|
- |Bosnian (Latin)|bs|
- |Brajbha|bra|
- |Breton|br|
- |Bulgarian|bg|
- |Bundeli|bns|
- |Buryat (Cyrillic)|bua|
- |Catalan|ca|
- |Cebuano|ceb|
- |Chamling|rab|
- |Chamorro|ch|
- |Chechen|ce|
- |Chhattisgarhi (Devanagari)|hne|
- |Chiga|cgg|
- |Chinese Simplified|zh-Hans|
- |Chinese Traditional|zh-Hant|
- |Choctaw|cho|
- |Chukot|ckt|
- |Chuvash|cv|
- |Cornish|kw|
- |Corsican|co|
- |Cree|cr|
- |Creek|mus|
- |Crimean Tatar (Latin)|crh|
- |Croatian|hr|
- |Crow|cro|
- |Czech|cs|
- |Danish|da|
- |Dargwa|dar|
- |Dari|prs|
- |Dhimal (Devanagari)|dhi|
- |Dogri (Devanagari)|doi|
- |Duala|dua|
- |Dungan|dng|
- |Dutch|nl|
- |Efik|efi|
- |English|en|
- |Erzya (Cyrillic)|myv|
- |Estonian|et|
- |Faroese|fo|
- |Fijian|fj|
- |Filipino|fil|
- |Finnish|fi|
+ |Bemba (Zambia)|`bem`|
+ |Bena (Tanzania)|`bez`|
+ |Bhojpuri-Hindi (Devanagari)|`bho`|
+ |Bikol|`bik`|
+ |Bini|`bin`|
+ |Bislama|`bi`|
+ |Bodo (Devanagari)|`brx`|
+ |Bosnian (Latin)|`bs`|
+ |Brajbha|`bra`|
+ |Breton|`br`|
+ |Bulgarian|`bg`|
+ |Bundeli|`bns`|
+ |Buryat (Cyrillic)|`bua`|
+ |Catalan|`ca`|
+ |Cebuano|`ceb`|
+ |Chamling|`rab`|
+ |Chamorro|`ch`|
+ |Chechen|`ce`|
+ |Chhattisgarhi (Devanagari)|`hne`|
+ |Chiga|`cgg`|
+ |Chinese Simplified|`zh-Hans`|
+ |Chinese Traditional|`zh-Hant`|
+ |Choctaw|`cho`|
+ |Chukot|`ckt`|
+ |Chuvash|`cv`|
+ |Cornish|`kw`|
+ |Corsican|`co`|
+ |Cree|`cr`|
+ |Creek|`mus`|
+ |Crimean Tatar (Latin)|`crh`|
+ |Croatian|`hr`|
+ |Crow|`cro`|
+ |Czech|`cs`|
+ |Danish|`da`|
+ |Dargwa|`dar`|
+ |Dari|`prs`|
+ |Dhimal (Devanagari)|`dhi`|
+ |Dogri (Devanagari)|`doi`|
+ |Duala|`dua`|
+ |Dungan|`dng`|
+ |Dutch|`nl`|
+ |Efik|`efi`|
+ |English|`en`|
+ |Erzya (Cyrillic)|`myv`|
+ |Estonian|`et`|
+ |Faroese|`fo`|
+ |Fijian|`fj`|
+ |Filipino|`fil`|
+ |Finnish|`fi`|
:::column-end::: :::column span="":::
- |Language| Code (optional) |
+ |Language| Code (optional) |
|:--|:-:|
- |Fon|fon|
- |French|fr|
- |Friulian|fur|
- |Ga|gaa|
- |Gagauz (Latin)|gag|
- |Galician|gl|
- |Ganda|lg|
- |Gayo|gay|
- |German|de|
- |Gilbertese|gil|
- |Gondi (Devanagari)|gon|
- |Greek|el|
- |Greenlandic|kl|
- |Guarani|gn|
- |Gurung (Devanagari)|gvr|
- |Gusii|guz|
- |Haitian Creole|ht|
- |Halbi (Devanagari)|hlb|
- |Hani|hni|
- |Haryanvi|bgc|
- |Hawaiian|haw|
- |Hebrew|he|
- |Herero|hz|
- |Hiligaynon|hil|
- |Hindi|hi|
- |Hmong Daw (Latin)|mww|
- |Ho(Devanagiri)|hoc|
- |Hungarian|hu|
- |Iban|iba|
- |Icelandic|is|
- |Igbo|ig|
- |Iloko|ilo|
- |Inari Sami|smn|
- |Indonesian|id|
- |Ingush|inh|
- |Interlingua|ia|
- |Inuktitut (Latin)|iu|
- |Irish|ga|
- |Italian|it|
- |Japanese|ja|
- |Jaunsari (Devanagari)|Jns|
- |Javanese|jv|
- |Jola-Fonyi|dyo|
- |Kabardian|kbd|
- |Kabuverdianu|kea|
- |Kachin (Latin)|kac|
- |Kalenjin|kln|
- |Kalmyk|xal|
- |Kangri (Devanagari)|xnr|
- |Kanuri|kr|
- |Karachay-Balkar|krc|
+ |`Fon`|`fon`|
+ |French|`fr`|
+ |Friulian|`fur`|
+ |`Ga`|`gaa`|
+ |Gagauz (Latin)|`gag`|
+ |Galician|`gl`|
+ |Ganda|`lg`|
+ |Gayo|`gay`|
+ |German|`de`|
+ |Gilbertese|`gil`|
+ |Gondi (Devanagari)|`gon`|
+ |Greek|`el`|
+ |Greenlandic|`kl`|
+ |Guarani|`gn`|
+ |Gurung (Devanagari)|`gvr`|
+ |Gusii|`guz`|
+ |Haitian Creole|`ht`|
+ |Halbi (Devanagari)|`hlb`|
+ |Hani|`hni`|
+ |Haryanvi|`bgc`|
+ |Hawaiian|`haw`|
+ |Hebrew|`he`|
+ |Herero|`hz`|
+ |Hiligaynon|`hil`|
+ |Hindi|`hi`|
+ |Hmong Daw (Latin)|`mww`|
+ |Ho(Devanagiri)|`hoc`|
+ |Hungarian|`hu`|
+ |Iban|`iba`|
+ |Icelandic|`is`|
+ |Igbo|`ig`|
+ |Iloko|`ilo`|
+ |Inari Sami|`smn`|
+ |Indonesian|`id`|
+ |Ingush|`inh`|
+ |Interlingua|`ia`|
+ |Inuktitut (Latin)|`iu`|
+ |Irish|`ga`|
+ |Italian|`it`|
+ |Japanese|`ja`|
+ |Jaunsari (Devanagari)|`Jns`|
+ |Javanese|`jv`|
+ |Jola-Fonyi|`dyo`|
+ |Kabardian|`kbd`|
+ |Kabuverdianu|`kea`|
+ |Kachin (Latin)|`kac`|
+ |Kalenjin|`kln`|
+ |Kalmyk|`xal`|
+ |Kangri (Devanagari)|`xnr`|
+ |Kanuri|`kr`|
+ |Karachay-Balkar|`krc`|
|Kara-Kalpak (Cyrillic)|kaa-cyrl|
- |Kara-Kalpak (Latin)|kaa|
- |Kashubian|csb|
+ |Kara-Kalpak (Latin)|`kaa`|
+ |Kashubian|`csb`|
|Kazakh (Cyrillic)|kk-cyrl| |Kazakh (Latin)|kk-latn|
- |Khakas|kjh|
- |Khaling|klr|
- |Khasi|kha|
- |K'iche'|quc|
- |Kikuyu|ki|
- |Kildin Sami|sjd|
- |Kinyarwanda|rw|
- |Komi|kv|
- |Kongo|kg|
- |Korean|ko|
- |Korku|kfq|
- |Koryak|kpy|
- |Kosraean|kos|
- |Kpelle|kpe|
- |Kuanyama|kj|
- |Kumyk (Cyrillic)|kum|
+ |Khakas|`kjh`|
+ |Khaling|`klr`|
+ |Khasi|`kha`|
+ |K'iche'|`quc`|
+ |Kikuyu|`ki`|
+ |Kildin Sami|`sjd`|
+ |Kinyarwanda|`rw`|
+ |Komi|`kv`|
+ |Kongo|`kg`|
+ |Korean|`ko`|
+ |Korku|`kfq`|
+ |Koryak|`kpy`|
+ |Kosraean|`kos`|
+ |Kpelle|`kpe`|
+ |Kuanyama|`kj`|
+ |Kumyk (Cyrillic)|`kum`|
|Kurdish (Arabic)|ku-arab| |Kurdish (Latin)|ku-latn| :::column-end::: :::column span="":::
- |Language| Code (optional) |
+ |Language| Code (optional) |
|:--|:-:|
- |Kurukh (Devanagari)|kru|
- |Kyrgyz (Cyrillic)|ky|
- |Lak|lbe|
- |Lakota|lkt|
- |Latin|la|
- |Latvian|lv|
- |Lezghian|lex|
- |Lingala|ln|
- |Lithuanian|lt|
- |Lower Sorbian|dsb|
- |Lozi|loz|
- |Lule Sami|smj|
- |Luo (Kenya and Tanzania)|luo|
- |Luxembourgish|lb|
- |Luyia|luy|
- |Macedonian|mk|
- |Machame|jmc|
- |Madurese|mad|
- |Mahasu Pahari (Devanagari)|bfz|
- |Makhuwa-Meetto|mgh|
- |Makonde|kde|
- |Malagasy|mg|
- |Malay (Latin)|ms|
- |Maltese|mt|
- |Malto (Devanagari)|kmj|
- |Mandinka|mnk|
- |Manx|gv|
- |Maori|mi|
- |Mapudungun|arn|
- |Marathi|mr|
- |Mari (Russia)|chm|
- |Masai|mas|
- |Mende (Sierra Leone)|men|
- |Meru|mer|
- |Meta'|mgo|
- |Minangkabau|min|
- |Mohawk|moh|
- |Mongolian (Cyrillic)|mn|
- |Mongondow|mog|
+ |Kurukh (Devanagari)|`kru`|
+ |Kyrgyz (Cyrillic)|`ky`|
+ |`Lak`|`lbe`|
+ |Lakota|`lkt`|
+ |Latin|`la`|
+ |Latvian|`lv`|
+ |Lezghian|`lex`|
+ |Lingala|`ln`|
+ |Lithuanian|`lt`|
+ |Lower Sorbian|`dsb`|
+ |Lozi|`loz`|
+ |Lule Sami|`smj`|
+ |Luo (Kenya and Tanzania)|`luo`|
+ |Luxembourgish|`lb`|
+ |Luyia|`luy`|
+ |Macedonian|`mk`|
+ |Machame|`jmc`|
+ |Madurese|`mad`|
+ |Mahasu Pahari (Devanagari)|`bfz`|
+ |Makhuwa-Meetto|`mgh`|
+ |Makonde|`kde`|
+ |Malagasy|`mg`|
+ |Malay (Latin)|`ms`|
+ |Maltese|`mt`|
+ |Malto (Devanagari)|`kmj`|
+ |Mandinka|`mnk`|
+ |Manx|`gv`|
+ |Maori|`mi`|
+ |Mapudungun|`arn`|
+ |Marathi|`mr`|
+ |Mari (Russia)|`chm`|
+ |Masai|`mas`|
+ |Mende (Sierra Leone)|`men`|
+ |Meru|`mer`|
+ |Meta'|`mgo`|
+ |Minangkabau|`min`|
+ |Mohawk|`moh`|
+ |Mongolian (Cyrillic)|`mn`|
+ |Mongondow|`mog`|
|Montenegrin (Cyrillic)|cnr-cyrl| |Montenegrin (Latin)|cnr-latn|
- |Morisyen|mfe|
- |Mundang|mua|
- |Nahuatl|nah|
- |Navajo|nv|
- |Ndonga|ng|
- |Neapolitan|nap|
- |Nepali|ne|
- |Ngomba|jgo|
- |Niuean|niu|
- |Nogay|nog|
- |North Ndebele|nd|
- |Northern Sami (Latin)|sme|
- |Norwegian|no|
- |Nyanja|ny|
- |Nyankole|nyn|
- |Nzima|nzi|
- |Occitan|oc|
- |Ojibwa|oj|
- |Oromo|om|
- |Ossetic|os|
- |Pampanga|pam|
- |Pangasinan|pag|
- |Papiamento|pap|
- |Pashto|ps|
- |Pedi|nso|
- |Persian|fa|
- |Polish|pl|
- |Portuguese|pt|
- |Punjabi (Arabic)|pa|
- |Quechua|qu|
- |Ripuarian|ksh|
- |Romanian|ro|
- |Romansh|rm|
- |Rundi|rn|
- |Russian|ru|
+ |Morisyen|`mfe`|
+ |Mundang|`mua`|
+ |Nahuatl|`nah`|
+ |Navajo|`nv`|
+ |Ndonga|`ng`|
+ |Neapolitan|`nap`|
+ |Nepali|`ne`|
+ |Ngomba|`jgo`|
+ |Niuean|`niu`|
+ |Nogay|`nog`|
+ |North Ndebele|`nd`|
+ |Northern Sami (Latin)|`sme`|
+ |Norwegian|`no`|
+ |Nyanja|`ny`|
+ |Nyankole|`nyn`|
+ |Nzima|`nzi`|
+ |Occitan|`oc`|
+ |Ojibwa|`oj`|
+ |Oromo|`om`|
+ |Ossetic|`os`|
+ |Pampanga|`pam`|
+ |Pangasinan|`pag`|
+ |Papiamento|`pap`|
+ |Pashto|`ps`|
+ |Pedi|`nso`|
+ |Persian|`fa`|
+ |Polish|`pl`|
+ |Portuguese|`pt`|
+ |Punjabi (Arabic)|`pa`|
+ |Quechua|`qu`|
+ |Ripuarian|`ksh`|
+ |Romanian|`ro`|
+ |Romansh|`rm`|
+ |Rundi|`rn`|
+ |Russian|`ru`|
:::column-end::: :::column span="":::
- |Language| Code (optional) |
+ |Language| Code (optional) |
|:--|:-:|
- |Rwa|rwk|
- |Sadri (Devanagari)|sck|
- |Samburu|saq|
- |Samoan (Latin)|sm|
- |Sango|sg|
- |Sangu (Gabon)|snq|
- |Sanskrit (Devanagari)|sa|
- |Santali(Devanagiri)|sat|
- |Scots|sco|
- |Scottish Gaelic|gd|
- |Sena|seh|
+ |`Rwa`|`rwk`|
+ |Sadri (Devanagari)|`sck`|
+ |Samburu|`saq`|
+ |Samoan (Latin)|`sm`|
+ |Sango|`sg`|
+ |Sangu (Gabon)|`snq`|
+ |Sanskrit (Devanagari)|`sa`|
+ |Santali(Devanagiri)|`sat`|
+ |Scots|`sco`|
+ |Scottish Gaelic|`gd`|
+ |Sena|`seh`|
|Serbian (Cyrillic)|sr-cyrl| |Serbian (Latin)|sr, sr-latn|
- |Shambala|ksb|
- |Sherpa (Devanagari)|xsr|
- |Shona|sn|
- |Siksika|bla|
- |Sirmauri (Devanagari)|srx|
- |Skolt Sami|sms|
- |Slovak|sk|
- |Slovenian|sl|
- |Soga|xog|
- |Somali (Arabic)|so|
- |Somali (Latin)|so-latn|
- |Songhai|son|
- |South Ndebele|nr|
- |Southern Altai|alt|
- |Southern Sami|sma|
- |Southern Sotho|st|
- |Spanish|es|
- |Sundanese|su|
- |Swahili (Latin)|sw|
- |Swati|ss|
- |Swedish|sv|
- |Tabassaran|tab|
- |Tachelhit|shi|
- |Tahitian|ty|
- |Taita|dav|
- |Tajik (Cyrillic)|tg|
- |Tamil|ta|
+ |Shambala|`ksb`|
+ |Sherpa (Devanagari)|`xsr`|
+ |Shona|`sn`|
+ |Siksika|`bla`|
+ |Sirmauri (Devanagari)|`srx`|
+ |Skolt Sami|`sms`|
+ |Slovak|`sk`|
+ |Slovenian|`sl`|
+ |Soga|`xog`|
+ |Somali (Arabic)|`so`|
+ |Somali (Latin)|`so-latn`|
+ |Songhai|`son`|
+ |South Ndebele|`nr`|
+ |Southern Altai|`alt`|
+ |Southern Sami|`sma`|
+ |Southern Sotho|`st`|
+ |Spanish|`es`|
+ |Sundanese|`su`|
+ |Swahili (Latin)|`sw`|
+ |Swati|`ss`|
+ |Swedish|`sv`|
+ |Tabassaran|`tab`|
+ |Tachelhit|`shi`|
+ |Tahitian|`ty`|
+ |Taita|`dav`|
+ |Tajik (Cyrillic)|`tg`|
+ |Tamil|`ta`|
|Tatar (Cyrillic)|tt-cyrl|
- |Tatar (Latin)|tt|
- |Teso|teo|
- |Tetum|tet|
- |Thai|th|
- |Thangmi|thf|
- |Tok Pisin|tpi|
- |Tongan|to|
- |Tsonga|ts|
- |Tswana|tn|
- |Turkish|tr|
- |Turkmen (Latin)|tk|
- |Tuvan|tyv|
- |Udmurt|udm|
+ |Tatar (Latin)|`tt`|
+ |Teso|`teo`|
+ |Tetum|`tet`|
+ |Thai|`th`|
+ |Thangmi|`thf`|
+ |Tok Pisin|`tpi`|
+ |Tongan|`to`|
+ |Tsonga|`ts`|
+ |Tswana|`tn`|
+ |Turkish|`tr`|
+ |Turkmen (Latin)|`tk`|
+ |Tuvan|`tyv`|
+ |Udmurt|`udm`|
|Uighur (Cyrillic)|ug-cyrl|
- |Ukrainian|uk|
- |Upper Sorbian|hsb|
- |Urdu|ur|
- |Uyghur (Arabic)|ug|
+ |Ukrainian|`uk`|
+ |Upper Sorbian|`hsb`|
+ |Urdu|`ur`|
+ |Uyghur (Arabic)|`ug`|
|Uzbek (Arabic)|uz-arab| |Uzbek (Cyrillic)|uz-cyrl|
- |Uzbek (Latin)|uz|
- |Vietnamese|vi|
- |Volap├╝k|vo|
- |Vunjo|vun|
- |Walser|wae|
- |Welsh|cy|
- |Western Frisian|fy|
- |Wolof|wo|
- |Xhosa|xh|
- |Yakut|sah|
- |Yucatec Maya|yua|
- |Zapotec|zap|
- |Zarma|dje|
- |Zhuang|za|
- |Zulu|zu|
+ |Uzbek (Latin)|`uz`|
+ |Vietnamese|`vi`|
+ |Volap├╝k|`vo`|
+ |Vunjo|`vun`|
+ |Walser|`wae`|
+ |Welsh|`cy`|
+ |Western Frisian|`fy`|
+ |Wolof|`wo`|
+ |Xhosa|`xh`|
+ |Yakut|`sah`|
+ |Yucatec Maya|`yua`|
+ |Zapotec|`zap`|
+ |Zarma|`dje`|
+ |Zhuang|`za`|
+ |Zulu|`zu`|
:::column-end::: :::row-end:::
ai-services Concept Invoice https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/concept-invoice.md
Previously updated : 07/18/2023 Last updated : 08/10/2023 monikerRange: '<=doc-intel-3.1.0'
See how data, including customer information, vendor details, and line items, is
::: moniker-end - ## Supported languages and locales >[!NOTE] > Document Intelligence auto-detects language and locale data. + | Supported languages | Details | |:-|:| | &bullet; English (`en`) | United States (`us`), Australia (`au`), Canada (`ca`), United Kingdom (-uk), India (-in)|
See how data, including customer information, vendor details, and line items, is
| Supported Currency Codes | Details | |:-|:|
-| &bullet; ARS | United States (`us`) |
-| &bullet; AUD | Australia (`au`) |
-| &bullet; BRL | United States (`us`) |
+| &bullet; ARS | Argentine Peso (`ar`) |
+| &bullet; AUD | Australian Dollar (`au`) |
+| &bullet; BRL | Brazilian Real (`br`) |
+| &bullet; CAD | Canadian Dollar (`ca`) |
+| &bullet; CLP | Chilean Peso (`cl`) |
+| &bullet; CNY | Chinese Yuan (`cn`) |
+| &bullet; COP | Columbian Peso (`co`) |
+| &bullet; CRC | Costa Rican Cold├│n (`us`) |
+| &bullet; CZK | Czech Koruna (`cz`) |
+| &bullet; DKK | Danish Krone (`dk`) |
+| &bullet; EUR | Euro (`eu`) |
+| &bullet; GBP | British Pound Sterling (`gb`) |
+| &bullet; GGP | Guernsey Pound (`gg`) |
+| &bullet; HUF | Hungarian Forint (`hu`) |
+| &bullet; IDR | Indonesian Rupiah (`id`) |
+| &bullet; INR | Indian Rupee (`in`) |
+| &bullet; ISK | Icelandic Kr├│na (`us`) |
+| &bullet; JPY | Japanese Yen (`jp`) |
+| &bullet; KRW | South Korean Won (`kr`) |
+| &bullet; NOK | Norwegian Krone (`no`) |
+| &bullet; PAB | Panamanian Balboa (`pa`) |
+| &bullet; PEN | Peruvian Sol (`pe`) |
+| &bullet; PLN | Polish Zloty (`pl`) |
+| &bullet; RON | Romanian Leu (`ro`) |
+| &bullet; RSD | Serbian Dinar (`rs`) |
+| &bullet; SEK | Swedish Krona (`se`) |
+| &bullet; TWD | New Taiwan Dollar (`tw`) |
+| &bullet; USD | United States Dollar (`us`) |
+++
+| Supported languages | Details |
+|:-|:|
+| &bullet; English (`en`) | United States (`us`), Australia (`au`), Canada (`ca`), United Kingdom (-uk), India (-in)|
+| &bullet; Spanish (`es`) |Spain (`es`)|
+| &bullet; German (`de`) | Germany (`de`)|
+| &bullet; French (`fr`) | France (`fr`) |
+| &bullet; Italian (`it`) | Italy (`it`)|
+| &bullet; Portuguese (`pt`) | Portugal (`pt`), Brazil (`br`)|
+| &bullet; Dutch (`nl`) | Netherlands (`nl`)|
+
+| Supported Currency Codes | Details |
+|:-|:|
+| &bullet; BRL | Brazilian Real (`br`) |
+| &bullet; GBP | British Pound Sterling (`gb`) |
| &bullet; CAD | Canada (`ca`) |
-| &bullet; CLP | United States (`us`) |
-| &bullet; CNY | United States (`us`) |
-| &bullet; COP | United States (`us`) |
-| &bullet; CRC | United States (`us`) |
-| &bullet; CZK | United States (`us`) |
-| &bullet; DKK | United States (`us`) |
-| &bullet; EUR | United States (`us`) |
-| &bullet; GBP | United Kingdom (`uk`) |
-| &bullet; HUF | United States (`us`) |
-| &bullet; IDR | United States (`us`) |
-| &bullet; INR | United States (`us`) |
-| &bullet; ISK | United States (`us`) |
-| &bullet; JPY | Japan (`jp`) |
-| &bullet; KRW | United States (`us`) |
-| &bullet; NOK | United States (`us`) |
-| &bullet; PAB | United States (`us`) |
-| &bullet; PEN | United States (`us`) |
-| &bullet; PLN | United States (`us`) |
-| &bullet; RON | United States (`us`) |
-| &bullet; RSD | United States (`us`) |
-| &bullet; SEK | United States (`us`) |
-| &bullet; TWD | United States (`us`) |
+| &bullet; EUR | Euro (`eu`) |
+| &bullet; GGP | Guernsey Pound (`gg`) |
+| &bullet; INR | Indian Rupee (`in`) |
| &bullet; USD | United States (`us`) |+ ## Field extraction
ai-services Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/overview.md
You can use Document Intelligence to automate document processing in application
| About | Description |Automation use cases |Development options | |-|--|--|--|
-|[**Custom model**](concept-custom.md) | Extracts information from forms and documents into structured data based on a model created from a set of representative training document sets.|Extract distinct data from forms and documents specific to your business and use cases.|&#9679; [**Document Intelligence Studio**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)</br>&#9679; [**REST API**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-02-28-preview/operations/BuildDocumentModel)</br>&#9679; [**C# SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Java SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**JavaScript SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Python SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)|
+|[**Custom model**](concept-custom.md) | Extracts information from forms and documents into structured data based on a model created from a set of representative training document sets.|Extract distinct data from forms and documents specific to your business and use cases.|&#9679; [**Document Intelligence Studio**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)</br>&#9679; [**REST API**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/BuildDocumentModel)</br>&#9679; [**C# SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Java SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**JavaScript SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Python SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)|
> [!div class="nextstepaction"] > [Return to custom model types](#custom-models)
You can use Document Intelligence to automate document processing in application
| About | Description |Automation use cases | Development options | |-|--|-|--|
-|[**Custom Template model**](concept-custom-template.md) | The custom template model extracts labeled values and fields from structured and semi-structured documents.</br> | Extract key data from highly structured documents with defined visual templates or common visual layouts, forms.| &#9679; [**Document Intelligence Studio**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)</br>&#9679; [**REST API**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-02-28-preview/operations/BuildDocumentModel)</br>&#9679; [**C# SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Python SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Java SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**JavaScript SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)
+|[**Custom Template model**](concept-custom-template.md) | The custom template model extracts labeled values and fields from structured and semi-structured documents.</br> | Extract key data from highly structured documents with defined visual templates or common visual layouts, forms.| &#9679; [**Document Intelligence Studio**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)</br>&#9679; [**REST API**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/BuildDocumentModel)</br>&#9679; [**C# SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Python SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Java SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**JavaScript SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)
> [!div class="nextstepaction"] > [Return to custom model types](#custom-models)
You can use Document Intelligence to automate document processing in application
| About | Description |Automation use cases | Development options | |-|--|-|--|
- |[**Custom Neural model**](concept-custom-neural.md)| The custom neural model is used to extract labeled data from structured (surveys, questionnaires), semi-structured (invoices, purchase orders), and unstructured documents (contracts, letters).|Extract text data, checkboxes, and tabular fields from structured and unstructured documents.|[**Document Intelligence Studio**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)</br>&#9679; [**REST API**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-02-28-preview/operations/BuildDocumentModel)</br>&#9679; [**C# SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Java SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**JavaScript SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Python SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)
+ |[**Custom Neural model**](concept-custom-neural.md)| The custom neural model is used to extract labeled data from structured (surveys, questionnaires), semi-structured (invoices, purchase orders), and unstructured documents (contracts, letters).|Extract text data, checkboxes, and tabular fields from structured and unstructured documents.|[**Document Intelligence Studio**](https://formrecognizer.appliedai.azure.com/studio/custommodel/projects)</br>&#9679; [**REST API**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/BuildDocumentModel)</br>&#9679; [**C# SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Java SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**JavaScript SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)</br>&#9679; [**Python SDK**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)
> [!div class="nextstepaction"] > [Return to custom model types](#custom-models)
ai-services Sdk Overview V3 0 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/sdk-overview-v3-0.md
+
+ Title: Document Intelligence (formerly Form Recognizer) SDKs v3.0
+
+description: Document Intelligence v3.0 software development kits (SDKs) expose Document Intelligence models, features and capabilities, using C#, Java, JavaScript, and Python programming language.
++++++ Last updated : 08/15/2023+
+monikerRange: '>=doc-intel-3.0.0'
+++
+<!-- markdownlint-disable MD024 -->
+<!-- markdownlint-disable MD036 -->
+<!-- markdownlint-disable MD001 -->
+<!-- markdownlint-disable MD051 -->
+
+# Document Intelligence SDK v3.0 (GA)
++
+Azure AI Document Intelligence is a cloud service that uses machine learning to analyze text and structured data from documents. The Document Intelligence software development kit (SDK) is a set of libraries and tools that enable you to easily integrate Document Intelligence models and capabilities into your applications. Document Intelligence SDK is available across platforms in C#/.NET, Java, JavaScript, and Python programming languages.
+
+## Supported languages
+
+Document Intelligence SDK supports the following languages and platforms:
+
+| Language → Document Intelligence SDK version | Package| Supported API version| Platform support |
+|:-:|:-|:-| :-|
+| [.NET/C# → 4.0.0 (GA)](https://azuresdkdocs.blob.core.windows.net/$web/dotnet/Azure.AI.FormRecognizer/4.0.0/https://docsupdatetracker.net/index.html)|[NuGet](https://www.nuget.org/packages/Azure.AI.FormRecognizer)|[v3.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) |[Windows, macOS, Linux, Docker](https://dotnet.microsoft.com/download)|
+|[Java → 4.0.6 (GA)](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-ai-formrecognizer/4.0.0/https://docsupdatetracker.net/index.html) |[MVN repository](https://mvnrepository.com/artifact/com.azure/azure-ai-formrecognizer/4.0.0-beta.6) |[v3.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) |[Windows, macOS, Linux](/java/openjdk/install)|
+|[JavaScript → 4.0.0 (GA)](https://azuresdkdocs.blob.core.windows.net/$web/javascript/azure-ai-form-recognizer/4.0.0/https://docsupdatetracker.net/index.html)| [npm](https://www.npmjs.com/package/@azure/ai-form-recognizer)| [v3.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) | [Browser, Windows, macOS, Linux](https://nodejs.org/en/download/) |
+|[Python → 3.2.0 (GA)](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-ai-formrecognizer/3.2.0/https://docsupdatetracker.net/index.html) | [PyPI](https://pypi.org/project/azure-ai-formrecognizer/3.2.0/)| [v3.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) |[Windows, macOS, Linux](/azure/developer/python/configure-local-development-environment?tabs=windows%2Capt%2Ccmd#use-the-azure-cli)
+
+## Supported Clients
+
+| Language| SDK version | API version | Supported clients|
+| : | :--|:- | :--|
+|.NET/C#</br> Java</br> JavaScript</br>| 4.0.0 (GA)| v3.0 / 2022-08-31 (default)| **DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|.NET/C#</br> Java</br> JavaScript</br>| 3.1.x | v2.1 (default)</br>v2.0 | **FormRecognizerClient**</br>**FormTrainingClient** |
+|.NET/C#</br> Java</br> JavaScript</br>| 3.0.x| v2.0 | **FormRecognizerClient**</br>**FormTrainingClient** |
+| Python| 3.2.x (GA) | v3.0 / 2022-08-31 (default)| DocumentAnalysisClient</br>DocumentModelAdministrationClient|
+| Python | 3.1.x | v2.1 (default)</br>v2.0 |**FormRecognizerClient**</br>**FormTrainingClient** |
+| Python | 3.0.0 | v2.0 |**FormRecognizerClient**</br>**FormTrainingClient** |
+
+## Use Document Intelligence SDK in your applications
+
+The Document Intelligence SDK enables the use and management of the Document Intelligence service in your application. The SDK builds on the underlying Document Intelligence REST API allowing you to easily use those APIs within your programming language paradigm. Here's how you use the Document Intelligence SDK for your preferred language:
+
+### 1. Install the SDK client library
+
+### [C#/.NET](#tab/csharp)
+
+```dotnetcli
+dotnet add package Azure.AI.FormRecognizer --version 4.0.0
+```
+
+```powershell
+Install-Package Azure.AI.FormRecognizer -Version 4.0.0
+```
+
+### [Java](#tab/java)
+
+```xml
+<dependency>
+<groupId>com.azure</groupId>
+<artifactId>azure-ai-formrecognizer</artifactId>
+<version>4.0.6</version>
+</dependency>
+```
+
+```kotlin
+implementation("com.azure:azure-ai-formrecognizer:4.0.6")
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+npm i @azure/ai-form-recognizer@4.0.0
+```
+
+### [Python](#tab/python)
+
+```python
+pip install azure-ai-formrecognizer==3.2.0
+```
+++
+### 2. Import the SDK client library into your application
+
+### [C#/.NET](#tab/csharp)
+
+```csharp
+using Azure;
+using Azure.AI.FormRecognizer.DocumentAnalysis;
+```
+
+### [Java](#tab/java)
+
+```java
+import com.azure.ai.formrecognizer.*;
+import com.azure.ai.formrecognizer.models.*;
+import com.azure.ai.formrecognizer.DocumentAnalysisClient.*;
+
+import com.azure.core.credential.AzureKeyCredential;
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
+```
+
+### [Python](#tab/python)
+
+```python
+from azure.ai.formrecognizer import DocumentAnalysisClient
+from azure.core.credentials import AzureKeyCredential
+```
++++
+### 3. Set up authentication
+
+There are two supported methods for authentication
+
+* Use a [Document Intelligence API key](#use-your-api-key) with AzureKeyCredential from azure.core.credentials.
+
+* Use a [token credential from azure-identity](#use-an-azure-active-directory-azure-ad-token-credential) to authenticate with [Azure Active Directory](../../active-directory/fundamentals/active-directory-whatis.md).
+
+#### Use your API key
+
+Here's where to find your Document Intelligence API key in the Azure portal:
++
+### [C#/.NET](#tab/csharp)
+
+```csharp
+
+//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentAnalysisClient` instance
+string key = "<your-key>";
+string endpoint = "<your-endpoint>";
+AzureKeyCredential credential = new AzureKeyCredential(key);
+DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
+```
+
+### [Java](#tab/java)
+
+```java
+
+// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
+DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
+ .credential(new AzureKeyCredential("<your-key>"))
+ .endpoint("<your-endpoint>")
+ .buildClient();
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+
+// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
+async function main() {
+ const client = new DocumentAnalysisClient("<your-endpoint>", new AzureKeyCredential("<your-key>"));
+```
+
+### [Python](#tab/python)
+
+```python
+
+# create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
+ document_analysis_client = DocumentAnalysisClient(endpoint="<your-endpoint>", credential=AzureKeyCredential("<your-key>"))
+```
++++
+#### Use an Azure Active Directory (Azure AD) token credential
+
+> [!NOTE]
+> Regional endpoints do not support AAD authentication. Create a [custom subdomain](../../ai-services/authentication.md?tabs=powershell#create-a-resource-with-a-custom-subdomain) for your resource in order to use this type of authentication.
+
+Authorization is easiest using the `DefaultAzureCredential`. It provides a default token credential, based upon the running environment, capable of handling most Azure authentication scenarios.
+
+### [C#/.NET](#tab/csharp)
+
+Here's how to acquire and use the [DefaultAzureCredential](/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet&preserve-view=true) for .NET applications:
+
+1. Install the [Azure Identity library for .NET](/dotnet/api/overview/azure/identity-readme):
+
+ ```console
+ dotnet add package Azure.Identity
+ ```
+
+ ```powershell
+ Install-Package Azure.Identity
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret in the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance including the **`DefaultAzureCredential`**:
+
+ ```csharp
+ string endpoint = "<your-endpoint>";
+ var client = new DocumentAnalysisClient(new Uri(endpoint), new DefaultAzureCredential());
+ ```
+
+For more information, *see* [Authenticate the client](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.FormRecognizer_4.0.0-beta.4/sdk/formrecognizer/Azure.AI.FormRecognizer#authenticate-the-client)
+
+### [Java](#tab/java)
+
+Here's how to acquire and use the [DefaultAzureCredential](/java/api/com.azure.identity.defaultazurecredential?view=azure-java-stable&preserve-view=true) for Java applications:
+
+1. Install the [Azure Identity library for Java](/java/api/overview/azure/identity-readme?view=azure-java-stable&preserve-view=true):
+
+ ```xml
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-identity</artifactId>
+ <version>1.5.3</version>
+ </dependency>
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret of the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance and **`TokenCredential`** variable:
+
+ ```java
+ TokenCredential credential = new DefaultAzureCredentialBuilder().build();
+ DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
+ .endpoint("{your-endpoint}")
+ .credential(credential)
+ .buildClient();
+ ```
+
+For more information, *see* [Authenticate the client](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/formrecognizer/azure-ai-formrecognizer#authenticate-the-client)
+
+### [JavaScript](#tab/javascript)
+
+Here's how to acquire and use the [DefaultAzureCredential](/javascript/api/@azure/identity/defaultazurecredential?view=azure-node-latest&preserve-view=true) for JavaScript applications:
+
+1. Install the [Azure Identity library for JavaScript](/javascript/api/overview/azure/identity-readme?view=azure-node-latest&preserve-view=true):
+
+ ```javascript
+ npm install @azure/identity
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret of the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance including the **`DefaultAzureCredential`**:
+
+ ```javascript
+ const { DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
+ const { DefaultAzureCredential } = require("@azure/identity");
+
+ const client = new DocumentAnalysisClient("<your-endpoint>", new DefaultAzureCredential());
+ ```
+
+For more information, *see* [Create and authenticate a client](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/formrecognizer/ai-form-recognizer#create-and-authenticate-a-client).
+
+### [Python](#tab/python)
+
+Here's how to acquire and use the [DefaultAzureCredential](/python/api/azure-identity/azure.identity.defaultazurecredential?view=azure-python&preserve-view=true) for Python applications.
+
+1. Install the [Azure Identity library for Python](/python/api/overview/azure/identity-readme?view=azure-python&preserve-view=true):
+
+ ```python
+ pip install azure-identity
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret of the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance including the **`DefaultAzureCredential`**:
+
+ ```python
+ from azure.identity import DefaultAzureCredential
+ from azure.ai.formrecognizer import DocumentAnalysisClient
+
+ credential = DefaultAzureCredential()
+ document_analysis_client = DocumentAnalysisClient(
+ endpoint="https://<my-custom-subdomain>.cognitiveservices.azure.com/",
+ credential=credential
+ )
+ ```
+
+For more information, *see* [Authenticate the client](https://github.com/Azure/azure-sdk-for-python/tree/azure-ai-formrecognizer_3.2.0b5/sdk/formrecognizer/azure-ai-formrecognizer#authenticate-the-client)
++++
+### 4. Build your application
+
+Create a client object to interact with the Document Intelligence SDK, and then call methods on that client object to interact with the service. The SDKs provide both synchronous and asynchronous methods. For more insight, try a [quickstart](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true) in a language of your choice.
+
+## Help options
+
+The [Microsoft Q&A](/answers/topics/azure-form-recognizer.html) and [Stack Overflow](https://stackoverflow.com/questions/tagged/azure-form-recognizer) forums are available for the developer community to ask and answer questions about Azure AI Document Intelligence and other services. Microsoft monitors the forums and replies to questions that the community has yet to answer. To make sure that we see your question, tag it with **`azure-form-recognizer`**.
+
+## Next steps
+
+>[!div class="nextstepaction"]
+> [**Explore Document Intelligence REST API v3.0**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)
+
+> [!div class="nextstepaction"]
+> [**Try a Document Intelligence quickstart**](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true)
ai-services Sdk Overview V3 1 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/document-intelligence/sdk-overview-v3-1.md
+
+ Title: Document Intelligence (formerly Form Recognizer) v3.1 SDKs
+
+description: The Document Intelligence v3.1 software development kits (SDKs) expose Document Intelligence models, features and capabilities that are in active development for C#, Java, JavaScript, or Python programming language.
++++++ Last updated : 08/11/2023+
+monikerRange: '>=doc-intel-3.0.0'
+++
+<!-- markdownlint-disable MD024 -->
+<!-- markdownlint-disable MD036 -->
+<!-- markdownlint-disable MD001 -->
+<!-- markdownlint-disable MD051 -->
+
+# Document Intelligence SDK v3.1 (GA)
+
+**The SDKs referenced in this article are supported by:** ![Document Intelligence checkmark](media/yes-icon.png) **Document Intelligence REST API version 2023-07-31 ΓÇö v3.1 (GA)**.
+
+Azure AI Document Intelligence is a cloud service that uses machine learning to analyze text and structured data from documents. The Document Intelligence software development kit (SDK) is a set of libraries and tools that enable you to easily integrate Document Intelligence models and capabilities into your applications. Document Intelligence SDK is available across platforms in C#/.NET, Java, JavaScript, and Python programming languages.
+
+## Supported languages
+
+Document Intelligence SDK supports the following languages and platforms:
+
+| Language → Document Intelligence SDK version &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;| Package| Supported API version &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;| Platform support |
+|:-:|:-|:-| :-:|
+| [**.NET/C# → 4.1.0 → latest GA release </br>(2023-08-10)**](https://azuresdkdocs.blob.core.windows.net/$web/dotnet/Azure.AI.FormRecognizer/4.1.0/https://docsupdatetracker.net/index.html)|[NuGet](https://www.nuget.org/packages/Azure.AI.FormRecognizer/4.1.0)|[&bullet; 2023-07-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [&bullet; 2022-08-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [&bullet; v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[&bullet; v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) |[Windows, macOS, Linux, Docker](https://dotnet.microsoft.com/download)|
+|[**Java → 4.1.0 → latest GA release</br>(2023-08-10)**](https://azuresdkdocs.blob.core.windows.net/$web/java/azure-ai-formrecognizer/4.1.0/https://docsupdatetracker.net/index.html) |[MVN repository](https://mvnrepository.com/artifact/com.azure/azure-ai-formrecognizer) |[&bullet; 2023-07-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [&bullet; 2022-08-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [&bullet; v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[&bullet; v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) |[Windows, macOS, Linux](/java/openjdk/install)|
+|[**JavaScript → 5.0.0 → latest GA release</br> (2023-08-08)**](https://azuresdkdocs.blob.core.windows.net/$web/javascript/azure-ai-form-recognizer/5.0.0/https://docsupdatetracker.net/index.html)| [npm](https://www.npmjs.com/package/@azure/ai-form-recognizer)| [&bullet; 2023-07-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> &bullet; [2022-08-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [&bullet; v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[&bullet; v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) | [Browser, Windows, macOS, Linux](https://nodejs.org/en/download/) |
+|[**Python → 3.3.0 → latest GA release</br> (2023-08-08)**](https://azuresdkdocs.blob.core.windows.net/$web/python/azure-ai-formrecognizer/3.3.0/https://docsupdatetracker.net/index.html) | [PyPI](https://pypi.org/project/azure-ai-formrecognizer/3.3.0/)| [&bullet; 2023-07-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> &bullet; [2022-08-31 (GA)](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument)</br> [&bullet; v2.1](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2-1/operations/AnalyzeBusinessCardAsync)</br>[&bullet; v2.0](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-v2/operations/AnalyzeLayoutAsync) |[Windows, macOS, Linux](/azure/developer/python/configure-local-development-environment?tabs=windows%2Capt%2Ccmd#use-the-azure-cli)
+
+## Supported Clients
+
+The following tables present the correlation between each SDK version the supported API versions of the Document Intelligence service.
+
+### [C#/.NET](#tab/csharp)
+
+| Language| SDK version | API version (default) &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; | Supported clients|
+| : | :--|:- | :--|
+|**.NET/C#**| 4.1.0 (GA)| v3.1 → 2023-07-31 (default)|**DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|**.NET/C#**| 4.0.0 (GA)| v3.0 → 2022-08-31| **DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|**.NET/C#**| 3.1.x | v2.1 | **FormRecognizerClient**</br>**FormTrainingClient** |
+|**.NET/C#**| 3.0.x| v2.0 | **FormRecognizerClient**</br>**FormTrainingClient** |
+
+### [Java](#tab/java)
+
+| Language| SDK version | API version &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; | Supported clients|
+| : | :--|:- | :--|
+|**Java**| 4.1.0 (GA)| v3.1 → 2023-07-31 (default)|**DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|**.NET/C#**</br> **Java**</br> **JavaScript**</br>| 4.0.0 (GA)| v3.0 → 2022-08-31| **DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|**.NET/C#**</br> **Java**</br> **JavaScript**</br>| 3.1.x | v2.1 | **FormRecognizerClient**</br>**FormTrainingClient** |
+|**.NET/C#**</br> **Java**</br> **JavaScript**</br>| 3.0.x| v2.0 | **FormRecognizerClient**</br>**FormTrainingClient** |
+
+### [JavaScript](#tab/javascript)
+
+| Language| SDK version | API version (default) &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; | Supported clients|
+| : | :--|:- | :--|
+|**JavaScript**| 5.0.0 (GA)| v3.1 → 2023-07-31 (default)|**DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|**.NET/C#**</br> **Java**</br> **JavaScript**</br>| 4.0.0 (GA)| v3.0 → 2022-08-31| **DocumentAnalysisClient**</br>**DocumentModelAdministrationClient** |
+|**.NET/C#**</br> **Java**</br> **JavaScript**</br>| 3.1.x | v2.1 | **FormRecognizerClient**</br>**FormTrainingClient** |
+|**.NET/C#**</br> **Java**</br> **JavaScript**</br>| 3.0.x| v2.0 | **FormRecognizerClient**</br>**FormTrainingClient** |
+
+### [Python](#tab/python)
+
+| Language| SDK version | API version (default) &emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;&emsp; | Supported clients|
+| : | :--|:- | :--|
+| **Python**| 3.3.0 (GA)| v3.1 → 2023-07-31 (default) | **DocumentAnalysisClient**</br>**DocumentModelAdministrationClient**|
+| **Python**| 3.2.x (GA) | v3.0 / 2022-08-31| **DocumentAnalysisClient**</br>**DocumentModelAdministrationClient**|
+| **Python**| 3.1.x | v2.1 | **FormRecognizerClient**</br>**FormTrainingClient** |
+| **Python** | 3.0.0 | v2.0 |**FormRecognizerClient**</br>**FormTrainingClient** |
+++
+## Use Document Intelligence SDK in your applications
+
+The Document Intelligence SDK enables the use and management of the Document Intelligence service in your application. The SDK builds on the underlying Document Intelligence REST API allowing you to easily use those APIs within your programming language paradigm. Here's how you use the Document Intelligence SDK for your preferred language:
+
+### 1. Install the SDK client library
+
+### [C#/.NET](#tab/csharp)
+
+```dotnetcli
+dotnet add package Azure.AI.FormRecognizer --version 4.1.0
+```
+
+```powershell
+Install-Package Azure.AI.FormRecognizer -Version 4.1.0
+```
+
+### [Java](#tab/java)
+
+```xml
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-ai-formrecognizer</artifactId>
+ <version>4.1.0</version>
+ </dependency>
+```
+
+```kotlin
+implementation("com.azure:azure-ai-formrecognizer:4.1.0")
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+npm i @azure/ai-form-recognizer@5.0.0
+```
+
+### [Python](#tab/python)
+
+```python
+pip install azure-ai-formrecognizer==3.3.0
+```
+++
+### 2. Import the SDK client library into your application
+
+### [C#/.NET](#tab/csharp)
+
+```csharp
+using Azure;
+using Azure.AI.FormRecognizer.DocumentAnalysis;
+```
+
+### [Java](#tab/java)
+
+```java
+import com.azure.ai.formrecognizer.*;
+import com.azure.ai.formrecognizer.models.*;
+import com.azure.ai.formrecognizer.DocumentAnalysisClient.*;
+
+import com.azure.core.credential.AzureKeyCredential;
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+const { AzureKeyCredential, DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
+```
+
+### [Python](#tab/python)
+
+```python
+from azure.ai.formrecognizer import DocumentAnalysisClient
+from azure.core.credentials import AzureKeyCredential
+```
+++
+### 3. Set up authentication
+
+There are two supported methods for authentication
+
+* Use a [Document Intelligence API key](#use-your-api-key) with AzureKeyCredential from azure.core.credentials.
+
+* Use a [token credential from azure-identity](#use-an-azure-active-directory-azure-ad-token-credential) to authenticate with [Azure Active Directory](../../active-directory/fundamentals/active-directory-whatis.md).
+
+#### Use your API key
+
+Here's where to find your Document Intelligence API key in the Azure portal:
++
+### [C#/.NET](#tab/csharp)
+
+```csharp
+
+//set `<your-endpoint>` and `<your-key>` variables with the values from the Azure portal to create your `AzureKeyCredential` and `DocumentAnalysisClient` instance
+string key = "<your-key>";
+string endpoint = "<your-endpoint>";
+AzureKeyCredential credential = new AzureKeyCredential(key);
+DocumentAnalysisClient client = new DocumentAnalysisClient(new Uri(endpoint), credential);
+```
+
+### [Java](#tab/java)
+
+```java
+
+// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
+DocumentAnalysisClient client = new DocumentAnalysisClientBuilder()
+ .credential(new AzureKeyCredential("<your-key>"))
+ .endpoint("<your-endpoint>")
+ .buildClient();
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+
+// create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
+async function main() {
+ const client = new DocumentAnalysisClient("<your-endpoint>", new AzureKeyCredential("<your-key>"));
+```
+
+### [Python](#tab/python)
+
+```python
+
+# create your `DocumentAnalysisClient` instance and `AzureKeyCredential` variable
+ document_analysis_client = DocumentAnalysisClient(endpoint="<your-endpoint>", credential=AzureKeyCredential("<your-key>"))
+```
+++
+#### Use an Azure Active Directory (Azure AD) token credential
+
+> [!NOTE]
+> Regional endpoints do not support AAD authentication. Create a [custom subdomain](../../ai-services/authentication.md?tabs=powershell#create-a-resource-with-a-custom-subdomain) for your resource in order to use this type of authentication.
+
+Authorization is easiest using the `DefaultAzureCredential`. It provides a default token credential, based upon the running environment, capable of handling most Azure authentication scenarios.
+
+### [C#/.NET](#tab/csharp)
+
+Here's how to acquire and use the [DefaultAzureCredential](/dotnet/api/azure.identity.defaultazurecredential?view=azure-dotnet&preserve-view=true) for .NET applications:
+
+1. Install the [Azure Identity library for .NET](/dotnet/api/overview/azure/identity-readme):
+
+ ```console
+ dotnet add package Azure.Identity
+ ```
+
+ ```powershell
+ Install-Package Azure.Identity
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret in the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance including the **`DefaultAzureCredential`**:
+
+ ```csharp
+ string endpoint = "<your-endpoint>";
+ var client = new DocumentAnalysisClient(new Uri(endpoint), new DefaultAzureCredential());
+ ```
+
+For more information, *see* [Authenticate the client](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.FormRecognizer_4.0.0-beta.4/sdk/formrecognizer/Azure.AI.FormRecognizer#authenticate-the-client)
+
+### [Java](#tab/java)
+
+Here's how to acquire and use the [DefaultAzureCredential](/java/api/com.azure.identity.defaultazurecredential?view=azure-java-stable&preserve-view=true) for Java applications:
+
+1. Install the [Azure Identity library for Java](/java/api/overview/azure/identity-readme?view=azure-java-stable&preserve-view=true):
+
+ ```xml
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-identity</artifactId>
+ <version>1.5.3</version>
+ </dependency>
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret of the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance and **`TokenCredential`** variable:
+
+ ```java
+ TokenCredential credential = new DefaultAzureCredentialBuilder().build();
+ DocumentAnalysisClient documentAnalysisClient = new DocumentAnalysisClientBuilder()
+ .endpoint("{your-endpoint}")
+ .credential(credential)
+ .buildClient();
+ ```
+
+For more information, *see* [Authenticate the client](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/formrecognizer/azure-ai-formrecognizer#authenticate-the-client)
+
+### [JavaScript](#tab/javascript)
+
+Here's how to acquire and use the [DefaultAzureCredential](/javascript/api/@azure/identity/defaultazurecredential?view=azure-node-latest&preserve-view=true) for JavaScript applications:
+
+1. Install the [Azure Identity library for JavaScript](/javascript/api/overview/azure/identity-readme?view=azure-node-latest&preserve-view=true):
+
+ ```javascript
+ npm install @azure/identity
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret of the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance including the **`DefaultAzureCredential`**:
+
+ ```javascript
+ const { DocumentAnalysisClient } = require("@azure/ai-form-recognizer");
+ const { DefaultAzureCredential } = require("@azure/identity");
+
+ const client = new DocumentAnalysisClient("<your-endpoint>", new DefaultAzureCredential());
+ ```
+
+For more information, *see* [Create and authenticate a client](https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/formrecognizer/ai-form-recognizer#create-and-authenticate-a-client).
+
+### [Python](#tab/python)
+
+Here's how to acquire and use the [DefaultAzureCredential](/python/api/azure-identity/azure.identity.defaultazurecredential?view=azure-python&preserve-view=true) for Python applications.
+
+1. Install the [Azure Identity library for Python](/python/api/overview/azure/identity-readme?view=azure-python&preserve-view=true):
+
+ ```python
+ pip install azure-identity
+ ```
+
+1. [Register an Azure AD application and create a new service principal](../../ai-services/authentication.md?tabs=powershell#assign-a-role-to-a-service-principal).
+
+1. Grant access to Document Intelligence by assigning the **`Cognitive Services User`** role to your service principal.
+
+1. Set the values of the client ID, tenant ID, and client secret of the Azure AD application as environment variables: **`AZURE_CLIENT_ID`**, **`AZURE_TENANT_ID`**, and **`AZURE_CLIENT_SECRET`**, respectively.
+
+1. Create your **`DocumentAnalysisClient`** instance including the **`DefaultAzureCredential`**:
+
+ ```python
+ from azure.identity import DefaultAzureCredential
+ from azure.ai.formrecognizer import DocumentAnalysisClient
+
+ credential = DefaultAzureCredential()
+ document_analysis_client = DocumentAnalysisClient(
+ endpoint="https://<my-custom-subdomain>.cognitiveservices.azure.com/",
+ credential=credential
+ )
+ ```
+
+For more information, *see* [Authenticate the client](https://github.com/Azure/azure-sdk-for-python/tree/azure-ai-formrecognizer_3.2.0b5/sdk/formrecognizer/azure-ai-formrecognizer#authenticate-the-client)
+++
+### 4. Build your application
+
+Create a client object to interact with the Document Intelligence SDK, and then call methods on that client object to interact with the service. The SDKs provide both synchronous and asynchronous methods. For more insight, try a [quickstart](quickstarts/get-started-sdks-rest-api.md?view=doc-intel-3.0.0&preserve-view=true) in a language of your choice.
+
+## Help options
+
+The [Microsoft Q&A](/answers/topics/azure-form-recognizer.html) and [Stack Overflow](https://stackoverflow.com/questions/tagged/azure-form-recognizer) forums are available for the developer community to ask and answer questions about Azure AI Document Intelligence and other services. Microsoft monitors the forums and replies to questions that the community has yet to answer. To make sure that we see your question, tag it with **`azure-form-recognizer`**.
+
+## Next steps
+
+> [!div class="nextstepaction"]
+>Explore [**Document Intelligence REST API 2023-07-31**](https://westus.dev.cognitive.microsoft.com/docs/services/form-recognizer-api-2023-07-31/operations/AnalyzeDocument) operations.
ai-services Dall E Quickstart https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/openai/dall-e-quickstart.md
Title: 'Quickstart - Generate an image using Azure OpenAI Service'
+ Title: 'Quickstart: Generate images with Azure OpenAI Service'
-description: Walkthrough on how to get started with Azure OpenAI and make your first image generation call.
+description: Learn how to get started generating images with Azure OpenAI Service by using the Python SDK, the REST APIs, or Azure OpenAI Studio.
Previously updated : 04/04/2023 Last updated : 08/08/2023 zone_pivot_groups: openai-quickstart-dall-e
-# Quickstart: Get started generating images using Azure OpenAI Service
+# Quickstart: Generate images with Azure OpenAI Service
::: zone pivot="programming-language-studio"
ai-services Integrate Synapseml https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/openai/how-to/integrate-synapseml.md
We recommend [creating a Synapse workspace](../../../synapse-analytics/get-start
The next step is to add this code into your Spark cluster. You can either create a notebook in your Spark platform and copy the code into this notebook to run the demo, or download the notebook and import it into Synapse Analytics.
-1. [Download this demo as a notebook](https://github.com/microsoft/SynapseML/blob/master/notebooks/features/cognitive_services/CognitiveServices%20-%20OpenAI.ipynb) (select Raw, then save the file)
1. Import the notebook [into the Synapse Workspace](../../../synapse-analytics/spark/apache-spark-development-using-notebooks.md#create-a-notebook) or, if using Databricks, [into the Databricks Workspace](/azure/databricks/notebooks/notebooks-manage#create-a-notebook) 1. Install SynapseML on your cluster. See the installation instructions for Synapse at the bottom of [the SynapseML website](https://microsoft.github.io/SynapseML/). This requires pasting another cell at the top of the notebook you imported 1. Connect your notebook to a cluster and follow along, editing and running the cells below.
ai-services Enable Vnet Service Endpoint https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/ai-services/translator/custom-translator/how-to/enable-vnet-service-endpoint.md
The following table describes Custom Translator project accessibility per Transl
:::image type="content" source="../media/how-to/allow-network-access.png" alt-text="Screenshot of allowed network access section in the Azure portal.":::
-> [!IMPORTANT]
- > If you configure **Selected Networks and Private Endpoints** via the **Networking** → **Firewalls and virtual networks** tab, you can't use the Custom Translator portal and your Translator resource. However, you can still use the Translator resource outside of the Custom Translator portal.
+ > [!IMPORTANT]
+ > If you configure **Selected Networks and Private Endpoints** via the **Networking** → **Firewalls and virtual networks** tab, you can't use the Custom Translator portal to create workspaces to train and publish models. However, you can still use the Translator resource with [Custom Translator non-interactive REST API](https://microsofttranslator.github.io/CustomTranslatorApiSamples/) to build and publish custom models.
| Translator resource network security setting | Custom Translator portal accessibility | |--|--| | All networks | &bullet; No restrictions |
-| Selected Networks and Private Endpoints | &bullet; Not accessible from allowed VNET IP addresses. </br>&#9679; Use [Custom Translator non-interactive REST API](https://microsofttranslator.github.io/CustomTranslatorApiSamples/) to build and publish custom models. |
-| Disabled | &#9679; Not accessible |
+| Selected Networks and Private Endpoints | &bullet; Not accessible. Use [Custom Translator non-interactive REST API](https://microsofttranslator.github.io/CustomTranslatorApiSamples/) to build and publish custom models. |
+| Disabled | &bullet; Not accessible |
To use Custom Translator without relaxing network access restrictions on your production Translator resource, consider this workaround:
To use Custom Translator without relaxing network access restrictions on your pr
## Billing region codes
-The following table lists the billing region code for each supported billing region:
+Use a billing region code, listed in the following table, with the 'Create a workspace' API for each supported billing region:
+
+##### Create a workspace POST request
+
+ ```bash
+ curl -X POST "https://<resource-name>.cognitiveservices.azure.com/translator/customtranslator/api/texttranslator/v1.0/workspaces" --header "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key:<resource-key>" --data "{'Name': '<workspace-name>', 'Subscription': {'SubscriptionKey': '<resource-key>', 'BillingRegionCode': '<billing-region-code>' }}"
+ ```
+
+##### Supported billing code regions and codes
|Billing Region Name|Billing Region Code| |:-|:-|
aks Aks Planned Maintenance Weekly Releases https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/aks-planned-maintenance-weekly-releases.md
- Title: Use Planned Maintenance for your Azure Kubernetes Service (AKS) cluster weekly releases (preview)-
-description: Learn how to use Planned Maintenance in Azure Kubernetes Service (AKS) for cluster weekly releases.
- Previously updated : 06/27/2023----
-# Use Planned Maintenance pre-created configurations to schedule Azure Kubernetes Service (AKS) weekly releases (preview)
-
-Planned Maintenance allows you to schedule weekly maintenance windows that ensure the weekly [releases] are controlled. You can select from the set of pre-created configurations and use the Azure CLI to configure your maintenance windows.
-
-You can also be schedule with more fine-grained control using Planned Maintenance's `default` configuration type. For more information, see [Planned Maintenance to schedule and control upgrades][planned-maintenance].
-
-## Before you begin
-
-This article assumes you have an existing AKS cluster. If you need an AKS cluster, you can create one using [Azure CLI][aks-quickstart-cli], [Azure PowerShell][aks-quickstart-powershell], or [Azure portal][aks-quickstart-portal].
--
-### Limitations
-
-When you use Planned Maintenance, the following restrictions apply:
--- AKS reserves the right to break these windows for unplanned/reactive maintenance operations that are urgent or critical.-- Currently, performing maintenance operations are considered *best-effort only* and aren't guaranteed to occur within a specified window.-- Updates can't be blocked for more than seven days.-
-## Available pre-created public maintenance configurations
-
-There are two general kinds of pre-created public maintenance configurations:
--- **For weekdays**: (Monday, Tuesday, Wednesday, Thursday), from 10 pm to 6 am the next morning.-- **For weekends**: (Friday, Saturday, Sunday), from 10 pm to 6 am the next morning.-
-The following pre-created public maintenance configurations are available on the weekday and weekend schedules. For weekend schedules, replace `weekday` with `weekend`.
-
-|Configuration name| Time zone|
-|--|--|
-|aks-mrp-cfg-weekday_utc12|UTC+12|
-|...|...|
-|aks-mrp-cfg-weekday_utc1|UTC+1|
-|aks-mrp-cfg-weekday_utc|UTC+0|
-|aks-mrp-cfg-weekday_utc-1|UTC-1|
-|...|...|
-|aks-mrp-cfg-weekday_utc-12|UTC-12|
-
-## Assign a public maintenance configuration to an AKS Cluster
-
-1. Find the public maintenance configuration ID using the [`az maintenance public-configuration show`][az-maintenance-public-configuration-show] command.
-
- ```azurecli-interactive
- az maintenance public-configuration show --resource-name "aks-mrp-cfg-weekday_utc8"
- ```
-
- > [!NOTE]
- > You may be prompted to install the `maintenance` extension.
-
- Your output should look like the following example output. Make sure you take note of the `id` field.
-
- ```json
- {
- "duration": "08:00",
- "expirationDateTime": null,
- "extensionProperties": {
- "maintenanceSubScope": "AKS"
- },
- "id": "/subscriptions/0159df5c-b605-45a9-9876-36e17d5286e0/providers/Microsoft.Maintenance/publicMaintenanceConfigurations/aks-mrp-cfg-weekday_utc8",
- "installPatches": null,
- "location": "westus2",
- "maintenanceScope": "Resource",
- "name": "aks-mrp-cfg-weekday_utc8",
- "namespace": "Microsoft.Maintenance",
- "recurEvery": "Week Monday,Tuesday,Wednesday,Thursday",
- "startDateTime": "2022-08-01 22:00",
- "systemData": null,
- "tags": {},
- "timeZone": "China Standard Time",
- "type": "Microsoft.Maintenance/publicMaintenanceConfigurations",
- "visibility": "Public"
- }
- ```
-
-2. Assign the public maintenance configuration to your AKS cluster using the [`az maintenance assignment create`][az-maintenance-assignment-create] command and specify the ID from the previous step for the `--maintenance-configuration-id` parameter.
-
- ```azurecli-interactive
- az maintenance assignment create --maintenance-configuration-id "/subscriptions/0159df5c-b605-45a9-9876-36e17d5286e0/providers/Microsoft.Maintenance/publicMaintenanceConfigurations/aks-mrp-cfg-weekday_utc8" --name assignmentName --provider-name "Microsoft.ContainerService" --resource-group myResourceGroup --resource-name myAKSCluster --resource-type "managedClusters"
- ```
-
-## List all maintenance windows in an existing cluster
--- List all maintenance windows in an existing cluster using the [`az maintenance assignment list`][az-maintenance-assignment-list] command.-
- ```azurecli-interactive
- az maintenance assignment list --provider-name "Microsoft.ContainerService" --resource-group myResourceGroup --resource-name myAKSCluster --resource-type "managedClusters"
- ```
-
-## Remove a public maintenance configuration from an AKS cluster
--- Remove a public maintenance configuration from a cluster using the [`az maintenance assignment delete`][az-maintenance-assignment-delete] command.-
- ```azurecli-interactive
- az maintenance assignment delete --name assignmentName --provider-name "Microsoft.ContainerService" --resource-group myResourceGroup --resource-name myAKSCluster --resource-type "managedClusters"
- ```
-
-<!-- LINKS - Internal -->
-[aks-quickstart-cli]: ./learn/quick-kubernetes-deploy-cli.md
-[aks-quickstart-portal]: ./learn/quick-kubernetes-deploy-portal.md
-[aks-quickstart-powershell]: ./learn/quick-kubernetes-deploy-powershell.md
-[releases]:release-tracker.md
-[planned-maintenance]: ./planned-maintenance.md
-[az-maintenance-public-configuration-show]: /cli/azure/maintenance/public-configuration#az-maintenance-public-configuration-show
-[az-maintenance-assignment-create]: /cli/azure/maintenance/assignment#az-maintenance-assignment-create
-[az-maintenance-assignment-list]: /cli/azure/maintenance/assignment#az-maintenance-assignment-list
-[az-maintenance-assignment-delete]: /cli/azure/maintenance/assignment#az-maintenance-assignment-delete
aks Azure Cni Overlay https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-cni-overlay.md
Previously updated : 08/07/2023 Last updated : 08/11/2023 # Configure Azure CNI Overlay networking in Azure Kubernetes Service (AKS)
You can configure ingress connectivity to the cluster using an ingress controlle
Like Azure CNI Overlay, Kubenet assigns IP addresses to pods from an address space logically different from the VNet, but it has scaling and other limitations. The below table provides a detailed comparison between Kubenet and Azure CNI Overlay. If you don't want to assign VNet IP addresses to pods due to IP shortage, we recommend using Azure CNI Overlay.
-| Area | Azure CNI Overlay | Kubenet |
-|||-|
-| Cluster scale | 1000 nodes and 250 pods/node | 400 nodes and 250 pods/node |
+| Area | Azure CNI Overlay | Kubenet |
+||--|-|
+| Cluster scale | 1000 nodes and 250 pods/node | 400 nodes and 250 pods/node |
| Network configuration | Simple - no extra configurations required for pod networking | Complex - requires route tables and UDRs on cluster subnet for pod networking |
-| Pod connectivity performance | Performance on par with VMs in a VNet | Extra hop adds minor latency |
-| Kubernetes Network Policies | Azure Network Policies, Calico, Cilium | Calico |
-| OS platforms supported | Linux and Windows Server 2022(Preview) | Linux only |
+| Pod connectivity performance | Performance on par with VMs in a VNet | Extra hop adds minor latency |
+| Kubernetes Network Policies | Azure Network Policies, Calico, Cilium | Calico |
+| OS platforms supported | Linux and Windows Server 2022, 2019 | Linux only |
## IP address planning - **Cluster Nodes**: When setting up your AKS cluster, make sure your VNet subnet has enough room to grow for future scaling. Keep in mind that clusters can't scale across subnets, but you can always add new node pools in another subnet within the same VNet for extra space. A `/24`subnet can fit up to 251 nodes since the first three IP addresses are reserved for management tasks. - **Pods**: The Overlay solution assigns a `/24` address space for pods on every node from the private CIDR that you specify during cluster creation. The `/24` size is fixed and can't be increased or decreased. You can run up to 250 pods on a node. When planning the pod address space, ensure the private CIDR is large enough to provide `/24` address spaces for new nodes to support future cluster expansion. - When planning IP address space for pods, consider the following factors:
- - Pod CIDR space must not overlap with the cluster subnet range.
- - Pod CIDR space must not overlap with IP ranges used in on-premises networks and peered networks.
- The same pod CIDR space can be used on multiple independent AKS clusters in the same VNet.
+ - Pod CIDR space must not overlap with the cluster subnet range.
+ - Pod CIDR space must not overlap with directly connected networks (like VNet peering, ExpressRoute, or VPN). If external traffic has source IPs in the podCIDR range, it needs translation to a non-overlapping IP via SNAT to communicate with the cluster.
- **Kubernetes service address range**: The size of the service address CIDR depends on the number of cluster services you plan to create. It must be smaller than `/12`. This range shouldn't overlap with the pod CIDR range, cluster subnet range, and IP range used in peered VNets and on-premises networks. - **Kubernetes DNS service IP address**: This IP address is within the Kubernetes service address range that's used by cluster service discovery. Don't use the first IP address in your address range, as this address is used for the `kubernetes.default.svc.cluster.local` address.
aks Azure Cni Powered By Cilium https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-cni-powered-by-cilium.md
Azure CNI powered by Cilium currently has the following limitations:
* Hubble is disabled.
-* Not compatible with Istio or other sidecar-based service meshes ([Istio issue #27619](https://github.com/istio/istio/issues/27619)).
+* Network policies cannot use `ipBlock` to allow access to node or pod IPs ([Cilium issue #9209](https://github.com/cilium/cilium/issues/9209) and [#12277](https://github.com/cilium/cilium/issues/12277)).
* Kubernetes services with `internalTrafficPolicy=Local` aren't supported ([Cilium issue #17796](https://github.com/cilium/cilium/issues/17796)).
aks Azure Netapp Files https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/azure-netapp-files.md
This section describes how to set up Azure NetApp Files for AKS workloads. It's
--resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \
- --delegations "Microsoft.NetApp/volumes" \
+ --delegations "Microsoft.Netapp/volumes" \
--address-prefixes $ADDRESS_PREFIX ```
aks Cluster Configuration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/cluster-configuration.md
A container runtime is software that executes containers and manages container i
With a `containerd`-based node and node pools, instead of talking to the `dockershim`, the kubelet talks directly to `containerd` using the CRI (container runtime interface) plugin, removing extra hops in the data flow when compared to the Docker CRI implementation. As such, you see better pod startup latency and less resource (CPU and memory) usage.
-By using `containerd` for AKS nodes, pod startup latency improves and node resource consumption by the container runtime decreases. These improvements through this new architecture enable kubelet communicating directly to `containerd` through the CRI plugin. While in a Moby/docker architecture, kubelet communicates to the `dockershim` and docker engine before reaching `containerd`, therefore having extra hops in the data flow.
+By using `containerd` for AKS nodes, pod startup latency improves and node resource consumption by the container runtime decreases. These improvements through this new architecture enable kubelet communicating directly to `containerd` through the CRI plugin. While in a Moby/docker architecture, kubelet communicates to the `dockershim` and docker engine before reaching `containerd`, therefore having extra hops in the data flow. For more details on the origin of the `dockershim` and its deprecation, see the [Dockershim removal FAQ][kubernetes-dockershim-faq].
![Docker CRI 2](media/cluster-configuration/containerd-cri.png)
az provider register --namespace Microsoft.ContainerService
To create a cluster using node resource group lockdown, set the `--nrg-lockdown-restriction-level` to **ReadOnly**. This configuration allows you to view the resources, but not modify them. ```azurecli-interactive
-az aks create -n aksTest -g aksTest ΓÇô-nrg-lockdown-restriction-level ReadOnly
+az aks create -n aksTest -g aksTest --nrg-lockdown-restriction-level ReadOnly
``` ### Update an existing cluster with node resource group lockdown ```azurecli-interactive
-az aks update -n aksTest -g aksTest ΓÇô-nrg-lockdown-restriction-level ReadOnly
+az aks update -n aksTest -g aksTest --nrg-lockdown-restriction-level ReadOnly
``` ### Remove node resource group lockdown from a cluster ```azurecli-interactive
-az aks update -n aksTest -g aksTest ΓÇô-nrg-lockdown-restriction-level Unrestricted
+az aks update -n aksTest -g aksTest --nrg-lockdown-restriction-level Unrestricted
```
az aks update -n aksTest -g aksTest ΓÇô-nrg-lockdown-restriction-level Unrestric
[azurerm-azurelinux]: https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/kubernetes_cluster_node_pool#os_sku [general-usage]: https://kubernetes.io/docs/tasks/debug/debug-cluster/crictl/#general-usage [client-config-options]: https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md#client-configuration-options
+[kubernetes-dockershim-faq]: https://kubernetes.io/blog/2022/02/17/dockershim-faq/#why-was-the-dockershim-removed-from-kubernetes
<!-- LINKS - internal --> [azure-cli-install]: /cli/azure/install-azure-cli
az aks update -n aksTest -g aksTest ΓÇô-nrg-lockdown-restriction-level Unrestric
[az-feature-register]: /cli/azure/feature#az_feature_register [az-feature-list]: /cli/azure/feature#az_feature_list [az-provider-register]: /cli/azure/provider#az_provider_register
-[aks-add-np-containerd]: /create-node-pools.md#add-a-windows-server-node-pool-with-containerd
+[aks-add-np-containerd]: create-node-pools.md#add-a-windows-server-node-pool-with-containerd
[az-aks-create]: /cli/azure/aks#az-aks-create [az-aks-update]: /cli/azure/aks#az-aks-update [baseline-reference-architecture-aks]: /azure/architecture/reference-architectures/containers/aks/baseline-aks
aks Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/faq.md
The AKS Linux Extension is an Azure VM extension that installs and configures mo
- [Node-exporter](https://github.com/prometheus/node_exporter): Collects hardware telemetry from the virtual machine and makes it available using a metrics endpoint. Then, a monitoring tool, such as Prometheus, is able to scrap these metrics. - [Node-problem-detector](https://github.com/kubernetes/node-problem-detector): Aims to make various node problems visible to upstream layers in the cluster management stack. It's a systemd unit that runs on each node, detects node problems, and reports them to the clusterΓÇÖs API server using Events and NodeConditions.-- [Local-gadget](https://inspektor-gadget.io/docs/v0.16.0): Uses in-kernel eBPF helper programs to monitor events related to syscalls from userspace programs in a pod.
+- [Local-gadget](https://inspektor-gadget.io/docs/v0.18.1): Uses in-kernel eBPF helper programs to monitor events related to syscalls from userspace programs in a pod.
These tools help provide observability around many node health related problems, such as:
aks Node Image Upgrade https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/node-image-upgrade.md
This article shows you how to upgrade AKS cluster node images and how to update
> [!NOTE] > The AKS cluster must use virtual machine scale sets for the nodes.
+>
+> It's not possible to downgrade a node image version (for example *AKSUbuntu-2204 to AKSUbuntu-1804*, or *AKSUbuntu-2204-202308.01.0 to AKSUbuntu-2204-202307.27.0*).
## Check for available node image upgrades
aks Planned Maintenance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/planned-maintenance.md
Your AKS cluster has regular maintenance performed on it automatically. By defau
There are currently three available configuration types: `default`, `aksManagedAutoUpgradeSchedule`, `aksManagedNodeOSUpgradeSchedule`: -- `default` corresponds to a basic configuration that will update your control plane and your kube-system pods on a Virtual Machine Scale Sets instance. It's a legacy configuration that is mostly suitable for basic scheduling of [weekly releases][release-tracker].
+- `default` corresponds to a basic configuration that is mostly suitable for basic scheduling of [weekly releases][release-tracker].
- `aksManagedAutoUpgradeSchedule` controls when cluster upgrades scheduled by your designated auto-upgrade channel are performed. More finely controlled cadence and recurrence settings are possible than in a `default` configuration. For more information on cluster auto-upgrade, see [Automatically upgrade an Azure Kubernetes Service (AKS) cluster][aks-upgrade].
aks Use Cvm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/use-cvm.md
Title: Use Confidential Virtual Machines (CVM) in Azure Kubernetes Service (AKS)
description: Learn how to create Confidential Virtual Machines (CVM) node pools with Azure Kubernetes Service (AKS) Previously updated : 05/08/2023 Last updated : 08/14/2023 # Use Confidential Virtual Machines (CVM) in Azure Kubernetes Service (AKS) cluster
Adding a node pool with CVM to your AKS cluster is currently in preview.
Before you begin, make sure you have the following: -- An Azure subscription. If you don't have an Azure subscription, you can create a [free account](https://azure.microsoft.com/free).-- [Azure CLI installed](/cli/azure/install-azure-cli).-- An existing AKS cluster in the *westus*, *eastus*, *westeurope*, or *northeurope* region.
+- An existing AKS cluster.
- The [DCasv5 and DCadsv5-series][cvm-subs-dc] or [ECasv5 and ECadsv5-series][cvm-subs-ec] SKUs available for your subscription. ## Limitations
aks Use Group Managed Service Accounts https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/use-group-managed-service-accounts.md
az keyvault secret set --vault-name MyAKSGMSAVault --name "GMSADomainUserCred" -
Your domain controller needs to be configured through DNS so it's reachable by the AKS cluster. You can configure your network and DNS outside of your AKS cluster to allow your cluster to access the domain controller. Alternatively, you can configure a custom VNET with a custom DNS using Azure CNI with your AKS cluster to provide access to your domain controller. For more information, see [Configure Azure CNI networking in Azure Kubernetes Service (AKS)][aks-cni].
+## Optional: Configure more than one DNS server
+
+If you want to configure more than one DNS server for Windows GMSA in your AKS cluster, don't specify `--gmsa-dns-server`or `v--gmsa-root-domain-name`. Instead, you can add multiple DNS servers in the vnet by selecting Custom DNS and adding the DNS servers
+ ## Optional: Use your own kubelet identity for your cluster To provide the AKS cluster access to your key vault, the cluster kubelet identity needs access to your key vault. By default, when you create a cluster with managed identity enabled, a kubelet identity is automatically created. You can grant access to your key vault for this identity after cluster creation, which is done in a later step.
aks Windows Aks Partner Solutions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/windows-aks-partner-solutions.md
Our 3rd party partners featured below have published introduction guides to star
| DevOps | [GitLab](#gitlab) <br> [CircleCI](#circleci) | | Networking | [NGINX](#f5-nginx) <br> [Calico](#calico) | | Observability | [Datadog](#datadog) <br> [New Relic](#new-relic) |
-| Security | [Prisma](#prisma) |
+| Security | [Prisma Cloud](#prisma-cloud) |
| Storage | [NetApp](#netapp) | | Config Management | [Chef](#chef) | ## DevOps -
+
DevOps streamlines the delivery process, improves collaboration across teams, and enhances software quality, ensuring swift, reliable, and continuous deployment of your Windows-based applications. ### GitLab
+![Logo of GitLab.](./media/windows-aks-partner-solutions/gitlab.png)
+ The GitLab DevSecOps Platform supports the Microsoft development ecosystem with performance, accessibility testing, SAST, DAST and Fuzzing security scanning, dependency scanning, SBOM, license management and more. As an extensible platform, GitLab also allows you to plug in your own tooling for any stage. GitLab's integration with Azure Kubernetes Services (AKS) enables full DevSecOps workflows for Windows and Linux Container workloads using either Push CD or GitOps Pull CD with flux manifests. Using Cloud Native Buildpaks, GitLab Auto DevOps can build, test and autodeploy OSS .NET projects.
To learn more, please our see our [joint blog](https://techcommunity.microsoft.c
### CircleCI
+![Logo of Circle CI.](./media/windows-aks-partner-solutions/circleci.png)
+ CircleCIΓÇÖs integration with Azure Kubernetes Services (AKS) allows you to automate, build, validate, and ship containerized Windows applications, ensuring faster and more reliable software deployment. You can easily integrate your pipeline with AKS using CircleCI orbs, which are prepacked snippets of YAML configuration. Follow this [tutorial](https://techcommunity.microsoft.com/t5/containers/continuous-deployment-of-windows-containers-with-circleci-and/ba-p/3841220) to learn how to set up a CI/CD pipeline to build a Dockerized ASP.NET application and deploy it to an AKS cluster.
Ensure efficient traffic management, enhanced security, and optimal network perf
### F5 NGINX
+![Logo of F5 NGINX.](./media/windows-aks-partner-solutions/f5.png)
+ NGINX Ingress Controller deployed in AKS, on-premises, and in the cloud implements unified Kubernetes-native API gateways, load balancers, and Ingress controllers to reduce complexity, increase uptime, and provide in-depth insights into app health and performance for containerized Windows workloads. Running at the edge of a Kubernetes cluster, NGINX Ingress Controller ensures holistic app security with user and service identities, authorization, access control, encrypted communications, and additional NGINX App Protect modules for Layer 7 WAF and DoS app protection.
Learn how to manage connectivity to your Windows applications running on Windows
### Calico
+![Logo of Tigera Calico.](./media/windows-aks-partner-solutions/tigera.png)
+ Tigera provides an active security platform with full-stack observability for containerized workloads and Microsoft AKS as a fully managed SaaS (Calico Cloud) or a self-managed service (Calico Enterprise). The platform prevents, detects, troubleshoots, and automatically mitigates exposure risks of security breaches for workloads in Microsoft AKS. Its open-source offering, Calico Open Source, is the most widely adopted container networking and security solution. It specifies security and observability as code to ensure consistent enforcement of security policies, which enables DevOps, platform, and security teams to protect workloads, detect threats, achieve continuous compliance, and troubleshoot service issues in real-time.
Observability provides deep insights into your systems, enabling rapid issue det
### Datadog
+![Logo of Datadog.](./media/windows-aks-partner-solutions/datadog.png)
+ Datadog is the essential monitoring and security platform for cloud applications. We bring together end-to-end traces, metrics, and logs to make your applications, infrastructure, and third-party services entirely observable. Partner with Datadog for Windows on AKS environments to streamline monitoring, proactively resolve issues, and optimize application performance and availability. Get started by following the recommendations in our [joint blog](https://techcommunity.microsoft.com/t5/containers/gain-full-observability-into-windows-containers-on-azure/ba-p/3853603). ### New Relic
+![Logo of New Relic.](./media/windows-aks-partner-solutions/newrelic.png)
+ New Relic's Azure Kubernetes integration is a powerful solution that seamlessly connects New Relic's monitoring and observability capabilities with Azure Kubernetes Service (AKS). By deploying the New Relic Kubernetes integration, users gain deep insights into their AKS clusters' performance, health, and resource utilization. This integration allows users to efficiently manage and troubleshoot containerized applications, optimize resource allocation, and proactively identify and resolve issues in their AKS environments. With New Relic's comprehensive monitoring and analysis tools, businesses can ensure the smooth operation and optimal performance of their Kubernetes workloads on Azure. Check this [blog](https://techcommunity.microsoft.com/t5/containers/persistent-storage-for-windows-containers-on-azure-kubernetes/ba-p/3836781) for detailed information.
Check this [blog](https://techcommunity.microsoft.com/t5/containers/persistent-s
Ensure the integrity and confidentiality of applications, thereby fostering trust and compliance across your infrastructure.
-### Prisma
+### Prisma Cloud
+
+![Logo of Palo Alto Network's Prisma Cloud.](./media/windows-aks-partner-solutions/prismacloud.png)
Prisma Cloud is a comprehensive Cloud-Native Application Protection Platform (CNAPP) tailor-made to help secure Windows containers on Azure Kubernetes Service (AKS). Gain continuous, real-time visibility and control over Windows container environments including vulnerability and compliance management, identities and permissions, and AI-assisted runtime defense. Integrated container scanning across the pipeline and in Azure Container Registry ensure security throughout the entire application lifecycle.
Storage enables standardized and seamless storage interactions, ensuring high ap
### NetApp
+![Logo of NetApp.](./media/windows-aks-partner-solutions/netapp.png)
+ Astra Control provides application data management for stateful workloads on Azure Kubernetes Service (AKS). Discover your apps and define protection policies that automatically back up workloads offsite. Protect, clone, and move applications across Kubernetes environments with ease. Follow the steps provided in [this blog](https://techcommunity.microsoft.com/t5/containers/persistent-storage-for-windows-containers-on-azure-kubernetes/ba-p/3836781) post to dynamically provision SMB volumes for Windows AKS workloads.
Automate and standardize the system settings across your environments to enhance
### Chef
+![Logo of Chef.](./media/windows-aks-partner-solutions/progress.png)
+ Chef provides visibility and threat detection from build to runtime that monitors, audits, and remediates the security of your Azure cloud services and Kubernetes and Windows container assets. Chef provides comprehensive visibility and continuous compliance into your cloud security posture and helps limit the risk of misconfigurations in cloud-native environments by providing best practices based on CIS, STIG, SOC2, PCI-DSS and other benchmarks. This is part of a broader compliance offering that supports on-premises or hybrid cloud environments including applications deployed on the edge. To learn more about ChefΓÇÖs capabilities, check out the comprehensive ΓÇÿhow-toΓÇÖ blog post here: [Securing Your Windows Environments Running on Azure Kubernetes Service with Chef](https://techcommunity.microsoft.com/t5/containers/securing-your-windows-environments-running-on-azure-kubernetes/ba-p/3821830).
aks Windows Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/windows-faq.md
At this time, [client source IP preservation][client-source-ip] is not supported
Yes. For the implications of making a change and the options that are available, see [Maximum number of pods][maximum-number-of-pods].
+## What is the default TCP timeout in Windows OS?
+
+The default TCP timeout in Windows OS is 4 minutes. This value isn't configurable. When an application uses a longer timeout, the TCP connections between different containers in the same node close after four minutes.
+ ## Why am I seeing an error when I try to create a new Windows agent pool? If you created your cluster before February 2020 and have never done any cluster upgrade operations, the cluster still uses an old Windows image. You may have seen an error that resembles:
To fix this error:
1. Move Windows pods from existing Windows agent pools to new Windows agent pools. 1. Delete old Windows agent pools.
+## Why am I seeing an error when I try to deploy Windows pods?
+
+If you specify a value in `--max-pods` less than the number of pods you want to create, you may see the `No available addresses` error.
+
+To fix this error, use the `az aks nodepool add` command with a high enough `--max-pods` value:
+
+```azurecli
+az aks nodepool add \
+ --cluster-name $CLUSTER_NAME \
+ --resource-group $RESOURCE_GROUP \
+ --name $NODEPOOL_NAME \
+ --max-pods 3
+```
+For more details, see the [`--max-pods` documentation](https://learn.microsoft.com/cli/azure/aks/nodepool?view=azure-cli-latest#az-aks-nodepool-add:~:text=for%20system%20nodepool.-,%2D%2Dmax%2Dpods%20%2Dm,-The%20maximum%20number).
+ ## Why is there an unexpected user named "sshd" on my VM node? AKS adds a user named "sshd" when installing the OpenSSH service. This user is not malicious. We recommend that customers update their alerts to ignore this unexpected user account.
Yes, you can. However, Azure Monitor is in public preview for gathering logs (st
## Are there any limitations on the number of services on a cluster with Windows nodes?
-A cluster with Windows nodes can have approximately 500 services before it encounters port exhaustion.
+A cluster with Windows nodes can have approximately 500 services (sometimes less) before it encounters port exhaustion. This limitation applies to a Kubernetes Service with External Traffic Policy set to ΓÇ£ClusterΓÇ¥.
+
+When external traffic policy on a Service is configured as Cluster, the traffic undergoes an additional Source NAT on the node which also results in reservation of a port from the TCPIP dynamic port pool. This port pool is a limited resource (~16K ports by default) and many active connections to a Service(s) can lead to dynamic port pool exhaustion resulting in connection drops.
+
+If the Kubernetes Service is configured with External Traffic Policy set to ΓÇ£LocalΓÇ¥, port exhaustion problems aren't likely to occur at 500 services.
## Can I use Azure Hybrid Benefit with Windows nodes?
aks Workload Identity Migrate From Pod Identity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/workload-identity-migrate-from-pod-identity.md
For either scenario, you need to have the federated trust set up before you upda
### Migrate from latest version
-If your cluster is already using the latest version of the Azure Identity SDK, perform the following steps to complete the authentication configuration:
+If your application is already using the latest version of the Azure Identity SDK, perform the following steps to complete the authentication configuration:
- Deploy workload identity in parallel with pod-managed identity. You can restart your application deployment to begin using the workload identity, where it injects the OIDC annotations into the application automatically. - After verifying the application is able to authenticate successfully, you can [remove the pod-managed identity](#remove-pod-managed-identity) annotations from your application and then remove the pod-managed identity add-on. ### Migrate from older version
-If your cluster isn't using the latest version of the Azure Identity SDK, you have two options:
+If your application isn't using the latest version of the Azure Identity SDK, you have two options:
- You can use a migration sidecar that we provide within your Linux applications, which proxies the IMDS transactions your application makes over to [OpenID Connect][openid-connect-overview] (OIDC). The migration sidecar isn't intended to be a long-term solution, but a way to get up and running quickly on workload identity. Perform the following steps to:
analysis-services Analysis Services Manage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/analysis-services/analysis-services-manage.md
To get all the latest features, and the smoothest experience when connecting to
## External open source tools
-**Tabular Editor** - An open-source tool for creating, maintaining, and managing tabular models using an intuitive, lightweight editor. A hierarchical view shows all objects in your tabular model. Objects are organized by display folders with support for multi-select property editing and DAX syntax highlighting. XMLA read-only is required for query operations. Read-write is required for metadata operations. To learn more, see [tabulareditor.github.io](https://tabulareditor.github.io/).
- **ALM Toolkit** - An open-source schema compare tool for Analysis Services tabular models and Power BI datasets, most often used for application lifecycle management (ALM) scenarios. Perform deployment across environments and retain incremental refresh historical data. Diff and merge metadata files, branches and repos. Reuse common definitions between datasets. Read-only is required for query operations. Read-write is required for metadata operations. To learn more, see [alm-toolkit.com](http://alm-toolkit.com/). **DAX Studio** – An open-source tool for DAX authoring, diagnosis, performance tuning, and analysis. Features include object browsing, integrated tracing, query execution breakdowns with detailed statistics, DAX syntax highlighting and formatting. XMLA read-only is required for query operations. To learn more, see [daxstudio.org](https://daxstudio.org/).
When connecting using SSMS, if you run into problems, you may need to clear the
## Next steps If you haven't already deployed a tabular model to your new server, now is a good time. To learn more, see [Deploy to Azure Analysis Services](analysis-services-deploy.md).
-If you've deployed a model to your server, you're ready to connect to it using a client application or tool. To learn more, see [Get data from Azure Analysis Services server](analysis-services-connect.md).
+If you've deployed a model to your server, you're ready to connect to it using a client application or tool. To learn more, see [Get data from Azure Analysis Services server](analysis-services-connect.md).
analysis-services Analysis Services Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/analysis-services/analysis-services-overview.md
Azure Analysis Services Firewall blocks all client connections other than those
### Authentication
-User authentication is handled by [Azure Active Directory (AAD)](../active-directory/fundamentals/active-directory-whatis.md). When logging in, users use an organization account identity with role-based access to the database. User identities must be members of the default Azure Active Directory for the subscription that the server is in. To learn more, see [Authentication and user permissions](analysis-services-manage-users.md).
+User authentication is handled by [Azure Active Directory (Azure AD)](../active-directory/fundamentals/active-directory-whatis.md). When logging in, users use an organization account identity with role-based access to the database. User identities must be members of the default Azure Active Directory for the subscription that the server is in. To learn more, see [Authentication and user permissions](analysis-services-manage-users.md).
### Data security
Manage your servers and model databases by using [SQL Server Management Studio (
### Open-source tools
-Analysis Services has a vibrant community of developers who create tools. Be sure to check out [Tabular Editor](https://tabulareditor.github.io/), an open-source tool for creating, maintaining, and managing tabular models using an intuitive, lightweight editor. [DAX Studio](https://daxstudio.org/), is a great open-source tool for DAX authoring, diagnosis, performance tuning, and analysis.
+Analysis Services has a vibrant community of developers who create tools. [DAX Studio](https://daxstudio.org/), is a great open-source tool for DAX authoring, diagnosis, performance tuning, and analysis.
### PowerShell
api-management Api Management Policies https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/api-management/api-management-policies.md
Last updated 12/01/2022 + # API Management policy reference This section provides links to reference articles for all API Management policies.
More information about policies:
- [Find and replace string in body](find-and-replace-policy.md) - Finds a request or response substring and replaces it with a different substring. - [Mask URLs in content](redirect-content-urls-policy.md) - Rewrites (masks) links in the response body so that they point to the equivalent link via the gateway. - [Set backend service](set-backend-service-policy.md) - Changes the backend service for an incoming request.-- [Set body](set-body-policy.md) - Sets the message body for incoming and outgoing requests.
+- [Set body](set-body-policy.md) - Sets the message body for a request or response.
- [Set HTTP header](set-header-policy.md) - Assigns a value to an existing response and/or request header or adds a new response and/or request header. - [Set query string parameter](set-query-parameter-policy.md) - Adds, replaces value of, or deletes request query string parameter. - [Rewrite URL](rewrite-uri-policy.md) - Converts a request URL from its public form to the form expected by the web service.
For more information about working with policies, see:
+ [Tutorial: Transform and protect your API](transform-api.md) + [Set or edit policies](set-edit-policies.md) + [Policy snippets repo](https://github.com/Azure/api-management-policy-snippets) ++
api-management Api Management Versions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/api-management/api-management-versions.md
Last updated 10/31/2021 + # Versions in Azure API Management Versions allow you to present groups of related APIs to your developers. You can use versions to handle breaking changes in your API safely. Clients can choose to use your new API version when they're ready, while existing clients continue to use an older version. Versions are differentiated through a version identifier (which is any string value you choose), and a versioning scheme allows clients to identify which version of an API they want to use.
The format of an API request URL when using query string-based versioning is: `h
For example, `https://apis.contoso.com/products?api-version=v1` and `https://apis.contoso.com/products?api-version=v2` could refer to the same `products` API but to versions `v1` and `v2` respectively.
+> [!NOTE]
+> Query parameters aren't allowed in the `servers` propery of an OpenAPI specification. If you export an OpenAPI specification from an API version, a query string won't appear in the server URL.
+ ## Original versions If you add a version to a non-versioned API, an `Original` version will be automatically created and will respond on the default URL, without a version identifier specified. The `Original` version ensures that any existing callers are not broken by the process of adding a version. If you create a new API with versions enabled at the start, an `Original` version isn't created.
A version set is automatically deleted when the final version is deleted.
You can view and manage version sets directly by using [Azure CLI](/cli/azure/apim/api/versionset), [Azure PowerShell](/powershell/module/az.apimanagement/#api-management), [Resource Manager templates](/azure/templates/microsoft.apimanagement/service/apiversionsets), or the [Azure Resource Manager API](/rest/api/apimanagement/current-ga/api-version-set).
+> [!NOTE]
+> All versions in a version set have the same versioning scheme, based on the versioning scheme used when you first add a version to an API.
### Migrating a non-versioned API to a versioned API When you use the Azure portal to enable versioning on an existing API, the following changes are made to your API Management resources:
The details of an API also show a list of all of the versions of that API. An `O
> [!TIP] > API versions need to be added to a product before they will be visible on the developer portal.++
api-management Set Body Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/api-management/set-body-policy.md
# Set body
-Use the `set-body` policy to set the message body for incoming and outgoing requests. To access the message body you can use the `context.Request.Body` property or the `context.Response.Body`, depending on whether the policy is in the inbound or outbound section.
+Use the `set-body` policy to set the message body for a request or response. To access the message body you can use the `context.Request.Body` property or the `context.Response.Body`, depending on whether the policy is in the inbound or outbound section.
> [!IMPORTANT] > By default when you access the message body using `context.Request.Body` or `context.Response.Body`, the original message body is lost and must be set by returning the body back in the expression. To preserve the body content, set the `preserveContent` parameter to `true` when accessing the message. If `preserveContent` is set to `true` and a different body is returned by the expression, the returned body is used.
OriginalUrl.
</pre> + ## Usage - [**Policy sections:**](./api-management-howto-policies.md#sections) inbound, outbound, backend
The following Liquid filters are supported in the `set-body` policy. For filter
> [!NOTE] > The policy requires Pascal casing for Liquid filter names (for example, "AtLeast" instead of "at_least"). > + * Abs * Append * AtLeast
The following Liquid filters are supported in the `set-body` policy. For filter
* UrlDecode * UrlEncode - ## Examples ### Literal text
The following example uses the `AsFormUrlEncodedContent()` expression to access
* [API Management transformation policies](api-management-transformation-policies.md) [!INCLUDE [api-management-policy-ref-next-steps](../../includes/api-management-policy-ref-next-steps.md)]+
app-service Identity Scenarios https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/identity-scenarios.md
Previously updated : 07/25/2023 Last updated : 08/10/2023 # Authentication scenarios and recommendations
The following table lists authentication scenarios and the authentication soluti
| Even if you can use a code solution, would you rather *not* use libraries? Don't want the maintenance burden? | ✅ | ❌ | ❌ | | Does your web app need to provide incremental consent? | ❌ | ✅ | ✅ | | Do you need conditional access in your web app? | ❌ | ❌ | ✅ |
-| Your app need to handle the access token expiring without making the user sign in again (use a refresh token)? | ❌ | ✅ | ✅ |
+| Your app need to handle the access token expiring without making the user sign in again (use a refresh token)? | ✅ | ✅ | ✅ |
| Need custom authorization logic or info about the signed-in user? | ❌ | ✅ | ✅ | | Need to sign in users from external or social identity providers? | ✅ | ✅ | ✅ | | You have an ASP.NET Core app? | ✅ | ❌ | ✅ |
app-service Monitor Instances Health Check https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/monitor-instances-health-check.md
This article uses Health check in the Azure portal to monitor App Service instan
![Health check failure][1]
-Please note that _/api/health_ is just an example added for illustration purposes. We do not create a Health Check path by default. You should make sure that the path you are selecting is a valid path that exists within your application
+Note that _/api/health_ is just an example added for illustration purposes. We do not create a Health Check path by default. You should make sure that the path you are selecting is a valid path that exists within your application
## What App Service does with Health checks - When given a path on your app, Health check pings this path on all instances of your App Service app at 1-minute intervals. - If an instance doesn't respond with a status code between 200-299 (inclusive) after 10 requests, App Service determines it's unhealthy and removes it from the load balancer for this Web App. The required number of failed requests for an instance to be deemed unhealthy is configurable to a minimum of two requests.-- After removal, Health check continues to ping the unhealthy instance. If the instance begins to respond with a healthy status code (200-299) then the instance is returned to the load balancer.-- If an instance remains unhealthy for one hour, it will be replaced with a new instance.
+- After removal, Health check continues to ping the unhealthy instance. If the instance begins to respond with a healthy status code (200-299), then the instance is returned to the load balancer.
+- If an instance remains unhealthy for one hour, it's replaced with a new instance.
- When scaling out, App Service pings the Health check path to ensure new instances are ready. > [!NOTE]
Please note that _/api/health_ is just an example added for illustration purpose
> - Your [App Service plan](./overview-hosting-plans.md) should be scaled to two or more instances to fully utilize Health check. > - The Health check path should check critical components of your application. For example, if your application depends on a database and a messaging system, the Health check endpoint should connect to those components. If the application can't connect to a critical component, then the path should return a 500-level response code to indicate the app is unhealthy. Also, if the path does not return a response within 1 minute, the health check ping is considered unhealthy. > - When selecting the Health check path, make sure you're selecting a path that returns a 200 status code, only when the app is fully warmed up.
+> - In order to use Health check on your Function App, you must use a [premium or dedicated hosting plan](../azure-functions/functions-scale.md#overview-of-plans).
> [!CAUTION] > Health check configuration changes restart your app. To minimize impact to production apps, we recommend [configuring staging slots](deploy-staging-slots.md) and swapping to production.
In addition to configuring the Health check options, you can also configure the
| App setting name | Allowed values | Description | |-|-|-|
-|`WEBSITE_HEALTHCHECK_MAXPINGFAILURES` | 2 - 10 | The required number of failed requests for an instance to be deemed unhealthy and removed from the load balancer. For example, when set to `2`, your instances will be removed after `2` failed pings. (Default value is `10`) |
-|`WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT` | 1 - 100 | By default, no more than half of the instances will be excluded from the load balancer at one time to avoid overwhelming the remaining healthy instances. For example, if an App Service Plan is scaled to four instances and three are unhealthy, two will be excluded. The other two instances (one healthy and one unhealthy) will continue to receive requests. In the worst-case scenario where all instances are unhealthy, none will be excluded. <br /> To override this behavior, set app setting to a value between `1` and `100`. A higher value means more unhealthy instances will be removed (default value is `50`). |
+|`WEBSITE_HEALTHCHECK_MAXPINGFAILURES` | 2 - 10 | The required number of failed requests for an instance to be deemed unhealthy and removed from the load balancer. For example, when set to `2`, your instances are removed after `2` failed pings. (Default value is `10`) |
+|`WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT` | 1 - 100 | By default, no more than half of the instances will be excluded from the load balancer at one time to avoid overwhelming the remaining healthy instances. For example, if an App Service Plan is scaled to four instances and three are unhealthy, two are excluded. The other two instances (one healthy and one unhealthy) continue to receive requests. In the worst-case scenario where all instances are unhealthy, none are excluded. <br /> To override this behavior, set app setting to a value between `1` and `100`. A higher value means more unhealthy instances are removed (default value is `50`). |
#### Authentication and security
-Health check integrates with App Service's [authentication and authorization features](overview-authentication-authorization.md). No additional settings are required if these security features are enabled.
+Health check integrates with App Service's [authentication and authorization features](overview-authentication-authorization.md). No other settings are required if these security features are enabled.
If you're using your own authentication system, the Health check path must allow anonymous access. To secure the Health check endpoint, you should first use features such as [IP restrictions](app-service-ip-restrictions.md#set-an-ip-address-based-rule), [client certificates](app-service-ip-restrictions.md#set-an-ip-address-based-rule), or a Virtual Network to restrict application access. Once you have those features in-place, you can authenticate the health check request by inspecting the header, `x-ms-auth-internal-token`, and validating that it matches the SHA256 hash of the environment variable `WEBSITE_AUTH_ENCRYPTION_KEY`. If they match, then the health check request is valid and originating from App Service.
function envVarMatchesHeader(headerValue) {
> The `x-ms-auth-internal-token` header is only available on Windows App Service. ## Instances
-Once Health Check is enabled, you can restart and monitor the status of your application instances through the instances tab. The instances tab will show your instance's name, the status of that instance and give you the option to manually restart the application instance.
+Once Health Check is enabled, you can restart and monitor the status of your application instances through the instances tab. The instances tab shows your instance's name, the status of that instance and gives you the option to manually restart the application instance.
-If the status of your instance is unhealthy, you can restart the instance manually using the restart button in the table. Keep in mind that any other applications hosted on the same App Service Plan as the instance will also be affected by the restart. If there are other applications using the same App Service Plan as the instance, they will be listed on the opening blade from the restart button.
+If the status of your instance is unhealthy, you can restart the instance manually using the restart button in the table. Keep in mind that any other applications hosted on the same App Service Plan as the instance will also be affected by the restart. If there are other applications using the same App Service Plan as the instance, they are listed on the opening blade from the restart button.
If you restart the instance and the restart process fails, you will then be given the option to replace the worker (only 1 instance can be replaced per hour). This will also affect any applications using the same App Service Plan. Windows applications will also have the option to view processes via the Process Explorer. This gives you further insight on the instance's processes including thread count, private memory, and total CPU time. ## Diagnostic information collection
-For Windows applications, you have the option to collect diagnostic information in the Health Check tab. Enabling diagnostic collection will add an auto-heal rule that creates memory dumps for unhealthy instances and saves it to a designated storage account. Enabling this option will change auto-heal configurations. If there are existing auto-heal rules, we recommend setting this up through App Service diagnostics.
+For Windows applications, you have the option to collect diagnostic information in the Health Check tab. Enabling diagnostic collection adds an auto-heal rule that creates memory dumps for unhealthy instances and saves it to a designated storage account. Enabling this option changes auto-heal configurations. If there are existing auto-heal rules, we recommend setting this up through App Service diagnostics.
-Once diagnostic collection is enabled, you can create or choose an existing storage account for your files. You can only select storage accounts in the same region as your application. Keep in mind that saving will restart your application. After saving, if your site instances are found to be unhealthy after continuous pings, you can go to your storage account resource and view the memory dumps.
+Once diagnostic collection is enabled, you can create or choose an existing storage account for your files. You can only select storage accounts in the same region as your application. Keep in mind that saving restarts your application. After saving, if your site instances are found to be unhealthy after continuous pings, you can go to your storage account resource and view the memory dumps.
## Monitoring
-After providing your application's Health check path, you can monitor the health of your site using Azure Monitor. From the **Health check** blade in the Portal, select the **Metrics** in the top toolbar. This will open a new blade where you can see the site's historical health status and option to create a new alert rule. Health check metrics will aggregate the successful pings & display failures only when the instance was deemed unhealthy based on the health check configuration. For more information on monitoring your sites, [see the guide on Azure Monitor](web-sites-monitor.md).
+After providing your application's Health check path, you can monitor the health of your site using Azure Monitor. From the **Health check** blade in the Portal, select the **Metrics** in the top toolbar. This will open a new blade where you can see the site's historical health status and option to create a new alert rule. Health check metrics aggregate the successful pings & display failures only when the instance was deemed unhealthy based on the health check configuration. For more information on monitoring your sites, [see the guide on Azure Monitor](web-sites-monitor.md).
## Limitations - Health check can be enabled for **Free** and **Shared** App Service Plans so you can have metrics on the site's health and setup alerts, but because **Free** and **Shared** sites can't scale out, any unhealthy instances won't be replaced. You should scale up to the **Basic** tier or higher so you can scale out to 2 or more instances and utilize the full benefit of Health check. This is recommended for production-facing applications as it will increase your app's availability and performance. - The App Service plan can have a maximum of one unhealthy instance replaced per hour and, at most, three instances per day.-- There's a non-configurable limit on the total amount of instances replaced by Health Check per scale unit. If this limit is reached, no unhealthy instances will be replaced. This value gets reset every 12 hours.
+- There's a non-configurable limit on the total number of instances replaced by Health Check per scale unit. If this limit is reached, no unhealthy instances are replaced. This value gets reset every 12 hours.
## Frequently Asked Questions
The Health check requests are sent to your site internally, so the request won't
### Are the Health check requests sent over HTTP or HTTPS?
-On Windows App Service, the Health check requests will be sent via HTTPS when [HTTPS Only](configure-ssl-bindings.md#enforce-https) is enabled on the site. Otherwise, they're sent over HTTP. On Linux App Service, the health check requests are only sent over HTTP and can't be sent over HTTP**S** at this time.
+On Windows App Service, the Health check requests are sent via HTTPS when [HTTPS Only](configure-ssl-bindings.md#enforce-https) is enabled on the site. Otherwise, they're sent over HTTP. On Linux App Service, the health check requests are only sent over HTTP and can't be sent over HTTP**S** at this time.
### Is Health check following the application code configured redirects between the default domain and the custom domain?
Unhealthy instances will always be removed from the load balancer rotation regar
#### Example
-Imagine you have two applications (or one app with a slot) with Health check enabled, called App A and App B. They are on the same App Service Plan and that the Plan is scaled out to four instances. If App A becomes unhealthy on two instances, the load balancer will stop sending requests to App A on those two instances. Requests will still be routed to App B on those instances assuming App B is healthy. If App A remains unhealthy for over an hour on those two instances, those instances will only be replaced if App B is **also** unhealthy on those instances. If App B is healthy, the instance won't be replaced.
+Imagine you have two applications (or one app with a slot) with Health check enabled, called App A and App B. They are on the same App Service Plan and that the Plan is scaled out to four instances. If App A becomes unhealthy on two instances, the load balancer stops sending requests to App A on those two instances. Requests are still routed to App B on those instances assuming App B is healthy. If App A remains unhealthy for over an hour on those two instances, those instances are only replaced if App B is **also** unhealthy on those instances. If App B is healthy, the instance isn't replaced.
![Visual diagram explaining the example scenario above.][2]
application-gateway How To Ssl Offloading Ingress Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/for-containers/how-to-ssl-offloading-ingress-api.md
Previously updated : 07/24/2023 Last updated : 08/09/2023
status:
Now we're ready to send some traffic to our sample application, via the FQDN assigned to the frontend. Use the command below to get the FQDN. ```bash
-fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'')
+fqdn=$(kubectl get ingress ingress-01 -n test-infra -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
``` Curling this FQDN should return responses from the backend as configured on the HTTPRoute.
application-gateway Migrate V1 V2 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/migrate-v1-v2.md
This article primarily helps with the configuration migration. Client traffic mi
* An existing Application Gateway V1 Standard. * Make sure you have the latest PowerShell modules, or you can use Azure Cloud Shell in the portal. * If you're running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
+* Ensure that there is no existing Application gateway with the provided Appgw V2 Name and Resource group name in V1 subscription. This will rewrite the existing resources.
+* If Public IP is provided ensure that its in succeeded state.If not provided and AppGwResourceGroupName is provided ensure that public IP resource with name AppGwV2Name-IP doesnΓÇÖt exist in a resourcegroup with the name AppGwResourceGroupName in the V1 subscription.
+* Ensure that no other operation is planned on the V1 gateway or any of its associated resources during migration.
[!INCLUDE [cloud-shell-try-it.md](../../includes/cloud-shell-try-it.md)] [!INCLUDE [updated-for-az](../../includes/updated-for-az.md)] > [!IMPORTANT]
->Run the `Set-AzContext -Subscription <V1 application gateway SubscriptionId>` cmdlet every time before running the migration script. This is necessary to set the active Azure context to the correct subscription, because the migration script might clean up the existing resource group if it doesn't exist in current subscription context.
+>FRun the `Set-AzContext -Subscription <V1 application gateway SubscriptionId>` cmdlet every time before running the migration script. This is necessary to set the active Azure context to the correct subscription, because the migration script might clean up the existing resource group if it doesn't exist in current subscription context.This is not a mandatory step for version 1.0.11 & above of the migration script.
+
+> [!IMPORTANT]
+>A new stable version of the migration script , version 1.0.11 is available now , which contains important bug fixes and updates.Use this version to avoid potential issues.
+ ## Configuration migration An Azure PowerShell script is provided in this document. It performs the following operations to help you with the configuration:
An Azure PowerShell script is provided in this document. It performs the followi
## Downloading the script
-You can download the migration script from the [PowerShell Gallery](https://www.powershellgallery.com/packages/AzureAppGWMigration).
+You can download the migration script from the [PowerShell Gallery](https://www.powershellgallery.com/packages/AzureAppGWMigration).A new stable release (Version 1.0.11) of the migration script is available ,which includes major updates and bug fixes .It is recommended to use this stable version.
+ ## Using the script > [!NOTE] > Run the `Set-AzContext -Subscription <V1 application gateway SubscriptionId>` cmdlet every time before running the migration script. This is necessary to set the active Azure context to the correct subscription, because the migration script might clean up the existing resource group if it doesn't exist in current subscription context.
+> This is not a mandatory step for version 1.0.11 & above of the migration script.
There are two options for you depending on your local PowerShell environment setup and preferences:
Run the script with the following command to get the latest version:
This command also installs the required Az modules. #### Install using the script directly- If you have some Azure Az modules installed and can't uninstall them (or don't want to uninstall them), you can manually download the script using the **Manual Download** tab in the script download link. The script is downloaded as a raw nupkg file. To install the script from this nupkg file, see [Manual Package Download](/powershell/gallery/how-to/working-with-packages/manual-download).
+Version 1.0.11 is the new version of the migration script which includes major bug fixes.It is recommended to use this stable version.
+
+#### How to check the version of the downloaded script
+To check the version of the downloaded script the steps are as follows:
+* Extract the contents of the NuGet package.
+* Open the .PS1 file in the folder and check the .VERSION on top to confirm the version of the downloaded script
+```
+<#PSScriptInfo
+.VERSION 1.0.10
+.GUID be3b84b4-e9c5-46fb-a050-699c68e16119
+.AUTHOR Microsoft Corporation
+.COMPANYNAME Microsoft Corporation
+.COPYRIGHT Microsoft Corporation. All rights reserved.
+```
+* Make sure to use the latest stable version from [PowerShell Gallery](https://www.powershellgallery.com/packages/AzureAppGWMigration)
+ #### How to run the script To run the script:
To run the script:
-publicIpResourceId <public IP name string> -validateMigration -enableAutoScale ```
+ > [!NOTE]
+> During migration don't attempt any other operation on the V1 gateway or any of its associated resources.
Parameters for the script: * **resourceId: [String]: Required**: This parameter is the Azure Resource ID for your existing Standard V1 or WAF V1 gateway. To find this string value, navigate to the Azure portal, select your application gateway or WAF resource, and click the **Properties** link for the gateway. The Resource ID is located on that page.
To run the script:
``` * **subnetAddressRange: [String]: Required**: This parameter is the IP address space that you've allocated (or want to allocate) for a new subnet that contains your new V2 gateway. The address space must be specified in the CIDR notation. For example: 10.0.0.0/24. You don't need to create this subnet in advance but the CIDR needs to be part of the VNET address space. The script creates it for you if it doesn't exist and if it exists, it uses the existing one (make sure the subnet is either empty, contains only V2 Gateway if any, and has enough available IPs).
- * **appgwName: [String]: Optional**. This is a string you specify to use as the name for the new Standard_V2 or WAF_V2 gateway. If this parameter isn't supplied, the name of your existing V1 gateway is used with the suffix *_V2* appended.
+ * **appgwName: [String]: Optional**. This is a string you specify to use as the name for the new Standard_V2 or WAF_V2 gateway. If this parameter isn't supplied, the name of your existing V1 gateway is used with the suffix *_V2* appended.
* **AppGwResourceGroupName: [String]: Optional**. Name of resource group where you want V2 Application Gateway resources to be created (default value is `<V1-app-gw-rgname>`)
+ > [!NOTE]
+> Ensure that there is no existing Application gateway with the provided Appgw V2 Name and Resource group name in V1 subscription. This will rewrite the existing resources.
* **sslCertificates: [PSApplicationGatewaySslCertificate]: Optional**. A comma-separated list of PSApplicationGatewaySslCertificate objects that you create to represent the TLS/SSL certs from your V1 gateway must be uploaded to the new V2 gateway. For each of your TLS/SSL certs configured for your Standard V1 or WAF V1 gateway, you can create a new PSApplicationGatewaySslCertificate object via the `New-AzApplicationGatewaySslCertificate` command shown here. You need the path to your TLS/SSL Cert file and the password. This parameter is only optional if you don't have HTTPS listeners configured for your V1 gateway or WAF. If you have at least one HTTPS listener setup, you must specify this parameter.
To run the script:
To create a list of PSApplicationGatewayTrustedRootCertificate objects, see [New-AzApplicationGatewayTrustedRootCertificate](/powershell/module/Az.Network/New-AzApplicationGatewayTrustedRootCertificate). * **privateIpAddress: [String]: Optional**. A specific private IP address that you want to associate to your new V2 gateway. This must be from the same VNet that you allocate for your new V2 gateway. If this isn't specified, the script allocates a private IP address for your V2 gateway.
- * **publicIpResourceId: [String]: Optional**. The resourceId of existing public IP address (standard SKU) resource in your subscription that you want to allocate to the new V2 gateway. If this isn't specified, the script allocates a new public IP in the same resource group. The name is the V2 gateway's name with *-IP* appended.
+ * **publicIpResourceId: [String]: Optional**. The resourceId of existing public IP address (standard SKU) resource in your subscription that you want to allocate to the new V2 gateway.If public Ip resource name is provided, ensure that it exists in succeeded state.
+ If this isn't specified, the script allocates a new public IP in the same resource group. The name is the V2 gateway's name with *-IP* appended.If AppGwResourceGroupName is provided and public IP is not provided ensure that public IP resource with name AppGwV2Name-IP doesnΓÇÖt exist in a resourcegroup with the name AppGwResourceGroupName in the V1 subscription
+ * **validateMigration: [switch]: Optional**. Use this parameter if you want the script to do some basic configuration comparison validations after the V2 gateway creation and the configuration copy. By default, no validation is done. * **enableAutoScale: [switch]: Optional**. Use this parameter if you want the script to enable autoscaling on the new V2 gateway after it's created. By default, autoscaling is disabled. You can always manually enable it later on the newly created V2 gateway.
application-gateway Rewrite Http Headers Url https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/application-gateway/rewrite-http-headers-url.md
HTTP headers allow a client and server to pass additional information with a req
Application Gateway allows you to add, remove, or update HTTP request and response headers while the request and response packets move between the client and backend pools.
-To learn how to rewrite request and response headers with Application Gateway using Azure portal, see [here](rewrite-url-portal.md).
+To learn how to rewrite request and response headers with Application Gateway using Azure portal, see [here](rewrite-http-headers-portal.md).
![img](./media/rewrite-http-headers-url/header-rewrite-overview.png)
azure-app-configuration Quickstart Javascript https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-app-configuration/quickstart-javascript.md
In this quickstart, you will use Azure App Configuration to centralize storage a
- An Azure account with an active subscription. [Create one for free](https://azure.microsoft.com/free/). - An App Configuration store. [Create a store](./quickstart-azure-app-configuration-create.md#create-an-app-configuration-store).-- [LTS versions of Node.js](https://nodejs.org/en/about/releases/). For information about installing Node.js either directly on Windows or using the Windows Subsystem for Linux (WSL), see [Get started with Node.js](/windows/dev-environment/javascript/nodejs-overview)
+- [LTS versions of Node.js](https://github.com/nodejs/release#release-schedule). For information about installing Node.js either directly on Windows or using the Windows Subsystem for Linux (WSL), see [Get started with Node.js](/windows/dev-environment/javascript/nodejs-overview)
## Add a key-value
azure-arc Validation Program https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/data/validation-program.md
To see how all Azure Arc-enabled components are validated, see [Validation progr
### Kublr
-|Solution and version | Kubernetes version | Azure Arc-enabled data services version | SQL engine version | PostgreSQL server version
+|Solution and version | Kubernetes version | Azure Arc-enabled data services version | SQL engine version | PostgreSQL server version|
|--|--|--|--|--|
+|[Kublr 1.26.0](https://docs.kublr.com/releasenotes/1.26/release-1.26.0/)|1.26.4, 1.25.6, 1.24.13, 1.23.17, 1.22.17|1.21.0_2023-07-11|16.0.5100.7242|14.5 (Ubuntu 20.04)|
|Kublr 1.21.2 | 1.22.10 | 1.9.0_2022-07-12 | 16.0.312.4243 |12.3 (Ubuntu 12.3-1) | ### Lenovo
-|Solution and version | Kubernetes version | Azure Arc-enabled data services version | SQL engine version | PostgreSQL server version
+|Solution and version | Kubernetes version | Azure Arc-enabled data services version | SQL engine version | PostgreSQL server version|
|--|--|--|--|--| |Lenovo ThinkAgile MX1020 |1.24.6| 1.14.0_2022-12-13 |16.0.816.19223|Not validated|
-|Lenovo ThinkAgile MX3520 |AKS on Azure Stack HCI 21H2| 1.10.0_2022-08-09 |16.0.312.4243| 12.3 (Ubuntu 12.3-1)|
-
+|Lenovo ThinkAgile MX3520 |1.22.6| 1.10.0_2022-08-09 |16.0.312.4243| 12.3 (Ubuntu 12.3-1)|
### Nutanix
More tests will be added in future releases of Azure Arc-enabled data services.
- [Plan an Azure Arc-enabled data services deployment](plan-azure-arc-data-services.md) - [Create a data controller - indirectly connected with the CLI](create-data-controller-indirect-cli.md) - To create a directly connected data controller, start with [Prerequisites to deploy the data controller in direct connectivity mode](create-data-controller-direct-prerequisites.md).+
azure-arc Conceptual Inner Loop Gitops https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/kubernetes/conceptual-inner-loop-gitops.md
Title: "Inner Loop Developer Experience for Teams Adopting GitOps" Previously updated : 06/18/2021 Last updated : 08/09/2023
This article describes how an established inner loop can enhance developer produ
## Inner dev loop frameworks
-Building and deploying containers can slow the inner dev experience and impact team productivity. Cloud-native development teams will benefit from a robust inner dev loop framework. Inner dev loop frameworks assist in the iterative process of writing code, building, and debugging.
+Building and deploying containers can slow the inner dev experience and impact team productivity. Cloud-native development teams benefit from a robust inner dev loop framework. Inner dev loop frameworks help with the iterative process of writing code, building, and debugging.
-Inner dev loop frameworks capabilities include:
+Capabilities of inner dev loop frameworks include:
-
-- Automate repetitive steps like building code, containers, and deploying to target cluster. -- Easily working with remote and local clusters, and supporting local tunnel debugging for hybrid setup.
+- Automation of repetitive steps such as building code and deploying to target cluster.
+- Enhanced ability to work with remote and local clusters, and supporting local tunnel debugging for hybrid setup.
- Ability to configure custom flow for team-based productivity.-- Allow handling of microservice dependencies. -- Hot reloading, port forwarding, log, and terminal access.
+- Handling microservice dependencies.
+- Hot reloading, port forwarding, log, and terminal access.
+Depending on the maturity and complexity of the service, dev teams can choose their cluster setup to accelerate the inner dev loop:
+- All local
+- All remote
+- Hybrid
-Depending on the maturity and complexity of the service, dev teams determine which cluster setup they will use to accelerate the inner dev loop:
-
-* Completely local
-* Completely remote
-* Hybrid
--
-Luckily, there are many frameworks out there that support the listed capabilities. Microsoft offers Bridge to Kubernetes for local tunnel debugging and there are similar market offerings like DevSpace, Scaffold, and Tilt, among others.
+Many frameworks support these capabilities. Microsoft offers [Bridge to Kubernetes](/visualstudio/bridge/overview-bridge-to-kubernetes) for [local tunnel debugging](/visualstudio/bridge/bridge-to-kubernetes-vs-code#install-and-use-local-tunnel-debugging). Many other similar market offerings are available, such as DevSpace, Scaffold, and Tilt.
> [!NOTE]
-> DonΓÇÖt confuse the market offering [DevSpace](https://github.com/loft-sh/devspace) with MicrosoftΓÇÖs previously named DevSpace, which is now called [Bridge to Kubernetes](https://code.visualstudio.com/docs/containers/bridge-to-kubernetes).
+> The market offering [DevSpace](https://github.com/loft-sh/devspace) shouldn't be confused with MicrosoftΓÇÖs offering, [Bridge to Kubernetes](/visualstudio/bridge/overview-bridge-to-kubernetes), which was previously named DevSpace.
+## Inner loop to outer loop transition
-## Inner loop to outer loop transition
+Once you've evaluated and chosen an inner loop dev framework, you can build a seamless inner loop to outer loop transition.
-Once you've evaluated and chosen an inner loop dev framework, build seamless inner loop to outer loop transition.
+As described in the example scenario covered in [CI/CD workflow using GitOps](conceptual-gitops-flux2-ci-cd.md), an application developer works on application code within an application repository. This application repository also holds high-level deployment Helm and/or Kustomize templates.
-As described in the [CI/CD workflow using GitOps](conceptual-gitops-flux2-ci-cd.md) article's example, an application developer works on application code within an application repository. This application repository also holds high-level deployment Helm and/or Kustomize templates. CI\CD pipelines:
+The CI/CD pipelines:
-* Generate the low-level manifests from the high-level templates, adding environment-specific values
-* Create a pull request that merges the low-level manifests with the GitOps repo that holds desired state for the specific environment.
+- Generate the low-level manifests from the high-level templates, adding environment-specific values.
+- Create a pull request that merges the low-level manifests with the GitOps repo that holds desired state for the specific environment.
-Similar low-level manifests can be generated locally for the inner dev loop, using the configuration values local to the developer. Application developers can iterate on the code changes and use the low-level manifests to deploy and debug applications. Generation of the low-level manifests can be integrated into an inner loop workflow, using the developerΓÇÖs local configuration. Most of the inner loop framework allows configuring custom flows by either extending through custom plugins or injecting script invocation based on hooks.
+Similar low-level manifests can be generated locally for the inner dev loop, using the configuration values local to the developer. Application developers can iterate on the code changes and use the low-level manifests to deploy and debug applications. Generation of the low-level manifests can be integrated into an inner loop workflow, using the developerΓÇÖs local configuration. Most of the inner loop framework allows configuring custom flows by either extending through custom plugins or injecting script invocation based on hooks.
## Example inner loop workflow built with DevSpace framework
+To illustrate the inner loop workflow, we can look at an example scenario. This example uses the DevSpace framework, but the general workflow can be used with other frameworks.
-### Diagram A: Inner Loop Flow
+This diagram shows the workflow for the inner loop.
-### Diagram B: Inner Loop to Outer Loop transition
+This diagram shows the workflow for the inner loop to outer loop transition.
-## Example workflow
-As an application developer, Alice:
-- Authors a devspace.yaml to configure the inner loop.+
+In this example, as an application developer, Alice:
+
+- Authors a devspace.yaml file to configure the inner loop.
- Writes and tests application code using the inner loop for efficiency. - Deploys to staging or prod with outer loop. - Suppose Alice wants to update, run, and debug the application either in local or remote cluster. 1. Alice updates the local configuration for the development environment represented in .env file. 1. Alice runs `devspace use context` and selects the Kubernetes cluster context.
-1. Alice selects a namespace to work with by running `devspace use namespace <namespace_name>`.
-1. Alice can iterates changes to the application code, and deploys and debugs the application onto the target cluster by running `devspace dev`.
-1. Running `devspace dev` generates low-level manifests based on AliceΓÇÖs local configuration and deploys the application. These low-level manifests are configured with devspace hooks in devspace.yaml
-1. Alice doesn't need to rebuild the container every time she makes code changes, since DevSpace will enable hot reloading, using file sync to copy her latest changes inside the container.
-1. Running `devspace dev` will also deploy any dependencies configured in devspace.yaml, such as back-end dependencies to front-end.
+1. Alice selects a namespace to work with by running `devspace use namespace <namespace_name>`.
+1. Alice can iterate changes to the application code, and deploys and debugs the application onto the target cluster by running `devspace dev`.
+1. Running `devspace dev` generates low-level manifests based on AliceΓÇÖs local configuration and deploys the application. These low-level manifests are configured with DevSpace hooks in devspace.yaml.
+1. Alice doesn't need to rebuild the container every time she makes code changes, since DevSpace enables hot reloading, using file sync to copy her latest changes inside the container.
+1. Running `devspace dev` also deploys any dependencies configured in devspace.yaml, such as back-end dependencies to front-end.
1. Alice tests her changes by accessing the application through the forwarding configured through devspace.yaml. 1. Once Alice finalizes her changes, she can purge the deployment by running `devspace purge` and create a new pull request to merge her changes to the dev branch of the application repository. > [!NOTE]
-> Find the sample code for above workflow at this [GitHub repo](https://github.com/Azure/arc-cicd-demo-src)
+> Find the sample code for this workflow in our [GitHub repo](https://github.com/Azure/arc-cicd-demo-src).
## Next steps
-Learn more about creating connections between your cluster and a Git repository as a [configuration resource with Azure Arc-enabled Kubernetes](./conceptual-gitops-flux2.md)
+- Learn about creating connections between your cluster and a Git repository as a [configuration resource with Azure Arc-enabled Kubernetes](./conceptual-gitops-flux2.md).
+- Learn more about [CI/CD workflow using GitOps](conceptual-gitops-ci-cd.md).
azure-arc Monitor Gitops Flux 2 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/kubernetes/monitor-gitops-flux-2.md
Title: Monitor GitOps (Flux v2) status and activity Previously updated : 07/28/2023 Last updated : 08/11/2023 description: Learn how to monitor status, compliance, resource consumption, and reconciliation activity for GitOps with Flux v2. # Monitor GitOps (Flux v2) status and activity
-We provide dashboards to help you monitor status, compliance, resource consumption, and reconciliation activity for GitOps with Flux v2 in your Azure Arc-enabled Kubernetes clusters or Azure Kubernetes Service (AKS) clusters. These JSON dashboards can be imported to Grafana to help you view and analyze your data in real time.
+We provide dashboards to help you monitor status, compliance, resource consumption, and reconciliation activity for GitOps with Flux v2 in your Azure Arc-enabled Kubernetes clusters or Azure Kubernetes Service (AKS) clusters. These JSON dashboards can be imported to Grafana to help you view and analyze your data in real time. You can also set up alerts for this information.
## Prerequisites
The **Flux Configuration Compliance Status** table lists all Flux configurations
:::image type="content" source="media/monitor-gitops-flux2/flux-configuration-compliance.png" alt-text="Screenshot showing the Flux Configuration Compliance Status table in the Application Deployments dashboard." lightbox="media/monitor-gitops-flux2/flux-configuration-compliance.png":::
-The **Count of Flux Extension Deployments by Status** chart shows the count of clusters, based on their provisioning state.
+The **Count of Flux Extension Deployments by Status** chart shows the count of clusters, based on their provisioning state.
:::image type="content" source="media/monitor-gitops-flux2/flux-deployments-by-status.png" alt-text="Screenshot of the Flux Extension Deployments by Status pie chart in the Application Deployments dashboard.":::
The **Count of Flux Configurations by Compliance Status** chart shows the count
:::image type="content" source="media/monitor-gitops-flux2/flux-configurations-by-status.png" alt-text="Screenshot of the Flux Configuration by Compliance Status chart on the Application Deployments dashboard.":::
+### Filter dashboard data to track application deployments
+
+You can filter data in the **GitOps Flux - Application Deployments Dashboard** to change the information shown. For example, you can show data for only certain subscriptions or resource groups, or limit data to a particular cluster. To do so, select the filter option either from the top level dropdowns or from any column header in the tables.
+
+For example, in the **Flux Configuration Compliance Status** table, you can select a specific commit from the **SourceLastSyncCommit** column. By doing so, you can track the status of a configuration deployment to all of the clusters affected by that commit.
+
+### Create alerts for extension and configuration failures
+
+After you've imported the dashboard as described in the previous section, you can set up alerts. These alerts notify you when Flux extensions or Flux configurations experience failures.
+
+Follow the steps below to create an alert. Example queries are provided to detect extension provisioning or extension upgrade failures, or to detect compliance state failures.
+
+1. In the left navigation menu of the dashboard, select **Alerting**.
+1. Select **Alert rules**.
+1. Select **+ Create alert rule**. The new alert rule page opens, with the **Grafana managed alerts** option selected by default.
+1. In **Rule name**, add a descriptive name. This name is displayed in the alert rule list, and it will be the used as the `alertname` label for every alert instance created from this rule.
+1. Under **Set a query and alert condition**:
+
+ - Select a data source. The same data source used for the dashboard may be used here.
+ - For **Service**, select **Azure Resource Graph**.
+ - Select the subscriptions from the dropdown list.
+ - Enter the query you want to use. For example, for extension provisioning or upgrade failures, you can enter this query:
+
+ ```kusto
+ kubernetesconfigurationresources
+ | where type == "microsoft.kubernetesconfiguration/extensions"
+ | extend provisioningState = tostring(properties.ProvisioningState)
+ | where provisioningState == "Failed"
+ | summarize count() by provisioningState
+ ```
+
+ Or for compliance state failures, you can enter this query:
+
+ ```kusto
+ kubernetesconfigurationresources
+ | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
+ | extend complianceState=tostring(properties.complianceState)
+ | where complianceState == "Non-Compliant"
+ | summarize count() by complianceState
+ ```
+
+ - For **Threshold box**, select **A** for input type and set the threshold to **0** to receive alerts even if just one extension fails on the cluster. Mark this as the **Alert condition**.
+
+ :::image type="content" source="media/monitor-gitops-flux2/application-dashboard-set-alerts.png" alt-text="Screenshot showing the alert creation process." lightbox="media/monitor-gitops-flux2/application-dashboard-set-alerts.png":::
+
+1. Specify the alert evaluation interval:
+
+ - For **Condition**, select the query or expression to trigger the alert rule.
+ - For **Evaluate every**, enter the evaluation frequency as a multiple of 10 seconds.
+ - For **Evaluate for**, specify how long the condition must be true before the alert is created.
+ - In **Configure no data and error handling**, indicate what should happen when the alert rule returns no data or returns an error.
+ - To check the results from running the query, select **Preview**.
+
+1. Add the storage location, rule group, and any additional metadata that you want to associate with the rule.
+
+ - For **Folder**, select the folder where the rule should be stored.
+ - For **Group**, specify a predefined group.
+ - If desired, add a description and summary to customize alert messages.
+ - Add Runbook URL, panel, dashboard, and alert IDs as needed.
+
+1. If desired, add any custom labels. Then select **Save**.
+
+You can also [configure contact points](https://grafana.com/docs/grafana/latest/alerting/alerting-rules/manage-contact-points/) and [configure notification policies](https://grafana.com/docs/grafana/latest/alerting/alerting-rules/create-notification-policy/) for your alerts.
+ ## Monitor resource consumption and reconciliations Follow these steps to import dashboards that let you monitor Flux resource consumption, reconciliations, API requests, and reconciler status.
Follow these steps to import dashboards that let you monitor Flux resource consu
1. [Link the Managed Prometheus workspace to the Managed Grafana instance](/azure/azure-monitor/essentials/azure-monitor-workspace-manage#link-a-grafana-workspace). This takes a few minutes to complete. 1. Follow the steps to [import these JSON dashboards to Grafana](/azure/managed-grafana/how-to-create-dashboard#import-a-json-dashboard).
-After you have imported the dashboards, they'll display information from the clusters that you're monitoring.
+After you have imported the dashboards, they'll display information from the clusters that you're monitoring. To show information only for a particular cluster or namespace, use the filters near the top of each dashboard.
The **Flux Control Plane** dashboard shows details about status resource consumption, reconciliations at the cluster level, and Kubernetes API requests.
The **Flux Cluster Stats** dashboard shows details about the number of reconcile
:::image type="content" source="media/monitor-gitops-flux2/flux-cluster-stats-dashboard.png" alt-text="Screenshot of the Flux Cluster Stats dashboard." lightbox="media/monitor-gitops-flux2/flux-cluster-stats-dashboard.png":::
-## Filter dashboard data to track Application Deployments
+### Create alerts for resource consumption and reconciliation issues
+
+After you've imported the dashboard as described in the previous section, you can set up alerts. These alerts notify you of resource consumption and reconciliation issues that may require attention.
+
+To enable these alerts, you deploy a Bicep template similar to the one shown here. The alert rules in this template are samples that can be modified as needed.
+
+Once you've downloaded the Bicep template and made your changes, [follow these steps to deploy the template](/azure/azure-resource-manager/bicep/template-specs).
+
+```bicep
+param azureMonitorWorkspaceName string
+param alertReceiverEmailAddress string
+
+param kustomizationLookbackPeriodInMinutes int = 5
+param helmReleaseLookbackPeriodInMinutes int = 5
+param gitRepositoryLookbackPeriodInMinutes int = 5
+param bucketLookbackPeriodInMinutes int = 5
+param helmRepoLookbackPeriodInMinutes int = 5
+param timeToResolveAlerts string = 'PT10M'
+param location string = resourceGroup().location
+
+resource azureMonitorWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
+ name: azureMonitorWorkspaceName
+ location: location
+}
+
+resource fluxRuleActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
+ name: 'fluxRuleActionGroup'
+ location: 'global'
+ properties: {
+ enabled: true
+ groupShortName: 'fluxGroup'
+ emailReceivers: [
+ {
+ name: 'emailReceiver'
+ emailAddress: alertReceiverEmailAddress
+ }
+ ]
+ }
+}
+
+resource fluxRuleGroup 'Microsoft.AlertsManagement/prometheusRuleGroups@2023-03-01' = {
+ name: 'fluxRuleGroup'
+ location: location
+ properties: {
+ description: 'Flux Prometheus Rule Group'
+ scopes: [
+ azureMonitorWorkspace.id
+ ]
+ enabled: true
+ interval: 'PT1M'
+ rules: [
+ {
+ alert: 'KustomizationNotReady'
+ expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Kustomization"}) > 0'
+ for: 'PT${kustomizationLookbackPeriodInMinutes}M'
+ labels: {
+ description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
+ }
+ annotations: {
+ description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
+ }
+ enabled: true
+ severity: 3
+ resolveConfiguration: {
+ autoResolved: true
+ timeToResolve: timeToResolveAlerts
+ }
+ actions: [
+ {
+ actionGroupId: fluxRuleActionGroup.id
+ }
+ ]
+ }
+ {
+ alert: 'HelmReleaseNotReady'
+ expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRelease"}) > 0'
+ for: 'PT${helmReleaseLookbackPeriodInMinutes}M'
+ labels: {
+ description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
+ }
+ annotations: {
+ description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
+ }
+ enabled: true
+ severity: 3
+ resolveConfiguration: {
+ autoResolved: true
+ timeToResolve: timeToResolveAlerts
+ }
+ actions: [
+ {
+ actionGroupId: fluxRuleActionGroup.id
+ }
+ ]
+ }
+ {
+ alert: 'GitRepositoryNotReady'
+ expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="GitRepository"}) > 0'
+ for: 'PT${gitRepositoryLookbackPeriodInMinutes}M'
+ labels: {
+ description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
+ }
+ annotations: {
+ description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
+ }
+ enabled: true
+ severity: 3
+ resolveConfiguration: {
+ autoResolved: true
+ timeToResolve: timeToResolveAlerts
+ }
+ actions: [
+ {
+ actionGroupId: fluxRuleActionGroup.id
+ }
+ ]
+ }
+ {
+ alert: 'BucketNotReady'
+ expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Bucket"}) > 0'
+ for: 'PT${bucketLookbackPeriodInMinutes}M'
+ labels: {
+ description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
+ }
+ annotations: {
+ description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
+ }
+ enabled: true
+ severity: 3
+ resolveConfiguration: {
+ autoResolved: true
+ timeToResolve: timeToResolveAlerts
+ }
+ actions: [
+ {
+ actionGroupId: fluxRuleActionGroup.id
+ }
+ ]
+ }
+ {
+ alert: 'HelmRepositoryNotReady'
+ expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRepository"}) > 0'
+ for: 'PT${helmRepoLookbackPeriodInMinutes}M'
+ labels: {
+ description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
+ }
+ annotations: {
+ description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
+ }
+ enabled: true
+ severity: 3
+ resolveConfiguration: {
+ autoResolved: true
+ timeToResolve: timeToResolveAlerts
+ }
+ actions: [
+ {
+ actionGroupId: fluxRuleActionGroup.id
+ }
+ ]
+ }
+ ]
+ }
+}
+
+```
-You can filter data in the **GitOps Flux - Application Deployments Dashboard** to change the information shown. For example, you can show data for only certain subscriptions or resource groups, or limit data to a particular cluster. To do so, select the filter option either from the top level dropdowns or from any column header in the tables.
-
-For example, in the **Flux Configuration Compliance Status** table, you can select a specific commit from the **SourceLastSyncCommit** column. By doing so, you can track the status of a configuration deployment to all of the clusters affected by that commit.
## Next steps
azure-arc Resource Graph Samples https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/kubernetes/resource-graph-samples.md
Title: Azure Resource Graph sample queries for Azure Arc-enabled Kubernetes description: Sample Azure Resource Graph queries for Azure Arc-enabled Kubernetes showing use of resource types and tables to access Azure Arc-enabled Kubernetes related resources and properties. Previously updated : 07/07/2022 Last updated : 08/09/2023
This page is a collection of [Azure Resource Graph](../../governance/resource-graph/overview.md) sample queries for Azure Arc-enabled Kubernetes. For a complete list of Azure Resource Graph samples, see
-[Resource Graph samples by Category](../../governance/resource-graph/samples/samples-by-category.md)
-and [Resource Graph samples by Table](../../governance/resource-graph/samples/samples-by-table.md).
+[Resource Graph samples by category](../../governance/resource-graph/samples/samples-by-category.md)
+and [Resource Graph samples by table](../../governance/resource-graph/samples/samples-by-table.md).
## Sample queries
and [Resource Graph samples by Table](../../governance/resource-graph/samples/sa
- Learn more about the [query language](../../governance/resource-graph/concepts/query-language.md). - Learn more about how to [explore resources](../../governance/resource-graph/concepts/explore-resources.md).-- See samples of [Starter language queries](../../governance/resource-graph/samples/starter.md).-- See samples of [Advanced language queries](../../governance/resource-graph/samples/advanced.md).
+- See samples of [starter language queries](../../governance/resource-graph/samples/starter.md).
+- See samples of [advanced language queries](../../governance/resource-graph/samples/advanced.md).
azure-arc Validation Program https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/kubernetes/validation-program.md
The following providers and their corresponding Kubernetes distributions have su
| Provider name | Distribution name | Version | | | -- | - | | RedHat | [OpenShift Container Platform](https://www.openshift.com/products/container-platform) | [4.9.43](https://docs.openshift.com/container-platform/4.9/release_notes/ocp-4-9-release-notes.html), [4.10.23](https://docs.openshift.com/container-platform/4.10/release_notes/ocp-4-10-release-notes.html), 4.11.0-rc.6, [4.13.4](https://docs.openshift.com/container-platform/4.13/release_notes/ocp-4-13-release-notes.html) |
-| VMware | [Tanzu Kubernetes Grid](https://tanzu.vmware.com/kubernetes-grid) | TKGm 2.2; upstream K8s v1.25.7+vmware.2 <br> TKGm 2.1.0; upstream K8s v1.24.9+vmware.1 <br> TKGm 1.6.0; upstream K8s v1.23.8+vmware.2 <br>TKGm 1.5.3; upstream K8s v1.22.8+vmware.1 <br>TKGm 1.4.0; upstream K8s v1.21.2+vmware.1 <br>TKGm 1.3.1; upstream K8s v1.20.5+vmware.2 <br>TKGm 1.2.1; upstream K8s v1.19.3+vmware.1 |
+| VMware | [Tanzu Kubernetes Grid](https://tanzu.vmware.com/kubernetes-grid) |TKGm 2.2; upstream K8s v1.25.7+vmware.2 <br>TKGm 2.1.0; upstream K8s v1.24.9+vmware.1 <br>TKGm 1.6.0; upstream K8s v1.23.8+vmware.2 <br>TKGm 1.5.3; upstream K8s v1.22.8+vmware.1 <br>TKGm 1.4.0; upstream K8s v1.21.2+vmware.1 <br>TKGm 1.3.1; upstream K8s v1.20.5+vmware.2 <br>TKGm 1.2.1; upstream K8s v1.19.3+vmware.1 |
| Canonical | [Charmed Kubernetes](https://ubuntu.com/kubernetes) | [1.24](https://ubuntu.com/kubernetes/docs/1.24/components) | | SUSE Rancher | [Rancher Kubernetes Engine](https://rancher.com/products/rke/) | RKE CLI version: [v1.3.13](https://github.com/rancher/rke/releases/tag/v1.3.13); Kubernetes versions: 1.24.2, 1.23.8 | | Nutanix | [Nutanix Kubernetes Engine](https://www.nutanix.com/products/kubernetes-engine) | Version [2.5](https://portal.nutanix.com/page/documents/details?targetId=Nutanix-Kubernetes-Engine-v2_5:Nutanix-Kubernetes-Engine-v2_5); upstream K8s v1.23.11 |
-| Kublr | [Kublr Managed K8s](https://kublr.com/managed-kubernetes/) Distribution | Upstream K8s Version: 1.22.10 <br> Upstream K8s Version: 1.21.3 |
+| Kublr | [Kublr Managed K8s](https://kublr.com/managed-kubernetes/) Distribution |[Kublr 1.26.0](https://docs.kublr.com/releasenotes/1.26/release-1.26.0/); Upstream K8s Versions: 1.21.3, 1.22.10, 1.22.17, 1.23.17, 1.24.13, 1.25.6, 1.26.4 |
| Mirantis | [Mirantis Kubernetes Engine](https://www.mirantis.com/software/mirantis-kubernetes-engine/) | MKE Version [3.6.0](https://docs.mirantis.com/mke/3.6/release-notes/3-6-0.html) <br> MKE Version [3.5.5](https://docs.mirantis.com/mke/3.5/release-notes/3-5-5.html) <br> MKE Version [3.4.7](https://docs.mirantis.com/mke/3.4/release-notes/3-4-7.html) |
-| Wind River | [Wind River Cloud Platform](https://www.windriver.com/studio/operator/cloud-platform) | Wind River Cloud Platform 22.12; Upstream K8s version: 1.24.4 <br>Wind River Cloud Platform 22.06; Upstream K8s version: 1.23.1 <br>Wind River Cloud Platform 21.12; Upstream K8s version: 1.21.8 <br>Wind River Cloud Platform 21.05; Upstream K8s version: 1.18.1 |
+| Wind River | [Wind River Cloud Platform](https://www.windriver.com/studio/operator/cloud-platform) |Wind River Cloud Platform 22.12; Upstream K8s version: 1.24.4 <br>Wind River Cloud Platform 22.06; Upstream K8s version: 1.23.1 <br>Wind River Cloud Platform 21.12; Upstream K8s version: 1.21.8 <br>Wind River Cloud Platform 21.05; Upstream K8s version: 1.18.1 |
The Azure Arc team also ran the conformance tests and validated Azure Arc-enabled Kubernetes scenarios on the following public cloud providers:
The conformance tests run as part of the Azure Arc-enabled Kubernetes validation
* [Learn how to connect an existing Kubernetes cluster to Azure Arc](./quickstart-connect-cluster.md) * Learn about the [Azure Arc agents](conceptual-agent-overview.md) deployed on Kubernetes clusters when connecting them to Azure Arc.+
azure-arc Vmware Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/servers/vmware-faq.md
Title: Azure Arc-enabled servers VMware Frequently Asked Questions description: Learn how to use Azure Arc-enabled servers on virtual machines running in VMware vSphere environments. Previously updated : 01/20/2023 Last updated : 08/10/2023
Yes. Azure Arc-enabled servers work with VMs running in an on-premises VMware vS
Azure Arc-enabled servers and/or Azure Arc-enabled VMware vSphere work with [all supported versions](./prerequisites.md) of Windows Server and major distributions of Linux. As mentioned, even though Arc-enabled servers work with VMware vSphere virtual machines, the [Connected Machine agent](agent-overview.md) has no notion of familiarity with the underlying infrastructure fabric and virtualization layer.
-## Should I use Arc-enabled servers or Arc-enabled VMware vSphere, and can I use both?
+## Should I use Arc-enabled servers or Arc-enabled VMware vSphere for my VMware VMs?
-While Azure Arc-enabled servers and Azure Arc-enabled VMware vSphere can be used in conjunction with one another, please note that this will produce dual representations in the Azure portal of the same underlying virtual machine. This scenario can potentially introduce a ΓÇ£duplicateΓÇ¥ guest management experience and is not advisable.
+Each option has its own unique benefits and can be combined as needed. Arc-enabled servers allows you to manage the guest OS of your VMs with the Azure Connected Machine agent. Arc-enabled VMware vSphere enables you to onboard your VMware environment at-scale to Azure Arc with automatic discovery, in addition to performing full VM lifecycle and virtual hardware operations. You have the flexibility to start with either option and incorporate the other one later without any disruption. With both options, you'll enjoy the same consistent experience.
azure-cache-for-redis Cache How To Functions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-cache-for-redis/cache-how-to-functions.md
- Title: Using Azure Functions
-description: Learn how to use Azure Functions
-
-zone_pivot_groups: cache-redis-zone-pivot-group
----- Previously updated : 05/24/2023--
-# Serverless event-based architectures with Azure Cache for Redis and Azure Functions (preview)
-
-This article describes how to use Azure Cache for Redis with [Azure Functions](/azure/azure-functions/functions-overview) to create optimized serverless and event-driven architectures.
-Azure Cache for Redis can be used as a [trigger](/azure/azure-functions/functions-triggers-bindings) for Azure Functions, allowing Redis to initiate a serverless workflow.
-This functionality can be highly useful in data architectures like a [write-behind cache](https://azure.microsoft.com/resources/cloud-computing-dictionary/what-is-caching/#types-of-caching), or any [event-based architectures](/azure/architecture/guide/architecture-styles/event-driven).
-
-There are three triggers supported in Azure Cache for Redis:
--- `RedisPubSubTrigger` triggers on [Redis pubsub messages](https://redis.io/docs/manual/pubsub/)-- `RedisListTrigger` triggers on [Redis lists](https://redis.io/docs/data-types/lists/)-- `RedisStreamTrigger` triggers on [Redis streams](https://redis.io/docs/data-types/streams/)-
-[Keyspace notifications](https://redis.io/docs/manual/keyspace-notifications/) can also be used as triggers through `RedisPubSubTrigger`.
-
-## Scope of availability for functions triggers
-
-|Tier | Basic | Standard, Premium | Enterprise, Enterprise Flash |
-||::|::|::|
-|Pub/Sub | Yes | Yes | Yes |
-|Lists | Yes | Yes | Yes |
-|Streams | Yes | Yes | Yes |
-
-> [!IMPORTANT]
-> Redis triggers are not currently supported on consumption functions.
->
-
-## Triggering on keyspace notifications
-
-Redis offers a built-in concept called [keyspace notifications](https://redis.io/docs/manual/keyspace-notifications/). When enabled, this feature publishes notifications of a wide range of cache actions to a dedicated pub/sub channel. Supported actions include actions that affect specific keys, called _keyspace notifications_, and specific commands, called _keyevent notifications_. A huge range of Redis actions are supported, such as `SET`, `DEL`, and `EXPIRE`. The full list can be found in the [keyspace notification documentation](https://redis.io/docs/manual/keyspace-notifications/).
-
-The `keyspace` and `keyevent` notifications are published with the following syntax:
-
-```
-PUBLISH __keyspace@0__:<affectedKey> <command>
-PUBLISH __keyevent@0__:<affectedCommand> <key>
-```
-
-Because these events are published on pub/sub channels, the `RedisPubSubTrigger` is able to pick them up. See the [RedisPubSubTrigger](#redispubsubtrigger) section for more examples.
-
-> [!IMPORTANT]
-> In Azure Cache for Redis, `keyspace` events must be enabled before notifications are published. For more information, see [Advanced Settings](cache-configure.md#keyspace-notifications-advanced-settings).
-
-## Prerequisites and limitations
--- The `RedisPubSubTrigger` isn't capable of listening to [keyspace notifications](https://redis.io/docs/manual/keyspace-notifications/) on clustered caches.-- Basic tier functions don't support triggering on `keyspace` or `keyevent` notifications through the `RedisPubSubTrigger`.-- The `RedisPubSubTrigger` isn't supported with consumption functions.-
-## Trigger usage
-
-### RedisPubSubTrigger
-
-The `RedisPubSubTrigger` subscribes to a specific channel pattern using [`PSUBSCRIBE`](https://redis.io/commands/psubscribe/), and surfaces messages received on those channels to the function.
-
-> [!WARNING]
-> This trigger isn't supported on a [consumption plan](/azure/azure-functions/consumption-plan) because Redis PubSub requires clients to always be actively listening to receive all messages. For consumption plans, your function might miss certain messages published to the channel.
->
-
-> [!NOTE]
-> Functions with the `RedisPubSubTrigger` should not be scaled out to multiple instances.
-> Each instance listens and processes each pubsub message, resulting in duplicate processing.
-
-#### Inputs for RedisPubSubTrigger
--- `ConnectionString`: connection string to the redis cache (for example, `<cacheName>.redis.cache.windows.net:6380,password=...`).-- `Channel`: name of the pubsub channel that the trigger should listen to.-
-This sample listens to the channel "channel" at a localhost Redis instance at `127.0.0.1:6379`
--
-```csharp
-[FunctionName(nameof(PubSubTrigger))]
-public static void PubSubTrigger(
- [RedisPubSubTrigger(ConnectionString = "127.0.0.1:6379", Channel = "channel")] RedisMessageModel model,
- ILogger logger)
-{
- logger.LogInformation(JsonSerializer.Serialize(model));
-}
-```
--
-```java
-@FunctionName("PubSubTrigger")
- public void PubSubTrigger(
- @RedisPubSubTrigger(
- name = "message",
- connectionStringSetting = "redisLocalhost",
- channel = "channel")
- String message,
- final ExecutionContext context) {
- context.getLogger().info(message);
- }
-```
---
-```json
-{
- "bindings": [
- {
- "type": "redisPubSubTrigger",
- "connectionStringSetting": "redisLocalhost",
- "channel": "channel",
- "name": "message",
- "direction": "in"
- }
- ],
- "scriptFile": "__init__.py"
-}
-```
--
-This sample listens to any keyspace notifications for the key `myKey` in a localhost Redis instance at `127.0.0.1:6379`.
--
-```csharp
-
-[FunctionName(nameof(PubSubTrigger))]
-public static void PubSubTrigger(
- [RedisPubSubTrigger(ConnectionString = "127.0.0.1:6379", Channel = "__keyspace@0__:myKey")] RedisMessageModel model,
- ILogger logger)
-{
- logger.LogInformation(JsonSerializer.Serialize(model));
-}
-```
--
-```java
-@FunctionName("KeyspaceTrigger")
- public void KeyspaceTrigger(
- @RedisPubSubTrigger(
- name = "message",
- connectionStringSetting = "redisLocalhost",
- channel = "__keyspace@0__:myKey")
- String message,
- final ExecutionContext context) {
- context.getLogger().info(message);
- }
-```
---
-```json
-{
- "bindings": [
- {
- "type": "redisPubSubTrigger",
- "connectionStringSetting": "redisLocalhost",
- "channel": "__keyspace@0__:myKey",
- "name": "message",
- "direction": "in"
- }
- ],
- "scriptFile": "__init__.py"
-}
-```
--
-This sample listens to any `keyevent` notifications for the delete command [`DEL`](https://redis.io/commands/del/) in a localhost Redis instance at `127.0.0.1:6379`.
--
-```csharp
-[FunctionName(nameof(PubSubTrigger))]
-public static void PubSubTrigger(
- [RedisPubSubTrigger(ConnectionString = "127.0.0.1:6379", Channel = "__keyevent@0__:del")] RedisMessageModel model,
- ILogger logger)
-{
- logger.LogInformation(JsonSerializer.Serialize(model));
-}
-```
--
-```java
- @FunctionName("KeyeventTrigger")
- public void KeyeventTrigger(
- @RedisPubSubTrigger(
- name = "message",
- connectionStringSetting = "redisLocalhost",
- channel = "__keyevent@0__:del")
- String message,
- final ExecutionContext context) {
- context.getLogger().info(message);
- }
-```
---
-```json
-{
- "bindings": [
- {
- "type": "redisPubSubTrigger",
- "connectionStringSetting": "redisLocalhost",
- "channel": "__keyevent@0__:del",
- "name": "message",
- "direction": "in"
- }
- ],
- "scriptFile": "__init__.py"
-}
-```
--
-### RedisListTrigger
-
-The `RedisListTrigger` pops elements from a list and surfaces those elements to the function. The trigger polls Redis at a configurable fixed interval, and uses [`LPOP`](https://redis.io/commands/lpop/)/[`RPOP`](https://redis.io/commands/rpop/)/[`LMPOP`](https://redis.io/commands/lmpop/) to pop elements from the lists.
-
-#### Inputs for RedisListTrigger
--- `ConnectionStringSetting`: connection string to the redis cache, for example`<cacheName>.redis.cache.windows.net:6380,password=...`.-- `Key`: Key or keys to read from, space-delimited.
- - Multiple keys only supported on Redis 7.0+ using [`LMPOP`](https://redis.io/commands/lmpop/).
- - Listens to only the first key given in the argument using [`LPOP`](https://redis.io/commands/lpop/)/[`RPOP`](https://redis.io/commands/rpop/) on Redis versions less than 7.0.
- - This field can be resolved using `INameResolver`
-- (optional) `PollingIntervalInMs`: How often to poll Redis in milliseconds.
- - Default: 1000
-- (optional) `MessagesPerWorker`: How many messages each functions worker "should" process. Used to determine how many workers the function should scale to.
- - Default: 100
-- (optional) `Count`: Number of elements to pull from Redis at one time. These are processed in parallel.
- - Default: 10
- - Only supported on Redis 6.2+ using the `COUNT` argument in [`LPOP`](https://redis.io/commands/lpop/)/[`RPOP`](https://redis.io/commands/rpop/).
-- (optional) `ListPopFromBeginning`: determines whether to pop elements from the beginning using [`LPOP`](https://redis.io/commands/lpop/) or to pop elements from the end using [`RPOP`](https://redis.io/commands/rpop/).
- - Default: true
-
-The following sample polls the key `listTest` at a localhost Redis instance at `127.0.0.1:6379`:
--
-```csharp
-[FunctionName(nameof(ListTrigger))]
-public static void ListTrigger(
- [RedisListTrigger(ConnectionStringSetting = "127.0.0.1:6379", Key = "listTest")] RedisMessageModel model,
- ILogger logger)
-{
- logger.LogInformation(JsonSerializer.Serialize(model));
-}
-```
--
-```java
-@FunctionName("ListTrigger")
- public void ListTrigger(
- @RedisListTrigger(
- name = "entry",
- connectionStringSetting = "redisLocalhost",
- key = "listTest",
- pollingIntervalInMs = 100,
- messagesPerWorker = 10,
- count = 1,
- listPopFromBeginning = false)
- String entry,
- final ExecutionContext context) {
- context.getLogger().info(entry);
- }
-```
---
-```json
-{
- "bindings": [
- {
- "type": "redisListTrigger",
- "listPopFromBeginning": true,
- "connectionStringSetting": "redisLocalhost",
- "key": "listTest",
- "pollingIntervalInMs": 1000,
- "messagesPerWorker": 100,
- "count": 10,
- "name": "entry",
- "direction": "in"
- }
- ],
- "scriptFile": "__init__.py"
-}
-```
--
-### RedisStreamTrigger
-
-The `RedisStreamTrigger` pops elements from a stream and surfaces those elements to the function.
-The trigger polls Redis at a configurable fixed interval, and uses [`XREADGROUP`](https://redis.io/commands/xreadgroup/) to read elements from the stream.
-The consumer group for all function instances will be the ID of the function. For example, for the StreamTrigger function in [this sample](https://github.com/Azure/azure-functions-redis-extension/blob/main/samples/dotnet/RedisSamples.cs), the consumer group would be `Microsoft.Azure.WebJobs.Extensions.Redis.Samples.RedisSamples.StreamTrigger`.
-Each function creates a new random GUID to use as its consumer name within the group to ensure that scaled out instances of the function don't read the same messages from the stream.
-
-#### Inputs for RedisStreamTrigger
--- `ConnectionStringSetting`: connection string to the redis cache, for example, `<cacheName>.redis.cache.windows.net:6380,password=...`.-- `Key`: Key or keys to read from, space-delimited.
- - Uses [`XREADGROUP`](https://redis.io/commands/xreadgroup/).
- - This field can be resolved using `INameResolver`.
-- (optional) `PollingIntervalInMs`: How often to poll Redis in milliseconds.
- - Default: 1000
-- (optional) `MessagesPerWorker`: How many messages each functions worker "should" process. Used to determine how many workers the function should scale to.
- - Default: 100
-- (optional) `Count`: Number of elements to pull from Redis at one time.
- - Default: 10
-- (optional) `DeleteAfterProcess`: If the listener will delete the stream entries after the function runs.
- - Default: false
-
-The following sample polls the key `streamTest` at a localhost Redis instance at `127.0.0.1:6379`:
--
-```csharp
-[FunctionName(nameof(StreamTrigger))]
-public static void StreamTrigger(
- [RedisStreamTrigger(ConnectionString = "127.0.0.1:6379", Keys = "streamTest")] RedisMessageModel model,
- ILogger logger)
-{
- logger.LogInformation(JsonSerializer.Serialize(model));
-}
-```
--
-```java
-@FunctionName("StreamTrigger")
- public void StreamTrigger(
- @RedisStreamTrigger(
- name = "entry",
- connectionStringSetting = "redisLocalhost",
- key = "streamTest",
- pollingIntervalInMs = 100,
- messagesPerWorker = 10,
- count = 1,
- deleteAfterProcess = true)
- String entry,
- final ExecutionContext context) {
- context.getLogger().info(entry);
- }
-```
---
-```json
-{
- "bindings": [
- {
- "type": "redisStreamTrigger",
- "deleteAfterProcess": false,
- "connectionStringSetting": "redisLocalhost",
- "key": "streamTest",
- "pollingIntervalInMs": 1000,
- "messagesPerWorker": 100,
- "count": 10,
- "name": "entry",
- "direction": "in"
- }
- ],
- "scriptFile": "__init__.py"
-}
-```
--
-### Return values
-
-All triggers return a `RedisMessageModel` object that has two fields:
--- `Trigger`: The pubsub channel, list key, or stream key that the function is listening to.-- `Message`: The pubsub message, list element, or stream element.--
-```csharp
-namespace Microsoft.Azure.WebJobs.Extensions.Redis
-{
- public class RedisMessageModel
- {
- public string Trigger { get; set; }
- public string Message { get; set; }
- }
-}
-```
--
-```java
-public class RedisMessageModel {
- public String Trigger;
- public String Message;
-}
-```
---
-```python
-class RedisMessageModel:
- def __init__(self, trigger, message):
- self.Trigger = trigger
- self.Message = message
-```
--
-## Next steps
--- [Introduction to Azure Functions](/azure/azure-functions/functions-overview)-- [Get started with Azure Functions triggers in Azure Cache for Redis](cache-tutorial-functions-getting-started.md)-- [Using Azure Functions and Azure Cache for Redis to create a write-behind cache](cache-tutorial-write-behind.md)
azure-fluid-relay Connect Fluid Azure Service https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/connect-fluid-azure-service.md
The sections below will explain how to use `AzureClient` in your own application
## Connecting to the service
-To connect to an Azure Fluid Relay instance, you first need to create an `AzureClient`. You must provide some configuration parameters including the tenant ID, service URL, and a token provider to generate the JSON Web Token (JWT) that will be used to authorize the current user against the service. The [@fluidframework/test-client-utils](https://fluidframework.com/docs/apis/test-client-utils/) package provides an [InsecureTokenProvider](https://fluidframework.com/docs/apis/test-client-utils/insecuretokenprovider-class) that can be used for development purposes.
+To connect to an Azure Fluid Relay instance, you first need to create an `AzureClient`. You must provide some configuration parameters including the tenant ID, service URL, and a token provider to generate the JSON Web Token (JWT) that will be used to authorize the current user against the service. The [@fluidframework/test-client-utils](https://fluidframework.com/docs/apis/test-client-utils/) package provides an InsecureTokenProvider that can be used for development purposes.
> [!CAUTION] > The `InsecureTokenProvider` should only be used for development purposes because **using it exposes the tenant key secret in your client-side code bundle.** This must be replaced with an implementation of [ITokenProvider](https://fluidframework.com/docs/apis/azure-client/itokenprovider-interface/) that fetches the token from your own backend service that is responsible for signing it with the tenant key. An example implementation is [AzureFunctionTokenProvider](https://fluidframework.com/docs/apis/azure-client/azurefunctiontokenprovider-class). For more information, see [How to: Write a TokenProvider with an Azure Function](../how-tos/azure-function-token-provider.md). Note that the `id` and `name` fields are arbitrary.
azure-fluid-relay Deploy Fluid Static Web Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/deploy-fluid-static-web-apps.md
If you don't have an Azure subscription, [create a free trial account](https://a
## Connect to Azure Fluid Relay
-You can connect to Azure Fluid Relay by providing the tenant ID and key that is uniquely generated for you when creating the Azure resource. You can build your own token provider implementation or you can use the two token provider implementations that the Fluid Framework provides: [InsecureTokenProvider](https://fluidframework.com/docs/apis/test-client-utils/insecuretokenprovider-class) and [AzureFunctionTokenProvider](https://fluidframework.com/docs/apis/azure-client/azurefunctiontokenprovider-class).
+You can connect to Azure Fluid Relay by providing the tenant ID and key that is uniquely generated for you when creating the Azure resource. You can build your own token provider implementation or you can use the two token provider implementations that the Fluid Framework provides an [AzureFunctionTokenProvider](https://fluidframework.com/docs/apis/azure-client/azurefunctiontokenprovider-class).
To learn more about using InsecureTokenProvider for local development, see [Connecting to the service](connect-fluid-azure-service.md#connecting-to-the-service) and [Authentication and authorization in your app](../concepts/authentication-authorization.md#the-token-provider).
azure-functions Dotnet Isolated Process Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/dotnet-isolated-process-guide.md
This section shows how to work with the underlying HTTP request and response obj
> [!NOTE] > Not all features of ASP.NET Core are exposed by this model. Specifically, the ASP.NET Core middleware pipeline and routing capabilities are not available.
-1. Add a reference to the [Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore NuGet package, version 1.0.0-preview2 or later](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore/1.0.0-preview2) to your project.
+1. Add a reference to the [Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore NuGet package, version 1.0.0-preview4 or later](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore/1.0.0-preview4) to your project.
You must also update your project to use [version 1.11.0 or later of Microsoft.Azure.Functions.Worker.Sdk](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Sdk/1.11.0) and [version 1.16.0 or later of Microsoft.Azure.Functions.Worker](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker/1.16.0).
azure-functions Azfd0002 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/errors-diagnostics/diagnostic-events/azfd0002.md
description: "AZFD0002: Value of AzureWebJobsStorage app setting is invalid." - Previously updated : 09/03/2022+ Last updated : 08/10/2023 # AZFD0002: Value of AzureWebJobsStorage app setting is invalid.
The `AzureWebJobsStorage` app setting is used to store the connection string of
For more information, see [AzureWebJobsStorage](../../functions-app-settings.md#azurewebjobsstorage). ## How to resolve the event
-Update the value of the `AzureWebJobsStorage` app setting on your function app with a valid storage account connection string.
+Update the value of the `AzureWebJobsStorage` app setting on your function app with a valid storage account connection string. For more information, see [Troubleshoot error: "Azure Functions Runtime is unreachable"](../../functions-recover-storage-account.md).
## When to suppress the event
-You should suppress this event when your function app uses an Azure Key Vault reference in the `AzureWebjobsStorage` app setting instead of a connection string. For more information, see [Source application settings from Key Vault](../../../app-service/app-service-key-vault-references.md?toc=%2Fazure%2Fazure-functions%2Ftoc.json#source-app-settings-from-key-vault)
+You should suppress this event when your function app uses an Azure Key Vault reference in the `AzureWebjobsStorage` app setting instead of a connection string. For more information, see [Source application settings from Key Vault](../../../app-service/app-service-key-vault-references.md?toc=%2Fazure%2Fazure-functions%2Ftoc.json#source-app-settings-from-key-vault)
azure-functions Functions Bindings Cache Trigger Redislist https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-bindings-cache-trigger-redislist.md
+
+ Title: Using RedisListTrigger Azure Function (preview)
+description: Learn how to use RedisListTrigger Azure Functions
+
+zone_pivot_groups: programming-languages-set-functions-lang-workers
++++ Last updated : 08/07/2023+++
+# RedisListTrigger Azure Function (preview)
+
+The `RedisListTrigger` pops new elements from a list and surfaces those entries to the function.
+
+## Scope of availability for functions triggers
+
+|Tier | Basic | Standard, Premium | Enterprise, Enterprise Flash |
+||::|::|::|
+| Lists | Yes | Yes | Yes |
+
+> [!IMPORTANT]
+> Redis triggers are not currently supported on Azure Functions Consumption plan.
+>
+
+## Example
++
+The following sample polls the key `listTest` at a localhost Redis instance at `127.0.0.1:6379`:
+
+### [In-process](#tab/in-process)
+
+```csharp
+[FunctionName(nameof(ListsTrigger))]
+public static void ListsTrigger(
+ [RedisListTrigger("Redis", "listTest")] string entry,
+ ILogger logger)
+{
+ logger.LogInformation($"The entry pushed to the list listTest: '{entry}'");
+}
+```
+
+### [Isolated process](#tab/isolated-process)
+
+The isolated process examples aren't available in preview.
++++
+The following sample polls the key `listTest` at a localhost Redis instance at `redisLocalhost`:
+
+```java
+ @FunctionName("ListTrigger")
+ public void ListTrigger(
+ @RedisListTrigger(
+ name = "entry",
+ connectionStringSetting = "redisLocalhost",
+ key = "listTest",
+ pollingIntervalInMs = 100,
+ messagesPerWorker = 10,
+ count = 1,
+ listPopFromBeginning = false)
+ String entry,
+ final ExecutionContext context) {
+ context.getLogger().info(entry);
+ }
+```
++
+### [v3](#tab/javasscript-v1)
+
+Each sample uses the same `index.js` file, with binding data in the `function.json` file.
+
+Here's the `index.js` file:
+
+```javascript
+module.exports = async function (context, entry) {
+ context.log(entry);
+}
+```
+
+From `function.json`, here's the binding data:
+
+```javascript
+{
+ "bindings": [
+ {
+ "type": "redisListTrigger",
+ "listPopFromBeginning": true,
+ "connectionStringSetting": "redisLocalhost",
+ "key": "listTest",
+ "pollingIntervalInMs": 1000,
+ "messagesPerWorker": 100,
+ "count": 10,
+ "name": "entry",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "index.js"
+}
+```
+
+### [v4](#tab/javascript-v2)
+
+The JavaScript v4 programming model example isn't available in preview.
++++
+Each sample uses the same `run.ps1` file, with binding data in the `function.json` file.
+
+Here's the `run.ps1` file:
+
+```powershell
+param($entry, $TriggerMetadata)
+Write-Host $entry
+
+```
+
+From `function.json`, here's the binding data:
+
+```powershell
+{
+ "bindings": [
+ {
+ "type": "redisListTrigger",
+ "listPopFromBeginning": true,
+ "connectionStringSetting": "redisLocalhost",
+ "key": "listTest",
+ "pollingIntervalInMs": 1000,
+ "messagesPerWorker": 100,
+ "count": 10,
+ "name": "entry",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "run.ps1"
+}
+```
++
+Each sample uses the same `__init__.py` file, with binding data in the `function.json` file.
+
+### [v1](#tab/python-v1)
+
+The Python v1 programming model requires you to define bindings in a separate _function.json_ file in the function folder. For more information, see the [Python developer guide](functions-reference-python.md?pivots=python-mode-configuration#programming-model).
+
+Here's the `__init__.py` file:
+
+```python
+import logging
+
+def main(entry: str):
+ logging.info(entry)
+```
+
+From `function.json`, here's the binding data:
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisListTrigger",
+ "listPopFromBeginning": true,
+ "connectionStringSetting": "redisLocalhost",
+ "key": "listTest",
+ "pollingIntervalInMs": 1000,
+ "messagesPerWorker": 100,
+ "count": 10,
+ "name": "entry",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "__init__.py"
+}
+```
+
+### [v2](#tab/python-v2)
+
+The Python v2 programming model example isn't available in preview.
++++
+## Attributes
+
+| Parameter | Description | Required | Default |
+|||:--:|--:|
+| `ConnectionStringSetting` | Name of the setting in the `appsettings` that holds the cache connection string (for example, `<cacheName>.redis.cache.windows.net:6380,password=...`). | Yes | |
+| `Key` | Key to read from. This field can be resolved using `INameResolver`. | Yes | |
+| `PollingIntervalInMs` | How often to poll Redis in milliseconds. | Optional | `1000` |
+| `MessagesPerWorker` | How many messages each functions instance should process. Used to determine how many instances the function should scale to. | Optional | `100` |
+| `Count` | Number of entries to pop from Redis at one time. These are processed in parallel. Only supported on Redis 6.2+ using the `COUNT` argument in [`LPOP`](https://redis.io/commands/lpop/) and [`RPOP`](https://redis.io/commands/rpop/). | Optional | `10` |
+| `ListPopFromBeginning` | Determines whether to pop entries from the beginning using [`LPOP`](https://redis.io/commands/lpop/), or to pop entries from the end using [`RPOP`](https://redis.io/commands/rpop/). | Optional | `true` |
++
+## Annotations
+
+| Parameter | Description | Required | Default |
+||-|:--:|--:|
+| `name` | "entry" | | |
+| `connectionStringSetting` | The name of the setting in the `appsettings` that contains the cache connection string. For example: `<cacheName>.redis.cache.windows.net:6380,password...` | Yes | |
+| `key` | This field can be resolved using INameResolver. | Yes | |
+| `pollingIntervalInMs` | How often to poll Redis in milliseconds. | Optional | `1000` |
+| `messagesPerWorker` | How many messages each functions instance should process. Used to determine how many instances the function should scale to. | Optional | `100` |
+| `count` | Number of entries to read from Redis at one time. These are processed in parallel. | Optional | `10` |
+| `listPopFromBeginning` | Whether to delete the stream entries after the function has run. | Yes | `true` |
++
+## Configuration
+
+The following table explains the binding configuration properties that you set in the function.json file.
+
+| function.json Property | Description | Optional | Default |
+||-|:--:|--:|
+| `type` | Name of the trigger. | No | |
+| `listPopFromBeginning` | Whether to delete the stream entries after the function has run. Set to `true`. | Yes | `true` |
+| `connectionString` | The name of the setting in the `appsettings` that contains the cache connection string. For example: `<cacheName>.redis.cache.windows.net:6380,password...` | No | |
+| `key` | This field can be resolved using `INameResolver`. | No | |
+| `pollingIntervalInMs` | How often to poll Redis in milliseconds. | Yes | `1000` |
+| `messagesPerWorker` | How many messages each functions instance should process. Used to determine how many instances the function should scale to. | Yes | `100` |
+| `count` | Number of entries to read from the cache at one time. These are processed in parallel. | Yes | `10` |
+| `name` | ? | Yes | |
+| `direction` | Set to `in`. | No | |
++
+See the Example section for complete examples.
+
+## Usage
+
+The `RedisListTrigger` pops new elements from a list and surfaces those entries to the function. The trigger polls Redis at a configurable fixed interval, and uses [`LPOP`](https://redis.io/commands/lpop/) and [`RPOP`](https://redis.io/commands/rpop/) to pop entries from the lists.
+
+### Output
++
+> [!NOTE]
+> Once the `RedisListTrigger` becomes generally available, the following information will be moved to a dedicated Output page.
+
+StackExchange.Redis.RedisValue
+
+| Output Type | Description |
+|||
+| [`StackExchange.Redis.RedisValue`](https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/RedisValue.cs) | `string`, `byte[]`, `ReadOnlyMemory<byte>`: The entry from the list. |
+| `Custom` | The trigger uses Json.NET serialization to map the message from the channel from a `string` to a custom type. |
+++
+> [!NOTE]
+> Once the `RedisListTrigger` becomes generally available, the following information will be moved to a dedicated Output page.
+
+| Output Type | Description |
+|-|--|
+| `byte[]` | The message from the channel. |
+| `string` | The message from the channel. |
+| `Custom` | The trigger uses Json.NET serialization to map the message from the channel from a `string` into a custom type. |
++++++
+## Related content
+
+- [Introduction to Azure Functions](functions-overview.md)
+- [Tutorial: Get started with Azure Functions triggers in Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-functions-getting-started)
+- [Tutorial: Create a write-behind cache by using Azure Functions and Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-write-behind)
+- [Redis lists](https://redis.io/docs/data-types/lists/)
azure-functions Functions Bindings Cache Trigger Redispubsub https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-bindings-cache-trigger-redispubsub.md
+
+ Title: Using RedisPubSubTrigger Azure Function (preview)
+description: Learn how to use RedisPubSubTrigger Azure Function
+
+zone_pivot_groups: programming-languages-set-functions-lang-workers
++++ Last updated : 08/07/2023+++
+# RedisPubSubTrigger Azure Function (preview)
+
+Redis features [publish/subscribe functionality](https://redis.io/docs/interact/pubsub/) that enables messages to be sent to Redis and broadcast to subscribers.
+
+## Scope of availability for functions triggers
+
+|Tier | Basic | Standard, Premium | Enterprise, Enterprise Flash |
+||::|::|::|
+|Pub/Sub Trigger | Yes | Yes | Yes |
+
+> [!WARNING]
+> This trigger isn't supported on a [consumption plan](/azure/azure-functions/consumption-plan) because Redis PubSub requires clients to always be actively listening to receive all messages. For consumption plans, your function might miss certain messages published to the channel.
+>
+
+## Examples
+++
+### [In-process](#tab/in-process)
+
+This sample listens to the channel `pubsubTest`.
+
+```csharp
+[FunctionName(nameof(PubSubTrigger))]
+public static void PubSubTrigger(
+ [RedisPubSubTrigger("redisConnectionString", "pubsubTest")] string message,
+ ILogger logger)
+{
+ logger.LogInformation(message);
+}
+```
+
+This sample listens to any keyspace notifications for the key `myKey`.
+
+```csharp
+
+[FunctionName(nameof(KeyspaceTrigger))]
+public static void KeyspaceTrigger(
+ [RedisPubSubTrigger("redisConnectionString", "__keyspace@0__:myKey")] string message,
+ ILogger logger)
+{
+ logger.LogInformation(message);
+}
+```
+
+This sample listens to any `keyevent` notifications for the delete command [`DEL`](https://redis.io/commands/del/).
+
+```csharp
+[FunctionName(nameof(KeyeventTrigger))]
+public static void KeyeventTrigger(
+ [RedisPubSubTrigger("redisConnectionString", "__keyevent@0__:del")] string message,
+ ILogger logger)
+{
+ logger.LogInformation(message);
+}
+```
+
+### [Isolated process](#tab/isolated-process)
+
+The isolated process examples aren't available in preview.
+
+```csharp
+//TBD
+```
++++
+This sample listens to the channel `pubsubTest`.
+
+```java
+@FunctionName("PubSubTrigger")
+ public void PubSubTrigger(
+ @RedisPubSubTrigger(
+ name = "message",
+ connectionStringSetting = "redisConnectionString",
+ channel = "pubsubTest")
+ String message,
+ final ExecutionContext context) {
+ context.getLogger().info(message);
+ }
+```
+
+This sample listens to any keyspace notifications for the key `myKey`.
+
+```java
+@FunctionName("KeyspaceTrigger")
+ public void KeyspaceTrigger(
+ @RedisPubSubTrigger(
+ name = "message",
+ connectionStringSetting = "redisConnectionString",
+ channel = "__keyspace@0__:myKey")
+ String message,
+ final ExecutionContext context) {
+ context.getLogger().info(message);
+ }
+```
+
+This sample listens to any `keyevent` notifications for the delete command [`DEL`](https://redis.io/commands/del/).
+
+```java
+ @FunctionName("KeyeventTrigger")
+ public void KeyeventTrigger(
+ @RedisPubSubTrigger(
+ name = "message",
+ connectionStringSetting = "redisConnectionString",
+ channel = "__keyevent@0__:del")
+ String message,
+ final ExecutionContext context) {
+ context.getLogger().info(message);
+ }
+```
++
+### [v3](#tab/javasscript-v1)
+
+Each sample uses the same `index.js` file, with binding data in the `function.json` file determining on which channel the trigger occurs.
+
+Here's the `index.js` file:
+
+```javascript
+module.exports = async function (context, message) {
+ context.log(message);
+}
+```
+
+From `function.json`:
+
+Here's binding data to listen to the channel `pubsubTest`.
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "pubsubTest",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "index.js"
+}
+```
+
+Here's binding data to listen to keyspace notifications for the key `myKey`.
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "__keyspace@0__:myKey",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "index.js"
+}
+```
+
+Here's binding data to listen to `keyevent` notifications for the delete command [`DEL`](https://redis.io/commands/del/).
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "__keyevent@0__:del",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "index.js"
+}
+```
+### [v4](#tab/javascript-v2)
+
+The JavaScript v4 programming model example isn't available in preview.
+++
+Each sample uses the same `run.ps1` file, with binding data in the `function.json` file determining on which channel the trigger occurs.
+
+Here's the `run.ps1` file:
+
+```powershell
+param($message, $TriggerMetadata)
+Write-Host $message
+```
+
+From `function.json`:
+
+Here's binding data to listen to the channel `pubsubTest`.
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "pubsubTest",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "run.ps1"
+}
+```
+
+Here's binding data to listen to keyspace notifications for the key `myKey`.
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "__keyspace@0__:myKey",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "run.ps1"
+}
+```
+
+Here's binding data to listen to `keyevent` notifications for the delete command [`DEL`](https://redis.io/commands/del/).
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "__keyevent@0__:del",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "run.ps1"
+}
+```
++
+### [v1](#tab/python-v1)
+
+The Python v1 programming model requires you to define bindings in a separate _function.json_ file in the function folder. For more information, see the [Python developer guide](functions-reference-python.md?pivots=python-mode-configuration#programming-model).
+
+Each sample uses the same `__init__.py` file, with binding data in the `function.json` file determining on which channel the trigger occurs.
+
+Here's the `__init__.py` file:
+
+```python
+import logging
+
+def main(message: str):
+ logging.info(message)
+```
+
+From `function.json`:
+
+Here's binding data to listen to the channel `pubsubTest`.
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "pubsubTest",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "__init__.py"
+}
+```
+
+Here's binding data to listen to keyspace notifications for the key `myKey`.
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "__keyspace@0__:myKey",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "__init__.py"
+}
+```
+
+Here's binding data to listen to `keyevent` notifications for the delete command [`DEL`](https://redis.io/commands/del/).
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisPubSubTrigger",
+ "connectionStringSetting": "redisConnectionString",
+ "channel": "__keyevent@0__:del",
+ "name": "message",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "__init__.py"
+}
+```
+
+### [v2](#tab/python-v2)
+
+The Python v2 programming model example isn't available in preview.
++++
+## Attributes
+
+| Parameter | Description | Required | Default |
+||--|:--:| --:|
+| `ConnectionStringSetting` | Name of the setting in the `appsettings` that holds the cache connection string. For example,`<cacheName>.redis.cache.windows.net:6380,password=...`. | Yes | |
+| `Channel` | The pub sub channel that the trigger should listen to. Supports glob-style channel patterns. This field can be resolved using `INameResolver`. | Yes | |
++
+## Annotations
+
+| Parameter | Description | Required | Default |
+||--|: --:| --:|
+| `name` | Name of the variable holding the value returned by the function. | Yes | |
+| `connectionStringSetting` | Name of the setting in the `appsettings` that holds the cache connection string (for example, `<cacheName>.redis.cache.windows.net:6380,password=...`) | Yes | |
+| `channel` | The pub sub channel that the trigger should listen to. Supports glob-style channel patterns. | Yes | |
++
+## Configuration
+
+| function.json property | Description | Required | Default |
+||--| :--:| --:|
+| `type` | Trigger type. For the pub sub trigger, this is `redisPubSubTrigger`. | Yes | |
+| `connectionStringSetting` | Name of the setting in the `appsettings` that holds the cache connection string (for example, `<cacheName>.redis.cache.windows.net:6380,password=...`) | Yes | |
+| `channel` | Name of the pub sub channel that is being subscribed to | Yes | |
+| `name` | Name of the variable holding the value returned by the function. | Yes | |
+| `direction` | Must be set to `in`. | Yes | |
++
+>[!IMPORTANT]
+>The `connectionStringSetting` parameter does not hold the Redis cache connection string itself. Instead, it points to the name of the environment variable that holds the connection string. This makes the application more secure. For more information, see [Redis connection string](functions-bindings-cache.md#redis-connection-string).
+>
+
+## Usage
+
+Redis features [publish/subscribe functionality](https://redis.io/docs/interact/pubsub/) that enables messages to be sent to Redis and broadcast to subscribers. The `RedisPubSubTrigger` enables Azure Functions to be triggered on pub/sub activity. The `RedisPubSubTrigger`subscribes to a specific channel pattern using [`PSUBSCRIBE`](https://redis.io/commands/psubscribe/), and surfaces messages received on those channels to the function.
+
+### Prerequisites and limitations
+
+- The `RedisPubSubTrigger` isn't capable of listening to [keyspace notifications](https://redis.io/docs/manual/keyspace-notifications/) on clustered caches.
+- Basic tier functions don't support triggering on `keyspace` or `keyevent` notifications through the `RedisPubSubTrigger`.
+- The `RedisPubSubTrigger` isn't supported on a [consumption plan](/azure/azure-functions/consumption-plan) because Redis PubSub requires clients to always be actively listening to receive all messages. For consumption plans, your function might miss certain messages published to the channel.
+- Functions with the `RedisPubSubTrigger` shouldn't be scaled out to multiple instances. Each instance listens and processes each pub sub message, resulting in duplicate processing
+
+> [!WARNING]
+> This trigger isn't supported on a [consumption plan](/azure/azure-functions/consumption-plan) because Redis PubSub requires clients to always be actively listening to receive all messages. For consumption plans, your function might miss certain messages published to the channel.
+>
+
+## Triggering on keyspace notifications
+
+Redis offers a built-in concept called [keyspace notifications](https://redis.io/docs/manual/keyspace-notifications/). When enabled, this feature publishes notifications of a wide range of cache actions to a dedicated pub/sub channel. Supported actions include actions that affect specific keys, called _keyspace notifications_, and specific commands, called _keyevent notifications_. A huge range of Redis actions are supported, such as `SET`, `DEL`, and `EXPIRE`. The full list can be found in the [keyspace notification documentation](https://redis.io/docs/manual/keyspace-notifications/).
+
+The `keyspace` and `keyevent` notifications are published with the following syntax:
+
+```
+PUBLISH __keyspace@0__:<affectedKey> <command>
+PUBLISH __keyevent@0__:<affectedCommand> <key>
+```
+
+Because these events are published on pub/sub channels, the `RedisPubSubTrigger` is able to pick them up. See the [RedisPubSubTrigger](functions-bindings-cache-trigger-redispubsub.md) section for more examples.
+
+> [!IMPORTANT]
+> In Azure Cache for Redis, `keyspace` events must be enabled before notifications are published. For more information, see [Advanced Settings](/azure/azure-cache-for-redis/cache-configure#keyspace-notifications-advanced-settings).
+
+## Output
++
+> [!NOTE]
+> Once the `RedisPubSubTrigger` becomes generally available, the following information will be moved to a dedicated Output page.
++
+| Output Type | Description|
+|||
+| [`StackExchange.Redis.ChannelMessage`](https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/ChannelMessageQueue.cs)| The value returned by `StackExchange.Redis`. |
+| [`StackExchange.Redis.RedisValue`](https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/RedisValue.cs)| `string`, `byte[]`, `ReadOnlyMemory<byte>`: The message from the channel. |
+| `Custom`| The trigger uses Json.NET serialization to map the message from the channel from a `string` into a custom type. |
+++
+> [!NOTE]
+> Once the `RedisPubSubTrigger` becomes generally available, the following information will be moved to a dedicated Output page.
+
+| Output Type | Description |
+|-|--|
+| `byte[]` | The message from the channel. |
+| `string` | The message from the channel. |
+| `Custom` | The trigger uses Json.NET serialization to map the message from the channel from a `string` into a custom type. |
++++++
+## Related content
+
+- [Introduction to Azure Functions](functions-overview.md)
+- [Tutorial: Get started with Azure Functions triggers in Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-functions-getting-started)
+- [Tutorial: Create a write-behind cache by using Azure Functions and Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-write-behind)
+- [Redis pub sub messages](https://redis.io/docs/manual/pubsub/)
azure-functions Functions Bindings Cache Trigger Redisstream https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-bindings-cache-trigger-redisstream.md
+
+ Title: Using RedisStreamTrigger Azure Function (preview)
+description: Learn how to use RedisStreamTrigger Azure Function
+
+zone_pivot_groups: programming-languages-set-functions-lang-workers
++++ Last updated : 08/07/2023+++
+# RedisStreamTrigger Azure Function (preview)
+
+The `RedisStreamTrigger` reads new entries from a stream and surfaces those elements to the function.
+
+| Tier | Basic | Standard, Premium | Enterprise, Enterprise Flash |
+||:--:|:--:|:-:|
+| Streams | Yes | Yes | Yes |
+
+> [!IMPORTANT]
+> Redis triggers are not currently supported on Azure Functions Consumption plan.
+>
+
+## Example
+++
+### [In-process](#tab/in-process)
+
+```csharp
+
+[FunctionName(nameof(StreamsTrigger))]
+public static void StreamsTrigger(
+ [RedisStreamTrigger("Redis", "streamTest")] string entry,
+ ILogger logger)
+{
+ logger.LogInformation($"The entry pushed to the list listTest: '{entry}'");
+}
+```
+
+### [Isolated process](#tab/isolated-process)
+
+The isolated process examples aren't available in preview.
+
+```csharp
+//TBD
+```
++++
+```java
+
+ @FunctionName("StreamTrigger")
+ public void StreamTrigger(
+ @RedisStreamTrigger(
+ name = "entry",
+ connectionStringSetting = "redisLocalhost",
+ key = "streamTest",
+ pollingIntervalInMs = 100,
+ messagesPerWorker = 10,
+ count = 1,
+ deleteAfterProcess = true)
+ String entry,
+ final ExecutionContext context) {
+ context.getLogger().info(entry);
+ }
+
+```
++
+### [v3](#tab/javasscript-v1)
+
+Each sample uses the same `index.js` file, with binding data in the `function.json` file.
+
+Here's the `index.js` file:
+
+```javascript
+module.exports = async function (context, entry) {
+ context.log(entry);
+}
+```
+
+From `function.json`, here's the binding data:
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisStreamTrigger",
+ "deleteAfterProcess": false,
+ "connectionStringSetting": "redisLocalhost",
+ "key": "streamTest",
+ "pollingIntervalInMs": 1000,
+ "messagesPerWorker": 100,
+ "count": 10,
+ "name": "entry",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "index.js"
+}
+```
+
+### [v4](#tab/javascript-v2)
+
+The JavaScript v4 programming model example isn't available in preview.
++++
+Each sample uses the same `run.ps1` file, with binding data in the `function.json` file.
+
+Here's the `run.ps1` file:
+
+```powershell
+param($entry, $TriggerMetadata)
+Write-Host ($entry | ConvertTo-Json)
+```
+
+From `function.json`, here's the binding data:
+
+```powershell
+{
+ "bindings": [
+ {
+ "type": "redisStreamTrigger",
+ "deleteAfterProcess": false,
+ "connectionStringSetting": "redisLocalhost",
+ "key": "streamTest",
+ "pollingIntervalInMs": 1000,
+ "messagesPerWorker": 100,
+ "count": 10,
+ "name": "entry",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "run.ps1"
+}
+```
++
+### [v1](#tab/python-v1)
+
+The Python v1 programming model requires you to define bindings in a separate _function.json_ file in the function folder. For more information, see the [Python developer guide](functions-reference-python.md?pivots=python-mode-configuration#programming-model).
+
+Each sample uses the same `__init__.py` file, with binding data in the `function.json` file.
+
+Here's the `__init__.py` file:
+
+```python
+import logging
+
+def main(entry: str):
+ logging.info(entry)
+```
+
+From `function.json`, here's the binding data:
+
+```json
+{
+ "bindings": [
+ {
+ "type": "redisStreamTrigger",
+ "deleteAfterProcess": false,
+ "connectionStringSetting": "redisLocalhost",
+ "key": "streamTest",
+ "pollingIntervalInMs": 1000,
+ "messagesPerWorker": 100,
+ "count": 10,
+ "name": "entry",
+ "direction": "in"
+ }
+ ],
+ "scriptFile": "__init__.py"
+}
+```
+
+### [v2](#tab/python-v2)
+
+The Python v2 programming model example isn't available in preview.
++++
+## Attributes
+
+| Parameters | Description | Required | Default |
+||-|:--:|--:|
+| `ConnectionStringSetting` | The name of the setting in the `appsettings` that contains cache connection string For example: `<cacheName>.redis.cache.windows.net:6380,password=...` | Yes | |
+| `Key` | Key to read from. | Yes | |
+| `PollingIntervalInMs` | How often to poll the Redis server in milliseconds. | Optional | `1000` |
+| `MessagesPerWorker` | The number of messages each functions worker should process. Used to determine how many workers the function should scale to. | Optional | `100` |
+| `Count` | Number of elements to pull from Redis at one time. | Optional | `10` |
+| `DeleteAfterProcess` | Indicates if the function deletes the stream entries after processing. | Optional | `false` |
++
+## Annotations
+
+| Parameter | Description | Required | Default |
+||-|:--:|--:|
+| `name` | `entry` | Yes | |
+| `connectionStringSetting` | The name of the setting in the `appsettings` that contains cache connection string For example: `<cacheName>.redis.cache.windows.net:6380,password=...` | Yes | |
+| `key` | Key to read from. | Yes | |
+| `pollingIntervalInMs` | How frequently to poll Redis, in milliseconds. | Optional | `1000` |
+| `messagesPerWorker` | The number of messages each functions worker should process. It's used to determine how many workers the function should scale to | Optional | `100` |
+| `count` | Number of entries to read from Redis at one time. These are processed in parallel. | Optional | `10` |
+| `deleteAfterProcess` | Whether to delete the stream entries after the function has run. | Optional | `false` |
++
+## Configuration
+
+The following table explains the binding configuration properties that you set in the function.json file.
+
+| function.json Properties | Description | Required | Default |
+||-|:--:|--:|
+| `type` | | Yes | |
+| `deleteAfterProcess` | | Optional | `false` |
+| `connectionStringSetting` | The name of the setting in the `appsettings` that contains cache connection string For example: `<cacheName>.redis.cache.windows.net:6380,password=...` | Yes | |
+| `key` | The key to read from. | Yes | |
+| `pollingIntervalInMs` | How often to poll Redis in milliseconds. | Optional | `1000` |
+| `messagesPerWorker` | (optional) The number of messages each functions worker should process. Used to determine how many workers the function should scale | Optional | `100` |
+| `count` | Number of entries to read from Redis at one time. These are processed in parallel. | Optional | `10` |
+| `name` | | Yes | |
+| `direction` | | Yes | |
++
+See the Example section for complete examples.
+
+## Usage
+
+The `RedisStreamTrigger` Azure Function reads new entries from a stream and surfaces those entries to the function.
+
+The trigger polls Redis at a configurable fixed interval, and uses [`XREADGROUP`](https://redis.io/commands/xreadgroup/) to read elements from the stream.
+
+The consumer group for all function instances is the `ID` of the function. For example, `Microsoft.Azure.WebJobs.Extensions.Redis.Samples.RedisSamples.StreamTrigger` for the `StreamTrigger` sample. Each function creates a new random GUID to use as its consumer name within the group to ensure that scaled out instances of the function don't read the same messages from the stream.
+
+### Output
++
+> [!NOTE]
+> Once the `RedisStreamTrigger` becomes generally available, the following information will be moved to a dedicated Output page.
+
+| Output Type | Description |
+|-|--|
+| [`StackExchange.Redis.ChannelMessage`](https://github.com/StackExchange/StackExchange.Redis/blob/main/src/StackExchange.Redis/ChannelMessageQueue.cs) | The value returned by `StackExchange.Redis`. |
+| `StackExchange.Redis.NameValueEntry[]`, `Dictionary<string, string>` | The values contained within the entry. |
+| `string, byte[], ReadOnlyMemory<byte>` | The stream entry serialized as JSON (UTF-8 encoded for byte types) in the following format: `{"Id":"1658354934941-0","Values":{"field1":"value1","field2":"value2","field3":"value3"}}` |
+| `Custom` | The trigger uses Json.NET serialization to map the message from the channel from a `string` into a custom type. |
+++
+> [!NOTE]
+> Once the `RedisStreamTrigger` becomes generally available, the following information will be moved to a dedicated Output page.
+
+| Output Type | Description |
+|-|--|
+| `byte[]` | The message from the channel. |
+| `string` | The message from the channel. |
+| `Custom` | The trigger uses Json.NET serialization to map the message from the channel from a `string` into a custom type. |
+++++
+## Related content
+
+- [Introduction to Azure Functions](functions-overview.md)
+- [Tutorial: Get started with Azure Functions triggers in Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-functions-getting-started)
+- [Using Azure Functions and Azure Cache for Redis to create a write-behind cache](/azure/azure-cache-for-redis/cache-tutorial-write-behind)
+- [Redis streams](https://redis.io/docs/data-types/streams/)
azure-functions Functions Bindings Cache https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-bindings-cache.md
+
+ Title: Using Azure Functions for Azure Cache for Redis (preview)
+description: Learn how to use Azure Functions Azure Cache for Redis
+
+zone_pivot_groups: programming-languages-set-functions-lang-workers
++++ Last updated : 07/26/2023+++
+# Overview of Azure functions for Azure Cache for Redis (preview)
+
+This article describes how to use Azure Cache for Redis with Azure Functions to create optimized serverless and event-driven architectures.
+
+Azure Functions provide an event-driven programming model where triggers and bindings are key features. With Azure Functions, you can easily build event-driven serverless applications. Azure Cache for Redis provides a set of building blocks and best practices for building distributed applications, including microservices, state management, pub/sub messaging, and more.
+
+Azure Cache for Redis can be used as a trigger for Azure Functions, allowing you to initiate a serverless workflow. This functionality can be highly useful in data architectures like a write-behind cache, or any event-based architectures.
+
+You can integrate Azure Cache for Redis and Azure Functions to build functions that react to events from Azure Cache for Redis or external systems.
+
+| Action | Direction | Type | Preview |
+||--|||
+| Triggers on Redis pub sub messages | N/A | [RedisPubSubTrigger](functions-bindings-cache-trigger-redispubsub.md) | Yes|
+| Triggers on Redis lists | N/A | [RedisListsTrigger](functions-bindings-cache-trigger-redislist.md) | Yes |
+| Triggers on Redis streams | N/A | [RedisStreamsTrigger](functions-bindings-cache-trigger-redisstream.md) | Yes |
+
+## Scope of availability for functions triggers
+
+|Tier | Basic | Standard, Premium | Enterprise, Enterprise Flash |
+||::|::|::|
+|Pub/Sub | Yes | Yes | Yes |
+|Lists | Yes | Yes | Yes |
+|Streams | Yes | Yes | Yes |
+
+> [!IMPORTANT]
+> Redis triggers are not currently supported on consumption functions.
+>
++
+## Install extension
+
+### [In-process](#tab/in-process)
+
+Functions run in the same process as the Functions host. To learn more, see [Develop C# class library functions using Azure Functions](functions-dotnet-class-library.md).
+
+Add the extension to your project by installing [this NuGet package](https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Redis).
+
+```bash
+dotnet add package Microsoft.Azure.WebJobs.Extensions.Redis --prerelease
+```
+
+### [Isolated process](#tab/isolated-process)
+
+Functions run in an isolated C# worker process. To learn more, see [Guide for running C# Azure Functions in an isolated worker process](dotnet-isolated-process-guide.md).
+
+Add the extension to your project by installing [this NuGet package](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Redis).
+
+```bash
+dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease
+```
+++
+## Install bundle
++
+1. Create a Java function project. You could use Maven:
+ `mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype -DjavaVersion=8`
+
+1. Add the extension bundle by adding or replacing the following code in your _host.json_ file:
+
+ ```json
+ {
+ "version": "2.0",
+ "extensionBundle": {
+ "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
+ "version": "[4.11.*, 5.0.0)"
+ }
+ }
+ ```
+
+ >[!WARNING]
+ >The Redis extension is currently only available in a preview bundle release.
+ >
+
+1. Add the Java library for Redis bindings to the `pom.xml` file:
+
+ ```xml
+ <dependency>
+ <groupId>com.microsoft.azure.functions</groupId>
+ <artifactId>azure-functions-java-library-redis</artifactId>
+ <version>${azure.functions.java.library.redis.version}</version>
+ </dependency>
+ ```
++
+1. Add the extension bundle by adding or replacing the following code in your _host.json_ file:
+
+ <!-- I don't see this in the samples. -->
+ ```json
+ {
+ "version": "2.0",
+ "extensionBundle": {
+ "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
+ "version": "[4.11.*, 5.0.0)"
+ }
+ }
+ ```
+
+ >[!WARNING]
+ >The Redis extension is currently only available in a preview bundle release.
+ >
++
+## Redis connection string
+
+Azure Cache for Redis triggers and bindings have a required property for the cache connection string. The connection string can be found on the [**Access keys**](/azure/azure-cache-for-redis/cache-configure#access-keys) menu in the Azure Cache for Redis portal. The Redis trigger or binding looks for an environmental variable holding the connection string with the name passed to the `ConnectionStringSetting` parameter. In local development, the `ConnectionStringSetting` can be defined using the [local.settings.json](/azure/azure-functions/functions-develop-local#local-settings-file) file. When deployed to Azure, [application settings](/azure/azure-functions/functions-how-to-use-azure-function-app-settings) can be used.
+
+## Related content
+
+- [Introduction to Azure Functions](/azure/azure-functions/functions-overview)
+- [Tutorial: Get started with Azure Functions triggers in Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-functions-getting-started)
+- [Tutorial: Create a write-behind cache by using Azure Functions and Azure Cache for Redis](/azure/azure-cache-for-redis/cache-tutorial-write-behind)
azure-functions Functions Bindings Http Webhook Trigger https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-bindings-http-webhook-trigger.md
The following example shows an HTTP trigger that returns a "hello world" respons
:::code language="csharp" source="~/azure-functions-dotnet-worker/samples/Extensions/Http/HttpFunction.cs" id="docsnippet_http_trigger":::
-The following example shows an HTTP trigger that returns a "hello, world" response as an [IActionResult], using [ASP.NET Core integration in .NET Isolated](./dotnet-isolated-process-guide.md#aspnet-core-integration-preview):
+The following example shows an HTTP trigger that returns a "hello, world" response as an [IActionResult], using [ASP.NET Core integration in .NET Isolated]:
```csharp [Function("HttpFunction")]
The [HttpTrigger](/java/api/com.microsoft.azure.functions.annotation.httptrigger
+ Any plain-old Java object (POJO) type. ::: zone-end + ### Payload
+# [In-process](#tab/in-process)
+ The trigger input type is declared as either `HttpRequest` or a custom type. If you choose `HttpRequest`, you get full access to the request object. For a custom type, the runtime tries to parse the JSON request body to set the object properties.
+# [Isolated process](#tab/isolated-process)
+
+The trigger input type is declared as one of the following types:
+
+| Type | Description |
+|-|-|
+| [HttpRequestData] | A projection of the full request object. |
+| [HttpRequest] | _Use of this type requires that the app is configured with [ASP.NET Core integration in .NET Isolated]._<br/>This gives you full access to the request object and overall HttpContext. |
+| A custom type | When the body of the request is JSON, the runtime will try to parse it to set the object properties. |
+
+When using `HttpRequestData` or `HttpRequest`, custom types can also be bound to additional parameters using `Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute`. Use of this attribute requires [`Microsoft.Azure.Functions.Worker.Extensions.Http` version 3.1.0 or later](https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Http). Note that this is a different type than the similar attribute in `Microsoft.AspNetCore.Mvc`, and when using ASP.NET Core integration, you will need a fully qualified reference or `using` statement. The following example shows how to use the attribute to get just the body contents while still having access to the full `HttpRequest`, using the ASP.NET Core integration:
+
+```csharp
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Azure.Functions.Worker;
+using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;
+
+namespace AspNetIntegration
+{
+ public class BodyBindingHttpTrigger
+ {
+ [Function(nameof(BodyBindingHttpTrigger))]
+ public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
+ [FromBody] Person person)
+ {
+ return new OkObjectResult(person);
+ }
+ }
+
+ public record Person(string Name, int Age);
+}
+```
++++ ### Customize the HTTP endpoint By default when you create a function for an HTTP trigger, the function is addressable with a route of the form:
If a function that uses the HTTP trigger doesn't complete within 230 seconds, th
- [Return an HTTP response from a function](./functions-bindings-http-webhook-output.md) [ClaimsPrincipal]: /dotnet/api/system.security.claims.claimsprincipal
+[ASP.NET Core integration in .NET Isolated]: ./dotnet-isolated-process-guide.md#aspnet-core-integration-preview
+[HttpRequestData]: /dotnet/api/microsoft.azure.functions.worker.http.httprequestdata
+[HttpResponseData]: /dotnet/api/microsoft.azure.functions.worker.http.httpresponsedata
+[HttpRequest]: /dotnet/api/microsoft.aspnetcore.http.httprequest
+[HttpResponse]: /dotnet/api/microsoft.aspnetcore.http.httpresponse
+[IActionResult]: /dotnet/api/microsoft.aspnetcore.mvc.iactionresult
azure-functions Functions Bindings Signalr Service Input https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-bindings-signalr-service-input.md
zone_pivot_groups: programming-languages-set-functions-lang-workers
# SignalR Service input binding for Azure Functions
-Before a client can connect to Azure SignalR Service, it must retrieve the service endpoint URL and a valid access token. The *SignalRConnectionInfo* input binding produces the SignalR Service endpoint URL and a valid token that are used to connect to the service. Because the token is time-limited and can be used to authenticate a specific user to a connection, you should not cache the token or share it between clients. An HTTP trigger using this binding can be used by clients to retrieve the connection information.
-
-For more information on how this binding is used to create a "negotiate" function that can be consumed by a SignalR client SDK, see the [Azure Functions development and configuration article](../azure-signalr/signalr-concept-serverless-development-config.md) in the SignalR Service concepts documentation.
+Before a client can connect to Azure SignalR Service, it must retrieve the service endpoint URL and a valid access token. The *SignalRConnectionInfo* input binding produces the SignalR Service endpoint URL and a valid token that are used to connect to the service. The token is time-limited and can be used to authenticate a specific user to a connection. Therefore, you shouldn't cache the token or share it between clients. Usually you use *SignalRConnectionInfo* with HTTP trigger for clients to retrieve the connection information.
+For more information on how to use this binding to create a "negotiate" function that is compatible with a SignalR client SDK, see [Azure Functions development and configuration with Azure SignalR Service](../azure-signalr/signalr-concept-serverless-development-config.md).
For information on setup and configuration details, see the [overview](functions-bindings-signalr-service.md). ## Example
public static SignalRConnectionInfo Negotiate(
# [Isolated process](#tab/isolated-process)
-The following example shows a SignalR trigger that reads a message string from one hub using a SignalR trigger and writes it to a second hub using an output binding. The data required to connect to the output binding is obtained as a `MyConnectionInfo` object from an input binding defined using a `SignalRConnectionInfo` attribute.
+The following example shows a [C# function](dotnet-isolated-process-guide.md) that acquires SignalR connection information using the input binding and returns it over HTTP.
:::code language="csharp" source="~/azure-functions-dotnet-worker/samples/Extensions/SignalR/SignalRNegotiationFunctions.cs" id="snippet_negotiate":::
public SignalRConnectionInfo negotiate(
### Authenticated tokens
-When the function is triggered by an authenticated client, you can add a user ID claim to the generated token. You can easily add authentication to a function app using [App Service Authentication](../app-service/overview-authentication-authorization.md).
+When an authenticated client triggers the function, you can add a user ID claim to the generated token. You can easily add authentication to a function app using [App Service Authentication](../app-service/overview-authentication-authorization.md).
App Service authentication sets HTTP headers named `x-ms-client-principal-id` and `x-ms-client-principal-name` that contain the authenticated user's client principal ID and name, respectively.
App Service authentication sets HTTP headers named `x-ms-client-principal-id` an
# [In-process](#tab/in-process)
-You can set the `UserId` property of the binding to the value from either header using a [binding expression](./functions-bindings-expressions-patterns.md): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
+You can set the `UserId` property of the binding to the value from either header using a [binding expression](#binding-expressions-for-http-trigger): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
```cs [FunctionName("negotiate")]
public static string Negotiate([HttpTrigger(AuthorizationLevel.Anonymous)] HttpR
# [C# Script](#tab/csharp-script)
-You can set the `userId` property of the binding to the value from either header using a [binding expression](./functions-bindings-expressions-patterns.md): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
+You can set the `userId` property of the binding to the value from either header using a [binding expression](#binding-expressions-for-http-trigger): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
Example function.json:
public SignalRConnectionInfo negotiate(
::: zone pivot="programming-language-javascript,programming-language-python,programming-language-powershell"
-You can set the `userId` property of the binding to the value from either header using a [binding expression](./functions-bindings-expressions-patterns.md): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
+You can set the `userId` property of the binding to the value from either header using a [binding expression](#binding-expressions-for-http-trigger): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
Here's binding data in the *function.json* file:
def main(req: func.HttpRequest, connectionInfo: str) -> func.HttpResponse:
::: zone-end ::: zone pivot="programming-language-java"
-You can set the `userId` property of the binding to the value from either header using a [binding expression](./functions-bindings-expressions-patterns.md): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
+You can set the `userId` property of the binding to the value from either header using a [binding expression](#binding-expressions-for-http-trigger): `{headers.x-ms-client-principal-id}` or `{headers.x-ms-client-principal-name}`.
```java @FunctionName("negotiate")
The following table explains the properties of the `SignalRConnectionInfo` attri
| Attribute property |Description| ||-|
-**HubName**| This value must be set to the name of the SignalR hub for which the connection information is generated. |
-|**UserId**| Optional: The value of the user identifier claim to be set in the access key token. |
+|**HubName**| Required. The hub name. |
|**ConnectionStringSetting**| The name of the app setting that contains the SignalR Service connection string, which defaults to `AzureSignalRConnectionString`. |
+|**UserId**| Optional. The user identifier of a SignalR connection. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**IdToken**| Optional. A JWT token whose claims will be added to the user claims. It should be used together with **ClaimTypeList**. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**ClaimTypeList**| Optional. A list of claim types, which filter the claims in **IdToken** . |
# [Isolated process](#tab/isolated-process)
The following table explains the properties of the `SignalRConnectionInfoInput`
| Attribute property |Description| ||-|
-**HubName**| This value must be set to the name of the SignalR hub for which the connection information is generated. |
-|**UserId**| Optional: The value of the user identifier claim to be set in the access key token. |
+|**HubName**| Required. The hub name. |
|**ConnectionStringSetting**| The name of the app setting that contains the SignalR Service connection string, which defaults to `AzureSignalRConnectionString`. |
+|**UserId**| Optional. The user identifier of a SignalR connection. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**IdToken**| Optional. A JWT token whose claims will be added to the user claims. It should be used together with **ClaimTypeList**. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**ClaimTypeList**| Optional. A list of claim types, which filter the claims in **IdToken** . |
# [C# Script](#tab/csharp-script)
The following table explains the binding configuration properties that you set i
|**type**| Must be set to `signalRConnectionInfo`.| |**direction**| Must be set to `in`.| |**name**| Variable name used in function code for connection info object. |
-|**hubName**| This value must be set to the name of the SignalR hub for which the connection information is generated.|
-|**userId**| Optional: The value of the user identifier claim to be set in the access key token. |
+|**hubName**| Required. The hub name. |
|**connectionStringSetting**| The name of the app setting that contains the SignalR Service connection string, which defaults to `AzureSignalRConnectionString`. |
+|**userId**| Optional. The user identifier of a SignalR connection. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**idToken**| Optional. A JWT token whose claims will be added to the user claims. It should be used together with **claimTypeList**. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**claimTypeList**| Optional. A list of claim types, which filter the claims in **idToken** . |
::: zone-end ::: zone pivot="programming-language-java" + ## Annotations The following table explains the supported settings for the `SignalRConnectionInfoInput` annotation.
The following table explains the supported settings for the `SignalRConnectionIn
|Setting | Description| ||--| |**name**| Variable name used in function code for connection info object. |
-|**hubName**| This value must be set to the name of the SignalR hub for which the connection information is generated.|
-|**userId**| Optional: The value of the user identifier claim to be set in the access key token. |
+|**hubName**| Required. The hub name. |
|**connectionStringSetting**| The name of the app setting that contains the SignalR Service connection string, which defaults to `AzureSignalRConnectionString`. |
+|**userId**| Optional. The user identifier of a SignalR connection. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**idToken**| Optional. A JWT token whose claims will be added to the user claims. It should be used together with **claimTypeList**. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**claimTypeList**| Optional. A list of claim types, which filter the claims in **idToken** . |
::: zone-end ::: zone pivot="programming-language-javascript,programming-language-powershell,programming-language-python"
The following table explains the binding configuration properties that you set i
||--| |**type**| Must be set to `signalRConnectionInfo`.| |**direction**| Must be set to `in`.|
-|**name**| Variable name used in function code for connection info object. |
-|**hubName**| This value must be set to the name of the SignalR hub for which the connection information is generated.|
-|**userId**| Optional: The value of the user identifier claim to be set in the access key token. |
+|**hubName**| Required. The hub name. |
|**connectionStringSetting**| The name of the app setting that contains the SignalR Service connection string, which defaults to `AzureSignalRConnectionString`. |
+|**userId**| Optional. The user identifier of a SignalR connection. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**idToken**| Optional. A JWT token whose claims will be added to the user claims. It should be used together with **claimTypeList**. You can use a [binding expression](#binding-expressions-for-http-trigger) to bind the value to an HTTP request header or query. |
+|**claimTypeList**| Optional. A list of claim types, which filter the claims in **idToken** . |
::: zone-end
+### Binding expressions for HTTP trigger
+<a name="binding-expressions-for-http-trigger"></a>
+It's a common scenario that the values of some attributes of SignalR input binding come from HTTP requests. Therefore, we show how to bind values from HTTP requests to SignalR input binding attributes via [binding expression](./functions-bindings-expressions-patterns.md#trigger-metadata).
+
+| HTTP metadata type | Binding expression format | Description | Example |
+||--||--|
+| HTTP request query | `{query.QUERY_PARAMETER_NAME}` | Binds the value of corresponding query parameter to an attribute | `{query.userName}` |
+| HTTP request header | `{headers.HEADER_NAME}` | Binds the value of a header to an attribute | `{headers.token}` |
+ ## Next steps - [Handle messages from SignalR Service (Trigger binding)](./functions-bindings-signalr-service-trigger.md)
azure-functions Functions Deploy Container Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-deploy-container-apps.md
az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --envir
::: zone-end ::: zone pivot="programming-language-typescript" ```console
-az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD>
+az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime node --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.0 --registry-server <LOGIN_SERVER> --registry-username <REGISTRY_NAME> --registry-password <ADMIN_PASSWORD>
``` ::: zone-end
azure-functions Language Support Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/language-support-policy.md
There are few exceptions to the retirement policy outlined above. Here is a list
|Language Versions |EOL Date |Retirement Date| |--|--|-|
+|Python 3.7|27 June 2023|30 September 2023|
|Node 14|30 April 2023|30 June 2024| |Node 16|11 September 2023|30 June 2024| + ## Language version support timeline To learn more about specific language version support policy timeline, visit the following external resources:
azure-maps About Azure Maps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/about-azure-maps.md
The [Get Map Tile V2 API] allows you to request past, current, and future radar
![Example of map with real-time weather radar tiles](media/about-azure-maps/intro_weather.png)
-### Maps Creator service
-
-Maps Creator service is a suite of web services that developers can use to create applications with map features based on indoor map data.
-
-Maps Creator provides the following
-
-* [Dataset service]. Use the Dataset service to create a dataset from a converted drawing package data. For information about drawing package requirements, see drawing package requirements.
-
-* [Conversion service]. Use the Conversion service to convert a DWG design file into drawing package data for indoor maps.
-
-* [Tileset service]. Use the Tileset service to create a vector-based representation of a dataset. Applications can use a tileset to present a visual tile-based view of the dataset.
-
-* [Custom styling service] (preview). Use the [style service] or [visual style editor] to customize the visual elements of an indoor map.
-
-* [Feature State service]. Use the Feature State service to support dynamic map styling. Dynamic map styling allows applications to reflect real-time events on spaces provided by IoT systems.
-
-* [WFS service]. Use the WFS service to query your indoor map data. The WFS service follows the [Open Geospatial Consortium API] standards for querying a single dataset.
-
-* [Wayfinding service] (preview). Use the [wayfinding API] to generate a path between two points within a facility. Use the [routeset API] to create the data that the wayfinding service needs to generate paths.
- ## Programming model Azure Maps is built for mobility and can help you develop cross-platform applications. It uses a programming model that's language agnostic and supports JSON output through [REST APIs].
Verify that the location of your current IP address is in a supported country/re
## Next steps
+Learn about indoor maps:
+
+[What is Azure Maps Creator?]
+ Try a sample app that showcases Azure Maps: [Quickstart: Create a web app]
Stay up to date on Azure Maps:
[Azure Maps blog] <! learn.microsoft.com links >
-[Conversion service]: creator-indoor-maps.md#convert-a-drawing-package
-[Custom styling service]: creator-indoor-maps.md#custom-styling-preview
-[Dataset service]: creator-indoor-maps.md#datasets
-[Feature State service]: creator-indoor-maps.md#feature-statesets
[Get started with Azure Maps Power BI visual]: power-bi-visual-get-started.md [How to use the Get Map Attribution API]: how-to-show-attribution.md [Quickstart: Create a web app]: quick-demo-map-app.md
-[Tileset service]: creator-indoor-maps.md#tilesets
-[Wayfinding service]: creator-indoor-maps.md#wayfinding-preview
-[WFS service]: creator-indoor-maps.md#web-feature-service-api
+[What is Azure Maps Creator?]: about-creator.md
<! REST API Links > [Data service]: /rest/api/maps/data-v2 [Geolocation service]: /rest/api/maps/geolocation
Stay up to date on Azure Maps:
[Render V2 service]: /rest/api/maps/render-v2 [REST APIs]: /rest/api/maps/ [Route service]: /rest/api/maps/route
-[routeset API]: /rest/api/maps/v20220901preview/routeset
[Search service]: /rest/api/maps/search [Spatial service]: /rest/api/maps/spatial
-[style service]: /rest/api/maps/v20220901preview/style
[TilesetID]: /rest/api/maps/render-v2/get-map-tile#tilesetid [Time zone service]: /rest/api/maps/timezone [Traffic service]: /rest/api/maps/traffic
-[wayfinding API]: /rest/api/maps/v20220901preview/wayfinding
<! JavaScript API Links > [JavaScript map control]: /javascript/api/azure-maps-control <! External Links >
Stay up to date on Azure Maps:
[Azure portal]: https://portal.azure.com [IANA ID]: https://www.iana.org/ [Microsoft Trust Center]: https://www.microsoft.com/trust-center/privacy
-[Open Geospatial Consortium API]: https://docs.opengeospatial.org/is/17-069r3/17-069r3.html
[reverse geocode]: https://en.wikipedia.org/wiki/Reverse_geocoding [Subprocessor List]: https://servicetrust.microsoft.com/DocumentPage/aead9e68-1190-4d90-ad93-36418de5c594
-[visual style editor]: https://azure.github.io/Azure-Maps-Style-Editor
azure-maps About Creator https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/about-creator.md
+
+ Title: Overview for Microsoft Azure Maps Creator
+
+description: Learn about services and capabilities in Microsoft Azure Maps Creator and how to use them in your applications.
++ Last updated : 08/03/2023+++++
+# What is Azure Maps Creator?
+
+Azure Maps Creator is a first party geospatial platform that enables you to create and render maps, based on indoor map data, on top of the outdoor map in your web and mobile applications.
+
+## Services in Azure Maps Creator
+
+Creator is a platform for building indoor mapping solutions for all your needs. As an extension of Azure Maps, Creator allows blending of both indoor and outdoor maps for a seamless visual experience. Creator supports generating indoor maps from CAD drawings (DWG) or GeoJSON and enables custom styling of the map. You can also provide directions within your indoor map using wayfinding.
++
+### Conversion
+
+An [onboarding tool] is provided to prepare your facility's DWGs by identifying the data to use and to positioning your facility on the map. The conversion service then converts the geometry and data from your DWG files into a digital indoor map.
+
+The first step in creating your indoor map is to upload a drawing package into your Azure Maps account. A drawing package contains one or more CAD (computer-aided design) drawings of your facility along with a manifest describing the drawings. The drawings define the elements of the facility while the manifest tells the Azure Maps [Conversion service] how to read the facility drawing files and metadata. For more
+information about manifest properties, see [Manifest file requirements] and for more information on creating and uploading a drawing package, see the [Drawing package guide].
+
+### Dataset
+
+A collection of the indoor map [features] of a facility. Update your facility dataset through a visual editor and query for features in real time using the [Features API]. For more information, see [Work with datasets using the QGIS plugin].
+
+### Rendering
+
+[Tilesets], created from your data, are used to render maps on mobile devices or in the browser.
+
+### Styling
+
+[Custom styling] enables you to customize your indoor maps to meet your needs. You can customize your facilityΓÇÖs look and feel to reflect your brand colors or emphasize different rooms or specific areas of interest. Everything is configurable from the color of a feature, an icon that renders, or the zoom level when a feature should appear, resize or disappear. You can define how your data should be styled in the [visual style editor]. For more information, see [Create custom styles for indoor maps].
+
+### Wayfinding
+
+A [Routeset] is automatically created for your facility. [Wayfinding] uses that routeset to provide your customers with the shortest path between two points using the [Wayfinding service].
+
+### SDK
+
+Use the Azure Maps Web SDK to develop applications that provide a customized indoor map experience. For more information, see [Use the Azure Maps Indoor Maps module].
+
+## The indoor maps workflow
+
+This section provides a high-level overview of the indoor map creation workflow.
+
+1. **Create**. You first must create a drawing package containing one or more CAD
+ (computer-aided design) drawings of your facility along with a [manifest]
+ describing the drawings. You can use the [Azure Maps Creator onboarding tool] to
+ create new and edit existing [manifest files].
+
+1. **Upload**. Upload your drawing packages into your Azure Maps
+ account. Upload drawing packages using the [Data Upload API].
+
+1. **Convert**. Once the drawing package is uploaded into your Azure Maps account,
+ use the [Conversion service] to validate the data in the uploaded drawing
+ package and convert it into map data.
+
+1. **Dataset**. Create a [dataset] from the map data. A dataset is collection
+ of indoor map [features] that are stored in your Azure Maps account.
+ For more information, see [Work with datasets using the QGIS plugin].
+
+1. **Tileset**. Converting your data into a [tileset] allows
+ you to add it to an Azure Maps map and apply custom styling.
+
+1. **Styles**. Styles drive the visual appearance of spatial features on the map.
+ When a new tileset is created, default styles are automatically associated with the
+ features it contains. These default styles can be modified to suit your needs
+ using the [visual style editor]. For more information, see
+ [Create custom styles for indoor maps].
+
+1. **Wayfinding**. Provide your customers with the shortest path between two points
+ within a facility. For more information, see [Wayfinding].
+
+## Azure Maps Creator documentation
+
+### ![Concept articles](./media/creator-indoor-maps/about-creator/Concepts.png) Concepts
+
+- [Indoor map concepts]
+
+### ![Creator tutorial](./media/creator-indoor-maps/about-creator/tutorials.png) Tutorials
+
+- [Use Azure Maps Creator to create indoor maps]
+
+### ![How-to articles](./media/creator-indoor-maps/about-creator/how-to-guides.png) How-to guides
+
+- [Manage Creator]
+- [Implement Dynamic styling for indoor maps]
+- [Query datasets with WFS API]
+- [Custom styling for indoor maps]
+- [Indoor maps wayfinding service]
+- [Edit indoor maps using the QGIS plugin]
+- [Create dataset using GeoJson package]
+- [Create a feature stateset]
+
+### ![Reference articles](./media/creator-indoor-maps/about-creator/reference.png) Reference
+
+- [Drawing package requirements]
+- [Facility Ontology]
+- [Dynamic maps StylesObject]
+- [Drawing error visualizer]
+- [Azure Maps Creator REST API]
+
+[Azure Maps Creator onboarding tool]: https://azure.github.io/azure-maps-creator-onboarding-tool
+[Azure Maps Creator REST API]: /rest/api/maps-creator
+[Conversion service]: /rest/api/maps/v2/conversion
+[Create a feature stateset]: how-to-creator-feature-stateset.md
+[Create custom styles for indoor maps]: how-to-create-custom-styles.md
+[Create dataset using GeoJson package]: how-to-dataset-geojson.md
+[Custom styling for indoor maps]: how-to-create-custom-styles.md
+[custom styling]: creator-indoor-maps.md#custom-styling-preview
+[Data Upload API]: /rest/api/maps/data-v2/upload
+[dataset]: creator-indoor-maps.md#datasets
+[Drawing error visualizer]: drawing-error-visualizer.md
+[Drawing package guide]: drawing-package-guide.md?pivots=drawing-package-v2
+[Drawing package requirements]: drawing-requirements.md
+[Dynamic maps StylesObject]: schema-stateset-stylesobject.md
+[Edit indoor maps using the QGIS plugin]: creator-qgis-plugin.md
+[Facility Ontology]: creator-facility-ontology.md
+[Features API]: /rest/api/maps/2023-03-01-preview/features
+[features]: glossary.md#feature
+[Implement Dynamic styling for indoor maps]: indoor-map-dynamic-styling.md
+[Indoor map concepts]: creator-indoor-maps.md
+[Indoor maps wayfinding service]: how-to-creator-wayfinding.md
+[Manage Creator]: how-to-manage-creator.md
+[Manifest file requirements]: drawing-requirements.md#manifest-file-requirements-1
+[manifest files]: drawing-requirements.md#manifest-file-1
+[manifest]: drawing-requirements.md#manifest-file-requirements
+[onboarding tool]: https://azure.github.io/azure-maps-creator-onboarding-tool
+[Query datasets with WFS API]: how-to-creator-wfs.md
+[Routeset]: /rest/api/maps/2023-03-01-preview/routeset/create
+[tileset]: creator-indoor-maps.md#tilesets
+[Tilesets]: creator-indoor-maps.md#tilesets
+[Use Azure Maps Creator to create indoor maps]: tutorial-creator-indoor-maps.md
+[Use the Azure Maps Indoor Maps module]: how-to-use-indoor-module.md
+[visual style editor]: https://azure.github.io/Azure-Maps-Style-Editor
+[Wayfinding service]: /rest/api/maps/2023-03-01-preview/wayfinding
+[Wayfinding]: creator-indoor-maps.md#wayfinding-preview
+[Work with datasets using the QGIS plugin]: creator-qgis-plugin.md
azure-maps Choose Map Style https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/choose-map-style.md
For a fully functional sample that shows how the different styles affect how the
<!-- <br/>
-<iframe height="700" scrolling="no" title="Map style options" src="https://codepen.io/azuremaps/embed/eYNMjPb?height=700&theme-id=0&default-tab=result" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/eYNMjPb'>Map style options</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/eYNMjPb?height=700&theme-id=0&default-tab=result]
--> ## Set a base map style
var map = new atlas.Map('map', {
<!-- <br/>
-<iframe height='500' scrolling='no' title='Setting the style on map load' src='//codepen.io/azuremaps/embed/WKOQRq/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WKOQRq/'>Setting the style on map load</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WKOQRq/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ### Update the base map style
map.setStyle({ style: 'satellite' });
<!-- <br/>
-<iframe height='500' scrolling='no' title='Updating the style' src='//codepen.io/azuremaps/embed/yqXYzY/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/yqXYzY/'>Updating the style</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/yqXYzY/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Add the style picker control
map.controls.add(new atlas.control.StyleControl({
<!-- <br/>
-<iframe height='500' scrolling='no' title='Adding the style picker' src='//codepen.io/azuremaps/embed/OwgyvG/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/OwgyvG/'>Adding the style picker</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/OwgyvG/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Next steps
azure-maps Clustering Point Data Web Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/clustering-point-data-web-sdk.md
For a complete working sample of how to implement displaying clusters using a bu
<!- <br/>
-<iframe height="500" scrolling="no" title="Basic bubble layer clustering" src="//codepen.io/azuremaps/embed/qvzRZY/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/qvzRZY/'>Basic bubble layer clustering</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/qvzRZY/?height=500&theme-id=0&default-tab=js,result&editable=true]
-> ## Display clusters using a symbol layer
For a complete working sample of how to implement displaying clusters using a sy
<!- <br/>
-<iframe height="500" scrolling="no" title="Clustered Symbol layer" src="//codepen.io/azuremaps/embed/Wmqpzz/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/Wmqpzz/'>Clustered Symbol layer</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/Wmqpzz/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> ## Clustering and the heat maps layer
For a complete working sample that demonstrates how to create a heat map that us
<!- <br/>
-<iframe height="500" scrolling="no" title="Cluster weighted Heat Map" src="//codepen.io/azuremaps/embed/VRJrgO/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/VRJrgO/'>Cluster weighted Heat Map</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/VRJrgO/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> ## Mouse events on clustered data points
function clusterClicked(e) {
<!- <br/>
-<iframe height="500" scrolling="no" title="Cluster getClusterExpansionZoom" src="//codepen.io/azuremaps/embed/moZWeV/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/moZWeV/'>Cluster getClusterExpansionZoom</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/moZWeV/?height=500&theme-id=0&default-tab=js,result&editable=true]
> ## Display cluster area
For a complete working sample that demonstrates how to do this, see [Display clu
<!- <br/>
- <iframe height="500" scrolling="no" title="Cluster area convex hull" src="//codepen.io/azuremaps/embed/QoXqWJ/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/QoXqWJ/'>Cluster area convex hull</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+ > [!VIDEO //codepen.io/azuremaps/embed/QoXqWJ/?height=500&theme-id=0&default-tab=js,result&editable=true]
> ## Aggregating data in clusters
The [Cluster aggregates] sample uses an aggregate expression. The code calculate
:::image type="content" source="./media/cluster-point-data-web-sdk/cluster-aggregates.png" alt-text="Screenshot showing a map that uses clustering defined using data-driven style expression calculation. These calculations aggregate values across all points contained within the cluster."::: <!-
-<iframe height="500" scrolling="no" title="Cluster aggregates" src="//codepen.io/azuremaps/embed/jgYyRL/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/jgYyRL/'>Cluster aggregates</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/jgYyRL/?height=500&theme-id=0&default-tab=js,result&editable=true]
> ## Next steps
azure-maps Create Data Source Web Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/create-data-source-web-sdk.md
For a complete working sample of how to display data from a vector tile source o
<! <br/>
-<iframe height="500" scrolling="no" title="Vector tile line layer" src="https://codepen.io/azuremaps/embed/wvMXJYJ?height=500&theme-id=default&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/wvMXJYJ'>Vector tile line layer</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/wvMXJYJ?height=500&theme-id=default&default-tab=js,result&editable=true]
>
azure-maps Drawing Conversion Error Codes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/drawing-conversion-error-codes.md
To fix a **verticalPenetrationError** error, read about how to use a vertical pe
> [Creator for indoor mapping] [Conversion service]: /rest/api/maps/v2/conversion
-[Drawing package requirements]: drawing-requirements.md
+[Creator for indoor mapping]: creator-indoor-maps.md
[Drawing files requirements]: drawing-requirements.md#drawing-package-requirements
-[The JavaScript Object Notation (JSON) Data Interchange Format]: https://tools.ietf.org/html/rfc7159
-[manifest section in the Drawing package requirements]: drawing-requirements.md#manifest-file-requirements
-[How to use Azure Maps Drawing error visualizer]: drawing-error-visualizer.md
[Drawing Package Guide]: drawing-package-guide.md
-[Creator for indoor mapping]: creator-indoor-maps.md
+[Drawing package requirements]: drawing-requirements.md
+[How to use Azure Maps Drawing error visualizer]: drawing-error-visualizer.md
+[manifest section in the Drawing package requirements]: drawing-requirements.md#manifest-file-requirements
+[The JavaScript Object Notation (JSON) Data Interchange Format]: https://tools.ietf.org/html/rfc7159
azure-maps Drawing Package Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/drawing-package-guide.md
Defining text properties enables you to associate text entities that fall inside
:::image type="content" source="./media/creator-indoor-maps/onboarding-tool/dwg-layers.png" alt-text="Screenshot showing the 'create a new manifest' screen of the onboarding tool."::: > [!IMPORTANT]
-> The following feature class should be defined (not case sensitive) in order to use [wayfinding]. `Wall` will be treated as an obstruction for a given path request. `Stair` and `Elevator` will be treated as level connectors to navigate across floors:
+> The following feature classes should be defined (not case sensitive) in order to use [wayfinding]. `Wall` will be treated as an obstruction for a given path request. `Stair` and `Elevator` will be treated as level connectors to navigate across floors:
>
-> 1. Wall
-> 2. Stair
-> 3. Elevator
+> * Wall
+> * Stair
+> * Elevator
### Download
azure-maps Drawing Tools Events https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/drawing-tools-events.md
The following image shows a screenshot of the complete working sample that demon
<! <br/>
-<iframe height="500" scrolling="no" title="Drawing tools events" src="https://codepen.io/azuremaps/embed/dyPMRWo?height=500&theme-id=default&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/dyPMRWo'>Drawing tools events</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/dyPMRWo?height=500&theme-id=default&default-tab=js,result&editable=true]
-->
Let's see some common scenarios that use the drawing tools events.
### Select points in polygon area
-This code demonstrates how to monitor an event of a user drawing shapes. For this example, the code monitors shapes of polygons, rectangles, and circles. Then, it determines which data points on the map are within the drawn area. The `drawingcomplete` event is used to trigger the select logic. In the select logic, the code loops through all the data points on the map. It checks if there's an intersection of the point and the area of the drawn shape. This example makes use of the open-source [Turf.js](https://turfjs.org/) library to perform a spatial intersection calculation.
+This code demonstrates how to monitor an event of a user drawing shapes. For this example, the code monitors shapes of polygons, rectangles, and circles. Then, it determines which data points on the map are within the drawn area. The `drawingcomplete` event is used to trigger the select logic. In the select logic, the code loops through all the data points on the map. It checks if there's an intersection of the point and the area of the drawn shape. This example makes use of the open-source [Turf.js] library to perform a spatial intersection calculation.
For a complete working sample of how to use the drawing tools to draw polygon areas on the map with points within them that can be selected, see [Select data in drawn polygon area] in the [Azure Maps Samples]. For the source code for this sample, see [Select data in drawn polygon area sample code].
For a complete working sample of how to use the drawing tools to draw polygon ar
<!- <br/>
-<iframe height="500" scrolling="no" title="Select data in drawn polygon area" src="https://codepen.io/azuremaps/embed/XWJdeja?height=500&theme-id=default&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/XWJdeja'>Select data in drawn polygon area</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/XWJdeja?height=500&theme-id=default&default-tab=result]
-> ### Draw and search in polygon area
For a complete working sample of how to use the drawing tools to search for poin
<!- <br/>
-<iframe height="500" scrolling="no" title="Draw and search in polygon area" src="https://codepen.io/azuremaps/embed/eYmZGNv?height=500&theme-id=default&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/eYmZGNv'>Draw and search in polygon area</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/eYmZGNv?height=500&theme-id=default&default-tab=js,result&editable=true]
-> ### Create a measuring tool
For a complete working sample of how to use the drawing tools to measure distanc
:::image type="content" source="./media/drawing-tools-events/create-a-measuring-tool.png" alt-text="Screenshot showing a map displaying the measuring tool sample."::: <!-
-<iframe height="500" scrolling="no" title="Measuring tool" src="https://codepen.io/azuremaps/embed/RwNaZXe?height=500&theme-id=default&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/RwNaZXe'>Measuring tool</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/RwNaZXe?height=500&theme-id=default&default-tab=js,result&editable=true]
-> ## Next steps
For a complete working sample of how to use the drawing tools to measure distanc
Learn how to use other features of the drawing tools module: > [!div class="nextstepaction"]
-> [Get shape data](map-get-shape-data.md)
+> [Get shape data]
> [!div class="nextstepaction"]
-> [Interaction types and keyboard shortcuts](drawing-tools-interactions-keyboard-shortcuts.md)
+> [Interaction types and keyboard shortcuts]
Learn more about the services module: > [!div class="nextstepaction"]
-> [Services module](how-to-use-services-module.md)
+> [Services module]
Check out more code samples: > [!div class="nextstepaction"]
-> [Code sample page](https://aka.ms/AzureMapsSamples)
+> [Code sample page]
[Azure Maps Samples]:https://samples.azuremaps.com
-[Drawing tools events]: https://samples.azuremaps.com/drawing-tools-module/drawing-tools-events
+[Code sample page]: https://aka.ms/AzureMapsSamples
+[Create a measuring tool sample code]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/Drawing%20Tools%20Module/Create%20a%20measuring%20tool/Create%20a%20measuring%20tool.html
+[Create a measuring tool]: https://samples.azuremaps.com/drawing-tools-module/create-a-measuring-tool
+[Draw and search polygon area sample code]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/Drawing%20Tools%20Module/Draw%20and%20search%20polygon%20area/Draw%20and%20search%20polygon%20area.html
+[Draw and search polygon area]: https://samples.azuremaps.com/drawing-tools-module/draw-and-search-polygon-area
[Drawing tools events sample code]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/Drawing%20Tools%20Module/Drawing%20tools%20events/Drawing%20tools%20events.html
-[Select data in drawn polygon area]: https://samples.azuremaps.com/drawing-tools-module/select-data-in-drawn-polygon-area
+[Drawing tools events]: https://samples.azuremaps.com/drawing-tools-module/drawing-tools-events
+[Get shape data]: map-get-shape-data.md
+[Interaction types and keyboard shortcuts]: drawing-tools-interactions-keyboard-shortcuts.md
[Select data in drawn polygon area sample code]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/Drawing%20Tools%20Module/Select%20data%20in%20drawn%20polygon%20area/Select%20data%20in%20drawn%20polygon%20area.html
-[Draw and search polygon area]: https://samples.azuremaps.com/drawing-tools-module/draw-and-search-polygon-area
-[Draw and search polygon area sample code]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/Drawing%20Tools%20Module/Draw%20and%20search%20polygon%20area/Draw%20and%20search%20polygon%20area.html
-[Create a measuring tool]: https://samples.azuremaps.com/drawing-tools-module/create-a-measuring-tool
-[Create a measuring tool sample code]: https://github.com/Azure-Samples/AzureMapsCodeSamples/blob/main/Samples/Drawing%20Tools%20Module/Create%20a%20measuring%20tool/Create%20a%20measuring%20tool.html
+[Select data in drawn polygon area]: https://samples.azuremaps.com/drawing-tools-module/select-data-in-drawn-polygon-area
+[Services module]: how-to-use-services-module.md
+[Turf.js]: https://turfjs.org
azure-maps Geocoding Coverage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/geocoding-coverage.md
The ability to geocode in a country/region is dependent upon the road data cover
Learn more about Azure Maps geocoding: > [!div class="nextstepaction"]
-> [Azure Maps Search service](/rest/api/maps/search)
+> [Azure Maps Search service]
[Search service]: /rest/api/maps/search
-[Get Search Address API]: /rest/api/maps/search/getsearchaddress
+[Azure Maps Search service]: /rest/api/maps/search
+[Get Search Address]: /rest/api/maps/search/get-search-address
azure-maps Glossary https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/glossary.md
The following list describes common words used with the Azure Maps services.
<a name="zip-code"></a> **Zip code**: See [Postal code].
-<a name="Zoom level"></a> **Zoom level**: Specifies the level of detail and how much of the map is visible. When zoomed all the way to level 0, the full world map is often visible. But, the map shows limited details such as country/region names, borders, and ocean names. When zoomed in closer to level 17, the map displays an area of a few city blocks with detailed road information. In Azure Maps, the highest zoom level is 22. For more information, see [Zoom levels and tile grid].
+<a name="Zoom level"></a> **Zoom level**: Specifies the level of detail and how much of the map is visible. When zoomed all the way to level 0, the full world map is often visible. But, the map shows limited details such as country/region names, borders, and ocean names. When zoomed in closer to level 17, the map displays an area of a few city blocks with detailed road information. In Azure Maps, the highest zoom level is 22. For more information, see the [Zoom levels and tile grid] documentation.
-[Satellite imagery]: #satellite-imagery
-[Shared key authentication]: #shared-key-authentication
+[Altitude]: #altitude
[Azure Maps and Azure AD]: azure-maps-authentication.md
-[Manage authentication in Azure Maps]: how-to-manage-authentication.md
+[Bearing]: #heading
[Bounding box]: #bounding-box
-[Parcel]: #parcel
[consumption model documentation]: consumption-model.md
+[EPSG:3857]: https://epsg.io/3857
[Extended geojson]: extend-geojson.md
-[Bearing]: #bearing
-[Reachable Range]: #reachable-range
-[Zoom levels and tile grid]: zoom-levels-and-tile-grid.md
-[Postal code]: #postal-code
[Isochrone]: #isochrone [Isodistance]: #isodistance
-[Transformation]: #transformation
+[Manage authentication in Azure Maps]: how-to-manage-authentication.md
+[Parcel]: #parcel
+[Postal code]: #postal-code
[Queries Per Second (QPS)]: #queries-per-second-qps
-[EPSG:3857]: https://epsg.io/3857
+[Reachable Range]: #reachable-range
+[Satellite imagery]: #satellite-imagery
+[Shared key authentication]: #shared-key-authentication
[Spatial Data (SQL Server)]: /sql/relational-databases/spatial/spatial-data-sql-server [Tile layer]: #tile-layer
+[Transformation]: #transformation
[Traveling Salesmen Problem]: #traveling-salesmen-problem-tsp [Vehicle Routing Problem]: #vehicle-routing-problem-vrp
-[Altitude]: #altitude
[Web Mercator]: #web-mercator
+[Zoom levels and tile grid]: zoom-levels-and-tile-grid.md
azure-maps How To Create Custom Styles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-create-custom-styles.md
Now when you select that unit in the map, the pop-up menu has the new layer ID,
## Next steps > [!div class="nextstepaction"]
-> [Use the Azure Maps Indoor Maps module](how-to-use-indoor-module.md)
+> [Use the Azure Maps Indoor Maps module]
+[categories]: https://atlas.microsoft.com/sdk/javascript/indoor/0.2/categories.json
[Creator concepts]: creator-indoor-maps.md
-[tileset]: /rest/api/maps/v20220901preview/tileset
-[tileset get]: /rest/api/maps/v20220901preview/tileset/get
-[Use Creator to create indoor maps]: tutorial-creator-indoor-maps.md
[Creators Rest API]: /rest/api/maps-creator/
+[Instantiate the Indoor Manager]: how-to-use-indoor-module.md#instantiate-the-indoor-manager
+[manifest]: drawing-requirements.md#manifest-file-requirements
+[map configuration]: creator-indoor-maps.md#map-configuration
[style editor]: https://azure.github.io/Azure-Maps-Style-Editor [subscription key]: quick-demo-map-app.md#get-the-subscription-key-for-your-account
-[manifest]: drawing-requirements.md#manifest-file-requirements
+[tileset get]: /rest/api/maps/v20220901preview/tileset/get
+[tileset]: /rest/api/maps/v20220901preview/tileset
[unitProperties]: drawing-requirements.md#unitproperties
-[categories]: https://atlas.microsoft.com/sdk/javascript/indoor/0.2/categories.json
-[Instantiate the Indoor Manager]: how-to-use-indoor-module.md#instantiate-the-indoor-manager
-[map configuration]: creator-indoor-maps.md#map-configuration
+[Use Creator to create indoor maps]: tutorial-creator-indoor-maps.md
+[Use the Azure Maps Indoor Maps module]: how-to-use-indoor-module.md
azure-maps How To Create Data Registries https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-create-data-registries.md
The [data registry] service enables you to register data content in an Azure Sto
## Prerequisites -- [Azure Maps account]-- [Subscription key]-- An [Azure storage account][create storage account]
+- An [Azure Maps account]
+- A [Subscription key]
+- An [Azure storage account]
>[!IMPORTANT] >
-> - This article uses the `us.atlas.microsoft.com` geographical URL. If your account wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator services](how-to-manage-creator.md#access-to-creator-services).
+> - This article uses the `us.atlas.microsoft.com` geographical URL. If your account wasn't created in the United States, you must use a different geographical URL. For more information, see [Access to Creator services].
> - In the URL examples in this article you will need to replace: > - `{Azure-Maps-Subscription-key}` with your Azure Maps [subscription key].
-> - `{udid}` with the user data ID of your data registry. For more information, see [The user data ID](#the-user-data-id).
+> - `{udid}` with the user data ID of your data registry. For more information, see [The user data ID].
## Prepare to register data in Azure Maps
Before you can register data in Azure Maps, you need to create an environment co
### Create managed identities
-There are two types of managed identities: **system-assigned** and **user-assigned**. System-assigned managed identities have their lifecycle tied to the resource that created them. User-assigned managed identities can be used on multiple resources. For more information, see [managed identities for Azure resources][managed identity].
+There are two types of managed identities: **system-assigned** and **user-assigned**. System-assigned managed identities have their lifecycle tied to the resource that created them. User-assigned managed identities can be used on multiple resources. For more information, see [managed identities for Azure resources].
Use the following steps to create a managed identity, add it to your Azure Maps account.
The user defined managed identity should now be added to your Azure Maps account
-For more information, see [managed identities for Azure resources][managed identity].
+For more information, see [managed identities for Azure resources].
### Create a container and upload data files
To create a container in the [Azure portal], follow these steps:
Once you've created an Azure storage account with files uploaded into one or more containers, you're ready to create the datastore that links the storage accounts to your Azure Maps account. > [!IMPORTANT]
-> All storage accounts linked to an Azure Maps account must be in the same geographic location. For more information, see [Azure Maps service geographic scope][geographic scope].
+> All storage accounts linked to an Azure Maps account must be in the same geographic location. For more information, see [Azure Maps service geographic scope].
+ > [!NOTE]
-> If you do not have a storage account see [Create a storage account][create storage account].
+> If you do not have a storage account see [Create a storage account].
1. Select **Datastore** from the left menu in your Azure Maps account. 1. Select the **Add** button. An **Add datastore** screen appears on the right side.
To assign roles to your managed identities and associate them with a datastore:
With a datastore created in your Azure Maps account, you're ready to gather the properties required to create the data registry.
-There are the AzureBlob properties that you pass in the body of the HTTP request, and [The user data ID](#the-user-data-id) passed in the URL.
+There are the AzureBlob properties that you pass in the body of the HTTP request, and [The user data ID] passed in the URL.
### The AzureBlob
The `AzureBlob` is a JSON object that defines properties required to create the
|`linkedResource`| The ID of the datastore registered in the Azure Maps account.<BR>The datastore contains a link to the file being registered. | | `blobUrl` | A URL pointing to the Location of the AzurebBlob, the file imported into your container. |
-The following two sections provide you with details how to get the values to use for the [msiClientId](#the-msiclientid-property), [blobUrl](#the-bloburl-property) properties.
+The following two sections provide you with details how to get the values to use for the [msiClientId], [blobUrl] properties.
#### The msiClientId property
-The `msiClientId` property is the ID of the managed identity used to create the data registry. There are two types of managed identities: **system-assigned** and **user-assigned**. System-assigned managed identities have their lifecycle tied to the resource that created them. User-assigned managed identities can be used on multiple resources. For more information, see [What are managed identities for Azure resources?][managed identity].
+The `msiClientId` property is the ID of the managed identity used to create the data registry. There are two types of managed identities: **system-assigned** and **user-assigned**. System-assigned managed identities have their lifecycle tied to the resource that created them. User-assigned managed identities can be used on multiple resources. For more information, see [managed identities for Azure resources].
# [system-assigned](#tab/System-assigned)
The user data ID (`udid`) of the data registry is a user-defined GUID that must
``` > [!TIP]
-> The `udid` is a user-defined GUID that must be supplied when creating a data registry. If you want to be certain you have a globally unique identifier (GUID), consider creating it by running a GUID generating tool such as the Guidgen.exe command line program (Available with [Visual Studio][Visual Studio]).
+> The `udid` is a user-defined GUID that must be supplied when creating a data registry. If you want to be certain you have a globally unique identifier (GUID), consider creating it by running a GUID generating tool such as the Guidgen.exe command line program (Available with [Visual Studio]).
## Create a data registry
To create a data registry:
> [!NOTE] > When using System-assigned managed identities, you will get an error if you provide a value for the msiClientId property in your HTTP request.
- For more information on the properties required in the HTTP request body, see [Data registry properties](#data-registry-properties).
+ For more information on the properties required in the HTTP request body, see [Data registry properties].
1. Once you have the body of your HTTP request ready, execute the following **HTTP PUT request**:
To create a data registry:
```
- For more information on the `udid` property, see [The user data ID](#the-user-data-id).
+ For more information on the `udid` property, see [The user data ID].
1. Copy the value of the **Operation-Location** key from the response header.
To create a data registry:
> [!NOTE] > When using User-assigned managed identities, you will get an error if you don't provide a value for the msiClientId property in your HTTP request.
- For more information on the properties required in the HTTP request body, see [Data registry properties](#data-registry-properties).
+ For more information on the properties required in the HTTP request body, see [Data registry properties].
1. Once you have the body of your HTTP request ready, execute the following **HTTP PUT request**:
To create a data registry:
```
- For more information on the `udid` property, see [The user data ID](#the-user-data-id).
+ For more information on the `udid` property, see [The user data ID].
1. Copy the value of the **Operation-Location** key from the response header. > [!TIP]
-> If the contents of a previously registered file is modified, it will fail its [data validation](#data-validation) and won't be usable in Azure Maps until it's re-registered. To re-register a file, rerun the register request, passing in the same [AzureBlob](#the-azureblob) used to create the original registration.
-The value of the **Operation-Location** key is the status URL that you'll use to check the status of the data registry creation in the next section, it contains the operation ID used by the [Get operation][Get operation] API.
+> If the contents of a previously registered file is modified, it will fail its [data validation] and won't be usable in Azure Maps until it's re-registered. To re-register a file, rerun the register request, passing in the same [AzureBlob] used to create the original registration.
+The value of the **Operation-Location** key is the status URL that you'll use to check the status of the data registry creation in the next section, it contains the operation ID used by the [Get operation] API.
> [!NOTE] > The value of the **Operation-Location** key will not contain the `subscription-key`, you will need to add that to the request URL when using it to check the data registry creation status. ### Check the data registry creation status
-To (optionally) check the status of the data registry creation process, enter the status URL you copied in the [Create a data registry](#create-a-data-registry) section, and add your subscription key as a query string parameter. The request should look similar to the following URL:
+To (optionally) check the status of the data registry creation process, enter the status URL you copied in the [Create a data registry] section, and add your subscription key as a query string parameter. The request should look similar to the following URL:
```http https://us.atlas.microsoft.com/dataRegistries/operations/{udid}?api-version=2023-06-01&subscription-key={Your-Azure-Maps-Primary-Subscription-key}
https://us.atlas.microsoft.com/dataRegistries/operations/{udid}?api-version=2023
## Get a list of all files in the data registry
-Use the [List][list] request to get a list of all files registered in an Azure Maps account:
+Use the [List] request to get a list of all files registered in an Azure Maps account:
```http https://us.atlas.microsoft.com/dataRegistries?api-version=2023-06-01&subscription-key={Azure-Maps-Subscription-key}
The data returned when running the list request is similar to the data provided
| property | description | |-|--|
-| contentMD5 | MD5 hash created from the contents of the file being registered. For more information, see [Data validation](#data-validation) |
+| contentMD5 | MD5 hash created from the contents of the file being registered. For more information, see [Data validation] |
| sizeInBytes | The size of the content in bytes. | ## Replace a data registry
-If you need to replace a previously registered file with another file, rerun the register request, passing in the same [AzureBlob](#the-azureblob) used to create the original registration, except for the [blobUrl](#the-bloburl-property). The `BlobUrl` needs to be modified to point to the new file.
+If you need to replace a previously registered file with another file, rerun the register request, passing in the same [AzureBlob] used to create the original registration, except for the [blobUrl]. The `BlobUrl` needs to be modified to point to the new file.
## Data validation When you register a file in Azure Maps using the data registry API, an MD5 hash is created from the contents of the file, encoding it into a 128-bit fingerprint and saving it in the `AzureBlob` as the `contentMD5` property. The MD5 hash stored in the `contentMD5` property is used to ensure the data integrity of the file. Since the MD5 hash algorithm always produces the same output given the same input, the data validation process can compare the `contentMD5` property of the file when it was registered against a hash of the file in the Azure storage account to check that it's intact and unmodified. If the hash isn't the same, the validation fails. If the file in the underlying storage account changes, the validation fails. If you need to modify the contents of a file that has been registered in Azure Maps, you need to register it again. <!- end-style links ->
+[Access to Creator services]: how-to-manage-creator.md#access-to-creator-services
[Azure Maps account]: quick-demo-map-app.md#create-an-azure-maps-account
+[Azure Maps service geographic scope]: geographic-scope.md
[Azure portal]: https://portal.azure.com/
-[create storage account]: /azure/storage/common/storage-account-create?tabs=azure-portal
-[geographic scope]: geographic-scope.md
-[managed identity]: /azure/active-directory/managed-identities-azure-resources/overview
-[storage account overview]: /azure/storage/common/storage-account-overview
-[subscription key]: quick-demo-map-app.md#get-the-subscription-key-for-your-account
-[Visual Studio]: https://visualstudio.microsoft.com/downloads/
-<!- REST API Links >
+[Azure storage account]: /azure/storage/common/storage-account-create?tabs=azure-portal
+[AzureBlob]: #the-azureblob
+[blobUrl]: #the-bloburl-property
+[Create a data registry]: #create-a-data-registry
+[Create a storage account]: /azure/storage/common/storage-account-create?tabs=azure-portal
+[Data registry properties]: #data-registry-properties
[data registry]: /rest/api/maps/data-registry
+[Data validation]: #data-validation
[Get operation]: /rest/api/maps/data-registry/get-operation [list]: /rest/api/maps/data-registry/list
-[Register]: /rest/api/maps/data-registry/register-or-replace
+[managed identities for Azure resources]: /azure/active-directory/managed-identities-azure-resources/overview
+[msiClientId]: #the-msiclientid-property
+[storage account overview]: /azure/storage/common/storage-account-overview
+[subscription key]: quick-demo-map-app.md#get-the-subscription-key-for-your-account
+[The user data ID]: #the-user-data-id
+[Visual Studio]: https://visualstudio.microsoft.com/downloads/
azure-maps How To Create Template https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-create-template.md
The template used in this quickstart is from [Azure Quickstart Templates].
The Azure Maps account resource is defined in this template:
-* [**Microsoft.Maps/accounts**](/azure/templates/microsoft.maps/accounts): create an Azure Maps account.
+* [**Microsoft.Maps/accounts**]: create an Azure Maps account.
## Deploy the template
To learn more about Azure Maps and Azure Resource Manager, see the following art
* Create an Azure Maps [demo application] * Learn more about [ARM templates]
-[free account]: https://azure.microsoft.com/free/?WT.mc_id=A261C142F
+[**Microsoft.Maps/accounts**]: /azure/templates/microsoft.maps/accounts
+[ARM templates]: ../azure-resource-manager/templates/overview.md
[Azure Quickstart Templates]: https://azure.microsoft.com/resources/templates/maps-create [demo application]: quick-demo-map-app.md
-[ARM templates]: ../azure-resource-manager/templates/overview.md
[Deploy templates]: ../azure-resource-manager/templates/deploy-powershell.md
+[free account]: https://azure.microsoft.com/free/?WT.mc_id=A261C142F
azure-maps How To Dataset Geojson https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-dataset-geojson.md
Azure Maps Creator enables users to import their indoor map data in GeoJSON format with [Facility Ontology 2.0], which can then be used to create a [dataset]. > [!NOTE]
-> This article explains how to create a dataset from a GeoJSON package. For information on additional steps required to complete an indoor map, see [Next steps](#next-steps).
+> This article explains how to create a dataset from a GeoJSON package. For information on additional steps required to complete an indoor map, see [Next steps].
## Prerequisites -- Basic understanding of [Creator for indoor maps](creator-indoor-maps.md).-- Basic understanding of [Facility Ontology 2.0].-- [Azure Maps account]
+- An [Azure Maps account]
+- A [Subscription key]
+- An Azure Maps [Creator resource]
- Basic understanding of [Creator for indoor maps] - Basic understanding of [Facility Ontology 2.0]-- An [Azure Maps account]-- An Azure Maps [Creator resource].-- A [Subscription key]. - Zip package containing all required GeoJSON files. If you don't have GeoJSON files, you can download the [Contoso building sample]. >[!IMPORTANT]
Azure Maps Creator enables users to import their indoor map data in GeoJSON form
## Create dataset using the GeoJSON package
-For more information on the GeoJSON package, see the [Geojson zip package requirements](#geojson-zip-package-requirements) section.
+For more information on the GeoJSON package, see the [Geojson zip package requirements] section.
### Upload the GeoJSON package
https://us.atlas.microsoft.com/mapData/operations/{operationId}?api-version=2.0&
A dataset is a collection of map features, such as buildings, levels, and rooms. To create a dataset from your GeoJSON, use the new [Dataset Create API]. The Dataset Create API takes the `udid` you got in the previous section and returns the `datasetId` of the new dataset. > [!IMPORTANT]
-> This is different from the [previous version][Dataset Create] in that it doesn't require a `conversionId` from a converted drawing package.
+> This is different from the previous version of the [Dataset Create] API in that it doesn't require a `conversionId` from a converted drawing package.
To create a dataset:
-1. Enter the following URL to the dataset service. The request should look like the following URL (replace {udid} with the `udid` obtained in [Check the GeoJSON package upload status](#check-the-geojson-package-upload-status) section):
+1. Enter the following URL to the dataset service. The request should look like the following URL (replace {udid} with the `udid` obtained in [Check the GeoJSON package upload status] section):
```http https://us.atlas.microsoft.com/datasets?api-version=2022-09-01-preview&udid={udid}&subscription-key={Your-Azure-Maps-Subscription-key}
To create a dataset:
To check the status of the dataset creation process and retrieve the `datasetId`:
-1. Enter the status URL you copied in [Create a dataset](#create-a-dataset). The request should look like the following URL:
+1. Enter the status URL you copied in [Create a dataset]. The request should look like the following URL:
```http https://us.atlas.microsoft.com/datasets/operations/{operationId}?api-version=2022-09-01-preview&subscription-key={Your-Azure-Maps-Subscription-key}
To check the status of the dataset creation process and retrieve the `datasetId`
> `https://us.atlas.microsoft.com/datasets/**c9c15957-646c-13f2-611a-1ea7adc75174**?api-version=2022-09-01-preview`
-See [Next steps](#next-steps) for links to articles to help you complete your indoor map.
+See [Next steps] for links to articles to help you complete your indoor map.
## Add data to an existing dataset
Feature IDs can only contain alpha-numeric (a-z, A-Z, 0-9), hyphen (-), dot (.)
### Facility ontology 2.0 validations in the Dataset
-[Facility ontology] defines how Azure Maps Creator internally stores facility data, divided into feature classes, in a Creator dataset. When importing a GeoJSON package, anytime a feature is added or modified, a series of validations run. This includes referential integrity checks and geometry and attribute validations. These validations are described in more detail in the following list.
+[Facility Ontology 2.0] defines how Azure Maps Creator internally stores facility data, divided into feature classes, in a Creator dataset. When importing a GeoJSON package, anytime a feature is added or modified, a series of validations run. This includes referential integrity checks and geometry and attribute validations. These validations are described in more detail in the following list.
- The maximum number of features that can be imported into a dataset at a time is 150,000. - The facility area can be between 4 and 4,000 Sq Km.
Feature IDs can only contain alpha-numeric (a-z, A-Z, 0-9), hyphen (-), dot (.)
> [!div class="nextstepaction"] > [Create a tileset]
-<! learn.microsoft.com links >
[Access to Creator services]: how-to-manage-creator.md#access-to-creator-services [area]: creator-facility-ontology.md?pivots=facility-ontology-v2#areaelement [Azure Maps account]: quick-demo-map-app.md#create-an-azure-maps-account
+[Check the GeoJSON package upload status]: #check-the-geojson-package-upload-status
+[Contoso building sample]: https://github.com/Azure-Samples/am-creator-indoor-data-examples
[Convert a drawing package]: tutorial-creator-indoor-maps.md#convert-a-drawing-package
+[Create a dataset]: #create-a-dataset
[Create a tileset]: tutorial-creator-indoor-maps.md#create-a-tileset [Creator for indoor maps]: creator-indoor-maps.md [Creator Long-Running Operation API V2]: creator-long-running-operation-v2.md [Creator resource]: how-to-manage-creator.md
+[Data Upload API]: /rest/api/maps/data-v2/upload
+[Dataset Create API]: /rest/api/maps/v20220901preview/dataset/create
+[Dataset Create]: /rest/api/maps/v2/dataset/create
[dataset]: creator-indoor-maps.md#datasets [Facility Ontology 2.0]: creator-facility-ontology.md?pivots=facility-ontology-v2 [facility]: creator-facility-ontology.md?pivots=facility-ontology-v2#facility
+[Geojson zip package requirements]: #geojson-zip-package-requirements
[level]: creator-facility-ontology.md?pivots=facility-ontology-v2#level [line]: creator-facility-ontology.md?pivots=facility-ontology-v2#lineelement
+[Next steps]: #next-steps
[openings]: creator-facility-ontology.md?pivots=facility-ontology-v2#opening [point]: creator-facility-ontology.md?pivots=facility-ontology-v2#pointelement
+[RFC 7946]: https://www.rfc-editor.org/rfc/rfc7946.html
[structures]: creator-facility-ontology.md?pivots=facility-ontology-v2#structure [Subscription key]: quick-demo-map-app.md#get-the-subscription-key-for-your-account [units]: creator-facility-ontology.md?pivots=facility-ontology-v2#unit [verticalPenetrations]: creator-facility-ontology.md?pivots=facility-ontology-v2#verticalpenetration
-<! REST API Links >
-[Data Upload API]: /rest/api/maps/data-v2/upload
-[Dataset Create API]: /rest/api/maps/v20220901preview/dataset/create
-[Dataset Create]: /rest/api/maps/v2/dataset/create
-<! External Links >
-[Contoso building sample]: https://github.com/Azure-Samples/am-creator-indoor-data-examples
-[RFC 7946]: https://www.rfc-editor.org/rfc/rfc7946.html
[Visual Studio]: https://visualstudio.microsoft.com/downloads/
azure-maps How To Dev Guide Java Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-dev-guide-java-sdk.md
The Azure Maps Java SDK can be integrated with Java applications and libraries t
## Prerequisites -- [Azure Maps account].-- [Subscription key] or other form of [authentication].
+- An [Azure Maps account]
+- A [Subscription key] or other form of [authentication]
- [Java Version 8] or above   - Maven (any version). For more information, see [Get started with Azure SDK and Apache Maven][maven].
The client object used to access the Azure Maps Search APIs require either an `A
### Using an Azure AD credential
-You can authenticate with Azure AD using the [Azure Identity library][Identity library]. To use the [DefaultAzureCredential] provider, you need to add the mvn dependency in the `pom.xml` file:
+You can authenticate with Azure AD using the [Azure Identity library]. To use the [DefaultAzureCredential] provider, you need to add the mvn dependency in the `pom.xml` file:
```xml <dependency>
You can authenticate with Azure AD using the [Azure Identity library][Identity l
</dependency> ```
-You need to register the new Azure AD application and grant access to Azure Maps by assigning the required role to your service principal. For more information, see [Host a daemon on non-Azure resources][Host daemon]. The Application (client) ID, a Directory (tenant) ID, and a client secret are returned. Copy these values and store them in a secure place. You need them in the following steps.
+You need to register the new Azure AD application and grant access to Azure Maps by assigning the required role to your service principal. For more information, see [Host a daemon on non-Azure resources]. The Application (client) ID, a Directory (tenant) ID, and a client secret are returned. Copy these values and store them in a secure place. You need them in the following steps.
Set the values of the Application (client) ID, Directory (tenant) ID, and client secret of your Azure AD application, and the map resource's client ID as environment variables:
public class Demo{
[authentication]: azure-maps-authentication.md [Azure Maps account]: quick-demo-map-app.md#create-an-azure-maps-account [defaultazurecredential]: /azure/developer/java/sdk/identity-azure-hosted-auth#default-azure-credential
-[Host daemon]: ./how-to-secure-daemon-app.md#host-a-daemon-on-non-azure-resources
-[Identity library]: /java/api/overview/azure/identity-readme?source=recommendations&view=azure-java-stable
+[Host a daemon on non-Azure resources]: ./how-to-secure-daemon-app.md#host-a-daemon-on-non-azure-resources
+[Azure Identity library]: /java/api/overview/azure/identity-readme?source=recommendations&view=azure-java-stable
[Java Standard Versions]: https://www.oracle.com/java/technologies/downloads/ [Java Version 8]: /azure/developer/java/fundamentals/?view=azure-java-stable [maven]: /azure/developer/java/sdk/get-started-maven
azure-maps How To Use Image Templates Web Sdk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-image-templates-web-sdk.md
For the source code for this sample, see [Symbol layer with built-in icon templa
<!-- <br/>
-<iframe height="500" scrolling="no" title="Symbol layer with built-in icon template" src="//codepen.io/azuremaps/embed/VoQMPp/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/VoQMPp/'>Symbol layer with built-in icon template</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/VoQMPp/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> ## Use an image template along a lines path
The [Line layer with built-in icon template] demonstrates how to do this. As sho
<!-- <br/>
-<iframe height="500" scrolling="no" title="Line layer with built-in icon template" src="//codepen.io/azuremaps/embed/KOQvJe/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/KOQvJe/'>Line layer with built-in icon template</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/KOQvJe/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> > [!TIP]
The [Fill polygon with built-in icon template] sample demonstrates how to render
<!-- <br/>
-<iframe height="500" scrolling="no" title="Fill polygon with built-in icon template" src="//codepen.io/azuremaps/embed/WVMEmz/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/WVMEmz/'>Fill polygon with built-in icon template</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WVMEmz/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> > [!TIP]
The [HTML Marker with built-in icon template] sample demonstrates this using the
<!-- <br/>
-<iframe height="500" scrolling="no" title="HTML Marker with built-in icon template" src="//codepen.io/azuremaps/embed/EqQvzq/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/EqQvzq/'>HTML Marker with built-in icon template</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/EqQvzq/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> > [!TIP]
The [Add custom icon template to atlas namespace] sample demonstrates how to tak
<!-- <br/>
-<iframe height="500" scrolling="no" title="Add custom icon template to atlas namespace" src="//codepen.io/azuremaps/embed/NQyvEX/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/NQyvEX/'>Add custom icon template to atlas namespace</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/NQyvEX/?height=500&theme-id=0&default-tab=js,result&editable=true]
-> ## List of image templates
With the following tool, you can render the different built-in image templates i
<br/>
-<iframe height="500" scrolling="no" title="Icon template options" src="//codepen.io/azuremaps/embed/NQyaaO/?height=500&theme-id=0&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/NQyaaO/'>Icon template options</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/NQyaaO/?height=500&theme-id=0&default-tab=result]
## Next steps
azure-maps How To Use Map Control https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-map-control.md
atlas.setDomain('atlas.azure.us');
Be sure to use Azure Maps authentication details from the Azure Government cloud platform when authenticating the map and services.
-The domain for the services needs to be set when creating an instance of an API URL endpoint, when using the services module. For example, the following code creates an instance of the `SearchURL` class and points the domain to the Azure Government cloud.
-
-```javascript
-var searchURL = new atlas.service.SearchURL(pipeline, 'atlas.azure.us');
-```
-
-If directly accessing the Azure Maps REST services, change the URL domain to `atlas.azure.us`. For example, if using the search API service, change the URL domain from `https://atlas.microsoft.com/search/` to `https://atlas.azure.us/search/`.
- ## JavaScript frameworks If developing using a JavaScript framework, one of the following open-source projects may be useful:
azure-maps How To Use Services Module https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/how-to-use-services-module.md
The following image is a screenshot showing the results of this sample code, a t
:::image type="content" source="./media/how-to-use-services-module/services-module-in-webpage.png"alt-text="A screenshot of an HTML table showing the address searched and the resulting coordinates."::: <!-
-<iframe height="500" scrolling="no" title="Using the Services Module" src="//codepen.io/azuremaps/embed/zbXGMR/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/zbXGMR/'>Using the Services Module</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/zbXGMR/?height=500&theme-id=0&default-tab=js,result&editable=true]
> ## Azure Government cloud support
azure-maps Map Accessibility https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-accessibility.md
The [Accessible popups] example loads points of interests on the map using a sym
<! <br/>
-<iframe height='500' scrolling='no' title='Make an accessible application' src='//codepen.io/azuremaps/embed/ZoVyZQ/?height=504&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ZoVyZQ/'>Make an accessible application</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>. </iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ZoVyZQ/?height=504&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
<br/> >
azure-maps Map Add Bubble Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-bubble-layer.md
map.events.add("load", function () {
<! <br/>
-<iframe height='500' scrolling='no' title='BubbleLayer DataSource' src='//codepen.io/azuremaps/embed/mzqaKB/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/mzqaKB/'>BubbleLayer DataSource</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/mzqaKB/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> ## Show labels with a bubble layer
This code shows you how to use a bubble layer to render a point on the map and a
<! <br/>
-<iframe height='500' scrolling='no' title='MultiLayer DataSource' src='//codepen.io/azuremaps/embed/rqbQXy/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/rqbQXy/'>MultiLayer DataSource</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/rqbQXy/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> ## Customize a bubble layer
The Bubble layer only has a few styling options. Use the [Bubble Layer Options]
<!- <br/>
-<iframe height='700' scrolling='no' title='Bubble Layer Options' src='//codepen.io/azuremaps/embed/eQxbGm/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/eQxbGm/'>Bubble Layer Options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/eQxbGm/?height=700&theme-id=0&default-tab=result]
> ## Next steps
azure-maps Map Add Controls https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-controls.md
map.controls.add(new atlas.control.ZoomControl(), {
<!- <br/>
-<iframe height='500' scrolling='no' title='Adding a zoom control' src='//codepen.io/azuremaps/embed/WKOQyN/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WKOQyN/'>Adding a zoom control</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WKOQyN/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Add pitch control
map.controls.add(new atlas.control.PitchControl(), {
<!- <br/>
-<iframe height='500' scrolling='no' title='Adding a pitch control' src='//codepen.io/azuremaps/embed/xJrwaP/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/xJrwaP/'>Adding a pitch control</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/xJrwaP/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Add compass control
map.controls.add(new atlas.control.CompassControl(), {
<!- <br/>
-<iframe height='500' scrolling='no' title='Adding a rotate control' src='//codepen.io/azuremaps/embed/GBEoRb/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/GBEoRb/'>Adding a rotate control</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/GBEoRb/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## A Map with all controls
The following image shows a map with the zoom, compass, pitch, and style picker
<!- <br/>
-<iframe height='500' scrolling='no' title='A map with all the controls' src='//codepen.io/azuremaps/embed/qyjbOM/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/qyjbOM/'>A map with all the controls</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/qyjbOM/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> The style picker control is defined by the [StyleControl] class. For more information on using the style picker control, see [choose a map style].
The [Navigation Control Options] sample is a tool to test out the various option
<!- <br/>
-<iframe height="700" scrolling="no" title="Navigation control options" src="//codepen.io/azuremaps/embed/LwBZMx/?height=700&theme-id=0&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/LwBZMx/'>Navigation control options</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/LwBZMx/?height=700&theme-id=0&default-tab=result]
-> If you want to create customized navigation controls, create a class that extends from the `atlas.Control` class or create an HTML element and position it above the map div. Have this UI control call the maps `setCamera` function to move the map.
azure-maps Map Add Custom Html https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-custom-html.md
For a complete working sample of how to add an HTML marker, see [Simple HTML Mar
:::image type="content" source="./media/map-add-custom-html/simple-html-marker.png" alt-text="Screenshot showing a map of the world with a simple HtmlMarker."::: <!-
-<iframe height='500' scrolling='no' title='Add an HTML Marker to a map' src='//codepen.io/azuremaps/embed/MVoeVw/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/MVoeVw/'>Add an HTML Marker to a map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/MVoeVw/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Create SVG templated HTML marker
For a complete working sample of how to create a custom SVG template and use it
:::image type="content" source="./media/map-add-custom-html/html-marker-with-custom-svg-template.png" alt-text="Screenshot showing a map of the world with a custom SVG template used with the HtmlMarker class. It includes a button labeled update marker options, that when selected changes the color and text options from the SVG template used in the HtmlMarker. "::: <!-
-<iframe height='500' scrolling='no' title='HTML Marker with Custom SVG Template' src='//codepen.io/azuremaps/embed/LXqMWx/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/LXqMWx/'>HTML Marker with Custom SVG Template</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/LXqMWx/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> > [!TIP]
For a complete working sample of how to use CSS and HTML to create a marker on t
:::image type="content" source="./media/map-add-custom-html/css-styled-html-marker.gif" alt-text="Screenshot showing a CSS styled HTML marker. "::: <!-
-<iframe height='500' scrolling='no' title='HTML DataSource' src='//codepen.io/azuremaps/embed/qJVgMx/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/qJVgMx/'>HTML DataSource</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/qJVgMx/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Draggable HTML markers
For a complete working sample of how to use CSS and HTML to create a marker on t
:::image type="content" source="./media/map-add-custom-html/draggable-html-marker.gif" alt-text="Screenshot showing a map of the United States with a yellow thumb tack being dragged to demonstrate a draggable HTML marker. "::: <!U-
-<iframe height='500' scrolling='no' title='Draggable HTML Marker' src='//codepen.io/azuremaps/embed/wQZoEV/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/wQZoEV/'>Draggable HTML Marker</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/wQZoEV/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Add mouse events to HTML markers
For a complete working sample of how to add mouse and drag events to an HTML mar
<!- <br/>
-<iframe height='500' scrolling='no' title='Adding Mouse Events to HTML Markers' src='//codepen.io/azuremaps/embed/RqOKRz/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/RqOKRz/'>Adding Mouse Events to HTML Markers</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/RqOKRz/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Next steps
azure-maps Map Add Drawing Toolbar https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-drawing-toolbar.md
For a complete working sample that demonstrates how to add a drawing toolbar to
:::image type="content" source="./media/map-add-drawing-toolbar/add-drawing-toolbar.png" alt-text="Screenshot showing the drawing toolbar on a map."::: <!
-<iframe height="500" scrolling="no" title="Add drawing toolbar" src="//codepen.io/azuremaps/embed/ZEzLeRg/?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/ZEzLeRg/'>Add drawing toolbar</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ZEzLeRg/?height=265&theme-id=0&default-tab=js,result&editable=true]
> ## Limit displayed toolbar options
The following screenshot shows a sample of an instance of the drawing manager th
:::image type="content" source="./media/map-add-drawing-toolbar/limit-displayed-toolbar-options.png" alt-text="Screenshot that demonstrates an instance of the drawing manager that displays the toolbar with just a polygon drawing tool on the map."::: <!
-<iframe height="500" scrolling="no" title="Add a polygon drawing tool" src="//codepen.io/azuremaps/embed/OJLWWMy/?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/OJLWWMy/'>Add a polygon drawing tool</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/OJLWWMy/?height=265&theme-id=0&default-tab=js,result&editable=true]
> ## Change drawing rendering style
For a complete working sample that demonstrates how to customize the rendering o
:::image type="content" source="./media/map-add-drawing-toolbar/change-drawing-rendering-style.png" alt-text="Screenshot showing different drawing shaped rendered on a map."::: <!
-<iframe height="500" scrolling="no" title="Change drawing rendering style" src="//codepen.io/azuremaps/embed/OJLWpyj/?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/OJLWpyj/'>Change drawing rendering style</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/OJLWpyj/?height=265&theme-id=0&default-tab=js,result&editable=true]
> > [!NOTE]
azure-maps Map Add Heat Map Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-heat-map-layer.md
The [Simple Heat Map Layer] sample demonstrates how to create a simple heat map
:::image type="content" source="./media/map-add-heat-map-layer/add-a-heat-map-layer.png" alt-text="Screenshot showing a map displaying a heat map."::: <!
-<iframe height='500' scrolling='no' title='Simple Heat Map Layer' src='//codepen.io/azuremaps/embed/gQqdQB/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/gQqdQB/'>Simple Heat Map Layer</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/gQqdQB/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> ## Customize the heat map layer
The [Heat Map Layer Options] sample shows how the different options of the heat
:::image type="content" source="./media/map-add-heat-map-layer/heat-map-layer-options.png" alt-text="Screenshot showing a map displaying a heat map, and a panel with editable settings that show how the different options of the heat map layer affect rendering."::: <!
-<iframe height='700' scrolling='no' title='Heat Map Layer Options' src='//codepen.io/azuremaps/embed/WYPaXr/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WYPaXr/'>Heat Map Layer Options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WYPaXr/?height=700&theme-id=0&default-tab=result]
> ## Consistent zoomable heat map
The [Consistent zoomable Heat Map] sample shows how to create a heat map where t
:::image type="content" source="./media/map-add-heat-map-layer/consistent-zoomable-heat-map.png" alt-text="Screenshot showing a map displaying a heat map that uses a zoom expression that scales the radius for each zoom level."::: <!
-<iframe height="500" scrolling="no" title="Consistent zoomable heat map" src="//codepen.io/azuremaps/embed/OGyMZr/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/OGyMZr/'>Consistent zoomable heat map</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/OGyMZr/?height=500&theme-id=0&default-tab=js,result&editable=true]
> The `zoom` expression can only be used in `step` and `interpolate` expressions. The following expression can be used to approximate a radius in meters. This expression uses a placeholder `radiusMeters`, which you should replace with your desired radius. This expression calculates the approximate pixel radius for a zoom level at the equator for zoom levels 0 and 24, and uses an `exponential interpolation` expression to scale between these values the same way the tiling system in the map works.
azure-maps Map Add Image Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-image-layer.md
For a fully functional sample that shows how to overlay an image of a map of New
:::image type="content" source="./media/map-add-image-layer/simple-image-layer.png" alt-text="A screenshot showing a map with an image of a map of Newark New Jersey from 1922 as an Image layer."::: <!--
-<iframe height='500' scrolling='no' title='Simple Image Layer' src='//codepen.io/azuremaps/embed/eQodRo/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/eQodRo/'>Simple Image Layer</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/eQodRo/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Import a KML file as ground overlay
For a fully functional sample that shows how to use a KML Ground Overlay as Imag
:::image type="content" source="./media/map-add-image-layer/kml-ground-overlay-as-image-layer.png" alt-text="A screenshot showing a map with a KML Ground Overlay appearing as Image Layer."::: <!--
-<iframe height='500' scrolling='no' title='KML Ground Overlay as Image Layer' src='//codepen.io/azuremaps/embed/EOJgpj/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/EOJgpj/'>KML Ground Overlay as Image Layer</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/EOJgpj/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> > [!TIP]
The image layer has many styling options. For a fully functional sample that sho
:::image type="content" source="./media/map-add-image-layer/image-layer-options.png" alt-text="A screenshot showing a map with a panel that has the different options of the image layer that affect rendering. In this sample, you can change styling options and see the effect it has on the map."::: <!--
-<iframe height='700' scrolling='no' title='Image Layer Options' src='//codepen.io/azuremaps/embed/RqOGzx/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/RqOGzx/'>Image Layer Options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/RqOGzx/?height=700&theme-id=0&default-tab=result]
--> ## Next steps
azure-maps Map Add Line Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-line-layer.md
The following screenshot shows a sample of the above functionality.
:::image type="content" source="./media/map-add-line-layer/add-line-layer.png"alt-text="A screenshot showing a line layer on an Azure Maps map."::: <!--
-<iframe height='500' scrolling='no' title='Add a line to a map' src='//codepen.io/azuremaps/embed/qomaKv/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/qomaKv/'>Add a line to a map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/qomaKv/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> Line layers can be styled using [LineLayerOptions] and [Use data-driven style expressions].
This code creates a map that appears as follows:
:::image type="content" source="./media/map-add-line-layer/add-symbols-along-a-line.png"alt-text="A screenshot showing a line layer on an Azure Maps map with arrow symbols along the line."::: <!--
-<iframe height="500" scrolling="no" title="Show arrow along line" src="//codepen.io/azuremaps/embed/drBJwX/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/drBJwX/'>Show arrow along line</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/drBJwX/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> > [!TIP]
For a fully functional sample that shows how to apply a stroke gradient to a lin
:::image type="content" source="./media/map-add-line-layer/line-with-stroke-gradient.png"alt-text="A screenshot showing a line with a stroke gradient on the map."::: <!--
-<iframe height="500" scrolling="no" title="Line with Stroke Gradient" src="//codepen.io/azuremaps/embed/wZwWJZ/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/wZwWJZ/'>Line with Stroke Gradient</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/wZwWJZ/?height=500&theme-id=0&default-tab=js,result&editable=true]
--> ## Customize a line layer
The Line layer has several styling options. For a fully functional sample that i
:::image type="content" source="./media/map-add-line-layer/line-layer-options.png"alt-text="A screenshot showing the Line Layer Options sample that shows how the different options of the line layer affect rendering."::: <!--
-<iframe height='700' scrolling='no' title='Line Layer Options' src='//codepen.io/azuremaps/embed/GwLrgb/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/GwLrgb/'>Line Layer Options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/GwLrgb/?height=700&theme-id=0&default-tab=result]
--> ## Next steps
azure-maps Map Add Pin https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-pin.md
function InitMap()
:::image type="content" source="./media/map-add-pin/add-symbol-layer.png" alt-text="A screenshot of map with a pin added using the symbol layer."::: <!-
-<iframe height='500' scrolling='no' title='Switch pin location' src='//codepen.io/azuremaps/embed/ZqJjRP/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ZqJjRP/'>Switch pin location</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ZqJjRP/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> > [!TIP]
function InitMap()
:::image type="content" source="./media/map-add-pin/add-custom-icon-to-symbol-layer.png" alt-text="A screenshot of map with a pin added using the symbol layer with a custom icon."::: <!-
-<iframe height='500' scrolling='no' title='Custom Symbol Image Icon' src='//codepen.io/azuremaps/embed/WYWRWZ/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WYWRWZ/'>Custom Symbol Image Icon</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WYWRWZ/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> > [!TIP]
The symbol layer has many styling options available. The [Symbol Layer Options]
:::image type="content" source="./media/map-add-pin/symbol-layer-options.png" alt-text="A screenshot of map with a panel on the left side of the map with the various symbol options that can be interactively set."::: <!-
-<iframe height='700' scrolling='no' title='Symbol Layer Options' src='//codepen.io/azuremaps/embed/PxVXje/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/PxVXje/'>Symbol Layer Options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/PxVXje/?height=700&theme-id=0&default-tab=result]
-> > [!TIP]
azure-maps Map Add Popup https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-popup.md
For a fully functional sample that shows how to create one popup and reuse it ra
:::image type="content" source="./media/map-add-popup/reusing-popup-with-multiple-pins.png"alt-text="A screenshot of map with three blue pins."::: <!--
-<iframe height='500' scrolling='no' title='Reusing Popup with Multiple Pins' src='//codepen.io/azuremaps/embed/rQbjvK/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/rQbjvK/'>Reusing Popup with Multiple Pins</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/rQbjvK/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> ## Customizing a popup
For a fully functional sample that shows how to customize the look of a popup, s
:::image type="content" source="./media/map-add-popup/customize-popup.png"alt-text="A screenshot of map with a custom popup in the center of the map with the caption 'hello world'."::: <!--
-<iframe height="500" scrolling="no" title="Customized Popup" src="//codepen.io/azuremaps/embed/ymKgdg/?height=500&theme-id=0&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/ymKgdg/'>Customized Popup</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ymKgdg/?height=500&theme-id=0&default-tab=result]
--> ## Add popup templates to the map
function InitMap()
:::image type="content" source="./media/map-add-popup/points-without-defined-template.png"alt-text="A screenshot of map with six blue dots."::: <!--
-<iframe height='500' scrolling='no' title='PopupTemplates' src='//codepen.io/azuremaps/embed/dyovrzL/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/dyovrzL/'>PopupTemplates</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/dyovrzL/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> ## Reuse popup template
For a fully functional sample that shows hot to reuse a single popup template wi
:::image type="content" source="./media/map-add-popup/reuse-popup-template.png"alt-text="A screenshot of a map showing Seattle with three blue pins to demonstrating how to reuse popup templates."::: <!--
-<iframe height='500' scrolling='no' title='ReusePopupTemplate' src='//codepen.io/azuremaps/embed/WNvjxGw/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WNvjxGw/'>ReusePopupTemplate</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WNvjxGw/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> ## Popup events
For a fully functional sample that shows how to add events to popups, see [Popup
:::image type="content" source="./media/map-add-popup/popup-events.png" alt-text="A screenshot of a map of the world with a popup in the center and a list of events in the upper left that are highlighted when the user opens, closes, or drags the popup."::: <!--
-<iframe height="500" scrolling="no" title="Popup events" src="//codepen.io/azuremaps/embed/BXrpvB/?height=500&theme-id=0&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/BXrpvB/'>Popup events</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/BXrpvB/?height=500&theme-id=0&default-tab=result]
--> ## Next steps
azure-maps Map Add Shape https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-shape.md
function InitMap()
:::image type="content" source="./media/map-add-shape/polygon-layer.png" alt-text="A screenshot of map of New York City demonstrating the polygon layer that is covering Central Park with fill Color set to red and fill Opacity set to 0.7."::: <!--
-<iframe height='500' scrolling='no' title='Add a polygon to a map ' src='//codepen.io/azuremaps/embed/yKbOvZ/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/yKbOvZ/'>Add a polygon to a map </a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/yKbOvZ/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Use a polygon and line layer together
function InitMap()
:::image type="content" source="./media/map-add-shape/polygon-line-layer.png" alt-text="A screenshot of a map of New York City demonstrating a mostly transparent polygon layer covering all of Central Park, bordered with a red line."::: <!
-<iframe height='500' scrolling='no' title='Polygon and line layer to add polygon' src='//codepen.io/azuremaps/embed/aRyEPy/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/aRyEPy/'>Polygon and line layer to add polygon</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/aRyEPy/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> ## Fill a polygon with a pattern
For a fully functional sample that shows how to use an image template as a fill
:::image type="content" source="./media/map-add-shape/fill-polygon-with-built-in-icon-template.png" alt-text="A screenshot of a map of the world with red dots forming a triangle in the center of the map."::: <!
-<iframe height="500" scrolling="no" title="Polygon fill pattern" src="//codepen.io/azuremaps/embed/JzQpYX/?height=500&theme-id=0&default-tab=js,result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/JzQpYX/'>Polygon fill pattern</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/JzQpYX/?height=500&theme-id=0&default-tab=js,result]
> > [!TIP]
The Polygon layer only has a few styling options. See the [Polygon Layer Options
:::image type="content" source="./media/map-add-shape/polygon-layer-options.png" alt-text="A screenshot of the Polygon Layer Options tool."::: <!
-<iframe height='700' scrolling='no' title='LXvxpg' src='//codepen.io/azuremaps/embed/LXvxpg/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/LXvxpg/'>LXvxpg</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/LXvxpg/?height=700&theme-id=0&default-tab=result]
> <a id="addACircle"></a>
function InitMap()
:::image type="content" source="./media/map-add-shape/add-circle-to-map.png" alt-text="A screenshot of a map showing a partially transparent green circle in New York City. This demonstrates adding a circle to a map."::: <!
-<iframe height='500' scrolling='no' title='Add a circle to a map' src='//codepen.io/azuremaps/embed/PRmzJX/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/PRmzJX/'>Add a circle to a map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/PRmzJX/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Make a geometry easy to update
The [Make a geometry easy to update] sample shows how to wrap a circle GeoJSON o
:::image type="content" source="./media/map-add-shape/easy-to-update-geometry.png" alt-text="A screenshot of a map showing a red circle in New York City with a slider bar titled Circle Radius and as you slide the bar to the right or left, the value of the radius changes and the circle size adjusts automatically on the map."::: <!
-<iframe height='500' scrolling='no' title='Update shape properties' src='//codepen.io/azuremaps/embed/ZqMeQY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ZqMeQY/'>Update shape properties</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ZqMeQY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Next steps
azure-maps Map Add Snap Grid https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-snap-grid.md
The [Use a snapping grid] sample snaps an HTML marker to a grid when it's dragge
:::image type="content" source="./media/map-add-snap-grid/use-snapping-grid.png"alt-text="A screenshot that shows the snap grid on map."::: <!--
-<iframe height="500" scrolling="no" title="Use a snapping grid" src="https://codepen.io/azuremaps/embed/rNmzvXO?default-tab=js%2Cresult" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href="https://codepen.io/azuremaps/pen/rNmzvXO">
- Use a snapping grid</a> by Azure Maps (<a href="https://codepen.io/azuremaps">@azuremaps</a>)
- on <a href="https://codepen.io">CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/rNmzvXO?default-tab=js%2Cresult]
> ## Snap grid options
The [Snap grid options] sample shows the different customization options availab
:::image type="content" source="./media/map-add-snap-grid/snap-grid-options.png"alt-text="A screenshot of map with snap grid enabled and an options panel on the left where you can set various options and see the results in the map."::: <!--
-<iframe height="700" scrolling="no" title="Snap grid options" src="https://codepen.io/azuremaps/embed/RwVZJry?default-tab=result" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href="https://codepen.io/azuremaps/pen/RwVZJry">
- Snap grid options</a> by Azure Maps (<a href="https://codepen.io/azuremaps">@azuremaps</a>)
- on <a href="https://codepen.io">CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/RwVZJry?default-tab=result]
> ## Next steps
azure-maps Map Add Tile Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-add-tile-layer.md
For a fully functional sample that shows how to create a tile layer that points
:::image type="content" source="./media/map-add-tile-layer/tile-layer.png"alt-text="A screenshot of map with a tile layer that points to a set of tiles using the x, y, zoom tiling system. The source of this tile layer is the OpenSeaMap project."::: <!--
-<iframe height='500' scrolling='no' title='Tile Layer using X, Y, and Z' src='//codepen.io/azuremaps/embed/BGEQjG/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/BGEQjG/'>Tile Layer using X, Y, and Z</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/BGEQjG/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Add an OGC web-mapping service (WMS)
The following screenshot shows the [WMS Tile Layer] sample that overlays a web-m
:::image type="content" source="./media/map-add-tile-layer/wms-tile-layer.png"alt-text="A screenshot of a world map with a tile layer that points to a Web Mapping Service (WMS)."::: <!--
-<iframe height="500" scrolling="no" title="WMS Tile Layer" src="https://codepen.io/azuremaps/embed/BapjZqr?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/BapjZqr'>WMS Tile Layer</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/BapjZqr?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Add an OGC web-mapping tile service (WMTS)
The following screenshot shows the WMTS Tile Layer sample overlaying a web-mappi
:::image type="content" source="./media/map-add-tile-layer/wmts-tile-layer.png"alt-text="A screenshot of a map with a tile layer that points to a Web Mapping Tile Service (WMTS) overlay."::: <!--
-<iframe height="500" scrolling="no" title="WMTS tile layer" src="https://codepen.io/azuremaps/embed/BapjZVY?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/BapjZVY'>WMTS tile layer</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/BapjZVY?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Customize a tile layer
The tile layer class has many styling options. The [Tile Layer Options] sample i
:::image type="content" source="./media/map-add-tile-layer/tile-layer-options.png"alt-text="A screenshot of Tile Layer Options sample."::: <!--
-<iframe height='700' scrolling='no' title='Tile Layer Options' src='//codepen.io/azuremaps/embed/xQeRWX/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/xQeRWX/'>Tile Layer Options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/xQeRWX/?height=700&theme-id=0&default-tab=result]
--> ## Next steps
azure-maps Map Create https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-create.md
You can also load multiple maps on the same page, for sample code that demonstra
:::image type="content" source="./media/map-create/multiple-maps.png"alt-text="A screenshot that shows the snap grid on map."::: <!-
-<iframe height="500" scrolling="no" title="Basic map load" src="//codepen.io/azuremaps/embed/rXdBXx/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/rXdBXx/'>Basic map load</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/rXdBXx/?height=500&theme-id=0&default-tab=js,result&editable=true]
-> > [!TIP] > You can use the same or different authentication and language settings when using multiple maps on the same page.
renderWorldCopies: false
``` <!-
-<iframe height="500" scrolling="no" title="renderWorldCopies = false" src="//codepen.io/azuremaps/embed/eqMYpZ/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/eqMYpZ/'>renderWorldCopies = false</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/eqMYpZ/?height=500&theme-id=0&default-tab=js,result&editable=true]
-> ## Map options
map.setCamera({
Map properties, such as center and zoom level, are part of the [CameraOptions] properties. <!
-<iframe height='500' scrolling='no' title='Create a map via CameraOptions' src='//codepen.io/azuremaps/embed/qxKBMN/?height=543&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/qxKBMN/'>Create a map via `CameraOptions` </a>by Azure Location Based Services (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/qxKBMN/?height=543&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> <a id="setCameraBoundsOptions"></a>
map.setCamera({
In the following code, a [Map object] is constructed via `new atlas.Map()`. Map properties such as `CameraBoundsOptions` can be defined via [setCamera] function of the Map class. Bounds and padding properties are set using `setCamera`. <!-
-<iframe height='500' scrolling='no' title='Create a map via CameraBoundsOptions' src='//codepen.io/azuremaps/embed/ZrRbPg/?height=543&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ZrRbPg/'>Create a map via `CameraBoundsOptions` </a>by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ZrRbPg/?height=543&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ### Animate map view
In the following code, the first code block creates a map and sets the enter and
:::image type="content" source="./media/map-create/animate-maps.png"alt-text="A screenshot showing a map with a button labeled Animate Maps that when pressed, causes the map to zoom in or out."::: <!
-<iframe height='500' scrolling='no' title='Animate Map View' src='//codepen.io/azuremaps/embed/WayvbO/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WayvbO/'>Animate Map View</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WayvbO/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> ## Request transforms
azure-maps Map Events https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-events.md
The [Map Events] sample highlights the name of the events that are firing as you
:::image type="content" source="./media/map-events/map-events.png"alt-text="A screenshot showing a map with a list of map events that are highlighted anytime your actions on the map trigger that event."::: <!--
-<iframe height='600' scrolling='no' title='Interacting with the map ΓÇô mouse events' src='//codepen.io/azuremaps/embed/bLZEWd/?height=600&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/bLZEWd/'>Interact with the map ΓÇô mouse events</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/bLZEWd/?height=600&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Interact with map layers
The [Layer Events] sample highlights the name of the events that are firing as y
:::image type="content" source="./media/map-events/layer-events.png"alt-text="A screenshot showing a map with a list of layer events that are highlighted anytime you interact with the Symbol Layer."::: <!--
-<iframe height='600' scrolling='no' title='Interacting with the map ΓÇô Layer Events' src='//codepen.io/azuremaps/embed/bQRRPE/?height=600&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/bQRRPE/'>Interacting with the map ΓÇô Layer Events</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/bQRRPE/?height=600&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Interact with HTML Marker
The [HTML marker layer events] sample highlights the name of the events that are
:::image type="content" source="./media/map-events/html-marker-layer-events.png"alt-text="A screenshot showing a map with a list of HTML marker layer events that are highlighted anytime your actions on the map trigger that event."::: <!--
-<iframe height='500' scrolling='no' title='Interacting with the map - HTML Marker events' src='//codepen.io/azuremaps/embed/VVzKJY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/VVzKJY/'>Interacting with the map - HTML Marker events</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/VVzKJY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> The following table lists all supported map class events.
azure-maps Map Extruded Polygon https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-extruded-polygon.md
function InitMap()
:::image type="content" source="./media/map-extruded-polygon/polygon-extrusion-layer.png"alt-text="A screenshot of a map showing New York City with a polygon extrusion layer covering central park with what looks like a rectangular red box. The maps angle is set to 45 degrees giving it a 3d appearance."::: <!
-<iframe height="500" scrolling="no" title="Extruded polygon" src="https://codepen.io/azuremaps/embed/wvvBpvE?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/wvvBpvE'>Extruded polygon</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/wvvBpvE?height=265&theme-id=0&default-tab=js,result&editable=true]
> ## Add data driven polygons
The [Create a Choropleth Map] sample shows an extruded choropleth map of the Uni
:::image type="content" source="./media/map-extruded-polygon/choropleth-map.png"alt-text="A screenshot of a map showing a choropleth map rendered using the polygon extrusion layer."::: <!
-<iframe height="500" scrolling="no" title="Extruded choropleth map" src="https://codepen.io/azuremaps/embed/eYYYNox?height=265&theme-id=0&default-tab=result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/eYYYNox'>Extruded choropleth map</a> by Azure Maps(<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/eYYYNox?height=265&theme-id=0&default-tab=result&editable=true]
> ## Add a circle to the map
function InitMap()
:::image type="content" source="./media/map-extruded-polygon/add-circle-to-map.png"alt-text="A screenshot of a map showing a green circle."::: <!
-<iframe height="500" scrolling="no" title="Drone airspace polygon" src="https://codepen.io/azuremaps/embed/zYYYrxo?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/zYYYrxo'>Drone airspace polygon</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/zYYYrxo?height=265&theme-id=0&default-tab=js,result&editable=true]
> ## Customize a polygon extrusion layer
The Polygon Extrusion layer has several styling options. The [Polygon Extrusion
:::image type="content" source="./media/map-extruded-polygon/polygon-extrusion-layer-options.png"alt-text="A screenshot of the Azure Maps code sample that shows how the different options of the polygon extrusion layer affect rendering."::: <!
-<iframe height='700' scrolling='no' title='PoogBRJ' src='//codepen.io/azuremaps/embed/PoogBRJ/?height=700&theme-id=0&default-tab=result' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/PoogBRJ/'>PoogBRJ</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a></iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/PoogBRJ/?height=700&theme-id=0&default-tab=result]
> ## Next steps
azure-maps Map Get Information From Coordinate https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-get-information-from-coordinate.md
document.body.onload = onload;
``` <!--
-<iframe height='500' scrolling='no' title='Get information from a coordinate (Service Module)' src='//codepen.io/azuremaps/embed/ejEYMZ/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ejEYMZ/'>Get information from a coordinate (Service Module)</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ejEYMZ/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> In the previous code example, the first block constructs a map object and sets the authentication mechanism to use Azure Active Directory. For more information, see [Create a map].
document.body.onload = onload;
``` <!--
-<iframe height='500' scrolling='no' title='Get information from a coordinate' src='//codepen.io/azuremaps/embed/ddXzoB/?height=516&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ddXzoB/'>Get information from a coordinate</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ddXzoB/?height=516&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> In the previous code example, the first block of code constructs a map object and sets the authentication mechanism to use Azure Active Directory. You can see [Create a map] for instructions.
azure-maps Map Get Shape Data https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-get-shape-data.md
The [Get drawn shapes from drawing manager] code sample allows you to draw a sha
:::image type="content" source="./media/map-get-shape-data/get-data-from-drawn-shape.png" alt-text="A screenshot of a map with a circle drawn around Seattle. Next to the map is the code used to create the circle."::: <!--
-<iframe height="686" title="Get shape data" src="//codepen.io/azuremaps/embed/xxKgBVz/?height=265&theme-id=0&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true">See the Pen <a href='https://codepen.io/azuremaps/pen/xxKgBVz/'>Get shape data</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/xxKgBVz/?height=265&theme-id=0&default-tab=result]
-> ## Next steps
azure-maps Map Route https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-route.md
document.body.onload = onload;
``` <!--
-<iframe height='500' scrolling='no' title='Show directions from A to B on a map (Service Module)' src='//codepen.io/azuremaps/embed/RBZbep/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/RBZbep/'>Show directions from A to B on a map (Service Module)</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/RBZbep/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> In the previous code example, the first block constructs a map object and sets the authentication mechanism to use Azure Active Directory. You can see [Create a map] for instructions.
document.body.onload = onload;
``` <!--
-<iframe height='500' scrolling='no' title='Show directions from A to B on a map' src='//codepen.io/azuremaps/embed/zRyNmP/?height=469&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/zRyNmP/'>Show directions from A to B on a map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/zRyNmP/?height=469&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> In the previous code example, the first block of code constructs a map object and sets the authentication mechanism to use Azure Active Directory. You can see [Create a map] for instructions.
azure-maps Map Search Location https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-search-location.md
document.body.onload = onload;
``` <!--
-<iframe height='500' scrolling='no' title='Show search results on a map (Service Module)' src='//codepen.io/azuremaps/embed/zLdYEB/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/zLdYEB/'>Show search results on a map (Service Module)</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/zLdYEB/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> In the previous code example, the first block constructs a map object and sets the authentication mechanism to use Azure Active Directory. For more information, see [Create a map].
document.body.onload = onload;
``` <!--
-<iframe height='500' scrolling='no' title='Show search results on a map' src='//codepen.io/azuremaps/embed/KQbaeM/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/KQbaeM/'>Show search results on a map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/KQbaeM/?height=265&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> In the previous code example, the first block of code constructs a map object. It sets the authentication mechanism to use Azure Active Directory. For more information, see [Create a map].
azure-maps Map Show Traffic https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/map-show-traffic.md
The [Traffic Overlay] sample demonstrates how to display the traffic overlay on
:::image type="content" source="./media/map-show-traffic/traffic-overlay.png"alt-text="A screenshot of map with the traffic overlay, showing current traffic."::: <!--
-<iframe height='500' scrolling='no' title='Show traffic on a map' src='//codepen.io/azuremaps/embed/WMLRPw/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/WMLRPw/'>Show traffic on a map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/WMLRPw/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Traffic overlay options
The [Traffic Overlay Options] tool lets you switch between the different traffic
:::image type="content" source="./media/map-show-traffic/traffic-overlay-options.png"alt-text="A screenshot of map showing the traffic overlay options."::: <!--
-<iframe height="700" scrolling="no" title="Traffic overlay options" src="//codepen.io/azuremaps/embed/RwbPqRY/?height=700&theme-id=0&default-tab=result" frameborder='no' loading="lazy" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/RwbPqRY/'>Traffic overlay options</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/RwbPqRY/?height=700&theme-id=0&default-tab=result]
--> ## Add traffic controls
The [Traffic controls] sample is a fully functional map that shows how to displa
:::image type="content" source="./media/map-show-traffic/add-traffic-controls.png"alt-text="A screenshot of map with the traffic display button, showing current traffic."::: <!--
-<iframe height="500" scrolling="no" title="Traffic controls" src="https://codepen.io/azuremaps/embed/ZEWaeLJ?height500&theme-id=0&default-tab=js,result&embed-version=2&editable=true" frameborder='no' loading="lazy" loading="lazy" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/ZEWaeLJ'>Traffic controls</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/ZEWaeLJ?height500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> ## Next steps
azure-maps Release Notes Map Control https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/release-notes-map-control.md
This document contains information about new features and other changes to the M
- Dynamic pixel ratio fixed in underlying maplibre-gl dependency. -- Fixed an issue where `sortKey`, `radialOffset`, `variableAnchor` is not applied when used in `SymbolLayer` options.
+- Fixed an issue where `sortKey`, `radialOffset`, `variableAnchor` isn't applied when used in `SymbolLayer` options.
#### Installation (3.0.0-preview.10)
This update is the first preview of the upcoming 3.0.0 release. The underlying [
## v2 (latest)
+### [2.3.2] (August 11, 2023)
+
+#### Bug fixes (2.3.2)
+
+- Fixed an issue where accessibility-related duplicated DOM elements may result when `map.setServiceOptions` is called.
+
+- Fixed zoom control to take into account the `maxBounds` [CameraOptions].
+
+#### Other changes (2.3.2)
+
+- Added the `mvc` parameter to encompass the map control version in both definitions and style requests.
+ ### [2.3.1] (June 27, 2023) #### Bug fixes (2.3.1) -- fix `ImageSpriteManager` icon images may get removed during style change
+- Fix `ImageSpriteManager` icon images may get removed during style change
#### Other changes (2.3.1) -- security: insecure-randomness fix in UUID generation.
+- Security: insecure-randomness fix in UUID generation.
### [2.3.0] (June 2, 2023)
This update is the first preview of the upcoming 3.0.0 release. The underlying [
#### Bug fixes (2.3.0) -- Fixed an exception that occurred while updating the property of a layout that that no longer exists.
+- Fixed an exception that occurred while updating the property of a layout that no longer exists.
- Fixed an issue where BubbleLayer's accessible indicators didn't update when the data source was modified.
Stay up to date on Azure Maps:
[3.0.0-preview.3]: https://www.npmjs.com/package/azure-maps-control/v/3.0.0-preview.3 [3.0.0-preview.2]: https://www.npmjs.com/package/azure-maps-control/v/3.0.0-preview.2 [3.0.0-preview.1]: https://www.npmjs.com/package/azure-maps-control/v/3.0.0-preview.1
+[2.3.2]: https://www.npmjs.com/package/azure-maps-control/v/2.3.2
[2.3.1]: https://www.npmjs.com/package/azure-maps-control/v/2.3.1 [2.3.0]: https://www.npmjs.com/package/azure-maps-control/v/2.3.0 [2.2.7]: https://www.npmjs.com/package/azure-maps-control/v/2.2.7
Stay up to date on Azure Maps:
[adal-angular]: https://github.com/AzureAD/azure-activedirectory-library-for-js [@azure/msal-browser]: https://github.com/AzureAD/microsoft-authentication-library-for-js [migration guide]: ../active-directory/develop/msal-compare-msal-js-and-adal-js.md
+[CameraOptions]: /javascript/api/azure-maps-control/atlas.cameraoptions?view=azure-maps-typescript-latest
[CameraBoundsOptions]: /javascript/api/azure-maps-control/atlas.cameraboundsoptions?view=azure-maps-typescript-latest [Map.dispose()]: /javascript/api/azure-maps-control/atlas.map?view=azure-maps-typescript-latest#azure-maps-control-atlas-map-dispose [Map.setCamera(options)]: /javascript/api/azure-maps-control/atlas.map?view=azure-maps-typescript-latest#azure-maps-control-atlas-map-setcamera
azure-maps Set Drawing Options https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/set-drawing-options.md
The following image is an example of drawing mode of the `DrawingManager`. Selec
:::image type="content" source="./media/set-drawing-options/drawing-mode.gif"alt-text="A screenshot of a map showing central park in New York City where the drawing manager is demonstrated by drawing line."::: <!--
-<iframe height="500" scrolling="no" title="Draw a polygon" src="//codepen.io/azuremaps/embed/YzKVKRa/?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/YzKVKRa/'>Draw a polygon</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/YzKVKRa/?height=265&theme-id=0&default-tab=js,result&editable=true]
--> ### Set the interaction type
drawingManager = new atlas.drawing.DrawingManager(map,{
<br/>
-<iframe height="500" scrolling="no" title="Free-hand drawing" src="//codepen.io/azuremaps/embed/ZEzKoaj/?height=265&theme-id=0&default-tab=js,result&editable=true" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/ZEzKoaj/'>Free-hand drawing</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ZEzKoaj/?height=265&theme-id=0&default-tab=js,result&editable=true]
> ### Customizing drawing options
The [Drawing manager options] can be used to test out customization of all optio
:::image type="content" source="./media/set-drawing-options/drawing-manager-options.png"alt-text="A screenshot of a map of Seattle with a panel on the left showing the drawing manager options that can be selected to see the effects they make to the map."::: <!
-<iframe height="685" title="Customize drawing manager" src="//codepen.io/azuremaps/embed/LYPyrxR/?height=600&theme-id=0&default-tab=result" frameborder="no" allowtransparency="true" allowfullscreen="true">See the Pen <a href='https://codepen.io/azuremaps/pen/LYPyrxR/'>Get shape data</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/LYPyrxR/?height=600&theme-id=0&default-tab=result]
> ### Put a shape into edit mode
azure-maps Spatial Io Add Ogc Map Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/spatial-io-add-ogc-map-layer.md
The [OGC map layer] sample shows how to overlay an OGC map layer on the map. For
:::image type="content" source="./media/spatial-io-add-ogc-map-layer/ogc-map-layer.png"alt-text="A screenshot that shows the snap grid on map."::: <!-
-<iframe height='700' scrolling='no' title='OGC Map layer example' src='//codepen.io/azuremaps/embed/xxGLZWB/?height=700&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/xxGLZWB/'>OGC Map layer example</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/xxGLZWB/?height=700&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## OGC map layer options
The [OGC map layer options] sample demonstrates the different OGC map layer opti
:::image type="content" source="./media/spatial-io-add-ogc-map-layer/ogc-map-layer-options.png"alt-text="A screenshot that shows a map along with the OGC map layer options."::: <!-
-<iframe height='700' scrolling='no' title='OGC map layer options' src='//codepen.io/azuremaps/embed/abOyEVQ/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/abOyEVQ/'>OGC map layer options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/abOyEVQ/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true]
-> ## OGC Web Map Service explorer
The [OGC Web Map Service explorer] sample overlays imagery from the Web Map Serv
:::image type="content" source="./media/spatial-io-add-ogc-map-layer/ogc-web-map-service-explorer.png"alt-text="A screenshot that shows a map with a WMTS layer that comes from the world geology survey. Left of the map is a drop-down list showing the OGC services that can be selected."::: <!-
-<iframe height='750' scrolling='no' title='OGC Web Map Service explorer' src='//codepen.io/azuremaps/embed/YzXxYdX/?height=750&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/YzXxYdX/'>OGC Web Map Service explorer</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/YzXxYdX/?height=750&theme-id=0&default-tab=result&embed-version=2&editable=true]
-> You may also specify the map settings to use a proxy service. The proxy service lets you load resources that are hosted on domains that don't have CORS enabled.
azure-maps Spatial Io Add Simple Data Layer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/spatial-io-add-simple-data-layer.md
This sample code renders the point feature using the simple data layer, and appe
> &emsp; "coordinates": [0, 0] <!
-<iframe height="500" scrolling="no" title="Use the Simple data layer" src="//codepen.io/azuremaps/embed/zYGzpQV/?height=500&theme-id=0&default-tab=js,result&editable=true" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true"> See the Pen <a href='https://codepen.io/azuremaps/pen/zYGzpQV/'>Use the simple data layer</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/zYGzpQV/?height=500&theme-id=0&default-tab=js,result&editable=true]
> The real power of the simple data layer comes when:
For example when parsing XML data feeds, you may not know the exact styles and g
:::image type="content" source="./media/spatial-io-add-simple-data-layer/simple-data-layer-options.png"alt-text="A screenshot of map with a panel on the left showing the different simple data layer options."::: <!
-<iframe height="700" scrolling="no" title="Simple data layer options" src="//codepen.io/azuremaps/embed/gOpRXgy/?height=700&theme-id=0&default-tab=result" frameborder='no' loading="lazy" allowtransparency="true" allowfullscreen="true"> See the Pen <a href='https://codepen.io/azuremaps/pen/gOpRXgy/'>Simple data layer options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/gOpRXgy/?height=700&theme-id=0&default-tab=result]
> > [!NOTE]
azure-maps Spatial Io Connect Wfs Service https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/spatial-io-connect-wfs-service.md
The [Simple WFS example] sample shows how to easily query a Web Feature Service
:::image type="content" source="./media/spatial-io-connect-wfs-service/simple-wfs-example.png"alt-text="A screenshot that shows the results of a WFS overlay on a map."::: <!--
-<iframe height='700' scrolling='no' title='Simple WFS example' src='//codepen.io/azuremaps/embed/MWwvVYY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/MWwvVYY/'>Simple WFS example</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/MWwvVYY/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
-> ## Supported filters
The [WFS filter example] sample demonstrates the use of different filters with t
:::image type="content" source="./media/spatial-io-connect-wfs-service/wfs-filter-example.png"alt-text="A screenshot that shows The WFS filter sample that demonstrates the use of different filters with the WFS client."::: <!--
-<iframe height='500' scrolling='no' title= 'WFS filter examples' src='//codepen.io/azuremaps/embed/NWqvYrV/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/NWqvYrV/'>WFS filter examples</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/NWqvYrV/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> ## WFS service explorer
The [WFS service explorer] sample is a simple tool for exploring WFS services on
:::image type="content" source="./media/spatial-io-connect-wfs-service/wfs-service-explorer.png"alt-text="A screenshot that shows a simple tool for exploring WFS services on Azure Maps."::: <!--
-<iframe height='700' scrolling='no' title= 'WFS service explorer' src='//codepen.io/azuremaps/embed/bGdrvmG/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/bGdrvmG/'>WFS service explorer</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.
-</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/bGdrvmG/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> To access WFS services hosted on non-CORS enabled endpoints, a CORS enabled proxy service can be passed into the `proxyService` option of the WFS client as shown in the following example.
azure-maps Spatial Io Read Write Spatial Data https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/spatial-io-read-write-spatial-data.md
The [Load spatial data] sample shows how to read a spatial data set, and renders
:::image type="content" source="./media/spatial-io-read-write-spatial-data/load-spatial-data.png"alt-text="A screenshot that shows the snap grid on map."::: <!--
-<iframe height='500' scrolling='no' title='Load Spatial Data Simple' src='//codepen.io/azuremaps/embed/yLNXrZx/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/yLNXrZx/'>Load Spatial Data Simple</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/yLNXrZx/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> The next code demo shows how to read and load KML, or KMZ, to the map. KML can contain ground overlays, which is in the form of an `ImageLyaer` or `OgcMapLayer`. These overlays must be added on the map separately from the features. Additionally, if the data set has custom icons, those icons need to be loaded to the maps resources before the features are loaded.
The [Load KML onto map] sample shows how to load KML or KMZ files onto the map.
:::image type="content" source="./media/spatial-io-read-write-spatial-data/load-kml-onto-map.png"alt-text="A screenshot that shows a map with a KML ground overlay."::: <!--
-<iframe height='500' scrolling='no' title='Load KML Onto Map' src='//codepen.io/azuremaps/embed/XWbgwxX/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/XWbgwxX/'>Load KML Onto Map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/XWbgwxX/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> You may optionally provide a proxy service for accessing cross domain assets that may not have CORS enabled. The read function tries to access files on another domain using CORS first. After the first time it fails to access any resource on another domain using CORS it only requests more files if a proxy service has been provided. The read function appends the file URL to the end of the proxy URL provided. This snippet of code shows how to pass a proxy service into the read function:
function InitMap()
:::image type="content" source="./media/spatial-io-read-write-spatial-data/read-delimited-file.png"alt-text="A screenshot that shows a map created from a CSV file."::: <!--
-<iframe height='500' scrolling='no' title='Add a Delimited File' src='//codepen.io/azuremaps/embed/ExjXBEb/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/ExjXBEb/'>Add a Delimited File</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/ExjXBEb/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
> ## Write spatial data
The [Spatial data write options] sample is a tool that demonstrates most the wri
:::image type="content" source="./media/spatial-io-read-write-spatial-data/spatial-data-write-options.png"alt-text="A screenshot that shows The Spatial data write options sample that demonstrates most of the write options used with the atlas.io.write function."::: <!--
-<iframe height='700' scrolling='no' title='Spatial data write options' src='//codepen.io/azuremaps/embed/YzXxXPG/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/YzXxXPG/'>Spatial data write options</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/YzXxXPG/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true]
> ## Example of writing spatial data
The [Drag and drop spatial files onto map] sample allows you to drag and drop on
:::image type="content" source="./media/spatial-io-read-write-spatial-data/drag-and-drop-spatial-files-onto-map.png" alt-text="A screenshot that shows a map with a panel to the left of the map that enables you to drag and drop one or more KML, KMZ, GeoRSS, GPX, GML, GeoJSON or CSV files onto the map."::: <!--
-<iframe height='700' scrolling='no' title='Drag and drop spatial files onto map' src='//codepen.io/azuremaps/embed/zYGdGoO/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/zYGdGoO/'>Drag and drop spatial files onto map</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/zYGdGoO/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true]
> You may optionally provide a proxy service for accessing cross domain assets that may not have CORS enabled. This snippet of code shows you could incorporate a proxy service:
The [Read Well Known Text] sample shows how to read the well-known text string `
:::image type="content" source="./media/spatial-io-read-write-spatial-data/read-well-known-text.png" alt-text="A screenshot that shows how to read Well Known Text (WKT) as GeoJSON and render it on a map using a bubble layer."::: <!--
-<iframe height='500' scrolling='no' title='Read Well-Known Text' src='//codepen.io/azuremaps/embed/XWbabLd/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/XWbabLd/'>Read Well-Known Text</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/XWbabLd/?height=500&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> The [Read and write Well Known Text] sample demonstrates how to read and write Well Known Text (WKT) strings as GeoJSON. For the source code of this sample, see [Read and write Well Known Text source code].
The [Read and write Well Known Text] sample demonstrates how to read and write W
:::image type="content" source="./media/spatial-io-read-write-spatial-data/read-and-write-well-known-text.png" alt-text="A screenshot showing the sample that demonstrates how to read and write Well Known Text (WKT) strings as GeoJSON."::: <!--
-<iframe height='700' scrolling='no' title='Read and write Well-Known Text' src='//codepen.io/azuremaps/embed/JjdyYav/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true' frameborder='no' allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/JjdyYav/'>Read and write Well-Known Text</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/JjdyYav/?height=700&theme-id=0&default-tab=result&embed-version=2&editable=true]
--> ## Read and write GML
azure-maps Supported Browsers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/supported-browsers.md
You might want to target older browsers that don't support WebGL or that have on
The [Render Azure Maps in Leaflet] Azure Maps sample shows how to render Azure Maps Raster Tiles in the Leaflet JS map control. This sample uses the open source [Azure Maps Leaflet plugin]. For the source code for this sample, see [Render Azure Maps in Leaflet sample source code]. <!-
-<iframe height="500" scrolling="no" title="Azure Maps + Leaflet" src="//codepen.io/azuremaps/embed/GeLgyx/?height=500&theme-id=0&default-tab=html,result" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/GeLgyx/'>Azure Maps + Leaflet</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/GeLgyx/?height=500&theme-id=0&default-tab=html,result]
-> For more code samples using Azure Maps in Leaflet, see [Azure Maps Samples].
azure-maps Web Sdk Best Practices https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-maps/web-sdk-best-practices.md
If the map isn't needed right away, lazy load the Azure Maps Web SDK until it's
The [Lazy Load the Map] code sample shows how to delay the loading the Azure Maps Web SDK until a button is pressed. For the source code, see [Lazy Load the Map sample code]. <!
-<iframe height="500" scrolling="no" title="Lazy load the map" src="https://codepen.io/azuremaps/embed/vYEeyOv?height=500&theme-id=default&default-tab=js,result" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/vYEeyOv'>Lazy load the map</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/vYEeyOv?height=500&theme-id=default&default-tab=js,result]
> ### Add a placeholder for the map
The [Reusing Popup with Multiple Pins] code sample shows how to create a single
:::image type="content" source="./media/web-sdk-best-practices/reusing-popup-with-multiple-pins.png" alt-text="A screenshot of a map of Seattle with three blue pins, demonstrating how to Reuse Popups with Multiple Pins."::: <!
-<iframe height='500' scrolling='no' title='Reusing Popup with Multiple Pins' src='//codepen.io/azuremaps/embed/rQbjvK/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true' frameborder='no' loading="lazy" allowtransparency='true' allowfullscreen='true'>See the Pen <a href='https://codepen.io/azuremaps/pen/rQbjvK/'>Reusing Popup with Multiple Pins</a> by Azure Maps (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO //codepen.io/azuremaps/embed/rQbjvK/?height=500&theme-id=0&default-tab=js,result&embed-version=2&editable=true]
--> That said, if you only have a few points to render on the map, the simplicity of HTML markers may be preferred. Additionally, HTML markers can easily be made draggable if needed.
The [Simple Symbol Animation] code sample demonstrates a simple way to animate a
:::image type="content" source="./media/web-sdk-best-practices/simple-symbol-animation.gif" alt-text="A screenshot of a map of the world with a symbol going in a circle, demonstrating how to animate the position of a symbol on the map by updating the coordinates."::: <!-
-<iframe height="500" scrolling="no" title="Symbol layer animation" src="https://codepen.io/azuremaps/embed/oNgGzRd?height=500&theme-id=default&default-tab=js,result" frameborder="no" allowtransparency="true" allowfullscreen="true">
- See the Pen <a href='https://codepen.io/azuremaps/pen/oNgGzRd'>Symbol layer animation</a> by Azure Maps
- (<a href='https://codepen.io/azuremaps'>@azuremaps</a>) on <a href='https://codepen.io'>CodePen</a>.</iframe>
+> [!VIDEO https://codepen.io/azuremaps/embed/oNgGzRd?height=500&theme-id=default&default-tab=js,result]
-> ### Specify zoom level range
azure-monitor Azure Monitor Agent Windows Client https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/azure-monitor-agent-windows-client.md
Here is a comparison between client installer and VM extension for Azure Monitor
- `<log-analytics-workspace-id>`.ods.opinsights.azure.com (example: 12345a01-b1cd-1234-e1f2-1234567g8h99.ods.opinsights.azure.com) (If using private links on the agent, you must also add the [data collection endpoints](../essentials/data-collection-endpoint-overview.md#components-of-a-data-collection-endpoint)) 6. A data collection rule you want to associate with the devices. If it doesn't exist already, [create a data collection rule](./data-collection-rule-azure-monitor-agent.md#create-a-data-collection-rule). **Do not associate the rule to any resources yet**.
+7. Before using any PowerShell cmdlet, ensure cmdlet related PowerShell module is installed and imported.
## Install the agent 1. Download the Windows MSI installer for the agent using [this link](https://go.microsoft.com/fwlink/?linkid=2192409). You can also download it from **Monitor** > **Data Collection Rules** > **Create** experience on Azure portal (shown below):
azure-monitor Solution Agenthealth https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/solution-agenthealth.md
+
+ Title: Agent Health solution in Azure Monitor | Microsoft Docs
+description: Learn how to use this solution to monitor the health of your agents reporting directly to Log Analytics or System Center Operations Manager.
+ Last updated : 08/09/2023++++
+# Agent Health solution in Azure Monitor
+The Agent Health solution in Azure helps you understand which monitoring agents are unresponsive and submitting operational data. That includes all the agents that report directly to the Log Analytics workspace in Azure Monitor or to a System Center Operations Manager management group connected to Azure Monitor.
+
+You can also use the Agent Health solution to:
+
+* Keep track of how many agents are deployed and where they're distributed geographically.
+* Perform other queries to maintain awareness of the distribution of agents deployed in Azure, in other cloud environments, or on-premises.
+
+> [!IMPORTANT]
+> The Agent Health solution only monitors the health of the [Log Analytics agent](log-analytics-agent.md) which is on a deprecation path. This solution doesn't monitor the health of the [Azure Monitor agent](agents-overview.md).
+
+## Prerequisites
+Before you deploy this solution, confirm that you have supported [Windows agents](../agents/agent-windows.md) reporting to the Log Analytics workspace or reporting to an [Operations Manager management group](agents-overview.md) integrated with your workspace.
+
+## Management packs
+If your Operations Manager management group is connected to a Log Analytics workspace, the following management packs are installed in Operations Manager. These management packs are also installed on directly connected Windows computers after you add this solution:
+
+* Microsoft System Center Advisor HealthAssessment Direct Channel Intelligence Pack (Microsoft.IntelligencePacks.HealthAssessmentDirect)
+* Microsoft System Center Advisor HealthAssessment Server Channel Intelligence Pack (Microsoft.IntelligencePacks.HealthAssessmentViaServer)
+
+There's nothing to configure or manage with these management packs. For more information on how solution management packs are updated, see [Connect Operations Manager to Log Analytics](../agents/om-agents.md).
+
+## Configuration
+Add the Agent Health solution to your Log Analytics workspace by using the process described in [Add solutions](../insights/solutions.md). No further configuration is required.
+
+## Supported agents
+The following table describes the connected sources that this solution supports.
+
+| Connected source | Supported | Description |
+| | | |
+| Windows agents | Yes | Heartbeat events are collected from direct Windows agents.|
+| System Center Operations Manager management group | Yes | Heartbeat events are collected from agents that report to the management group every 60 seconds and are then forwarded to Azure Monitor. A direct connection from Operations Manager agents to Azure Monitor isn't required. Heartbeat event data is forwarded from the management group to the Log Analytics workspace.|
+
+## Use the solution
+When you add the solution to your Log Analytics workspace, the **Agent Health** tile is added to your dashboard. This tile shows the total number of agents and the number of unresponsive agents in the last 24 hours.
++
+Select the **Agent Health** tile to open the **Agent Health** dashboard. The dashboard includes the columns in the following table. Each column lists the top 10 events by count that match that column's criteria for the specified time range. You can run a log search that provides the entire list. Select **See all** beneath each column or select the column heading.
+
+| Column | Description |
+|--|-|
+| Agent count over time | A trend of your agent count over a period of seven days for both Linux and Windows agents|
+| Count of unresponsive agents | A list of agents that haven't sent a heartbeat in the past 24 hours|
+| Distribution by OS type | A partition of how many Windows and Linux agents you have in your environment|
+| Distribution by agent version | A partition of the agent versions installed in your environment and a count of each one|
+| Distribution by agent category | A partition of the categories of agents that are sending up heartbeat events: direct agents, Operations Manager agents, or the Operations Manager management server|
+| Distribution by management group | A partition of the Operations Manager management groups in your environment|
+| Geo-location of agents | A partition of the countries/regions where you have agents, and a total count of the number of agents that have been installed in each country/region|
+| Count of gateways installed | The number of servers that have the Log Analytics gateway installed, and a list of these servers|
++
+## Azure Monitor log records
+The solution creates one type of record in the Log Analytics workspace: heartbeat. Heartbeat records have the properties listed in the following table.
+
+| Property | Description |
+| | |
+| `Type` | `Heartbeat`|
+| `Category` | `Direct Agent`, `SCOM Agent`, or `SCOM Management Server`|
+| `Computer` | Computer name|
+| `OSType` | Windows or Linux operating system|
+| `OSMajorVersion` | Operating system major version|
+| `OSMinorVersion` | Operating system minor version|
+| `Version` | Log Analytics agent or Operations Manager agent version|
+| `SCAgentChannel` | `Direct` and/or `SCManagementServer`|
+| `IsGatewayInstalled` | `true` if the Log Analytics gateway is installed; otherwise `false`|
+| `ComputerIP` | Public IP address for an Azure virtual machine, if one is available; Azure SNAT address (not the private IP address) for a virtual machine that uses a private IP |
+| `ComputerPrivateIPs` | List of private IPs of the computer |
+| `RemoteIPCountry` | Geographic location where the computer is deployed|
+| `ManagementGroupName` | Name of the Operations Manager management group|
+| `SourceComputerId` | Unique ID of the computer|
+| `RemoteIPLongitude` | Longitude of the computer's geographic location|
+| `RemoteIPLatitude` | Latitude of the computer's geographic location|
+
+Each agent that reports to an Operations Manager management server will send two heartbeats. The `SCAgentChannel` property's value will include both `Direct` and `SCManagementServer`, depending on what data sources and monitoring solutions you've enabled in your subscription.
+
+If you recall, data from solutions is sent either:
+
+* Directly from an Operations Manager management server to Azure Monitor.
+* Directly from the agent to Azure Monitor, because of the volume of data collected on the agent.
+
+For heartbeat events that have the value `SCManagementServer`, the `ComputerIP` value is the IP address of the management server because it actually uploads the data. For heartbeats where `SCAgentChannel` is set to `Direct`, it's the public IP address of the agent.
+
+## Sample log searches
+The following table provides sample log searches for records that the solution collects.
+
+| Query | Description |
+|:|:|
+| Heartbeat &#124; distinct Computer |Total number of agents |
+| Heartbeat &#124; summarize LastCall = max(TimeGenerated) by Computer &#124; where LastCall < ago(24h) |Count of unresponsive agents in the last 24 hours |
+| Heartbeat &#124; summarize LastCall = max(TimeGenerated) by Computer &#124; where LastCall < ago(15m) |Count of unresponsive agents in the last 15 minutes |
+| Heartbeat &#124; where TimeGenerated > ago(24h) and Computer in ((Heartbeat &#124; where TimeGenerated > ago(24h) &#124; distinct Computer)) &#124; summarize LastCall = max(TimeGenerated) by Computer |Computers online in the last 24 hours |
+| Heartbeat &#124; where TimeGenerated > ago(24h) and Computer !in ((Heartbeat &#124; where TimeGenerated > ago(30m) &#124; distinct Computer)) &#124; summarize LastCall = max(TimeGenerated) by Computer |Total agents offline in the last 30 minutes (for the last 24 hours) |
+| Heartbeat &#124; summarize AggregatedValue = dcount(Computer) by OSType |Trend of the number of agents over time by OS type|
+| Heartbeat &#124; summarize AggregatedValue = dcount(Computer) by OSType |Distribution by OS type |
+| Heartbeat &#124; summarize AggregatedValue = dcount(Computer) by Version |Distribution by agent version |
+| Heartbeat &#124; summarize AggregatedValue = count() by Category |Distribution by agent category |
+| Heartbeat &#124; summarize AggregatedValue = dcount(Computer) by ManagementGroupName | Distribution by management group |
+| Heartbeat &#124; summarize AggregatedValue = dcount(Com