Updates from: 07/30/2022 01:16:27
Service Microsoft Docs article Related commit history on GitHub Change details
active-directory-b2c Authorization Code Flow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory-b2c/authorization-code-flow.md
Previously updated : 04/12/2022 Last updated : 07/29/2022
client_id=90c0fe63-bcf2-44d5-8fb7-b8bbc0b29dc6
|{tenant}| Required | Name of your Azure AD B2C tenant| | {policy} | Required | The user flow to be run. Specify the name of a user flow you've created in your Azure AD B2C tenant. For example: `b2c_1_sign_in`, `b2c_1_sign_up`, or `b2c_1_edit_profile`. | | client_id |Required |The application ID assigned to your app in the [Azure portal](https://portal.azure.com). |
-| response_type |Required |The response type, which must include `code` for the authorization code flow. |
+| response_type |Required |The response type, which must include `code` for the authorization code flow. You can receive an ID token if you include it in the response type, such as `code+id_token`, and in this case, the scope needs to include `openid`.|
| redirect_uri |Required |The redirect URI of your app, where authentication responses are sent and received by your app. It must exactly match one of the redirect URIs that you registered in the portal, except that it must be URL-encoded. | | scope |Required |A space-separated list of scopes. The `openid` scope indicates a permission to sign in the user and get data about the user in the form of ID tokens. The `offline_access` scope is optional for web applications. It indicates that your application will need a *refresh token* for extended access to resources.The client-id indicates the token issued are intended for use by Azure AD B2C registered client. The `https://{tenant-name}/{app-id-uri}/{scope}` indicates a permission to protected resources, such as a web API. For more information, see [Request an access token](access-tokens.md#scopes). | | response_mode |Recommended |The method that you use to send the resulting authorization code back to your app. It can be `query`, `form_post`, or `fragment`. |
active-directory-b2c Azure Ad External Identities Videos https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory-b2c/azure-ad-external-identities-videos.md
Get a deeper view into the features and technical aspects of the Azure AD B2C se
|[Azure AD B2C sign-up sign-in](https://www.youtube.com/watch?v=c8rN1ZaR7wk&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=6&t=2s) 10:25 | [:::image type="icon" source="./media/external-identities-videos/customer-sign-up-sign-in.png" border="false":::](https://www.youtube.com/watch?v=c8rN1ZaR7wk&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=6) | [Azure AD B2C single sign on and self service password reset](https://www.youtube.com/watch?v=kRV-7PSLK38&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=7) 8:40 | [:::image type="icon" source="./media/external-identities-videos/single-sign-on.png" border="false":::](https://www.youtube.com/watch?v=kRV-7PSLK38&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=7) | | [Application and identity migration to Azure AD B2C](https://www.youtube.com/watch?v=Xw_YwSJmhIQ&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=9) 10:34 | [:::image type="icon" source="./media/external-identities-videos/identity-migration-aad-b2c.png" border="false":::](https://www.youtube.com/watch?v=Xw_YwSJmhIQ&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=9) | [Build resilient and scalable flows using Azure AD B2C](https://www.youtube.com/watch?v=8f_Ozpw9yTs&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=12) 16:47 | [:::image type="icon" source="./media/external-identities-videos/b2c-scalable-flows.png" border="false":::](https://www.youtube.com/watch?v=8f_Ozpw9yTs&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=12) | | [Building a custom CIAM solution with Azure AD B2C and ISV alliances](https://www.youtube.com/watch?v=UZjiGDD0wa8&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=8) 10:01 | [:::image type="icon" source="./media/external-identities-videos/build-custom-b2c-solution.png" border="false":::](https://www.youtube.com/watch?v=UZjiGDD0wa8&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=8) | [Protecting Web APIs with Azure AD B2C](https://www.youtube.com/watch?v=wuUu71RcsIo&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=10) 19:03 | [:::image type="icon" source="./media/external-identities-videos/protecting-web-apis.png" border="false":::](https://www.youtube.com/watch?v=wuUu71RcsIo&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=10) |
-| [Integration of SAML with Azure AD B2C](https://www.youtube.com/watch?v=r2TIVBCm7v4&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=11) 9:09 | [:::image type="icon" source="./media/external-identities-videos/saml-integration.png" border="false":::](https://www.youtube.com/watch?v=r2TIVBCm7v4&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=11) |
+| [Integration of SAML with Azure AD B2C](https://www.youtube.com/watch?v=r2TIVBCm7v4&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=11) 9:09 | [:::image type="icon" source="./media/external-identities-videos/saml-integration.png" border="false":::](https://www.youtube.com/watch?v=r2TIVBCm7v4&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=11) | [Azure AD B2C Identity Protection and Conditional Access](https://www.youtube.com/watch?v=frn5jVqbmUo&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=15) 14:44 | [:::image type="icon" source="./media/external-identities-videos/identity-protection-and-conditional-access.png" border="false":::](https://www.youtube.com/watch?v=frn5jVqbmUo&list=PL3ZTgFEc7LyuJ8YRSGXBUVItCPnQz3YX0&index=15)
## Azure Active Directory B2C how to series
active-directory-b2c Technicalprofiles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory-b2c/technicalprofiles.md
The **InputClaim** element contains the following attributes:
| | -- | -- | | ClaimTypeReferenceId | Yes | The identifier of a claim type. The claim is already defined in the claims schema section in the policy file or parent policy file. | | DefaultValue | No | A default value to use to create a claim if the claim indicated by ClaimTypeReferenceId doesn't exist so that the resulting claim can be used as an InputClaim element by the technical profile. |
+|AlwaysUseDefaultValue |No |Forces the use of the default value. |
| PartnerClaimType | No | The identifier of the claim type of the external partner that the specified policy claim type maps to. If the PartnerClaimType attribute isn't specified, the specified policy claim type is mapped to the partner claim type of the same name. Use this property when your claim type name is different from the other party. An example is if the first claim name is *givenName*, while the partner uses a claim named *first_name*. | ## Display claims
active-directory Howto Remove App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/howto-remove-app.md
Previously updated : 11/15/2020 Last updated : 07/28/2022
To delete an application, be listed as an owner of the application or have admin
## Remove an application authored by another organization
-If you are viewing **App registrations** in the context of a tenant, a subset of the applications that appear under the **All apps** tab are from another tenant and were registered into your tenant during the consent process. More specifically, they are represented by only a service principal object in your tenant, with no corresponding application object. For more information on the differences between application and service principal objects, see [Application and service principal objects in Azure AD](./app-objects-and-service-principals.md).
+If you're viewing **App registrations** in the context of a tenant, a subset of the applications that appear under the **All apps** tab are from another tenant and were registered into your tenant during the consent process. More specifically, they're represented by only a service principal object in your tenant, with no corresponding application object. For more information on the differences between application and service principal objects, see [Application and service principal objects in Azure AD](./app-objects-and-service-principals.md).
-In order to remove an applicationΓÇÖs access to your directory (after having granted consent), the company administrator must remove its service principal. The administrator must have Global Administrator access, and can remove the application through the Azure portal or use the [Azure AD PowerShell Cmdlets](/previous-versions/azure/jj151815(v=azure.100)) to remove access.
+In order to remove an applicationΓÇÖs access to your directory (after having granted consent), the company administrator must remove its service principal. The administrator must have Global Administrator access. To learn how to delete a service principal, see [Delete an enterprise application](../manage-apps/delete-application-portal.md).
## Next steps
active-directory Howto Restore App https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/develop/howto-restore-app.md
Previously updated : 3/22/2021 Last updated : 07/28/2022 #Customer intent: As an application developer, I want to know how to restore or permanently delete my recently deleted application from the Microsoft identity platform. # Restore or remove a recently deleted application with the Microsoft identity platform
-After you delete an app registration, the app remains in a suspended state for 30 days. During that 30-day window, the app registration can be restored, along with all its properties. After that 30-day window passes, app registrations cannot be restored and the permanent deletion process may be automatically started. This functionality only applies to applications associated to a directory. It is not available for applications from a personal Microsoft account, which cannot be restored.
-You can view your deleted applications, restore a deleted application, or permanently delete an application using the App registrations experience under Azure Active Directory (Azure AD) in the Azure portal.
+After you delete an app registration, the app remains in a suspended state for 30 days. During that 30-day window, the app registration can be restored, along with all its properties. After that 30-day window passes, app registrations can't be restored, and the permanent deletion process may be automatically started. This functionality only applies to applications associated to a directory. It isn't available for applications from a personal Microsoft account, which can't be restored.
-Note that neither you nor Microsoft customer support can restore a permanently deleted application or an application deleted more than 30 days ago.
+You can view your deleted applications, restore a deleted application, or permanently delete an application using the **App registrations** experience under Azure Active Directory (Azure AD) in the Azure portal.
-> [!IMPORTANT]
-> The deleted applications portal UI feature [!INCLUDE [PREVIEW BOILERPLATE](../../../includes/active-directory-develop-preview.md)]
+Neither you nor Microsoft customer support can restore a permanently deleted application or an application deleted more than 30 days ago.
## Required permissions You must have one of the following roles to permanently delete applications.
Review the list of applications. Only applications that have been deleted in the
## Restore a recently deleted application
-When an app registration is deleted from the organization, the app is in a suspended state and its configurations are preserved. When you restore an app registration, its configurations are also restored. However, if there were any organization-specific settings in **Enterprise applications** for the application's home tenant, those will not be restored.
+When an app registration is deleted from the organization, the app is in a suspended state, and its configurations are preserved. When you restore an app registration, its configurations are also restored. However, if there were any organization-specific settings in **Enterprise applications** for the application's home tenant, those won't be restored.
-This is because organization-specific settings are stored on a separate object, called the service principal. Settings held on the service principal include permission consents and user and group assignments for a certain organization; these configurations will not be restored when the app is restored. For more information, see [Application and service principal objects](app-objects-and-service-principals.md).
+This is because organization-specific settings are stored on a separate object, called the service principal. Settings held on the service principal include permission consents and user and group assignments for a certain organization; these configurations won't be restored when the app is restored. To learn how to restore the service principal with its previous configurations, see [Restore a recently deleted enterprise application](../manage-apps/restore-application.md).
### To restore an application
active-directory Groups Settings Cmdlets https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/enterprise-users/groups-settings-cmdlets.md
To update the value for UsageGuideLinesUrl in the setting template, read the cur
Output: ```powershell
- Name Value
- - --
- EnableMIPLabels True
+ Name Value
+ - --
+ EnableMIPLabels True
CustomBlockedWordsList
- EnableMSStandardBlockedWords False
+ EnableMSStandardBlockedWords False
ClassificationDescriptions DefaultClassification PrefixSuffixNamingRequirement
- AllowGuestsToBeGroupOwner False
- AllowGuestsToAccessGroups True
+ AllowGuestsToBeGroupOwner False
+ AllowGuestsToAccessGroups True
GuestUsageGuidelinesUrl GroupCreationAllowedGroupId
- AllowToAddGuests True
- UsageGuidelinesUrl https://guideline.example.com
+ AllowToAddGuests True
+ UsageGuidelinesUrl https://guideline.example.com
ClassificationList
- EnableGroupCreation True
+ EnableGroupCreation True
+ NewUnifiedGroupWritebackDefault True
``` 3. To remove the value of UsageGuideLinesUrl, edit the URL to be an empty string:
Here are the settings defined in the Group.Unified SettingsTemplate. Unless othe
| <ul><li>AllowToAddGuests<li>Type: Boolean<li>Default: True | A boolean indicating whether or not is allowed to add guests to this directory. <br>This setting may be overridden and become read-only if *EnableMIPLabels* is set to *True* and a guest policy is associated with the sensitivity label assigned to the group.<br>If the AllowToAddGuests setting is set to False at the organization level, any AllowToAddGuests setting at the group level is ignored. If you want to enable guest access for only a few groups, you must set AllowToAddGuests to be true at the organization level, and then selectively disable it for specific groups. | | <ul><li>ClassificationList<li>Type: String<li>Default: "" | A comma-delimited list of valid classification values that can be applied to Microsoft 365 groups. <br>This setting does not apply when EnableMIPLabels == True.| | <ul><li>EnableMIPLabels<li>Type: Boolean<li>Default: "False" |The flag indicating whether sensitivity labels published in Microsoft Purview compliance portal can be applied to Microsoft 365 groups. For more information, see [Assign Sensitivity Labels for Microsoft 365 groups](groups-assign-sensitivity-labels.md). |
+| <ul><li>NewUnifiedGroupWritebackDefault<li>Type: Boolean<li>Default: "True" |The flag that allows an admin to create new Microsoft 365 groups without setting the groupWritebackConfiguration resource type in the request payload. This setting is applicable when group writeback is configured in Azure AD Connect. "NewUnifiedGroupWritebackDefault" is a global Microfot 365 group setting. Default value is true. Updating the setting value to false will change the default writeback behavior for newly created Microsoft 365 groups, and will not change isEnabled property value for existing Microsoft 365 groups. Group admin will need to explicitly update the group isEnabled property value to change the writeback state for existing Microsoft 365 groups. For more information, see [groupWritebackConfiguration resource type](groupwritebackconfiguration?view=graph-rest-beta.md). |
## Example: Configure Guest policy for groups at the directory level 1. Get all the setting templates:
active-directory Groups Write Back Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/enterprise-users/groups-write-back-portal.md
# Group writeback in the Azure Active Directory admin center (preview)
-Group writeback is a valuable tool for administrators of Azure Active Directory (Azure AD) tenants being synced with on-premises Active Directory groups. Microsoft is now previewing new capabilities for group writeback. In this preview, you can specify in the Azure AD admin center which groups you want to write back and what youΓÇÖd like each group to write back as. You can write Microsoft 365 groups back to on-premises Active Directory as Distribution, Mail-enabled Security, or Security groups, and write Security groups back as Security groups. Groups are written back with a scope of universalΓÇï.
+Group writeback is a valuable tool for administrators of Azure Active Directory (Azure AD) tenants being synced with on-premises Active Directory groups. Microsoft is now previewing new capabilities for group writeback for tenants with an Azure AD Premium license and Azure AD Connect version 2021 December release or later. In this preview, once you have [enabled Azure AD Connect group writeback](..//hybrid/how-to-connect-group-writeback-v2.md), you can specify in the Azure AD admin center which groups you want to write back and what youΓÇÖd like each group to write back as. You can write Microsoft 365 groups back to on-premises Active Directory as Distribution, Mail-enabled Security, or Security groups, and write Security groups back as Security groups. Groups are written back with a scope of universalΓÇï.
>[!NOTE] > If you were previously writing Microsoft 365 groups back to on-premises Active Directory as universal distribution groups, they will appear in the Azure portal as not enabled for writeback in both the **Groups** page and in the properties page for a group. These pages display a new property introduced for the preview, ΓÇ£writeback enabledΓÇ¥. This property is not set by the current version of group writeback to ensure backward compatibility with the legacy version of group writeback and to avoid breaking existing customer setups.
active-directory Whats New Archive https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/whats-new-archive.md
Title: Archive for What's new in Azure Active Directory? | Microsoft Docs
-description: The What's new release notes in the Overview section of this content set contains 6 months of activity. After 6 months, the items are removed from the main article and put into this archive article.
+description: The What's new release notes in the Overview section of this content set contain six months of activity. After six months, the items are removed from the main article and put into this archive article.
The What's new in Azure Active Directory? release notes provide information abou
+## January 2022
+
+### Public preview - Custom security attributes
+
+**Type:** New feature
+**Service category:** Directory Management
+**Product capability:** Directory
+
+Enables you to define business-specific attributes that you can assign to Azure AD objects. These attributes can be used to store information, categorize objects, or enforce fine-grained access control. Custom security attributes can be used with Azure attribute-based access control. [Learn more](custom-security-attributes-overview.md).
+
++
+### Public preview - Filter groups in tokens using a substring match
+
+**Type:** New feature
+**Service category:** Enterprise Apps
+**Product capability:** SSO
+
+In the past, Azure AD only permitted groups to be filtered based on whether they were assigned to an application. Now, you can also use Azure AD to filter the groups included in the token. You can filter with the substring match on the display name or onPremisesSAMAccountName attributes of the group object on the token. Only groups that the user is a member of will be included in the token. This token will be recognized whether it's on the ObjectID or the on premises SAMAccountName or security identifier (SID). This feature can be used together with the setting to include only groups assigned to the application if desired to further filter the list.[Learn more](../hybrid/how-to-connect-fed-group-claims.md)
+++
+### General availability - Continuous Access Evaluation
+
+**Type:** New feature
+**Service category:** Other
+**Product capability:** Access Control
+
+With Continuous access evaluation (CAE), critical security events and policies are evaluated in real time. This includes account disable, password reset, and location change. [Learn more](../conditional-access/concept-continuous-access-evaluation.md).
+
++
+### General Availability - User management enhancements are now available
+
+**Type:** New feature
+**Service category:** User Management
+**Product capability:** User Management
+
+The Azure AD portal has been updated to make it easier to find users in the All users and Deleted users pages. Changes in the preview include:
+
+- More visible user properties including object ID, directory sync status, creation type, and identity issuer.
+- **Search now** allows substring search and combined search of names, emails, and object IDs.
+- Enhanced filtering by user type (member, guest, and none), directory sync status, creation type, company name, and domain name.
+- New sorting capabilities on properties like name, user principal name, creation time, and deletion date.
+- A new total users count that updates with any searches or filters.
+
+For more information, go to [User management enhancements (preview) in Azure Active Directory](../enterprise-users/users-search-enhanced.md).
+++
+### General Availability - My Apps customization of default Apps view
+
+**Type:** New feature
+**Service category:** My Apps
+**Product capability:** End User Experiences
+
+Customization of the default My Apps view in now in general availability. For more information on My Apps, you can go to [Sign in and start apps from the My Apps portal](https://support.microsoft.com/en-us/account-billing/sign-in-and-start-apps-from-the-my-apps-portal-2f3b1bae-0e5a-4a86-a33e-876fbd2a4510).
+
++
+### General Availability - Audited BitLocker Recovery
+
+**Type:** New feature
+**Service category:** Device Access Management
+**Product capability:** Device Lifecycle Management
+
+BitLocker keys are sensitive security items. Audited BitLocker recovery ensures that when BitLocker keys are read, an audit log is generated so that you can trace who accesses this information for given devices. [Learn more](../devices/device-management-azure-portal.md#view-or-copy-bitlocker-keys).
+++
+### General Availability - Download a list of devices
+
+**Type:** New feature
+**Service category:** Device Registration and Management
+**Product capability:** Device Lifecycle Management
+
+Download a list of your organization's devices to a .csv file for easier reporting and management. [Learn more](../devices/device-management-azure-portal.md#download-devices).
+
++
+### New provisioning connectors in the Azure AD Application Gallery - January 2022
+
+**Type:** New feature
+**Service category:** App Provisioning
+**Product capability:** 3rd Party Integration
+
+You can now automate creating, updating, and deleting user accounts for these newly integrated apps:
+
+- [Autodesk SSO](../saas-apps/autodesk-sso-provisioning-tutorial.md)
+- [Evercate](../saas-apps/evercate-provisioning-tutorial.md)
+- [frankli.io](../saas-apps/frankli-io-provisioning-tutorial.md)
+- [Plandisc](../saas-apps/plandisc-provisioning-tutorial.md)
+- [Swit](../saas-apps/swit-provisioning-tutorial.md)
+- [TerraTrue](../saas-apps/terratrue-provisioning-tutorial.md)
+- [TimeClock 365 SAML](../saas-apps/timeclock-365-saml-provisioning-tutorial.md)
+
+For more information about how to better secure your organization by using automated user account provisioning, go to [Automate user provisioning to SaaS applications with Azure AD](../manage-apps/user-provisioning.md).
+++
+### New Federated Apps available in Azure AD Application gallery - January 2022
+
+**Type:** New feature
+**Service category:** Enterprise Apps
+**Product capability:** 3rd Party Integration
+
+In January 2022, weΓÇÖve added the following 47 new applications in our App gallery with Federation support:
+
+[Jooto](../saas-apps/jooto-tutorial.md), [Proprli](https://app.proprli.com/), [Pace Scheduler](https://www.pacescheduler.com/accounts/login/), [DRTrack](../saas-apps/drtrack-tutorial.md), [Dining Sidekick](../saas-apps/dining-sidekick-tutorial.md), [Cryotos](https://app.cryotos.com/oauth2/authorization/azure-client), [Emergency Management Systems](https://secure.emsystems.com.au/), [Manifestly Checklists](../saas-apps/manifestly-checklists-tutorial.md), [eLearnPOSH](../saas-apps/elearnposh-tutorial.md), [Scuba Analytics](../saas-apps/scuba-analytics-tutorial.md), [Athena Systems sign-in Platform](../saas-apps/athena-systems-login-platform-tutorial.md), [TimeTrack](../saas-apps/timetrack-tutorial.md), [MiHCM](../saas-apps/mihcm-tutorial.md), [Health Note](https://www.healthnote.com/), [Active Directory SSO for DoubleYou](../saas-apps/active-directory-sso-for-doubleyou-tutorial.md), [Emplifi platform](../saas-apps/emplifi-platform-tutorial.md), [Flexera One](../saas-apps/flexera-one-tutorial.md), [Hypothesis](https://web.hypothes.is/help/authorizing-hypothesis-from-the-azure-ad-app-gallery/), [Recurly](../saas-apps/recurly-tutorial.md), [XpressDox AU Cloud](https://au.xpressdox.com/Authentication/Login.aspx), [Zoom for Intune](https://zoom.us/), [UPWARD AGENT](https://app.upward.jp/login/), [Linux Foundation ID](https://openprofile.dev/), [Asset Planner](../saas-apps/asset-planner-tutorial.md), [Kiho](https://v3.kiho.fi/index/sso), [chezie](https://app.chezie.co/), [Excelity HCM](../saas-apps/excelity-hcm-tutorial.md), [yuccaHR](https://app.yuccahr.com/), [Blue Ocean Brain](../saas-apps/blue-ocean-brain-tutorial.md), [EchoSpan](../saas-apps/echospan-tutorial.md), [Archie](../saas-apps/archie-tutorial.md), [Equifax Workforce Solutions](../saas-apps/equifax-workforce-solutions-tutorial.md), [Palantir Foundry](../saas-apps/palantir-foundry-tutorial.md), [ATP SpotLight and ChronicX](../saas-apps/atp-spotlight-and-chronicx-tutorial.md), [DigiSign](https://app.digisign.org/selfcare/sso), [mConnect](https://mconnect.skooler.com/), [BrightHR](https://login.brighthr.com/), [Mural Identity](../saas-apps/mural-identity-tutorial.md), [NordPass SSO](https://app.nordpass.com/login%20use%20%22Log%20in%20to%20business%22%20option), [CloudClarity](https://portal.cloudclarity.app/dashboard), [Twic](../saas-apps/twic-tutorial.md), [Eduhouse Online](https://app.eduhouse.fi/palvelu/kirjaudu/microsoft), [Bealink](../saas-apps/bealink-tutorial.md), [Time Intelligence Bot](https://teams.microsoft.com/), [SentinelOne](https://sentinelone.com/)
+
+You can also find the documentation of all the applications from: https://aka.ms/AppsTutorial,
+
+For listing your application in the Azure AD app gallery, read the details in: https://aka.ms/AzureADAppRequest
+++
+### Azure Ad access reviews reviewer recommendations now account for non-interactive sign-in information
+
+**Type:** Changed feature
+**Service category:** Access Reviews
+**Product capability:** Identity Governance
+
+Azure AD access reviews reviewer recommendations now account for non-interactive sign-in information, improving upon original recommendations based on interactive last sign-ins only. Reviewers can now make more accurate decisions based on the last sign-in activity of the users theyΓÇÖre reviewing. To learn more about how to create access reviews, go to [Create an access review of groups and applications in Azure AD](../governance/create-access-review.md).
+
++
+### Risk reason for offline Azure AD Threat Intelligence risk detection
+
+**Type:** Changed feature
+**Service category:** Identity Protection
+**Product capability:** Identity Security & Protection
+
+The offline Azure AD Threat Intelligence risk detection can now have a risk reason that will help customers with the risk investigation. If a risk reason is available, it will show up as **Additional Info** in the risk details of that risk event. The information can be found in the Risk detections report. It will also be available through the additionalInfo property of the riskDetections API. [Learn more](../identity-protection/howto-identity-protection-investigate-risk.md).
+
+++ ## December 2021 ### Tenant enablement of combined security information registration for Azure Active Directory
We previously announced in April 2020, a new combined registration experience en
**Service category:** Authentications (Logins) **Product capability:** User Authentication
-A problematic interaction between Windows and a local Active Directory Federation Services (ADFS) instance can result in users attempting to sign into another account, but be silently signed into their existing account instead, with no warning. For federated IdPs such as ADFS, that support the [prompt=login](/windows-server/identity/ad-fs/operations/ad-fs-prompt-login) pattern, Azure AD will now trigger a fresh login at ADFS when a user is directed to ADFS with a login hint. This ensures that the user is signed into the account they requested, rather than being silently signed into the account they're already signed in with.
+A problematic interaction between Windows and a local Active Directory Federation Services (ADFS) instance can result in users attempting to sign into another account, but be silently signed into their existing account instead, with no warning. For federated IdPs such as ADFS, that support the [prompt=login](/windows-server/identity/ad-fs/operations/ad-fs-prompt-login) pattern, Azure AD will now trigger a fresh sign-in at ADFS when a user is directed to ADFS with a sign in hint. This ensures that the user is signed into the account they requested, rather than being silently signed into the account they're already signed in with.
For more information, see the [change notice](../develop/reference-breaking-changes.md).
The new Conditional Access overview dashboard enables all tenants to see insight
**Service category:** Azure AD Connect Cloud Sync **Product capability:** Identity Lifecycle Management
-The Public Preview feature for Azure AD Connect Cloud Sync Password writeback provides customers the capability to writeback a userΓÇÖs password changes in the cloud to the on-premises directory in real time using the lightweight Azure AD cloud provisioning agent.[Learn more](../authentication/tutorial-enable-cloud-sync-sspr-writeback.md).
+The Public Preview feature for Azure AD Connect Cloud Sync Password writeback provides customers the capability to write back a userΓÇÖs password changes in the cloud to the on-premises directory in real time using the lightweight Azure AD cloud provisioning agent.[Learn more](../authentication/tutorial-enable-cloud-sync-sspr-writeback.md).
Now access review creators can select users and groups to receive notification o
This feature allows Azure AD users to manage their work or school accounts within the Microsoft Authenticator app. The management features will allow users to view sign-in history and sign-in activity. Users can also report any suspicious or unfamiliar activity, change their Azure AD account passwords, and update the account's security information.
-For more information on how to use this feature visit [View and search your recent sign-in activity from the My sign-ins page](../user-help/my-account-portal-sign-ins-page.md).
+For more information on how to use this feature visit [View and search your recent sign-in activity from the My Sign-ins page](../user-help/my-account-portal-sign-ins-page.md).
For more information about how to better secure your organization by using autom
In November 2021, we have added following 32 new applications in our App gallery with Federation support:
-[Tide - Connector](https://gallery.ctinsuretech-tide.com/), [Virtual Risk Manager - USA](../saas-apps/virtual-risk-manager-usa-tutorial.md), [Xorlia Policy Management](https://app.xoralia.com/), [WorkPatterns](https://app.workpatterns.com/oauth2/login?data_source_type=office_365_account_calendar_workspace_sync&utm_source=azure_sso), [GHAE](../saas-apps/ghae-tutorial.md), [Nodetrax Project](../saas-apps/nodetrax-project-tutorial.md), [Touchstone Benchmarking](https://app.touchstonebenchmarking.com/), [SURFsecureID - Azure AD Multi-Factor Authentication](../saas-apps/surfsecureid-azure-mfa-tutorial.md), [AIDEA](https://truebluecorp.com/en/prodotti/aidea-en/),[R and D Tax Credit
+[Tide - Connector](https://gallery.ctinsuretech-tide.com/), [Virtual Risk Manager - USA](../saas-apps/virtual-risk-manager-usa-tutorial.md), [Xorlia Policy Management](https://app.xoralia.com/), [WorkPatterns](https://app.workpatterns.com/oauth2/login?data_source_type=office_365_account_calendar_workspace_sync&utm_source=azure_sso), [GHAE](../saas-apps/ghae-tutorial.md), [Nodetrax Project](../saas-apps/nodetrax-project-tutorial.md), [Touchstone Benchmarking](https://app.touchstonebenchmarking.com/), [SURFsecureID - Azure AD Multi-Factor Authentication](../saas-apps/surfsecureid-azure-mfa-tutorial.md), [AiDEA](https://truebluecorp.com/en/prodotti/aidea-en/),[R and D Tax Credit
You can also find the documentation of all the applications [here](../saas-apps/tutorial-list.md).
The following new capabilities have been added to the claims transformations ava
-### Public Preview ΓÇô Flagged sign-ins
+### Public Preview ΓÇô Flagged Sign-ins
**Type:** New feature **Service category:** Reporting **Product capability:** Monitoring & Reporting
-Flagged sign-ins is a feature that will increase the signal to noise ratio for user sign-ins where users need help. The functionality is intended to empower users to raise awareness about sign-in errors they want help with. Also to help admins and help desk workers find the right sign-in events quickly and efficiently. [Learn more](../reports-monitoring/overview-flagged-sign-ins.md).
+Flagged sign-ins are a feature that will increase the signal to noise ratio for user sign-ins where users need help. The functionality is intended to empower users to raise awareness about sign-in errors they want help with. Also to help admins and help desk workers find the right sign-in events quickly and efficiently. [Learn more](../reports-monitoring/overview-flagged-sign-ins.md).
New scenarios covered when using the Sign-in Diagnostic:
- Seamless Single-Sign On sign-in failures Other changes include:-- Flagged sign-ins will automatically appear for investigation when using the Sign-in Diagnostic from Diagnose and Solve.
+- Flagged Sign-ins will automatically appear for investigation when using the Sign-in Diagnostic from Diagnose and Solve.
- Sign-in Diagnostic is now available from the Enterprise Apps Diagnose and Solve blade. - The Sign-in Diagnostic is now available in the Basic Info tab of the Sign-in Log event view for all sign-in events. [Learn more](../reports-monitoring/concept-sign-in-diagnostics-scenarios.md#supported-scenarios).
Privileged Role Administrators can now create Azure AD access reviews on Azure A
-### General Availability - Azure AD single Sign on and device-based Conditional Access support in Firefox on Windows 10/11
+### General Availability - Azure AD single Sign-on and device-based Conditional Access support in Firefox on Windows 10/11
**Type:** New feature **Service category:** Authentications (Logins)
The new group list blade offers more sort and filtering capabilities, infinite s
Google has deprecated Gmail sign-ins on Microsoft Teams mobile and custom apps that run Gmail authentications on embedded webviews on Sept. 30th, 2021.
-If you would like to request an extension, impacted customers with affected OAuth client ID(s) should have received an email from Google Developers with the following information regarding a one-time policy enforcement extension, which must be completed by January 31, 2022.
+If you would like to request an extension, impacted customers with affected OAuth client ID(s) should have received an email from Google Developers with the following information regarding a one-time policy enforcement extension, which must be completed by Jan 31, 2022.
To continue allowing your Gmail users to sign in and redeem, we strongly recommend that you refer to [Embedded vs System Web](../develop/msal-net-web-browsers.md#embedded-vs-system-web-ui) UI in the MSAL.NET documentation and modify your apps to use the system browser for sign-in. All MSAL SDKs use the system web-view by default.
-As a workaround, we are deploying the device login flow by October 8. Between today and until then, it is likely that it may not be rolled out to all regions yet (in which case, end-users will be met with an error screen until it gets deployed to your region.)
+As a workaround, we're deploying the device sign-in flow by October 8. Between today and until then, it's likely that it may not be rolled out to all regions yet (in which case, end-users will be met with an error screen until it gets deployed to your region.)
-For more details on the device login flow and details on requesting extension to Google, see [Add Google as an identity provider for B2B guest users](../external-identities/google-federation.md#deprecation-of-web-view-sign-in-support).
+For more details on the device sign-in flow and details on requesting extension to Google, see [Add Google as an identity provider for B2B guest users](../external-identities/google-federation.md#deprecation-of-web-view-sign-in-support).
The load time of My Apps has been improved. Users going to myapps.microsoft.com
**Service category:** Authentications (Logins) **Product capability:** Developer Experience
-The modern Edge browser is now included in the requirement to provide an `Origin` header when redeeming a [single page app authorization code](../develop/v2-oauth2-auth-code-flow.md#redirect-uri-setup-required-for-single-page-apps). A compatibility fix accidentally exempted the modern Edge browser from CORS controls, and that bug is being fixed during October. A subset of applications depended on CORS being disabled in the browser, which has the side effect of removing the `Origin` header from traffic. This is an unsupported configuration for using Azure AD, and these apps that depended on disabling CORS can no longer use modern Edge as a security workaround. All modern browsers must now include the `Origin` header per HTTP spec, to ensure CORS is enforced. [Learn more](../develop/reference-breaking-changes.md#the-device-code-flow-ux-will-now-include-an-app-confirmation-prompt).
+The modern Edge browser is now included in the requirement to provide an `Origin` header when redeeming a [single page app authorization code](../develop/v2-oauth2-auth-code-flow.md#redirect-uri-setup-required-for-single-page-apps). A compatibility fixes accidentally exempted the modern Edge browser from CORS controls, and that bug is being fixed during October. A subset of applications depended on CORS being disabled in the browser, which has the side effect of removing the `Origin` header from traffic. This is an unsupported configuration for using Azure AD, and these apps that depended on disabling CORS can no longer use modern Edge as a security workaround. All modern browsers must now include the `Origin` header per HTTP spec, to ensure CORS is enforced. [Learn more](../develop/reference-breaking-changes.md#the-device-code-flow-ux-will-now-include-an-app-confirmation-prompt).
For listing your application in the Azure AD app gallery, read the details here:
-### Gmail users signing in on Microsoft Teams mobile and desktop clients will sign in with device login flow starting September 30, 2021
+### Gmail users signing in on Microsoft Teams mobile and desktop clients will sign in with device sign-in flow starting September 30, 2021
**Type:** Changed feature **Service category:** B2B **Product capability:** B2B/B2C
-Starting on September 30 2021, Azure AD B2B guests and Azure AD B2C customers signing in with their self-service signed up or redeemed Gmail accounts will have an extra login step. Users will now be prompted to enter a code in a separate browser window to finish signing in on Microsoft Teams mobile and desktop clients. If you haven't already done so, make sure to modify your apps to use the system browser for sign-in. See [Embedded vs System Web UI in the MSAL.NET](../develop/msal-net-web-browsers.md#embedded-vs-system-web-ui) documentation for more information. All MSAL SDKs use the system web-view by default.
+Starting on September 30 2021, Azure AD B2B guests and Azure AD B2C customers signing in with their self-service signed up or redeemed Gmail accounts will have an extra sign-in step. Users will now be prompted to enter a code in a separate browser window to finish signing in on Microsoft Teams mobile and desktop clients. If you haven't already done so, make sure to modify your apps to use the system browser for sign-in. See [Embedded vs System Web UI in the MSAL.NET](../develop/msal-net-web-browsers.md#embedded-vs-system-web-ui) documentation for more information. All MSAL SDKs use the system web-view by default.
-As the device login flow will start September 30, 2021, it may not be available in your region immediately. If it's not available yet, your end-users will be met with the error screen shown in the doc until it gets deployed to your region.) For more details on the device login flow and details on requesting extension to Google, see [Add Google as an identity provider for B2B guest users](../external-identities/google-federation.md#deprecation-of-web-view-sign-in-support).
+As the device sign-in flow will start September 30, 2021, it may not be available in your region immediately. If it's not available yet, your end-users will be met with the error screen shown in the doc until it gets deployed to your region.) For more details on the device sign-in flow and details on requesting extension to Google, see [Add Google as an identity provider for B2B guest users](../external-identities/google-federation.md#deprecation-of-web-view-sign-in-support).
We've released a new major version of Azure Active Directory Connect. This versi
-### Public Preview - Azure AD single Sign on and device-based Conditional Access support in Firefox on Windows 10
+### Public Preview - Azure AD single Sign-on and device-based Conditional Access support in Firefox on Windows 10
**Type:** New feature **Service category:** Authentications (Logins)
Identity Protection now emits risky sign-ins on non-interactive sign-ins. Admins
The permissions assignments to manage access packages and other resources in Entitlement Management are moving from the User Administrator role to the Identity Governance administrator role.
-Users that have been assigned the User administrator role can longer create catalogs or manage access packages in a catalog they don't own. If users in your organization have been assigned the User administrator role to configure catalogs, access packages, or policies in entitlement management, they will need a new assignment. You should instead assign these users the Identity Governance administrator role. [Learn more](../governance/entitlement-management-delegate.md)
+Users that have been assigned the User administrator role can longer create catalogs or manage access packages in a catalog they don't own. If users in your organization have been assigned the User administrator role to configure catalogs, access packages, or policies in entitlement management, they'll need a new assignment. You should instead assign these users the Identity Governance administrator role. [Learn more](../governance/entitlement-management-delegate.md)
Users that have been assigned the User administrator role can longer create cata
**Service category:** Microsoft Identity Manager **Product capability:** Identity Lifecycle Management
-The Microsoft Azure AD Connector for FIM is at feature freeze and deprecated. The solution of using FIM and the Azure AD Connector has been replaced. Existing deployments should migrate to [Azure AD Connect](../hybrid/whatis-hybrid-identity.md), Azure AD Connect Sync, or the [Microsoft Graph Connector](/microsoft-identity-manager/microsoft-identity-manager-2016-connector-graph), as the internal interfaces used by the Azure AD Connector for FIM are being removed from Azure AD. [Learn more](/microsoft-identity-manager/microsoft-identity-manager-2016-deprecated-features).
+The Microsoft Azure Active Directory Connector for FIM is at feature freeze and deprecated. The solution of using FIM and the Azure AD Connector has been replaced. Existing deployments should migrate to [Azure AD Connect](../hybrid/whatis-hybrid-identity.md), Azure AD Connect Sync, or the [Microsoft Graph Connector](/microsoft-identity-manager/microsoft-identity-manager-2016-connector-graph), as the internal interfaces used by the Azure AD Connector for FIM are being removed from Azure AD. [Learn more](/microsoft-identity-manager/microsoft-identity-manager-2016-deprecated-features).
The Microsoft Azure AD Connector for FIM is at feature freeze and deprecated. Th
Starting August 31 2022, all V1 versions of Azure AD Connect will be retired. If you haven't already done so, you need to update your server to Azure AD Connect V2.0. You need to make sure you're running a recent version of Azure AD Connect to receive an optimal support experience.
-If you run a retired version of Azure AD Connect it may unexpectedly stop working. You may also not have the latest security fixes, performance improvements, troubleshooting, and diagnostic tools and service enhancements. Also, if you require support we can't provide you with the level of service your organization needs.
+If you run a retired version of Azure AD Connect, it may unexpectedly stop working. You may also not have the latest security fixes, performance improvements, troubleshooting, and diagnostic tools and service enhancements. Also, if you require support we can't provide you with the level of service your organization needs.
See [Azure Active Directory Connect V2.0](../hybrid/whatis-azure-ad-connect-v2.md), what has changed in V2.0 and how this change impacts you.
Rolling out globally beginning September 30, 2021, Azure AD B2B guests signing i
Azure AD B2C customers who have set up embedded webview Gmail authentications in their custom/line of business apps or have existing Google integrations, will no longer can let their users sign in with Gmail accounts. To mitigate this, make sure to modify your apps to use the system browser for sign-in. For more information, read the Embedded vs System Web UI section in the [Using web browsers (MSAL.NET)](../develop/msal-net-web-browsers.md#embedded-vs-system-web-ui) documentation. All MSAL SDKs use the system web-view by default.
-As the device login flow will start rolling out on September 30, 2021, it is likely that it may not be rolled out to your region yet (in which case, your end-users will be met with the error screen shown in the documentation until it gets deployed to your region.)
+As the device sign-in flow will start rolling out on September 30, 2021, it's likely that it may not be rolled out to your region yet (in which case, your end-users will be met with the error screen shown in the documentation until it gets deployed to your region.)
For details on known impacted scenarios and what experience your users can expect, read [Add Google as an identity provider for B2B guest users](../external-identities/google-federation.md#deprecation-of-web-view-sign-in-support).
Access packages in Azure AD entitlement management now support setting the user'
-### General availability - Enable external users to self-service sign-up in Azure AD using MSA accounts
+### General availability - Enable external users to self-service sign up in Azure Active Directory using MSA accounts
**Type:** New feature **Service category:** B2B **Product capability:** B2B/B2C
-Users can now enable external users to self-service sign-up in Azure Active Directory using Microsoft accounts. [Learn more](../external-identities/microsoft-account.md).
+Users can now enable external users to self-service sign up in Azure Active Directory using Microsoft accounts. [Learn more](../external-identities/microsoft-account.md).
Users can now enable external users to self-service sign-up in Azure Active Dire
**Product capability:** B2B/B2C
-Now users can enable external users to self-service sign-up in Azure Active Directory using their email and one-time passcode. [Learn more](../external-identities/one-time-passcode.md).
+Now users can enable external users to self-service sign up in Azure Active Directory using their email and one-time passcode. [Learn more](../external-identities/one-time-passcode.md).
For the Risky users, Risky sign-ins, and Risk detections reports in Identity Pro
-### General availability - group owners in Azure AD can create and manage Azure AD access reviews for their groups
+### Public preview - group owners in Azure AD can create and manage Azure AD access reviews for their groups
**Type:** New feature **Service category:** Access Reviews
Azure AD customers can now easily design and issue verifiable credentials. Verif
**Service category:** User Authentication **Product capability:** Authentications (Logins)
-As a security improvement, the [device code flow](../develop/v2-oauth2-device-code.md) has been updated to include another prompt, which validates that the user is signing into the app they expect. The rollout is planned to start in June and expected to be complete by June 30.
+As a security improvement, the [device code flow](../develop/v2-oauth2-device-code.md) has been updated to include an another prompt, which validates that the user is signing into the app they expect. The rollout is planned to start in June and expected to be complete by June 30.
-To help prevent phishing attacks where an attacker tricks the user into signing into a malicious application, the following prompt is being added: "Are you trying to sign in to [application display name]?". All users will see this prompt while signing in using the device code flow. As a security measure, it cannot be removed or bypassed. [Learn more](../develop/reference-breaking-changes.md#the-device-code-flow-ux-will-now-include-an-app-confirmation-prompt).
+To help prevent phishing attacks where an attacker tricks the user into signing into a malicious application, the following prompt is being added: "Are you trying to sign in to [application display name]?". All users will see this prompt while signing in using the device code flow. As a security measure, it can't be removed or bypassed. [Learn more](../develop/reference-breaking-changes.md#the-device-code-flow-ux-will-now-include-an-app-confirmation-prompt).
B2C Phone Sign-up and Sign-in using a built-in policy enable IT administrators a
In April 2021, we have added following 31 new applications in our App gallery with Federation support
-[Zii Travel Azure AD Connect](https://azuremarketplace.microsoft.com/marketplace/apps/aad.ziitravelazureadconnect?tab=Overview), [Cerby](../saas-apps/cerby-tutorial.md), [Selflessly](https://app.selflessly.io/sign-in), [Apollo CX](https://apollo.cxlabs.de/sso/aad), [Pedagoo](https://account.pedagoo.com/), [Measureup](https://account.measureup.com/), [ProcessUnity](../saas-apps/processunity-tutorial.md), [Cisco Intersight](../saas-apps/cisco-intersight-tutorial.md), [Codility](../saas-apps/codility-tutorial.md), [H5mag](https://account.h5mag.com/auth/request-access/ms365), [Check Point Identity Awareness](../saas-apps/check-point-identity-awareness-tutorial.md), [Jarvis](https://jarvis.live/login), [desknet's NEO](../saas-apps/desknets-neo-tutorial.md), [SDS & Chemical Information Management](../saas-apps/sds-chemical-information-management-tutorial.md), [W├║ru App](../saas-apps/wuru-app-tutorial.md), [Holmes](../saas-apps/holmes-tutorial.md), [Tide Multi Tenant](https://gallery.tideapp.co.uk/), [Telenor](https://www.telenor.no/kundeservice/internett/wifi/administrere-ruter/), [Yooz US](https://us1.getyooz.com/?kc_idp_hint=microsoft), [Mooncamp](https://app.mooncamp.com/#/login), [inwise SSO](https://app.inwise.com/defaultsso.aspx), [Ecolab Digital Solutions](https://ecolabb2c.b2clogin.com/account.ecolab.com/oauth2/v2.0/authorize?p=B2C_1A_Connect_OIDC_SignIn&client_id=01281626-dbed-4405-a430-66457825d361&nonce=defaultNonce&redirect_uri=https://jwt.ms&scope=openid&response_type=id_token&prompt=login), [Taguchi Digital Marketing System](https://login.taguchi.com.au/), [XpressDox EU Cloud](https://test.xpressdox.com/Authentication/Login.aspx), [EZSSH](https://docs.keytos.io/getting-started/registering-a-new-tenant/registering_app_in_tenant/), [EZSSH Client](https://portal.ezssh.io/signup), [Verto 365](https://www.vertocloud.com/Login/), [KPN Grip](https://www.grip-on-it.com/), [AddressLook](https://portal.bbsonlineservices.net/Manage/AddressLook), [Cornerstone single sign-on](../saas-apps/cornerstone-ondemand-tutorial.md)
+[Zii Travel Azure AD Connect](https://azuremarketplace.microsoft.com/marketplace/apps/aad.ziitravelazureadconnect?tab=Overview), [Cerby](../saas-apps/cerby-tutorial.md), [Selflessly](https://app.selflessly.io/sign-in), [Apollo CX](https://apollo.cxlabs.de/sso/aad), [Pedagoo](https://account.pedagoo.com/), [Measureup](https://account.measureup.com/), [ProcessUnity](../saas-apps/processunity-tutorial.md), [Cisco Intersight](../saas-apps/cisco-intersight-tutorial.md), [Codility](../saas-apps/codility-tutorial.md), [H5mag](https://account.h5mag.com/auth/request-access/ms365), [Check Point Identity Awareness](../saas-apps/check-point-identity-awareness-tutorial.md), [Jarvis](https://jarvis.live/login), [desknet's NEO](../saas-apps/desknets-neo-tutorial.md), [SDS & Chemical Information Management](../saas-apps/sds-chemical-information-management-tutorial.md), [W├║ru App](../saas-apps/wuru-app-tutorial.md), [Holmes](../saas-apps/holmes-tutorial.md), [Tide Multi Tenant](https://gallery.tideapp.co.uk/), [Telenor](https://www.telenor.no/kundeservice/internett/wifi/administrere-ruter/), [Yooz US](https://us1.getyooz.com/?kc_idp_hint=microsoft), [Mooncamp](https://app.mooncamp.com/#/login), [inwise SSO](https://app.inwise.com/defaultsso.aspx), [Ecolab Digital Solutions](https://ecolabb2c.b2clogin.com/account.ecolab.com/oauth2/v2.0/authorize?p=B2C_1A_Connect_OIDC_SignIn&client_id=01281626-dbed-4405-a430-66457825d361&nonce=defaultNonce&redirect_uri=https://jwt.ms&scope=openid&response_type=id_token&prompt=login), [Taguchi Digital Marketing System](https://login.taguchi.com.au/), [XpressDox EU Cloud](https://test.xpressdox.com/Authentication/Login.aspx), [EZSSH](https://docs.keytos.io/getting-started/registering-a-new-tenant/registering_app_in_tenant/), [EZSSH Client](https://portal.ezssh.io/signup), [Verto 365](https://www.vertocloud.com/Login/), [KPN Grip](https://www.grip-on-it.com/), [AddressLook](https://portal.bbsonlineservices.net/Manage/AddressLook), [Cornerstone Single Sign-On](../saas-apps/cornerstone-ondemand-tutorial.md)
You can also find the documentation of all the applications here: https://aka.ms/AppsTutorial
You can now automate creating, updating, and deleting user accounts for these ne
- [Bentley - Automatic User Provisioning](../saas-apps/bentley-automatic-user-provisioning-tutorial.md) - [Boxcryptor](../saas-apps/boxcryptor-provisioning-tutorial.md)-- [BrowserStack single sign-on](../saas-apps/browserstack-single-sign-on-provisioning-tutorial.md)
+- [BrowserStack Single Sign-on](../saas-apps/browserstack-single-sign-on-provisioning-tutorial.md)
- [Eletive](../saas-apps/eletive-provisioning-tutorial.md) - [Jostle](../saas-apps/jostle-provisioning-tutorial.md) - [Olfeo SAAS](../saas-apps/olfeo-saas-provisioning-tutorial.md)
For more information, see [What is sign-in diagnostic in Azure AD?](../reports-m
**Service category:** Azure AD Connect Cloud Sync **Product capability:** Directory
-Azure AD connect cloud sync now has an updated agent (version# - 1.1.359). For more details on agent updates, including bug fixes, check out the [version history](../cloud-sync/reference-version-history.md). With the updated agent, cloud sync customers can use GMSA cmdlets to set and reset their gMSA permission at a granular level. In addition that, we have changed the limit of syncing members using group scope filtering from 1499 to 50,000 (50K) members.
+Azure AD connect cloud sync now has an updated agent (version# - 1.1.359). For more details on agent updates, including bug fixes, check out the [version history](../cloud-sync/reference-version-history.md). With the updated agent, cloud sync customers can use GMSA cmdlets to set and reset their gMSA permission at a granular level. In addition that, we've changed the limit of syncing members using group scope filtering from 1499 to 50,000 (50K) members.
Check out the newly available [expression builder](../cloud-sync/how-to-expression-builder.md#deploy-the-expression) for cloud sync, which, helps you build complex expressions as well as simple expressions when you do transformations of attribute values from AD to Azure AD using attribute mapping.
With this new capability, connector groups can be assigned to the closest region
-### Public preview - External Identities Self-Service Sign-up in Azure AD using Email One-Time Passcode accounts
+### Public preview - External Identities Self-Service Sign up in Azure AD using Email One-Time Passcode accounts
**Type:** New feature **Service category:** B2B
Organizations in the Microsoft Azure Government cloud can now enable their guest
In March 2021 we have added following 37 new applications in our App gallery with Federation support:
-[Bambuser Live Video Shopping](https://lcx.bambuser.com/), [DeepDyve Inc](https://www.deepdyve.com/azure-sso), [Moqups](../saas-apps/moqups-tutorial.md), [RICOH Spaces Mobile](https://ricohspaces.app/welcome), [Flipgrid](https://auth.flipgrid.com/), [hCaptcha Enterprise](../saas-apps/hcaptcha-enterprise-tutorial.md), [SchoolStream ASA](https://www.ssk12.com/), [TransPerfect GlobalLink Dashboard](../saas-apps/transperfect-globallink-dashboard-tutorial.md), [SimplificaCI](https://app.simplificaci.com.br/), [Thrive LXP](../saas-apps/thrive-lxp-tutorial.md), [Lexonis TalentScape](../saas-apps/lexonis-talentscape-tutorial.md), [Exium](../saas-apps/exium-tutorial.md), [Sapient](../saas-apps/sapient-tutorial.md), [TrueChoice](../saas-apps/truechoice-tutorial.md), [RICOH Spaces](https://ricohspaces.app/welcome), [Saba Cloud](../saas-apps/learning-at-work-tutorial.md), [Acunetix 360](../saas-apps/acunetix-360-tutorial.md), [Exceed.ai](../saas-apps/exceed-ai-tutorial.md), [GitHub Enterprise Managed User](../saas-apps/github-enterprise-managed-user-tutorial.md), [Enterprise Vault.cloud for Outlook](https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=id_token&scope=openid%20profile%20User.Read&client_id=7176efe5-e954-4aed-b5c8-f5c85a980d3a&nonce=4b9e1981-1bcb-4938-a283-86f6931dc8cb), [Smartlook](../saas-apps/smartlook-tutorial.md), [Accenture Academy](../saas-apps/accenture-academy-tutorial.md), [Onshape](../saas-apps/onshape-tutorial.md), [Tradeshift](../saas-apps/tradeshift-tutorial.md), [JuriBlox](../saas-apps/juriblox-tutorial.md), [SecurityStudio](../saas-apps/securitystudio-tutorial.md), [ClicData](https://app.clicdata.com/), [Evergreen](../saas-apps/evergreen-tutorial.md), [Patchdeck](https://patchdeck.com/ad_auth/authenticate/), [FAX.PLUS](../saas-apps/fax-plus-tutorial.md), [ValidSign](../saas-apps/validsign-tutorial.md), [AWS single sign-on](../saas-apps/aws-single-sign-on-tutorial.md), [Nura Space](https://dashboard.nuraspace.com/login), [Broadcom DX SaaS](../saas-apps/broadcom-dx-saas-tutorial.md), [Interplay Learning](https://skilledtrades.interplaylearning.com/#login), [SendPro Enterprise](../saas-apps/sendpro-enterprise-tutorial.md), [FortiSASE SIA](../saas-apps/fortisase-sia-tutorial.md)
+[Bambuser Live Video Shopping](https://lcx.bambuser.com/), [DeepDyve Inc](https://www.deepdyve.com/azure-sso), [Moqups](../saas-apps/moqups-tutorial.md), [RICOH Spaces Mobile](https://ricohspaces.app/welcome), [Flipgrid](https://auth.flipgrid.com/), [hCaptcha Enterprise](../saas-apps/hcaptcha-enterprise-tutorial.md), [SchoolStream ASA](https://www.ssk12.com/), [TransPerfect GlobalLink Dashboard](../saas-apps/transperfect-globallink-dashboard-tutorial.md), [SimplificaCI](https://app.simplificaci.com.br/), [Thrive LXP](../saas-apps/thrive-lxp-tutorial.md), [Lexonis TalentScape](../saas-apps/lexonis-talentscape-tutorial.md), [Exium](../saas-apps/exium-tutorial.md), [Sapient](../saas-apps/sapient-tutorial.md), [TrueChoice](../saas-apps/truechoice-tutorial.md), [RICOH Spaces](https://ricohspaces.app/welcome), [Saba Cloud](../saas-apps/learning-at-work-tutorial.md), [Acunetix 360](../saas-apps/acunetix-360-tutorial.md), [Exceed.ai](../saas-apps/exceed-ai-tutorial.md), [GitHub Enterprise Managed User](../saas-apps/github-enterprise-managed-user-tutorial.md), [Enterprise Vault.cloud for Outlook](https://login.microsoftonline.com/common/oauth2/v2.0/authorize?response_type=id_token&scope=openid%20profile%20User.Read&client_id=7176efe5-e954-4aed-b5c8-f5c85a980d3a&nonce=4b9e1981-1bcb-4938-a283-86f6931dc8cb), [Smartlook](../saas-apps/smartlook-tutorial.md), [Accenture Academy](../saas-apps/accenture-academy-tutorial.md), [Onshape](../saas-apps/onshape-tutorial.md), [Tradeshift](../saas-apps/tradeshift-tutorial.md), [JuriBlox](../saas-apps/juriblox-tutorial.md), [SecurityStudio](../saas-apps/securitystudio-tutorial.md), [ClicData](https://app.clicdata.com/), [Evergreen](../saas-apps/evergreen-tutorial.md), [Patchdeck](https://patchdeck.com/ad_auth/authenticate/), [FAX.PLUS](../saas-apps/fax-plus-tutorial.md), [ValidSign](../saas-apps/validsign-tutorial.md), [AWS Single Sign-on](../saas-apps/aws-single-sign-on-tutorial.md), [Nura Space](https://dashboard.nuraspace.com/login), [Broadcom DX SaaS](../saas-apps/broadcom-dx-saas-tutorial.md), [Interplay Learning](https://skilledtrades.interplaylearning.com/#login), [SendPro Enterprise](../saas-apps/sendpro-enterprise-tutorial.md), [FortiSASE SIA](../saas-apps/fortisase-sia-tutorial.md)
You can also find the documentation of all the applications here: https://aka.ms/AppsTutorial
For listing your application in the Azure AD app gallery, read the details here:
You can now automate creating, updating, and deleting user accounts for these newly integrated apps: -- [AWS single sign-on](../saas-apps/aws-single-sign-on-provisioning-tutorial.md)
+- [AWS Single Sign-on](../saas-apps/aws-single-sign-on-provisioning-tutorial.md)
- [Bpanda](../saas-apps/bpanda-provisioning-tutorial.md) - [Britive](../saas-apps/britive-provisioning-tutorial.md) - [GitHub Enterprise Managed User](../saas-apps/github-enterprise-managed-user-provisioning-tutorial.md)
Customers can now reinvite existing external guest users to reset their redempti
**Service category:** App Provisioning **Product capability:** Identity Lifecycle Management
-Customers can now use application.readwrite.ownedby as an application permission to call the synchronization APIs. Note this is only supported for provisioning from Azure AD out into third-party applications (for example, AWS, Data Bricks, etc.). It is currently not supported for HR-provisioning (Workday / Successfactors) or Cloud Sync (AD to Azure AD). [Learn more](/graph/api/resources/provisioningobjectsummary).
+Customers can now use application.readwrite.ownedby as an application permission to call the synchronization APIs. Note this is only supported for provisioning from Azure AD out into third-party applications (for example, AWS, Data Bricks, etc.). It's currently not supported for HR-provisioning (Workday / Successfactors) or Cloud Sync (AD to Azure AD). [Learn more](/graph/api/resources/provisioningobjectsummary).
In the past, company logos weren't used on Azure Active Directory sign-in pages.
**Service category:** User Access Management **Product capability:** Entitlement Management
-An extra option when you select approvers is now available in Entitlement Management. If you select "Manager as approver" for the First Approver, you will have another option, "Second level manager as alternate approver", available to choose in the alternate approver field. If you select this option, you need to add a fallback approver to forward the request to in case the system can't find the second level manager. [Learn more](../governance/entitlement-management-access-package-approval-policy.md#alternate-approvers).
+An extra option when you select approvers is now available in Entitlement Management. If you select "Manager as approver" for the First Approver, you'll have another option, "Second level manager as alternate approver", available to choose in the alternate approver field. If you select this option, you need to add a fallback approver to forward the request to in case the system can't find the second level manager. [Learn more](../governance/entitlement-management-access-package-approval-policy.md#alternate-approvers).
For listing your application in the Azure AD app gallery, read the details here
**Service category:** User Access Management **Product capability:** Entitlement Management
-An extra option when you select approvers is now available in Entitlement Management. If you select "Manager as approver" for the First Approver, you will have another option, "Second level manager as alternate approver", available to choose in the alternate approver field. If you select this option, you need to add a fallback approver to forward the request to in case the system can't find the second level manager. [Learn more](../governance/entitlement-management-access-package-approval-policy.md#alternate-approvers)
+An extra option when you select approvers is now available in Entitlement Management. If you select "Manager as approver" for the First Approver, you'll have another option, "Second level manager as alternate approver", available to choose in the alternate approver field. If you select this option, you need to add a fallback approver to forward the request to in case the system can't find the second level manager. [Learn more](../governance/entitlement-management-access-package-approval-policy.md#alternate-approvers)
For more information, see [Automate user provisioning to SaaS applications with
-### Public Preview - Email sign-in with ProxyAddresses now deployable via Staged Rollout
+### Public Preview - Email Sign-In with ProxyAddresses now deployable via Staged Rollout
**Type:** New feature **Service category:** Authentications (Logins) **Product capability:** User Authentication
-Tenant administrators can now use Staged Rollout to deploy Email sign-in with ProxyAddresses to specific Azure AD groups. This can help while trying out the feature before deploying it to the entire tenant via the Home Realm Discovery policy. Instructions for deploying Email sign-in with ProxyAddresses via Staged Rollout are in the [documentation](../authentication/howto-authentication-use-email-signin.md).
+Tenant administrators can now use Staged Rollout to deploy Email Sign-In with ProxyAddresses to specific Azure AD groups. This can help while trying out the feature before deploying it to the entire tenant via the Home Realm Discovery policy. Instructions for deploying Email Sign-In with ProxyAddresses via Staged Rollout are in the [documentation](../authentication/howto-authentication-use-email-signin.md).
The new service also aims to complete member addition and removal because of att
## October 2020
-### Azure AD on-premises Hybrid Agents Impacted by Azure TLS Certificate Changes
+### Azure AD On-Premises Hybrid Agents Impacted by Azure TLS Certificate Changes
**Type:** Plan for change **Service category:** N/A
Microsoft is updating Azure services to use TLS certificates from a different se
This change will result in disruption of service if you don't take action immediately. These agents include [Application Proxy connectors](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/AppProxy) for remote access to on-premises, [Passthrough Authentication](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/AzureADConnect) agents that allow your users to sign in to applications using the same passwords, and [Cloud Provisioning Preview](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/AzureADConnect) agents that perform AD to Azure AD sync.
-If you have an environment with firewall rules set to allow outbound calls to only specific Certificate Revocation List (CRL) download, you will need to allow the following CRL and OCSP URLs. For full details on the change and the CRL and OCSP URLs to enable access to, see [Azure TLS certificate changes](../../security/fundamentals/tls-certificate-changes.md).
+If you have an environment with firewall rules set to allow outbound calls to only specific Certificate Revocation List (CRL) download, you'll need to allow the following CRL and OCSP URLs. For full details on the change and the CRL and OCSP URLs to enable access to, see [Azure TLS certificate changes](../../security/fundamentals/tls-certificate-changes.md).
We'll provide an update when a date is completed. This deprecation isn't planned
-### Azure AD on-premises Hybrid Agents Impacted by Azure Transport Layer Security (TLS) Certificate Changes
+### Azure AD On-Premises Hybrid Agents Impacted by Azure Transport Layer Security (TLS) Certificate Changes
**Type:** Plan for change **Service category:** N/A
If you have an environment with firewall rules set to allow outbound calls to on
**Service category:** N/A **Product capability:** Standards
-Azure Active Directory will deprecate the following protocols in Azure Active Directory worldwide regions starting on January 31, 2022 (This date has been postponed from 30th June 2021 to 31st January 2022, to give Administrators more time to remove the dependency on legacy TLS protocols and ciphers (TLS 1.0,1.1 and 3DES)):
+Azure Active Directory will deprecate the following protocols in Azure Active Directory worldwide regions starting on January 31, 2022 (This date has been postponed from 30th June 2021 to 31st Jan 2022, to give Administrators more time to remove the dependency on legacy TLS protocols and ciphers (TLS 1.0,1.1 and 3DES)):
- TLS 1.0 - TLS 1.1
Azure AD Connect Cloud Provisioning public preview refresh features two major en
- On-demand Provisioning or Test User experience
- Once you have setup your configuration, you might want to test to see if the user transformation is working as expected before applying it to all your users in scope. With on-demand provisioning, IT Admins can enter the Distinguished Name (DN) of an AD user and see if they're getting synced as expected. On-demand provisioning provides a great way to ensure that the attribute mappings you did previously work as expected. [Learn More](../cloud-sync/how-to-on-demand-provision.md)
+ Once you have set up your configuration, you might want to test to see if the user transformation is working as expected before applying it to all your users in scope. With on-demand provisioning, IT Admins can enter the Distinguished Name (DN) of an AD user and see if they're getting synced as expected. On-demand provisioning provides a great way to ensure that the attribute mappings you did previously work as expected. [Learn More](../cloud-sync/how-to-on-demand-provision.md)
For more information, please see [User management enhancements (preview) in Azur
**Service category:** Enterprise Apps **Product capability:** SSO
-You can add free text notes to Enterprise applications. You can add any relevant information that will help you manage applications under Enterprise applications. For more information, see [Quickstart: Configure properties for an application in your Azure Active Directory (Azure AD) tenant](../manage-apps/add-application-portal-configure.md).
+You can add free text notes to Enterprise applications. You can add any relevant information that will help manager applications under Enterprise applications. For more information, see [Quickstart: Configure properties for an application in your Azure Active Directory (Azure AD) tenant](../manage-apps/add-application-portal-configure.md).
You can add free text notes to Enterprise applications. You can add any relevant
In September 2020 we have added following 34 new applications in our App gallery with Federation support:
-[VMware Horizon - Unified Access Gateway](), [Pulse Secure PCS](../saas-apps/vmware-horizon-unified-access-gateway-tutorial.md), [Inventory360](../saas-apps/pulse-secure-pcs-tutorial.md), [Frontitude](https://services.enteksystems.de/sso/microsoft/signup), [BookWidgets](https://www.bookwidgets.com/sso/office365), [ZVD_Server](https://zaas.zenmutech.com/user/signin), [HashData for Business](https://hashdata.app/login.xhtml), [SecureLogin](https://securelogin.securelogin.nu/sso/azure/login), [CyberSolutions MAILBASEΣ/CMSS](../saas-apps/cybersolutions-mailbase-tutorial.md), [CyberSolutions CYBERMAILΣ](../saas-apps/cybersolutions-cybermail-tutorial.md), [LimbleCMMS](https://auth.limblecmms.com/), [Glint Inc](../saas-apps/glint-inc-tutorial.md), [zeroheight](../saas-apps/zeroheight-tutorial.md), [Gender Fitness](https://app.genderfitness.com/), [Coeo Portal](https://my.coeo.com/), [Grammarly](../saas-apps/grammarly-tutorial.md), [Fivetran](../saas-apps/fivetran-tutorial.md), [Kumolus](../saas-apps/kumolus-tutorial.md), [RSA Archer Suite](../saas-apps/rsa-archer-suite-tutorial.md), [TeamzSkill](../saas-apps/teamzskill-tutorial.md), [raumfürraum](../saas-apps/raumfurraum-tutorial.md), [Saviynt](../saas-apps/saviynt-tutorial.md), [BizMerlinHR](https://marketplace.bizmerlin.net/bmone/signup), [Mobile Locker](../saas-apps/mobile-locker-tutorial.md), [Zengine](../saas-apps/zengine-tutorial.md), [CloudCADI](https://app.cloudcadi.com/login), [Simfoni Analytics](https://simfonianalytics.com/accounts/microsoft/login/), [Priva Identity & Access Management](https://my.priva.com/), [Nitro Pro](https://www.gonitro.com/nps/product-details/downloads), [Eventfinity](../saas-apps/eventfinity-tutorial.md), [Fexa](../saas-apps/fexa-tutorial.md), [Secured Signing Enterprise Portal](https://www.securedsigning.com/aad/Auth/ExternalLogin/AdminPortal), [Secured Signing Enterprise Portal Azure AD Setup](https://www.securedsigning.com/aad/Auth/ExternalLogin/AdminPortal), [Wistec Online](https://wisteconline.com/auth/oidc), [Oracle PeopleSoft - Protected by F5 BIG-IP APM](../saas-apps/oracle-peoplesoft-protected-by-f5-big-ip-apm-tutorial.md)
+[VMware Horizon - Unified Access Gateway](), [Pulse Secure PCS](../saas-apps/vmware-horizon-unified-access-gateway-tutorial.md), [Inventory360](../saas-apps/pulse-secure-pcs-tutorial.md), [Frontitude](https://services.enteksystems.de/sso/microsoft/signup), [BookWidgets](https://www.bookwidgets.com/sso/office365), [ZVD_Server](https://zaas.zenmutech.com/user/signin), [HashData for Business](https://hashdata.app/login.xhtml), [SecureLogin](https://securelogin.securelogin.nu/sso/azure/login), [CyberSolutions MAILBASEΣ/CMSS](../saas-apps/cybersolutions-mailbase-tutorial.md), [CyberSolutions CYBERMAILΣ](../saas-apps/cybersolutions-cybermail-tutorial.md), [LimbleCMMS](https://auth.limblecmms.com/), [Glint Inc](../saas-apps/glint-inc-tutorial.md), [zeroheight](../saas-apps/zeroheight-tutorial.md), [Gender Fitness](https://app.genderfitness.com/), [Coeo Portal](https://my.coeo.com/), [Grammarly](../saas-apps/grammarly-tutorial.md), [Fivetran](../saas-apps/fivetran-tutorial.md), [Kumolus](../saas-apps/kumolus-tutorial.md), [RSA Archer Suite](../saas-apps/rsa-archer-suite-tutorial.md), [TeamzSkill](../saas-apps/teamzskill-tutorial.md), [raumfürraum](../saas-apps/raumfurraum-tutorial.md), [Saviynt](../saas-apps/saviynt-tutorial.md), [BizMerlinHR](https://marketplace.bizmerlin.net/bmone/signup), [Mobile Locker](../saas-apps/mobile-locker-tutorial.md), [Zengine](../saas-apps/zengine-tutorial.md), [CloudCADI](https://app.cloudcadi.com/login), [Simfoni Analytics](https://simfonianalytics.com/accounts/microsoft/login/), [Priva Identity & Access Management](https://my.priva.com/), [Nitro Pro](https://www.gonitro.com/nps/product-details/downloads), [Eventfinity](../saas-apps/eventfinity-tutorial.md), [Fexa](../saas-apps/fexa-tutorial.md), [Secured Signing Enterprise Portal](https://www.securedsigning.com/aad/Auth/ExternalLogin/AdminPortal), [Secured Signing Enterprise Portal AAD Setup](https://www.securedsigning.com/aad/Auth/ExternalLogin/AdminPortal), [Wistec Online](https://wisteconline.com/auth/oidc), [Oracle PeopleSoft - Protected by F5 BIG-IP APM](../saas-apps/oracle-peoplesoft-protected-by-f5-big-ip-apm-tutorial.md)
You can also find the documentation of all the applications from here: https://aka.ms/AppsTutorial.
The Azure AD provisioning service leverages the SCIM standard for integrating wi
Owner settings on Groups general setting page can be configured to restrict owner assignment privileges to a limited group of users in the Azure Admin portal and Access Panel. We will soon have the ability to assign group owner privilege not only on these two UX portals but also enforce the policy on the backend to provide consistent behavior across endpoints, such as PowerShell and Microsoft Graph.
-We will start to disable the current setting for the customers who are not using it and will offer an option to scope users for group owner privilege in the next few months. For guidance on updating group settings, see Edit your group information using [Azure Active Directory](./active-directory-groups-settings-azure-portal.md?context=azure%2factive-directory%2fusers-groups-roles%2fcontext%2fugr-context).
+We will start to disable the current setting for the customers who aren't using it and will offer an option to scope users for group owner privilege in the next few months. For guidance on updating group settings, see Edit your group information using [Azure Active Directory](./active-directory-groups-settings-azure-portal.md?context=azure%2factive-directory%2fusers-groups-roles%2fcontext%2fugr-context).
Transport layer security (TLS) 1.2 and update servers and clients will soon comm
Windows Hello for Business allows end users to sign into Windows machines with a gesture (such as a PIN or biometric). Azure AD admins may want to differentiate Windows Hello for Business sign-ins from other Windows sign-ins as part of an organization's journey to passwordless authentication.
-Admins can now see whether a Windows authentication used Windows Hello for Business by checking the Authentication Details tab for a Windows sign-in event in the Azure AD sign-ins blade in the Azure portal. Windows Hello for Business authentications will include "WindowsHelloForBusiness" in the Authentication Method field. For more information on interpreting sign-in Logs, please see the [sign-in Logs documentation](../reports-monitoring/concept-sign-ins.md).
+Admins can now see whether a Windows authentication used Windows Hello for Business by checking the Authentication Details tab for a Windows sign-in event in the Azure AD sign-ins blade in the Azure portal. Windows Hello for Business authentications will include "WindowsHelloForBusiness" in the Authentication Method field. For more information on interpreting Sign-In Logs, please see the [Sign-In Logs documentation](../reports-monitoring/concept-sign-ins.md).
For more information about users flows, see [User flow versions in Azure Active
In July 2020 we have added following 55 new applications in our App gallery with Federation support:
-[Appreiz](https://microsoftteams.appreiz.com/), [Inextor Vault](https://inexto.com/inexto-suite/inextor), [Beekast](https://my.beekast.com/), [Templafy OpenID Connect](https://app.templafy.com/), [PeterConnects receptionist](https://msteams.peterconnects.com/), [AlohaCloud](https://www.alohacloud.com/), Control Tower, [Cocoom](https://start.cocoom.com/), [COINS Construction Cloud](https://sso.coinsconstructioncloud.com/#login/), [Medxnote MT](https://task.teamsmain.medx.im/authorization), [Reflekt](https://reflekt.konsolute.com/login), [Rever](https://app.reverscore.net/access), [MyCompanyArchive](https://login.mycompanyarchive.com/), [GReminders](https://app.greminders.com/o365-oauth), [Titanfile](../saas-apps/titanfile-tutorial.md), [Wootric](../saas-apps/wootric-tutorial.md), [SolarWinds Orion](https://support.solarwinds.com/SuccessCenter/s/orion-platform?language=en_US), [OpenText Directory Services](../saas-apps/opentext-directory-services-tutorial.md), [Datasite](../saas-apps/datasite-tutorial.md), [BlogIn](../saas-apps/blogin-tutorial.md), [IntSights](../saas-apps/intsights-tutorial.md), [kpifire](../saas-apps/kpifire-tutorial.md), [Textline](../saas-apps/textline-tutorial.md), [Cloud Academy - SSO](../saas-apps/cloud-academy-sso-tutorial.md), [Community Spark](../saas-apps/community-spark-tutorial.md), [Chatwork](../saas-apps/chatwork-tutorial.md), [CloudSign](../saas-apps/cloudsign-tutorial.md), [C3M Cloud Control](../saas-apps/c3m-cloud-control-tutorial.md), [SmartHR](https://smarthr.jp/), [NumlyEngageΓäó](../saas-apps/numlyengage-tutorial.md), [Michigan Data Hub single sign-on](../saas-apps/michigan-data-hub-single-sign-on-tutorial.md), [Egress](../saas-apps/egress-tutorial.md), [SendSafely](../saas-apps/sendsafely-tutorial.md), [Eletive](https://app.eletive.com/), [Right-Hand Cybersecurity ADI](https://right-hand.ai/), [Fyde Enterprise Authentication](https://enterprise.fyde.com/), [Verme](../saas-apps/verme-tutorial.md), [Lenses.io](../saas-apps/lensesio-tutorial.md), [Momenta](../saas-apps/momenta-tutorial.md), [Uprise](https://app.uprise.co/sign-in), [Q](https://q.moduleq.com/login), [CloudCords](../saas-apps/cloudcords-tutorial.md), [TellMe Bot](https://tellme365liteweb.azurewebsites.net/), [Inspire](https://app.inspiresoftware.com/), [Maverics Identity Orchestrator SAML Connector](https://www.strata.io/identity-fabric/), [Smartschool (School Management System)](https://smartschoolz.com/login), [Zepto - Intelligent timekeeping](https://user.zepto-ai.com/signin), [Studi.ly](https://studi.ly/), [Trackplan](http://www.trackplanfm.com/), [Skedda](../saas-apps/skedda-tutorial.md), [WhosOnLocation](../saas-apps/whos-on-location-tutorial.md), [Coggle](../saas-apps/coggle-tutorial.md), [Kemp LoadMaster](https://kemptechnologies.com/cloud-load-balancer/), [BrowserStack single sign-on](../saas-apps/browserstack-single-sign-on-tutorial.md)
+[Appreiz](https://microsoftteams.appreiz.com/), [Inextor Vault](https://inexto.com/inexto-suite/inextor), [Beekast](https://my.beekast.com/), [Templafy OpenID Connect](https://app.templafy.com/), [PeterConnects receptionist](https://msteams.peterconnects.com/), [AlohaCloud](https://www.alohacloud.com/), Control Tower, [Cocoom](https://start.cocoom.com/), [COINS Construction Cloud](https://sso.coinsconstructioncloud.com/#login/), [Medxnote MT](https://task.teamsmain.medx.im/authorization), [Reflekt](https://reflekt.konsolute.com/login), [Rever](https://app.reverscore.net/access), [MyCompanyArchive](https://login.mycompanyarchive.com/), [GReminders](https://app.greminders.com/o365-oauth), [Titanfile](../saas-apps/titanfile-tutorial.md), [Wootric](../saas-apps/wootric-tutorial.md), [SolarWinds Orion](https://support.solarwinds.com/SuccessCenter/s/orion-platform?language=en_US), [OpenText Directory Services](../saas-apps/opentext-directory-services-tutorial.md), [Datasite](../saas-apps/datasite-tutorial.md), [BlogIn](../saas-apps/blogin-tutorial.md), [IntSights](../saas-apps/intsights-tutorial.md), [kpifire](../saas-apps/kpifire-tutorial.md), [Textline](../saas-apps/textline-tutorial.md), [Cloud Academy - SSO](../saas-apps/cloud-academy-sso-tutorial.md), [Community Spark](../saas-apps/community-spark-tutorial.md), [Chatwork](../saas-apps/chatwork-tutorial.md), [CloudSign](../saas-apps/cloudsign-tutorial.md), [C3M Cloud Control](../saas-apps/c3m-cloud-control-tutorial.md), [SmartHR](https://smarthr.jp/), [NumlyEngageΓäó](../saas-apps/numlyengage-tutorial.md), [Michigan Data Hub Single Sign-On](../saas-apps/michigan-data-hub-single-sign-on-tutorial.md), [Egress](../saas-apps/egress-tutorial.md), [SendSafely](../saas-apps/sendsafely-tutorial.md), [Eletive](https://app.eletive.com/), [Right-Hand Cybersecurity ADI](https://right-hand.ai/), [Fyde Enterprise Authentication](https://enterprise.fyde.com/), [Verme](../saas-apps/verme-tutorial.md), [Lenses.io](../saas-apps/lensesio-tutorial.md), [Momenta](../saas-apps/momenta-tutorial.md), [Uprise](https://app.uprise.co/sign-in), [Q](https://q.moduleq.com/login), [CloudCords](../saas-apps/cloudcords-tutorial.md), [TellMe Bot](https://tellme365liteweb.azurewebsites.net/), [Inspire](https://app.inspiresoftware.com/), [Maverics Identity Orchestrator SAML Connector](https://www.strata.io/identity-fabric/), [Smartschool (School Management System)](https://smartschoolz.com/login), [Zepto - Intelligent timekeeping](https://user.zepto-ai.com/signin), [Studi.ly](https://studi.ly/), [Trackplan](http://www.trackplanfm.com/), [Skedda](../saas-apps/skedda-tutorial.md), [WhosOnLocation](../saas-apps/whos-on-location-tutorial.md), [Coggle](../saas-apps/coggle-tutorial.md), [Kemp LoadMaster](https://kemptechnologies.com/cloud-load-balancer/), [BrowserStack Single Sign-on](../saas-apps/browserstack-single-sign-on-tutorial.md)
You can also find the documentation of all the applications from here https://aka.ms/AppsTutorial
You can now view role assignments across all scopes for a role in the "Roles and
-### Azure Active Directory Multi-Factor Authentication Software Development (Azure AD Multi-Factor Authentication SDK) Deprecation
+### Azure Active Directory Multi-Factor Authentication Software Development (Azure MFA SDK) Deprecation
**Type:** Deprecated **Service category:** MFA **Product capability:** Identity Security & Protection
-The Azure Active Directory Multi-Factor Authentication Software Development (Azure AD Multi-Factor Authentication SDK) reached the end of life on November 14th, 2018, as first announced in November 2017. Microsoft will be shutting down the SDK service effective on September 30th, 2020. Any calls made to the SDK will fail.
+The Azure Active Directory Multi-Factor Authentication Software Development (Azure MFA SDK) reached the end of life on November 14th, 2018, as first announced in November 2017. Microsoft will be shutting down the SDK service effective on September 30th, 2020. Any calls made to the SDK will fail.
-If your organization is using the Azure AD Multi-Factor Authentication SDK, you need to migrate by September 30th, 2020:
-- Azure AD Multi-Factor Authentication SDK for MIM: If you use the SDK with MIM, you should migrate to Azure AD Multi-Factor Authentication (MFA) Server and activate Privileged Access Management (PAM) following these [instructions](/microsoft-identity-manager/working-with-mfaserver-for-mim). -- Azure AD Multi-Factor Authentication SDK for customized apps: Consider integrating your app into Azure AD and use Conditional Access to enforce MFA. To get started, review this [page](../manage-apps/plan-an-application-integration.md).
+If your organization is using the Azure MFA SDK, you need to migrate by September 30th, 2020:
+- Azure MFA SDK for MIM: If you use the SDK with MIM, you should migrate to Azure AD Multi-Factor Authentication (MFA) Server and activate Privileged Access Management (PAM) following these [instructions](/microsoft-identity-manager/working-with-mfaserver-for-mim).
+- Azure MFA SDK for customized apps: Consider integrating your app into Azure AD and use Conditional Access to enforce MFA. To get started, review this [page](../manage-apps/plan-an-application-integration.md).
The user risk condition requires Azure AD Premium P2 because it uses Azure Ident
**Service category:** Enterprise Apps **Product capability:** SSO
-Some SAML applications require SPNameQualifier to be returned in the assertion subject when requested. Now Azure AD responds correctly when a SPNameQualifier is requested in the request NameID policy. This also works for SP initiated sign-in, and IdP initiated sign-in will follow. To learn more about SAML protocol in Azure Active Directory, see [Single sign-on SAML protocol](../develop/single-sign-on-saml-protocol.md).
+Some SAML applications require SPNameQualifier to be returned in the assertion subject when requested. Now Azure AD responds correctly when a SPNameQualifier is requested in the request NameID policy. This also works for SP initiated sign-in, and IdP initiated sign-in will follow. To learn more about SAML protocol in Azure Active Directory, see [Single Sign-On SAML protocol](../develop/single-sign-on-saml-protocol.md).
Additionally, authentication session management used to only apply to the First
**Service category:** Enterprise Apps **Product capability:** 3rd Party Integration
-In June 2020 we have added the following 29 new applications in our App gallery with Federation support:
+In June 2020 we've added the following 29 new applications in our App gallery with Federation support:
[Shopify Plus](../saas-apps/shopify-plus-tutorial.md), [Ekarda](../saas-apps/ekarda-tutorial.md), [MailGates](../saas-apps/mailgates-tutorial.md), [BullseyeTDP](../saas-apps/bullseyetdp-tutorial.md), [Raketa](../saas-apps/raketa-tutorial.md), [Segment](../saas-apps/segment-tutorial.md), [Ai Auditor](https://www.mindbridge.ai/products/ai-auditor/), [Pobuca Connect](https://app.pobu.c), [MyCompliance Cloud](https://cloud.metacompliance.com/), [Smallstep SSH](https://smallstep.com/sso-ssh/)
For listing your application in the Azure AD app gallery, please read the detail
External Identities API connectors enable you to leverage web APIs to integrate self-service sign-up with external cloud systems. This means you can now invoke web APIs as specific steps in a sign-up flow to trigger cloud-based custom workflows. For example, you can use API connectors to: -- Integrate with custom approval workflows
+- Integrate with a custom approval workflows.
- Perform identity proofing - Validate user input data - Overwrite user attributes
A new delegated permission EntitlementManagement.Read.All is now available for u
**Service category:** Identity Protection **Product capability:** Identity Security & Protection
-The riskyUsers and riskDetections Microsoft Graph APIs are now generally available. Now that they are available at the v1.0 endpoint, we invite you to use them in production. For more information, please check out the [Microsoft Graph docs](/graph/api/resources/identityprotectionroot).
+The riskyUsers and riskDetections Microsoft Graph APIs are now generally available. Now that they're available at the v1.0 endpoint, we invite you to use them in production. For more information, please check out the [Microsoft Graph docs](/graph/api/resources/identityprotectionroot).
The provisioning service has been updated to reduce the time for an [incremental
**Service category:** N/A **Product capability:** Device Lifecycle Management
-Now that Microsoft Authentication Libraries (MSAL) is available, we will no longer add new features to the Azure Active Directory Authentication Libraries (ADAL) and will end security patches on June 30th, 2022. For more information on how to migrate to MSAL, refer to [Migrate applications to Microsoft Authentication Library (MSAL)](../develop/msal-migration.md).
+Now that Microsoft Authentication Libraries (MSAL) is available, we'll no longer add new features to the Azure Active Directory Authentication Libraries (ADAL) and will end security patches on June 30th, 2022. For more information on how to migrate to MSAL, refer to [Migrate applications to Microsoft Authentication Library (MSAL)](../develop/msal-migration.md).
-Additionally, we have finished the work to make all Azure AD Graph functionality available through MS Graph. So, Azure AD Graph APIs will receive only bugfix and security fixes through June 30th, 2022. For more information, see [Update your applications to use Microsoft Authentication Library and Microsoft Graph API](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/update-your-applications-to-use-microsoft-authentication-library/ba-p/1257363)
+Additionally, we've finished the work to make all Azure AD Graph functionality available through MS Graph. So, Azure AD Graph APIs will receive only bugfix and security fixes through June 30th, 2022. For more information, see [Update your applications to use Microsoft Authentication Library and Microsoft Graph API](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/update-your-applications-to-use-microsoft-authentication-library/ba-p/1257363)
## May 2020
-### Retirement of properties in sign-ins, riskyUsers, and riskDetections APIs
+### Retirement of properties in signIns, riskyUsers, and riskDetections APIs
**Type:** Plan for change **Service category:** Identity Protection **Product capability:** Identity Security & Protection
-Currently, enumerated types are used to represent the riskType property in both the riskDetections API and riskyUserHistoryItem (in preview). Enumerated types are also used for the riskEventTypes property in the sign-ins API. Going forward we will represent these properties as strings.
+Currently, enumerated types are used to represent the riskType property in both the riskDetections API and riskyUserHistoryItem (in preview). Enumerated types are also used for the riskEventTypes property in the signIns API. Going forward we'll represent these properties as strings.
-Customers should transition to the riskEventType property in the beta riskDetections and riskyUserHistoryItem API, and to riskEventTypes_v2 property in the beta sign-ins API by September 9th, 2020. At that date, we will be retiring the current riskType and riskEventTypes properties. For more information, refer to [Changes to risk event properties and Identity Protection APIs on Microsoft Graph](https://developer.microsoft.com/graph/blogs/changes-to-risk-event-properties-and-identity-protection-apis-on-microsoft-graph/).
+Customers should transition to the riskEventType property in the beta riskDetections and riskyUserHistoryItem API, and to riskEventTypes_v2 property in the beta signIns API by September 9th, 2020. At that date, we'll be retiring the current riskType and riskEventTypes properties. For more information, refer to [Changes to risk event properties and Identity Protection APIs on Microsoft Graph](https://developer.microsoft.com/graph/blogs/changes-to-risk-event-properties-and-identity-protection-apis-on-microsoft-graph/).
-### Deprecation of riskEventTypes property in sign-ins v1.0 API on Microsoft Graph
+### Deprecation of riskEventTypes property in signIns v1.0 API on Microsoft Graph
**Type:** Plan for change **Service category:** Reporting **Product capability:** Identity Security & Protection
-Enumerated types will switch to string types when representing risk event properties in Microsoft Graph September 2020. In addition to affecting the preview APIs, this change will also affect the in-production sign-ins API.
+Enumerated types will switch to string types when representing risk event properties in Microsoft Graph September 2020. In addition to impacting the preview APIs, this change will also impact the in-production signIns API.
-We have introduced a new riskEventsTypes_v2 (string) property to the sign-ins v1.0 API. We will retire the current riskEventTypes (enum) property on June 11, 2022 in accordance with our Microsoft Graph deprecation policy. Customers should transition to the riskEventTypes_v2 property in the v1.0 sign-ins API by June 11, 2022. For more information, refer to [Deprecation of riskEventTypes property in sign-ins v1.0 API on Microsoft Graph](https://developer.microsoft.com/graph/blogs/deprecation-of-riskeventtypes-property-in-signins-v1-0-api-on-microsoft-graph//).
+We have introduced a new riskEventsTypes_v2 (string) property to the signIns v1.0 API. We'll retire the current riskEventTypes (enum) property on June 11, 2022 in accordance with our Microsoft Graph deprecation policy. Customers should transition to the riskEventTypes_v2 property in the v1.0 signIns API by June 11, 2022. For more information, see [Deprecation of riskEventTypes property in signIns v1.0 API on Microsoft Graph](https://developer.microsoft.com/graph/blogs/deprecation-of-riskeventtypes-property-in-signins-v1-0-api-on-microsoft-graph//).
We have introduced a new riskEventsTypes_v2 (string) property to the sign-ins v1
**Product capability:** Identity Security & Protection
-We are making the following changes to the email notifications for cloud multifactor authentication (MFA):
+We're making the following changes to the email notifications for cloud multifactor authentication (MFA):
E-mail notifications will be sent from the following address: azure-noreply@microsoft.com and msonlineservicesteam@microsoftonline.com. We're updating the content of fraud alert emails to better indicate the required steps to unblock uses.
E-mail notifications will be sent from the following address: azure-noreply@micr
**Product capability:** User Authentication
-Currently, users who are in domains federated in Azure AD, but who are not synced into the tenant, can't access Teams. Starting at the end of June, this new capability will enable them to do so by extending the existing email verified sign up feature. This will allow users who can sign in to a federated IdP, but who don't yet have a user object in Azure ID, to have a user object created automatically and be authenticated for Teams. Their user object will be marked as "self-service sign up." This is an extension of the existing capability to do email verified self-sign up that users in managed domains can do and can be controlled using the same flag. This change will complete rolling out during the following two months. Watch for documentation updates [here](../enterprise-users/directory-self-service-signup.md).
+Currently, users who are in domains federated in Azure AD, but who aren't synced into the tenant, can't access Teams. Starting at the end of June, this new capability will enable them to do so by extending the existing email verified sign-up feature. This will allow users who can sign in to a federated IdP, but who don't yet have a user object in Azure ID, to have a user object created automatically and be authenticated for Teams. Their user object will be marked as "self-service sign-up." This is an extension of the existing capability to do email verified self-sign up that users in managed domains can do and can be controlled using the same flag. This change will complete rolling out during the following two months. Watch for documentation updates [here](../enterprise-users/directory-self-service-signup.md).
This bug fix will be rolled out gradually over approximately 2 months.
**Service category:** Sovereign Clouds **Product capability:** User Authentication
-On 1 June 2018, the official Azure Active Directory (Azure AD) Authority for Azure Government changed from https://login-us.microsoftonline.com to https://login.microsoftonline.us. If you own an application within an Azure Government tenant, you must update your application to sign users in on the .us endpoint.
+On 1 June 2018, the official Azure Active Directory (Azure AD) Authority for Azure Government changed from https://login-us.microsoftonline.com to https://login.microsoftonline.us. If you own an application within an Azure Government tenant, you must update your application to sign users in on the.us endpoint.
-Starting May 5th, Azure AD will begin enforcing the endpoint change, blocking Azure Government users from signing into apps hosted in Azure Government tenants using the public endpoint (microsoftonline.com). Affected apps will begin seeing an error AADSTS900439 - USGClientNotSupportedOnPublicEndpoint.
+Starting May 5th, Azure AD will begin enforcing the endpoint change, blocking Azure Government users from signing into apps hosted in Azure Government tenants using the public endpoint (microsoftonline.com). Impacted apps will begin seeing an error AADSTS900439 - USGClientNotSupportedOnPublicEndpoint.
There will be a gradual rollout of this change with enforcement expected to be complete across all apps June 2020. For more details, please see the [Azure Government blog post](https://devblogs.microsoft.com/azuregov/azure-government-aad-authority-endpoint-update/).
There will be a gradual rollout of this change with enforcement expected to be c
**Service category:** Authentications (Logins) **Product capability:** User Authentication
-When a user clicks on sign-out (e.g., in the MyApps portal), Azure AD sends a SAML Single Logout message to each app that is active in the user session and has a Logout URL configured. These messages contain a NameID in a persistent format.
+When a user clicks on sign-out (for example, in the MyApps portal), Azure AD sends a SAML Single Logout message to each app that is active in the user session and has a Logout URL configured. These messages contain a NameID in a persistent format.
-If the original SAML sign-in token used a different format for NameID (e.g. email/UPN), then the SAML app cannot correlate the NameID in the logout message to an existing session (as the NameIDs used in both messages are different), which caused the logout message to be discarded by the SAML app and the user to stay logged in. This fix makes the sign-out message consistent with the NameID configured for the application.
+If the original SAML sign-in token used a different format for NameID (for example, email/UPN), then the SAML app cannot correlate the NameID in the logout message to an existing session (as the NameIDs used in both messages are different), which caused the logout message to be discarded by the SAML app and the user to stay logged in. This fix makes the sign-out message consistent with the NameID configured for the application.
If the original SAML sign-in token used a different format for NameID (e.g. emai
**Service category:** Azure AD Cloud Provisioning **Product capability:** Identity Lifecycle Management
-IT Admins can start using the new "Hybrid Admin" role as the least privileged role for setting up Azure AD Connect Cloud Provisioning. With this new role, you no longer have to use the Global Admin role to setup and configure Cloud Provisioning. [Learn more](../roles/delegate-by-task.md#connect).
+IT Admins can start using the new "Hybrid Admin" role as the least privileged role for setting up Azure AD Connect Cloud Provisioning. With this new role, you no longer have to use the Global Admin role to set up and configure Cloud Provisioning. [Learn more](../roles/delegate-by-task.md#connect).
IT Admins can start using the new "Hybrid Admin" role as the least privileged ro
**Service category:** Enterprise Apps **Product capability:** 3rd Party Integration
-In May 2020, we have added the following 36 new applications in our App gallery with Federation support:
+In May 2020, we've added the following 36 new applications in our App gallery with Federation support:
[Moula](https://moula.com.au/pay/merchants), [Surveypal](https://www.surveypal.com/app), [Kbot365](https://www.konverso.ai/), [TackleBox](https://tacklebox.in/), [Powell Teams](https://powell-software.com/en/powell-teams-en/), [Talentsoft Assistant](https://msteams.talent-soft.com/), [ASC Recording Insights](https://teams.asc-recording.app/product), [GO1](https://www.go1.com/), [B-Engaged](https://b-engaged.se/), [Competella Contact Center Workgroup](http://www.competella.com/), [Asite](http://www.asite.com/), [ImageSoft Identity](https://identity.imagesoftinc.com/), [My IBISWorld](https://identity.imagesoftinc.com/), [insuite](../saas-apps/insuite-tutorial.md), [Change Process Management](../saas-apps/change-process-management-tutorial.md), [Cyara CX Assurance Platform](../saas-apps/cyara-cx-assurance-platform-tutorial.md), [Smart Global Governance](../saas-apps/smart-global-governance-tutorial.md), [Prezi](../saas-apps/prezi-tutorial.md), [Mapbox](../saas-apps/mapbox-tutorial.md), [Datava Enterprise Service Platform](../saas-apps/datava-enterprise-service-platform-tutorial.md), [Whimsical](../saas-apps/whimsical-tutorial.md), [Trelica](../saas-apps/trelica-tutorial.md), [EasySSO for Confluence](../saas-apps/easysso-for-confluence-tutorial.md), [EasySSO for BitBucket](../saas-apps/easysso-for-bitbucket-tutorial.md), [EasySSO for Bamboo](../saas-apps/easysso-for-bamboo-tutorial.md), [Torii](../saas-apps/torii-tutorial.md), [Axiad Cloud](../saas-apps/axiad-cloud-tutorial.md), [Humanage](../saas-apps/humanage-tutorial.md), [ColorTokens ZTNA](../saas-apps/colortokens-ztna-tutorial.md), [CCH Tagetik](../saas-apps/cch-tagetik-tutorial.md), [ShareVault](../saas-apps/sharevault-tutorial.md), [Vyond](../saas-apps/vyond-tutorial.md), [TextExpander](../saas-apps/textexpander-tutorial.md), [Anyone Home CRM](../saas-apps/anyone-home-crm-tutorial.md), [askSpoke](../saas-apps/askspoke-tutorial.md), [ice Contact Center](../saas-apps/ice-contact-center-tutorial.md)
For listing your application in the Azure AD app gallery, please read the detail
**Service category:** Conditional Access **Product capability:** Identity Security & Protection
-[Report-only mode for Azure AD Conditional Access](../conditional-access/concept-conditional-access-report-only.md) lets you evaluate the result of a policy without enforcing access controls. You can test report-only policies across your organization and understand their effect before enabling them, making deployment safer and easier. Over the past few months, weΓÇÖve seen strong adoption of report-only modeΓÇöover 26M users are already in scope of a report-only policy. With the announcement today, new Azure AD Conditional Access policies will be created in report-only mode by default. This means you can monitor the effect of your policies from the moment theyΓÇÖre created. And for those of you who use the MS Graph APIs, you can [manage report-only policies programmatically](/graph/api/resources/conditionalaccesspolicy) as well.
+[Report-only mode for Azure AD Conditional Access](../conditional-access/concept-conditional-access-report-only.md) lets you evaluate the result of a policy without enforcing access controls. You can test report-only policies across your organization and understand their impact before enabling them, making deployment safer and easier. Over the past few months, weΓÇÖve seen strong adoption of report-only modeΓÇöover 26M users are already in scope of a report-only policy. With the announcement today, new Azure AD Conditional Access policies will be created in report-only mode by default. This means you can monitor the impact of your policies from the moment theyΓÇÖre created. And for those of you who use the MS Graph APIs, you can [manage report-only policies programmatically](/graph/api/resources/conditionalaccesspolicy) as well.
The new [policy details blade](../conditional-access/troubleshoot-conditional-ac
New capabilities are being introduced for Microsoft Graph Directory Objects APIs, enabling Count, Search, Filter, and Sort operations. This will give developers the ability to quickly query our Directory Objects without workarounds such as in-memory filtering and sorting. Find out more in this [blog post](https://aka.ms/CountFilterMSGraphAAD).
-We are currently in Public Preview, looking for feedback. Please send your comments with this [brief survey](https://aka.ms/MsGraphAADSurveyDocs).
+We're currently in Public Preview, looking for feedback. Please send your comments with this [brief survey](https://aka.ms/MsGraphAADSurveyDocs).
Because of modern browser [3rd party cookie restrictions such as Safari ITP](../
**Service category:** Device Management **Product capability:** Device Lifecycle Management
-Previously, the only filters you could use were "Enabled" and "Activity date." Now, you can [filter your list of devices on more properties](../devices/device-management-azure-portal.md), including OS type, join type, compliance, and more. These additions should simplify locating a particular device.
+Previously, the only filters you could use were "Enabled" and "Activity date." Now, you can [filter your list of devices on more properties](../devices/device-management-azure-portal.md#view-and-filter-your-devices-preview), including OS type, join type, compliance, and more. These additions should simplify locating a particular device.
The combined registration experience for Multi-Factor Authentication (MFA) and S
**Product capability:** Identity Security & Protection
-Continuous Access Evaluation is a new security feature that enables near real-time enforcement of policies on relying parties consuming Azure AD Access Tokens when events happen in Azure AD (such as user account deletion). We are rolling this feature out first for Teams and Outlook clients. For more details, please read our [blog](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/moving-towards-real-time-policy-and-security-enforcement/ba-p/1276933) and [documentation](../conditional-access/concept-continuous-access-evaluation.md).
+Continuous Access Evaluation is a new security feature that enables near real-time enforcement of policies on relying parties consuming Azure AD Access Tokens when events happen in Azure AD (such as user account deletion). We're rolling this feature out first for Teams and Outlook clients. For more details, please read our [blog](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/moving-towards-real-time-policy-and-security-enforcement/ba-p/1276933) and [documentation](../conditional-access/concept-continuous-access-evaluation.md).
We're expanding B2B invitation capability to allow existing internal accounts to
**Product capability:** Identity Security & Protection
-[Report-only mode for Azure AD Conditional Access](../conditional-access/concept-conditional-access-report-only.md) lets you evaluate the result of a policy without enforcing access controls. You can test report-only policies across your organization and understand their effect before enabling them, making deployment safer and easier. Over the past few months, weΓÇÖve seen strong adoption of report-only mode, with over 26M users already in scope of a report-only policy. With this announcement, new Azure AD Conditional Access policies will be created in report-only mode by default. This means you can monitor the effect of your policies from the moment theyΓÇÖre created. And for those of you who use the MS Graph APIs, you can also [manage report-only policies programmatically](/graph/api/resources/conditionalaccesspolicy).
+[Report-only mode for Azure AD Conditional Access](../conditional-access/concept-conditional-access-report-only.md) lets you evaluate the result of a policy without enforcing access controls. You can test report-only policies across your organization and understand their impact before enabling them, making deployment safer and easier. Over the past few months, weΓÇÖve seen strong adoption of report-only mode, with over 26M users already in scope of a report-only policy. With this announcement, new Azure AD Conditional Access policies will be created in report-only mode by default. This means you can monitor the impact of your policies from the moment theyΓÇÖre created. And for those of you who use the MS Graph APIs, you can also [manage report-only policies programmatically](/graph/api/resources/conditionalaccesspolicy).
For more information, see [Administrative units management in Azure Active Direc
**Printer Administrator**: Users with this role can register printers and manage all aspects of all printer configurations in the Microsoft Universal Print solution, including the Universal Print Connector settings. They can consent to all delegated print permission requests. Printer Administrators also have access to print reports.
-**Printer Technician**: Users with this role can register printers and manage printer status in the Microsoft Universal Print solution. They can also read all connector information. Key tasks a Printer Technician cannot do are set user permissions on printers and sharing printers. [Learn more.](../roles/permissions-reference.md#printer-administrator)
+**Printer Technician**: Users with this role can register printers and manage printer status in the Microsoft Universal Print solution. They can also read all connector information. Key tasks a Printer Technician can't do are set user permissions on printers and sharing printers. [Learn more.](../roles/permissions-reference.md#printer-administrator)
For more information, see [Administrative units management in Azure Active Direc
**Product capability:** Access Control
-Users in this role can enable, configure and manage services and settings related to enabling hybrid identity in Azure AD. This role grants the ability to configure Azure AD to one of the three supported authentication methods&#8212;Password hash synchronization (PHS), Pass-through authentication (PTA) or Federation (AD FS or 3rd party federation provider)&#8212;and to deploy related on-premises infrastructure to enable them. On-premises infrastructure includes Provisioning and PTA agents. This role grants the ability to enable Seamless single sign-on (S-SSO) to enable seamless authentication on non-Windows 10 devices or non-Windows Server 2016 computers. In addition, this role grants the ability to see sign-in logs and to access health and analytics for monitoring and troubleshooting purposes. [Learn more.](../roles/permissions-reference.md#hybrid-identity-administrator)
+Users in this role can enable, configure and manage services and settings related to enabling hybrid identity in Azure AD. This role grants the ability to configure Azure AD to one of the three supported authentication methods&#8212;Password hash synchronization (PHS), Pass-through authentication (PTA) or Federation (AD FS or 3rd party federation provider)&#8212;and to deploy related on-premises infrastructure to enable them. On-premises infrastructure includes Provisioning and PTA agents. This role grants the ability to enable Seamless Single Sign-On (S-SSO) to enable seamless authentication on non-Windows 10 devices or non-Windows Server 2016 computers. In addition, this role grants the ability to see sign-in logs and to access health and analytics for monitoring and troubleshooting purposes. [Learn more.](../roles/permissions-reference.md#hybrid-identity-administrator)
For more information, check out the following:
**Product capability:**
-My Staff enables Firstline Managers, such as a store manager, to ensure that their staff members are able to access their Azure AD accounts. Instead of relying on a central helpdesk, organizations can delegate common tasks, such as resetting passwords or changing phone numbers, to a Firstline Manager. With My Staff, a user who canΓÇÖt access their account can re-gain access in just a couple of clicks, with no helpdesk or IT staff required. For more information, see the [Manage your users with My Staff (preview)](../roles/my-staff-configure.md) and [Delegate user management with My Staff (preview)](https://support.microsoft.com/account-billing/manage-front-line-users-with-my-staff-c65b9673-7e1c-4ad6-812b-1a31ce4460bd).
+My Staff enables Firstline Managers, such as a store manager, to ensure that their staff members are able to access their Azure AD accounts. Instead of relying on a central helpdesk, organizations can delegate common tasks, such as resetting passwords or changing phone numbers, to a Firstline Manager. With My Staff, a user who canΓÇÖt access their account can re-gain access in just a couple of selections, with no helpdesk or IT staff required. For more information, see the [Manage your users with My Staff (preview)](../roles/my-staff-configure.md) and [Delegate user management with My Staff (preview)](https://support.microsoft.com/account-billing/manage-front-line-users-with-my-staff-c65b9673-7e1c-4ad6-812b-1a31ce4460bd).
My Staff enables Firstline Managers, such as a store manager, to ensure that the
**Product capability:** Identity Governance
-We have updated the reviewer experience for Azure AD access reviews in the My Apps portal. At the end of April, your reviewers who are logged in to the Azure AD access reviews reviewer experience will see a banner that will allow them to try the updated experience in My Access. Please note that the updated Access reviews experience offers the same functionality as the current experience, but with an improved user interface on top of new capabilities to enable your users to be productive. [You can learn more about the updated experience here](../governance/perform-access-review.md). This public preview will last until the end of July 2020. At the end of July, reviewers who have not opted into the preview experience will be automatically directed to My Access to perform access reviews. If you wish to have your reviewers permanently switched over to the preview experience in My Access now, [please make a request here](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR5dv-S62099HtxdeKIcgO-NUOFJaRDFDWUpHRk8zQ1BWVU1MMTcyQ1FFUi4u).
+We have updated the reviewer experience for Azure AD access reviews in the My Apps portal. At the end of April, your reviewers who are logged in to the Azure AD access reviews reviewer experience will see a banner that will allow them to try the updated experience in My Access. Note that the updated Access reviews experience offers the same functionality as the current experience, but with an improved user interface on top of new capabilities to enable your users to be productive. [You can learn more about the updated experience here](../governance/perform-access-review.md). This public preview will last until the end of July 2020. At the end of July, reviewers who haven't opted into the preview experience will be automatically directed to My Access to perform access reviews. If you wish to have your reviewers permanently switched over to the preview experience in My Access now, [please make a request here](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR5dv-S62099HtxdeKIcgO-NUOFJaRDFDWUpHRk8zQ1BWVU1MMTcyQ1FFUi4u).
We have updated the reviewer experience for Azure AD access reviews in the My Ap
**Product capability:**
-Based on customer feedback, we have now updated the Workday inbound user provisioning and writeback apps in the enterprise app gallery to support the latest versions of the Workday Web Services (WWS) API. With this change, customers can specify the WWS API version that they would like to use in the connection string. This gives customers the ability to retrieve more HR attributes available in the releases of Workday. The Workday Writeback app now uses the recommended Change_Work_Contact_Info Workday web service to overcome the limitations of Maintain_Contact_Info.
+Based on customer feedback, we've now updated the Workday inbound user provisioning and writeback apps in the enterprise app gallery to support the latest versions of the Workday Web Services (WWS) API. With this change, customers can specify the WWS API version that they would like to use in the connection string. This gives customers the ability to retrieve more HR attributes available in the releases of Workday. The Workday Writeback app now uses the recommended Change_Work_Contact_Info Workday web service to overcome the limitations of Maintain_Contact_Info.
If no version is specified in the connection string, by default, the Workday inbound provisioning apps will continue to use WWS v21.1 To switch to the latest Workday APIs for inbound user provisioning, customers need to update the connection string as documented [in the tutorial](../saas-apps/workday-inbound-tutorial.md#which-workday-apis-does-the-solution-use-to-query-and-update-workday-worker-profiles) and also update the XPATHs used for Workday attributes as documented in the [Workday attribute reference guide](../app-provisioning/workday-attribute-reference.md#xpath-values-for-workday-web-services-wws-api-v30).
We have updated our [tutorial guide](../saas-apps/workday-inbound-tutorial.md) t
**Product capability:** Identity Lifecycle Management
-Historically, users with the default access role have been out of scope for provisioning. We've heard feedback that customers want users with this role to be in scope for provisioning. As of April 16, 2020, all new provisioning configurations allow users with the default access role to be provisioned. Gradually we will change the behavior for existing provisioning configurations to support provisioning users with this role. [Learn more.](../app-provisioning/application-provisioning-config-problem-no-users-provisioned.md)
+Historically, users with the default access role have been out of scope for provisioning. We've heard feedback that customers want users with this role to be in scope for provisioning. As of April 16, 2020, all new provisioning configurations allow users with the default access role to be provisioned. Gradually we'll change the behavior for existing provisioning configurations to support provisioning users with this role. [Learn more.](../app-provisioning/application-provisioning-config-problem-no-users-provisioned.md)
The [emails](../external-identities/invitation-email-elements.md) that are sent
**Service category:** Audit **Product capability:** Monitoring & Reporting
-We fixed a bug where changes to the [HomeRealmDiscovery policy](../manage-apps/configure-authentication-for-federated-users-portal.md) were not included in the audit logs. You will now be able to see when and how the policy was changed, and by whom.
+We fixed a bug where changes to the [HomeRealmDiscovery policy](../manage-apps/configure-authentication-for-federated-users-portal.md) weren't included in the audit logs. You'll now be able to see when and how the policy was changed, and by whom.
Azure Monitor integration with Azure AD logs is now available in Azure Governmen
**Service category:** Identity Protection **Product capability:** Identity Security & Protection
-We’re excited to share that we have now rolled out the refreshed [Azure AD Identity Protection](../identity-protection/overview-identity-protection.md) experience in the [Microsoft Azure Government portal](https://portal.azure.us/). For more information, see our [announcement blog post](https://techcommunity.microsoft.com/t5/public-sector-blog/identity-protection-refresh-in-microsoft-azure-government/ba-p/1223667).
+We’re excited to share that we've now rolled out the refreshed [Azure AD Identity Protection](../identity-protection/overview-identity-protection.md) experience in the [Microsoft Azure Government portal](https://portal.azure.us/). For more information, see our [announcement blog post](https://techcommunity.microsoft.com/t5/public-sector-blog/identity-protection-refresh-in-microsoft-azure-government/ba-p/1223667).
To provide a more flexible way for customers to create directory-wide groups tha
We're planning to replace the current custom controls preview with an approach that allows partner-provided authentication capabilities to work seamlessly with the Azure Active Directory administrator and end user experiences. Today, partner multifactor authentication (MFA) solutions face the following limitations: they work only after a password has been entered; they don't serve as multifactor authentication (MFA) for step-up authentication in other key scenarios; and they don't integrate with end user or administrative credential management functions. The new implementation will allow partner-provided authentication factors to work alongside built-in factors for key scenarios, including registration, usage, multifactor authentication (MFA) claims, step up authentication, reporting, and logging.
-Custom controls will continue to be supported in preview alongside the new design until it reaches general availability. At that point, we'll give customers time to migrate to the new design. Because of the limitations of the current approach, we won't onboard new providers until the new design is available. We are working closely with customers and providers and will communicate the timeline as we get closer. [Learn more](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/upcoming-changes-to-custom-controls/ba-p/1144696#).
+Custom controls will continue to be supported in preview alongside the new design until it reaches general availability. At that point, we'll give customers time to migrate to the new design. Because of the limitations of the current approach, we won't onboard new providers until the new design is available. We're working closely with customers and providers and will communicate the timeline as we get closer. [Learn more](https://techcommunity.microsoft.com/t5/azure-active-directory-identity/upcoming-changes-to-custom-controls/ba-p/1144696#).
These new improvement actions will require registering your users or admins for
We've heard feedback that Azure AD Domain Services customers want more flexibility in selecting performance levels for their instances. Starting on February 1, 2020, we switched from a dynamic model (where Azure AD determines the performance and pricing tier based on object count) to a self-selection model. Now customers can choose a performance tier that matches their environment. This change also allows us to enable new scenarios like Resource Forests, and Premium features like daily backups. The object count is now unlimited for all SKUs, but we'll continue to offer object count suggestions for each tier.
-**No immediate customer action is required.** For existing customers, the dynamic tier that was in use on February 1, 2020, determines the new default tier. There is no pricing or performance impact as the result of this change. Going forward, Azure AD DS customers will need to evaluate performance requirements as their directory size and workload characteristics change. Switching between service tiers will continue to be a no-downtime operation, and we will no longer automatically move customers to new tiers based on the growth of their directory. Furthermore, there will be no price increases, and new pricing will align with our current billing model. For more information, see the [Azure AD DS SKUs documentation](../../active-directory-domain-services/administration-concepts.md#azure-ad-ds-skus) and the [Azure AD Domain Services pricing page](https://azure.microsoft.com/pricing/details/active-directory-ds/).
+**No immediate customer action is required.** For existing customers, the dynamic tier that was in use on February 1, 2020, determines the new default tier. There is no pricing or performance impact as the result of this change. Going forward, Azure AD DS customers will need to evaluate performance requirements as their directory size and workload characteristics change. Switching between service tiers will continue to be a no-downtime operation, and we'll no longer automatically move customers to new tiers based on the growth of their directory. Furthermore, there will be no price increases, and new pricing will align with our current billing model. For more information, see the [Azure AD DS SKUs documentation](../../active-directory-domain-services/administration-concepts.md#azure-ad-ds-skus) and the [Azure AD Domain Services pricing page](https://azure.microsoft.com/pricing/details/active-directory-ds/).
For more information, see [Add Google as an identity provider for B2B guest user
-### Microsoft Edge Mobile Support for Conditional Access and single sign-on (General Availability)
+### Microsoft Edge Mobile Support for Conditional Access and Single Sign-on (General Availability)
**Type:** New feature **Service category:** Conditional Access **Product capability:** Identity Security & Protection
-Azure AD for Microsoft Edge on iOS and Android now supports Azure AD single sign-on and Conditional Access:
+Azure AD for Microsoft Edge on iOS and Android now supports Azure AD Single Sign-On and Conditional Access:
- **Microsoft Edge single sign-on (SSO):** Single sign-on is now available across native clients (such as Microsoft Outlook and Microsoft Edge) for all Azure AD -connected apps. - **Microsoft Edge conditional access:** Through application-based conditional access policies, your users must use Microsoft Intune-protected browsers, such as Microsoft Edge.
-For more information about conditional access and SSO with Microsoft Edge, see the [Microsoft Edge Mobile Support for Conditional Access and single sign-on Now Generally Available](https://techcommunity.microsoft.com/t5/Intune-Customer-Success/Microsoft-Edge-Mobile-Support-for-Conditional-Access-and-Single/ba-p/988179) blog post. For more information about how to set up your client apps using [app-based conditional access](../conditional-access/app-based-conditional-access.md) or [device-based conditional access](../conditional-access/require-managed-devices.md), see [Manage web access using a Microsoft Intune policy-protected browser](/intune/apps/app-configuration-managed-browser).
+For more information about conditional access and SSO with Microsoft Edge, see the [Microsoft Edge Mobile Support for Conditional Access and Single Sign-on Now Generally Available](https://techcommunity.microsoft.com/t5/Intune-Customer-Success/Microsoft-Edge-Mobile-Support-for-Conditional-Access-and-Single/ba-p/988179) blog post. For more information about how to set up your client apps using [app-based conditional access](../conditional-access/app-based-conditional-access.md) or [device-based conditional access](../conditional-access/require-managed-devices.md), see [Manage web access using a Microsoft Intune policy-protected browser](/intune/apps/app-configuration-managed-browser).
For detailed information about these new capabilities, including how to use them
-### New My sign-ins page for end users in Azure AD
+### New My Sign-ins page for end users in Azure AD
**Type:** New feature **Service category:** Authentications (Logins) **Product capability:** Monitoring & Reporting
-We've added a new **My sign-ins** page (https://mysignins.microsoft.com) to let your organization's users view their recent sign-in history to check for any unusual activity. This new page allows your users to see:
+We've added a new **My Sign-ins** page (https://mysignins.microsoft.com) to let your organization's users view their recent sign-in history to check for any unusual activity. This new page allows your users to see:
- If anyone is attempting to guess their password.
For more information about how to use this new endpoint, see [Using the admin co
In September 2019, we've added these 29 new apps with Federation support to the app gallery:
-[ScheduleLook](https://schedulelook.bbsonlineservices.net/), [MS Azure SSO Access for Ethidex Compliance Office&trade; - single sign-on](../saas-apps/ms-azure-sso-access-for-ethidex-compliance-office-tutorial.md), [iServer Portal](../saas-apps/iserver-portal-tutorial.md), [SKYSITE](../saas-apps/skysite-tutorial.md), [Concur Travel and Expense](../saas-apps/concur-travel-and-expense-tutorial.md), [WorkBoard](../saas-apps/workboard-tutorial.md), `https://apps.yeeflow.com/`, [ARC Facilities](../saas-apps/arc-facilities-tutorial.md), [Luware Stratus Team](https://stratus.emea.luware.cloud/login), [Wide Ideas](https://wideideas.online/wideideas/), [Prisma Cloud](../saas-apps/prisma-cloud-tutorial.md), [JDLT Client Hub](https://clients.jdlt.co.uk/login), [RENRAKU](../saas-apps/renraku-tutorial.md), [SealPath Secure Browser](https://protection.sealpath.com/SealPathInterceptorWopiSaas/Open/InstallSealPathEditorOneDrive), [Prisma Cloud](../saas-apps/prisma-cloud-tutorial.md), `https://app.penneo.com/`, `https://app.testhtm.com/settings/email-integration`, [Cintoo Cloud](https://aec.cintoo.com/login), [Whitesource](../saas-apps/whitesource-tutorial.md), [Hosted Heritage Online SSO](../saas-apps/hosted-heritage-online-sso-tutorial.md), [IDC](../saas-apps/idc-tutorial.md), [CakeHR](../saas-apps/cakehr-tutorial.md), [BIS](../saas-apps/bis-tutorial.md), [Coo Kai Team Build](https://ms-contacts.coo-kai.jp/), [Sonarqube](../saas-apps/sonarqube-tutorial.md), [Adobe Identity Management](../saas-apps/tutorial-list.md), [Discovery Benefits SSO](../saas-apps/discovery-benefits-sso-tutorial.md), [Amelio](https://app.amelio.co/), `https://itask.yipinapp.com/`
+[ScheduleLook](https://schedulelook.bbsonlineservices.net/), [MS Azure SSO Access for Ethidex Compliance Office&trade; - Single sign-on](../saas-apps/ms-azure-sso-access-for-ethidex-compliance-office-tutorial.md), [iServer Portal](../saas-apps/iserver-portal-tutorial.md), [SKYSITE](../saas-apps/skysite-tutorial.md), [Concur Travel and Expense](../saas-apps/concur-travel-and-expense-tutorial.md), [WorkBoard](../saas-apps/workboard-tutorial.md), `https://apps.yeeflow.com/`, [ARC Facilities](../saas-apps/arc-facilities-tutorial.md), [Luware Stratus Team](https://stratus.emea.luware.cloud/login), [Wide Ideas](https://wideideas.online/wideideas/), [Prisma Cloud](../saas-apps/prisma-cloud-tutorial.md), [JDLT Client Hub](https://clients.jdlt.co.uk/login), [RENRAKU](../saas-apps/renraku-tutorial.md), [SealPath Secure Browser](https://protection.sealpath.com/SealPathInterceptorWopiSaas/Open/InstallSealPathEditorOneDrive), [Prisma Cloud](../saas-apps/prisma-cloud-tutorial.md), `https://app.penneo.com/`, `https://app.testhtm.com/settings/email-integration`, [Cintoo Cloud](https://aec.cintoo.com/login), [Whitesource](../saas-apps/whitesource-tutorial.md), [Hosted Heritage Online SSO](../saas-apps/hosted-heritage-online-sso-tutorial.md), [IDC](../saas-apps/idc-tutorial.md), [CakeHR](../saas-apps/cakehr-tutorial.md), [BIS](../saas-apps/bis-tutorial.md), [Coo Kai Team Build](https://ms-contacts.coo-kai.jp/), [Sonarqube](../saas-apps/sonarqube-tutorial.md), [Adobe Identity Management](../saas-apps/tutorial-list.md), [Discovery Benefits SSO](../saas-apps/discovery-benefits-sso-tutorial.md), [Amelio](https://app.amelio.co/), `https://itask.yipinapp.com/`
For more information about the apps, see [SaaS application integration with Azure Active Directory](../saas-apps/tutorial-list.md). For more information about listing your application in the Azure AD app gallery, see [List your application in the Azure Active Directory application gallery](../manage-apps/v2-howto-app-gallery-listing.md).
Starting on September 24, 2019, we're going to start rolling out a new Azure Act
The Global Reader role is the read-only counterpart to Global Administrator. Users in this role can read settings and administrative information across Microsoft 365 services, but can't take management actions. We've created the Global Reader role to help reduce the number of Global Administrators in your organization. Because Global Administrator accounts are powerful and vulnerable to attack, we recommend that you have fewer than five Global Administrators. We recommend using the Global Reader role for planning, audits, or investigations. We also recommend using the Global Reader role in combination with other limited administrator roles, like Exchange Administrator, to help get work done without requiring the Global Administrator role.
-The Global Reader role works with the new Microsoft 365 Admin Center, Exchange Admin Center, Teams Admin Center, Security Center, compliance portal, Azure AD Admin Center, and the Device Management Admin Center.
+The Global Reader role works with the new Microsoft 365 Admin Center, Exchange Admin Center, Teams Admin Center, Security Center, Compliance Center, Azure AD Admin Center, and the Device Management Admin Center.
>[!NOTE] > At the start of public preview, the Global Reader role won't work with: SharePoint, Privileged Access Management, Customer Lockbox, sensitivity labels, Teams Lifecycle, Teams Reporting & Call Analytics, Teams IP Phone Device Management, and Teams App Catalog.
For more information, see [Manage groups in the Azure portal](./active-directory
Custom roles (available with an Azure AD P1 or P2 subscription) can now help provide you with fine-grained access, by letting you create role definitions with specific permissions and then to assign those roles to specific resources. Currently, you create custom roles by using permissions for managing app registrations and then assigning the role to a specific app. For more information about custom roles, see [Custom administrator roles in Azure Active Directory (preview)](../roles/custom-overview.md).
-If you need additional permissions or resources supported, which you don't currently see, you can send feedback to our [Azure feedback site](https://feedback.azure.com/d365community/forum/22920db1-ad25-ec11-b6e6-000d3a4f0789) and we'll add your request to our update road map.
+If you need other permissions or resources supported, which you don't currently see, you can send feedback to our [Azure feedback site](https://feedback.azure.com/d365community/forum/22920db1-ad25-ec11-b6e6-000d3a4f0789) and we'll add your request to our update road map.
For more information, see [Provisioning reports in the Azure Active Directory po
**Service category:** Identity Protection **Product capability:** Identity Security & Protection
-By default, all Azure AD administrators will soon be able to access modern security reports within Azure AD. Until the end of September, you will be able to use the banner at the top of the modern security reports to return to the old reports.
+By default, all Azure AD administrators will soon be able to access modern security reports within Azure AD. Until the end of September, you'll be able to use the banner at the top of the modern security reports to return to the old reports.
-The modern security reports will provide additional capabilities from the older versions, including:
+The modern security reports will provide more capabilities from the older versions, including:
- Advanced filtering and sorting - Bulk actions, such as dismissing user risk
For more information, see [What's new for authentication?](../develop/reference-
**Service category:** Authentications (Logins) **Product capability:** User Authentication
-Azure AD customers can now set policies to manage FIDO2 security keys for their organization's users and groups. End users can also self-register their security keys, use the keys to sign in to their Microsoft accounts on web sites while on FIDO-capable devices, as well as sign-in to their Azure AD-joined Windows 10 devices.
+Azure AD customers can now set policies to manage FIDO2 security keys for their organization's users and groups. End users can also self-register their security keys, use the keys to sign in to their Microsoft accounts on web sites while on FIDO-capable devices, and sign-in to their Azure AD-joined Windows 10 devices.
For more information, see [Enable passwordless sign in for Azure AD (preview)](../authentication/concept-authentication-passwordless.md) for administrator-related information, and [Set up security info to use a security key (Preview)](https://support.microsoft.com/account-billing/set-up-a-security-key-as-your-verification-method-2911cacd-efa5-4593-ae22-e09ae14c6698) for end-user-related information.
Currently, the app registration screens of the Azure portal still block query pa
**Service category:** Reporting **Product capability:** Monitoring & Reporting
-We're excited to announce that Azure AD activity logs (Audit and sign-ins reports) are now available through the Azure AD PowerShell module. Previously, you could create your own scripts using MS Graph API endpoints, and now we've extended that capability to PowerShell cmdlets.
+We're excited to announce that Azure AD activity logs (Audit and Sign-ins reports) are now available through the Azure AD PowerShell module. Previously, you could create your own scripts using MS Graph API endpoints, and now we've extended that capability to PowerShell cmdlets.
For more information about how to use these cmdlets, see [Azure AD PowerShell cmdlets for reporting](../reports-monitoring/reference-powershell-reporting.md).
You can configure naming policy for Office 365 groups in two different ways:
- Define prefixes or suffixes, which are automatically added to a group name. -- Upload a customized set of blocked words for your organization, which are not allowed in group names (for example, "CEO, Payroll, HR").
+- Upload a customized set of blocked words for your organization, which aren't allowed in group names (for example, "CEO, Payroll, HR").
For more information, see [Enforce a Naming Policy for Office 365 groups](../enterprise-users/groups-naming-policy.md).
For more information, see [Enforce a Naming Policy for Office 365 groups](../ent
To help address your feedback about visualizations with the Azure AD Activity logs, we're introducing a new Insights feature in Log Analytics. This feature helps you gain insights about your Azure AD resources by using our interactive templates, called Workbooks. These pre-built Workbooks can provide details for apps or users, and include: -- **sign-ins.** Provides details for apps and users, including sign-in location, the in-use operating system or browser client and version, and the number of successful or failed sign-ins.
+- **Sign-ins.** Provides details for apps and users, including sign-in location, the in-use operating system or browser client and version, and the number of successful or failed sign-ins.
- **Legacy authentication and Conditional Access.** Provides details for apps and users using legacy authentication, including multifactor authentication usage triggered by Conditional Access policies, apps using Conditional Access policies, and so on.
For more information, see [How to use Azure Monitor workbooks for Azure Active D
In April 2019, we've added these 21 new apps with Federation support to the app gallery:
-[SAP Fiori](../saas-apps/sap-fiori-tutorial.md), [HRworks single sign-on](../saas-apps/hrworks-single-sign-on-tutorial.md), [Percolate](../saas-apps/percolate-tutorial.md), [MobiControl](../saas-apps/mobicontrol-tutorial.md), [Citrix NetScaler](../saas-apps/citrix-netscaler-tutorial.md), [Shibumi](../saas-apps/shibumi-tutorial.md), [Benchling](../saas-apps/benchling-tutorial.md), [MileIQ](https://mileiq.onelink.me/991934284/7e980085), [PageDNA](../saas-apps/pagedna-tutorial.md), [EduBrite LMS](../saas-apps/edubrite-lms-tutorial.md), [RStudio Connect](../saas-apps/rstudio-connect-tutorial.md), [AMMS](../saas-apps/amms-tutorial.md), [Mitel Connect](../saas-apps/mitel-connect-tutorial.md), [Alibaba Cloud (Role-based SSO)](../saas-apps/alibaba-cloud-service-role-based-sso-tutorial.md), [Certent Equity Management](../saas-apps/certent-equity-management-tutorial.md), [Sectigo Certificate Manager](../saas-apps/sectigo-certificate-manager-tutorial.md), [GreenOrbit](../saas-apps/greenorbit-tutorial.md), [Workgrid](../saas-apps/workgrid-tutorial.md), [monday.com](../saas-apps/mondaycom-tutorial.md), [SurveyMonkey Enterprise](../saas-apps/surveymonkey-enterprise-tutorial.md), [Indiggo](https://indiggolead.com/)
+[SAP Fiori](../saas-apps/sap-fiori-tutorial.md), [HRworks Single Sign-On](../saas-apps/hrworks-single-sign-on-tutorial.md), [Percolate](../saas-apps/percolate-tutorial.md), [MobiControl](../saas-apps/mobicontrol-tutorial.md), [Citrix NetScaler](../saas-apps/citrix-netscaler-tutorial.md), [Shibumi](../saas-apps/shibumi-tutorial.md), [Benchling](../saas-apps/benchling-tutorial.md), [MileIQ](https://mileiq.onelink.me/991934284/7e980085), [PageDNA](../saas-apps/pagedna-tutorial.md), [EduBrite LMS](../saas-apps/edubrite-lms-tutorial.md), [RStudio Connect](../saas-apps/rstudio-connect-tutorial.md), [AMMS](../saas-apps/amms-tutorial.md), [Mitel Connect](../saas-apps/mitel-connect-tutorial.md), [Alibaba Cloud (Role-based SSO)](../saas-apps/alibaba-cloud-service-role-based-sso-tutorial.md), [Certent Equity Management](../saas-apps/certent-equity-management-tutorial.md), [Sectigo Certificate Manager](../saas-apps/sectigo-certificate-manager-tutorial.md), [GreenOrbit](../saas-apps/greenorbit-tutorial.md), [Workgrid](../saas-apps/workgrid-tutorial.md), [monday.com](../saas-apps/mondaycom-tutorial.md), [SurveyMonkey Enterprise](../saas-apps/surveymonkey-enterprise-tutorial.md), [Indiggo](https://indiggolead.com/)
For more information about the apps, see [SaaS application integration with Azure Active Directory](../saas-apps/tutorial-list.md). For more information about listing your application in the Azure AD app gallery, see [List your application in the Azure Active Directory application gallery](../manage-apps/v2-howto-app-gallery-listing.md).
For more information about the new cookies, see [Cookie settings for accessing o
In January 2019, we've added these 35 new apps with Federation support to the app gallery:
-[Firstbird](../saas-apps/firstbird-tutorial.md), [Folloze](../saas-apps/folloze-tutorial.md), [Talent Palette](../saas-apps/talent-palette-tutorial.md), [Infor CloudSuite](../saas-apps/infor-cloud-suite-tutorial.md), [Cisco Umbrella](../saas-apps/cisco-umbrella-tutorial.md), [Zscaler Internet Access Administrator](../saas-apps/zscaler-internet-access-administrator-tutorial.md), [Expiration Reminder](../saas-apps/expiration-reminder-tutorial.md), [InstaVR Viewer](../saas-apps/instavr-viewer-tutorial.md), [CorpTax](../saas-apps/corptax-tutorial.md), [Verb](https://app.verb.net/login), [OpenLattice](https://openlattice.com/#/), [TheOrgWiki](https://www.theorgwiki.com/signup), [Pavaso Digital Close](../saas-apps/pavaso-digital-close-tutorial.md), [GoodPractice Toolkit](../saas-apps/goodpractice-toolkit-tutorial.md), [Cloud Service PICCO](../saas-apps/cloud-service-picco-tutorial.md), [AuditBoard](../saas-apps/auditboard-tutorial.md), [Zeyna](../saas-apps/zenya-tutorial.md), [Workable](../saas-apps/workable-tutorial.md), [CallPlease](https://webapp.callplease.com/create-account/create-account.html), [GTNexus SSO System](../saas-apps/gtnexus-sso-module-tutorial.md), [CBRE ServiceInsight](../saas-apps/cbre-serviceinsight-tutorial.md), [Deskradar](../saas-apps/deskradar-tutorial.md), [Coralogixv](../saas-apps/coralogix-tutorial.md), [Signagelive](../saas-apps/signagelive-tutorial.md), [ARES for Enterprise](../saas-apps/ares-for-enterprise-tutorial.md), [K2 for Office 365](https://www.k2.com/O365), [Xledger](https://www.xledger.net/), [IDID Manager](../saas-apps/idid-manager-tutorial.md), [HighGear](../saas-apps/highgear-tutorial.md), [Visitly](../saas-apps/visitly-tutorial.md), [Korn Ferry ALP](../saas-apps/korn-ferry-alp-tutorial.md), [Acadia](../saas-apps/acadia-tutorial.md), [Adoddle cSaas Platform](../saas-apps/adoddle-csaas-platform-tutorial.md)
+[Firstbird](../saas-apps/firstbird-tutorial.md), [Folloze](../saas-apps/folloze-tutorial.md), [Talent Palette](../saas-apps/talent-palette-tutorial.md), [Infor CloudSuite](../saas-apps/infor-cloud-suite-tutorial.md), [Cisco Umbrella](../saas-apps/cisco-umbrella-tutorial.md), [Zscaler Internet Access Administrator](../saas-apps/zscaler-internet-access-administrator-tutorial.md), [Expiration Reminder](../saas-apps/expiration-reminder-tutorial.md), [InstaVR Viewer](../saas-apps/instavr-viewer-tutorial.md), [CorpTax](../saas-apps/corptax-tutorial.md), [Verb](https://app.verb.net/login), [OpenLattice](https://openlattice.com/#/), [TheOrgWiki](https://www.theorgwiki.com/signup), [Pavaso Digital Close](../saas-apps/pavaso-digital-close-tutorial.md), [GoodPractice Toolkit](../saas-apps/goodpractice-toolkit-tutorial.md), [Cloud Service PICCO](../saas-apps/cloud-service-picco-tutorial.md), [AuditBoard](../saas-apps/auditboard-tutorial.md), [iProva](../saas-apps/iprova-tutorial.md), [Workable](../saas-apps/workable-tutorial.md), [CallPlease](https://webapp.callplease.com/create-account/create-account.html), [GTNexus SSO System](../saas-apps/gtnexus-sso-module-tutorial.md), [CBRE ServiceInsight](../saas-apps/cbre-serviceinsight-tutorial.md), [Deskradar](../saas-apps/deskradar-tutorial.md), [Coralogixv](../saas-apps/coralogix-tutorial.md), [Signagelive](../saas-apps/signagelive-tutorial.md), [ARES for Enterprise](../saas-apps/ares-for-enterprise-tutorial.md), [K2 for Office 365](https://www.k2.com/O365), [Xledger](https://www.xledger.net/), [iDiD Manager](../saas-apps/idid-manager-tutorial.md), [HighGear](../saas-apps/highgear-tutorial.md), [Visitly](../saas-apps/visitly-tutorial.md), [Korn Ferry ALP](../saas-apps/korn-ferry-alp-tutorial.md), [Acadia](../saas-apps/acadia-tutorial.md), [Adoddle cSaas Platform](../saas-apps/adoddle-csaas-platform-tutorial.md)
For more information about the apps, see [SaaS application integration with Azure Active Directory](../saas-apps/tutorial-list.md). For more information about listing your application in the Azure AD app gallery, see [List your application in the Azure Active Directory application gallery](../manage-apps/v2-howto-app-gallery-listing.md).
For more information, see [Create a dynamic group and check status](../enterpris
-### Simplified single sign-on (SSO) configuration settings for some third-party apps
+### Simplified Single Sign-On (SSO) configuration settings for some third-party apps
**Type:** New feature **Service category:** Enterprise Apps **Product capability:** SSO
-We realize that setting up single sign-on (SSO) for Software as a Service (SaaS) apps can be challenging due to the unique nature of each apps configuration. We've built a simplified configuration experience to auto-populate the SSO configuration settings for the following third-party SaaS apps:
+We realize that setting up Single Sign-On (SSO) for Software as a Service (SaaS) apps can be challenging due to the unique nature of each apps configuration. We've built a simplified configuration experience to auto-populate the SSO configuration settings for the following third-party SaaS apps:
- Zendesk
For more information, see [What is the My Apps portal?](https://support.microsof
-### New Troubleshooting and Support tab on the sign-ins Logs page of the Azure portal
+### New Troubleshooting and Support tab on the Sign-ins Logs page of the Azure portal
**Type:** New feature **Service category:** Reporting **Product capability:** Monitoring & Reporting
-The new **Troubleshooting and Support** tab on the **sign-ins** page of the Azure portal, is intended to help admins and support engineers troubleshoot issues related to Azure AD sign-ins. This new tab provides the error code, error message, and remediation recommendations (if any) to help solve the problem. If you're unable to resolve the problem, we also give you a new way to create a support ticket using the **Copy to clipboard** experience, which populates the **Request ID** and **Date (UTC)** fields for the log file in your support ticket.
+The new **Troubleshooting and Support** tab on the **Sign-ins** page of the Azure portal, is intended to help admins and support engineers troubleshoot issues related to Azure AD sign-ins. This new tab provides the error code, error message, and remediation recommendations (if any) to help solve the problem. If you're unable to resolve the problem, we also give you a new way to create a support ticket using the **Copy to clipboard** experience, which populates the **Request ID** and **Date (UTC)** fields for the log file in your support ticket.
![Sign-in logs showing the new tab](media/whats-new/troubleshooting-and-support.png)
The new **Troubleshooting and Support** tab on the **sign-ins** page of the Azur
**Service category:** Group Management **Product capability:** Collaboration
-With this update, you can now click the **Get custom extension properties** link from the dynamic user group rule builder, enter your unique app ID, and receive the full list of custom extension properties to use when creating a dynamic membership rule for users. This list can also be refreshed to get any new custom extension properties for that app.
+With this update, you can now select the **Get custom extension properties** link from the dynamic user group rule builder, enter your unique app ID, and receive the full list of custom extension properties to use when creating a dynamic membership rule for users. This list can also be refreshed to get any new custom extension properties for that app.
For more information about using custom extension properties for dynamic membership rules, see [Extension properties and custom extension properties](../enterprise-users/groups-dynamic-membership.md#extension-properties-and-custom-extension-properties)
For more information about the apps, see [SaaS application integration with Azur
**Service category:** Enterprise Apps **Product capability:** SSO
-We've introduced new claim transformation methods, ToLower() and ToUpper(), which can be applied to SAML tokens from the SAML-based **single sign-on Configuration** page.
+We've introduced new claim transformation methods, ToLower() and ToUpper(), which can be applied to SAML tokens from the SAML-based **Single Sign-On Configuration** page.
For more information, see [How to customize claims issued in the SAML token for enterprise applications in Azure AD](../develop/active-directory-saml-claims-customization.md)
As part of our updated SAML-based app configuration UI, you'll get:
- A way to set the NameID Format for SAML apps, and a way to set the NameID value as Directory Extensions.
-To turn on this updated view, click the **Try out our new experience** link from the top of the **single sign-on** page. For more information, see [Tutorial: Configure SAML-based single sign-on for an application with Azure Active Directory](../manage-apps/view-applications-portal.md).
+To turn on this updated view, click the **Try out our new experience** link from the top of the **Single Sign-On** page. For more information, see [Tutorial: Configure SAML-based single sign-on for an application with Azure Active Directory](../manage-apps/view-applications-portal.md).
This update lets you see which policies are evaluated when a user signs in along
-### View legacy authentications through sign-ins activity logs
+### View legacy authentications through Sign-ins activity logs
**Type:** New feature **Service category:** Reporting **Product capability:** Monitoring & Reporting
-With the introduction of the **Client App** field in the Sign-in activity logs, customers can now see users that are using legacy authentications. Customers will be able to access this information using the sign-ins Microsoft Graph API or through the Sign-in activity logs in Azure AD portal where you can use the **Client App** control to filter on legacy authentications. Check out the documentation for more details.
+With the introduction of the **Client App** field in the Sign-in activity logs, customers can now see users that are using legacy authentications. Customers will be able to access this information using the Sign-ins Microsoft Graph API or through the Sign-in activity logs in Azure AD portal where you can use the **Client App** control to filter on legacy authentications. Check out the documentation for more details.
We're updating the acceptance string in the TOU end-user UI.
**Current text.** In order to access [tenantName] resources, you must accept the terms of use.<br>**New text.** In order to access [tenantName] resource, you must read the terms of use.
-**Current text:** Choosing to accept means that you agree to all of the above terms of use.<br>**New text:** Please click Accept to confirm that you have read and understood the terms of use.
+**Current text:** Choosing to accept means that you agree to all of the above terms of use.<br>**New text:** Please select Accept to confirm that you have read and understood the terms of use.
If any of your apps use Azure AD Activity Log APIs, follow these steps to ensure
**To update your app permissions** 1. Sign in to the Azure portal, select **Azure Active Directory**, and then select **App Registrations**.
-2. Select your app that uses the Azure AD Activity Logs API, select **Settings**, select **Required permissions**, and then select the **Microsoft Azure Active Directory** API.
+2. Select your app that uses the Azure AD Activity Logs API, select **Settings**, select **Required permissions**, and then select the **Windows Azure Active Directory** API.
3. In the **Delegated permissions** area of the **Enable access** blade, select the box next to **Read directory** data, and then select **Save**. 4. Select **Grant permissions**, and then select **Yes**.
Transport Layer Security (TLS) is a protocol that provides privacy and data inte
The [PCI Security Standards Council](https://www.pcisecuritystandards.org/) has determined that early versions of TLS and Secure Sockets Layer (SSL) must be disabled in favor of enabling new and more secure app protocols, with compliance starting on **June 30, 2018**. This change means that if you connect to Azure AD services and require PCI DSS-compliance, you must disable TLS 1.0. Multiple versions of TLS are available, but TLS 1.2 is the latest version available for Azure Active Directory Services. We highly recommend moving directly to TLS 1.2 for both client/server and browser/server combinations.
-Out-of-date browsers might not support newer TLS versions, such as TLS 1.2. To see which versions of TLS are supported by your browser, go to the [Qualys SSL Labs](https://www.ssllabs.com/) site and click **Test your browser**. We recommend you upgrade to the latest version of your web browser and preferably enable only TLS 1.2.
+Out-of-date browsers might not support newer TLS versions, such as TLS 1.2. To see which versions of TLS are supported by your browser, go to the [Qualys SSL Labs](https://www.ssllabs.com/) site and select **Test your browser**. We recommend you upgrade to the latest version of your web browser and preferably enable only TLS 1.2.
**To enable TLS 1.2, by browser**
For more information about public preview, see the [Azure AD delegated applicati
**Service category:** Authentications (Logins) **Product capability:** Platform
-Software as a Service offering, like Azure Active Directory (Azure AD) are designed to work best by going directly through the Internet, without requiring ExpressRoute or any other private VPN tunnels. Because of this, on **August 1, 2018**, we will stop supporting ExpressRoute for Azure AD services using Azure public peering and Azure communities in Microsoft peering. Any services impacted by this change might notice Azure AD traffic gradually shifting from ExpressRoute to the Internet.
+Software as a Service offering, like Azure Active Directory (Azure AD) are designed to work best by going directly through the Internet, without requiring ExpressRoute or any other private VPN tunnels. Because of this, on **August 1, 2018**, we'll stop supporting ExpressRoute for Azure AD services using Azure public peering and Azure communities in Microsoft peering. Any services impacted by this change might notice Azure AD traffic gradually shifting from ExpressRoute to the Internet.
While we're changing our support, we also know there are still situations where you might need to use a dedicated set of circuits for your authentication traffic. Because of this, Azure AD will continue to support per-tenant IP range restrictions using ExpressRoute and services already on Microsoft peering with the "Other Office 365 Online services" community. If your services are impacted, but you require ExpressRoute, you must do the following:
Access review of groups and apps is now generally available as part of Azure AD
**Service category:** Reporting **Product capability:** Monitoring & Reporting
-Azure AD Activity logs, which, includes sign-ins and Audit logs, are now available through the Microsoft Graph API. We have exposed two end points through the Microsoft Graph API to access these logs. Check out our [documents](../reports-monitoring/concept-reporting-api.md) for programmatic access to Azure AD Reporting APIs to get started.
+Azure AD Activity logs, which, includes Sign-ins and Audit logs, are now available through the Microsoft Graph API. We have exposed two end points through the Microsoft Graph API to access these logs. Check out our [documents](../reports-monitoring/concept-reporting-api.md) for programmatic access to Azure AD Reporting APIs to get started.
For more information, see [Allow or block invitations to B2B users from specific
In April 2018, we've added these 13 new apps with Federation support to our app gallery:
-Criterion HCM, [FiscalNote](../saas-apps/fiscalnote-tutorial.md), [Secret Server (on-premises)](../saas-apps/secretserver-on-premises-tutorial.md), [Dynamic Signal](../saas-apps/dynamicsignal-tutorial.md), [mindWireless](../saas-apps/mindwireless-tutorial.md), [OrgChart Now](../saas-apps/orgchartnow-tutorial.md), [Ziflow](../saas-apps/ziflow-tutorial.md), [AppNeta Performance Monitor](../saas-apps/appneta-tutorial.md), [Elium](../saas-apps/elium-tutorial.md), [Fluxx Labs](../saas-apps/fluxxlabs-tutorial.md), [Cisco Cloud](../saas-apps/ciscocloud-tutorial.md), Shelf, [SafetyNet](../saas-apps/safetynet-tutorial.md)
+Criterion HCM, [FiscalNote](../saas-apps/fiscalnote-tutorial.md), [Secret Server (On-Premises)](../saas-apps/secretserver-on-premises-tutorial.md), [Dynamic Signal](../saas-apps/dynamicsignal-tutorial.md), [mindWireless](../saas-apps/mindwireless-tutorial.md), [OrgChart Now](../saas-apps/orgchartnow-tutorial.md), [Ziflow](../saas-apps/ziflow-tutorial.md), [AppNeta Performance Monitor](../saas-apps/appneta-tutorial.md), [Elium](../saas-apps/elium-tutorial.md), [Fluxx Labs](../saas-apps/fluxxlabs-tutorial.md), [Cisco Cloud](../saas-apps/ciscocloud-tutorial.md), Shelf, [SafetyNet](../saas-apps/safetynet-tutorial.md)
For more information about the apps, see [SaaS application integration with Azure Active Directory](../saas-apps/tutorial-list.md).
For more information, see [How does sign-in on a native client with Seamless SSO
Users get a silent sign-on experience, with Seamless SSO, if an application (for example, `https://contoso.sharepoint.com`) sends sign-in requests to Azure AD's tenant endpoints - that is, `https://login.microsoftonline.com/contoso.com/<..>` or `https://login.microsoftonline.com/<tenant_ID>/<..>` - instead of Azure AD's common endpoint (`https://login.microsoftonline.com/common/<...>`).
-For more information, see [Azure Active Directory Seamless single sign-on](../hybrid/how-to-connect-sso.md).
+For more information, see [Azure Active Directory Seamless Single Sign-On](../hybrid/how-to-connect-sso.md).
For more information, see [Azure Active Directory Seamless single sign-on](../hy
To roll out Seamless SSO to your users, you need to add only one Azure AD URL to the users' Intranet zone settings by using group policy in Active Directory: `https://autologon.microsoftazuread-sso.com`. Previously, customers were required to add two URLs.
-For more information, see [Azure Active Directory Seamless single sign-on](../hybrid/how-to-connect-sso.md).
+For more information, see [Azure Active Directory Seamless Single Sign-On](../hybrid/how-to-connect-sso.md).
For more information, see [Dynamic membership rules for groups in Azure Active D
Previously, even if users explicitly signed out of an application secured by Azure AD, they would be automatically signed back in using Seamless SSO if they were trying to access an Azure AD application again within their corpnet from their domain joined devices. With this change, sign out is supported. This allows users to choose the same or different Azure AD account to sign back in with, instead of being automatically signed in using Seamless SSO.
-For more information, see [Azure Active Directory Seamless single sign-on](../hybrid/how-to-connect-sso.md)
+For more information, see [Azure Active Directory Seamless Single Sign-On](../hybrid/how-to-connect-sso.md)
The navigation experience for managing users and groups has been streamlined. Yo
Azure AD Activity log reports are now available in Microsoft Azure operated by 21Vianet (Azure China 21Vianet) instances. The following logs are included: -- **sign-ins activity logs** - Includes all the sign-ins logs associated with your tenant.
+- **Sign-ins activity logs** - Includes all the sign-ins logs associated with your tenant.
- **Self service Password Audit Logs** - Includes all the SSPR audit logs.
For more information about how to use these reports, see [Azure Active Directory
**Service category:** Reporting **Product capability:** Monitoring & Reporting
-As part of customers feedback to enable non-admin roles to have access to Azure AD activity logs, we have enabled the ability for users who are in the "Report Reader" role to access sign-ins and Audit activity within the Azure portal as well as using the Microsoft Graph API.
+As part of customers feedback to enable non-admin roles to have access to Azure AD activity logs, we've enabled the ability for users who are in the "Report Reader" role to access Sign-ins and Audit activity within the Azure portal as well as using the Microsoft Graph API.
For more information, how to use these reports, see [Azure Active Directory reporting](../reports-monitoring/overview-reports.md).
For more information, see:
**Service category:** Terms of use **Product capability:** Compliance
-When the terms of use are displayed, you can now click **Having trouble viewing? Click here**. Clicking this link opens the terms of use natively on your device. Regardless of the font size in the document or the screen size of device, you can zoom and read the document as needed.
+When the terms of use are displayed, you can now select **Having trouble viewing? Click here**. Clicking this link opens the terms of use natively on your device. Regardless of the font size in the document or the screen size of device, you can zoom and read the document as needed.
For more information about listing your application in the Azure AD app gallery,
The insight you get for a detected risk detection is tied to your Azure AD subscription. With the Azure AD Premium P2 edition, you get the most detailed information about all underlying detections.
-With the Azure AD Premium P1 edition, detections that are not covered by your license appear as the risk detection Sign-in with additional risk detected.
+With the Azure AD Premium P1 edition, detections that aren't covered by your license appear as the risk detection Sign-in with additional risk detected.
For more information, see [Azure Active Directory risk detections](../identity-protection/overview-identity-protection.md).
Due to these new capabilities, the report APIs under the /reports endpoint were
**Service category:** My Apps **Product capability:** Single sign-on
-Azure AD supports automatic sign-in field detection for applications that render an HTML user name and password field. These steps are documented in [How to automatically capture sign-in fields for an application](../manage-apps/troubleshoot-password-based-sso.md#manually-capture-sign-in-fields-for-an-app). You can find this capability by adding a *Non-Gallery* application on the **Enterprise Applications** page in the [Azure portal](https://aad.portal.azure.com). Additionally, you can configure the **Single sign-on** mode on this new application to **Password-based single sign-on**, enter a web URL, and then save the page.
+Azure AD supports automatic sign-in field detection for applications that render an HTML user name and password field. These steps are documented in [How to automatically capture sign-in fields for an application](../manage-apps/troubleshoot-password-based-sso.md#manually-capture-sign-in-fields-for-an-app). You can find this capability by adding a *Non-Gallery* application on the **Enterprise Applications** page in the [Azure portal](https://aad.portal.azure.com). Additionally, you can configure the **Single Sign-on** mode on this new application to **Password-based Single Sign-on**, enter a web URL, and then save the page.
Due to a service issue, this functionality was temporarily disabled. The issue was resolved, and the automatic sign-in field detection is available again.
A hotfix roll-up package (build 4.4.1642.0) is available as of September 25, 201
For more information, see [Hotfix rollup package (build 4.4.1642.0) is available for Identity Manager 2016 Service Pack 1](https://support.microsoft.com/help/4021562). -+
active-directory Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/fundamentals/whats-new.md
Azure AD receives improvements on an ongoing basis. To stay up to date with the
This page is updated monthly, so revisit it regularly. If you're looking for items older than six months, you can find them in [Archive for What's new in Azure Active Directory](whats-new-archive.md). +
+ ## July 2022
+
+### Public Preview - ADFS to Azure AD: SAML App Multi-Instancing
+
+**Type:** New feature
+**Service category:** Enterprise Apps
+**Product capability:** SSO
+
+Users can now configure multiple instances of the same application within an Azure AD tenant. It's now supported for both IdP, and Service Provider (SP), initiated single sign-on requests. Multiple application accounts can now have a separate service principle to handle instance-specific claims mapping and roles assignment. For more information, see:
+
+- [Configure SAML app multi-instancing for an application - Microsoft Entra | Microsoft Docs](../develop/reference-app-multi-instancing.md)
+- [Customize app SAML token claims - Microsoft Entra | Microsoft Docs](../develop/active-directory-saml-claims-customization.md)
+++++
+### Public Preview - ADFS to Azure AD: Apply RegEx Replace to groups claim content
+
+**Type:** New feature
+**Service category:** Enterprise Apps
+**Product capability:** SSO
+
+
+
+Administrators up until recently has the capability to transform claims using many transformations, however using regular expression for claims transformation wasn't exposed to customers. With this public preview release, administrators can now configure and use regular expressions for claims transformation using portal UX.
+For more information, see:[Customize app SAML token claims - Microsoft Entra | Microsoft Docs](../develop/active-directory-saml-claims-customization.md).
+
++
+
++
+### Public Preview - Azure AD Domain Services - Trusts for User Forests
+
+**Type:** New feature
+**Service category:** Azure AD Domain Services
+**Product capability:** Azure AD Domain Services
+
+
+You can now create trusts on both user and resource forests. On-premises AD DS users can't authenticate to resources in the Azure AD DS resource forest until you create an outbound trust to your on-premises AD DS. An outbound trust requires network connectivity to your on-premises virtual network on which you have installed Azure AD Domain Service. On a user forest, trusts can be created for on-premises AD forests that aren't synchronized to Azure AD DS.
+
+To learn more about trusts and how to deploy your own, visit [How trust relationships work for forests in Active Directory](/azure/active-directory-domain-services/concepts-forest-trust).
+
+
++
+
++
+### New Federated Apps available in Azure AD Application gallery - July 2022
+
+**Type:** New feature
+**Service category:** Enterprise Apps
+**Product capability:** 3rd Party Integration
+
+
+In July 2022 we've added the following 28 new applications in our App gallery with Federation support:
+
+[Lunni Ticket Service](https://ticket.lunni.io/login), [TESMA](https://tesma.com/), [Spring Health](https://benefits.springhealth.com/care), [Sorbet](https://lite.sorbetapp.com/login), [Rainmaker UPS](https://upsairlines.rainmaker.aero/rainmaker.security.web/), [Planview ID](../saas-apps/planview-id-tutorial.md), [Karbonalpha](https://saas.karbonalpha.com/settings/api), [Headspace](../saas-apps/headspace-tutorial.md), [SeekOut](../saas-apps/seekout-tutorial.md), [Stackby](../saas-apps/stackby-tutorial.md), [Infrascale Cloud Backup](../saas-apps/infrascale-cloud-backup-tutorial.md), [Keystone](../saas-apps/keystone-tutorial.md), [LMS・教育管理システム Leaf](../saas-apps/lms-and-education-management-system-leaf-tutorial.md), [ZDiscovery](../saas-apps/zdiscovery-tutorial.md), [ラインズeライブラリアドバンス (Lines eLibrary Advance)](../saas-apps/lines-elibrary-advance-tutorial.md), [Rootly](../saas-apps/rootly-tutorial.md), [Articulate 360](../saas-apps/articulate360-tutorial.md), [Rise.com](../saas-apps/risecom-tutorial.md), [SevOne Network Monitoring System (NMS)](../saas-apps/sevone-network-monitoring-system-tutorial.md), [PGM](https://ups-pgm.4gfactor.com/azure/), [TouchRight Software](https://app.touchrightsoftware.com/), [Tendium](../saas-apps/tendium-tutorial.md), [Training Platform](../saas-apps/training-platform-tutorial.md), [Znapio](https://app.znapio.com/), [Preset](../saas-apps/preset-tutorial.md), [itslearning MS Teams sync](https://itslearning.com/global/), [Veza](../saas-apps/veza-tutorial.md), [Trax](https://app.trax.co/authn/login)
+
+You can also find the documentation of all the applications from here https://aka.ms/AppsTutorial,
+
+For listing your application in the Azure AD app gallery, please read the details here https://aka.ms/AzureADAppRequest
++
+
+
+
++
+### General Availability - No more waiting, provision groups on demand into your SaaS applications.
+
+**Type:** New feature
+**Service category:** Provisioning
+**Product capability:** Identity Lifecycle Management
+
+
+Pick a group of up to five members and provision them into your third-party applications in seconds. Get started testing, troubleshooting, and provisioning to non-Microsoft applications such as ServiceNow, ZScaler, and Adobe. For more information, see: [On-demand provisioning in Azure Active Directory](../app-provisioning/provision-on-demand.md).
+
++
+
+
+### General Availability ΓÇô Protect against by-passing of cloud Azure AD Multi-Factor Authentication when federated with Azure AD
+
+**Type:** New feature
+**Service category:** MS Graph
+**Product capability:** Identity Security & Protection
+
+
+We're delighted to announce a new security protection that prevents bypassing of cloud Azure AD Multi-Factor Authentication when federated with Azure AD. When enabled for a federated domain in your Azure AD tenant, it ensures that a compromised federated account can't bypass Azure AD Multi-Factor Authentication by imitating that a multi factor authentication has already been performed by the identity provider. The protection can be enabled via new security setting, [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-beta#federatedidpmfabehavior-values).
+
+
+We highly recommend enabling this new protection when using Azure AD Multi-Factor Authentication as your multi factor authentication for your federated users. To learn more about the protection and how to enable it, visit [Enable protection to prevent by-passing of cloud Azure AD Multi-Factor Authentication when federated with Azure AD](/windows-server/identity/ad-fs/deployment/best-practices-securing-ad-fs#enable-protection-to-prevent-by-passing-of-cloud-azure-ad-multi-factor-authentication-when-federated-with-azure-ad).
+
++
+
+
+### Public preview - New provisioning connectors in the Azure AD Application Gallery - July 2022
+
+**Type:** New feature
+**Service category:** App Provisioning
+**Product capability:** 3rd Party Integration
+
+
+You can now automate creating, updating, and deleting user accounts for these newly integrated apps:
+
+- [Tableau Cloud](../saas-apps/tableau-online-provisioning-tutorial.md)
+
+For more information about how to better secure your organization by using automated user account provisioning, see [Automate user provisioning to SaaS applications with Azure AD](../app-provisioning/user-provisioning.md).
+
++
+
+
+### General Availability - Tenant-based service outage notifications
+
+**Type:** New feature
+**Service category:** Other
+**Product capability:** Platform
+
+
+Azure Service Health supports service outage notifications to Tenant Admins for Azure Active Directory issues. These outages will also appear on the Azure AD Admin Portal Overview page with appropriate links to Azure Service Health. Outage events will be able to be seen by built-in Tenant Administrator Roles. We'll continue to send outage notifications to subscriptions within a tenant for transition. More information is available at: [What are Service Health notifications in Azure Active Directory?](../reports-monitoring/overview-service-health-notifications.md).
+
+
++
+
++
+### Public Preview - Multiple Passwordless Phone sign-in Accounts for iOS devices
+
+**Type:** New feature
+**Service category:** Authentications (Logins)
+**Product capability:** User Authentication
+
+
+End users can now enable passwordless phone sign-in for multiple accounts in the Authenticator App on any supported iOS device. Consultants, students, and others with multiple accounts in Azure AD can add each account to Microsoft Authenticator and use passwordless phone sign-in for all of them from the same iOS device. The Azure AD accounts can be in either the same, or different, tenants. Guest accounts aren't supported for multiple account sign-ins from one device.
++
+Note that end users are encouraged to enable the optional telemetry setting in the Authenticator App, if not done so already. For more information, see: [Enable passwordless sign-in with Microsoft Authenticator](../authentication/howto-authentication-passwordless-phone.md)
+
+
++
+
+
+
+### Public Preview - Azure AD Domain Services - Fine Grain Permissions
+
+**Type:** Changed feature
+**Service category:** Azure AD Domain Services
+**Product capability:** Azure AD Domain Services
+
+
+
+Previously to set up and administer your AAD-DS instance you needed top level permissions of Azure Contributor and Azure AD Global Admin. Now for both initial creation, and ongoing administration, you can utilize more fine grain permissions for enhanced security and control. The prerequisites now minimally require:
+
+- You need [Application Administrator](../roles/permissions-reference.md#application-administrator) and [Groups Administrator](../roles/permissions-reference.md#groups-administrator) Azure AD roles in your tenant to enable Azure AD DS.
+- You need [Domain Services Contributor](/azure/role-based-access-control/built-in-roles#domain-services-contributor) Azure role to create the required Azure AD DS resources.
+
+
+Check out these resources to learn more:
+
+- [Tutorial - Create an Azure Active Directory Domain Services managed domain | Microsoft Docs](/azure/active-directory-domain-services/tutorial-create-instance#prerequisites)
+- [Least privileged roles by task - Azure Active Directory | Microsoft Docs](../roles/delegate-by-task.md#domain-services)
+- [Azure built-in roles - Azure RBAC | Microsoft Docs](/azure/role-based-access-control/built-in-roles#domain-services-contributor)
+
+
++
+
+
+### General Availability- Azure AD Connect update release with new functionality and bug fixes
+
+**Type:** Changed feature
+**Service category:** Provisioning
+**Product capability:** Identity Lifecycle Management
+
+
+
+A new Azure AD Connect release fixes several bugs and includes new functionality. This release is also available for auto upgrade for eligible servers. For more information, see: [Azure AD Connect: Version release history](../hybrid/reference-connect-version-history.md#21150).
++
+
+
+### General Availability - Cross-tenant access settings for B2B collaboration
+
+**Type:** Changed feature
+**Service category:** B2B
+**Product capability:** B2B/B2C
+
+
+
+Cross-tenant access settings enable you to control how users in your organization collaborate with members of external Azure AD organizations. Now youΓÇÖll have granular inbound and outbound access control settings that work on a per org, user, group, and application basis. These settings also make it possible for you to trust security claims from external Azure AD organizations like multi-factor authentication (MFA), device compliance, and hybrid Azure AD joined devices. For more information, see: [Cross-tenant access with Azure AD External Identities](../external-identities/cross-tenant-access-overview.md).
+
++
+
+
+### General Availability- Expression builder with Application Provisioning
+
+**Type:** Changed feature
+**Service category:** Provisioning
+**Product capability:** Outbound to SaaS Applications
+
+
+Accidental deletion of users in your apps or in your on-premises directory could be disastrous. WeΓÇÖre excited to announce the general availability of the accidental deletions prevention capability. When a provisioning job would cause a spike in deletions, it will first pause and provide you visibility into the potential deletions. You can then accept or reject the deletions and have time to update the jobΓÇÖs scope if necessary. For more information, see [Understand how expression builder in Application Provisioning works](../app-provisioning/expression-builder.md).
+
++
+
++
+### Public Preview - Improved app discovery view for My Apps portal
+
+**Type:** Changed feature
+**Service category:** My Apps
+**Product capability:** End User Experiences
+
+
+An improved app discovery view for My Apps is in public preview. The preview shows users more apps in the same space and allows them to scroll between collections. It doesn't currently support drag-and-drop and list view. Users can opt into the preview by selecting Try the preview and opt out by selecting Return to previous view. To learn more about My Apps, see [My Apps portal overview](../manage-apps/myapps-overview.md).
++
+
++
+
++
+### Public Preview - New Azure AD Portal All Devices list
+
+**Type:** Changed feature
+**Service category:** Device Registration and Management
+**Product capability:** End User Experiences
+
+
+
+We're enhancing the All Devices list in the Azure AD Portal to make it easier to filter and manage your devices. Improvements include:
+
+All Devices List:
+
+- Infinite scrolling
+- More devices properties can be filtered on
+- Columns can be reordered via drag and drop
+- Select all devices
+
+For more information, see: [Manage devices in Azure AD using the Azure portal](../devices/device-management-azure-portal.md#view-and-filter-your-devices-preview).
++
+
++
+
++
+### Public Preview - ADFS to Azure AD: Persistent NameID for IDP-initiated Apps
+
+**Type:** Changed feature
+**Service category:** Enterprise Apps
+**Product capability:** SSO
+
+
+Previously the only way to have persistent NameID value was to ΓÇïconfigure user attribute with an empty value. Admins can now explicitly configure the NameID value to be persistent ΓÇïalong with the corresponding format.
+
+For more information, see: [Customize app SAML token claims - Microsoft identity platform | Microsoft Docs](../develop/active-directory-saml-claims-customization.md#attributes).
+
++
+
++
+### Public Preview - ADFS to Azure Active Directory: Customize attrname-formatΓÇï
+
+**Type:** Changed feature
+**Service category:** Enterprise Apps
+**Product capability:** SSO
+
+
+With this new parity update, customers can now integrate non-gallery applications such as Socure DevHub with Azure AD to have SSO via SAML.
+
+For more information, see [Claims mapping policy - Microsoft Entra | Microsoft Docs](../develop/reference-claims-mapping-policy-type.md#claim-schema-entry-elements).
+
++
+
++ ## June 2022
This page is updated monthly, so revisit it regularly. If you're looking for ite
**Type:** New feature **Service category:** App Provisioning
-**Product capability:** Third Party Integration
+**Product capability:** 3rd Party Integration
You can now automate creating, updating, and deleting user accounts for these newly integrated apps:
Customers can be alerted on assignments made outside PIM either directly on the
-Temporary Access Pass (TAP) is now generally available. TAP can be used to securely register password-less methods such as Phone Sign-in, phishing resistant methods such as FIDO2, and even assist in Windows onboarding (AADJ and WHFB). TAP also makes recovery easier when a user has lost or forgotten their strong authentication methods and needs to sign in to register new authentication methods. For more information, see: [Configure Temporary Access Pass in Azure AD to register Passwordless authentication methods](../authentication/howto-authentication-temporary-access-pass.md).
+Temporary Access Pass (TAP) is now generally available. TAP can be used to securely register password-less methods such as Phone Sign-in, phishing resistant methods such as FIDO2, and even help Windows onboarding (AADJ and WHFB). TAP also makes recovery easier when a user has lost or forgotten their strong authentication methods and needs to sign in to register new authentication methods. For more information, see: [Configure Temporary Access Pass in Azure AD to register Passwordless authentication methods](../authentication/howto-authentication-temporary-access-pass.md).
Create "nested" groups with Azure AD Dynamic Groups! This feature enables you to
**Type:** New feature **Service category:** Enterprise Apps
-**Product capability:** Third Party Integration
+**Product capability:** 3rd Party Integration
For listing your application in the Azure AD app gallery, see the details here h
-We're delighted to announce a new security protection that prevents bypassing of cloud Azure AD Multi-Factor Authentication when federated with Azure AD. When enabled for a federated domain in your Azure AD tenant, it ensures that a compromised federated account can't bypass Azure AD Multi-Factor Authentication by imitating that a multi factor authentication has already been performed by the identity provider. The protection can be enabled via new security setting, [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-1.0#federatedidpmfabehavior-values&preserve-view=true).
+We're delighted to announce a new security protection that prevents bypassing of cloud Azure AD Multi-Factor Authentication when federated with Azure AD. When enabled for a federated domain in your Azure AD tenant, it ensures that a compromised federated account can't bypass Azure AD Multi-Factor Authentication by imitating that a multi factor authentication has already been performed by the identity provider. The protection can be enabled via new security setting, [federatedIdpMfaBehavior](/graph/api/resources/internaldomainfederation?view=graph-rest-1.0#federatedidpmfabehavior-values).
We highly recommend enabling this new protection when using Azure AD Multi-Factor Authentication as your multi factor authentication for your federated users. To learn more about the protection and how to enable it, visit [Enable protection to prevent by-passing of cloud Azure AD Multi-Factor Authentication when federated with Azure AD](/windows-server/identity/ad-fs/deployment/best-practices-securing-ad-fs#enable-protection-to-prevent-by-passing-of-cloud-azure-ad-multi-factor-authentication-when-federated-with-azure-ad).
User Profile:
-### General availability - More device properties supported for Dynamic Device groups
+### General Availability - More device properties supported for Dynamic Device groups
**Type:** Changed feature **Service category:** Group Management
Azure Service Health will soon support service outage notifications to Tenant Ad
**Type:** New feature **Service category:** Enterprise Apps
-**Product capability:** Third Party Integration
+**Product capability:** 3rd Party Integration
When editing a collection using the My Apps portal, users can now add their own
**Type:** New feature **Service category:** App Provisioning
-**Product capability:** Third Party Integration
+**Product capability:** 3rd Party Integration
You can now automate creating, updating, and deleting user accounts for these newly integrated apps:
For more information about how to better secure your organization by using autom
**Product capability:** Identity Security & Protection
-The sign-ins Microsoft Graph API now supports confirming safe and compromised on risky sign-ins. This public preview functionality is available at the beta endpoint. For more information, please check out the Microsoft Graph documentation: [Sign in: confirmSafe - Microsoft Graph beta | Microsoft Docs](/graph/api/signin-confirmsafe?view=graph-rest-beta&preserve-view=true)
+The sign-ins Microsoft Graph API now supports confirming safe and compromised on risky sign-ins. This public preview functionality is available at the beta endpoint. For more information, please check out the Microsoft Graph documentation: [signIn: confirmSafe - Microsoft Graph beta | Microsoft Docs](/graph/api/signin-confirmsafe?view=graph-rest-beta&preserve-view=true)
Smart Lockout now synchronizes the lockout state across Azure AD data centers, s
## April 2022 +
+### General Availability - Entitlement management separation of duties checks for incompatible access packages
+
+**Type:** Changed feature
+**Service category:** Other
+**Product capability:** Identity Governance
+
+In Azure AD entitlement management, an administrator can now configure the incompatible access packages and groups of an access package in the Azure portal. This prevents a user who already has one of those incompatible access rights from being able to request further access. For more information, see: [Configure separation of duties checks for an access package in Azure AD entitlement management](../governance/entitlement-management-access-package-incompatible.md).
++++ ### General Availability - Microsoft Defender for Endpoint Signal in Identity Protection **Type:** New feature
Identity Protection now integrates a signal from Microsoft Defender for Endpoint
-### General availability - Entitlement management 3 stages of approval
+### General Availability - Entitlement management 3 stages of approval
**Type:** Changed feature **Service category:** Other
With a recent improvement, Smart Lockout now synchronizes the lockout state acro
-### Public Preview - Integration of Microsoft 365 App Certification details into Azure AD UX and Consent Experiences
+### Public Preview - Integration of Microsoft 365 App Certification details into Azure Active Directory UX and Consent Experiences
**Type:** New feature **Service category:** User Access Management
Microsoft 365 Certification status for an app is now available in Azure AD conse
-### General availability - Use Azure AD access reviews to review access of B2B direct connect users in Teams shared channels
+### Public preview - Use Azure AD access reviews to review access of B2B direct connect users in Teams shared channels
**Type:** New feature **Service category:** Access Reviews **Product capability:** Identity Governance
-Use Azure AD access reviews to review access of B2B direct connect users in Teams shared channels. For more information, see: [Include B2B direct connect users and teams accessing Teams Shared Channels in access reviews](../governance/create-access-review.md#include-b2b-direct-connect-users-and-teams-accessing-teams-shared-channels-in-access-reviews).
+Use Azure AD access reviews to review access of B2B direct connect users in Teams shared channels. For more information, see: [Include B2B direct connect users and teams accessing Teams Shared Channels in access reviews (preview)](../governance/create-access-review.md#include-b2b-direct-connect-users-and-teams-accessing-teams-shared-channels-in-access-reviews).
We highly recommend enabling this new protection when using Azure AD Multi-Facto
**Service category:** Enterprise Apps **Product capability:** Third Party Integration
-In April 2022, we added the following 24 new applications in our App gallery with Federation support:
+In April 2022 we added the following 24 new applications in our App gallery with Federation support:
[X-1FBO](https://www.x1fbo.com/), [select Armor](https://app.clickarmor.c) You can also find the documentation of all the applications from here https://aka.ms/AppsTutorial.
With Azure Active Directory (Azure AD) Access Reviews, you can create a download
**Product capability:** Identity Security & Protection
-Azure AD Identity Protection is extending its core capabilities of detecting, investigating, and remediating identity-based risk to workload identities. This allows organizations to better protect their applications, service principals, and managed identities. We're also extending Conditional Access so you can block at-risk workload identities. [Learn more](../identity-protection/concept-workload-identity-risk.md)
+Azure AD Identity Protection is extending its core capabilities of detecting, investigating, and remediating identity-based risk to workload identities. This allows organizations to better protect their applications, service principals, and managed identities. We are also extending Conditional Access so you can block at-risk workload identities. [Learn more](../identity-protection/concept-workload-identity-risk.md)
Use multi-stage reviews to create Azure AD access reviews in sequential stages,
**Product capability:** Third Party Integration
-In February 2022, we added the following 20 new applications in our App gallery with Federation support:
+In February 2022 we added the following 20 new applications in our App gallery with Federation support:
[Embark](../saas-apps/embark-tutorial.md), [FENCE-Mobile RemoteManager SSO](../saas-apps/fence-mobile-remotemanager-sso-tutorial.md), [カオナビ](../saas-apps/kao-navi-tutorial.md), [Adobe Identity Management (OIDC)](../saas-apps/adobe-identity-management-tutorial.md), [AppRemo](../saas-apps/appremo-tutorial.md), [Live Center](https://livecenter.norkon.net/Login), [Offishall](https://app.offishall.io/), [MoveWORK Flow](https://www.movework-flow.fm/login), [Cirros SL](https://www.cirros.net/), [ePMX Procurement Software](https://azure.epmxweb.com/admin/index.php?), [Vanta O365](https://app.vanta.com/connections), [Hubble](../saas-apps/hubble-tutorial.md), [Medigold Gateway](https://gateway.medigoldcore.com), [クラウドログ](../saas-apps/crowd-log-tutorial.md),[Amazing People Schools](../saas-apps/amazing-people-schools-tutorial.md), [Salus](https://salus.com/login), [XplicitTrust Network Access](https://console.xplicittrust.com/#/dashboard), [Spike Email - Mail & Team Chat](https://spikenow.com/web/), [AltheaSuite](https://planmanager.altheasuite.com/), [Balsamiq Wireframes](../saas-apps/balsamiq-wireframes-tutorial.md).
For listing your application in the Azure AD app gallery, please read the detail
**Product capability:** Identity Security & Protection
-Identity Protection has added two new detections from Microsoft Defender for Cloud Apps, formerly MCAS. The Mass Access to Sensitive Files detection detects anomalous user activity, and the Unusual Addition of Credentials to an OAuth app detects suspicious service principal activity.[Learn more](../identity-protection/concept-identity-protection-risks.md)
+Identity Protection has added two new detections from Microsoft Defender for Cloud Apps, (formerly MCAS). The Mass Access to Sensitive Files detection detects anomalous user activity, and the Unusual Addition of Credentials to an OAuth app detects suspicious service principal activity.[Learn more](../identity-protection/concept-identity-protection-risks.md)
For more information about how to better secure your organization by using autom
**Product capability:** Privileged Identity Management
-We have improved the Privileged Identity management (PIM) time to role activation for SharePoint Online. Now, when activating a role in PIM for SharePoint Online, you should be able to use your permissions right away in SharePoint Online. This change will roll out in stages, so you might not yet see these improvements in your organization. [Learn more](../privileged-identity-management/pim-how-to-activate-role.md)
+We've improved the Privileged Identity management (PIM) time to role activation for SharePoint Online. Now, when activating a role in PIM for SharePoint Online, you should be able to use your permissions right away in SharePoint Online. This change will roll out in stages, so you might not yet see these improvements in your organization. [Learn more](../privileged-identity-management/pim-how-to-activate-role.md)
We have improved the Privileged Identity management (PIM) time to role activatio
-## January 2022
-
-### Public preview - Custom security attributes
-
-**Type:** New feature
-**Service category:** Directory Management
-**Product capability:** Directory
-
-Enables you to define business-specific attributes that you can assign to Azure AD objects. These attributes can be used to store information, categorize objects, or enforce fine-grained access control. Custom security attributes can be used with Azure attribute-based access control. [Learn more](custom-security-attributes-overview.md).
-
--
-### Public preview - Filter groups in tokens using a substring match
-
-**Type:** New feature
-**Service category:** Enterprise Apps
-**Product capability:** SSO
-
-In the past, Azure AD only permitted groups to be filtered based on whether they were assigned to an application. Now, you can also use Azure AD to filter the groups included in the token. You can filter with the substring match on the display name or onPremisesSAMAccountName attributes of the group object on the token. Only groups that the user is a member of will be included in the token. This token will be recognized whether it's on the ObjectID or the on premises SAMAccountName or security identifier (SID). This feature can be used together with the setting to include only groups assigned to the application if desired to further filter the list.[Learn more](../hybrid/how-to-connect-fed-group-claims.md)
---
-### General availability - Continuous Access Evaluation
-
-**Type:** New feature
-**Service category:** Other
-**Product capability:** Access Control
-
-With Continuous access evaluation (CAE), critical security events and policies are evaluated in real time. This includes account disable, password reset, and location change. [Learn more](../conditional-access/concept-continuous-access-evaluation.md).
-
--
-### General Availability - User management enhancements are now available
-
-**Type:** New feature
-**Service category:** User Management
-**Product capability:** User Management
-
-The Azure AD portal has been updated to make it easier to find users in the All users and Deleted users pages. Changes in the preview include:
--- More visible user properties including object ID, directory sync status, creation type, and identity issuer.-- **Search now** allows substring search and combined search of names, emails, and object IDs.-- Enhanced filtering by user type (member, guest, and none), directory sync status, creation type, company name, and domain name.-- New sorting capabilities on properties like name, user principal name, creation time, and deletion date.-- A new total users count that updates with any searches or filters.-
-For more information, go to [User management enhancements (preview) in Azure Active Directory](../enterprise-users/users-search-enhanced.md).
---
-### General Availability - My Apps customization of default Apps view
-
-**Type:** New feature
-**Service category:** My Apps
-**Product capability:** End User Experiences
-
-Customization of the default My Apps view in now in general availability. For more information on My Apps, you can go to [Sign in and start apps from the My Apps portal](https://support.microsoft.com/en-us/account-billing/sign-in-and-start-apps-from-the-my-apps-portal-2f3b1bae-0e5a-4a86-a33e-876fbd2a4510).
-
--
-### General Availability - Audited BitLocker Recovery
-
-**Type:** New feature
-**Service category:** Device Access Management
-**Product capability:** Device Lifecycle Management
-
-BitLocker keys are sensitive security items. Audited BitLocker recovery ensures that when BitLocker keys are read, an audit log is generated so that you can trace who accesses this information for given devices. [Learn more](../devices/device-management-azure-portal.md#view-or-copy-bitlocker-keys).
---
-### General Availability - Download a list of devices
-
-**Type:** New feature
-**Service category:** Device Registration and Management
-**Product capability:** Device Lifecycle Management
-
-Download a list of your organization's devices to a .csv file for easier reporting and management. [Learn more](../devices/device-management-azure-portal.md#download-devices).
-
--
-### New provisioning connectors in the Azure AD Application Gallery - January 2022
-
-**Type:** New feature
-**Service category:** App Provisioning
-**Product capability:** 3rd Party Integration
-
-You can now automate creating, updating, and deleting user accounts for these newly integrated apps:
--- [Autodesk SSO](../saas-apps/autodesk-sso-provisioning-tutorial.md)-- [Evercate](../saas-apps/evercate-provisioning-tutorial.md)-- [frankli.io](../saas-apps/frankli-io-provisioning-tutorial.md)-- [Plandisc](../saas-apps/plandisc-provisioning-tutorial.md)-- [Swit](../saas-apps/swit-provisioning-tutorial.md)-- [TerraTrue](../saas-apps/terratrue-provisioning-tutorial.md)-- [TimeClock 365 SAML](../saas-apps/timeclock-365-saml-provisioning-tutorial.md)-
-For more information about how to better secure your organization by using automated user account provisioning, go to [Automate user provisioning to SaaS applications with Azure AD](../manage-apps/user-provisioning.md).
---
-### New Federated Apps available in Azure AD Application gallery - January 2022
-
-**Type:** New feature
-**Service category:** Enterprise Apps
-**Product capability:** 3rd Party Integration
-
-In January 2022, weΓÇÖve added the following 47 new applications in our App gallery with Federation support:
-
-[Jooto](../saas-apps/jooto-tutorial.md), [Proprli](https://app.proprli.com/), [Pace Scheduler](https://www.pacescheduler.com/accounts/login/), [DRTrack](../saas-apps/drtrack-tutorial.md), [Dining Sidekick](../saas-apps/dining-sidekick-tutorial.md), [Cryotos](https://app.cryotos.com/oauth2/authorization/azure-client), [Emergency Management Systems](https://secure.emsystems.com.au/), [Manifestly Checklists](../saas-apps/manifestly-checklists-tutorial.md), [eLearnPOSH](../saas-apps/elearnposh-tutorial.md), [Scuba Analytics](../saas-apps/scuba-analytics-tutorial.md), [Athena Systems sign-in Platform](../saas-apps/athena-systems-login-platform-tutorial.md), [TimeTrack](../saas-apps/timetrack-tutorial.md), [MiHCM](../saas-apps/mihcm-tutorial.md), [Health Note](https://www.healthnote.com/), [Active Directory SSO for DoubleYou](../saas-apps/active-directory-sso-for-doubleyou-tutorial.md), [Emplifi platform](../saas-apps/emplifi-platform-tutorial.md), [Flexera One](../saas-apps/flexera-one-tutorial.md), [Hypothesis](https://web.hypothes.is/help/authorizing-hypothesis-from-the-azure-ad-app-gallery/), [Recurly](../saas-apps/recurly-tutorial.md), [XpressDox Administrative Unit Cloud](https://au.xpressdox.com/Authentication/Login.aspx), [Zoom for Intune](https://zoom.us/), [UPWARD AGENT](https://app.upward.jp/login/), [Linux Foundation ID](https://openprofile.dev/), [Asset Planner](../saas-apps/asset-planner-tutorial.md), [Kiho](https://v3.kiho.fi/index/sso), [chezie](https://app.chezie.co/), [Excelity HCM](../saas-apps/excelity-hcm-tutorial.md), [yuccaHR](https://app.yuccahr.com/), [Blue Ocean Brain](../saas-apps/blue-ocean-brain-tutorial.md), [EchoSpan](../saas-apps/echospan-tutorial.md), [Archie](../saas-apps/archie-tutorial.md), [Equifax Workforce Solutions](../saas-apps/equifax-workforce-solutions-tutorial.md), [Palantir Foundry](../saas-apps/palantir-foundry-tutorial.md), [ATP SpotLight and ChronicX](../saas-apps/atp-spotlight-and-chronicx-tutorial.md), [DigiSign](https://app.digisign.org/selfcare/sso), [mConnect](https://mconnect.skooler.com/), [BrightHR](https://login.brighthr.com/), [Mural Identity](../saas-apps/mural-identity-tutorial.md), [NordPass SSO](https://app.nordpass.com/login%20use%20%22Log%20in%20to%20business%22%20option), [CloudClarity](https://portal.cloudclarity.app/dashboard), [Twic](../saas-apps/twic-tutorial.md), [Eduhouse Online](https://app.eduhouse.fi/palvelu/kirjaudu/microsoft), [Bealink](../saas-apps/bealink-tutorial.md), [Time Intelligence Bot](https://teams.microsoft.com/), [SentinelOne](https://sentinelone.com/)
-
-You can also find the documentation of all the applications from: https://aka.ms/AppsTutorial,
-
-For listing your application in the Azure AD app gallery, read the details in: https://aka.ms/AzureADAppRequest
---
-### Azure Ad access reviews reviewer recommendations now account for non-interactive sign-in information
-
-**Type:** Changed feature
-**Service category:** Access Reviews
-**Product capability:** Identity Governance
-
-Azure AD access reviews reviewer recommendations now account for non-interactive sign-in information, improving upon original recommendations based on interactive last sign-ins only. Reviewers can now make more accurate decisions based on the last sign-in activity of the users theyΓÇÖre reviewing. To learn more about how to create access reviews, go to [Create an access review of groups and applications in Azure AD](../governance/create-access-review.md).
-
--
-### Risk reason for offline Azure AD Threat Intelligence risk detection
-
-**Type:** Changed feature
-**Service category:** Identity Protection
-**Product capability:** Identity Security & Protection
-
-The offline Azure AD Threat Intelligence risk detection can now have a risk reason that will help customers with the risk investigation. If a risk reason is available, it will show up as **Additional Info** in the risk details of that risk event. The information can be found in the Risk detections report. It will also be available through the additionalInfo property of the riskDetections API. [Learn more](../identity-protection/howto-identity-protection-investigate-risk.md).
-
-
active-directory Access Reviews Application Preparation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/governance/access-reviews-application-preparation.md
na Previously updated : 04/25/2022 Last updated : 07/29/2022
Also, while not required for reviewing access to an application, we recommend al
In order for Azure AD access reviews to be used for an application, then the application must first be integrated with Azure AD. An application being integrated with Azure AD means one of two requirements must be met: * The application relies upon Azure AD for federated SSO, and Azure AD controls authentication token issuance. If Azure AD is the only identity provider for the application, then only users who are assigned to one of the application's roles in Azure AD are able to sign into the application. Those users that are denied by a review lose their application role assignment and can no longer get a new token to sign in to the application.
-* The application relies upon user or group lists that are provided to the application by Azure AD. This fulfillment could be done through a provisioning protocol such as System for Cross-Domain Identity Management (SCIM) or by the application querying Azure AD via Microsoft Graph. Those users that are denied by a review lose their application role assignment or group membership, and when those changes are made available to the application, then the denied users will no longer have access.
+* The application relies upon user or group lists that are provided to the application by Azure AD. This fulfillment could be done through a provisioning protocol such as System for Cross-Domain Identity Management (SCIM) or by the application querying Azure AD via Microsoft Graph, or groups that are written to AD DS. Those users that are denied by a review lose their application role assignment or group membership, and when those changes are made available to the application, then the denied users will no longer have access.
If neither of those criteria are met for an application, as the application doesn't rely upon Azure AD, then access reviews can still be used, however there may be some limitations. Users that aren't in your Azure AD or are not assigned to the application roles in Azure AD, won't be included in the review. Also, the changes to remove denied won't be able to be automatically sent to the application if there is no provisioning protocol that the application supports. The organization must instead have a process to send the results of a completed review to the application.
In order to permit a wide variety of applications and IT requirements to be addr
|Pattern|Application integration pattern|Steps to prepare for an access review| |:||--| |A| The application supports federated SSO, Azure AD is the only identity provider, and the application doesn't rely upon group or role claims. | In this pattern, you'll configure that the application requires individual application role assignments, and that users are assigned to the application. Then to perform the review, you'll create a single access review for the application, of the users assigned to this application role. When the review completes, if a user was denied, then they will be removed from the application role. Azure AD will then no longer issue that user with federation tokens and the user will be unable to sign into that application.|
-|B|If the application uses group claims in addition to application role assignments.| An application may use Azure AD group membership, distinct from application roles to express finer-grained access. Here, you can choose based on your business requirements either to have the users who have application role assignments reviewed, or to review the users who have group memberships. If the groups do not provide comprehensive access coverage, in particular if users may have access to the application even if they aren't a member of those groups, then we recommend reviewing the application role assignments, as in pattern A above.|
-|C| If the application doesn't rely solely on Azure AD for federated SSO, but does support provisioning via SCIM, or via updates to a SQL table of users or an LDAP directory. | In this pattern, you'll configure Azure AD to provision the users with application role assignments to the application's database or directory, update the application role assignments in Azure AD with a list of the users who currently have access, and then create a single access review of the application role assignments. For more information, see [Governing an application's existing users](identity-governance-applications-existing-users.md) to update the application role assignments in Azure AD.|
+|B|If the application uses group claims in addition to application role assignments.| An application may use AD or Azure AD group membership, distinct from application roles to express finer-grained access. Here, you can choose based on your business requirements either to have the users who have application role assignments reviewed, or to review the users who have group memberships. If the groups do not provide comprehensive access coverage, in particular if users may have access to the application even if they aren't a member of those groups, then we recommend reviewing the application role assignments, as in pattern A above.|
+|C| If the application doesn't rely solely on Azure AD for federated SSO, but does support provisioning via SCIM, or via updates to a SQL table of users or a non-AD LDAP directory. | In this pattern, you'll configure Azure AD to provision the users with application role assignments to the application's database or directory, update the application role assignments in Azure AD with a list of the users who currently have access, and then create a single access review of the application role assignments. For more information, see [Governing an application's existing users](identity-governance-applications-existing-users.md) to update the application role assignments in Azure AD.|
### Other options
The integration patterns listed above are applicable to third party SaaS applica
Now that you have identified the integration pattern for the application, check the application as represented in Azure AD is ready for review. 1. In the Azure portal, click **Azure Active Directory**, click **Enterprise Applications**, and check whether your application is on the [list of enterprise applications](../manage-apps/view-applications-portal.md) in your Azure AD tenant.
-1. If the application is not already listed, then check if the application is available the [application gallery](../manage-apps/overview-application-gallery.md) for applications that can be integrated for federated SSO or provisioning. If it is in the gallery, then use the [tutorials](../saas-apps/tutorial-list.md) to configure the application for federation, and if it supports provisioning, also [configure the application](../app-provisioning/configure-automatic-user-provisioning-portal.md) for provisioning.
-1. One the application is in the list of enterprise applications in your tenant, select the application from the list.
+1. If the application is not already listed, then check if the application is available the [application gallery](../manage-apps/overview-application-gallery.md) for applications that can be integrated for federated SSO or provisioning. If it is in the gallery, then use the [tutorials](../saas-apps/tutorial-list.md) to configure the application for federation, and if it supports provisioning, also [configure the application](../app-provisioning/configure-automatic-user-provisioning-portal.md) for provisioning. If the application uses AD security groups, [add the application for remote access through Application Proxy](../app-proxy/application-proxy-add-on-premises-application.md) and [configure group writeback to AD](../hybrid/how-to-connect-group-writeback-v2.md).
+1. Once the application is in the list of enterprise applications in your tenant, select the application from the list.
1. Change to the **Properties** tab. Verify that the **User assignment required?** option is set to **Yes**. If it's set to **No**, all users in your directory, including external identities, can access the application, and you can't review access to the application. ![Screenshot that shows planning app assignments.](./media/deploy-access-review/6-plan-applications-assignment-required.png) 1. Change to the **Roles and administrators** tab. This tab displays the administrative roles, that give rights to control the representation of the application in Azure AD, not the access rights in the application. For each administrative role that has permissions to allow changing the application integration or assignments, and has an assignment to that administrative role, ensure that only authorized users are in that role.
-1. Change to the **Provisioning** tab. If automatic provisioning isn't configured, then Azure AD won't have a way to notify the application when a user's access is removed if denied during the review. Provisioning might not be necessary for some integration patterns, if the application is federated and solely relies upon Azure AD as its identity provider. However, if your application integration is pattern C, and the application doesn't support federated SSO with Azure AD as its only identity provider, then you'll need to configure provisioning from Azure AD to the application. Provisioning will be necessary so that Azure AD can automatically remove the reviewed users from the application when a review completes, and this removal step can be done through a change sent from Azure AD to the application through SCIM, LDAP or SQL.
+1. Change to the **Provisioning** tab. If automatic provisioning isn't configured, then Azure AD won't have a way to notify the application when a user's access is removed if denied during the review. Provisioning might not be necessary for some integration patterns, if the application is federated and solely relies upon Azure AD as its identity provider, or the application uses AD DS groups. However, if your application integration is pattern C, and the application doesn't support federated SSO with Azure AD as its only identity provider, then you'll need to configure provisioning from Azure AD to the application. Provisioning will be necessary so that Azure AD can automatically remove the reviewed users from the application when a review completes, and this removal step can be done through a change sent from Azure AD to the application through SCIM, LDAP or SQL.
* If this is a gallery application that supports provisioning, [configure the application for provisioning](../app-provisioning/configure-automatic-user-provisioning-portal.md). * If the application is a cloud application and supports SCIM, configure [user provisioning with SCIM](../app-provisioning/use-scim-to-provision-users-and-groups.md).
Now that you have identified the integration pattern for the application, check
1. If the application supports federated SSO, then change to the **Conditional Access** tab. Inspect the enabled policies for this application. If there are policies that are enabled, block access, have users assigned to the policies, but no other conditions, then those users may be already blocked from being able to get federated SSO to the application. 1. Change to the **Users and groups** tab. This list contains all the users who are assigned to the application in Azure AD. If the list is empty, then a review of the application will complete immediately, since there isn't any task for the reviewer to perform.
-1. If your application is integrated with pattern C, then you'll need to confirm that the users in this list are the same as those in the applications' internal data store, prior to starting the review. Azure AD does not automatically import the users or their access rights from an application, but you can [assign users to an application role via PowerShell](../manage-apps/assign-user-or-group-access-portal.md). See [Governing an application's existing users](identity-governance-applications-existing-users.md) for how to bring in users from different application data stores into Azure AD.
+1. If your application is integrated with pattern C, then you'll need to confirm that the users in this list are the same as those in the applications' internal data store, prior to starting the review. Azure AD does not automatically import the users or their access rights from an application, but you can [assign users to an application role via PowerShell](../manage-apps/assign-user-or-group-access-portal.md). See [Governing an application's existing users](identity-governance-applications-existing-users.md) for how to bring in users from different application data stores into Azure AD and assign them to an application role.
1. Check whether all users are assigned to the same application role, such as **User**. If users are assigned to multiple roles, then if you create an access review of the application, then all assignments to all of the application's roles will be reviewed together.
-1. Check the list of directory objects assigned to the roles to confirm that there are no groups assigned to the application roles. It's possible to review this application if there is a group assigned to a role; however, a user who is a member of the group assigned to the role, and whose access was denied, won't be automatically removed from the group. We recommend first converting the application to have direct user assignments, rather than members of groups, so that a user whose access is denied during the access review can have their application role assignment removed automatically.
+1. Check the list of directory objects assigned to the roles to confirm that there are no groups assigned to the application roles. It's possible to review this application if there is a group assigned to a role; however, a user who is a member of the group assigned to the role, and whose access was denied, won't be automatically removed from the group. If the application does not itself rely upon groups, then we recommend first converting the application to have direct user assignments, rather than members of groups, so that a user whose access is denied during the access review can have their application role assignment removed automatically. If the application does rely upon groups, and all of the application's groups are assigned to the same application role, then you'll review the group memberships instead of reviewing the application assignments.
Next, if the application integration also requires one or more groups to be reviewed, as described in pattern B, then check each group is ready for review.
Once the reviews have started, you can monitor their progress, and update the ap
1. If you had previously configured provisioning of users to the application, then when the results are applied, Azure AD will begin deprovisioning denied users from the application. You can [monitor the process of deprovisioning users](../app-provisioning/application-provisioning-when-will-provisioning-finish-specific-user.md). If provisioning indicates an error with the application, you can [download the provisioning log](../reports-monitoring/concept-provisioning-logs.md) to investigate if there was a problem with the application.
+1. If you had configured [group writeback](../enterprise-users/groups-write-back-portal.md) for the reviewed groups, then wait until group writeback completes in Azure AD Connect and the changes propagate to all the domain controllers.
+ 1. If provisioning wasn't configured for your application, then you may need to separately copy the list of denied users to the application. For example, in access reviews for a Windows Server AD-managed group, use this [PowerShell sample script](https://github.com/microsoft/access-reviews-samples/tree/master/AzureADAccessReviewsOnPremises). The script outlines the required Microsoft Graph calls and exports the Windows Server AD PowerShell cmdlets to carry out the changes. 1. If you wish, you can also download a [review history report](access-reviews-downloadable-review-history.md) of completed reviews.
-1. How long a user who has been denied continued access is able to continue to use a federated application will depend upon the application's own session lifetime, and on the access token lifetime. To learn more about controlling the lifetime of access tokens, see [configurable token lifetimes](../develop/active-directory-configurable-token-lifetimes.md).
+1. How long a user who has been denied continued access is able to continue to use a federated application will depend upon the application's own session lifetime, and on the access token lifetime. If the applications used Kerberos, since Kerberos caches the group memberships of a user when they sign into a domain, the users may continue to have access until their Kerberos tickets expire. To learn more about controlling the lifetime of access tokens, see [configurable token lifetimes](../develop/active-directory-configurable-token-lifetimes.md).
## Next steps
active-directory Identity Governance Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/governance/identity-governance-overview.md
# What is Azure AD Identity Governance?
-Azure Active Directory (Azure AD) Identity Governance allows you to balance your organization's need for security and employee productivity with the right processes and visibility. It provides you with capabilities to ensure that the right people have the right access to the right resources. These and related Azure AD and Enterprise Mobility + Security features allows you to mitigate access risk by protecting, monitoring, and auditing access to critical assets -- while ensuring employee and business partner productivity.
+Azure Active Directory (Azure AD) Identity Governance allows you to balance your organization's need for security and employee productivity with the right processes and visibility. It provides you with capabilities to ensure that the right people have the right access to the right resources. These and related Azure AD and Enterprise Mobility + Security features allows you to mitigate access risk by protecting, monitoring, and auditing access to critical assets while ensuring employee and business partner productivity.
Identity Governance gives organizations the ability to do the following tasks across employees, business partners and vendors, and across services and applications both on-premises and in clouds:
When a user attempts to access applications, Azure AD enforces [Conditional Acce
## Privileged access lifecycle
-Historically, privileged access has been described by other vendors as a separate capability from Identity Governance. However, at Microsoft, we think governing privileged access is a key part of Identity Governance -- especially given the potential for misuse associated with those administrator rights can cause to an organization. The employees, vendors, and contractors that take on administrative rights need to be governed.
+Historically, privileged access has been described by other vendors as a separate capability from Identity Governance. However, at Microsoft, we think governing privileged access is a key part of Identity Governance especially given the potential for misuse associated with those administrator rights can cause to an organization. The employees, vendors, and contractors that take on administrative rights need to be governed.
![Privileged access lifecycle](./media/identity-governance-overview/privileged-access-lifecycle.png)
active-directory How To Connect Group Writeback V2 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/hybrid/how-to-connect-group-writeback-v2.md
To enable group writeback via PowerShell:
Set-ADSyncScheduler -SyncCycleEnabled $true ```
-You've now enabled the group writeback feature.
+You've now enabled the group writeback feature, and can [select the groups for writeback](../enterprise-users/groups-write-back-portal.md).
### Optional Configuration
Limitations and known issues specific to Group Writeback:
## Next steps
-Learn more about [Integrating your on-premises identities with Azure Active Directory](whatis-hybrid-identity.md).
+- Configure [group writeback in the Azure Active Directory Admin Center](../enterprise-users/groups-write-back-portal.md)
+- Learn more about [Integrating your on-premises identities with Azure Active Directory](whatis-hybrid-identity.md).
active-directory Delete Application Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/manage-apps/delete-application-portal.md
Title: 'Quickstart: Delete an enterprise application'
+ Title: 'Delete an enterprise application'
description: Delete an enterprise application in Azure Active Directory. -+ Previously updated : 03/24/2022 Last updated : 07/28/2022 -
+zone_pivot_groups: enterprise-apps-all
+ #Customer intent: As an administrator of an Azure AD tenant, I want to delete an enterprise application.
-# Quickstart: Delete an enterprise application
+# Delete an enterprise application
+
+In this article, you learn how to delete an enterprise application that was added to your Azure Active Directory (Azure AD) tenant.
-In this quickstart, you use the Azure Active Directory Admin Center to delete an application that was added to your Azure Active Directory (Azure AD) tenant.
+When you delete and enterprise application, it will be held in a suspended state in the recycle bin for 30 days. During the 30 days, you can [Restore the application](restore-application.md). Deleted items are automatically hard deleted after the 30-day period. For more information on frequently asked questions about deletion and recovery of applications, see [Deleting and recovering applications FAQs](delete-recover-faq.yml).
-It is recommended that you use a non-production environment to test the steps in this quickstart.
## Prerequisites
To delete an enterprise application, you need:
- An Azure AD user account. If you don't already have one, you can [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F). - One of the following roles: Global Administrator, Cloud Application Administrator, Application Administrator, or owner of the service principal.-- Completion of the steps in [Quickstart: Add an enterprise application](add-application-portal.md).
+- An [enterprise application added to your tenant](add-application-portal.md)
## Delete an enterprise application
-To delete an enterprise application:
-1. Go to the [Azure Active Directory Admin Center](https://aad.portal.azure.com) and sign in using one of the roles listed in the prerequisites.
+1. Sign in to the [Azure AD portal](https://portal.azure.com) and sign in using one of the roles listed in the prerequisites.
1. In the left menu, select **Enterprise applications**. The **All applications** pane opens and displays a list of the applications in your Azure AD tenant. Search for and select the application that you want to delete. For example, **Azure AD SAML Toolkit 1**. 1. In the **Manage** section of the left menu, select **Properties**. 1. At the top of the **Properties** pane, select **Delete**, and then select **Yes** to confirm you want to delete the application from your Azure AD tenant. :::image type="content" source="media/delete-application-portal/delete-application.png" alt-text="Delete an enterprise application.":::
-## Clean up resources
++
+> [!IMPORTANT]
+> Make sure you're using the AzureAD module. This is important if you've installed both the [AzureAD](/powershell/module/azuread/?preserve-view=true&view=azureadps-2.0) module and the AzureADPreview module.
+1. Run the following commands:
+
+ ```powershell
+ Remove-Module AzureADPreview
+ Import-Module AzureAD
+ ```
+
+1. Connect to Azure AD PowerShell:
+
+ ```powershell
+ Connect-AzureAD
+ ```
+1. Get the list of enterprise applications in your tenant.
+
+ ```powershell
+ Get-AzureADServicePrincipal
+ ```
+1. Record the object ID of the enterprise app you want to delete.
+1. Delete the enterprise application.
+
+ ```powershell
+ Remove-AzureADServicePrincipal $ObjectId 'd4142c52-179b-4d31-b5b9-08940873507b'
+ ```
++
+1. Connect to Microsoft Graph PowerShell:
+
+ ```powershell
+ Connect-MgGraph -Scopes 'Application.Read.All'
+ ```
+
+1. Get the list of enterprise applications in your tenant.
+
+ ```powershell
+ Get-MgServicePrincipal
+ ```
+1. Record the object ID of the enterprise app you want to delete.
+1. Delete the enterprise application.
+
+ ```powershell
+ Remove-MgServicePrincipal -ServicePrincipalId 'd4142c52-179b-4d31-b5b9-08940873507b'
++++
+Delete an enterprise application using [Graph Explorer](https://developer.microsoft.com/graph/graph-explorer).
+1. To get the list of applications in your tenant, run the following query.
+
+ ```http
+ GET /servicePrincipals
+ ```
+1. Record the ID of the enterprise app you want to delete.
+1. Delete the enterprise application.
+
+ ```http
+ DELETE /servicePrincipals/{id}
+ ```
-When you are done with this quickstart series, consider deleting the application to clean up your test tenant. Deleting the application was covered in this quickstart.
## Next steps
-Learn more about planning a single sign-on deployment.
-> [!div class="nextstepaction"]
-> [Plan single sign-on deployment](plan-sso-deployment.md)
+- [Restore a deleted enterprise application](restore-application.md)
active-directory Recover Deleted Apps Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/manage-apps/recover-deleted-apps-faq.md
- Title: Frequently asked questions about recovering deleted apps-
-description: Find answers to frequently asked questions (FAQs) about recovering deleted apps and service principals.
------- Previously updated : 05/24/2022------
-# Recover deleted applications in Azure Active Directory FAQs
-
-This page answers frequently asked questions about deleting and restoring deleted application registrations and service principals.
-
-## When I create applications, I'm getting Directory_QuotaExceeded error. How can I avoid this problem?
-A non-admin user can create no more than 250 Azure AD resources that include applications and service principals. Both active resources and deleted resources that are available to restore count toward this quota. Even if you delete more applications that you don't need, they'll still add count to the quota. Hence, to free up the quota, you need to [permanently delete](/graph/api/directory-deleteditems-delete?tabs=http) objects in the deleted items container. You can learn more about the service limits through [this link](/azure/azure-resource-manager/management/azure-subscription-service-limits?msclkid=6cb6cc54c68711ec93eb9539fce3cc28#active-directory-limits).
-
-The quota limit set for Azure AD resources is applicable when creating applications or service principals using a delegated flow such as using Azure AD app registrations or Enterprise apps portal. Creating applications using the Microsoft Graph API programmatically using application flow won't have this restriction.
-
-## Where can I find all the deleted applications and service principals?
-
-Soft-deleted application and service principal objects go into the [deleted items](/graph/api/resources/directory?tabs=http) container and remain available to restore for up to 30 days. After 30 days, they're permanently deleted, and this frees up the quota.
-You find the deleted applications by using one of the following approaches:
--- Using the Azure portal
-
-Recently deleted application objects can be found under the **Deleted applications** tab on the App registrations blade of Azure portal.
-
- :::image type="content" source="media/delete-application-portal/recover-deleted-apps.png" alt-text="Screenshot shows list of deleted items.":::
-
-- Using the Microsoft Graph API-
-Recently deleted application and service principal objects can be found using the [List deletedItems](/graph/api/directory-deleteditems-list?tabs=http) API.
--- Using PowerShell-
-Recently deleted application and service principal objects can be found using the
-[Get-AzureADMSDeletedDirectoryObject](/powershell/module/azuread/get-azureadmsdeleteddirectoryobject?tabs=http) cmdlet.
-
-## How do I restore deleted applications or service principals?
--- Using Microsoft Graph API-
-Deleted objects can be restored using the [Restore deleted item](/graph/api/directory-deleteditems-restore?tabs=http) API.
--- Using PowerShell-
-Deleted objects can be restored using the [Restore-AzureADMSDeletedDirectoryObject](/powershell/module/azuread/restore-azureadmsdeleteddirectoryobject?tabs=http) cmdlet.
-
-## How do I permanently delete soft deleted applications or service principals?
--- Using the Microsoft Graph API-
-Soft deleted objects can be permanently deleted by using the [Permanently delete an item from deleted items](/graph/api/directory-deleteditems-delete?tabs=http) API.
--- Using PowerShell-
-Soft deleted objects can be permanently deleted using the [Remove-AzureADMSDeletedDirectoryObject](/powershell/module/azuread/remove-azureadmsdeleteddirectoryobject?tabs=http) cmdlet.
-
-## Can I configure the interval in which applications and service principals are permanently deleted by Azure AD?
-
-No. You canΓÇÖt configure the periodicity of hard deletion.
-
-## I restored a deleted application using the App registrations portal experience. I don't see the SAML SSO configurations I made to the app prior to deletion.
-
-The SAML SSO configurations are stored on the service principal object. When you restore an application from the App registrations UI, it recovers the app object but creates a new service principal. Hence, the SAML SSO configurations done earlier to the app are lost when restoring a deleted application using the App registrations UI.
-
-To correct this problem, delete the new service principal the app registrations experience created and restore the original service principal using the [Microsoft Graph API](/graph/api/directory-deleteditems-restore?tabs=http) or the [Microsoft Graph PowerShell cmdlet](/powershell/module/azuread/restore-azureadmsdeleteddirectoryobject?tabs=http).
-
-If you recorded the object ID of the service principal before deleting the application, use the [Restore deleted item](/graph/api/directory-deleteditems-restore?tabs=http) API to recover the service principal. Otherwise, use the [list deleted items](/graph/api/directory-deleteditems-list?tabs=http) API to fetch the deleted service principal and filter the results by the client's application ID (**appId**) property using the following syntax:
-
-`https://graph.microsoft.com/v1.0/directory/deletedItems/microsoft.graph.servicePrincipal?$filter=appId eq '{appId}'`
-
-## Why canΓÇÖt I recover managed identities?
-
-[Managed identities](../managed-identities-azure-resources/overview.md) are a special type of service principals. Deleted managed identities canΓÇÖt be recovered currently.
-
-## I canΓÇÖt see the provisioning data from a recovered service principal. How can I recover it back?
-
-After recovering an SP, you may initially see the error in the following screenshot. This issue will resolve itself between 40 mins and 1 day. If you would like the provisioning job to start immediately, you can hit restart to force the provisioning service to run again. Hitting restart will trigger an initial cycle that can take time for customers with 100 K+ users or group memberships.
-
-
-## I recovered my application that was configured for application proxy. I canΓÇÖt see app proxy configurations after the recovery. How can I recover it back?
-
-App proxy configurations can't be recovered through the portal UI. Use the API to recover app proxy settings. Expect a delay of up to 24 hours as the app proxy data gets synced back.
-
-## I canΓÇÖt see the policies I set on the service principal object after the recovery. How can I recover them?
-
-Policies can't be recovered currently. When you restore a service principal, you'll have to configure the policies again.
-
-## Next steps
--- [Delete a service principal](delete-application-portal.md)-- [Delete an application registration](../develop/howto-restore-app.md)
active-directory Restore Application https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/manage-apps/restore-application.md
+
+ Title: 'Restore a soft deleted enterprise application'
+description: Restore a soft deleted enterprise application in Azure Active Directory.
+++++++ Last updated : 07/28/2022+++
+zone_pivot_groups: enterprise-apps-minus-portal
+#Customer intent: As an administrator of an Azure AD tenant, I want to restore a soft deleted enterprise application.
++
+# Restore an enterprise application in Azure AD
+
+In this article, you'll learn how to restore a soft deleted enterprise application in your Azure Active Directory (Azure AD) tenant. Soft deleted enterprise applications can be restored from the recycle bin within the first 30 days after their deletion. After the 30-day window, the enterprise application is permanently deleted and can't be restored.
+
+When an [application registration is deleted](../develop/howto-remove-app.md) in its home tenant through app registrations in the Azure portal, the enterprise application, which is its corresponding service principal also gets deleted. Restoring the deleted application registration through the Azure portal won't restore its corresponding service principal, but will instead create a new one.
+
+Currently, the [soft deleted enterprise applications](delete-application-portal.md) can't be viewed or restored through the Azure portal. Therefore, if you had configurations on the previous enterprise application, you can't restore them through the Azure portal. To recover your previous configurations, first delete the enterprise application that was restored through the Azure portal, then follow the steps in this article to recover the soft deleted enterprise application. For more information on frequently asked questions about deletion and recovery of applications, see [Deleting and recovering applications FAQs](delete-recover-faq.yml.
++
+## Prerequisites
+
+To restore an enterprise application, you need:
+
+- An Azure AD user account. If you don't already have one, you can [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- One of the following roles: Global Administrator, Cloud Application Administrator, Application Administrator, or owner of the service principal.
+- A [soft deleted enterprise application](delete-application-portal.md) in your tenant.
+
+## View restorable enterprise applications
++
+> [!IMPORTANT]
+> Make sure you're using the AzureAD module. This is important if you've installed both the [AzureAD](/powershell/module/azuread/?preserve-view=true&view=azureadps-2.0) module and the AzureADPreview module.
+1. Run the following commands:
+
+ ```powershell
+ Remove-Module AzureADPreview
+ Import-Module AzureAD
+ ```
+
+1. Connect to Azure AD PowerShell:
+
+ ```powershell
+ Connect-AzureAD
+ ```
+
+1. To view the recently deleted enterprise application, run the following command:
+
+ ```powershell
+ Get-AzureADMSDeletedDirectoryObject -Id 'd4142c52-179b-4d31-b5b9-08940873507b'
+ ```
++
+1. Run `connect-MgGraph -Scopes "Application.ReadWrite.All"` and sign in with a Global Admin user account.
+
+1. To view the recently deleted enterprise applications, run the following command:
+
+ ```powershell
+ Get-MgDirectoryDeletedItem -DirectoryObjectId 'd4142c52-179b-4d31-b5b9-08940873507b'
+ ```
++
+View and restore recently deleted enterprise applications using [Graph Explorer](https://developer.microsoft.com/graph/graph-explorer).
+
+To get the list of deleted enterprise applications in your tenant, run the following query.
+
+ ```http
+ GET https://graph.microsoft.com/v1.0/directory/deletedItems/microsoft.graph.servicePrincipal
+ ```
+Record the ID of the enterprise application you want to restore.
++
+## Restore an enterprise application
++
+1. To restore the enterprise application, run the following command:
++
+ ```powershell
+ Restore-AzureADMSDeletedDirectoryObject -Id 'd4142c52-179b-4d31-b5b9-08940873507b'
+ ```
++
+1. To restore the enterprise application, run the following command:
+
+ ```powershell
+ Restore-MgDirectoryObject -DirectoryObjectId 'd4142c52-179b-4d31-b5b9-08940873507b'
+ ```
+
+
+1. To restore the enterprise application, run the following query:
+
+ ```http
+ POST https://graph.microsoft.com/v1.0/directory/deletedItems/{id}/restore
+ ```
+
+## Permanently delete an enterprise application
+
+>[!WARNING]
+> Permanently deleting an enterprise application is an irreversible action. Any present configurations on the app will be completely lost. Carefully review the details of the enterprise application to be sure you still want to hard delete it.
++
+To permanently delete a soft deleted enterprise application, run the following command:
+
+```powershell
+Remove-AzureADMSDeletedDirectoryObject -Id 'd4142c52-179b-4d31-b5b9-08940873507b'
+```
+
+
+1. To permanently delete the soft deleted enterprise application, run the following command:
+
+ ```powershell
+ Remove-MgDirectoryDeletedItem -DirectoryObjectId 'd4142c52-179b-4d31-b5b9-08940873507b'
+ ```
+++
+To permanently delete a soft deleted enterprise application, run the following query in Microsoft Graph explorer
+
+```http
+DELETE https://graph.microsoft.com/v1.0/directory/deletedItems/{object-id}
+```
++
+## Next steps
+
+- [Recovery and deletion FAQ](delete-recover-faq.yml)
+- [Applications and service principals](../develop/app-objects-and-service-principals.md)
active-directory Managed Identities Status https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/managed-identities-azure-resources/managed-identities-status.md
The following Azure services support managed identities for Azure resources:
| Azure Service Bus | [Authenticate a managed identity with Azure Active Directory to access Azure Service Bus resources](../../service-bus-messaging/service-bus-managed-service-identity.md) | | Azure Service Fabric | [Using Managed identities for Azure with Service Fabric](../../service-fabric/concepts-managed-identity.md) | | Azure SignalR Service | [Managed identities for Azure SignalR Service](../../azure-signalr/howto-use-managed-identity.md) |
-| Azure Spring Cloud | [How to enable system-assigned managed identity for Azure Spring Cloud application](../../spring-cloud/how-to-enable-system-assigned-managed-identity.md) |
+| Azure Spring Apps | [Enable system-assigned managed identity for an application in Azure Spring Apps](../../spring-apps/how-to-enable-system-assigned-managed-identity.md) |
| Azure SQL | [Azure SQL Transparent Data Encryption with customer-managed key](/azure/azure-sql/database/transparent-data-encryption-byok-overview) | | Azure SQL Managed Instance | [Azure SQL Transparent Data Encryption with customer-managed key](/azure/azure-sql/database/transparent-data-encryption-byok-overview) | | Azure Stack Edge | [Manage Azure Stack Edge secrets using Azure Key Vault](../../databox-online/azure-stack-edge-gpu-activation-key-vault.md#recover-managed-identity-access)
active-directory Overview For Developers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/managed-identities-azure-resources/overview-for-developers.md
dr.Close();
#### [Java](#tab/java)
-If you use [Azure Spring Apps](../../spring-cloud/index.yml), you can connect to Azure SQL Database with a managed identity without needing to make any changes to your code.
+If you use [Azure Spring Apps](../../spring-apps/index.yml), you can connect to Azure SQL Database with a managed identity without needing to make any changes to your code.
Open the `src/main/resources/application.properties` file, and add `Authentication=ActiveDirectoryMSI;` at the end of the following line. Be sure to use the correct value for `$AZ_DATABASE_NAME` variable.
Open the `src/main/resources/application.properties` file, and add `Authenticati
spring.datasource.url=jdbc:sqlserver://$AZ_DATABASE_NAME.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryMSI; ```
-Read more about how to [use a managed identity to connect Azure SQL Database to an Azure Spring Apps app](../../spring-cloud/connect-managed-identity-to-azure-sql.md).
+Read more about how to [use a managed identity to connect Azure SQL Database to an Azure Spring Apps app](../../spring-apps/connect-managed-identity-to-azure-sql.md).
active-directory Groups Assign Member Owner https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/privileged-identity-management/groups-assign-member-owner.md
na Previously updated : 06/24/2022 Last updated : 07/29/2022
Follow these steps to make a user eligible to be a member or owner of a privileg
1. Sign in to the [Azure AD admin center](https://aad.portal.azure.com/) with a user in the [Global Administrator](../roles/permissions-reference.md#global-administrator) role, the Privileged Role Administrator role, or the group Owner role.
-1. Select **Groups** and then select the role-assignable group you want to manage. You can search or filter the list.
+1. Select **Groups** and then select the [role-assignable group](concept-privileged-access-versus-role-assignable.md) you want to manage. You can search or filter the list.
![find a role-assignable group to manage in PIM](./media/groups-assign-member-owner/groups-list-in-azure-ad.png)
Follow these steps to make a user eligible to be a member or owner of a privileg
- **Active** assignments don't require the member to perform any action to use the role. Members assigned as active have the privileges assigned to the role at all times.
-1. If the assignment should be permanent (permanently eligible or permanently assigned), select the **Permanently** checkbox. Depending on your organization's settings, the check box might not appear or might not be editable.
+1. If the assignment should be permanent (permanently eligible or permanently assigned), select the **Permanently** checkbox. Depending on your organization's settings, the check box might not appear or might not be editable. For more information, check out the [Configure privileged access group settings](groups-role-settings.md#assignment-duration) article.
1. When finished, select **Assign**.
active-directory Pim Configure https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/privileged-identity-management/pim-configure.md
Previously updated : 10/07/2021 Last updated : 07/29/2022
Privileged Identity Management provides time-based and approval-based role activ
Once you set up Privileged Identity Management, you'll see **Tasks**, **Manage**, and **Activity** options in the left navigation menu. As an administrator, you'll choose between options such as managing **Azure AD roles**, managing **Azure resource** roles, or privileged access groups. When you choose what you want to manage, you see the appropriate set of options for that option.
-![Screenshot of Privileged Identity Management in the Azure portal](./media/pim-configure/pim-quickstart.png)
+![Screenshot of Privileged Identity Management in the Azure portal.](./media/pim-configure/pim-quickstart.png)
## Who can do what? For Azure AD roles in Privileged Identity Management, only a user who is in the Privileged Role Administrator or Global Administrator role can manage assignments for other administrators. Global Administrators, Security Administrators, Global Readers, and Security Readers can also view assignments to Azure AD roles in Privileged Identity Management.
-For Azure resource roles in Privileged Identity Management, only a subscription administrator, a resource Owner, or a resource User Access administrator can manage assignments for other administrators. Users who are Privileged Role Administrators, Security Administrators, or Security Readers do not by default have access to view assignments to Azure resource roles in Privileged Identity Management.
+For Azure resource roles in Privileged Identity Management, only a subscription administrator, a resource Owner, or a resource User Access administrator can manage assignments for other administrators. Users who are Privileged Role Administrators, Security Administrators, or Security Readers don't by default have access to view assignments to Azure resource roles in Privileged Identity Management.
## Terminology
To better understand Privileged Identity Management and its documentation, you s
| time-bound eligible | Duration | A role assignment where a user is eligible to activate the role only within start and end dates. | | time-bound active | Duration | A role assignment where a user can use the role only within start and end dates. | | just-in-time (JIT) access | | A model in which users receive temporary permissions to perform privileged tasks, which prevents malicious or unauthorized users from gaining access after the permissions have expired. Access is granted only when users need it. |
-| principle of least privilege access | | A recommended security practice in which every user is provided with only the minimum privileges needed to accomplish the tasks they are authorized to perform. This practice minimizes the number of Global Administrators and instead uses specific administrator roles for certain scenarios. |
+| principle of least privilege access | | A recommended security practice in which every user is provided with only the minimum privileges needed to accomplish the tasks they're authorized to perform. This practice minimizes the number of Global Administrators and instead uses specific administrator roles for certain scenarios. |
-## Extend and renew assignments
+## Role assignment overview
-After you set up your time-bound owner or member assignments, the first question you might ask is what happens if an assignment expires? In this new version, we provide two options for this scenario:
+The PIM role assignments give you a secure way to grant access to resources in your organization. This section describes the assignment process. It includes assign roles to members, activate assignments, approve or deny requests, extend and renew assignments.
-- Extend ΓÇô When a role assignment nears expiration, the user can use Privileged Identity Management to request an extension for the role assignment-- Renew ΓÇô When a role assignment has already expired, the user can use Privileged Identity Management to request a renewal for the role assignment
+PIM keeps you informed by sending you and other participants [email notifications](pim-email-notifications.md). These emails might also include links to relevant tasks, such activating, approve or deny a request.
+
+The following screenshot shows an email message sent by PIM. The email informs Patti that Alex updated a role assignment for Emily.
+
+![Screenshot shows an email message sent by Privileged Identity Management.](./media/pim-configure/pim-email.png)
+
+### Assign
+
+The assignment process starts by assign roles to members. To grant access to a resource, the administrator assigns roles to users, groups, service principals, or managed identities. The assignment includes the following data:
+
+- The members or owners to assign the role.
+- The scope of the assignment. The scope limits the assigned role to a particular set of resources.
+- The type of the assignment
+ - **Eligible** assignments require the member of the role to perform an action to use the role. Actions might include activation, or requesting approval from designated approvers.
+ - **Active** assignments don't require the member to perform any action to use the role. Members assigned as active have the privileges assigned to the role.
+- The duration of the assignment, using start and end dates or permanent. For eligible assignments, the members can activate or requesting approval during the start and end dates. For active assignments, the members can use the assign role during this period of time.
+
+The following screenshot shows how administrator assigns a role to members.
+
+![Screenshot of Privileged Identity Management role assignment.](./media/pim-configure/role-assignment.png)
++
+For more information, check out the following articles: [Assign Azure AD roles](pim-how-to-add-role-to-user.md), [Assign Azure resource roles](pim-resource-roles-assign-roles.md), and [Assign eligibility for a privileged access group](groups-assign-member-owner.md)
+
+### Activate
+
+If users have been made eligible for a role, then they must activate the role assignment before using the role. To activate the role, users select specific activation duration within the maximum (configured by administrators), and the reason for the activation request.
+
+The following screenshot shows how members activate their role to a limited time.
+
+![Screenshot of Privileged Identity Management role activation.](./media/pim-configure/role-activation.png)
+
+If the role requires [approval](pim-resource-roles-approval-workflow.md) to activate, a notification will appear in the upper right corner of the user's browser informing them the request is pending approval. If an approval isn't required, the member can start using the role.
+
+For more information, check out the following articles: [Activate Azure AD roles](pim-how-to-activate-role.md), [Activate my Azure resource roles](pim-resource-roles-activate-your-roles.md), and [Activate my privileged access group roles](groups-activate-roles.md)
+
+### Approve or deny
+
+Delegated approvers receive email notifications when a role request is pending their approval. Approvers can view, approve or deny these pending requests in PIM. After the request has been approved, the member can start using the role. For example, if a user or a group was assigned with Contribution role to a resource group, they'll be able to manage that particular resource group.
+
+For more information, check out the following articles: [Approve or deny requests for Azure AD roles](azure-ad-pim-approval-workflow.md), [Approve or deny requests for Azure resource roles](pim-resource-roles-approval-workflow.md), and [Approve activation requests for privileged access group](groups-approval-workflow.md)
+
+### Extend and renew assignments
+
+After administrators set up time-bound owner or member assignments, the first question you might ask is what happens if an assignment expires? In this new version, we provide two options for this scenario:
+
+- **Extend** ΓÇô When a role assignment nears expiration, the user can use Privileged Identity Management to request an extension for the role assignment
+- **Renew** ΓÇô When a role assignment has already expired, the user can use Privileged Identity Management to request a renewal for the role assignment
Both user-initiated actions require an approval from a Global Administrator or Privileged Role Administrator. Admins don't need to be in the business of managing assignment expirations. You can just wait for the extension or renewal requests to arrive for simple approval or denial.
+For more information, check out the following articles: [Extend or renew Azure AD role assignments](pim-how-to-renew-extend.md), [Extend or renew Azure resource role assignments](pim-resource-roles-renew-extend.md), and [Extend or renew privileged access group assignments](groups-renew-extend.md)
+ ## Scenarios Privileged Identity Management supports the following scenarios:
With the privileged access groups preview, you can give workload-specific admini
## Invite guest users and assign Azure resource roles in Privileged Identity Management
-Azure Active Directory (Azure AD) guest users are part of the business-to-business (B2B) collaboration capabilities within Azure AD so that you can manage external guest users and vendors as guests in Azure AD. For example, you can use these Privileged Identity Management features for Azure identity tasks with guests such as assigning access to specific Azure resources, specifying assignment duration and end date, or requiring two-step verification on active assignment or activation. For more information on how to invite a guest to your organization and manage their access , see [Add B2B collaboration users in the Azure AD portal](../external-identities/add-users-administrator.md).
+Azure Active Directory (Azure AD) guest users are part of the business-to-business (B2B) collaboration capabilities within Azure AD so that you can manage external guest users and vendors as guests in Azure AD. For example, you can use these Privileged Identity Management features for Azure identity tasks with guests such as assigning access to specific Azure resources, specifying assignment duration and end date, or requiring two-step verification on active assignment or activation. For more information on how to invite a guest to your organization and manage their access, see [Add B2B collaboration users in the Azure AD portal](../external-identities/add-users-administrator.md).
### When would you invite guests?
active-directory Pim How To Configure Security Alerts https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/privileged-identity-management/pim-how-to-configure-security-alerts.md
Previously updated : 06/24/2022 Last updated : 07/29/2022
# Configure security alerts for Azure AD roles in Privileged Identity Management
-Privileged Identity Management (PIM) generates alerts when there is suspicious or unsafe activity in your organization in Azure Active Directory (Azure AD), part of Microsoft Entra. When an alert is triggered, it shows up on the Privileged Identity Management dashboard. Select the alert to see a report that lists the users or roles that triggered the alert.
+Privileged Identity Management (PIM) generates alerts when there's suspicious or unsafe activity in your organization in Azure Active Directory (Azure AD), part of Microsoft Entra. When an alert is triggered, it shows up on the Privileged Identity Management dashboard. Select the alert to see a report that lists the users or roles that triggered the alert.
-![Screenshot that shows the "Alerts" page with a list of alerts and their severity.](./media/pim-how-to-configure-security-alerts/view-alerts.png)
+![Screenshot that shows the alerts page with a list of alerts and their severity.](./media/pim-how-to-configure-security-alerts/view-alerts.png)
## Security alerts This section lists all the security alerts for Azure AD roles, along with how to fix and how to prevent. Severity has the following meaning: - **High**: Requires immediate action because of a policy violation.-- **Medium**: Does not require immediate action but signals a potential policy violation.-- **Low**: Does not require immediate action but suggests a preferable policy change.
+- **Medium**: Doesn't require immediate action but signals a potential policy violation.
+- **Low**: Doesn't require immediate action but suggests a preferable policy change.
### Administrators aren't using their privileged roles
Severity: **Low**
| | Description | | | |
-| **Why do I get this alert?** | Users that have been assigned privileged roles they don't need increases the chance of an attack. It is also easier for attackers to remain unnoticed in accounts that are not actively being used. |
-| **How to fix?** | Review the users in the list and remove them from privileged roles that they do not need. |
+| **Why do I get this alert?** | Users that have been assigned privileged roles they don't need increases the chance of an attack. It's also easier for attackers to remain unnoticed in accounts that aren't actively being used. |
+| **How to fix?** | Review the users in the list and remove them from privileged roles that they don't need. |
| **Prevention** | Assign privileged roles only to users who have a business justification. </br>Schedule regular [access reviews](./pim-create-azure-ad-roles-and-resource-roles-review.md) to verify that users still need their access. | | **In-portal mitigation action** | Removes the account from their privileged role. | | **Trigger** | Triggered if a user goes over a specified number of days without activating a role. |
Severity: **Low**
| | Description | | | |
-| **Why do I get this alert?** | The current Azure AD organization does not have Azure AD Premium P2. |
+| **Why do I get this alert?** | The current Azure AD organization doesn't have Azure AD Premium P2. |
| **How to fix?** | Review information about [Azure AD editions](../fundamentals/active-directory-whatis.md). Upgrade to Azure AD Premium P2. | ### Potential stale accounts in a privileged role
Severity: **Medium**
| | Description | | | |
-| **Why do I get this alert?** | This alert is no longer triggered based on the last password change date of for an account. This alert is for accounts in a privileged role that haven't signed in during the past *n* days, where *n* is a number of days that is configurable between 1-365 days . These accounts might be service or shared accounts that aren't being maintained and are vulnerable to attackers. |
+| **Why do I get this alert?** | This alert is no longer triggered based on the last password change date of for an account. This alert is for accounts in a privileged role that haven't signed in during the past *n* days, where *n* is a number of days that is configurable between 1-365 days. These accounts might be service or shared accounts that aren't being maintained and are vulnerable to attackers. |
| **How to fix?** | Review the accounts in the list. If they no longer need access, remove them from their privileged roles. |
-| **Prevention** | Ensure that accounts that are shared are rotating strong passwords when there is a change in the users that know the password. </br>Regularly review accounts with privileged roles using [access reviews](./pim-create-azure-ad-roles-and-resource-roles-review.md) and remove role assignments that are no longer needed. |
+| **Prevention** | Ensure that accounts that are shared are rotating strong passwords when there's a change in the users that know the password. </br>Regularly review accounts with privileged roles using [access reviews](./pim-create-azure-ad-roles-and-resource-roles-review.md) and remove role assignments that are no longer needed. |
| **In-portal mitigation action** | Removes the account from their privileged role. |
-| **Best practices** | Shared, service, and emergency access accounts that authenticate using a password and are assigned to highly privileged administrative roles such as Global administrator or Security administrator should have their passwords rotated for the following cases:<ul><li>After a security incident involving misuse or compromise of administrative access rights</li><li>After any user's privileges are changed so that they are no longer an administrator (for example, after an employee who was an administrator leaves IT or leaves the organization)</li><li>At regular intervals (for example, quarterly or yearly), even if there was no known breach or change to IT staffing</li></ul>Since multiple people have access to these accounts' credentials, the credentials should be rotated to ensure that people that have left their roles can no longer access the accounts. [Learn more about securing accounts](../roles/security-planning.md) |
+| **Best practices** | Shared, service, and emergency access accounts that authenticate using a password and are assigned to highly privileged administrative roles such as Global administrator or Security administrator should have their passwords rotated for the following cases:<ul><li>After a security incident involving misuse or compromise of administrative access rights</li><li>After any user's privileges are changed so that they're no longer an administrator (for example, after an employee who was an administrator leaves IT or leaves the organization)</li><li>At regular intervals (for example, quarterly or yearly), even if there was no known breach or change to IT staffing</li></ul>Since multiple people have access to these accounts' credentials, the credentials should be rotated to ensure that people that have left their roles can no longer access the accounts. [Learn more about securing accounts](../roles/security-planning.md) |
### Roles are being assigned outside of Privileged Identity Management
Severity: **High**
| | Description | | | |
-| **Why do I get this alert?** | Privileged role assignments made outside of Privileged Identity Management are not properly monitored and may indicate an active attack. |
+| **Why do I get this alert?** | Privileged role assignments made outside of Privileged Identity Management aren't properly monitored and may indicate an active attack. |
| **How to fix?** | Review the users in the list and remove them from privileged roles assigned outside of Privileged Identity Management. You can also enable or disable both the alert and its accompanying email notification in the alert settings. | | **Prevention** | Investigate where users are being assigned privileged roles outside of Privileged Identity Management and prohibit future assignments from there. | | **In-portal mitigation action** | Removes the user from their privileged role. |
Severity: **Low**
| | Description | | | | | **Why do I get this alert?** | Global administrator is the highest privileged role. If a Global Administrator is compromised, the attacker gains access to all of their permissions, which puts your whole system at risk. |
-| **How to fix?** | Review the users in the list and remove any that do not absolutely need the Global administrator role. </br>Assign lower privileged roles to these users instead. |
+| **How to fix?** | Review the users in the list and remove any that don't absolutely need the Global administrator role. </br>Assign lower privileged roles to these users instead. |
| **Prevention** | Assign users the least privileged role they need. | | **In-portal mitigation action** | Removes the account from their privileged role. |
-| **Trigger** | Triggered if two different criteria are met, and you can configure both of them. First, you need to reach a certain threshold of Global administrator role assignments. Second, a certain percentage of your total role assignments must be Global administrators. If you only meet one of these measurements, the alert does not appear. |
+| **Trigger** | Triggered if two different criteria are met, and you can configure both of them. First, you need to reach a certain threshold of Global administrator role assignments. Second, a certain percentage of your total role assignments must be Global administrators. If you only meet one of these measurements, the alert doesn't appear. |
| **Minimum number of Global Administrators** | This setting specifies the number of Global Administrator role assignments, from 2 to 100, that you consider to be too few for your Azure AD organization. | | **Percentage of Global Administrators** | This setting specifies the minimum percentage of administrators who are Global administrators, from 0% to 100%, below which you do not want your Azure AD organization to dip. |
Severity: **Low**
## Customize security alert settings
-On the **Alerts** page, select **Setting**.
+Follow these steps to configure security alerts for Azure AD roles in Privileged Identity Management:
-![Alerts page with Settings highlighted](media/pim-how-to-configure-security-alerts/alert-settings.png)
+1. Sign in to the [Azure portal](https://portal.azure.com/).
-Customize settings on the different alerts to work with your environment and security goals.
+1. Open **Azure AD Privileged Identity Management**. For information about how to add the Privileged Identity Management tile to your dashboard, see [Start using Privileged Identity Management](pim-getting-started.md).
-![Setting page for an alert to enable and configure settings](media/pim-how-to-configure-security-alerts/security-alert-settings.png)
+1. From the left menu, select **Azure AD Roles**.
+
+1. From the left menu, select **Alerts**, and then select **Setting**.
+
+ ![Screenshots of alerts page with the settings highlighted.](media/pim-how-to-configure-security-alerts/alert-settings.png)
+
+1. Customize settings on the different alerts to work with your environment and security goals.
+
+ ![Screenshots of the alert setting page.](media/pim-how-to-configure-security-alerts/security-alert-settings.png)
## Next steps
active-directory Pim Resource Roles Assign Roles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/privileged-identity-management/pim-resource-roles-assign-roles.md
na Previously updated : 06/24/2022 Last updated : 07/29/2022
# Assign Azure resource roles in Privileged Identity Management
-With Privileged Identity Management (PIM) in Azure Active Directory (Azure AD), part of Microsoft Entra, can manage the built-in Azure resource roles, as well as custom roles, including (but not limited to):
+With Privileged Identity Management (PIM) in Azure Active Directory (Azure AD), part of Microsoft Entra, can manage the built-in Azure resource roles, and custom roles, including (but not limited to):
- Owner - User Access Administrator
Follow these steps to make a user eligible for an Azure resource role.
1. Select **Azure resources**.
-1. Use the resource filter to find the managed resources you're looking for.
+1. Select the **Resource type** you want to manage. For example, such as **Resource**, or **Resource group**. Then select the resource you want to manage to open its overview page.
- ![List of Azure resources to manage](./media/pim-resource-roles-assign-roles/resources-list.png)
-
-1. Select the resource that you want to manage to open the resource overview page.
+ ![Screenshot that shows how to select Azure resources.](./media/pim-resource-roles-assign-roles/resources-list.png)
1. Under **Manage**, select **Roles** to see the list of roles for Azure resources.
- ![Azure resources roles](./media/pim-resource-roles-assign-roles/resources-roles.png)
- 1. Select **Add assignments** to open the **Add assignments** pane.
-1. Select **Select a role** to open the **Select a role** page.
+ ![Screenshot of Azure resources roles.](./media/pim-resource-roles-assign-roles/resources-roles.png)
- ![New assignment pane](./media/pim-resource-roles-assign-roles/resources-select-role.png)
+1. Select a **Role** you want to assign.
+1. Select **No member selected** link to open the **Select a member or group** pane.
-1. Select a role you want to assign and then click **Select**.
+ ![Screenshot of the new assignment pane.](./media/pim-resource-roles-assign-roles/resources-select-role.png)
- The **Select a member or group** pane opens.
+1. Select a member or group you want to assign to the role and then choose **Select**.
-1. Select a member or group you want to assign to the role and then click **Select**.
-
- ![Select a member or group pane](./media/pim-resource-roles-assign-roles/resources-select-member-or-group.png)
+ ![Screenshots that demonstrates how to select a member or group pane](./media/pim-resource-roles-assign-roles/resources-select-member-or-group.png)
1. On the **Settings** tab, in the **Assignment type** list, select **Eligible** or **Active**.
- ![Memberships settings pane](./media/pim-resource-roles-assign-roles/resources-membership-settings-type.png)
+ ![Screenshot of add assignments settings pane.](./media/pim-resource-roles-assign-roles/resources-membership-settings-type.png)
Privileged Identity Management for Azure resources provides two distinct assignment types: - **Eligible** assignments require the member of the role to perform an action to use the role. Actions might include performing a multi-factor authentication (MFA) check, providing a business justification, or requesting approval from designated approvers.
- - **Active** assignments don't require the member to perform any action to use the role. Members assigned as active have the privileges assigned to the role at all times.
+ - **Active** assignments don't require the member to perform any action to use the role. Members assigned as active have the privileges assigned ready to use.
1. To specify a specific assignment duration, change the start and end dates and times. 1. If the role has been defined with actions that permit assignments to that role with conditions, then you can select **Add condition** to add a condition based on the principal user and resource attributes that are part of the assignment.
- ![New assignment - Conditions](./media/pim-resource-roles-assign-roles/new-assignment-conditions.png)
+ ![Screenshot of the new assignment conditions pane.](./media/pim-resource-roles-assign-roles/new-assignment-conditions.png)
Conditions can be entered in the expression builder.
- ![New assignment - Condition built from an expression](./media/pim-resource-roles-assign-roles/new-assignment-condition-expression.png)
+ ![Screenshot of the new assignment condition built from an expression.](./media/pim-resource-roles-assign-roles/new-assignment-condition-expression.png)
1. When finished, select **Assign**. 1. After the new role assignment is created, a status notification is displayed.
- ![New assignment - Notification](./media/pim-resource-roles-assign-roles/resources-new-assignment-notification.png)
+ ![Screenshot of a new assignment notification.](./media/pim-resource-roles-assign-roles/resources-new-assignment-notification.png)
## Assign a role using ARM API Privileged Identity Management supports Azure Resource Manager (ARM) API commands to manage Azure resource roles, as documented in the [PIM ARM API reference](/rest/api/authorization/roleeligibilityschedulerequests). For the permissions required to use the PIM API, see [Understand the Privileged Identity Management APIs](pim-apis.md).
-The following is a sample HTTP request to create an eligible assignment for an Azure role.
+The following example is a sample HTTP request to create an eligible assignment for an Azure role.
### Request
PUT https://management.azure.com/providers/Microsoft.Subscription/subscriptions/
"roleDefinitionId": "/subscriptions/dfa2a084-766f-4003-8ae1-c4aeb893a99f/providers/Microsoft.Authorization/roleDefinitions/c8d4ff99-41c3-41a8-9f60-21dfdad59608", "requestType": "AdminAssign", "scheduleInfo": {
- "startDateTime": "2020-09-09T21:31:27.91Z",
+ "startDateTime": "2022-07-05T21:00:00.91Z",
"expiration": { "type": "AfterDuration", "endDateTime": null,
Status code: 201
"status": "Provisioned", "approvalId": null, "scheduleInfo": {
- "startDateTime": "2020-09-09T21:31:27.91Z",
+ "startDateTime": "2022-07-05T21:00:00.91Z",
"expiration": { "type": "AfterDuration", "endDateTime": null,
Status code: 201
}, "justification": null, "requestorId": "a3bb8764-cb92-4276-9d2a-ca1e895e55ea",
- "createdOn": "2020-09-09T21:32:27.91Z",
+ "createdOn": "2022-07-05T21:00:45.91Z",
"condition": "@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:ContainerName] StringEqualsIgnoreCase 'foo_storage_container'", "conditionVersion": "1.0", "expandedProperties": {
Follow these steps to update or remove an existing role assignment.
1. Select **Azure resources**.
-1. Select the resource you want to manage to open its overview page.
+1. Select the **Resource type** you want to manage. For example, such as **Resource**, or **Resource group**. Then select the resource you want to manage to open its overview page.
-1. Under **Manage**, select **Roles** to see the list of roles for Azure resources.
+ ![Screenshot that shows how to select Azure resources to update.](./media/pim-resource-roles-assign-roles/resources-list.png)
- ![Azure resource roles - Select role](./media/pim-resource-roles-assign-roles/resources-update-select-role.png)
+1. Under **Manage**, select **Roles** to list the roles for Azure resources. The following screenshot lists the roles of an Azure Storage account. Select the role that you want to update or remove.
-1. Select the role that you want to update or remove.
+ ![Screenshot that shows the roles of an Azure Storage account.](./media/pim-resource-roles-assign-roles/resources-update-select-role.png)
1. Find the role assignment on the **Eligible roles** or **Active roles** tabs.
- ![Update or remove role assignment](./media/pim-resource-roles-assign-roles/resources-update-remove.png)
+ :::image type="content" source="./media/pim-resource-roles-assign-roles/resources-update-remove.png" alt-text="Screenshot demonstrates how to update or remove role assignment." lightbox="./media/pim-resource-roles-assign-roles/resources-update-remove.png":::
1. To add or update a condition to refine Azure resource access, select **Add** or **View/Edit** in the **Condition** column for the role assignment. Currently, the Storage Blob Data Owner, Storage Blob Data Reader, and the Blob Storage Blob Data Contributor roles in Privileged Identity Management are the only two roles supported as part of the [Azure attribute-based access control public preview](../../role-based-access-control/conditions-overview.md).
- ![Update or remove attributes for access control](./media/pim-resource-roles-assign-roles/resources-abac-update-remove.png)
+1. Select **Add expression** or **Delete** to update the expression. You can also select **Add condition** to add a new condition to your role.
-1. Select **Update** or **Remove** to update or remove the role assignment.
+ :::image type="content" source="./media/pim-resource-roles-assign-roles/resources-abac-update-remove.png" alt-text="Screenshot that demonstrates how to update or remove attributes of a role assignment." lightbox="./media/pim-resource-roles-assign-roles/resources-abac-update-remove.png":::
For information about extending a role assignment, see [Extend or renew Azure resource roles in Privileged Identity Management](pim-resource-roles-renew-extend.md).
active-directory Pim Resource Roles Configure Alerts https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/privileged-identity-management/pim-resource-roles-configure-alerts.md
na Previously updated : 06/24/2022 Last updated : 07/29/2022
# Configure security alerts for Azure roles in Privileged Identity Management
-Privileged Identity Management (PIM) generates alerts when there is suspicious or unsafe activity in your organization in Azure Active Directory (Azure AD), part of Microsoft Entra. When an alert is triggered, it shows up on the Alerts page.
+Privileged Identity Management (PIM) generates alerts when there's suspicious or unsafe activity in your organization in Azure Active Directory (Azure AD), part of Microsoft Entra. When an alert is triggered, it shows up on the Alerts page.
-![Azure resources - Alerts page listing alert, risk level, and count](media/pim-resource-roles-configure-alerts/rbac-alerts-page.png)
+![Screenshot of the alerts page listing alert, risk level, and count.](media/pim-resource-roles-configure-alerts/rbac-alerts-page.png)
## Review alerts Select an alert to see a report that lists the users or roles that triggered the alert, along with remediation guidance.
-![Alert report showing last scan time, description, mitigation steps, type, severity, security impact, and how to prevent next time](media/pim-resource-roles-configure-alerts/rbac-alert-info.png)
+![Screenshot of the alert report showing last scan time, description, mitigation steps, type, severity, security impact, and how to prevent next time.](media/pim-resource-roles-configure-alerts/rbac-alert-info.png)
## Alerts Alert | Severity | Trigger | Recommendation | | | **Too many owners assigned to a resource** | Medium | Too many users have the owner role. | Review the users in the list and reassign some to less privileged roles.
-**Too many permanent owners assigned to a resource** | Medium | Too many users are permanently assigned to a role. | Review the users in the list and re-assign some to require activation for role use.
+**Too many permanent owners assigned to a resource** | Medium | Too many users are permanently assigned to a role. | Review the users in the list and reassign some to require activation for role use.
**Duplicate role created** | Medium | Multiple roles have the same criteria. | Use only one of these roles.
-**Roles are being assigned outside of Privileged Identity Management (Preview)** | High | A role is managed directly through the Azure IAM resource blade or the Azure Resource Manager API | Review the users in the list and remove them from privileged roles assigned outside of Privilege Identity Management.
+**Roles are being assigned outside of Privileged Identity Management (Preview)** | High | A role is managed directly through the Azure IAM resource, or the Azure Resource Manager API. | Review the users in the list and remove them from privileged roles assigned outside of Privilege Identity Management.
> [!NOTE] > During the public preview of the **Roles are being assigned outside of Privileged Identity Management (Preview)** alert, Microsoft supports only permissions that are assigned at the subscription level.
Alert | Severity | Trigger | Recommendation
### Severity - **High**: Requires immediate action because of a policy violation. -- **Medium**: Does not require immediate action but signals a potential policy violation.-- **Low**: Does not require immediate action but suggests a preferred policy change.
+- **Medium**: Doesn't require immediate action but signals a potential policy violation.
+- **Low**: Doesn't require immediate action but suggests a preferred policy change.
## Configure security alert settings
-From the Alerts page, go to **Settings**.
+Follow these steps to configure security alerts for Azure roles in Privileged Identity Management:
-![Alerts page with Settings highlighted](media/pim-resource-roles-configure-alerts/rbac-navigate-settings.png)
+1. Sign in to the [Azure portal](https://portal.azure.com/).
-Customize settings on the different alerts to work with your environment and security goals.
+1. Open **Azure AD Privileged Identity Management**. For information about how to add the Privileged Identity Management tile to your dashboard, see [Start using Privileged Identity Management](pim-getting-started.md).
-![Setting page for an alert to enable and configure settings](media/pim-resource-roles-configure-alerts/rbac-alert-settings.png)
+1. From the left menu, select **Azure resources**.
+
+1. From the list of resources, select your Azure subscription.
+
+1. On the **Alerts** page, select **Settings**.
+
+ ![Screenshot of the alerts page with settings highlighted.](media/pim-resource-roles-configure-alerts/rbac-navigate-settings.png)
+
+1. Customize settings on the different alerts to work with your environment and security goals.
+
+ ![Screenshot of the alert setting.](media/pim-resource-roles-configure-alerts/rbac-alert-settings.png)
## Next steps
active-directory Pim Security Wizard https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/privileged-identity-management/pim-security-wizard.md
Previously updated : 06/27/2022 Last updated : 07/29/2022
Also, keep role assignments permanent if a user has a Microsoft account (in othe
1. Open **Azure AD Privileged Identity Management**.
-1. Select **Azure AD roles** and then select **Discovery and insights (Preview)**. Opening the page begins the discovery process to find relevant role assignments.
+1. From the left menu, select **Azure AD roles** and then select **Discovery and insights (Preview)**. Opening the page begins the discovery process to find relevant role assignments.
![Azure AD roles - Discovery and insights page showing the 3 options](./media/pim-security-wizard/new-preview-link.png)
active-directory Ediwin Saas Edi Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/ediwin-saas-edi-tutorial.md
+
+ Title: 'Tutorial: Azure AD SSO integration with Ediwin SaaS EDI'
+description: Learn how to configure single sign-on between Azure Active Directory and Ediwin SaaS EDI.
++++++++ Last updated : 07/23/2022++++
+# Tutorial: Azure AD SSO integration with Ediwin SaaS EDI
+
+In this tutorial, you'll learn how to integrate Ediwin SaaS EDI with Azure Active Directory (Azure AD). When you integrate Ediwin SaaS EDI with Azure AD, you can:
+
+* Control in Azure AD who has access to Ediwin SaaS EDI.
+* Enable your users to be automatically signed-in to Ediwin SaaS EDI with their Azure AD accounts.
+* Manage your accounts in one central location - the Azure portal.
+
+## Prerequisites
+
+To get started, you need the following items:
+
+* An Azure AD subscription. If you don't have a subscription, you can get a [free account](https://azure.microsoft.com/free/).
+* Ediwin SaaS EDI single sign-on (SSO) enabled subscription.
+* Along with Cloud Application Administrator, Application Administrator can also add or manage applications in Azure AD.
+For more information, see [Azure built-in roles](../roles/permissions-reference.md).
+
+## Scenario description
+
+In this tutorial, you configure and test Azure AD SSO in a test environment.
+
+* Ediwin SaaS EDI supports **SP** initiated SSO.
+
+## Add Ediwin SaaS EDI from the gallery
+
+To configure the integration of Ediwin SaaS EDI into Azure AD, you need to add Ediwin SaaS EDI from the gallery to your list of managed SaaS apps.
+
+1. Sign in to the Azure portal using either a work or school account, or a personal Microsoft account.
+1. On the left navigation pane, select the **Azure Active Directory** service.
+1. Navigate to **Enterprise Applications** and then select **All Applications**.
+1. To add new application, select **New application**.
+1. In the **Add from the gallery** section, type **Ediwin SaaS EDI** in the search box.
+1. Select **Ediwin SaaS EDI** from results panel and then add the app. Wait a few seconds while the app is added to your tenant.
+
+## Configure and test Azure AD SSO for Ediwin SaaS EDI
+
+Configure and test Azure AD SSO with Ediwin SaaS EDI using a test user called **B.Simon**. For SSO to work, you need to establish a link relationship between an Azure AD user and the related user in Ediwin SaaS EDI.
+
+To configure and test Azure AD SSO with Ediwin SaaS EDI, perform the following steps:
+
+1. **[Configure Azure AD SSO](#configure-azure-ad-sso)** - to enable your users to use this feature.
+ 1. **[Create an Azure AD test user](#create-an-azure-ad-test-user)** - to test Azure AD single sign-on with B.Simon.
+ 1. **[Assign the Azure AD test user](#assign-the-azure-ad-test-user)** - to enable B.Simon to use Azure AD single sign-on.
+1. **[Configure Ediwin SaaS EDI SSO](#configure-ediwin-saas-edi-sso)** - to configure the single sign-on settings on application side.
+ 1. **[Create Ediwin SaaS EDI test user](#create-ediwin-saas-edi-test-user)** - to have a counterpart of B.Simon in Ediwin SaaS EDI that is linked to the Azure AD representation of user.
+1. **[Test SSO](#test-sso)** - to verify whether the configuration works.
+
+## Configure Azure AD SSO
+
+Follow these steps to enable Azure AD SSO in the Azure portal.
+
+1. In the Azure portal, on the **Ediwin SaaS EDI** application integration page, find the **Manage** section and select **single sign-on**.
+1. On the **Select a single sign-on method** page, select **SAML**.
+1. On the **Set up single sign-on with SAML** page, click the pencil icon for **Basic SAML Configuration** to edit the settings.
+
+ ![Screenshot shows to edit Basic S A M L Configuration.](common/edit-urls.png "Basic Configuration")
+
+1. On the **Basic SAML Configuration** section, perform the following steps:
+
+ a. In the **Identifier** textbox, type a URL using the following pattern:
+ `https://web.sedeb2b.com/<EdiwinDomain>`
+
+ b. In the **Reply URL** textbox, type a URL using the following pattern:
+ `https://web.sedeb2b.com/Ediwin/samlLogin/<EdiwinDomain>`
+
+ c. In the **Sign-on URL** text box, type a URL using the following pattern:
+ `https://web.sedeb2b.com/Ediwin/samlLogin/<EdiwinDomain>`
+
+ > [!Note]
+ > These values are not real. Update these values with the actual Identifier, Reply URL and Sign on URL. Contact [Ediwin SaaS EDI support team](mailto:cau@edicomgroup.com) to get these values. You can also refer to the patterns shown in the **Basic SAML Configuration** section in the Azure portal.
+
+1. On the **Set-up single sign-on with SAML** page, in the **SAML Signing Certificate** section, find **Federation Metadata XML** and select **Download** to download the certificate and save it on your computer.
+
+ ![Screenshot shows the Certificate download link.](common/metadataxml.png "Certificate")
+
+1. On the **Set up Ediwin SaaS EDI** section, copy the appropriate URL(s) based on your requirement.
+
+ ![Screenshot shows to copy configuration appropriate U R L.](common/copy-configuration-urls.png "Attributes")
+
+### Create an Azure AD test user
+
+In this section, you'll create a test user in the Azure portal called B.Simon.
+
+1. From the left pane in the Azure portal, select **Azure Active Directory**, select **Users**, and then select **All users**.
+1. Select **New user** at the top of the screen.
+1. In the **User** properties, follow these steps:
+ 1. In the **Name** field, enter `B.Simon`.
+ 1. In the **User name** field, enter the username@companydomain.extension. For example, `B.Simon@contoso.com`.
+ 1. Select the **Show password** check box, and then write down the value that's displayed in the **Password** box.
+ 1. Click **Create**.
+
+### Assign the Azure AD test user
+
+In this section, you'll enable B.Simon to use Azure single sign-on by granting access to Ediwin SaaS EDI.
+
+1. In the Azure portal, select **Enterprise Applications**, and then select **All applications**.
+1. In the applications list, select **Ediwin SaaS EDI**.
+1. In the app's overview page, find the **Manage** section and select **Users and groups**.
+1. Select **Add user**, then select **Users and groups** in the **Add Assignment** dialog.
+1. In the **Users and groups** dialog, select **B.Simon** from the Users list, then click the **Select** button at the bottom of the screen.
+1. If you are expecting a role to be assigned to the users, you can select it from the **Select a role** dropdown. If no role has been set up for this app, you see "Default Access" role selected.
+1. In the **Add Assignment** dialog, click the **Assign** button.
+
+## Configure Ediwin SaaS EDI SSO
+
+To configure single sign-on on **Ediwin SaaS EDI** side, you need to send the downloaded **Federation Metadata XML** and appropriate copied URLs from Azure portal to [Ediwin SaaS EDI support team](mailto:cau@edicomgroup.com). They set this setting to have the SAML SSO connection set properly on both sides.
+
+### Create Ediwin SaaS EDI test user
+
+In this section, you create a user called Britta Simon in Ediwin SaaS EDI. Work with [Ediwin SaaS EDI support team](mailto:cau@edicomgroup.com) to add the users in the Ediwin SaaS EDI platform. Users must be created and activated before you use single sign-on.
+
+## Test SSO
+
+In this section, you test your Azure AD single sign-on configuration with following options.
+
+* Click on **Test this application** in Azure portal. This will redirect to Ediwin SaaS EDI Sign-on URL where you can initiate the login flow.
+
+* Go to Ediwin SaaS EDI Sign-on URL directly and initiate the login flow from there.
+
+* You can use Microsoft My Apps. When you click the Ediwin SaaS EDI tile in the My Apps, this will redirect to Ediwin SaaS EDI Sign-on URL. For more information about the My Apps, see [Introduction to the My Apps](../user-help/my-apps-portal-end-user-access.md).
+
+## Next steps
+
+Once you configure Ediwin SaaS EDI you can enforce session control, which protects exfiltration and infiltration of your organizationΓÇÖs sensitive data in real time. Session control extends from Conditional Access. [Learn how to enforce session control with Microsoft Cloud App Security](/cloud-app-security/proxy-deployment-aad).
active-directory Figbytes Tutorial https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/saas-apps/figbytes-tutorial.md
+
+ Title: 'Tutorial: Azure AD SSO integration with FigBytes'
+description: Learn how to configure single sign-on between Azure Active Directory and FigBytes.
++++++++ Last updated : 07/21/2022++++
+# Tutorial: Azure AD SSO integration with FigBytes
+
+In this tutorial, you'll learn how to integrate FigBytes with Azure Active Directory (Azure AD). When you integrate FigBytes with Azure AD, you can:
+
+* Control in Azure AD who has access to FigBytes.
+* Enable your users to be automatically signed-in to FigBytes with their Azure AD accounts.
+* Manage your accounts in one central location - the Azure portal.
+
+## Prerequisites
+
+To get started, you need the following items:
+
+* An Azure AD subscription. If you don't have a subscription, you can get a [free account](https://azure.microsoft.com/free/).
+* FigBytes single sign-on (SSO) enabled subscription.
+* Along with Cloud Application Administrator, Application Administrator can also add or manage applications in Azure AD.
+For more information, see [Azure built-in roles](../roles/permissions-reference.md).
+
+## Scenario description
+
+In this tutorial, you configure and test Azure AD SSO in a test environment.
+
+* FigBytes supports **SP** and **IDP** initiated SSO.
+
+> [!NOTE]
+> Identifier of this application is a fixed string value so only one instance can be configured in one tenant.
+
+## Add FigBytes from the gallery
+
+To configure the integration of FigBytes into Azure AD, you need to add FigBytes from the gallery to your list of managed SaaS apps.
+
+1. Sign in to the Azure portal using either a work or school account, or a personal Microsoft account.
+1. On the left navigation pane, select the **Azure Active Directory** service.
+1. Navigate to **Enterprise Applications** and then select **All Applications**.
+1. To add new application, select **New application**.
+1. In the **Add from the gallery** section, type **FigBytes** in the search box.
+1. Select **FigBytes** from results panel and then add the app. Wait a few seconds while the app is added to your tenant.
+
+## Configure and test Azure AD SSO for FigBytes
+
+Configure and test Azure AD SSO with FigBytes using a test user called **B.Simon**. For SSO to work, you need to establish a link relationship between an Azure AD user and the related user in FigBytes.
+
+To configure and test Azure AD SSO with FigBytes, perform the following steps:
+
+1. **[Configure Azure AD SSO](#configure-azure-ad-sso)** - to enable your users to use this feature.
+ 1. **[Create an Azure AD test user](#create-an-azure-ad-test-user)** - to test Azure AD single sign-on with B.Simon.
+ 1. **[Assign the Azure AD test user](#assign-the-azure-ad-test-user)** - to enable B.Simon to use Azure AD single sign-on.
+1. **[Configure FigBytes SSO](#configure-figbytes-sso)** - to configure the single sign-on settings on application side.
+ 1. **[Create FigBytes test user](#create-figbytes-test-user)** - to have a counterpart of B.Simon in FigBytes that is linked to the Azure AD representation of user.
+1. **[Test SSO](#test-sso)** - to verify whether the configuration works.
+
+## Configure Azure AD SSO
+
+Follow these steps to enable Azure AD SSO in the Azure portal.
+
+1. In the Azure portal, on the **FigBytes** application integration page, find the **Manage** section and select **single sign-on**.
+1. On the **Select a single sign-on method** page, select **SAML**.
+1. On the **Set up single sign-on with SAML** page, click the pencil icon for **Basic SAML Configuration** to edit the settings.
+
+ ![Screenshot shows to edit Basic S A M L Configuration.](common/edit-urls.png "Basic Configuration")
+
+1. On the **Basic SAML Configuration** section, the user does not have to perform any step as the app is already pre-integrated with Azure.
+
+1. Click **Set additional URLs** and perform the following step, if you wish to configure the application in **SP** initiated mode:
+
+ In the **Sign-on URL** text box, type the URL:
+ `https://figbytes.biz/`
+
+1. On the **Set-up single sign-on with SAML** page, in the **SAML Signing Certificate** section, find **Federation Metadata XML** and select **Download** to download the certificate and save it on your computer.
+
+ ![Screenshot shows the Certificate download link.](common/metadataxml.png "Certificate")
+
+1. On the **Set up FigBytes** section, copy the appropriate URL(s) based on your requirement.
+
+ ![Screenshot shows to copy configuration appropriate U R L.](common/copy-configuration-urls.png "Attributes")
+
+### Create an Azure AD test user
+
+In this section, you'll create a test user in the Azure portal called B.Simon.
+
+1. From the left pane in the Azure portal, select **Azure Active Directory**, select **Users**, and then select **All users**.
+1. Select **New user** at the top of the screen.
+1. In the **User** properties, follow these steps:
+ 1. In the **Name** field, enter `B.Simon`.
+ 1. In the **User name** field, enter the username@companydomain.extension. For example, `B.Simon@contoso.com`.
+ 1. Select the **Show password** check box, and then write down the value that's displayed in the **Password** box.
+ 1. Click **Create**.
+
+### Assign the Azure AD test user
+
+In this section, you'll enable B.Simon to use Azure single sign-on by granting access to FigBytes.
+
+1. In the Azure portal, select **Enterprise Applications**, and then select **All applications**.
+1. In the applications list, select **FigBytes**.
+1. In the app's overview page, find the **Manage** section and select **Users and groups**.
+1. Select **Add user**, then select **Users and groups** in the **Add Assignment** dialog.
+1. In the **Users and groups** dialog, select **B.Simon** from the Users list, then click the **Select** button at the bottom of the screen.
+1. If you are expecting a role to be assigned to the users, you can select it from the **Select a role** dropdown. If no role has been set up for this app, you see "Default Access" role selected.
+1. In the **Add Assignment** dialog, click the **Assign** button.
+
+## Configure FigBytes SSO
+
+To configure single sign-on on **FigBytes** side, you need to send the downloaded **Federation Metadata XML** and appropriate copied URLs from Azure portal to [FigBytes support team](mailto:support@figbytes.com). They set this setting to have the SAML SSO connection set properly on both sides.
+
+### Create FigBytes test user
+
+In this section, you create a user called Britta Simon in FigBytes. Work with [FigBytes support team](mailto:support@figbytes.com) to add the users in the FigBytes platform. Users must be created and activated before you use single sign-on.
+
+## Test SSO
+
+In this section, you test your Azure AD single sign-on configuration with following options.
+
+#### SP initiated:
+
+* Click on **Test this application** in Azure portal. This will redirect to FigBytes Sign-on URL where you can initiate the login flow.
+
+* Go to FigBytes Sign-on URL directly and initiate the login flow from there.
+
+#### IDP initiated:
+
+* Click on **Test this application** in Azure portal and you should be automatically signed in to the FigBytes for which you set up the SSO.
+
+You can also use Microsoft My Apps to test the application in any mode. When you click the FigBytes tile in the My Apps, if configured in SP mode you would be redirected to the application sign-on page for initiating the login flow and if configured in IDP mode, you should be automatically signed in to the FigBytes for which you set up the SSO. For more information about the My Apps, see [Introduction to the My Apps](../user-help/my-apps-portal-end-user-access.md).
+
+## Next steps
+
+Once you configure FigBytes you can enforce session control, which protects exfiltration and infiltration of your organizationΓÇÖs sensitive data in real time. Session control extends from Conditional Access. [Learn how to enforce session control with Microsoft Cloud App Security](/cloud-app-security/proxy-deployment-aad).
active-directory Admin Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/admin-api.md
+
+ Title: Admin API for managing Microsoft Entra Verified ID
+
+description: Learn how to manage your verifiable credential deployment using Admin API.
+documentationCenter: ''
+++++ Last updated : 07/28/2022++
+#Customer intent: As an administrator, I am trying to learn how to use the Admin API and automate my tenant.
++
+# Verifiable credentials admin API
++
+The Microsoft Entra Verified ID Admin API enables you to manage all aspects of the Verifiable Credential service. It offers a way to set up a brand new service, manage and create Verifiable Credential contracts, revoke Verifiable Credentials and completely opt out the service as well.
+
+> The API is intended for developers comfortable with RESTful APIs and enough permissions on the Azure Active Directory tenant to enable the service
+
+## Base URL
+
+The Admin API is server over HTTPS. All URLs referenced in the documentation have the following base: `https://verifiedid.did.msidentity.com`.
+
+## Authentication
+
+The API is protected through Azure Active Directory and uses OAuth2 bearer tokens. The app registration needs to have the API Permission for `Verifiable Credentials Service Admin` and then when acquiring the access token the app should use scope `6a8b4b39-c021-437c-b060-5a14a3fd65f3/full_access`.
+
+## Onboarding
+
+This API is to help create a new environment so new authorities can be set up. This can be triggered manually by navigating to the Verifiable Credential page in the Azure portal as well. You only need to call this API once and only if you want to set up a brand new environment just with the API.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/onboard`
+
+Use this endpoint to finish provisioning of the Verifiable Credential service in your tenant. The system creates the rest of the service principals if these aren't provisioned yet.
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Return message
+
+```
+HTTP/1.1 201 Created
+Content-type: application/json
+
+{
+ "id": "f5bf2fc6-7135-4d94-a6fe-c26e4543bc5a",
+ "servicePrincipal": "90e10a26-94cd-49d6-8cd7-cacb10f00686",
+ "status": "Enabled"
+}
+```
+
+Repeatedly calling this API will result in the exact same return message.
+
+## Authorities
+
+This endpoint can be used to create or update a Verifiable Credential service instance.
+
+### Methods
++
+| Methods | Return Type | Description |
+| -- | -- | -- |
+| [Get Authority](#get-authority) | Authority | Read properties of an authority |
+| [List Authority](#list-authorities) | Authority array | Get a list of all configured Authorities/verifiable credential services |
+| [Create Authority](#create-authority) | Authority | Create a new authority |
+| [Update authority](#update-authority) | Authority | Update authority |
+| [Generate Well known DID Configuration](#well-known-did-configuration) | | |
+| [Generate DID Document](#generate-did-document) | | |
+| [Validate Well-known DID config](#validate-well-known-did-configuration) | | |
+| [Rotate Signing Key](#rotate-signing-keys) | | |
++
+### Get authority
+
+Retrieve the properties of a configured authority or verifiable credential service instance.
+
+#### HTTP request
+
+`GET /v1.0/verifiableCredentials/authorities/:authorityId`
+
+Replace the `:authorityId` with the value of one of the configured authorities.
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method
+
+#### Response message
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "id": "ffea7eb3-0000-1111-2222-000000000000",
+ "name": "ExampleAuthorityName",
+ "status": "Enabled",
+ "didModel": {
+ "did": "did:ion:EiAVvtjqr_Ji8pXGNtherrMW2FPl5Ays9mII2vP_QTgUWA:eyJkZWx...<SNIP>",
+ "signingKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerSigningKeyIon-ffea7eb3-0000-1111-2222-000000000000/5257c49db8164e198b4c5997e8a31ad4"
+ ],
+ "recoveryKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerRecoveryKeyIon-ffea7eb3-0000-1111-2222-000000000000/5cfb5458af524da88897522690e01a7e"
+ ],
+ "updateKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerUpdateKeyIon-ffea7eb3-0000-1111-2222-000000000000/24494dbbbace4a079422dde943e1b6f0"
+ ],
+ "encryptionKeys": [],
+ "linkedDomainUrls": [
+ "https://www.contoso.com/"
+ ],
+ "didDocumentStatus": "published"
+ },
+ "keyVaultMetadata": {
+ "subscriptionId": "b593ade1-e353-43ab-9fb8-cccf669478d0",
+ "resourceGroup": "verifiablecredentials",
+ "resourceName": "vccontosokv",
+ "resourceUrl": "https://vccontosokv.vault.azure.net/"
+ }
+}
+
+```
+
+The response contains the following properties.
+
+#### Authority type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `Id` | string | An autogenerated unique ID, which can be used to retrieve or update the specific instance of the verifiable credential service |
+| `name` | string | The friendly name of this instance of the verifiable credential service |
+| `status` | string | status of the service, this value will always be `enabled` |
+| [didModel](#didmodel-type) | didModel | Information about the DID and keys |
+| [keyVaultMetadata](#keyvaultmetadata-type) | keyVaultMeta data | Information about the used Key Vault |
++
+#### didModel type
+
+We support two different didModels. One is `ion` and the other supported method is `web`
+
+#### ION
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `did` | string | The DID for this verifiable credential service instance |
+| `signingKeys` | string array | URL to the signing key |
+| `recoveryKeys` | string array | URL to the recovery key |
+| `encryptionKeys` | string array | URL to the encryption key |
+| `linkedDomainUrls` | string array | Domains linked to this DID |
+| `didDocumentStatus` | string | status of the DID, `published` when it's written to ION otherwise it will be `submitted`|
+
+#### Web
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `did` | string | The DID for this verifiable credential service instance |
+| `signingKeys` | string array | URL to the signing key |
+| `linkedDomainUrls` | string array | Domains linked to this DID, expecting one single entry |
+| [didModel](#didmodel-type) | didModel | Information about the DID and keys |
+| `didDocumentStatus` | string | status of the DID, value is always `published` for this method |
++
+#### keyVaultMetadata type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `subscriptionId` | string | The Azure subscription this Key Vault resides |
+| `resourceGroup` | string | name of the resource group from this Key Vault |
+| `resouceName` | string | Key Vault name |
+| `resourceUrl` | string | URL to this Key Vault |
++
+### List authorities
+
+Get all configured authorities or verifiable credential services for this tenant
+
+#### HTTP request
+
+`GET /v1.0/verifiableCredentials/authorities`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+Response message is an array of [Authorities](#authority-type)
+Example:
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+{
+ value:
+
+ [
+ {
+ "id": "ffea7eb3-0000-1111-2222-000000000000",
+ "name": "ContractName",
+ "status": "Enabled",
+ "didModel": {
+ "did": "did:ion:EiAVvtjqr_Ji8pXGNtherrMW2FPl5Ays9mII2vP_QTgUWA:eyJkZWx<SNIP>...",
+ "signingKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerSigningKeyIon-ffea7eb3-0000-1111-2222-000000000000/5257c49db8164e198b4c5997e8a31ad4"
+ ],
+ "recoveryKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerRecoveryKeyIon-ffea7eb3-0000-1111-2222-000000000000/5cfb5458af524da88897522690e01a7e"
+ ],
+ "updateKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerUpdateKeyIon-ffea7eb3-0000-1111-2222-000000000000/24494dbbbace4a079422dde943e1b6f0"
+ ],
+ "encryptionKeys": [],
+ "linkedDomainUrls": [
+ "https://www.contoso.com/"
+ ],
+ "didDocumentStatus": "published"
+ },
+ "keyVaultMetadata": {
+ "subscriptionId": "b593ade1-e353-43ab-9fb8-cccf669478d0",
+ "resourceGroup": "verifiablecredentials",
+ "resourceName": "vccontosokv",
+ "resourceUrl": "https://vccontosokv.vault.azure.net/"
+ }
+ },
+ {
+ "id": "cc55ba22-0000-1111-2222-000000000000",
+ "name": "APItest6",
+ "keyVaultUrl": "https://vccontosokv.vault.azure.net/",
+ "status": "Enabled",
+ "didModel": {
+ "did": "did:ion:EiD_mGdhdAXOS1BV6c7r-CCjetaoRKuAENEwsRM1_QEHMg:eyJkZWx0YSI<SNIP>....",
+ "signingKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerSigningKeyIon-cc55ba22-0000-1111-2222-000000000000/f8f149eaee194beb83dfca14714ef62a"
+ ],
+ "recoveryKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerRecoveryKeyIon-cc55ba22-0000-1111-2222-000000000000/68f976cc44014eafb354a6fe305b7d4d"
+ ],
+ "updateKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerUpdateKeyIon-cc55ba22-0000-1111-2222-000000000000/b85328af0c1f460ea026fbdda9cd6652"
+ ],
+ "encryptionKeys": [],
+ "linkedDomainUrls": [
+ "https://www.contoso.com/"
+ ],
+ "didDocumentStatus": "published"
+ },
+ "keyVaultMetadata": {
+ "subscriptionId": "b593ade1-e353-43ab-9fb8-cccf669478d0",
+ "resourceGroup": "verifiablecredentials",
+ "resourceName": "vccontosokv",
+ "resourceUrl": "https://vccontosokv.vault.azure.net/"
+ }
+ }
+ ]
+}
+```
+
+### Create authority
+
+This call creates a new **private key**, recovery key and update key, stores these in the specified Azure Key Vault and sets the permissions to this Key Vault for the verifiable credential service and a create new **DID** with corresponding DID Document and commits that to the ION network.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+In the request body, supply a JSON representation of the following
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `name` | string | The display name of this instance of the service |
+| `linkedDomainUrl` | string | The domain linked to this DID |
+| `didMethod` | string | option `web` or `ion` |
+| `keyVaultMetadata` | keyVaultMetadata | meta data for specific key vault |
+
+Example message:
+```
+{
+ "name":"ExampleName",
+ "linkedDomainUrl":"https://www.contoso.com/",
+ "didMethod": "web",
+ "keyVaultMetadata":
+ {
+ "subscriptionId":"b593ade1-e353-43ab-9fb8-cccf669478d0",
+ "resourceGroup":"verifiablecredentials",
+ "resourceName":"vccontosokv",
+ "resourceUrl": "https://vccontosokv.vault.azure.net/"
+ }
+}
+```
+
+#### Response message
+
+When successful the response message contains the name of the [authority](#authority-type)
+
+Example message for did:web:
+```
+{
+ "id": "bacf5333-d68c-01c5-152b-8c9039fbd88d",
+ "name": "APItesta",
+ "status": "Enabled",
+ "didModel": {
+ "did": "did:web:www.contoso.com",
+ "signingKeys": [
+ "https://vcwingtipskv.vault.azure.net/keys/vcSigningKey-bacf5333-d68c-01c5-152b-8c9039fbd88d/5255b9f2d9b94dc19a369ff0d36e3407"
+ ],
+ "recoveryKeys": [],
+ "updateKeys": [],
+ "encryptionKeys": [],
+ "linkedDomainUrls": [
+ "https://www.contoso.com/"
+ ],
+ "didDocumentStatus": "published"
+ },
+ "keyVaultMetadata": {
+ "subscriptionId": "1853e356-bc86-4e54-8bb8-6db4e5eacdbd",
+ "resourceGroup": "verifiablecredentials",
+ "resourceName": "vcwingtipskv",
+ "resourceUrl": "https://vcwingtipskv.vault.azure.net/"
+ },
+ "linkedDomainsVerified": false
+}
+```
++
+Example message for did:ion:
+
+```
+HTTP/1.1 201 Created
+Content-type: application/json
+
+{
+ "id": "cc55ba22-0000-1111-2222-000000000000",
+ "name": "APItest6",
+ "status": "Enabled",
+ "didModel": {
+ "did": "did:ion:EiD_mGdhdAXOS1BV6c7r-CCjetaoRKuAENEwsRM1_QEHMg",
+ "signingKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerSigningKeyIon-cc55ba22-0000-1111-2222-000000000000/f8f149eaee194beb83dfca14714ef62a"
+ ],
+ "recoveryKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerRecoveryKeyIon-cc55ba22-0000-1111-2222-000000000000/68f976cc44014eafb354a6fe305b7d4d"
+ ],
+ "updateKeys": [
+ "https://vccontosokv.vault.azure.net/keys/issuerUpdateKeyIon-cc55ba22-0000-1111-2222-000000000000/b85328af0c1f460ea026fbdda9cd6652"
+ ],
+ "encryptionKeys": [],
+ "linkedDomainUrls": [
+ "https://www.contoso.com/"
+ ],
+ "didDocumentStatus": "submitted"
+ },
+ "keyVaultMetadata": {
+ "subscriptionId": "b593ade1-e353-43ab-9fb8-cccf669478d0",
+ "resourceGroup": "verifiablecredentials",
+ "resourceName": "vccontosokv",
+ "resourceUrl": "https://vccontosokv.vault.azure.net/"
+ }
+}
+
+```
+
+### Remarks
+
+>You can create multiple authorities with their own DID and private keys, these will not be visible in the UI of the azure portal. Currently we only support having 1 authority. We have not fully tested all scenarios with multiple created authorities. If you are trying this please let us know your experience.
+
+### Update authority
+
+This method can be used to update the display name of this specific instance of the verifiable credential service.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId`
+
+Replace the value of `:authorityId` with the value of the authority ID you want to update.
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+In the request body, supply a JSON representation of the following.
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `name` | string | The display name of this instance of the service |
+
+Example message
+```
+{
+ "name":"ExampleIssuerName"
+}
+```
+
+### Linked domains
+
+It's possible to update the domain related to the DID. This functionality needs to write an update operation to ION to get this update distributed around the world. The update can take some time, currently up to an hour before it's processed and available for other users.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/updateLinkedDomains`
+
+replace the value of `:authorityId` with the value of the authority ID you want to update.
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+You need to specify the domain you want to publish to the DID Document. Although the value of domains is an array, you should only specify a **single domain**.
+
+In the request body, supply a JSON representation of the following:
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `domainUrls` | string array | link to domain(s), need to start with https and not contain a path |
+
+Example message:
+
+```
+{
+ "domainUrls" : ["https://www.mydomain.com"]
+}
+```
+
+#### Response message
+
+```
+HTTP/1.1 202 Accepted
+Content-type: application/json
+
+Accepted
+```
+
+The didDocumentStatus will switch to `submitted` it will take a while before the change is committed to the ION network.
+
+If you try to submit a change before the operation is completed, you'll get the following error message:
+
+```
+HTTP/1.1 409 Conflict
+Content-type: application/json
+
+{
+ "requestId":"83047b1c5811284ce56520b63b9ba83a","date":"Mon, 07 Feb 2022 18:36:24 GMT",
+ "mscv":"tf5p8EaXIY1iWgYM.1",
+ "error":
+ {
+ "code": "conflict",
+ "innererror": {
+ "code":"ionOperationNotYetPublished",
+ "message":"There is already an operation in queue for this organization's DID (decentralized identifier), please wait until the operation is published to submit a new one."
+ }
+ }
+}
+```
+
+You need to wait until the didDocumentstatus is back to `published` before you can submit another change.
+
+The domain URLs must start with https and not contain any path values.
+
+Possible error messages:
+
+```
+HTTP/1.1 400 Bad Request
+Content-type: application/json
+
+{
+ "requestId":"57c5ac78abb86bbfbc6f9e96d9ae6b18",
+ "date":"Mon, 07 Feb 2022 18:47:14 GMT",
+ "mscv":"+QfihZZk87z0nky2.0",
+ "error": "BadRequest",
+ "innererror": {
+ "code":"parameterUrlSchemeMustBeHttps",
+ "message":"URLs must begin with HTTPS: domains"
+ }
+}
+```
+
+```
+HTTP/1.1 400 Bad Request
+Content-type: application/json
+
+{
+ "requestId":"e65753b03f28f159feaf434eaf140547",
+ "date":"Mon, 07 Feb 2022 18:48:36 GMT",
+ "mscv":"QWB4uvgYzCKuMeKg.0",
+ "error": "BadRequest",
+ "innererror": {
+ "code":"parameterUrlPathMustBeEmpty",
+ "message":"The URL can only include a domain. Please remove any characters after the domain name and try again. linkedDomainUrl"
+ }
+}
+```
++
+#### Remarks
+
+Although it is technically possible to publish multiple domains, we currently only support a single domain per authority.
+
+### Well-known DID configuration
+
+The `generateWellknownDidConfiguration` method generates the signed did-configuration.json file. The file must be uploaded to the `.well-known` folder in the root of the website hosted for the domain in the linked domain of this verifiable credential instance. Instructions can be found [here](how-to-dnsbind.md#distribute-well-known-config).
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/generateWellknownDidConfiguration`
++
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+You need to specify one of the domains in the linkedDomains of the specified authority.
+
+```
+{
+ "domainUrl":"https://atest/"
+}
+```
+
+#### Response message
+
+Example response message:
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "@context": "https://identity.foundation/.well-known/contexts/did-configuration-v0.0.jsonld",
+ "linked_dids": [
+ "eyJhbGciOiJFUzI1NksiL...<SNIP>..."
+ ]
+}
+```
+
+Save this result with the file name did-configuration.json and upload this file to the correct folder and website. If you specify a domain not linked to this DID/DID Document, you'll receive an error:
+
+```
+HTTP/1.1 400 Bad Request
+Content-type: application/json
+
+{
+ "requestId":"079192a95fbf56a661c1b2dd0e012af5",
+ "date":"Mon, 07 Feb 2022 18:55:53 GMT",
+ "mscv":"AVQh55YiU3FxMipB.0",
+ "error":
+ {
+ "code":"wellKnownConfigDomainDoesNotExistInIssuer",
+ "message":"The domain used as an input to generate the well-known document is not registered with your organization. Domain: https://wrongdomain/"
+ }
+}
+
+```
+
+#### Remarks
+
+You can point multiple DIDs to the same domain. If you choose this configuration, you need to combine generated tokens and put them in the same did-configuration.json file. The file contains an array of these tokens.
+
+For example:
+```
+{
+ "@context": "https://identity.foundation/.well-known/contexts/did-configuration-v0.0.jsonld",
+ "linked_dids": [
+ "eyJhbG..token1...<SNIP>...",
+ "eyJhbG..token2...<SNIP>..."
+ ]
+}
+```
+
+### Generate DID document
+
+This call generates the DID Document used for DID:WEB identifiers. After generating this DID Document, the administrator has to place the file at the https://domain/.well-known/did.json location.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/generateDidDocument`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "id": "did:web:www.contoso.com",
+ "@context": [
+ "https://www.w3.org/ns/did/v1",
+ {
+ "@base": "did:web:www.contoso.com"
+ }
+ ],
+ "service": [
+ {
+ "id": "#linkeddomains",
+ "type": "LinkedDomains",
+ "serviceEndpoint": {
+ "origins": [
+ "https://www.contoso.com/"
+ ]
+ }
+ },
+ {
+ "id": "#hub",
+ "type": "IdentityHub",
+ "serviceEndpoint": {
+ "instances": [
+ "https://verifiedid.hub.msidentity.com/v1.0/f640a374-b380-42c9-8e14-d174506838e9"
+ ]
+ }
+ }
+ ],
+ "verificationMethod": [
+ {
+ "id": "#a2518db3b6b44332b3b667928a51b0cavcSigningKey-f0a5b",
+ "controller": "did:web:www.contoso.com",
+ "type": "EcdsaSecp256k1VerificationKey2019",
+ "publicKeyJwk": {
+ "crv": "secp256k1",
+ "kty": "EC",
+ "x": "bFkOsjDB_K-hfz-c-ggspVHETMeZm31CtuzOt0PrmZc",
+ "y": "sewHrUNpXvJ7k-_4K8Yq78KgKzT1Vb7kmhK8x7_6h0g"
+ }
+ }
+ ],
+ "authentication": [
+ "#a2518db3b6b44332b3b667928a51b0cavcSigningKey-f0a5b"
+ ],
+ "assertionMethod": [
+ "#a2518db3b6b44332b3b667928a51b0cavcSigningKey-f0a5b"
+ ]
+}
+```
+
+#### Remark
+
+Requires the caller to have the KEY List permissions on the target key vault.
+
+### Validate well-known DID configuration
+
+This call checks your DID setup. It downloads the well known DID configuration and validates if the correct DID is used and the signature is correct.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/validateWellKnownDidConfiguration`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
++
+#### Response message
+
+```
+HTTP/1.1 204 No Content
+Content-type: application/json
+```
+
+### Rotate signing keys
+
+The rotate signing keys update the private key for the did:web authority.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/rotateSigningKey`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request Body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+```
+HTTP/1.1 202 Accepted
+Content-type: application/json
+```
++
+## Contracts
+
+This endpoint allows you to create new contracts, and update existing contracts. Contracts consist of two parts represented by two JSON definitions. Information on how to design and create a contract manually can be found [here](credential-design.md).
+
+- The display definition is used by administrators to control the appearance of a verifiable credential, for example background color, logo and title of the verifiable credential. This file also contains the claims that need to be stored inside the verifiable credential.
+- The rules definition contains the information on how to gather and collect attestations like self-attested claims, another verifiable credential as input or perhaps an ID Token received after a user has signed in to an OIDC compatible identity provider.
+
+### Methods
+
+| Methods | Return Type | Description |
+| -- | -- | -- |
+| [Get contract](#get-contract) | Contract | Read properties of a Contract |
+| [List contracts](#list-contracts) | Contract collection | Get a list of all configured contracts |
+| [Create contract](#create-contract) | Contract | Create a new contract |
+| [Update contract](#update-contract) | Contract | Update contract |
++
+### Get contract
+
+#### HTTP request
+
+`GET /v1.0/verifiableCredentials/authorities/:authorityId/contracts/:contractId`
+
+Replace the ```:authorityId``` and ```:contractId``` with the correct value of the authority and contract.
++
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+example message:
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "id": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhPHNjcmlwdD5hbGVydCgneWF5IScpOzwvc2NyaXB0Pg",
+ "name": "contractname",
+ "status": "Enabled",
+ "issueNotificationEnabled": false,
+ "availableInVcDirectory": false,
+ "manifestUrl": "...",
+ "issueNotificationAllowedToGroupOids" : null,
+ "rules": rulesModel,
+ "displays": displayModel[]
+}
+```
+
+The response contains the following properties
+
+#### Contract type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `Id` | string | contract ID |
+| `name` | string | The friendly name of this contract |
+| `status` | string | Always `Enabled` |
+| `manifestUrl` | string | URL to the contract used in the issuance request |
+| `issueNotificationEnabled` | boolean | set to true if users will be notified this VC is ready for them to get issued |
+| `issueNotificationAllowedToGroupOids` | array of groupId strings | array of group IDs this credential will be offered to |
+| `availableInVcDirectory` | boolean | Is this contract published in the Verifiable Credential Network |
+| [rules](#rulesmodel-type) | rulesModel | rules definition |
+| [displays](#displaymodel-type) | displayModel array| display definitions |
+
+#### rulesModel type
+
+| Property | Type | Description |
+| -- | -- | -- |
+|`attestations`| [idTokenAttestation](#idtokenattestation-type) or [idTokenHintAttestation](#idtokenhintattestation-type) and/or [verifiablePresentationAttestation](#verifiablepresentationattestation-type) and/or [selfIssuedAttestation](#selfissuedattestation-type) and/or [accessTokenAttestation](#accesstokenattestation-type) (array) | describing supported inputs for the rules |
+|`validityInterval` | number | this value shows the lifespan of the credential |
+|`vc`| vcType array | types for this contract |
+|`customStatusEndpoint`| [customStatusEndpoint] (#customstatusendpoint-type) (optional) | status endpoint to include in the verifiable credential for this contract |
+
+If the property `customStatusEndpoint` property isn't specified then the `anonymous` status endpoint is used.
+
+#### idTokenAttestation type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `mapping` | [claimMapping](#claimmapping-type) (optional) | rules to map input claims into output claims in the verifiable credential |
+| `configuration` | string (url) | location of the identity provider's configuration document |
+| `clientId` | string | client ID to use when obtaining the ID token |
+| `redirectUri` | string | redirect uri to use when obtaining the ID token MUST BE vcclient://openid/ |
+| `scope` | string | space delimited list of scopes to use when obtaining the ID token |
+| `required` | boolean (default false) | indicating whether this attestation is required or not |
+
+#### idTokenHintAttestation type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `mapping` | [claimMapping](#claimmapping-type) (optional) | rules to map input claims into output claims in the verifiable credential |
+| `required` | boolean (default false) | indicating whether this attestation is required or not |
+| `trustedIssuers` | string (array) | a list of DIDs allowed to issue the verifiable credential for this contract |
+
+#### verifiablePresentationAttestation type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `mapping` | [claimMapping](#claimmapping-type) (optional) | rules to map input claims into output claims in the verifiable credential |
+| `credentialType` | string (optional) | required credential type of the input |
+| `required` | boolean (default false) | indicating whether this attestation is required or not |
+| `trustedIssuers` | string (array) | a list of DIDs allowed to issue the verifiable credential for this contract |
+
+#### selfIssuedAttestation type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `mapping` | [claimMapping](#claimmapping-type) (optional) | rules to map input claims into output claims in the verifiable credential |
+| `required` | boolean (default false) | indicating whether this attestation is required or not |
+
+#### accessTokenAttestation type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `mapping` | [claimMapping](#claimmapping-type) (optional) | rules to map input claims into output claims in the verifiable credential |
+| `required` | boolean (default false) | indicating whether this attestation is required or not |
+
+> Supported `inputClaim` values for the `mappings` property are: `givenName`, `displayName`, `preferredLanguage`, `userPrincipalName`, `surname`, `mail`, `jobTitle`, `photo`.
+
+#### claimMapping type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `inputClaim` | string | the name of the claim to use from the input |
+| `outputClaim` | string | the name of the claim in the verifiable credential |
+| `indexed` | boolean (default false) | indicating whether the value of this claim is used for searching; only one clientMapping object is allowed to be indexed for a given contract |
+| `required` | boolean (default false) | indicating whether this mapping is required or not |
+| `type` | string (optional) | type of claim |
+
+#### customStatusEndpoint type
+
+| Property | Type | Description |
+| -- | -- | -- |
+| `url` | string (url)| the url of the custom status endpoint |
+| `type` | string | the type of the endpoint |
+example:
+
+```
+"rules": {
+ "attestations": {
+ "idTokens": [
+ {
+ "clientId": "2f670d73-624a-41fe-a139-6f1f8f2d2e47",
+ "configuration": "https://bankofwoodgrove.b2clogin.com/bankofwoodgrove.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_si",
+ "redirectUri": "vcclient://openid/",
+ "scope": "openid",
+ "mapping": [
+ {
+ "outputClaim": "givenName",
+ "required": false,
+ "inputClaim": "given_name",
+ "indexed": false
+ },
+ {
+ "outputClaim": "familyName",
+ "required": false,
+ "inputClaim": "family_name",
+ "indexed": true
+ }
+ ],
+ "required": false
+ }
+ ]
+ },
+ "validityInterval": 2592000,
+ "vc": {
+ "type": [
+ "BankofWoodgroveIdentity"
+ ]
+ }
+}
+```
+
+#### displayModel type
+
+| Property | Type | Description |
+| -- | -- | -- |
+|`locale`| string | the locale of this display |
+|`credential` | [displayCredential](#displaycredential-type) | the display properties of the verifiable credential |
+|`consent` | [displayConsent](#displayconsent-type) | supplemental data when the verifiable credential is issued |
+|`claims`| [displayClaims](#displayclaims-type) array | labels for the claims included in the verifiable credential |
+
+#### displayCredential type
+
+| Property | Type | Description |
+| -- | -- | -- |
+|`title`| string | title of the credential |
+|`issuedBy` | string | the name of the issuer of the credential |
+|`backgroundColor` | number (hex)| background color of the credential in hex, for example, #FFAABB |
+|`textColor`| number (hex)| text color of the credential in hex, for example, #FFAABB |
+|`description`| string | supplemental text displayed alongside each credential |
+|`logo`| [displayCredentialLogo](#displaycredentiallogo-type) | the logo to use for the credential |
+
+#### displayCredentialLogo type
+
+| Property | Type | Description |
+| -- | -- | -- |
+|`url`| string (url) | url of the logo (optional if image is specified) |
+|`description` | string | the description of the logo |
+|`image` | string | the base-64 encoded image (optional if url is specified) |
+
+#### displayConsent type
+
+| Property | Type | Description |
+| -- | -- | -- |
+|`title`| string | title of the consent |
+|`instructions` | string | supplemental text to use when displaying consent |
+
+#### displayClaims type
++
+| Property | Type | Description |
+| -- | -- | -- |
+|`label`| string | the label of the claim in display |
+|`claim`| string | the name of the claim to which the label applies |
+|`type`| string | the type of the claim |
+|`description` | string (optional) | the description of the claim |
+
+example:
+```
+{
+ "displays": [
+ {
+ "locale": "en-US",
+ "card": {
+ "backgroundColor": "#FFA500",
+ "description": "ThisisyourBankofWoodgroveIdentity",
+ "issuedBy": "BankofWoodgrove",
+ "textColor": "#FFFF00",
+ "title": "BankofWoodgroveIdentity",
+ "logo": {
+ "description": "Defaultbankofwoodgrovelogo",
+ "uri": "https://didcustomerplayground.blob.core.windows.net/public/VerifiedCredentialExpert_icon.png"
+ }
+ },
+ "consent": {
+ "instructions": "Please login with your bankofWoodgrove account to receive this credential.",
+ "title": "Do you want to accept the verifiedbankofWoodgrove Identity?"
+ },
+ "claims": [
+ {
+ "claim": "vc.credentialSubject.givenName",
+ "label": "Name",
+ "type": "String"
+ },
+ {
+ "claim": "vc.credentialSubject.familyName",
+ "label": "Surname",
+ "type": "String"
+ }
+ ]
+ }
+ ]
+}
+```
+
+### List contracts
+
+This API lists all contracts configured in the current tenant for the specified authority.
+
+#### HTTP request
+
+`GET /v1.0/verifiableCredentials/authorities/:authorityId/contracts`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+example message:
+
+```
+{
+ value:
+ [
+ {
+ "id": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhPHNjcmlwdD5hbGVydCgneWF5IScpOzwvc2NyaXB0Pg",
+ "name": "test1",
+ "authorityId": "ffea7eb3-0000-1111-2222-000000000000",
+ "status": "Enabled",
+ "issueNotificationEnabled": false,
+ "manifestUrl" : "https:/...",
+ "rules": "<rules JSON>",
+ "displays": [{<display JSON}]
+ },
+ {
+ "id": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhdGVzdDI",
+ "name": "test2",
+ "authorityId": "cc55ba22-0000-1111-2222-000000000000",
+ "status": "Enabled",
+ "issueNotificationEnabled": false,
+ "manifestUrl" : "https:/...",
+ "rules": "<rules JSON>",
+ "displays": [{<display JSON}]
+ }
+ ]
+}
+```
+
+### Create contract
+
+When creating a contract the name has to be unique in the tenant. In case you have created multiple authorities, the contract name has to be unique across all authorities.
+The name of the contract will be part of the contract URL which is used in the issuance requests.
+
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/contracts`
++
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
++
+Example request
+
+```
+{
+ "name": "ExampleContractName1",
+ "rules": "<rules JSON>",
+ "displays": [{<display JSON}],
+}
+```
+
+#### Response message
+
+Example message:
+
+```
+HTTP/1.1 201 Created
+Content-type: application/json
+
+{
+ "id": "GUID",
+ "name": "ExampleContractName1",
+ "issuerId": "cc55ba22-0000-1111-2222-000000000000",
+ "status": "Enabled",
+ "issueNotificationEnabled": false,
+ "rules": "<rules JSON>",
+ "displays": [{<display JSON}],
+ "manifestUrl": "https://..."
+}
+```
++
+### Update contract
+
+This API Allows you to update the contract.
+
+`PATCH /v1.0/verifiableCredentials/authorities/:authorityId/contracts/:contractid`
+
+Example request:
+
+```
+{
+ "rules": "<rules JSON>",
+ "displays": [{<display JSON}],}
+}
+```
+
+#### Response message
+
+Example message:
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "id": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhPHNjcmlwdD5hbGVydCgneWF5IScpOzwvc2NyaXB0Pg",
+ "name": "contractname",
+ "status": "Enabled",
+ "issueNotificationEnabled": false,
+ "availableInVcDirectory": false,
+ "manifestUrl": "https://...",
+ "issueNotificationAllowedToGroupOids" : null,
+ "rules": rulesModel,
+ "displays": displayModel[]
+}
+```
+
+## Credentials
+
+This endpoint allows you to search for issued verifiable credentials, check revocation status and revoke credentials.
+
+### Methods
++
+| Methods | Return Type | Description |
+| -- | -- | -- |
+| [Get credential](#get-credential) | Credential | Read properties of a Credential |
+| [Search credentials](#search-credentials) | Credential collection | Search a list of credentials with a specific claim value |
+| [Revoke credential](#revoke-credential) | | Revoke specific credential |
+
+### Get credential
+This API allows you to retrieve a specific credential and check the status to see if it is revoked or not.
+
+#### HTTP Request
+`GET /v1.0/verifiableCredentials/authorities/:authorityId/contracts/:contractId/credentials/:credentialId`
+
+#### Request headers
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Response message
+Example message
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "id": "urn:pic:aea42fb3724b4ef08bd2d2712e79bda2",
+ "contractId": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhdGVzdDM",
+ "status": "valid",
+ "issuedAt": "2017-09-13T21:59:23.9868631Z"
+}
+```
+
+### Search credentials
+
+You are able to [search](how-to-issuer-revoke.md) for verifiable credentials with specific index claims. Since only a hash is stored, you need to search for the specific calculated value. The algorithm you need to use is: Base64Encode(SHA256(contractid + claim value)) An example in C# looks like this:
+
+```csharp
+ string claimvalue = "Bowen";
+ string contractid = "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhdGVzdDM";
+ string output;
+
+ using (var sha256 = SHA256.Create())
+ {
+ var input = contractid + claimvalue;
+ byte[] inputasbytes = Encoding.UTF8.GetBytes(input);
+ hashedsearchclaimvalue = Convert.ToBase64String(sha256.ComputeHash(inputasbytes));
+ }
+```
+
+The following request shows how to add the calculated value to the filter parameter of the request. At this moment only the filter=indexclaim eq format is supported.
+
+### HTTP request
+
+`GET /v1.0/verifiableCredentials/authorities/:authorityId/contracts/:contractId/credentials?filter=indexclaim eq {hashedsearchclaimvalue}`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+Example message
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "value": [
+ {
+ "id": "urn:pic:aea42fb3724b4ef08bd2d2712e79bda2",
+ "contractId": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhdGVzdDM",
+ "status": "valid",
+ "issuedAt": 1644029489000
+ }
+ ]
+}
+```
+
+Example message
+```
+{
+ "value": [
+ {
+ "id": "urn:pic:aea42fb3724b4ef08bd2d2712e79bda2",
+ "contractId": "ZjViZjJmYzYtNzEzNS00ZDk0LWE2ZmUtYzI2ZTQ1NDNiYzVhdGVzdDM",
+ "status": "issuerRevoked",
+ "issuedAt": 1644029489000
+ }
+ ]
+}
+```
+
+### Revoke credential
+
+This API allows you to revoke a specific credential, after you searched for the credential by using the search API the credential can be revoked by specifying the specific credential ID.
++
+#### HTTP request
+
+`POST /v1.0/verifiableCredentials/authorities/:authorityId/contracts/:contractId/credentials/:credentialid/revoke`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method.
+
+#### Response message
+
+```
+HTTP/1.1 204 No Content
+Content-type: application/json
+```
++
+## Opt-out
+
+This method will completely remove all instances of the verifiable credential service in this tenant. It removes all configured contracts. Every issued verifiable credential can't be checked for revocation. This action can't be undone.
+
+>[!WARNING]
+> This action cannot be undone and will invalidate all issued verifiable credentials and created contracts.
+
+#### HTTP Request
+`POST /v1.0/verifiableCredentials/optout`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request body
+
+Don't supply a request body for this method
+
+#### Response message
+
+Example response message
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+OK
+```
+
+#### Remark
+
+>[!NOTE]
+> If you don't have delete permissions on Key Vault we will return an error message and still opt-out
+
+## Next steps
+
+- [Specify the request service REST API issuance request](issuance-request-api.md)
+- [Entra Verified ID Network API](issuance-request-api.md)
active-directory Credential Design https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/credential-design.md
[!INCLUDE [verifiable credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-Verifiable credentials are made up of two components, *rules* definitions and *display* definitions. A rules definition determines what users need to provide before they receive a verifiable credential. A display definition controls the branding of the credential and styling of the claims.
+Verifiable credentials definitions are made up of two components, *display* definitions and *rules* definitions. A display definition controls the branding of the credential and styling of the claims. A rules definition determines what users need to provide before they receive a verifiable credential.
-This article explains how to modify both types of files to meet the requirements of your organization.
+This article explains how to modify both types of definitions to meet the requirements of your organization.
> [!IMPORTANT] > Microsoft Entra Verified ID is currently in preview. This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. > For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
-## Rules definition: Requirements from the user
-
-The rules definition is a simple JSON document that describes important properties of verifiable credentials. In particular, it describes how claims are used to populate your verifiable credential.
-
-### User-input types
+## Display definition: wallet credential visuals
-The following four user-input types are currently available to be configured in the rules definition. They're used by the verifiable credential issuing service to insert claims into a verifiable credential and attest to that information with your decentralized identifier (DID).
+Microsoft Entra Verified ID offer a limited set of options that can be used to reflect your brand. This article provides instructions how to customize your credentials, and best practices for designing credentials that look great after they're issued to users.
-* **ID token**: When this option is configured, you'll need to provide an Open ID Connect configuration URI and include the claims that should be included in the verifiable credential. Users are prompted to 'Sign in' on the Authenticator app to meet this requirement and add the associated claims from their account.
+Microsoft Authenticator, being a decentralized identities wallet, displays verifiable credentials that are issued to users as cards. As a VC administrator, you can choose card colors, icons, and text strings to match your organization's brand.
-* **ID token hint**: The sample App and Tutorial use the ID token Hint. When this option is configured, the relying party app will need to provide claims that should be included in the verifiable credential in the Request Service API issuance request. Where the relying party app gets the claims from is up to the app, but it can come from the current sign-in session, from backend CRM systems or even from self asserted user input.
-
-* **Verifiable credentials**: The end result of an issuance flow is to produce a verifiable credential but you may also ask the user to Present a verifiable credential in order to issue one. The rules definition is able to take specific claims from the presented verifiable credential and include those claims in the newly issued verifiable credential from your organization.
+![Screenshot of a verified credential card in Authenticator, calling out key elements.](media/credential-design/detailed-view.png)
-* **Self-attested claims**: When this option is selected, the user can type information directly into Authenticator. At this time, strings are the only supported input for self attested claims.
-
- ![Detailed view of a verifiable credential card.](media/credential-design/issuance-doc.png)
-
-### Static claims
+Cards also contain customizable fields. You can use these fields to let users know the purpose of the card, the attributes it contains, and more.
-Additionally, you can declare a static claim in the rules definition, but this input doesn't come from the user. The issuer defines a static claim in the rules definition, and it looks like any other claim in the verifiable credential. You add credentialSubject after vc.type and declare the attribute and the claim.
+## Create a credential display definition
-```json
-"vc": {
- "type": [ "StaticClaimCredential" ],
- "credentialSubject": {
- "staticClaim": true,
- "anotherClaim": "Your Claim Here"
- },
- }
-}
-```
+The display definition is a simple JSON document that describes how the wallet app should display the contents of your verifiable credentials.
-## Input type: ID token
+>[!NOTE]
+> This display model is currently used only by Microsoft Authenticator.
-To get an ID token as input, the rules definition needs to configure the well-known endpoint of the OpenID Connect (OIDC)-compatible identity system. In that system you need to register an application with the correct information from the [Issuer service communication examples](issuer-openid.md). Additionally, you need to put client_id in the rules definition and fill in a scope parameter with the correct scopes. For example, Azure Active Directory needs the email scope if you want to return an email claim in the ID token.
+The display definition has the following structure:
```json
- {
- "attestations": {
- "idTokens": [
- {
- "mapping": [
- {
- "outputClaim": "firstName",
- "inputClaim": "given_name",
- "required": true,
- "indexed": false
- },
- {
- "outputClaim": "lastName",
- "inputClaim": "family_name",
- "required": true,
- "indexed": true
- }
- ],
- "configuration": "https://dIdPlayground.b2clogin.com/dIdPlayground.onmicrosoft.com/B2C_1_sisu/v2.0/.well-known/openid-configuration",
- "client_id": "8d5b446e-22b2-4e01-bb2e-9070f6b20c90",
- "redirect_uri": "vcclient://openid/",
- "scope": "openid profile"
- }
- ]
+{
+ "locale": "en-US",
+ "card": {
+ "title": "Verified Credential Expert",
+ "issuedBy": "Microsoft",
+ "backgroundColor": "#000000",
+ "textColor": "#ffffff",
+ "logo": {
+ "uri": "https://didcustomerplayground.blob.core.windows.net/public/VerifiedCredentialExpert_icon.png",
+ "description": "Verified Credential Expert Logo"
},
- "validityInterval": 2592000,
- "vc": {
- "type": ["https://schema.org/EducationalCredential", "https://schemas.ed.gov/universityDiploma2020", "https://schemas.contoso.edu/diploma2020" ]
- }
- }
-```
-
-For more information about properties, see [idTokenAttestation type](rules-and-display-definitions-model.md#idtokenattestation-type).
-
-## Input type: ID token hint
-
-To get an ID token hint as input, the rules definition shouldn't contain configuration for an OIDC identity system. Instead, it should have the special value `https://self-issued.me` for the configuration property. The claims mappings are the same as for the ID token type, but the difference is that the claim values need to be provided by the issuance relying party app in the Request Service API issuance request.
-
-```json
- {
- "attestations": {
- "idTokenHints": [
- {
- "configuration": "https://self-issued.me",
- "mapping": [
- {
- "outputClaim": "firstName",
- "inputClaim": "given_name",
- "required": true,
- "indexed": false
- },
- {
- "outputClaim": "lastName",
- "inputClaim": "family_name",
- "required": true,
- "indexed": true
- }
- ]
- }
- ]
+ "description": "Use your verified credential to prove to anyone that you know all about verifiable credentials."
+ },
+ "consent": {
+ "title": "Do you want to get your Verified Credential?",
+ "instructions": "Sign in with your account to get your card."
+ },
+ "claims": [
+ {
+ "claim": "vc.credentialSubject.firstName",
+ "label": "First name",
+ "type": "String"
},
- "validityInterval": 2592000,
- "vc": {
- "type": ["VerifiedCredentialExpert" ]
+ {
+ "claim": "vc.credentialSubject.lastName",
+ "label": "Last name",
+ "type": "String"
}
- }
-```
-
-For more information about properties, see [idTokenHintAttestation type](rules-and-display-definitions-model.md#idtokenhintattestation-type).
-
-### vc.type: Choose credential types
-
-All verifiable credentials must declare their *type* in their rules definition. The credential type distinguishes your verifiable credentials from credentials that are issued by other organizations, and it ensures interoperability between issuers and verifiers.
-
-To indicate a credential type, provide one or more credential types that the credential satisfies. Each type is represented by a unique string. Often, a URI is used to ensure global uniqueness. The URI doesn't need to be addressable. It's treated as a string.
-
-As an example, a diploma credential issued by Contoso University might declare the following types:
-
-| Type | Purpose |
-| - | - |
-| `https://schema.org/EducationalCredential` | Declares that diplomas issued by Contoso University contain attributes defined by the schema.org `EducationaCredential` object. |
-| `https://schemas.ed.gov/universityDiploma2020` | Declares that diplomas issued by Contoso University contain attributes defined by the U.S. Department of Education. |
-| `https://schemas.contoso.edu/diploma2020` | Declares that diplomas issued by Contoso University contain attributes defined by Contoso University. |
-
-By declaring three types of diplomas, Contoso can issue credentials that satisfy different requests from verifiers. A bank can request a set of `EducationCredential`s from a user, and the diploma can be used to satisfy the request. Or the Contoso University Alumni Association can request a credential of type `https://schemas.contoso.edu/diploma2020`, and the diploma can also satisfy the request.
-
-To ensure interoperability of your credentials, we recommend that you work closely with related organizations to define credential types, schemas, and URIs for use in your industry. Many industry bodies provide guidance on the structure of official documents that can be repurposed for defining the contents of verifiable credentials. You should also work closely with the verifiers of your credentials to understand how they intend to request and consume your verifiable credentials.
-
-## Input type: Verifiable credential
-
-> [!NOTE]
-> Rules definitions that ask for a verifiable credential don't use the presentation exchange format for requesting credentials. This approach will be updated when the issuing service supports the standard, Credential Manifest.
-
-```json
-{
- "attestations": {
- "presentations": [
- {
- "mapping": [
- {
- "outputClaim": "first_name",
- "inputClaim": "$.vc.credentialSubject.firstName ",
- "required": true,
- "indexed": false
- },
- {
- "outputClaim": "last_name",
- "inputClaim": ""$.vc.credentialSubject.lastName ",
- "required": true,
- "indexed": true
- },
- "credentialType": "VerifiedCredentialNinja",
- "contracts": [
- "https://beta.did.msidentity.com/v1.0/3c32ed40-8a10-465b-8ba4-0b1e86882668/verifiableCredential/contracts/VerifiedCredentialNinja"
- ],
- "issuers": [
- {
- "iss": "did:ion:123"
- }
- ]
- }
- ]
- },
- "validityInterval": 25920000,
- "vc": {
- "type": [
- "ProofOfNinjaNinja"
- ]
- }
+ ]
} ```
-For more information about properties, see [verifiablePresentationAttestation type](rules-and-display-definitions-model.md#verifiablepresentationattestation-type).
+For more information about properties, see [displayModel type](rules-and-display-definitions-model.md#displaymodel-type).
-## Input type: Self-attested claims
+## Rules definition: Requirements from the user
-During the issuance flow, users can be asked to input some self-attested information. As of now, the only input type is 'string'.
+The rules definition is a simple JSON document that describes important properties of verifiable credentials. In particular, it describes how claims are used to populate your verifiable credential and the credential type.
```json { "attestations": {
- "selfIssued" :
- {
- "mapping": [
- {
- "outputClaim": "firstName",
- "inputClaim": "firstName",
- "required": true,
- "indexed": false
- },
- {
- "outputClaim": "lasttName",
- "inputClaim": "lastName",
- "required": true,
- "indexed": true
- }
--
- }
+ ...
},
- "validityInterval": 2592001,
+ "validityInterval": 2592000,
"vc": {
- "type": [ "VerifiedCredentialExpert" ]
+ "type": [
+ "VerifiedCredentialExpert"
+ ]
} } ```
-For more information about properties, see [selfIssuedAttestation type](rules-and-display-definitions-model.md#selfissuedattestation-type).
+### Attestations
-## Display definition: Verifiable credentials in Microsoft Authenticator
+The following four attestation types are currently available to be configured in the rules definition. They're used by the verifiable credential issuing service to insert claims into a verifiable credential and attest to that information with your decentralized identifier (DID).
-Verifiable credentials offer a limited set of options that can be used to reflect your brand. This article provides instructions how to customize your credentials, and best practices for designing credentials that look great after they're issued to users.
+* **ID token**: When this option is configured, you'll need to provide an Open ID Connect configuration URI and include the claims that should be included in the verifiable credential. Users are prompted to 'Sign in' on the Authenticator app to meet this requirement and add the associated claims from their account. To configure this option, see this [how to guide](how-to-use-quickstart-idtoken.md)
-Authenticator displays verifiable credentials that are issued to users as cards. As an administrator, you can choose card colors, icons, and text strings to match your organization's brand.
-![Image of a verified credential card in Authenticator, calling out key elements.](media/credential-design/detailed-view.png)
+* **ID token hint**: The sample App and Tutorial use the ID token Hint. When this option is configured, the relying party app will need to provide claims that should be included in the verifiable credential in the Request Service API issuance request. Where the relying party app gets the claims from is up to the app, but it can come from the current sign-in session, from backend CRM systems or even from self asserted user input. To configure this option, please see this [how to guide](how-to-use-quickstart.md)
-Cards also contain customizable fields. You can use these fields to let users know the purpose of the card, the attributes it contains, and more.
+* **Verifiable credentials**: The end result of an issuance flow is to produce a verifiable credential but you may also ask the user to Present a verifiable credential in order to issue one. The rules definition is able to take specific claims from the presented verifiable credential and include those claims in the newly issued verifiable credential from your organization.
-## Create a credential display definition
+* **Self-attested claims**: When this option is selected, the user can type information directly into Authenticator. At this time, strings are the only supported input for self attested claims. To configure this option, please see this [how to guide](how-to-use-quickstart-selfissued.md)
-Much like the rules definition, the display definition is a simple JSON document that describes how the Authenticator app should display the contents of your verifiable credentials.
+For more information about the rules JSON model, see [rulesModel type](rules-and-display-definitions-model.md#rulesmodel-type).
->[!NOTE]
-> This display model is currently used only by Microsoft Authenticator.
+### Credential Types
-The display definition has the following structure:
+All verifiable credentials must declare their *type* in their [rules definition](rules-and-display-definitions-model.md#rulesmodel-type). The credential type distinguishes a verifiable credentials schema from other credentials and it ensures interoperability between issuers and verifiers. To indicate a credential type, provide one or more credential types that the credential satisfies. Each type is represented by a unique string. Often, a URI is used to ensure global uniqueness. The URI doesn't need to be addressable. It's treated as a string. As an example, a diploma credential issued by Contoso University might declare the following types:
-```json
-{
- "default": {
- "locale": "en-US",
- "card": {
- "title": "University Graduate",
- "issuedBy": "Contoso University",
- "backgroundColor": "#212121",
- "textColor": "#FFFFFF",
- "logo": {
- "uri": "https://contoso.edu/images/logo.png",
- "description": "Contoso University Logo"
- },
- "description": "This digital diploma is issued to students and alumni of Contoso University."
- },
- "consent": {
- "title": "Do you want to get your digital diploma from Contoso U?",
- "instructions": "Please log in with your Contoso U account to receive your digital diploma."
- },
- "claims": [
- {
- "claim": "vc.credentialSubject.name",
- "type": "String",
- "label": "Name"
- }
- ]
- }
-}
-```
+| Type | Purpose |
+| - | - |
+| `https://schema.org/EducationalCredential` | Declares that diplomas issued by Contoso University contain attributes defined by the schema.org `EducationaCredential` object. |
+| `https://schemas.ed.gov/universityDiploma2020` | Declares that diplomas issued by Contoso University contain attributes defined by the U.S. Department of Education. |
+| `https://schemas.contoso.edu/diploma2020` | Declares that diplomas issued by Contoso University contain attributes defined by Contoso University. |
-For more information about properties, see [displayModel type](rules-and-display-definitions-model.md#displaymodel-type).
+By declaring three types of diplomas, Contoso can issue credentials that satisfy different requests from verifiers. A bank can request a set of `EducationCredential`s from a user, and the diploma can be used to satisfy the request. Or the Contoso University Alumni Association can request a credential of type `https://schemas.contoso.edu/diploma2020`, and the diploma can also satisfy the request.
+
+To ensure interoperability of your credentials, we recommend that you work closely with related organizations to define credential types, schemas, and URIs for use in your industry. Many industry bodies provide guidance on the structure of official documents that can be repurposed for defining the contents of verifiable credentials. You should also work closely with the verifiers of your credentials to understand how they intend to request and consume your verifiable credentials.
## Next steps Now that you have a better understanding of verifiable credential design and how to create your own, see: - [Issuer service communication examples](issuer-openid.md)-- [Rules and display definition reference](rules-and-display-definitions-model.md)
+- [Rules and display definition reference](rules-and-display-definitions-model.md)
active-directory Decentralized Identifier Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/decentralized-identifier-overview.md
Title: Introduction to Azure Active Directory Verifiable Credentials (preview)
+ Title: Introduction to Microsoft Entra Verified ID (preview)
description: An overview Azure Verifiable Credentials.
editor:
Previously updated : 06/16/2022 Last updated : 06/02/2022
-# Introduction to Azure Active Directory Verifiable Credentials (preview)
+# Introduction to Microsoft Entra Verified ID (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)] > [!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview.
+> Microsoft Entra Verified ID is currently in public preview.
> This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. > For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/). Our digital and physical lives are increasingly linked to the apps, services, and devices we use to access a rich set of experiences. This digital transformation allows us to interact with hundreds of companies and thousands of other users in ways that were previously unimaginable.
-But identity data has too often been exposed in security breaches. These breaches affect our social, professional, and financial lives. Microsoft believes that thereΓÇÖs a better way. Every person has a right to an identity that they own and control, one that securely stores elements of their digital identity and preserves privacy. We are building an open, trustworthy, interoperable, and standards-based Decentralized Identity (DID) solution for individuals and organizations.
+But identity data has too often been exposed in security breaches. These breaches affect our social, professional, and financial lives. Microsoft believes that thereΓÇÖs a better way. Every person has a right to an identity that they own and control, one that securely stores elements of their digital identity and preserves privacy. This primer explains how we are joining hands with a diverse community to build an open, trustworthy, interoperable, and standards-based Decentralized Identity (DID) solution for individuals and organizations.
## Why we need Decentralized Identity
-Today we use our digital identity at work, home, and across every app, service, and device we use. Our digital identity is made up of everything we say, do, and experience in our lives. Activities like purchasing tickets for an event, checking into a hotel, or even ordering lunch become part of our identity. Today our identity and information about our online activity are owned and controlled by others. In some cases, even without our knowledge.
+Today we use our digital identity at work, at home, and across every app, service, and device we use. ItΓÇÖs made up of everything we say, do, and experience in our livesΓÇöpurchasing tickets for an event, checking into a hotel, or even ordering lunch. Currently, our identity and all our digital interactions are owned and controlled by other parties, some of whom we arenΓÇÖt even aware of.
Generally, users grant consent to several apps and devices. This approach requires a high degree of vigilance on the user's part to track who has access to what information. On the enterprise front, collaboration with consumers and partners requires high-touch orchestration to securely exchange data in a way that maintains privacy and security for all involved.
We believe a standards-based Decentralized Identity system can unlock a new set
## Lead with open standards
-WeΓÇÖre committed to working closely with customers, partners, and the community to unlock the next generation of Decentralized IdentityΓÇôbased experiences. We are excited to partner with individuals and organizations making incredible contributions in this space. If the DID ecosystem is to grow, standards, technical components, and code deliverables must be open source and accessible to all.
+WeΓÇÖre committed to working closely with customers, partners, and the community to unlock the next generation of Decentralized IdentityΓÇôbased experiences, and weΓÇÖre excited to partner with the individuals and organizations that are making incredible contributions in this space. If the DID ecosystem is to grow, standards, technical components, and code deliverables must be open source and accessible to all.
Microsoft is actively collaborating with members of the Decentralized Identity Foundation (DIF), the W3C Credentials Community Group, and the wider identity community. WeΓÇÖve worked with these groups to identify and develop critical standards, and the following standards have been implemented in our services.
Microsoft is actively collaborating with members of the Decentralized Identity F
Before we can understand DIDs, it helps to compare them with current identity systems. Email addresses and social network IDs are human-friendly aliases for collaboration but are now overloaded to serve as the control points for data access across many scenarios beyond collaboration. This creates a potential problem, because access to these IDs can be removed at any time by external parties.
-Decentralized Identifiers (DIDs) are different. DIDs are user-generated, self-owned, globally unique identifiers rooted in decentralized systems like ION. They possess unique characteristics, like greater assurance of immutability, censorship resistance, and tamper evasiveness. These attributes are critical for any ID system that is intended to provide self-ownership and user control.
+Decentralized Identifiers (DIDs) are different. DIDs are user-generated, self-owned, globally unique identifiers rooted in decentralized systems like ION. They possess unique characteristics, like greater assurance of immutability, censorship resistance, and tamper evasiveness. These attributes are critical for any ID system that is intended to provide self-ownership and user control.
MicrosoftΓÇÖs verifiable credential solution uses decentralized credentials (DIDs) to cryptographically sign as proof that a relying party (verifier) is attesting to information proving they are the owners of a verifiable credential. A basic understanding of DIDs is recommended for anyone creating a verifiable credential solution based on the Microsoft offering.
To deliver on these promises, we need a technical foundation made up of seven ke
![overview of Microsoft's verifiable credential environment](media/decentralized-identifier-overview/microsoft-did-system.png)
-**1. W3C Decentralized Identifiers (DIDs)**
+**1. W3C Decentralized Identifiers (DIDs)**.
IDs users create, own, and control independently of any organization or government. DIDs are globally unique identifiers linked to Decentralized Public Key Infrastructure (DPKI) metadata composed of JSON documents that contain public key material, authentication descriptors, and service endpoints.
-**2. Decentralized system**
+**2. Trust System**.
+In order to be able to resolve DID documents, DIDs are typically recorded on an underlying network of some kind that represents a trust system. Microsoft currently supports two trust systems, which are:
-- ION (Identity Overlay Network) ION is a Layer 2 open, permissionless network based on the purely deterministic Sidetree protocol, which requires no special tokens, trusted validators, or other consensus mechanisms. The linear progression of Bitcoin's time chain is all that's required for its operation. We have open sourced a [npm package](https://www.npmjs.com/package/@decentralized-identity/ion-tools) to make working with the ION network easy to integrate into your apps and services. Libraries include creating a new DID, generating keys and anchoring your DID on the Bitcoin blockchain.
+- ION (Identity Overlay Network) ION is a Layer 2 open, permissionless network based on the purely deterministic Sidetree protocol, which requires no special tokens, trusted validators, or other consensus mechanisms; the linear progression of Bitcoin's time chain is all that's required for its operation. We have open sourced a [npm package](https://www.npmjs.com/package/@decentralized-identity/ion-tools) to make working with the ION network easy to integrate into your apps and services. Libraries include creating a new DID, generating keys and anchoring your DID on the Bitcoin blockchain.
-- `did:web` is a permission based model that allows trust using a web domainΓÇÖs existing reputation.
+- DID:Web is a permission based model that allows trust using a web domainΓÇÖs existing reputation.
-**3. DID User Agent/Wallet: Microsoft Authenticator App**
+**3. DID User Agent/Wallet: Microsoft Authenticator App**.
Enables real people to use decentralized identities and Verifiable Credentials. Authenticator creates DIDs, facilitates issuance and presentation requests for verifiable credentials and manages the backup of your DID's seed through an encrypted wallet file.
-**4. Microsoft Resolver**
+**4. Microsoft Resolver**.
An API that connects to our ION node to look up and resolve DIDs using the ```did:ion``` method and return the DID Document Object (DDO). The DDO includes DPKI metadata associated with the DID such as public keys and service endpoints.
-**5. Azure Active Directory Verified Credentials Service**
+**5. Azure Active Directory Verified Credentials Service**.
An issuance and verification service in Azure and a REST API for [W3C Verifiable Credentials](https://www.w3.org/TR/vc-data-model/) that are signed with the ```did:ion``` method. They enable identity owners to generate, present, and verify claims. This forms the basis of trust between users of the systems. ## A sample scenario
-The scenario we use to explain how Verifiable Credentials work involves:
+The scenario we use to explain how VCs work involves:
-- WoodGrove Inc. a company.-- ProseWare, a company that offers WoodGrove employees discounts.-- Alice, an employee at WoodGrove, Inc. who wants to get a discount from ProseWare
+- Woodgrove Inc. a company.
+- Proseware, a company that offers Woodgrove employees discounts.
+- Alice, an employee at Woodgrove, Inc. who wants to get a discount from Proseware
-Today, Alice provides a username and password to sign in WoodGroveΓÇÖs networked environment. WoodGrove is deploying a verifiable credential solution to provide a more manageable way for Alice to prove that she's an employee of WoodGrove. ProseWare accepts verifiable credentials issued by WoodGrove as proof of employment to offer corporate discounts as part of their corporate discount program.
-Alice requests WoodGrove Inc for a proof of employment verifiable credential. WoodGrove Inc attests Alice's identity and issues a signed verifiable credential that Alice can accept and store in her digital wallet application. Alice can now present this verifiable credential as a proof of employment on the ProseWare site. After a successful presentation of the credential, ProsWare offers discount to Alice and the transaction is logged in Alice's wallet application so that she can track where and to whom she's presented her proof of employment verifiable credential.
+
+Today, Alice provides a username and password to log onto WoodgroveΓÇÖs networked environment. Woodgrove is deploying a verifiable credential solution to provide a more manageable way for Alice to prove that she is an employee of Woodgrove. Proseware accepts verifiable credentials issued by Woodgrove as proof of employment to offer corporate discounts as part of their corporate discount program.
+
+Alice requests Woodgrove Inc for a proof of employment verifiable credential. Woodgrove Inc attests Alice's identity and issues a signed verfiable credential that Alice can accept and store in her digital wallet application. Alice can now present this verifiable credential as a proof of employement on the Proseware site. After a succesfull presentation of the credential, Prosware offers discount to Alice and the transaction is logged in Alice's wallet application so that she can track where and to whom she has presented her proof of employment verifiable credential.
![microsoft-did-overview](media/decentralized-identifier-overview/did-overview.png)
The roles in this scenario are:
![roles in a verifiable credential environment](media/decentralized-identifier-overview/issuer-user-verifier.png)
-**issuer** ΓÇô The issuer is an organization that creates an issuance solution requesting information from a user. The information is used to verify the userΓÇÖs identity. For example, WoodGrove, Inc. has an issuance solution that enables them to create and distribute verifiable credentials (VCs) to all their employees. The employee uses the Authenticator app to sign in with their username and password, which passes an ID token to the issuing service. Once WoodGrove, Inc. validates the ID token submitted, the issuance solution creates a VC that includes claims about the employee and is signed with WoodGrove, Inc. DID. The employee now has a verifiable credential that is signed by their employer, which includes the employees DID as the subject DID.
+**issuer** ΓÇô The issuer is an organization that creates an issuance solution requesting information from a user. The information is used to verify the userΓÇÖs identity. For example, Woodgrove, Inc. has an issuance solution that enables them to create and distribute verifiable credentials (VCs) to all their employees. The employee uses the Authenticator app to sign in with their username and password, which passes an ID token to the issuing service. Once Woodgrove, Inc. validates the ID token submitted, the issuance solution creates a VC that includes claims about the employee and is signed with Woodgrove, Inc. DID. The employee now has a verifiable credential that is signed by their employer, which includes the employees DID as the subject DID.
-**user** ΓÇô The user is the person or entity that is requesting a VC. For example, Alice is a new employee of WoodGrove, Inc. and was previously issued her proof of employment verifiable credential. When Alice needs to provide proof of employment in order to get a discount at ProseWare, she can grant access to the credential in her Authenticator app by signing a verifiable presentation that proves Alice is the owner of the DID. ProseWare is able to validate the credential was issued by WoodGrove, Inc.and Alice is the owner of the credential.
+**user** ΓÇô The user is the person or entity that is requesting a VC. For example, Alice is a new employee of Woodgrove, Inc. and was previously issued her proof of employment verifiable credential. When Alice needs to provide proof of employment in order to get a discount at Proseware, she can grant access to the credential in her Authenticator app by signing a verifiable presentation that proves Alice is the owner of the DID. Proseware is able to validate the credential was issued by Woodgrove, Inc.and Alice is the owner of the credential.
-**verifier** ΓÇô The verifier is a company or entity who needs to verify claims from one or more issuers they trust. For example, ProseWare trusts WoodGrove, Inc. does an adequate job of verifying their employeesΓÇÖ identity and issuing authentic and valid VCs. When Alice tries to order the equipment she needs for her job, ProseWare will use open standards such as SIOP and Presentation Exchange to request credentials from the user proving they are an employee of WoodGrove, Inc. For example, ProseWare might provide Alice a link to a website with a QR code she scans with her phone camera. This initiates the request for a specific VC, which Authenticator will analyze and give Alice the ability to approve the request to prove her employment to ProseWare. ProseWare can use the verifiable credentials service API or SDK, to verify the authenticity of the verifiable presentation. Based on the information provided by Alice they give Alice the discount. If other companies and organizations know that WoodGrove, Inc. issues VCs to their employees, they can also create a verifier solution and use the WoodGrove, Inc. verifiable credential to provide special offers reserved for WoodGrove, Inc. employees.
+**verifier** ΓÇô The verifier is a company or entity who needs to verify claims from one or more issuers they trust. For example, Proseware trusts Woodgrove, Inc. does an adequate job of verifying their employeesΓÇÖ identity and issuing authentic and valid VCs. When Alice tries to order the equipment she needs for her job, Proseware will use open standards such as SIOP and Presentation Exchange to request credentials from the User proving they are an employee of Woodgrove, Inc. For example, Proseware might provide Alice a link to a website with a QR code she scans with her phone camera. This initiates the request for a specific VC, which Authenticator will analyze and give Alice the ability to approve the request to prove her employment to Proseware. Proseware can use the verifiable credentials service API or SDK, to verify the authenticity of the verifiable presentation. Based on the information provided by Alice they give Alice the discount. If other companies and organizations know that Woodgrove, Inc. issues VCs to their employees, they can also create a verifier solution and use the Woodgrove, Inc. verifiable credential to provide special offers reserved for Woodgrove, Inc. employees.
## Next steps
active-directory Error Codes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/error-codes.md
+
+ Title: API Error codes reference
+
+description: Reference of error codes for Microsoft Entra Verified ID APIs
+documentationCenter: ''
+++++ Last updated : 07/29/2022++
+#Customer intent: As an administrator, I am trying to learn how to use the Request Service API and integrate it into my business application.
++
+# Request Service API error codes
++
+Microsoft Entra Verified ID includes the Request Service REST API that allows you to issue and verify a credential. This article specifies the error codes for the Request Service API.
+
+## Error object
+
+During public preview, the Request Service API returned errors in the following format.
+
+```json
+{
+ "requestId": "4bb6726f77af7623ab52962323016442",
+ "date": "Thu, 28 Apr 2022 14:30:54 GMT",
+ "mscv": "17ppwf3uxR10MfRR.1",
+ "error": {
+ "code": "client_request.invalid_include_qr_code",
+ "message": "The request contains `includeQRCode`, but it is not boolean."
+ }
+}
+
+```
+
+This format is now changed into the following to enable both simpler error handling and better support for troubleshooting. In the new format, the outer [error](#error-type) code and message fields have standardized values while the [```innererror```](#inner-error-type) object provide details on what caused the error.
+
+```json
+{
+ "requestId": "782628eb-503a-4978-84f2-d7c634f25b15",
+ "date": "Fri, 29 Apr 2022 11:20:19 GMT",
+ "mscv": "QbBLwF7XAp0dt4Lw.1",
+ "error": {
+ "code": "badRequest",
+ "message": "The request is invalid.",
+ "innererror": {
+ "code": "badOrMissingField",
+ "message": "The request contains `includeQRCode`, but it is not boolean.",
+ "target": "includeQRCode"
+ }
+ }
+}
+```
+
+|Property |Type |Description |
+||||
+| `requestId`| string | An autogenerated request ID.|
+| `date`| date| The time of the error. |
+| `mscv`| string| Internal Microsoft code. |
+| `error` | [Error](#error-type)| The outer error object |
+
+### Error type
+
+The `error` object is now matching the HTTP Status Code returned from the API Call to enable easier error handling for developers.
+
+|Property |Type |Description |
+||||
+| `code` | string| The return error code matching the HTTP Status Code. |
+| `message`| string| A standardized error message that is also dependent on the HTTP status code returned. |
+| `innererror` | [Innererror](#inner-error-type)| Provide details on what caused the error. |
++
+### Error codes and messages
+
+The following are the possible top level `code` values that maps to the different HTTP status codes returned.
+
+|HTTP Status Code |code |message |
+||||
+| 400 | badRequest |The request is invalid.|
+| 401 | unauthorized |The requested resource requires authentication|
+| 403 | forbidden |Missing permissions to fulfill this request.|
+| 404 | notFound |The requested resource doesn't exist.|
+| 405 | methodNotAllowed |The requested method isn't allowed on the requested resource.|
+| 406 | notAcceptable |Requested response format not supported.|
+| 408 | requestTimeout |The request timed out.|
+| 409 | conflict |The server can't fulfill the request due to a server conflict.|
+| 410 | gone |The requested resource is no longer available.|
+| 411 | contentLengthRequired |The Content-Length header is missing.|
+| 412 | preconditionFailed |A precondition for this request failed.|
+| 413 | payloadTooLarge |The payload is too large.|
+| 414 | uriTooLong |The URI is too long.|
+| 415 | unsupportedMediaType |The specified media type is unsupported.|
+| 416 | rangeNotSatisfiable |The requested range of data requested can't be satisfied.|
+| 417 | expectationFailed |The Expect header couldn't be satisfied.|
+| 421 | misdirectedRequest |Unable to produce a response for this request.|
+| 422 | unprocessableEntity |The request contains semantic errors.|
+| 423 | locked |The source or destination resource is locked.|
+| 429 | tooManyRequests |Too many requests, try again later.|
+| 431 | requestHeaderFieldsTooLarge |The request header field is too large.|
+| 500 | internalServerError |A generic error has occurred on the server.|
+| 501 | notImplemented |The server doesn't support the requested function.|
+| 502 | badGateway |bad response received from another gateway.|
+| 503 | serviceUnavailable |The server is temporarily unavailable, please try again later.|
+| 504 | gatewayTimeout |Time out received from another gateway.|
+| 507 | insufficientStorage |Unable to save data for the request.|
+
+### Inner error type
+
+The inner error object contains error specific details useful to the developer to help investigate the current failure.
+
+```json
+{
+ "requestId": "782628eb-503a-4978-84f2-d7c634f25b15",
+ "date": "Fri, 29 Apr 2022 11:20:19 GMT",
+ "mscv": "QbBLwF7XAp0dt4Lw.1",
+ "error": {
+ "code": "badRequest",
+ "message": "The request is invalid.",
+ "innererror": {
+ "code": "badOrMissingField",
+ "message": "The request contains `includeQRCode`, but it is not boolean.",
+ "target": "includeQRCode"
+ }
+ }
+}
+```
+
+|Property |Type |Description |
+||||
+| `code` | string| The internal error code. Contains a standardized code, based on the type of the error |
+| `message`| string| The internal error message. Contains a detailed message of the error. In this example, the `inlcudeQRCode` field is of the wrong type.|
+| `target` | string| Optional. Target contains the field in the request that is causing this error. This field is optional and may not be present, depending on the error type. |
++
+### Inner error codes
+
+|Code|Description|
+|-|-|
+|`badOrMissingField`|returned when validation issues on the request occur. The `target` field contains the field in the request that is causing the issue.|
+|`notFound`|returned when a resource the client is requesting isn't found. The `target` field contains the resource name/id that isn't found.|
+|`tokenError`|returned for any validation issues on tokens like JWT and the likes. The `target` field contains the token name causing the issue, when applicable.|
+|`transientError`|returned for all the cases where the client might be able to get a successful response if they retry the request at a later stage. A common example of when this code is returned is when an HTTP 429 code is returned back|
+
+## Next steps
+
+- [Issuance API specification](issuance-request-api.md)
+- [Presentation API specification](presentation-request-api.md)
active-directory Get Started Request Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/get-started-request-api.md
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-Azure Active Directory (Azure AD) Verifiable Credentials includes the Request Service REST API. This API allows you to issue and verify credentials. This article shows you how to start using the Request Service REST API.
+Microsoft Entra Verified ID includes the Request Service REST API. This API allows you to issue and verify credentials. This article shows you how to start using the Request Service REST API.
> [!IMPORTANT] > The Request Service REST API is currently in preview. This preview version is provided without a service level agreement, and you can occasionally expect breaking changes and deprecation of the API while in preview. The preview version of the API isn't recommended for production workloads. For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
Use the [OAuth 2.0 client credentials grant flow](../../active-directory/develop
# [HTTP](#tab/http) ```http
-Refer to to the Microsoft Authentication Library (MSAL) documentation for more information on how to acquire tokens via HTTP.
+POST /{tenant}/oauth2/v2.0/token HTTP/1.1 //Line breaks for clarity
+Host: login.microsoftonline.com
+Content-Type: application/x-www-form-urlencoded
+
+client_id=535fb089-9ff3-47b6-9bfb-4f1264799865
+&scope=3db474b9-6a0c-4840-96ac-1fceb342124f/.default
+&client_secret=sampleCredentia1s
+&grant_type=client_credentials
``` # [C#](#tab/csharp)
const msalConfig = {
}; const cca = new msal.ConfidentialClientApplication(msalConfig); const msalClientCredentialRequest = {
- scopes: ["bbb94529-53a3-4be5-a069-7eaf2712b826/.default"],
+ scopes: ["3db474b9-6a0c-4840-96ac-1fceb342124f/.default"],
skipCache: false, }; module.exports.msalCca = cca;
const result = await mainApp.msalCca.acquireTokenByClientCredential(mainApp.msal
} ```
+# [Python](#tab/python)
+
+```python
+# Initialize MSAL library by using the following code
+msalCca = msal.ConfidentialClientApplication( config["azClientId"],
+ authority="https://login.microsoftonline.com/" + config["azTenantId"],
+ client_credential=config["azClientSecret"],
+ )
+
+# Acquire an access token
+accessToken = ""
+result = msalCca.acquire_token_for_client( scopes="3db474b9-6a0c-4840-96ac-1fceb342124f/.default" )
+if "access_token" in result:
+ accessToken = result['access_token']
+```
+
+# [Java](#tab/java)
+
+```java
+// Initialize MSAL library by using the following code
+ConfidentialClientApplication app = ConfidentialClientApplication.builder(
+ clientId,
+ ClientCredentialFactory.createFromSecret(clientSecret))
+ .authority(authority)
+ .build();
+
+// Acquire an access token
+ClientCredentialParameters clientCredentialParam = ClientCredentialParameters.builder(
+ Collections.singleton(scope))
+ .build();
+CompletableFuture<IAuthenticationResult> future = app.acquireToken(clientCredentialParam);
+IAuthenticationResult result = future.get();
+return result.accessToken();
+```
+ In the preceding code, provide the following parameters:
In the preceding code, provide the following parameters:
| Authority | Required | The directory tenant the application plans to operate against. For example: `https://login.microsoftonline.com/{your-tenant}`. (Replace `your-tenant` with your [tenant ID or name](../fundamentals/active-directory-how-to-find-tenant.md).) | | Client ID | Required | The application ID that's assigned to your app. You can find this information in the Azure portal, where you registered your app. | | Client secret | Required | The client secret that you generated for your app.|
-| Scopes | Required | Must be set to `bbb94529-53a3-4be5-a069-7eaf2712b826/.default`. |
+| Scopes | Required | Must be set to `3db474b9-6a0c-4840-96ac-1fceb342124f/.default`. This will produce an access token with a **roles** claim of `VerifiableCredential.Create.All`. |
For more information about how to get an access token by using a console app's identity, see one of the following articles: [C#](../develop/quickstart-v2-netcore-daemon.md), [Python](../develop/quickstart-v2-python-daemon.md), [Node.js](../develop/quickstart-v2-nodejs-console.md), or [Java](../develop/quickstart-v2-java-daemon.md).
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded client_id=12345678-0000-0000-00000000000000000
-&scope=bbb94529-53a3-4be5-a069-7eaf2712b826/.default
+&scope=3db474b9-6a0c-4840-96ac-1fceb342124f/.default
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer &client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg &grant_type=client_credentials
const msalConfig = {
}; const cca = new msal.ConfidentialClientApplication(msalConfig); const msalClientCredentialRequest = {
- scopes: ["bbb94529-53a3-4be5-a069-7eaf2712b826/.default"],
+ scopes: ["3db474b9-6a0c-4840-96ac-1fceb342124f/.default"],
skipCache: false, }; module.exports.msalCca = cca;
const result = await mainApp.msalCca.acquireTokenByClientCredential(mainApp.msal
} ```
+# [Python](#tab/python)
+
+```python
+# Initialize MSAL library by using the following code
+with open(config["azCertificatePrivateKeyLocation"], "rb") as file:
+ private_key = file.read()
+with open(config["azCertificateLocation"]) as file:
+ public_certificate = file.read()
+cert = load_pem_x509_certificate(data=bytes(public_certificate, 'UTF-8'), backend=default_backend())
+thumbprint = (cert.fingerprint(hashes.SHA1()).hex())
+msalCca = msal.ConfidentialClientApplication( config["azClientId"],
+ authority="https://login.microsoftonline.com/" + config["azTenantId"],
+ client_credential={
+ "private_key": private_key,
+ "thumbprint": thumbprint,
+ "public_certificate": public_certificate
+ }
+)
+# Acquire an access token
+accessToken = ""
+result = msalCca.acquire_token_for_client( scopes="3db474b9-6a0c-4840-96ac-1fceb342124f/.default" )
+if "access_token" in result:
+ accessToken = result['access_token']
+```
+
+# [Java](#tab/java)
+
+```java
+// Initialize MSAL library by using the following code
+PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Files.readAllBytes(Paths.get(certKeyLocation)));
+PrivateKey key = KeyFactory.getInstance("RSA").generatePrivate(spec);
+java.io.InputStream certStream = (java.io.InputStream)new ByteArrayInputStream(Files.readAllBytes(Paths.get(certLocation)));
+X509Certificate cert = (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(certStream);
+ConfidentialClientApplication app = ConfidentialClientApplication.builder(
+ clientId,
+ ClientCredentialFactory.createFromCertificate(key, cert))
+ .authority(authority)
+ .build();
+// Acquire an access token
+ClientCredentialParameters clientCredentialParam = ClientCredentialParameters.builder(
+ Collections.singleton(scope))
+ .build();
+CompletableFuture<IAuthenticationResult> future = app.acquireToken(clientCredentialParam);
+IAuthenticationResult result = future.get();
+return result.accessToken();
+```
+ ## Call the API To issue or verify a verifiable credential, follow these steps:
-1. Construct an HTTP POST request to the Request Service REST API. Replace the `{tenantID}` with your tenant ID, or your tenant name.
+1. Construct an HTTP POST request to the Request Service REST API. The `tenantId` is not needed in the URL anymore as it is present as a claim in the `access_token`.
+
+ **Issue**
+ ```http
+ POST https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createIssuanceRequest
+ ```
+ **Verify**
```http
- POST https://beta.did.msidentity.com/v1.0/{tenantID}/verifiablecredentials/request
+ POST https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createPresentationRequest
``` 1. Attach the access token as a bearer token to the authorization header in an HTTP request.
To issue or verify a verifiable credential, follow these steps:
1. Submit the request to the Request Service REST API.
+The Request Service API returns a HTTP Status Code `201 Created` on a successful call. If the API call returns an error, please check the [error reference documentation](error-codes.md). //TODO
+ ## Issuance request example The following example demonstrates a verifiable credentials issuance request. For information about the payload, see [Request Service REST API issuance specification](issuance-request-api.md). ```http
-POST https://beta.did.msidentity.com/v1.0/contoso.onmicrosoft.com/verifiablecredentials/request
+POST https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createIssuanceRequest
Content-Type: application/json Authorization: Bearer <token>
Authorization: Bearer <token>
"url": "https://www.contoso.com/api/issuer/issuanceCallback", "state": "de19cb6b-36c1-45fe-9409-909a51292a9c", "headers": {
- "api-key": "OPTIONAL API-KEY for VERIFIER CALLBACK API"
+ "api-key": "OPTIONAL API-KEY for CALLBACK EVENTS"
} }, "authority": "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDek...", "registration": { "clientName": "Verifiable Credential Expert Sample" },
- "issuance": {
- "type": "VerifiedCredentialExpert",
- "manifest": "https://beta.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert1",
- "pin": {
- "value": "3539",
- "length": 4
- },
- "claims": {
- "given_name": "Megan",
- "family_name": "Bowen"
- }
+ "type": "VerifiedCredentialExpert",
+ "manifestUrl": "https://verifiedid.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert1",
+ "pin": {
+ "value": "3539",
+ "length": 4
+ },
+ "claims": {
+ "given_name": "Megan",
+ "family_name": "Bowen"
} } ```
For the complete code, see one of the following code samples:
- [C#](https://github.com/Azure-Samples/active-directory-verifiable-credentials-dotnet/blob/main/1-asp-net-core-api-idtokenhint/IssuerController.cs) - [Node.js](https://github.com/Azure-Samples/active-directory-verifiable-credentials-node/blob/main/1-node-api-idtokenhint/issuer.js)
+- [Python](https://github.com/Azure-Samples/active-directory-verifiable-credentials-python/blob/main/1-python-api-idtokenhint/issuer.py)
+- [Java](https://github.com/Azure-Samples/active-directory-verifiable-credentials-java/blob/main/1-java-api-idtokenhint/src/main/java/com/verifiablecredentials/javaaadvcapiidtokenhint/controller/IssuerController.java)
## Presentation request example The following example demonstrates a verifiable credentials presentation request. For information about the payload, see [Request Service REST API presentation specification](presentation-request-api.md). ```http
-POST https://beta.did.msidentity.com/v1.0/contoso.onmicrosoft.com/verifiablecredentials/request
+POST https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createPresentationRequest
Content-Type: application/json Authorization: Bearer <token>
Authorization: Bearer <token>
"url": "https://www.contoso.com/api/verifier/presentationCallback", "state": "92d076dd-450a-4247-aa5b-d2e75a1a5d58", "headers": {
- "api-key": "OPTIONAL API-KEY for VERIFIER CALLBACK API"
+ "api-key": "OPTIONAL API-KEY for CALLBACK EVENTS"
} }, "authority": "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDekxTVlFWcVl3S2JNY1Fsc0RILUZJUSIsInkiOiJiRWo5MDY...", "registration": { "clientName": "Veritable Credential Expert Verifier" },
- "presentation": {
- "includeReceipt": true,
- "requestedCredentials": [
- {
- "type": "VerifiedCredentialExpert",
- "purpose": "So we can see that you a veritable credentials expert",
- "acceptedIssuers": [
- "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDekxTVlFWcVl3S2JNY1Fsc0RILUZJUSIsInkiO..."
- ]
+ "includeReceipt": true,
+ "requestedCredentials": [
+ {
+ "type": "VerifiedCredentialExpert",
+ "purpose": "So we can see that you a veritable credentials expert",
+ "acceptedIssuers": [
+ "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDekxTVlFWcVl3S2JNY1Fsc0RILUZJUSIsInkiO..."
+ ],
+ "configuration": {
+ "validation": {
+ "allowRevoked": true,
+ "validateLinkedDomain": true
+ }
}
- ]
- }
+ }
+ ]
} ```
For the complete code, see one of the following code samples:
- [C#](https://github.com/Azure-Samples/active-directory-verifiable-credentials-dotnet/blob/main/1-asp-net-core-api-idtokenhint/VerifierController.cs) - [Node.js](https://github.com/Azure-Samples/active-directory-verifiable-credentials-node/blob/main/1-node-api-idtokenhint/verifier.js)
+- [Python](https://github.com/Azure-Samples/active-directory-verifiable-credentials-python/blob/main/1-python-api-idtokenhint/verifier.py)
+- [Java](https://github.com/Azure-Samples/active-directory-verifiable-credentials-java/blob/main/1-java-api-idtokenhint/src/main/java/com/verifiablecredentials/javaaadvcapiidtokenhint/controller/VerifierController.java)
## Callback events
-The request payload contains the [issuance](issuance-request-api.md#callback-events) and [presentation](presentation-request-api.md#callback-events) callback endpoint. The endpoint is part of your web application, and should be publicly available. Azure AD Verifiable Credentials calls your endpoint to inform your app on certain events. For example, such events might be when a user scans the QR code, uses the deep link the authenticator app, or finishes the presentation process.
+The request payload contains the [issuance](issuance-request-api.md#callback-events) and [presentation](presentation-request-api.md#callback-events) callback endpoint. The endpoint is part of your web application, and should be publicly available via the HTTPS protocol. The Request Service API calls your endpoint to inform your app on certain events. For example, such events might be when a user scans the QR code, uses the deep link the authenticator app, or finishes the presentation process.
The following diagram describes the call your app makes to the Request Service REST API, and the callbacks to your application.
mainApp.app.post('/api/issuer/issuance-request-callback', parser, async (req, re
}) ```
+# [Python](#tab/python)
+
+```python
+@app.route("/api/issuer/issuance-request-callback", methods = ['POST'])
+def issuanceRequestApiCallback():
+ if request.headers['api-key'] != apiKey:
+ return Response( jsonify({'error':'api-key wrong or missing'}), status=401, mimetype='application/json')
+
+ issuanceResponse = request.json
+ if issuanceResponse["code"] == "request_retrieved":
+ cacheData = {
+ "status": issuanceResponse["code"],
+ "message": "QR Code is scanned. Waiting for issuance to complete..."
+ }
+ cache.set( issuanceResponse["state"], json.dumps(cacheData) )
+ return ""
+
+ if issuanceResponse["code"] == "issuance_successful":
+ cacheData = {
+ "status": issuanceResponse["code"],
+ "message": "Credential successfully issued"
+ }
+ cache.set( issuanceResponse["state"], json.dumps(cacheData) )
+ return ""
+
+ if issuanceResponse["code"] == "issuance_error":
+ cacheData = {
+ "status": issuanceResponse["code"],
+ "message": issuanceResponse["error"]["message"]
+ }
+ cache.set( issuanceResponse["state"], json.dumps(cacheData) )
+ return ""
+
+ return ""
+```
+
+# [Java](#tab/java)
+
+```java
+@RequestMapping(value = "/api/issuer/issue-request-callback", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
+ public ResponseEntity<String> issueRequestCallback( HttpServletRequest request
+ , @RequestHeader HttpHeaders headers
+ , @RequestBody String body ) {
+ ObjectMapper objectMapper = new ObjectMapper();
+ try {
+ if ( !request.getHeader("api-key").equals(apiKey) ) {
+ lgr.info( "api-key wrong or missing" );
+ return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body( "api-key wrong or missing" );
+ }
+ JsonNode presentationResponse = objectMapper.readTree( body );
+ String code = presentationResponse.path("code").asText();
+ ObjectNode data = null;
+ if ( code.equals( "request_retrieved" ) ) {
+ data = objectMapper.createObjectNode();
+ data.put("message", "QR Code is scanned. Waiting for issuance to complete..." );
+ }
+ if ( code.equals("issuance_successful") ) {
+ data = objectMapper.createObjectNode();
+ data.put("message", "Credential successfully issued" );
+ }
+ if ( code.equals( "issuance_error" ) ) {
+ data = objectMapper.createObjectNode();
+ data.put("message", presentationResponse.path("error").path("message").asText() );
+ }
+ if ( data != null ) {
+ data.put("status", code );
+ cache.put( presentationResponse.path("state").asText(), objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(data) );
+ }
+ } catch (java.io.IOException ex) {
+ ex.printStackTrace();
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body( "Technical error" );
+ }
+ return ResponseEntity.ok().body( "{}" );
+ }
+```
+ For the complete code, see the [issuance](https://github.com/Azure-Samples/active-directory-verifiable-credentials-node/blob/main/1-node-api-idtokenhint/issuer.js) and [presentation](https://github.com/Azure-Samples/active-directory-verifiable-credentials-node/blob/main/1-node-api-idtokenhint/verifier.js) code on the GitHub repo.
For the complete code, see the [issuance](https://github.com/Azure-Samples/activ
Learn more about these specifications: - [Issuance API specification](issuance-request-api.md)-- [Presentation API specification](presentation-request-api.md)
+- [Presentation API specification](presentation-request-api.md)
active-directory How To Dnsbind https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-dnsbind.md
Linking a DID to a domain solves the initial trust problem by allowing any entit
## When do you need to update the domain in your DID?
-In the event where the domain associated with your company changes, you would also need to change the domain in your DID document. You can update the domain in your DID directly from the Azure AD Verifiable Credential portal
+In the event where the domain associated with your company changes, you would also need to change the domain in your DID document. You can update the domain in your DID directly from the [Microsoft Entra Verified ID blade in the Azure portal](https://portal.azure.com/#view/Microsoft_AAD_DecentralizedIdentity/InitialMenuBlade/~/domainUpdateBlade).
## How do we link DIDs and domains?
Yes. You need to wait until the config.json file gets updated before you publish
### How do I know when the linked domain update has successfully completed?
-If the trust system is ION, once the domain changes are published to ION, the domain section inside the Azure AD Verifiable Credentials service will display Published as the status and you should be able to make new changes to the domain. If the trust system is Web, the changes are public as soon as you replace the did-configuration.json file on your web server.
+If the trust system is ION, once the domain changes are published to ION, the domain section inside the Microsoft Entra Verified ID service will display Published as the status and you should be able to make new changes to the domain. If the trust system is Web, the changes are public as soon as you replace the did-configuration.json file on your web server.
>[!IMPORTANT] > No changes to your domain are possible while publishing is in progress.
active-directory How To Issuer Revoke https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-issuer-revoke.md
Previously updated : 06/03/2022 Last updated : 07/28/2022 #Customer intent: As an administrator, I am trying to learn the process of revoking verifiable credentials that I have issued
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-As part of the process of working with verifiable credentials (VCs), you not only have to issue credentials, but sometimes you also have to revoke them. In this article we go over the **Status** property part of the VC specification and take a closer look at the revocation process, why we may want to revoke credentials and some data and privacy implications.
+As part of the process of working with verifiable credentials (VCs), you not only have to issue credentials, but sometimes you also have to revoke them. In this article, we go over the **Status** property part of the VC specification and take a closer look at the revocation process, why we may want to revoke credentials and some data and privacy implications.
> [!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview.
+> Microsoft Entra Verified ID is currently in public preview.
> This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. > For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
-## Status property in verifiable credentials specification
-
-Before we can understand the implications of revoking a verifiable credential, it may help to know what the **status check** is and how it works today.
-
-The [W3C Verifiable Credentials spec](https://www.w3.org/TR/vc-data-model/) references the **status** property in section [4.9:](https://www.w3.org/TR/vc-data-model/#status)
-
-"This specification defines the following **credentialStatus** property for the discovery of information about the current status of a verifiable credential, such as whether it is suspended or revoked."
+## Why you may want to revoke a VC?
-However, the W3C specification does not define a format on how **status check** should be implemented.
+Each customer will have their own unique reason's for wanting to revoke a verifiable credential, but here are some of the common themes we've heard thus far.
-"Defining the data model, formats, and protocols for status schemes are out of scope for this specification. A Verifiable Credential Extension Registry [VC-EXTENSION-REGISTRY] exists that contains available status schemes for implementers who want to implement verifiable credential status checking."
+- Student ID: the student is no longer an active student at the University.
+- Employee ID: the employee is no longer an active employee.
+- State Drivers License: the driver no longer lives in that state.
->[!NOTE]
->For now, Microsoft's status check implementation is proprietary but we are actively working with the DID community to align on a standard.
+## How do I revoke a verifiable credential
-## How does the **status** property work?
+Using the indexed claim in verifiable credentials, you can search for issued verifiable credentials by that claim in the portal and revoke it.
-In every Microsoft issued verifiable credential, there is an attribute called credentialStatus. It's populated with a status API that Microsoft manages on your behalf. Here is an example of what it looks like.
+1. Navigate to the verifiable credentials blade in Azure Active Directory.
+1. Select the verifiable credential type
+1. On the left-hand menu, choose **Revoke a credential**
+ ![Revoke a credential](media/how-to-issuer-revoke/settings-revoke.png)
+1. Search for the index claim of the user you want to revoke. If you haven't indexed a claim, search won't work, and you won't be able to revoke the verifiable credential.
-```json
- "credentialStatus": {
- "id": "https://portableidentitycards.azure-api.net/v1.0/7952032d-d1f3-4c65-993f-1112dab7e191/portableIdentities/card/status",
- "type": "PortableIdentityCardServiceCredentialStatus2020"
- }
-```
+ ![Screenshot of the credential to revoke](media/how-to-issuer-revoke/revoke-search.png)
-The open source Verifiable Credentials SDK handles calling the status API and providing the necessary data.
+ >[!NOTE]
+ >Since we are only storing a hash of the indexed claim from the verifiable credential, only an exact match will populate the search results. We take the input as searched by the IT Admin and we use the same hashing algorithm to see if we have a hash match in our database.
+
+1. Once you've found a match, select the **Revoke** option to the right of the credential you want to revoke.
-Once the API is called and provided the right information, the API will return either a True or False. True being the verifiable credential is still active with the Issuer and False signifying the verifiable credential has been actively revoked by the Issuer.
+ ![Screenshot of a warning letting you know that after revocation the user still has the credential](media/how-to-issuer-revoke/warning.png)
-## Why you may want to revoke a VC?
+1. After successful revocation, you see the status update and a green banner will appear at the top of the page.
+
+ ![screenshot of a successfully revoked verifiable credential message](media/how-to-issuer-revoke/revoke-successful.png)
-Each customer will have their own unique reason's for wanting to revoke a verifiable credential, but here are some of the common themes we have heard thus far.
--- Student ID: the student is no longer an active student at the University.-- Employee ID: the employee is no longer an active employee.-- State Drivers License: the driver no longer lives in that state.
+Now whenever a presentation is sent to the Request Service API it will check if the VC has been revoked.
## How to set up a verifiable credential with the ability to revoke
-All verifiable credential data is not stored with Microsoft by default. Therefore, we do not have any data to reference to revoke a specific verifiable credential ID. The issuer needs to specify a specific field from the verifiable credential attribute for Microsoft to index and subsequently salt and hash.
+Verifiable credential data isn't stored by Microsoft. Therefore, the issuer needs to make one claim, the indexed claim, before the VC is searchable. There can be only one claim that is indexed and if there is none, you won't be able to revoke credentials. The selected claim to index is then salted and hashed and isn't stored as its original value.
>[!NOTE] >Hashing is a one way cryptographic operation that turns an input, called a ```preimage```, and produces an output called a hash that has a fixed length. It is not computationally feasible at this time to reverse a hash operation.
-You can tell Microsoft which attribute of the verifiable credential you would like to index. The implication of indexing is that indexed values may be used to search your verifiable credentials for the VCs you want to revoke.
-
-**Example:** Alice is a Woodgrove employee. Alice left Woodgrove to work at Contoso. Jane, the IT admin for Woodgrove, searches for Alice's email in the Verifiable Credentials Revoke search query. In this example, Jane, indexed the email field of the Woodgrove verified employee credential.
-
-See below for an example of how the Rules file is modified to include the index.
+**Example:** In the below example, the displayName is the index claim and searching can be done via the users full name and nothing else.
```json { "attestations": { "idTokens": [
- {
+ {
+ "clientId": "8d5b446e-22b2-4e01-bb2e-9070f6b20c90",
+ "configuration": "https://didplayground.b2clogin.com/didplayground.onmicrosoft.com/B2C_1_sisu/v2.0/.well-known/openid-configuration",
+ "redirectUri": "vcclient://openid",
+ "scope": "openid profile email",
"mapping": [
- {
- "outputClaim": "Name",
- "inputClaim": "name",
- "required": true,
- "indexed": false
- },
- {
- "outputClaim": "email",
- "inputClaim": "email",
- "required": true,
- "indexed": true
- }
+ {
+ "outputClaim": "displayName",
+ "required": true,
+ "inputClaim": "$.name",
+ "indexed": true
+ },
+ {
+ "outputClaim": "firstName",
+ "required": true,
+ "inputClaim": "$.given_name",
+ "indexed": false
+ },
+ {
+ "outputClaim": "lastName",
+ "required": true,
+ "inputClaim": "$.family_name",
+ "indexed": false
+ }
],
- "configuration": "https://login.microsoftonline.com/tenant-id-here7/v2.0/.well-known/openid-configuration",
- "client_id": "c0d6b785-7a08-494e-8f63-c30744c3be2f",
- "redirect_uri": "vcclient://openid"
+ "required": false
} ] },
- "validityInterval": 25920000,
+ "validityInterval": 2592000,
"vc": {
- "type": ["WoodgroveEmployee"]
+ "type": [
+ "VerifiedCredentialExpert"
+ ]
} } ``` >[!NOTE]
->Only one attribute can be indexed from a rules claims mapping.
+>Only one claim can be indexed from a rules claims mapping.
-## How do I revoke a verifiable credential
-Once an index claim has been set and verifiable credentials have been issued to your users, it's time to see how you can revoke a verifiable credential in the VC blade.
+## How does revocation work?
-1. Navigate to the verifiable credentials blade in Azure Active Directory.
-1. Choose the verifiable credential where you've previously set up the index claim and issued a verifiable credential to a user. =
-1. On the left-hand menu, choose **Revoke a credential**
- ![Revoke a credential](media/how-to-issuer-revoke/settings-revoke.png)
-1. Search for the index attribute of the user you want to revoke.
+Microsoft Entra Verified ID implements the [W3C StatusList2021](https://github.com/w3c-ccg/vc-status-list-2021/tree/343b8b59cddba4525e1ef355356ae760fc75904e). When presentation to the Request Service API happens, the API will do the revocation check for you. The revocation check happens over an anonymous API call to Identity Hub and does not contain any data who is checking if the verifiable credential is still valid or revoked. With the **statusList2021**, Microsoft Entra Verified ID just keeps a flag by the hashed value of the indexed claim to keep track of the revocation status.
- ![Find the credential to revoke](media/how-to-issuer-revoke/revoke-search.png)
+### Verifiable credential data
- >[!NOTE]
- >Since we are only storing a hash of the indexed claim from the verifiable credential, only an exact match will populate the search results. We take the input as searched by the IT Admin and we use the same hashing algorithm to see if we have a hash match in our database.
-
-1. Once you've found a match, select the **Revoke** option to the right of the credential you want to revoke.
+In every Microsoft issued verifiable credential, there is a claim called `credentialStatus`. This data is a navigational map to where in a block of data this VC has its revocation flag.
- ![A warning letting you know that after revocation the user still has the credential](media/how-to-issuer-revoke/warning.png)
+```json
+...
+"credentialStatus": {
+ "id": "urn:uuid:625dfcad-0000-1111-2222-333444445555?bit-index=31",
+ "type": "RevocationList2021Status",
+ "statusListIndex": 31,
+ "statusListCredential": "did:ion:EiDR0Y6zfvnUy2NjO293XNfe9AOL...<SNIP>...?service=IdentityHub&queries=...data..."
+...
+```
+
+### Issuers Identity Hub API endpoint
-1. After successful revocation you see the status update and a green banner will appear at the top of the page.
- ![Verify this domain in settings](media/how-to-issuer-revoke/revoke-successful.png)
+In the issuing party's DID document, the Identity Hub's endpoint is available in the `service` section.
-Now whenever a relying party calls to check the status of this specific verifiable credential, Microsoft's status API, acting on behalf of the tenant, returns a 'false' response.
+```json
+didDocument": {
+ "id": "did:ion:EiD...<SNIP>",
+ "@context": [
+ "https://www.w3.org/ns/did/v1",
+ {
+ "@base": "did:ion:EiD...<SNIP>..."
+ }
+ ],
+ "service": [
+ {
+ "id": "#linkeddomains",
+ "type": "LinkedDomains",
+ "serviceEndpoint": {
+ "origins": [
+ "https://contoso.com/"
+ ]
+ }
+ },
+ {
+ "id": "#hub",
+ "type": "IdentityHub",
+ "serviceEndpoint": {
+ "instances": [
+ "https://verifiedid.hub.msidentity.com/v1.0/11111111-2222-3333-4444-000000000000"
+ ],
+ "origins": [ ]
+ }
+ }
+ ],
+```
## Next steps
-Test out the functionality on your own with a test credential to get used to the flow. You can see information on how to configure your tenant to issue verifiable credentials by [reviewing our tutorials](get-started-verifiable-credentials.md).
+- [How to customize your Microsoft Entra Verified ID](credential-design.md)
active-directory How To Opt Out https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-opt-out.md
Title: Opt out of the Azure Active Directory Verifiable Credentials (preview)
+ Title: Opt out of the Microsoft Entra Verified ID (preview)
description: Learn how to Opt Out of the Verifiable Credentials Preview documentationCenter: ''
Previously updated : 06/16/2022 Last updated : 06/02/2022 #Customer intent: As an administrator, I am looking for information to help me disable
In this article:
- Effect on existing verifiable credentials. > [!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview.
+> Microsoft Entra Verified ID is currently in public preview.
> This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. > For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
In this article:
## When do you need to opt out?
-Opting out is a one-way operation, after you opt out your Azure Active Directory Verifiable Credentials environment will be reset. During the public preview, opting out may be required to:
+Opting out is a one-way operation, after you opt-out your Microsoft Entra Verified ID environment will be reset. During the Public Preview opting out may be required to:
- Enable new service capabilities. - Reset your service configuration. - Switch between trust systems ION and Web
-## What happens to your data when you opt out?
+## What happens to your data when you opt-out?
-When you complete opting out of the Azure Active Directory Verifiable Credentials service, the following actions will take place:
+When you complete opting out of the Microsoft Entra Verified ID service, the following actions will take place:
- The DID keys in Key Vault will be [soft deleted](../../key-vault/general/soft-delete-overview.md). - The issuer object will be deleted from our database.
Once an opt-out takes place, you won't be able to recover your DID or conduct an
## Effect on existing verifiable credentials All verifiable credentials already issued will continue to exist. They won't be cryptographically invalidated as your DID will remain resolvable through ION.
-However, when relying parties call the status API, they'll always receive back a failure message.
+However, when relying parties call the status API, they will always receive back a failure message.
-## How to opt out from the Azure Active Directory Verifiable Credentials Public Preview?
+## How to opt-out from the Microsoft Entra Verified ID Public Preview?
1. From the Azure portal search for verifiable credentials. 2. Choose **Organization Settings** from the left side menu.
active-directory How To Register Didwebsite https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-register-didwebsite.md
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)] > [!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview.
+> Microsoft Entra Verified ID is currently in public preview.
> This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. > For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
active-directory How To Use Quickstart Idtoken https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-use-quickstart-idtoken.md
After you've switched to the custom issue, you have access to a text box with a
## Next steps
-See the [Rules and display definitions reference](rules-and-display-definitions-model.md).
+See the [Rules and display definitions reference](rules-and-display-definitions-model.md).
active-directory How To Use Quickstart Selfissued https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-use-quickstart-selfissued.md
After you've switched to the custom issue, you have access to a text box with a
## Next steps
-See the [Rules and display definitions reference](rules-and-display-definitions-model.md).
+See the [Rules and display definitions reference](rules-and-display-definitions-model.md).
active-directory How To Use Quickstart Verifiedemployee https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-use-quickstart-verifiedemployee.md
Title: Tutorial - Issue a Verifiable Credential for directory based claims
+ Title: Tutorial - Issue a Microsoft Entra Verified ID credential for directory based claims
description: In this tutorial, you learn how to issue verifiable credentials, from directory based claims, by using a sample app.
In this article, you learn how to:
## Prerequisites -- [Set up a tenant for Azure AD Verifiable Credentials](verifiable-credentials-configure-tenant.md).
+- [Set up a tenant for Microsoft Entra Verified ID Credentials](verifiable-credentials-configure-tenant.md).
- Complete the tutorial for [issuance](verifiable-credentials-configure-issuer.md) and [verification](verifiable-credentials-configure-verifier.md) of verifiable credentials. - A mobile phone with Microsoft Authenticator that can be used as the test user account.
The configuration file depends on the sample in-use.
## Next steps
-Learn [how to customize your verifiable credentials](credential-design.md).
+Learn [how to customize your verifiable credentials](credential-design.md).
active-directory How To Use Quickstart https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-to-use-quickstart.md
After you've switched to the custom issue, you have access to a text box with a
## Next steps For more information, see:-- [Rules and display definitions reference](rules-and-display-definitions-model.md)
+- [Rules and display definitions reference](rules-and-display-definitions-model.md)
active-directory How Use Vcnetwork https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/how-use-vcnetwork.md
+
+ Title: How to use the Microsoft Entra Verified ID Network
+description: In this article, you learn how to use the Microsoft Entra Verified ID Network to verify credentials
+documentationCenter: ''
+++++ Last updated : 07/28/2022++
+#Customer intent: As a verifiable credentials administrator, I want to configure verifying credentials from another party
++
+# Verifying credentials using the Microsoft Entra Verified ID Network
++
+> [!IMPORTANT]
+> Microsoft Entra Verified ID is currently in preview. This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
+> For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+
+## Prerequisites
+
+To use the Entra Verified ID Network, you need to have completed the following.
+
+- Complete the [Getting Started](get-started-verifiable-credentials.md) and subsequent [tutorial set](enable-your-tenant-verifiable-credentials.md).
+
+## What is the Entra Verified ID Network?
+
+In our scenario, Proseware is a verifier. Woodgrove is the issuer. The verifier needs to know Woodgrove's issuer DID and the verifiable credential (VC) type that represents Woodgrove employees before it can create a presentation request for a verified credential for Woodgrove employees. The necessary information may come from some kind of manual exchange between the companies, this approach would be both a manual and a complex. The Entra Verified ID Network makes this process much easier. Woodgrove, as an issuer, can publish credential types to the Entra Verified ID Network and Proseware, as the verifier, can search for published credential types and schemas in the Entra Verified ID Network. Using this information, Woodgrove can create a [presentation request](presentation-request-api.md#presentation-request-payload) and easily invoke the Request Service API.
+
+![Diagram of Microsoft DID implementation overview](media/decentralized-identifier-overview/did-overview.png)
++
+## How do I use the Entra Verified ID Network?
+
+1. In the start page of Microsoft Entra Verified ID in the Azure portal, you have a Quickstart named **Verification request**. Clicking on **start** will take you to a page where you can browse the Verifiable Credentials Network
+
+ ![Screenshot of the Verified ID Network Quickstart](media/how-use-vcnetwork/vcnetwork-quickstart.png)
+
+1. When you select on the **Select first issuer**, a panel opens on the right side of the screen where you can search for issuers by their linked domains. So if you are looking for something from Woodgrove, you just type `woodgrove` in the search textbox. When you select an issuer in the list, the available credential types will show in the lower part labeled Step 2. Check the type you want to use and select the Add button to get back to the first screen. If the expected linked domain isn't in the list it means that the linked domain isn't verified yet. If the list of credentials is empty, it means that the issuer has verified the linked domain but haven't published any credential types yet.
+
+ ![Screenshot of Verified ID Network Search and select](media/how-use-vcnetwork/vcnetwork-search-select.png)
+
+1. In the first screen we now have Woodgrove in the issuer list and the next step is to select the **Review** button.
+
+ ![Verified ID Network list of isuers](media/how-use-vcnetwork/vcnetwork-issuer-list.png)
+
+1. The Review screen displays a skeleton presentation request JSON payload for the Request Service API. The important pieces of information are the DID inside the **acceptedIssuers** collection and the **type** value. This information is needed to create a presentation request. The request prompts the user for a credential of a certain type issued by a trusted organization.
+
+ ![Verified ID Network issuers details](media/how-use-vcnetwork/vcnetwork-issuer-details.png)
+
+## How do I make my linked domain searchable?
+
+Linked domains that are verified will be searchable. Unverified domains won't be searchable.
+
+## How do I make my credential types visible in the list?
+
+Each credential type that is created has an attribute named `availableInVcDirectory` that makes it visible in the list. You can update this attribute to make the credential type visible or not. See [Admin API reference](admin-api.md#contract-type).
+
+## What is public when a credential type is made visible?
+
+When you make a credential type available in the Entra Verified ID Network, only the **issuing DID**, the credential **type** and its **schema** are made public. Important to note is that this information was already public before making it visible due to how decentralized identities work. Making the credential type visible is just making it searchable in the Entra Verified ID Network.
+
+## Next steps
+
+For more information, see:
+
+- [Learn how to verify Microsoft Entra Verified ID credentials](verifiable-credentials-configure-verifier.md).
+- [Presentation API specification](presentation-request-api.md)
active-directory Introduction To Verifiable Credentials Architecture https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/introduction-to-verifiable-credentials-architecture.md
Previously updated : 06/02/2022 Last updated : 07/19/2022
-# Azure AD Verifiable Credentials architecture overview (preview)
+# Microsoft Entra Verified ID architecture overview (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)] > [!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview. This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see [**Supplemental Terms of Use for Microsoft Azure Previews**](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+> Microsoft Entra Verified ID is currently in public preview. This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see [**Supplemental Terms of Use for Microsoft Azure Previews**](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
-ItΓÇÖs important to plan your verifiable credential solution so that in addition to issuing and or validating credentials, you have a complete view of the architectural and business impacts of your solution. If you havenΓÇÖt reviewed them already, we recommend you review [Introduction to Azure Active Directory Verifiable Credentials](decentralized-identifier-overview.md) and the [FAQs](verifiable-credentials-faq.md), and then complete the [Getting Started](get-started-verifiable-credentials.md) tutorial.
+ItΓÇÖs important to plan your verifiable credential solution so that in addition to issuing and or validating credentials, you have a complete view of the architectural and business impacts of your solution. If you havenΓÇÖt reviewed them already, we recommend you review [Introduction to Microsoft Entra Verified ID](decentralized-identifier-overview.md) and the [FAQs](verifiable-credentials-faq.md), and then complete the [Getting Started](get-started-verifiable-credentials.md) tutorial.
-This architectural overview introduces the capabilities and components of the Azure Active Directory Verifiable Credentials service. For more detailed information on issuance and validation, see
+This architectural overview introduces the capabilities and components of the Microsoft Entra Verified ID service. For more detailed information on issuance and validation, see
* [Plan your issuance solution](plan-issuance-solution.md)
Terminology for verifiable credentials (VCs) might be confusing if you're not fa
ΓÇ£A ***decentralized identifier*** is a portable URI-based identifier, also known as a DID, associated with an entity. These identifiers are often used in a verifiable credential and are associated with subjects, issuers, and verifiers.ΓÇ¥.
-* In the preceding diagram, the public keys of the actorΓÇÖs DIDs are shown stored in the decentralized ledger (ION).- in the decentralized identifier document.
+* In the preceding diagram, the public keys of the actorΓÇÖs DIDs are made available via trust system (Web or ION).
ΓÇ£A ***decentralized identifier document***, also referred to as a ***DID document***, is a document that is accessible using a verifiable data registry and contains information related to a specific decentralized identifier, such as the associated repository and public key information.ΓÇ¥
Terminology for verifiable credentials (VCs) might be confusing if you're not fa
* Woodgrove (issuer) signs their employeesΓÇÖ VCs with its public key; similarly, Proseware (verifier) signs requests to present a VC using its key, which is also associated with its DID.
+A ***trust system*** is the foundation in establishing trust between decentralized systems. It can be a distributed ledger or it can be something centralized, such as [DID Web](https://w3c-ccg.github.io/did-method-web/).
+ ΓÇ£A ***distributed ledger*** is a non-centralized system for recording events. These systems establish sufficient confidence for participants to rely upon the data recorded by others to make operational decisions. They typically use distributed databases where different nodes use a consensus protocol to confirm the ordering of cryptographically signed transactions. The linking of digitally signed transactions over time often makes the history of the ledger effectively immutable.ΓÇ¥ * The Microsoft solution uses the ***Identity Overlay Network (ION)*** to provide decentralized public key infrastructure (PKI) capability. As an alternative to ION, Microsoft also offers DID Web as the trust system.
With decentralized identifiers, Woodgrove can provide Alice with a verifiable cr
-By providing Alice the VC, Woodgrove is attesting that Alice is an employee. Woodgrove is a trusted VC issuer in ProsewareΓÇÖs validation solution. This trust in WoodgroveΓÇÖs issuance process allows Proseware to electronically accept the VC as proof that Alice is a Woodgrove employee and provide Alice the discount. As part of validation of the VC Alice presents, Proseware checks the validity of the VC by using the distributed ledger. In this solution:
+By providing Alice the VC, Woodgrove is attesting that Alice is an employee. Woodgrove is a trusted VC issuer in ProsewareΓÇÖs validation solution. This trust in WoodgroveΓÇÖs issuance process allows Proseware to electronically accept the VC as proof that Alice is a Woodgrove employee and provide Alice the discount. As part of validation of the VC Alice presents, Proseware checks the validity of the VC by using the trust system. In this solution:
* Woodgrove enables Alice to provide Proseware proof of employment without Woodgrove having to extend its trust boundary.
-* Proseware doesnΓÇÖt need to expand their trust boundary to validate Alice is an employee of Woodgrove. Proseware can use the VC that Woodgrove provides instead. Because the trust boundary isnΓÇÖt expanded, managing the trust relationship is easier and Proseware can easily end the relationship by not accepting the VCs anymore.
+* Proseware doesnΓÇÖt need to expand their trust boundary to validate Alice is an employee of Woodgrove. Proseware can use the VC that Woodgrove provides instead. Because the trust boundary isnΓÇÖt expanded, managing the trust relationship is easier, and Proseware can easily end the relationship by not accepting the VCs anymore.
* Alice doesnΓÇÖt need to provide Proseware personal information, such as an email. Alice maintains the VC in a wallet application on a personal device. The only person that can use the VC is Alice, and Alice must initiate usage of the credential. Each usage of the VC is recorded by the wallet application, so Alice has a record of when and where the VC is used.
By combining centralized and decentralized identity architectures, the responsib
## How decentralized identity systems work
-In decentralized identity architectures, the issuer, user, and relying party (RP) each have a role in establishing and ensuring ongoing trusted exchange of each otherΓÇÖs credentials. The public keys of the actorsΓÇÖ DIDs are resolvable in ION, which allows signature validation and therefore trust of any artifact, including a verifiable credential. Relying parties can consume verifiable credentials without establishing trust relationships with the issuer. Instead, the issuer provides the subject a credential to present as proof to relying parties. All messages between actors are signed with the actorΓÇÖs DID; DIDs from issuers and verifiers also need to own the DNS domains that generated the requests.
+In decentralized identity architectures, the issuer, user, and relying party (RP) each have a role in establishing and ensuring ongoing trusted exchange of each otherΓÇÖs credentials. The public keys of the actorsΓÇÖ DIDs are resolvable via the trust system, which allows signature validation and therefore trust of any artifact, including a verifiable credential. Relying parties can consume verifiable credentials without establishing trust relationships with the issuer. Instead, the issuer provides the subject a credential to present as proof to relying parties. All messages between actors are signed with the actorΓÇÖs DID; DIDs from issuers and verifiers also need to own the DNS domains that generated the requests.
-For example: When VC holders need to access a resource, they must present the VC to that relying party. They do so by using a wallet application to read the RPΓÇÖs request to present a VC. As a part of reading the request, the wallet application uses the RPΓÇÖs DID to find the RPs public keys using ION, validating that the request to present the VC hasn't been tampered with. The wallet also checks that the DID is referenced in a metadata document hosted in the DNS domain of the RP, to prove domain ownership.
+For example: When VC holders need to access a resource, they must present the VC to that relying party. They do so by using a wallet application to read the RPΓÇÖs request to present a VC. As a part of reading the request, the wallet application uses the RPΓÇÖs DID to find the RPs public keys using the trust system, validating that the request to present the VC hasn't been tampered with. The wallet also checks that the DID is referenced in a metadata document hosted in the DNS domain of the RP, to prove domain ownership.
![How a decentralized identity system works](media/introduction-to-verifiable-credentials-architecture/how-decentralized-works.png)
In this flow, the credential holder interacts with the issuer to request a verif
1. The holder starts the flow by using a browser or native application to access the issuerΓÇÖs web frontend. There, the issuer website drives the user to collect data and executes issuer-specific logic to determine whether the credential can be issued, and its content.)
-1. The issuer web frontend calls the Azure AD VC Service to generate a VC issuance request.
+1. The issuer web frontend calls the Entra Verified ID service to generate a VC issuance request.
1. The web frontend renders a link to the request as a QR code or a device-specific deep link (depending on the device).
In this flow, the credential holder interacts with the issuer to request a verif
1. The wallet downloads the request from the link. The request includes:
- * DID of the issuer. This is used by the wallet app to resolve in ION to find the public keys and linked domains.
+ * DID of the issuer. This is used by the wallet app to resolve via the trust system to find the public keys and linked domains.
* URL with the VC manifest, which specifies the contract requirements to issue the VC. This can include id_token, self-attested attributes that must be provided, or the presentation of another VC.
In this flow, the credential holder interacts with the issuer to request a verif
1. The wallet validates the issuance requests and processes the contract requirements:
- 1. Validates that the issuance request message is signed by the issuerΓÇÖ keys found in the DID document resolved in ION. This ensures that the message hasn't been tampered with.
+ 1. Validates that the issuance request message is signed by the issuerΓÇÖ keys found in the DID document resolved via the trust system. This ensures that the message hasn't been tampered with.
1. Validates that the DNS domain referenced in the issuerΓÇÖs DID document is owned by the issuer. 1. Depending on the VC contract requirements, the wallet might require the holder to collect additional information, for example asking for self-issued attributes, or navigating through an OIDC flow to obtain an id_token.
-1. Submits the artifacts required by the contract to the Azure AD VC Service. The Azure AD VC service returns the VC, signed with the issuerΓÇÖs DID key and the wallet securely stores the VC.
+1. Submits the artifacts required by the contract to the Entra Verified ID service. The Entra Verified ID service returns the VC, signed with the issuerΓÇÖs DID key and the wallet securely stores the VC.
-For detailed information on how to build an issuance solution and architectural considerations, see [Plan your Azure Active Directory Verifiable Credentials issuance solution](plan-issuance-solution.md).
+For detailed information on how to build an issuance solution and architectural considerations, see [Plan your Microsoft Entra Verified ID issuance solution](plan-issuance-solution.md).
### Flow 2: Verifiable credential presentation
In this flow, a holder interacts with a relying party (RP) to present a VC as pa
1. The holder starts the flow by using a browser or native application to access the relying partyΓÇÖs web frontend.
-1. The web frontend calls the Azure AD VC Service to generate a VC presentation request.
+1. The web frontend calls the Entra Verified ID service to generate a VC presentation request.
1. The web frontend renders a link to the request as a QR code or a device-specific deep link (depending on the device).
In this flow, a holder interacts with a relying party (RP) to present a VC as pa
* a [standards based request for credentials](https://identity.foundation/presentation-exchange/) of a schema or credential type.
- * the DID of the RP, which the wallet looks up in ION.
+ * the DID of the RP, which the wallet looks up in the trust system.
1. The wallet validates that the presentation request and finds stored VC(s) that satisfy the request. Based on the required VCs, the wallet guides the subject to select and consent to use the VCs. * After the subject consents to use of the VC, the wallet generates a unique pairwise DID between the subject and the RP.
- Then, the wallet sends a presentation response payload to the Azure AD VC Service signed by the subject. It contains:
+ Then, the wallet sends a presentation response payload to the Entra Verified ID service signed by the subject. It contains:
* The VC(s) the subject consented to.
In this flow, a holder interacts with a relying party (RP) to present a VC as pa
* The RP DID as the ΓÇ£audienceΓÇ¥ of the payload.
-1. The Azure AD VC service validates the response sent by the wallet. Depending on how the original presentation request was created in step 2, this validation can include checking the status of the presented VC with the VC issuer for cases such as revocation.
+1. The Entra Verified ID service validates the response sent by the wallet. Depending on how the original presentation request was created in step 2, this validation can include checking the status of the presented VC with the VC issuer for cases such as revocation.
-1. Upon validation, the Azure AD VC service calls back the RP with the result.
+1. Upon validation, the Entra Verified ID service calls back the RP with the result.
-For detailed information on how to build a validation solution and architectural considerations, see [Plan your Azure Active Directory Verifiable Credentials verification solution](plan-verification-solution.md).
+For detailed information on how to build a validation solution and architectural considerations, see [Plan your Microsoft Entra Verified ID verification solution](plan-verification-solution.md).
## Key Takeaways
To deliver on the aspirations of the [Decentralized Identity Foundation](https:/
* There are no central points of trust establishment between actors in the system. That is, trust boundaries aren't expanded through federation because actors trust specific VCs.
- * ION enables the discovery of any actorΓÇÖs decentralized identifier (DID).
+ * The trust system enables the discovery of any actorΓÇÖs decentralized identifier (DID).
* The solution enables verifiers to validate any verifiable credentials (VCs) from any issuer.
Learn more about architecture for verifiable credentials
* [Plan your verification solution](plan-verification-solution.md)
-* [Get started with Azure Active Directory Verifiable Credentials](get-started-verifiable-credentials.md)
+* [Get started with Microsoft Entra Verified ID](verifiable-credentials-configure-tenant.md)
active-directory Issuance Request Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/issuance-request-api.md
Title: Specify the Request Service REST API issuance request (preview)+ description: Learn how to issue a verifiable credential that you've issued. documentationCenter: ''
Previously updated : 10/08/2021 Last updated : 07/19/2022
-#Customer intent: As an administrator, I am trying to learn the process of revoking verifiable credentials that I have issued.
+#Customer intent: As an administrator, I am trying to learn how to use the Request Service API and integrate it into my business application.
# Request Service REST API issuance specification (preview) [!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-Azure Active Directory (Azure AD) Verifiable Credentials includes the Request Service REST API. This API allows you to issue and verify a credential. This article specifies the Request Service REST API for an issuance request.
+Microsoft Entra Verified ID includes the Request Service REST API. This API allows you to issue and verify a credential. This article specifies the Request Service REST API for an issuance request. Another article describes [how to call the Request Service REST API](get-started-request-api.md).
## HTTP request
The Request Service REST API issuance request requires the following HTTP header
Construct an HTTP POST request to the Request Service REST API. Replace the `{tenantID}` with your tenant ID or tenant name. ```http
-https://beta.did.msidentity.com/v1.0/{tenantID}/verifiablecredentials/request
+https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createIssuanceRequest
``` The following HTTP request demonstrates a request to the Request Service REST API: ```http
-POST https://beta.did.msidentity.com/v1.0/contoso.onmicrosoft.com/verifiablecredentials/request
+POST https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createIssuanceRequest
Content-Type: application/json Authorization: Bearer <token> { "includeQRCode": true,
- "callback":ΓÇ»{
- "url":ΓÇ»"https://wwww.contoso.com/vc/callback",
- "state": "Aaaabbbb11112222",
- "headers":ΓÇ»{
- "api-key":ΓÇ»"an-api-key-can-go-here"
-      }
- },
+ "callback":ΓÇ»{
+ "url":ΓÇ»"https://wwww.contoso.com/vc/callback",
+ "state": "Aaaabbbb11112222",
+ "headers":ΓÇ»{
+ "api-key":ΓÇ»"an-api-key-can-go-here"
+   }
+ },
... } ```
The following permission is required to call the Request Service REST API. For m
| Permission type | Permission | |||
-| Application | bbb94529-53a3-4be5-a069-7eaf2712b826/.default|
+| Application | 3db474b9-6a0c-4840-96ac-1fceb342124f/.default|
## Issuance request payload
The issuance request payload contains information about your verifiable credenti
```json {
- "includeQRCode": true,
- "callback": {
- "url": "https://www.contoso.com/api/issuer/issuanceCallback",
- "state": "de19cb6b-36c1-45fe-9409-909a51292a9c",
- "headers": {
- "api-key": "OPTIONAL API-KEY for VERIFIER CALLBACK API"
- }
- },
- "authority": "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDek...",
- "registration": {
- "clientName": "Verifiable Credential Expert Sample"
- },
- "issuance": {
- "type": "VerifiedCredentialExpert",
- "manifest": "https://beta.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert",
- "pin": {
- "value": "3539",
- "length": 4
- },
- "claims": {
- "given_name": "Megan",
- "family_name": "Bowen"
- }
+ "includeQRCode": true,
+ "callback": {
+ "url": "https://www.contoso.com/api/issuer/issuanceCallback",
+ "state": "de19cb6b-36c1-45fe-9409-909a51292a9c",
+ "headers": {
+ "api-key": "OPTIONAL API-KEY for CALLBACK EVENTS"
}
+ },
+ "authority": "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDek...",
+ "registration": {
+ "clientName": "Verifiable Credential Expert Sample"
+ },
+ "type": "VerifiedCredentialExpert",
+ "manifest": "https://verifiedid.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert",
+ "claims": {
+ "given_name": "Megan",
+ "family_name": "Bowen"
+ },
+ "pin": {
+ "value": "3539",
+ "length": 4
+ }
} ```
The payload contains the following properties:
|Parameter |Type | Description | |||| | `includeQRCode` | Boolean | Determines whether a QR code is included in the response of this request. Present the QR code and ask the user to scan it. Scanning the QR code launches the authenticator app with this issuance request. Possible values are `true` (default) or `false`. When you set the value to `false`, use the return `url` property to render a deep link. |
+|`callback`| [Callback](#callback-type)| Mandatory. Allows the developer to asynchronously get information on the flow during the verifiable credential issuance process. For example, the developer might want a call when the user has scanned the QR code or if the issuance request succeeds or fails.|
| `authority` | string| The issuer's decentralized identifier (DID). For more information, see [Gather credentials and environment details to set up your sample application](verifiable-credentials-configure-issuer.md).| | `registration` | [RequestRegistration](#requestregistration-type)| Provides information about the issuer that can be displayed in the authenticator app. |
-| `issuance` | [RequestIssuance](#requestissuance-type)| Provides information about the issuance request. |
-|`callback`| [Callback](#callback-type)| Mandatory. Allows the developer to asynchronously get information on the flow during the verifiable credential issuance process. For example, the developer might want a call when the user has scanned the QR code or if the issuance request succeeds or fails.|
+| `type` | string | The verifiable credential type. Should match the type as defined in the verifiable credential manifest. For example: `VerifiedCredentialExpert`. For more information, see [Create the verified credential expert card in Azure](verifiable-credentials-configure-issuer.md). |
+| `manifest` | string| The URL of the verifiable credential manifest document. For more information, see [Gather credentials and environment details to set up your sample application](verifiable-credentials-configure-issuer.md).|
+| `claims` | string| Optional. Used for the `ID token hint` flow to include a collection of assertions made about the subject in the verifiable credential. For PIN code flow, it's important that you provide the user's first name and last name. For more information, see [Verifiable credential names](verifiable-credentials-configure-issuer.md#verifiable-credential-names). |
+| `pin` | [PIN](#pin-type)| Optional. A PIN number to provide extra security during issuance. For PIN code flow, this property is required. You generate a PIN code, and present it to the user in your app. The user must provide the PIN code that you generated. |
+
+There are currently four claims attestation types that you can send in the payload. Microsoft Entra Verified ID uses four ways to insert claims into a verifiable credential and attest to that information with the issuer's DID. The following are the four types:
+
+- ID token
+- ID token hint
+- Verifiable credentials via a verifiable presentation
+- Self-attested claims
+
+You can find detailed information about the input types in [Customizing your verifiable credential](credential-design.md).
### RequestRegistration type
The `RequestRegistration` type provides information registration for the issuer.
> [!NOTE] > At this time, the `RequestRegistration` information isn't presented during the issuance in the Microsoft Authenticator app. This information can, however, be used in the payload.
-### RequestIssuance type
-
-The `RequestIssuance` type provides information required for verifiable credential issuance. There are currently three input types that you can send in `RequestIssuance`. Azure AD Verifiable Credentials uses these types to insert claims into a verifiable credential, and attest to that information with the issuer's DID. The following are the three types:
--- ID token-- Verifiable credentials via a verifiable presentation-- Self-attested claims-
-You can find detailed information about the input types in [Customizing your verifiable credential](credential-design.md).
+### Callback type
-The `RequestIssuance` type contains the following properties:
+The Request Service REST API generates several events to the callback endpoint. Those events allow you to update the UI and continue the process after the results are returned to the application. The `Callback` type contains the following properties:
|Property |Type |Description | ||||
-| `type` | string | The verifiable credential type. Should match the type as defined in the verifiable credential manifest. For example: `VerifiedCredentialExpert`. For more information, see [Create the verified credential expert card in Azure](verifiable-credentials-configure-issuer.md). |
-| `manifest` | string| The URL of the verifiable credential manifest document. For more information, see [Gather credentials and environment details to set up your sample application](verifiable-credentials-configure-issuer.md).|
-| `claims` | string| Optional. Include a collection of assertions made about the subject in the verifiable credential. For PIN code flow, it's important that you provide the user's first name and last name. For more information, see [Verifiable credential names](verifiable-credentials-configure-issuer.md#verifiable-credential-names). |
-| `pin` | [PIN](#pin-type)| Optional. A PIN number to provide extra security during issuance. For PIN code flow, this property is required. You generate a PIN code, and present it to the user in your app. The user must provide the PIN code that you generated. |
+| `url` | string| URI to the callback endpoint of your application. The URI must point to a reachable endpoint on the internet otherwise the service will throw callback URL unreadable error. Accepted formats IPv4, IPv6 or DNS resolvable hostname |
+| `state` | string| Correlates the callback event with the state passed in the original payload. |
+| `headers` | string| Optional. You can include a collection of HTTP headers required by the receiving end of the POST message. The current supported header values are the `api-key` or the `Authorization` headers. Any other header will throw an invalid callback header error|
-### pin type
+### Pin type
The `pin` type defines a PIN code that can be displayed as part of the issuance. `pin` is optional, and, if used, should always be sent out-of-band. When you're using a HASH PIN code, you must define the `salt`, `alg`, and `iterations` properties. `pin` contains the following properties:
The `pin` type defines a PIN code that can be displayed as part of the issuance.
| `alg` | string| The hashing algorithm for the hashed PIN. Supported algorithm: `sha256`. | | `iterations` | integer| The number of hashing iterations. Possible value: `1`.|
-### Callback type
-
-The Request Service REST API generates several events to the callback endpoint. Those events allow you to update the UI and continue the process after the results are returned to the application. The `Callback` type contains the following properties:
-
-|Property |Type |Description |
-||||
-| `url` | string| URI to the callback endpoint of your application. The URI must point to a reachable endpoint on the internet otherwise the service will throw callback URL unreadable error. Accepted formats IPv4, IPv6 or DNS resolvable hostname |
-| `state` | string| Associates with the state passed in the original payload. |
-| `headers` | string| Optional. You can include a collection of HTTP headers required by the receiving end of the POST message. The current supported header values are the `api-key` or the `Authorization` headers. Any other header will throw an invalid callback header error|
- ## Successful response If successful, this method returns a response code (*HTTP 201 Created*), and a collection of event objects in the response body. The following JSON demonstrates a successful response: ```json {
- "requestId":ΓÇ»:"799f23ea-5241-45af-99ad-cf8e5018814e",
- "url":ΓÇ»"openid://vc?request_uri=https://beta.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiablecredentials/request/178319f7-20be-4945-80fb-7d52d47ae82e",
+ "requestId":ΓÇ»"799f23ea-5241-45af-99ad-cf8e5018814e",
+ "url":ΓÇ»"openid://vc?request_uri=https://verifiedid.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredentials/request/178319f7-20be-4945-80fb-7d52d47ae82e",
"expiry": 1622227690, "qrCode": "data:image/png;base64,iVBORw0KggoA<SNIP>" }
The response contains the following properties:
|Property |Type |Description | ||||
-| `requestId`| string | An autogenerated correlation ID. The [callback](#callback-events) uses the same request, allowing you to keep track of the issuance request and its callbacks. |
+| `requestId`| string | An autogenerated request ID. The [callback](#callback-events) uses the same request, allowing you to keep track of the issuance request and its callbacks. |
| `url`| string| A URL that launches the authenticator app and starts the issuance process. You can present this URL to the user if they can't scan the QR code. | | `expiry`| integer| Indicates when the response will expire. | | `qrCode`| string | A QR code that user can scan to start the issuance flow. |
When your app receives the response, the app needs to present the QR code to the
## Error response
-Error responses also can be returned so that the app can handle them appropriately. The following JSON shows an unauthorized error message:
--
-```json
-{
- "requestId": "d60b068e7fbd975896e179b99347866a",
- "date": "Wed, 29 Sep 2021 21:49:00 GMT",
- "error": {
- "code": "unauthorized",
- "message": "Failed to authenticate the request."
- }
-}
-```
-
-The response contains the following properties:
-
-|Property |Type |Description |
-||||
-| `requestId`| string | An autogenerated request ID.|
-| `date`| date| The time of the error. |
-| `error.code` | string| The return error code. |
-| `error.message`| string| The error message. |
+If there is an error with the request, an [error responses](error-codes.md) will be returned and should be handled appropriately by the app.
## Callback events
The callback endpoint is called when a user scans the QR code, uses the deep lin
|Property |Type |Description | |||| | `requestId`| string | Mapped to the original request when the payload was posted to the Verifiable Credentials service.|
-| `code` |string |The code returned when the request has an error. Possible values: <ul><li>`request_retrieved`: The user scanned the QR code or selected the link that starts the issuance flow.</li><li>`issuance_successful`: The issuance of the verifiable credentials was successful.</li><li>`Issuance_error`: There was an error during issuance. For details, see the `error` property.</li></ul> |
+| `code` |string |The code returned when the request has an error. Possible values: <ul><li>`request_retrieved`: The user scanned the QR code or selected the link that starts the issuance flow.</li><li>`issuance_successful`: The issuance of the verifiable credentials was successful.</li><li>`issuance_error`: There was an error during issuance. For details, see the `error` property.</li></ul> |
| `state` |string| Returns the state value that you passed in the original payload. | | `error`| error | When the `code` property value is `Issuance_error`, this property contains information about the error.| | `error.code` | string| The return error code. |
The following example demonstrates a callback payload when the authenticator app
```json {
-    "requestId":"aef2133ba45886ce2c38974339ba1057",
+    "requestId": "799f23ea-5241-45af-99ad-cf8e5018814e",
    "code":"request_retrieved",
-    "state":"Wy0ThUz1gSasAjS1"
+    "state": "de19cb6b-36c1-45fe-9409-909a51292a9c"
} ```
The following example demonstrates a callback payload after the user successfull
```json {
-    "requestId":"87e1cb24-9096-409f-81cb-9e645f23a4ba",
+    "requestId": "799f23ea-5241-45af-99ad-cf8e5018814e",
    "code":"issuance_successful",
-    "state":"f3d94e35-ca5f-4b1b-a7d7-a88caa05e322",
+    "state": "de19cb6b-36c1-45fe-9409-909a51292a9c"
}ΓÇ» ```
The callback endpoint might be called with an error message. The following table
|Message |DefinitionΓÇ» | |||
-| `fetch_contract_error*`| Unable to fetch the verifiable credential contract. This error usually happens when the API can't fetch the manifest you specify in the request payload [RequestIssuance object](#requestissuance-type).|
+| `fetch_contract_error*`| Unable to fetch the verifiable credential contract. This error usually happens when the API can't fetch the manifest you specify in the request payload [RequestIssuance object](#issuance-request-payload).|
| `issuance_service_error*` | The Verifiable Credentials service isn't able to validate requirements, or something went wrong in Verifiable Credentials.| | `unspecified_error`| This error is uncommon, but worth investigating. |
The following example demonstrates a callback payload when an error occurred:
```json {
-    "requestId":"87e1cb24-9096-409f-81cb-9e645f23a4ba",
+    "requestId": "799f23ea-5241-45af-99ad-cf8e5018814e",
    "code": "issuance_error",
-    "state":"f3d94e35-ca5f-4b1b-a7d7-a88caa05e322",
+    "state": "de19cb6b-36c1-45fe-9409-909a51292a9c",
"error": { "code":"IssuanceFlowFailed", "message":"issuance_service_errorΓÇ¥,
active-directory Issuer Openid https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/issuer-openid.md
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-The Azure AD Verifiable Credential service can issue verifiable credentials by retrieving claims from an ID token generated by your organization's OpenID compliant identity provider. This article instructs you on how to set up your identity provider so Authenticator can communicate with it and retrieve the correct ID Token to pass to the issuing service.
+The Microsoft Entra Verified ID service can issue verifiable credentials by retrieving claims from an ID token generated by your organization's OpenID compliant identity provider. This article instructs you on how to set up your identity provider so Authenticator can communicate with it and retrieve the correct ID Token to pass to the issuing service.
> [!IMPORTANT] > Azure Active Directory Verifiable Credentials is currently in public preview.
The ID token must use the JWT compact serialization format, and must not be encr
## Next steps -- [How to customize your Azure Active Directory Verifiable Credentials](credential-design.md)
+- [How to customize your Azure Active Directory Verifiable Credentials](credential-design.md)
active-directory Plan Issuance Solution https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/plan-issuance-solution.md
Title: Plan your Azure Active Directory Verifiable Credentials issuance solution(preview)
+ Title: Plan your Microsoft Entra Verified ID issuance solution(preview)
description: Learn to plan your end-to-end issuance solution. documentationCenter: ''
Previously updated : 06/03/2022 Last updated : 07/28/2022
-# Plan your Azure Active Directory Verifiable Credentials issuance solution (preview)
+# Plan your Microsoft Entra Verified ID issuance solution (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)] >[!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview. This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see [**Supplemental Terms of Use for Microsoft Azure Previews**](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+> Microsoft Entra Verified ID is currently in public preview. This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see [**Supplemental Terms of Use for Microsoft Azure Previews**](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
-ItΓÇÖs important to plan your issuance solution so that in addition to issuing credentials, you have a complete view of the architectural and business impacts of your solution. If you havenΓÇÖt done so, we recommend you view the [Azure Active Directory Verifiable Credentials architecture overview](introduction-to-verifiable-credentials-architecture.md) for foundational information.
+ItΓÇÖs important to plan your issuance solution so that in addition to issuing credentials, you have a complete view of the architectural and business impacts of your solution. If you havenΓÇÖt done so, we recommend you view the [Microsoft Entra Verified ID architecture overview](introduction-to-verifiable-credentials-architecture.md) for foundational information.
## Scope of guidance
-This article covers the technical aspects of planning for a verifiable credential issuance solution using Microsoft products to interoperate with the Identity Overlay Network (ION). The Microsoft solution for verifiable credentials follows the World Wide Web Consortium (W3C) [Verifiable Credentials Data Model 1.0](https://www.w3.org/TR/vc-data-model/) and [Decentralized Identifiers (DIDs) V1.0](https://www.w3.org/TR/did-core/) standards so can interoperate with non-Microsoft services. However, the examples in this content reflect the Microsoft solution stack for verifiable credentials.
+This article covers the technical aspects of planning for a verifiable credential issuance solution. The Microsoft solution for verifiable credentials follows the World Wide Web Consortium (W3C) [Verifiable Credentials Data Model 1.0](https://www.w3.org/TR/vc-data-model/) and [Decentralized Identifiers (DIDs) V1.0](https://www.w3.org/TR/did-core/) standards so can interoperate with non-Microsoft services. However, the examples in this content reflect the Microsoft solution stack for verifiable credentials.
-Out of scope for this content are topics covering supporting technologies that aren't specific to issuance solutions. For example, websites are used in a verifiable credential issuance solution but planning a website deployment isn't covered in detail.
+Out of scope for this content is articles covering supporting technologies that aren't specific to issuance solutions. For example, websites are used in a verifiable credential issuance solution but planning a website deployment isn't covered in detail.
## Components of the solution
As part of your plan for an issuance solution, you must design a solution that e
### Azure Active Directory tenant
-A prerequisite for running the Azure AD Verifiable Credentials service is that it's hosted in an Azure Active Directory (Azure AD) tenant. The Azure AD tenant provides an Identity and Access Management (IAM) control plane for the Azure resources that are part of the solution.
+A prerequisite for running the Microsoft Entra Verified ID service is that it's hosted in an Azure Active Directory (Azure AD) tenant. The Azure AD tenant provides an Identity and Access Management (IAM) control plane for the Azure resources that are part of the solution.
-Each tenant has a single instance of the Azure AD Verifiable Credentials service, and a single decentralized identifier (DID). The DID provides proof that the issuer owns the domain incorporated into the DID. The DID is used by the subject and the verifier to validate the issuer.
+Each tenant uses the multi-tenant Microsoft Entra Verified ID service, and has a decentralized identifier (DID). The DID provides proof that the issuer owns the domain incorporated into the DID. The DID is used by the subject and the verifier to validate the issuer.
### Microsoft Azure services ![Components of an issuance solution, focusing on Azure services](media/plan-issuance-solution/plan-for-issuance-solution-azure-services.png)
-The **Azure Key Vault** service stores your issuer keys, which are generated when you initiate the Azure AD Verifiable Credentials issuance service. The keys and metadata are used to execute credential management operations and provide message security.
+The **Azure Key Vault** service stores your issuer keys, which are generated when you initiate the Microsoft Entra Verified ID issuance service. The keys and metadata are used to execute credential management operations and provide message security.
Each issuer has a single key set used for signing, updating, and recovery. This key set is used for every issuance of every verifiable credential you produce.
-**Azure AD Verifiable Credentials Service** is used to store credential metadata and definitions; specifically, the rules and display definitions for your credentials.
+**Microsoft Entra Verified ID Service** is used to store credential metadata and definitions; specifically, the rules and display definitions for your credentials.
-* Display definitions determine which claims are stored in the VC and how it's displayed in the holderΓÇÖs wallet. The display definition also includes branding and other elements. Rules definitions are limited in size to 50 KB, while display definitions are limited to 150 KB. See [How to customize your verifiable credentials](../verifiable-credentials/credential-design.md).
+* Display definitions determine how claims are displayed in the holderΓÇÖs wallet and also includes branding and other elements. The Display definition can be localized into multiple languages. See [How to customize your verifiable credentials](../verifiable-credentials/credential-design.md).
-* Rules are an issuer-defined model that describes the required inputs of a verifiable credential, the trusted sources of the inputs, and the mapping of input claims to output claims.
+* Rules are an issuer-defined model that describes the required inputs of a verifiable credential. Rules also defined trusted input sources, and the mapping of input claims to output claims stored in the VC. Depending on the type of attestation defined in the rules definition, the input claims can come from different providers. Input claims may come from an OIDC Identity Provider, from an id_token_hint or they may be self asserted during issuance via user input in the wallet.
* **Input** ΓÇô Are a subset of the model in the rules file for client consumption. The subset must describe the set of inputs, where to obtain the inputs and the endpoint to call to obtain a verifiable credential.
-### Azure AD Verifiable Credentials service
+### Microsoft Entra Verified ID service
-![Microsoft Azure AD Verifiable Credentials service](media/plan-issuance-solution/plan-for-issuance-solution-azure-active-directory-verifiable-credentials-vc-services.png)
+![Diagram of Microsoft Microsoft Entra Verified ID service](media/plan-issuance-solution/plan-for-issuance-solution-azure-active-directory-verifiable-credentials-vc-services.png)
-The Azure AD Verifiable Credentials service enables you to issue and revoke VCs based on your configuration. The service:
+The Microsoft Entra Verified ID service enables you to issue and revoke VCs based on your configuration. The service:
-* Provisions the decentralized identifier (DID) and writes the DID document to ION, where it can be used by subjects and verifiers. Each issuer has a single DID per tenant.
+* Provisions the decentralized identifier (DID). Each issuer has a single DID per tenant.
* Provisions key sets to Key Vault.
The Azure AD Verifiable Credentials service enables you to issue and revoke VCs
* Provides REST APIs interface for issuer and verifier web front ends
-### ION
+### Trust System
![ION](media/plan-issuance-solution/plan-for-issuance-solution-ion.png)
-As one alternative for the tenants trust system, Microsoft uses the [Identity Overlay Network (ION)](https://identity.foundation/ion/), [a Sidetree-based network](https://identity.foundation/sidetree/spec/) that uses BitcoinΓÇÖs blockchain for decentralized identifier (DID) implementation. The DID document of the issuer is stored in ION and is used to perform cryptographic signature checks by parties to the transaction. The other alternative for trust system is Web, where the DID document is hosted on the issuers webserver.
+Microsoft Entra Verified ID currently supports two trust system. One is the [Identity Overlay Network (ION)](https://identity.foundation/ion/), [a Sidetree-based network](https://identity.foundation/sidetree/spec/) that uses BitcoinΓÇÖs blockchain for decentralized identifier (DID) implementation. The DID document of the issuer is stored in ION and is used to perform cryptographic signature checks by parties to the transaction. The other alternative for trust system is [DID Web](https://w3c-ccg.github.io/did-method-web/), where the DID document is hosted on the issuers webserver.
### Microsoft Authenticator application ![Microsoft Authenticator application](media/plan-issuance-solution/plan-for-issuance-solution-authenticator.png)
-Microsoft Authenticator is the mobile application that orchestrates the interactions between the user, the Azure AD Verifiable Credentials service, and dependencies that are described in the contract used to issue VCs. It acts as a digital wallet in which the holder of the VC stores the VC, including the private key of the subject of the VC. Authenticator is also the mechanism used to present VCs for verification.
+Microsoft Authenticator is the mobile application that orchestrates the interactions between the user, the Microsoft Entra Verified ID service, and dependencies that are described in the contract used to issue VCs. It acts as a digital wallet in which the holder of the VC stores the VC, including the private key of the subject of the VC. Authenticator is also the mechanism used to present VCs for verification.
### Issuance business logic
Your issuance solution includes a web front end where users request a VC, an ide
A web front end serves issuance requests to the subjectΓÇÖs wallet by generating deep links or QR codes. Based on the configuration of the contract, other components might be required to satisfy the requirements to create a VC.
-These services provide supporting roles that don't necessarily need to integrate with ION or Azure AD Verifiable Credentials issuance service. This layer typically includes:
+These services provide supporting roles that don't necessarily need to integrate with ION or Microsoft Entra Verified ID issuance service. This layer typically includes:
* **Open ID Connect (OIDC)-compliant service or services** are used to obtain id_tokens needed to issue the VC. Existing identity systems such as Azure AD or Azure AD B2C can provide the OIDC-compliant service, as can custom solutions such as Identity Server.
Your specific use cases determine your credential design. The use case will dete
* if credentials will ever need to be revoked
-
- ### Credential Use Cases
-With Azure AD Verifiable Credentials, the most common credential use cases are:
+With Microsoft Entra Verified ID, the most common credential use cases are:
**Identity Verification**: a credential is issued based on multiple criteria. This may include verifying the authenticity of government-issued documents like a passport or driverΓÇÖs license and corelating the information in that document with other information such as:
With Azure AD Verifiable Credentials, the most common credential use cases are:
This kind of credential is a good fit for identity onboarding scenarios of new employees, partners, service providers, students, and other instances where identity verification is essential.
-
- ![Identity verification use case](media/plan-issuance-solution/plan-for-issuance-solution-identity-verification-use-case.png) **Proof of employment/membership**: a credential is issued to prove a relationship between the user and an institution. This kind of credential is a good fit to access loosely coupled business-to-business applications, such as retailers offering discounts to employees or students. One main value of VCs is their portability: Once issued, the user can use the VC in many scenarios.
For more use cases, see [Verifiable Credentials Use Cases (w3.org)](https://www.
As part of the design process, investigate industry-specific schemas, namespaces, and identifiers to which you can align to maximize interoperability and usage. Examples can be found in [Schema.org](https://schema.org/) and the [DIF - Claims and Credentials Working Group.](https://identity.foundation/working-groups/claims-credentials.html)
-Note that common schemas are an area where standards are still emerging. One example of such an effort is the [Verifiable Credentials for Education Task Force](https://github.com/w3c-ccg/vc-ed). We encourage you to investigate and contribute to emerging standards in your organization's industry.
+Common schemas are an area where standards are still emerging. One example of such an effort is the [Verifiable Credentials for Education Task Force](https://github.com/w3c-ccg/vc-ed). We encourage you to investigate and contribute to emerging standards in your organization's industry.
+
+### Credential Type and Attributes
+
+After establishing the use case for a credential, you need to decide the credential type and what attributes to include in the credential. Verifiers can read the claims in the VC presented by the users.
-### Credential Attributes
+All verifiable credentials must declare their *type* in their [rules definition](rules-and-display-definitions-model.md#rulesmodel-type). The credential type distinguishes a verifiable credentials schema from other credentials and it ensures interoperability between issuers and verifiers. To indicate a credential type, provide one or more credential types that the credential satisfies. Each type is represented by a unique string. Often, a URI is used to ensure global uniqueness. The URI doesn't need to be addressable. It's treated as a string. As an example, a diploma credential issued by Contoso University might declare the following types:
-After establishing the use case for a credential, you need to decide what attributes to include in the credential. Verifiers can read the claims in the VC presented by the users.
+| Type | Purpose |
+| - | - |
+| `https://schema.org/EducationalCredential` | Declares that diplomas issued by Contoso University contain attributes defined by the schema.org `EducationaCredential` object. |
+| `https://schemas.ed.gov/universityDiploma2020` | Declares that diplomas issued by Contoso University contain attributes defined by the U.S. Department of Education. |
+| `https://schemas.contoso.edu/diploma2020` | Declares that diplomas issued by Contoso University contain attributes defined by Contoso University. |
In addition to the industry-specific standards and schemas that might be applicable to your scenarios, consider the following aspects:
-* **Minimize private information**: Meet the use cases with the minimal amount of private information necessary. For example, a VC used for e-commerce websites that offers discounts to employees and alumni can be fulfilled by presenting the credential with just the first and last name claims. Additional information such as hiring date, title, department, etc. are not needed.
+* **Minimize private information**: Meet the use cases with the minimal amount of private information necessary. For example, a VC used for e-commerce websites that offers discounts to employees and alumni can be fulfilled by presenting the credential with just the first and last name claims. Additional information such as hiring date, title, department, aren't needed.
* **Favor abstract claims**: Each claim should meet the need while minimizing the detail. For example, a claim named ΓÇ£ageOverΓÇ¥ with discrete values such as ΓÇ£13ΓÇ¥,ΓÇ¥21ΓÇ¥,ΓÇ¥60ΓÇ¥, is more abstract than a date of birth claim.
-* **Plan for revocability**: We recommend you define an index claim to enable mechanisms to find and revoke credentials. You are limited to defining one index claim per contract. It is important to note that values for indexed claims are not stored in the backend, only a hash of the claim value. For more information, see [Revoke a previously issued verifiable credential](../verifiable-credentials/how-to-issuer-revoke.md).
+* **Plan for revocability**: We recommend you define an index claim to enable mechanisms to find and revoke credentials. You are limited to defining one index claim per contract. It is important to note that values for indexed claims aren't stored in the backend, only a hash of the claim value. For more information, see [Revoke a previously issued verifiable credential](../verifiable-credentials/how-to-issuer-revoke.md).
-For additional considerations on credential attributes, refer to the [Verifiable Credentials Data Model 1.0 (w3.org)](https://www.w3.org/TR/vc-data-model/) specification.
+For other considerations on credential attributes, refer to the [Verifiable Credentials Data Model 1.0 (w3.org)](https://www.w3.org/TR/vc-data-model/) specification.
## Plan quality attributes ### Plan for performance
-As with any solution, you must plan for performance. The key areas to focus on are latency, throughput storage, and scalability. During initial phases of a release cycle, performance should not be a concern. However, when adoption of your issuance solution results in many verifiable credentials being issued, performance planning might become a critical part of your solution.
+As with any solution, you must plan for performance. The key areas to focus on are latency and scalability. During initial phases of a release cycle, performance shouldn't be a concern. However, when adoption of your issuance solution results in many verifiable credentials being issued, performance planning might become a critical part of your solution.
The following provides areas to consider when planning for performance:
-* The Azure AD Verifiable Credentials issuance service is deployed in West Europe, North Europe, West US 2, and West Central US Azure regions. You do not select a region to deploy the service to.
+* The Microsoft Entra Verified ID issuance service is deployed in West Europe, North Europe, West US 2, and West Central US Azure regions. If your Azure Active Directory tenant resides within EU, the Microsoft Entra Verified ID service will be in EU too.
-* To limit latency, deploy your issuance frontend website, key vault, and storage in the region listed above that is closest to where requests are expected to originate.
+* To limit latency, deploy your issuance frontend website and key vault in the region listed above that is closest to where requests are expected to originate.
Model based on throughput: * The Issuer service is subject to [Azure Key Vault service limits](../../key-vault/general/service-limits.md).
Model based on throughput:
* Maximum signing performance of a Key Vault is 2,000 signing/~10 seconds. This is about 12,000 signings per minute. This means your solution can support up to 4,000 VC issuances per minute.
-* You cannot control throttling; however, we recommend you read [Azure Key Vault throttling guidance](../../key-vault/general/overview-throttling.md).
+* You can't control throttling; however, we recommend you read [Azure Key Vault throttling guidance](../../key-vault/general/overview-throttling.md).
-* If you are planning a large rollout and onboarding of VCs, consider batching VC creation to ensure you do not exceed limits.
-
-* The issuance service is subject to Azure storage limits. In typical use cases storage should not be a concern. However, if you feel you might exceed storage limits or feel storage might be a bottleneck, review the following:
-
- * We recommend reading [Scalability and performance targets for Blob storage](../../storage/blobs/scalability-targets.md) as part of your planning process. Azure AD Verifiable Credentials issuance service reads rules and displays files, and results are cached by the service.
-
- * We also recommend you review [Performance and scalability checklist for Blob storage - Azure Storage](../../storage/blobs/storage-performance-checklist.md).
+* If you are planning a large rollout and onboarding of VCs, consider batching VC creation to ensure you don't exceed limits.
As part of your plan for performance, determine what you will monitor to better understand the performance of the solution. In addition to application-level website monitoring, consider the following as you define your VC issuance monitoring strategy:
For scalability, consider implementing metrics for the following:
* Attribute lookup
- * Calls to Azure AD Verifiable Credentials issuance service
+ * Calls to Microsoft Entra Verified ID issuance service
* Credential issued
For scalability, consider implementing metrics for the following:
* Time spent (latency)
-* Monitor Azure Key Vault and Storage using the following:
+* Monitor Azure Key Vault using the following:
* [Azure Key Vault monitoring and alerting](../../key-vault/general/alert.md)
To plan for reliability, we recommend:
* For frontend and business layer, your solution can manifest in an unlimited number of ways. As with any solution, for the dependencies you identify, ensure that the dependencies are resilient and monitored.
-If the rare event that the Azure AD Verifiable Credentials issuance service, Azure Key Vault, or Azure Storage services become unavailable, the entire solution will become unavailable.
+If the rare event that the Microsoft Entra Verified ID issuance service or Azure Key Vault services become unavailable, the entire solution will become unavailable.
### Plan for compliance Your organization may have specific compliance needs related to your industry, type of transactions, or country of operation.
-**Data residency**: The Azure AD Verifiable Credentials issuance service is deployed in a subset of Azure regions. The service is used for compute functions only. We do not store values of verifiable credentials in Microsoft systems. However, as part of the issuance process, personal data is sent and used when issuing VCs. Using the VC service should not impact data residency requirements. If, as a part of identity verification you store any personal information, that should be stored in a manner and region that meets your compliance requirements. For Azure-related guidance, visit the Microsoft Trust Center website.
+**Data residency**: The Microsoft Entra Verified ID issuance service is deployed in a subset of Azure regions. The service is used for compute functions only. We don't store values of verifiable credentials in Microsoft systems. However, as part of the issuance process, personal data is sent and used when issuing VCs. Using the VC service shouldn't impact data residency requirements. If, as a part of identity verification you store any personal information, that should be stored in a manner and region that meets your compliance requirements. For Azure-related guidance, visit the Microsoft Trust Center website.
**Revoking credentials**: Determine if your organization will need to revoke credentials. For example, an admin may need to revoke credentials when an employee leaves the company. Or if a credential is issued for a driverΓÇÖs license, and the holder is caught doing something that would cause the driverΓÇÖs license to be suspended, the VC might need to be revoked. For more information, see [Revoke a previously issued verifiable credential](how-to-issuer-revoke.md).
Your organization may have specific compliance needs related to your industry, t
## Plan for operations
-When planning for operations, it is critical you develop a schema to use for troubleshooting, reporting, and distinguishing various customers you support. Additionally, if the operations team is responsible for executing VC revocation, that process must be defined. Each step in the process should be correlated so that you can determine which log entries can be associated with each unique issuance request. For auditing, we recommend you capture each attempt of credential issuing individually. Specifically:
+When planning for operations, it is critical you develop a schema to use for troubleshooting, reporting and distinguishing various customers you support. Additionally, if the operations team is responsible for executing VC revocation, that process must be defined. Each step in the process should be correlated so that you can determine which log entries can be associated with each unique issuance request. For auditing, we recommend you capture each attempt of credential issuing individually. Specifically:
* Generate unique transaction IDs that customers and support engineers can refer to as needed.
As part of your design considerations focused on security, we recommend the foll
* For key management:
- * Create a dedicated Key Vault for VC issuance. Limit Azure Key Vault permissions to the Azure AD Verifiable Credentials issuance service and the issuance service frontend website service principal.
+ * Create a dedicated Key Vault for VC issuance. Limit Azure Key Vault permissions to the Microsoft Entra Verified ID issuance service and the issuance service frontend website service principal.
* Treat Azure Key Vault as a highly privileged system - Azure Key Vault issues credentials to customers. We recommend that no human identities have standing permissions over the Azure Key Vault service. Administrators should have only just I time access to Key Vault. For more best practices for Azure Key Vault usage, refer to [Azure Security Baseline for Key Vault](/security/benchmark/azure/baselines/key-vault-security-baseline).
For security logging and monitoring, we recommend the following:
* Enable logging and alerting of Azure Key Vault to track credential issuance operations, key extraction attempts, permission changes, and to monitor and send alert for configuration changes. More information can be found at [How to enable Key Vault logging](../../key-vault/general/howto-logging.md).
-* Enable logging of your Azure Storage account to monitor and send alert for configuration changes. More information can be found at [Monitoring Azure Blob Storage](../../storage/blobs/monitor-blob-storage.md).
- * Archive logs in a security information and event management (SIEM) systems, such as [Microsoft Sentinel](https://azure.microsoft.com/services/azure-sentinel) for long-term retention. * Mitigate spoofing risks by using the following
For more information on Key Vault implementation and operation, refer to [Best p
[Plan your verification solution](plan-verification-solution.md)
-[Get started with verifiable credentials](get-started-verifiable-credentials.md)
+[Get started with verifiable credentials](get-started-verifiable-credentials.md)
active-directory Plan Verification Solution https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/plan-verification-solution.md
Title: Plan your Azure Active Directory Verifiable Credentials verification solution (preview)
+ Title: Plan your Microsoft Entra Verified ID verification solution (preview)
description: Learn foundational information to plan and design your verification solution documentationCenter: ''
Previously updated : 06/02/2022 Last updated : 07/28/2022
-# Plan your Azure Active Directory Verifiable Credentials verification solution (preview)
+# Plan your Microsoft Entra Verified ID verification solution (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)] >[!IMPORTANT]
-> Azure Active Directory Verifiable Credentials is currently in public preview. This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
+> Microsoft Entra Verified ID is currently in public preview. This preview version is provided without a service level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities. For more information, see [Supplemental Terms of Use for Microsoft Azure Previews](https://azure.microsoft.com/support/legal/preview-supplemental-terms/).
-MicrosoftΓÇÖs Azure Active Directory Verifiable Credentials (Azure AD VC) service enables you to trust proofs of user identity without expanding your trust boundary. With Azure AD VC, you create accounts or federate with another identity provider. By using verifiable credentials based on an open standard, a verification exchange enables applications to request credentials that aren't bound to a specific domain. This approach makes it easier to request and verify credentials at scale.
+MicrosoftΓÇÖs Microsoft Entra Verified ID (Azure AD VC) service enables you to trust proofs of user identity without expanding your trust boundary. With Azure AD VC, you create accounts or federate with another identity provider. When a solution implements a verification exchange using verifiable credentials, it enables applications to request credentials that aren't bound to a specific domain. This approach makes it easier to request and verify credentials at scale.
-If you havenΓÇÖt already, we suggest you review the [Azure AD Verifiable Credentials architecture overview](introduction-to-verifiable-credentials-architecture.md). You may also want to review [Plan your Azure AD Verifiable Credentials issuance solution](plan-issuance-solution.md).
+If you havenΓÇÖt already, we suggest you review the [Microsoft Entra Verified ID architecture overview](introduction-to-verifiable-credentials-architecture.md). You may also want to review [Plan your Microsoft Entra Verified ID issuance solution](plan-issuance-solution.md).
## Scope of guidance
-This content covers the technical aspects of planning for a verifiable credential (VC) verification solution using Microsoft products and services. The solution interfaces with the Identity Overlay Network (ION) which acts as the decentralized public key infrastructure (DPKI).
+This content covers the technical aspects of planning for a verifiable credential (VC) verification solution using Microsoft products and services. The solution interfaces with a trust system, where currently supported trust systems are Identity Overlay Network (ION) or DID Web. ION acts as the decentralized public key infrastructure (DPKI) while DID Web is a centralized public key infrastructure.
Supporting technologies that aren't specific to verification solutions are out of scope. For example, websites are used in a verifiable credential verification solution but planning a website deployment isn't covered in detail.
As you plan your verification solution, you must consider what business capabili
As part of your plan for a verification solution, you must enable the interactions between the verifier, the subject, and the issuer. In this article, the terms relying party and verifier are used interchangeably. The following diagram shows the components of your verification architecture.
-![Components of a verification solution](media/plan-verification-solution/plan-verification-solution-architecture.png)
+![Diagram of the components of a verification solution.](media/plan-verification-solution/plan-verification-solution-architecture.png)
-### Azure AD Verifiable Credentials service
+### Microsoft Entra Verified ID service
-In the context of a verifier solution, the Azure AD Verifiable Credentials service is the interface between the Microsoft components of the solution and ION. The service provisions the key set to Key Vault, provisions the decentralized identifier (DID), and writes the DID document to ION, where it can be used by subjects and issuers.
+In the context of a verifier solution, the Microsoft Entra Verified ID service is the interface between the Microsoft components of the solution and the trust system. The service provisions the key set to Key Vault, provisions the decentralized identifier (DID). In the case of ION, the service writes the DID document to the distributed ledger, where it can be used by subjects and issuers.
### Azure Active Directory tenant
-The service requires an Azure AD tenant that provides an Identity and Access Management (IAM) control plane for the Azure resources that are part of the solution. There's a single instance of the Azure AD VC service within a tenant, and it issues a single DID document representing the verifier. If you have multiple relying parties using your verification service, they all use the same verifier DID. The verifier DID provides pointers to the public key that allows subjects and issuers to validate messages that come from the relying party.
+The service requires an Azure AD tenant that provides an Identity and Access Management (IAM) control plane for the Azure resources that are part of the solution. Each Azure AD tenant uses the multi-tenant Microsoft Entra Verified ID service, and it issues a single DID document representing the verifier. If you have multiple relying parties using your verification service, they all use the same verifier DID. The verifier DID provides pointers to the public key that allows subjects and issuers to validate messages that come from the relying party.
+ ### Azure Key Vault
-![Azure Key Vault](./media/plan-verification-solution/plan-verification-solution-key-vault.png)
+![Diagram of the components of a verification solution with Azure Key Vault highlighted.](./media/plan-verification-solution/plan-verification-solution-key-vault.png)
-The Azure Key Vault service stores your verifier keys, which are generated when you enable the Azure AD Verifiable Credentials issuance service. The keys are used to provide message security. Each verifier has a single key set used for signing, updating, and recovering VCs. This key set is used each time you service a verification request. Microsoft key set currently uses Elliptic Curve Cryptography (ECC) [SECP256k1](https://en.bitcoin.it/wiki/Secp256k1). We're exploring other cryptographic signature schemas that will be adopted by the broader DID community.
+The Azure Key Vault service stores your verifier keys, which are generated when you enable the Microsoft Entra Verified ID issuance service. The keys are used to provide message security. Each verifier has a single key set used for signing, updating, and recovering VCs. This key set is used each time you service a verification request. Microsoft key set currently uses Elliptic Curve Cryptography (ECC) [SECP256k1](https://en.bitcoin.it/wiki/Secp256k1). We're exploring other cryptographic signature schemas that will be adopted by the broader DID community.
-### Azure AD VC APIs
+### Request Service API
-![Azure AD VC APIs](./media/plan-verification-solution/plan-verification-solution-apis.png)
+![Diagram of the components of a verification solution with request Service API highlighted.](./media/plan-verification-solution/plan-verification-solution-apis.png)
Application programming interfaces (APIs) provide developers a method to abstract interactions between components of the solution to execute verification operations.
-### ION
-
-![Azure AD VC ION](./media/plan-verification-solution/plan-verification-solution-ion.png)
+### Trust System
-As one alternative for the tenants trust system, Microsoft uses the [Identity Overlay Network (ION)](https://identity.foundation/ion/), [a Sidetree-based network](https://identity.foundation/sidetree/spec/)that uses BitcoinΓÇÖs blockchain for decentralized identifier (DID) implementation. The DID document of the issuer is stored in ION and is used to perform cryptographic signature checks by parties to the transaction. The other alternative for trust system is Web, where the DID document is hosted on the issuers webserver.
+![Diagram of the components of a verification solution with the trust system highlighted.](./media/plan-verification-solution/plan-verification-solution-ion.png)
+Microsoft Entra Verified ID currently supports two trust system. One is [Identity Overlay Network (ION)](https://identity.foundation/ion/), [a Sidetree-based network](https://identity.foundation/sidetree/spec/)that uses BitcoinΓÇÖs blockchain for decentralized identifier (DID) implementation. The DID document of the issuer is stored in ION and is used to perform cryptographic signature checks by parties to the transaction. The other alternative for trust system is [DID Web](https://w3c-ccg.github.io/did-method-web/), where the DID document is hosted on the issuers webserver.
### Microsoft Authenticator application
-![Microsoft Authenticator application](media/plan-verification-solution/plan-verification-solution-authenticator.png)
+![Diagram of the components of a verification solution with Microsoft Authenticator application highlighted.](media/plan-verification-solution/plan-verification-solution-authenticator.png)
-Microsoft Authenticator is the mobile application that orchestrates the interactions between the relying party, the user, the Azure AD Verifiable Credentials issuance service, and dependencies described in the contract used to issue VCs. Microsoft Authenticator acts as a digital wallet in which the holder of the VC stores the VC. It's also the mechanism used to present VCs for verification.
+Microsoft Authenticator is the mobile application that orchestrates the interactions between the relying party, the user, the Microsoft Entra Verified ID issuance service, and dependencies described in the contract used to issue VCs. Microsoft Authenticator acts as a digital wallet in which the holder of the VC stores the VC. It's also the mechanism used to present VCs for verification.
### Relying party (RP)
-![Relying party components](media/plan-verification-solution/plan-verification-solution-relying-party.png)
+![Diagram of the components of a verification solution with Relying party components highlighted.](media/plan-verification-solution/plan-verification-solution-relying-party.png)
#### Web front end
-The relying party web front end uses the Azure AD VC APIs to verify VCs by generating deep links or QR codes that are consumed by the subjectΓÇÖs wallet. Depending on the scenario, the front end can be a publicly accessible or internal website to enable end-user experiences that require verification. However, the endpoints that the wallet accesses must be publicly accessible. Specifically, it controls redirection to the wallet with specific request parameters. This is accomplished using the Microsoft-provided APIs.
+The relying party web front end uses the Request Service API to verify VCs by generating deep links or QR codes that are consumed by the subjectΓÇÖs wallet. Depending on the scenario, the front end can be a publicly accessible or internal website to enable end-user experiences that require verification. However, the endpoints that the wallet accesses must be publicly accessible. Specifically, it controls redirection to the wallet with specific request parameters. This is accomplished using the Microsoft-provided APIs.
#### Business logic
The following are examples of designs to satisfy specific use cases. The first i
### Account onboarding
-Verifiable credentials can also be used to enable faster onboarding by replacing some human interactions. VCs can be used to onboard employees, students, citizens, or others to access services. For example, rather than an employee needing to go to a central office to activate an employee badge, they can use a VC to verify their identity to activate a badge that is delivered to them remotely. Rather than a citizen receiving a code they must redeem to access governmental services, they can use a VC to prove their identity and gain access.
+Verifiable credentials can be used to enable faster onboarding by replacing some human interactions. VCs can be used to onboard employees, students, citizens, or others to access services. For example, rather than an employee needing to go to a central office to activate an employee badge, they can use a VC to verify their identity to activate a badge that is delivered to them remotely. Rather than a citizen receiving a code they must redeem to access governmental services, they can use a VC to prove their identity and gain access.
-![Account onboarding scenario](media/plan-verification-solution/plan-verification-solution-onboarding.png)
+![Diagram showing the account onboarding scenario.](media/plan-verification-solution/plan-verification-solution-onboarding.png)
#### Other elements
-**Onboarding portal**: A web front end that orchestrates the Azure AD VC APIs calls for VC presentation and validation, and the logic to onboard accounts.
+**Onboarding portal**: A web front end that orchestrates the Request Service API calls for VC presentation and validation, and the logic to onboard accounts.
**Custom logic / workflows**: Specific logic with organization-specific steps before and after updating the user account. Examples might include approval workflows, other validations, logging, notifications, and so on.
Verifiable credentials can also be used to enable faster onboarding by replacing
* To invite users to Azure AD using B2B collaboration, the RP website can use a service principal that is granted the MS Graph scope of User.Invite.All to create invitations.
- * If your RP is running in Azure, use Managed Identities to call Microsoft Graph; this will remove the risks of managing service principal credentials in code or configuration files. To learn more about Managed identities, go to [Managed identities for Azure resources.](../managed-identities-azure-resources/overview.md)
+ * If your RP is running in Azure, use Managed Identities to call Microsoft Graph. Using managed identities removes the risks of managing service principal credentials in code or configuration files. To learn more about Managed identities, go to [Managed identities for Azure resources.](../managed-identities-azure-resources/overview.md)
### Accessing high-value applications inside organizations Verifiable credentials can be used as other proof to access to sensitive applications inside the organization. For example, VCs can also be used to provide employees with access to line-of-business applications based on achieving specific criteria, such as a certification.
-![Access inside of the trust boundary](media/plan-verification-solution/plan-verification-solution-inside-trust-boundary-access.png)
+![Diagram of the components of a verification solution with other elements included.](media/plan-verification-solution/plan-verification-solution-inside-trust-boundary-access.png)
#### Other elements
-**Relying party web frontend**: This is the web frontend of the application that is enhanced through Azure AD Verifiable Credential API calls for VC presentation and validation, based on your business requirements.
+**Relying party web frontend**: This is the web frontend of the application that is enhanced through Request Service API calls for VC presentation and validation, based on your business requirements.
**User access authorization logic**: Logic layer in the application that authorizes user access and is enhanced to consume the user attributes inside the VC to make authorization decisions.
Verifiable credentials can also be used by relying parties that want to grant ac
The decentralized nature of verifiable credentials enables this scenario without establishing federation relationships.
-![Access outside of the trust boundary](media/plan-verification-solution/plan-verification-solution-outside-trust-boundary-access.png)
+![Diagram of the components of a verification solution showing that access is taking place from outside of the trust boundary.](media/plan-verification-solution/plan-verification-solution-outside-trust-boundary-access.png)
#### Other elements
-**Relying party web frontend**: This is the web frontend of the application that is enhanced through Azure AD Verifiable Credential API calls for VC presentation and validation, based on your business requirements.
+**Relying party web frontend**: This is the web frontend of the application that is enhanced through Request Service API calls for VC presentation and validation, based on your business requirements.
**User access authorization logic**: Logic layer in the application that authorizes user access and is enhanced to consume the user attributes inside the VC to make authorization decisions.
Verifiable credentials can be used as an approach to account recovery. For examp
Note: While the scenario we describe in this section is specific to recover Azure AD accounts, this approach can also be used to recover accounts in other systems.
-![Account recovery solution](media/plan-verification-solution/plan-verification-solution-account-recovery.png)
+![Diagram of the components of a verification solution showing the account recovery scenario.](media/plan-verification-solution/plan-verification-solution-account-recovery.png)
#### Other Elements
You can use information in presented VCs to build a user profile. If you want to
* Consider using the ΓÇ£subΓÇ¥ claim as an immutable identifier of the user. This is an opaque unique attribute that will be constant for a given subject/RP pair.
- * Define a mechanism to deprovision the user profile from the application. Due to the decentralized nature of the Azure AD Verifiable Credentials system, there is no application user provisioning lifecycle.
+ * Define a mechanism to deprovision the user profile from the application. Due to the decentralized nature of the Microsoft Entra Verified ID system, there is no application user provisioning lifecycle.
* Do not store personal data claims returned in the VC token.
You can use information in presented VCs to build a user profile. If you want to
## Plan for performance
-As with any solution, you must plan for performance. Focus areas include latency, throughput, and scalability. During initial phases of a release cycle, performance should not be a concern. However, when adoption of your solution results in many verifiable credentials being verified, performance planning might become a critical part of your solution.
+As with any solution, you must plan for performance. Focus areas include latency, throughput, and scalability. During initial phases of a release cycle, performance shouldn't be a concern. However, when adoption of your solution results in many verifiable credentials being verified, performance planning might become a critical part of your solution.
The following provides areas to consider when planning for performance:
-* The Azure AD Verifiable Credentials issuance service is deployed in West Europe, North Europe, West US 2, and West Central US Azure regions. To limit latency, deploy your verification front end (website) and key vault in the region listed above that is closest to where requests are expected to originate from.
+* The Microsoft Entra Verified ID issuance service is deployed in West Europe, North Europe, West US 2, and West Central US Azure regions. To limit latency, deploy your verification front end (website) and key vault in the region listed above that is closest to where requests are expected to originate from.
* Model based on throughput:
The following provides areas to consider when planning for performance:
To best plan for high availability and disaster recovery, we suggest the following:
-* Azure AD Verifiable Credentials service is deployed in the West Europe, North Europe, West US 2, and West Central US Azure regions. Consider deploying your supporting web servers and supporting applications in one of those regions, specifically in the ones from which you expect most of your validation traffic to originate.
+* Microsoft Entra Verified ID service is deployed in the West Europe, North Europe, West US 2, and West Central US Azure regions. Consider deploying your supporting web servers and supporting applications in one of those regions, specifically in the ones from which you expect most of your validation traffic to originate.
* Review and incorporate best practices from [Azure Key Vault availability and redundancy](../../key-vault/general/disaster-recovery-guidance.md) as you design for your availability and redundancy goals.
As you are designing for security, consider the following:
* Define a dedicated service principal for a website accessing the Key Vault.
-* Only the Azure AD Verifiable Credentials service and the website service principals should have permissions to use Key Vault to sign messages with the private key.
+* Only the Microsoft Entra Verified ID service and the website service principals should have permissions to use Key Vault to sign messages with the private key.
* Don't assign any human identity administrative permissions to the Key Vault. For more information on Key Vault best practices, see [Azure Security Baseline for Key Vault](../../key-vault/general/security-baseline.md).
As part of your operational planning, consider monitoring the following:
Learn more about architecting VC solutions
- * [Azure AD Verifiable Credentials overview](introduction-to-verifiable-credentials-architecture.md)
+ * [Microsoft Entra Verified ID overview](introduction-to-verifiable-credentials-architecture.md)
- * [Plan your Azure AD Verifiable Credentials issuance solution](plan-issuance-solution.md)
+ * [Plan your Microsoft Entra Verified ID issuance solution](plan-issuance-solution.md)
Implement Verifiable Credentials
- * [Introduction to Azure Active Directory Verifiable Credentials](decentralized-identifier-overview.md)
+ * [Introduction to Microsoft Entra Verified ID](decentralized-identifier-overview.md)
* [Get started with Verifiable Credentials](get-started-verifiable-credentials.md)
-[FAQs](verifiable-credentials-faq.md)
+[FAQs](verifiable-credentials-faq.md)
active-directory Presentation Request Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/presentation-request-api.md
Title: Specify the Request Service REST API verify request (preview)+ description: Learn how to start a presentation request in Verifiable Credentials documentationCenter: ''
Previously updated : 06/02/2022 Last updated : 07/28/2022
-#Customer intent: As an administrator, I am trying to learn the process of revoking verifiable credentials that I have issued.
+#Customer intent: As an administrator, I am trying to learn how to use the Request Service API and integrate it into my business application.
# Request Service REST API presentation specification (preview) [!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-Azure Active Directory (Azure AD) Verifiable Credentials includes the Request Service REST API. This API allows you to issue and verify a credential. This article specifies the Request Service REST API for a presentation request. The presentation request asks the user to present a verifiable credential, and then verify the credential.
+Microsoft Entra Verified ID includes the Request Service REST API. This API allows you to issue and verify a credential. This article specifies the Request Service REST API for a presentation request. The presentation request asks the user to present a verifiable credential, and then verify the credential.
+Another article describes [how to call the Request Service REST API](get-started-request-api.md).
## HTTP request
The Request Service REST API presentation request requires the following HTTP he
|`Authorization`| Attach the access token as a bearer token to the authorization header in an HTTP request. For example, `Authorization: Bearer <token>`.| |`Content-Type`| `Application/json`|
-Construct an HTTP POST request to the Request Service REST API. Replace the `{tenantID}` with your tenant ID or tenant name.
+Construct an HTTP POST request to the Request Service REST API. The `tenantId` isn't needed in the URL anymore since it is present as a claim in the `access_token`.
```http
-https://beta.did.msidentity.com/v1.0/{tenantID}/verifiablecredentials/request
+https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createPresentationRequest
``` The following HTTP request demonstrates a presentation request to the Request Service REST API: ```http
-POST https://beta.did.msidentity.com/v1.0/contoso.onmicrosoft.com/verifiablecredentials/request
+POST https://verifiedid.did.msidentity.com/v1.0/verifiableCredentials/createPresentationRequest
Content-Type: application/json Authorization: Bearer <token>
The presentation request payload contains information about your verifiable cred
```json { "includeQRCode": true,
+ "includeReceipt": true,
+ "authority": "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OABCO6uUKyF5zM7fQZ8Jg:eyJ...<SNIP>...",
+ "registration": {
+ "clientName": "Veritable Credential Expert Verifier"
+ },
"callback": { "url": "https://www.contoso.com/api/verifier/presentationCallback", "state": "92d076dd-450a-4247-aa5b-d2e75a1a5d58", "headers": {
- "api-key": "OPTIONAL API-KEY for VERIFIER CALLBACK API"
+ "api-key": "OPTIONAL API-KEY for CALLBACK EVENTS"
} },
- "authority": "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDekxTVlFWcVl3S2JNY1Fsc0RILUZJUSIsInkiOiJiRWo5MDY...",
- "registration": {
- "clientName": "Veritable Credential Expert Verifier"
- },
- "presentation": {
- "includeReceipt": true,
- "requestedCredentials": [
- {
- "type": "VerifiedCredentialExpert",
- "purpose": "So we can see that you a veritable credentials expert",
- "acceptedIssuers": [
- "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OkIjO6uUKyF5zM7fQZ8Jg:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfOTAyZmM2NmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiTEdUOWk3aFYzN1dUcFhHcUg5c1VDekxTVlFWcVl3S2JNY1Fsc0RILUZJUSIsInkiO..."
- ]
+ "requestedCredentials": [
+ {
+ "type": "VerifiedCredentialExpert",
+ "purpose": "So we can see that you a veritable credentials expert",
+ "acceptedIssuers": [
+ "did:ion:EiCLL8lzCqlGLYTGbjwgR6SN6OABCO6uUKyF5zM7fQZ8Jg:eyJ...<SNIP>..."
+ ],
+ "configuration": {
+ "validation": {
+ "allowRevoked": false,
+ "validateLinkedDomain": false
+ }
}
- ]
- }
+ }
+ ]
} ```
The payload contains the following properties.
|Parameter |Type | Description | ||||
-| `includeQRCode` | Boolean | Determines whether a QR code is included in the response of this request. Present the QR code and ask the user to scan it. Scanning the QR code launches the authenticator app with this presentation request. Possible values are `true` (default) or `false`. When you set the value to `false`, use the return `url` property to render a deep link. |
+| `includeQRCode` | Boolean | Determines whether a QR code is included in the response of this request. Present the QR code and ask the user to scan it. Scanning the QR code launches the authenticator app with this presentation request. Possible values are `true` (default) or `false`. When you set the value to `false`, use the return `url` property to render a deep link. |
+| `includeReceipt` | Boolean | Determines whether a receipt should be included in the response of this request. Possible values are `true` or `false` (default). The receipt contains the original payload sent from the authenticator to the Verifiable Credentials service. The receipt is useful for troubleshooting or if you have the need to ge the full details of the payload. There's otherwise no need be set this value to `true `by default. In the `OpenId Connect SIOP` request, the receipt contains the ID token from the original request. |
| `authority` | string| Your decentralized identifier (DID) of your verifier Azure AD tenant. For more information, see [Gather tenant details to set up your sample application](verifiable-credentials-configure-verifier.md#gather-tenant-details-to-set-up-your-sample-application).| | `registration` | [RequestRegistration](#requestregistration-type)| Provides information about the verifier. |
-| `presentation` | [RequestPresentation](#requestpresentation-type)| Provides information about the verifiable credentials presentation request. |
|`callback`| [Callback](#callback-type)| Mandatory. Allows the developer to update the UI during the verifiable credential presentation process. When the user completes the process, continue the process after the results are returned to the application.|
+| `requestedCredentials` | collection| A collection of [RequestCredential](#requestcredential-type) objects.|
+ ### RequestRegistration type
The following screenshot shows the `clientName` property and the display name of
![Screenshot that shows how to approve the presentation request.](media/presentation-request-api/approve-presentation-request.jpg)
-### RequestPresentation type
+### Callback type
-The `RequestPresentation` type provides information required for verifiable credential presentation. `RequestPresentation` contains the following properties:
+The Request Service REST API generates several events to the callback endpoint. Those events allow you to update the UI and continue the process after the results are returned to the application. The `Callback` type contains the following properties:
|Property |Type |Description | ||||
-| `includeReceipt` | Boolean | Determines whether a receipt should be included in the response of this request. Possible values are `true` or `false` (default). The receipt contains the original payload sent from the authenticator to the Verifiable Credentials service. The receipt is useful for troubleshooting, and shouldn't be set by default. In the `OpenId Connect SIOP` request, the receipt contains the ID token from the original request. |
-| `requestedCredentials` | collection| A collection of [RequestCredential](#requestcredential-type) objects.|
+| `url` | string| URI to the callback endpoint of your application. The URI must point to a reachable endpoint on the internet otherwise the service will throw a callback URL unreadable error. Accepted inputs IPv4, IPv6 or DNS resolvable hostname. |
+| `state` | string| Correlates the callback event with the state passed in the original payload. |
+| `headers` | string| Optional. You can include a collection of HTTP headers required by the receiving end of the POST message. The current supported header values are the `api-key` or the `Authorization` headers. Any other header will throw an invalid callback header error.|
### RequestCredential type
The `RequestCredential` provides information about the requested credentials the
| `type`| string| The verifiable credential type. The `type` must match the type as defined in the `issuer` verifiable credential manifest (for example, `VerifiedCredentialExpert`). To get the issuer manifest, see [Gather credentials and environment details to set up your sample application](verifiable-credentials-configure-issuer.md). Copy the **Issue credential URL**, open it in a web browser, and check the **id** property. | | `purpose`| string | Provide information about the purpose of requesting this verifiable credential. | | `acceptedIssuers`| string collection | A collection of issuers' DIDs that could issue the type of verifiable credential that subjects can present. To get your issuer DID, see [Gather credentials and environment details to set up your sample application](verifiable-credentials-configure-issuer.md), and copy the value of the **Decentralized identifier (DID)**. |
+| `configuration.validation` | [Configuration.Validation](#configurationvalidation-type) | Optional settings for presentation validation.|
-### Callback type
+### Configuration.Validation type
-The Request Service REST API generates several events to the callback endpoint. Those events allow you to update the UI and continue the process after the results are returned to the application. The `Callback` type contains the following properties:
+The `Configuration.Validation` provides information about the presented credentials should be validated. It contains the following properties:
|Property |Type |Description | ||||
-| `url` | string| URI to the callback endpoint of your application. The URI must point to a reachable endpoint on the internet otherwise the service will throw a callback URL unreadable error. Accepted inputs IPv4, IPv6 or DNS resolvable hostname. |
-| `state` | string| Associates with the state passed in the original payload. |
-| `headers` | string| Optional. You can include a collection of HTTP headers required by the receiving end of the POST message. The current supported header values are the `api-key` or the `Authorization` headers. Any other header will throw an invalid callback header error.|
+| `allowRevoked` | Boolean | Determines if a revoked credential should be accepted. Default is `false` (it shouldn't be accepted). |
+| `validateLinkedDomain` | Boolean | Determines if the linked domain should be validated. Default is `true` (it should be validated). Setting this flag to `false` means you'll accept credentials from unverified linked domain. Setting this flag to `true` means the linked domain will be validated and only verified domains will be accepted. |
## Successful response
If successful, this method returns a response code (*HTTP 201 Created*), and a c
```json { "requestId": "e4ef27ca-eb8c-4b63-823b-3b95140eac11",
- "url": "openid://vc/?request_uri=https://beta.did.msidentity.com/v1.0/87654321-0000-0000-0000-000000000000/verifiablecredentials/request/e4ef27ca-eb8c-4b63-823b-3b95140eac11",
+ "url": "openid://vc/?request_uri=https://verifiedid.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredentials/request/e4ef27ca-eb8c-4b63-823b-3b95140eac11",
"expiry": 1633017751, "qrCode":ΓÇ»"data:image/png;base64,iVBORw0KGgoA<SNIP>" }
The response contains the following properties:
|Property |Type |Description | ||||
-| `requestId`| string | An autogenerated correlation ID. The [callback](#callback-events) uses the same request, allowing you to keep track of the presentation request and its callbacks. |
+| `requestId`| string | An autogenerated request ID. The [callback](#callback-events) uses the same request, allowing you to keep track of the presentation request and its callbacks. |
| `url`| string| A URL that launches the authenticator app and starts the presentation process. You can present this URL to the user if they can't scan the QR code. | | `expiry`| integer| Indicates when the response will expire. | | `qrCode`| string | A QR code that the user can scan to start the presentation flow. |
When your app receives the response, the app needs to present the QR code to the
## Error response
-Error responses also can be returned so that the app can handle them appropriately. The following JSON shows an unauthorized error message:
--
-```json
-{
- "requestId": "fb888ac646c96083de83b099b2678de0",
- "date": "Wed, 29 Sep 2021 21:49:00 GMT",
- "error": {
- "code": "unauthorized",
- "message": "Failed to authenticate the request."
- }
-}
-```
-
-The response contains the following properties:
-
-|Property |Type |Description |
-||||
-| `requestId`| string | An autogenerated request ID.|
-| `date`| date | The time of the error. |
-| `error.code` | string | The return error code. |
-| `error.message`| string | The error message. |
+If there's an error with the request, an [error responses](error-codes.md) is returned, and should be handled appropriately by the app.
## Callback events
The callback endpoint is called when a user scans the QR code, uses the deep lin
| `state` |string| Returns the state value that you passed in the original payload. | | `subject`|string | The verifiable credential user DID.| | `issuers`| array |Returns an array of verifiable credentials requested. For each verifiable credential, it provides: </li><li>The verifiable credential type(s).</li><li>The issuer's DID</li><li>The claims retrieved.</li><li>The verifiable credential issuer's domain. </li><li>The verifiable credential issuer's domain validation status. </li></ul> |
-| `receipt`| string | Optional. The receipt contains the original payload sent from the wallet to the Verifiable Credentials service. The receipt should be used for troubleshooting/debugging only. The format in the receipt is not fix and can change based on the wallet and version used.|
+| `receipt`| string | Optional. The receipt contains the original payload sent from the wallet to the Verifiable Credentials service. The receipt should be used for troubleshooting/debugging only. The format in the receipt isn't fix and can change based on the wallet and version used.|
The following example demonstrates a callback payload when the authenticator app starts the presentation request: ```json {
-    "requestId":"aef2133ba45886ce2c38974339ba1057",
+    "requestId": "e4ef27ca-eb8c-4b63-823b-3b95140eac11",
    "code":"request_retrieved",
-    "state":"Wy0ThUz1gSasAjS1"
+    "state": "92d076dd-450a-4247-aa5b-d2e75a1a5d58"
} ```
The following example demonstrates a callback payload after the verifiable crede
```json {
- "requestId": "87e1cb24-9096-409f-81cb-9e645f23a4ba",
+ "requestId": "e4ef27ca-eb8c-4b63-823b-3b95140eac11",
"code": "presentation_verified",
- "state": "f3d94e35-ca5f-4b1b-a7d7-a88caa05e322",
+ "state": "92d076dd-450a-4247-aa5b-d2e75a1a5d58",
"subject": "did:ion:EiAlrenrtD3Lsw0GlbzS1O2YFdy3Xtu8yo35W<SNIP>…", "issuers": [ {
The following example demonstrates a callback payload after the verifiable crede
"VerifiedCredentialExpert" ], "claims": {
- "firstName": "John",
- "lastName": "Doe"
+ "firstName": "Megan",
+ "lastName": "Bowen"
}, "domain": "https://contoso.com/", "verified": "DNS",
- "issuer": "did:ion:….."
+ "authority": "did:ion:….."
} ], "receipt": {
active-directory Vc Network Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/vc-network-api.md
+
+ Title: Entra Verified ID Network API
+
+description: Learn how to use the Entra Verified ID Network API
+documentationCenter: ''
+++++ Last updated : 07/29/2022++
+#Customer intent: As a verifiable credentials developer, I want to configure verifying credentials from another party
++
+# Entra Verified ID network API
++
+The Microsoft Entra Verified ID Network API enables you to search for published credentials in the [Entra Verified ID Network](how-use-vcnetwork.md).
+
+>[!NOTE]
+>The API is intended for developers comfortable with RESTful APIs.
+
+## Base URL
+
+The Entra Verified Network API is served over HTTPS. All URLs referenced in the documentation have the following base: `https://verifiedid.did.msidentity.com`.
+
+## Authentication
+
+The API is protected through Azure Active Directory and uses OAuth2 bearer tokens. The app registration needs to have the API Permission for `Verifiable Credentials Service Admin` and then when acquiring the access token the app should use scope `6a8b4b39-c021-437c-b060-5a14a3fd65f3/full_access`.
+
+## Searching for issuers
+
+This API is used to search for issuers available in the Entra Verified ID Network. You can search for issuers by their **linked domain** name. The value supplied for the `filter` parameter will be used to find issuers that have onboarded to Entra Verified ID and have a verified linked domain. Currently you can only filter by `linkeddomainurls` and with operator `like`. There will be a maximum of 15 issuers in the response.
+
+#### HTTP request
+
+`GET /v1.0/verifiableCredentialsNetwork/authorities?filter=linkeddomainurls%20like%20Woodgrove`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request parameters
+
+| Parameter | value |
+| -- | -- |
+| filter | linkeddomainurls like Woodgrove |
++
+#### Return message
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+[
+ {
+ "id": "0459a193-1111-2222-3333-444455556666",
+ "tenantId": "55eafede-1111-2222-3333-444455556666",
+ "did": "did:web:bank.woodgrove.com...<SNIP>...",
+ "name": "WoodgroveBank",
+ "linkedDomainUrls": [
+ "https://bank.woodgrove.com/"
+ ]
+ },
+ {
+ "id": "6e0e41cb-1111-2222-3333-444455556666",
+ "tenantId": "7f448f57-1111-2222-3333-444455556666",
+ "did": "did:web:woodgrove.com...<SNIP>...",
+ "name": "Woodgrove",
+ "linkedDomainUrls": [
+ "https://woodgrove.com/"
+ ]
+ }
+]
+```
+
+## Searching for published credential types by an issuer
+
+This API is used search for published credential types for a specific issuer. You need to know the issuers `tenantId` and `issuerId`. The return message is a collection of published credential types and their respective claims. There will be a maximum of 100 credential types in the response.
+
+#### HTTP request
+
+`GET /v1.0/tenants/:tenantId/verifiableCredentialsNetwork/authorities/:issuerId/contracts/`
+
+#### Request headers
+
+| Header | Value |
+| -- | -- |
+| Authorization | Bearer (token). Required |
+| Content-Type | application/json |
+
+#### Request parameters
+
+| Parameter | value |
+| -- | -- |
+| tenantId | TenantId obtained from the search by linked domain name |
+| issuerId | IssuerId obtained from the search by linked domain name |
++
+#### Return message
+
+```
+HTTP/1.1 200 OK
+Content-type: application/json
+
+[
+ {
+ "name": "Verified employee 1",
+ "types": [
+ "VerifiedEmployee"
+ ],
+ "claims": [
+ "displayName",
+ "givenName",
+ "jobTitle",
+ "preferredLanguage",
+ "surname",
+ "mail",
+ "revocationId",
+ "photo"
+ ]
+ }
+]
+```
+
+## Next steps
+
+Learn more about [Entra Verified ID Network](how-use-vcnetwork.md).
active-directory Verifiable Credentials Configure Issuer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-issuer.md
Title: Tutorial - Issue Azure AD Verifiable Credentials from an application (preview)
+ Title: Tutorial - Issue Microsoft Entra Verified ID credentials from an application (preview)
description: In this tutorial, you learn how to issue verifiable credentials by using a sample app.
Last updated 06/16/2022
-# Issue Azure AD Verifiable Credentials from an application (preview)
+# Issue Microsoft Entra Verified ID credentials from an application (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
In this article, you learn how to:
> - Run the sample application and issue your first verified credential expert card. > - Verify your verified credential expert card.
-The following diagram illustrates the Azure AD Verifiable Credentials architecture and the component you configure.
+The following diagram illustrates the Microsoft Entra Verified ID architecture and the component you configure.
![Diagram that illustrates the Azure A D Verifiable Credentials architecture.](media/verifiable-credentials-configure-issuer/verifiable-credentials-architecture.png) ## Prerequisites -- [Set up a tenant for Azure AD Verifiable Credentials](./verifiable-credentials-configure-tenant.md).
+- [Set up a tenant for Microsoft Entra Verified ID](./verifiable-credentials-configure-tenant.md).
- To clone the repository that hosts the sample app, install [GIT](https://git-scm.com/downloads). - [Visual Studio Code](https://code.visualstudio.com/Download), or similar code editor. - [.NET 5.0](https://dotnet.microsoft.com/download/dotnet/5.0).
The following diagram illustrates the Azure AD Verifiable Credentials architectu
## Create the verified credential expert card in Azure
-In this step, you create the verified credential expert card by using Azure AD Verifiable Credentials. After you create the credential, your Azure AD tenant can issue it to users who initiate the process.
+In this step, you create the verified credential expert card by using Microsoft Entra Verified ID. After you create the credential, your Azure AD tenant can issue it to users who initiate the process.
1. Using the [Azure portal](https://portal.azure.com/), search for *verifiable credentials*. Then select **Verifiable Credentials (Preview)**. 1. After you [set up your tenant](verifiable-credentials-configure-tenant.md), the **Create credential** should appear. Alternatively, you can select **Credentials** in the left hand menu and select **+ Add a credential**.
In this step, you create the verified credential expert card by using Azure AD V
], "required": false }
- ]
- },
- "validityInterval": 2592000,
- "vc": {
- "type": [
- "VerifiedCredentialExpert"
- ]
+ ],
+ "validityInterval": 2592000,
+ "vc": {
+ "type": [
+ "VerifiedCredentialExpert"
+ ]
+ }
} } ```
Now you'll make modifications to the sample app's issuer code to update it with
1. Under the *active-directory-verifiable-credentials-dotnet-main* folder, open Visual Studio Code, and select the project inside the *1-asp-net-core-api-idtokenhint* folder.
-1. Under the project root folder, open the *appsettings.json* file. This file contains information about your Azure AD Verifiable Credentials. Update the following properties with the information that you recorded in earlier steps:
+1. Under the project root folder, open the *appsettings.json* file. This file contains information about your Microsoft Entra Verified ID environment. Update the following properties with the information that you recorded in earlier steps:
1. **Tenant ID:** your tenant ID 1. **Client ID:** your client ID
The following JSON demonstrates a complete *appsettings.json* file:
```json { "AppSettings": {
- "Endpoint": "https://beta.did.msidentity.com/v1.0/{0}/verifiablecredentials/request",
+ "Endpoint": "https://verifiedid.did.msidentity.com/v1.0",
"VCServiceScope": "3db474b9-6a0c-4840-96ac-1fceb342124f/.default", "Instance": "https://login.microsoftonline.com/{0}", "TenantId": "12345678-0000-0000-0000-000000000000",
The following JSON demonstrates a complete *appsettings.json* file:
"CertificateName": "[Or instead of client secret: Enter here the name of a certificate (from the user cert store) as registered with your application]", "IssuerAuthority": "did:web:example.com...", "VerifierAuthority": "did:web:example.com...",
- "CredentialManifest": "https://beta.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert"
+ "CredentialManifest": "https://verifiedid.did.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert"
} } ```
Now you're ready to issue your first verified credential expert card by running
1. From Visual Studio Code, run the *Verifiable_credentials_DotNet* project. Or, from your operating system's command line, run: ```
- cd active-directory-verifiable-credentials-dotnet/1-asp-net-core-api-idtokenhint dotnet build "AspNetCoreVerifiableCredentials.csproj" -c Debug -o .\\bin\\Debug\\netcoreapp3. dotnet run
+ cd active-directory-verifiable-credentials-dotnet/1-asp-net-core-api-idtokenhint
+ dotnet build "AspNetCoreVerifiableCredentials.csproj" -c Debug -o .\\bin\\Debug\\netcoreapp3.
+ dotnet run
``` 1. In another command prompt window, run the following command. This command runs [ngrok](https://ngrok.com/) to set up a URL on 5000, and make it publicly available on the internet.
public async Task<ActionResult> issuanceRequest()
## Next steps In the [next step](verifiable-credentials-configure-verifier.md), learn how a third-party application, also known as a relying party application, can verify your credentials with its own Azure AD tenant verifiable credentials API service.-
active-directory Verifiable Credentials Configure Tenant https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-tenant.md
Title: Tutorial - Configure your tenant for Azure AD Verifiable Credentials (preview)
+ Title: Tutorial - Configure your tenant for Microsoft Entra Verified ID (preview)
description: In this tutorial, you learn how to configure your tenant to support the Verifiable Credentials service.
Last updated 06/27/2022
-# Configure your tenant for Azure AD Verifiable Credentials (preview)
+# Configure your tenant for Microsoft Entra Verified ID (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-Azure Active Directory (Azure AD) Verifiable Credentials safeguards your organization with an identity solution that's seamless and decentralized. The service allows you to issue and verify credentials. For issuers, Azure AD provides a service that they can customize and use to issue their own verifiable credentials. For verifiers, the service provides a free REST API that makes it easy to request and accept verifiable credentials in your apps and services.
+Microsoft Entra Verified ID safeguards your organization with an identity solution that's seamless and decentralized. The service allows you to issue and verify credentials. For issuers, Azure AD provides a service that they can customize and use to issue their own verifiable credentials. For verifiers, the service provides a free REST API that makes it easy to request and accept verifiable credentials in your apps and services.
In this tutorial, you learn how to configure your Azure AD tenant so it can use the verifiable credentials service.
Specifically, you learn how to:
> - Set up the Verifiable Credentials service. > - Register an application in Azure AD.
-The following diagram illustrates the Azure AD Verifiable Credentials architecture and the component you configure.
+The following diagram illustrates the Microsoft Entra Verified ID architecture and the component you configure.
-![Diagram that illustrates the Azure AD Verifiable Credentials architecture.](media/verifiable-credentials-configure-tenant/verifiable-credentials-architecture.png)
+![Diagram that illustrates the Microsoft Entra Verified ID architecture.](media/verifiable-credentials-configure-tenant/verifiable-credentials-architecture.png)
## Prerequisites
The following diagram illustrates the Azure AD Verifiable Credentials architectu
[Azure Key Vault](../../key-vault/general/basic-concepts.md) is a cloud service that enables the secure storage and access of secrets and keys. The Verifiable Credentials service stores public and private keys in Azure Key Vault. These keys are used to sign and verify credentials.
-If you don't have an Azure Key Vault instance available, follow [these steps](../../key-vault/general/quick-create-portal.md) to create a key vault using the Azure portal.
+If you don't have an Azure Key Vault instance available, follow [these steps](/azure/key-vault/general/quick-create-portal) to create a key vault using the Azure portal.
>[!NOTE] >By default, the account that creates a vault is the only one with access. The Verifiable Credentials service needs access to the key vault. You must configure the key vault with an access policy that allows the account used during configuration to create and delete keys. The account used during configuration also requires permission to sign to create the domain binding for Verifiable Credentials. If you use the same account while testing, modify the default policy to grant the account sign permission, in addition to the default permissions granted to vault creators. ### Set access policies for the key vault
-A Key Vault [access policy](../../key-vault/general/assign-access-policy.md) defines whether a specified security principal can perform operations on Key Vault secrets and keys. Set access policies in your key vault for both the Azure AD Verifiable Credentials service administrator account, and for the Request Service API principal that you created.
+A Key Vault [access policy](../../key-vault/general/assign-access-policy.md) defines whether a specified security principal can perform operations on Key Vault secrets and keys. Set access policies in your key vault for both the Microsoft Entra Verified ID service administrator account, and for the Request Service API principal that you created.
After you create your key vault, Verifiable Credentials generates a set of keys used to provide message security. These keys are stored in Key Vault. You use a key set for signing, updating, and recovering verifiable credentials. ### Set access policies for the Verifiable Credentials Admin user
The Verifiable Credentials Service Request is the Request Service API, and it ne
## Set up Verifiable Credentials
-To set up Azure AD Verifiable Credentials, follow these steps:
+To set up Microsoft Entra Verified ID, follow these steps:
1. In the [Azure portal](https://portal.azure.com/), search for *verifiable credentials*. Then, select **Verifiable Credentials (Preview)**.
To set up Azure AD Verifiable Credentials, follow these steps:
## Register an application in Azure AD
-Azure AD Verifiable Credentials Service Request needs to get access tokens to issue and verify. To get access tokens, register a web application and grant API permission for the API Verifiable Credential Request Service that you set up in the previous step.
+Microsoft Entra Verified ID needs to get access tokens to issue and verify. To get access tokens, register a web application and grant API permission for the API Verifiable Credential Request Service that you set up in the previous step.
1. Sign in to the [Azure portal](https://portal.azure.com/) with your administrative account.
Azure AD Verifiable Credentials Service Request needs to get access tokens to is
### Grant permissions to get access tokens
-In this step, you grant permissions to the Verifiable Credentials Service Request Service principal.
+In this step, you grant permissions to the **Verifiable Credentials Service Request** Service principal.
To add the required permissions, follow these steps:
Once that you have successfully completed the verification steps, you are ready
## Next steps -- [Learn how to issue Azure AD Verifiable Credentials from a web application](verifiable-credentials-configure-issuer.md).-- [Learn how to verify Azure AD Verifiable Credentials](verifiable-credentials-configure-verifier.md).
+- [Learn how to issue Microsoft Entra Verified ID credentials from a web application](verifiable-credentials-configure-issuer.md).
+- [Learn how to verify Microsoft Entra Verified ID credentials](verifiable-credentials-configure-verifier.md).
active-directory Verifiable Credentials Configure Verifier https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/verifiable-credentials-configure-verifier.md
Title: Tutorial - Configure Azure AD Verifiable Credentials verifier (preview)
+ Title: Tutorial - Configure Microsoft Entra Verified ID verifier (preview)
description: In this tutorial, you learn how to configure your tenant to verify credentials.
Last updated 06/16/2022
-# Configure Azure AD Verifiable Credentials verifier (preview)
+# Configure Microsoft Entra Verified ID verifier (preview)
[!INCLUDE [Verifiable Credentials announcement](../../../includes/verifiable-credentials-brand.md)]
-In [Issue Azure AD Verifiable Credentials from an application (preview)](verifiable-credentials-configure-issuer.md), you learn how to issue and verify credentials by using the same Azure Active Directory (Azure AD) tenant. In this tutorial, you go over the steps needed to present and verify your first verifiable credential: a verified credential expert card.
+In [Issue Microsoft Entra Verified ID credentials from an application (preview)](verifiable-credentials-configure-issuer.md), you learn how to issue and verify credentials by using the same Azure Active Directory (Azure AD) tenant. In this tutorial, you go over the steps needed to present and verify your first verifiable credential: a verified credential expert card.
As a verifier, you unlock privileges to subjects that possess verified credential expert cards. In this tutorial, you run a sample application from your local computer that asks you to present a verified credential expert card, and then verifies it.
In this article, you learn how to:
> [!div class="checklist"] > > - Download the sample application code to your local computer
-> - Set up Azure AD Verifiable Credentials on your Azure AD tenant
+> - Set up Microsoft Entra Verified ID on your Azure AD tenant
> - Gather credentials and environment details to set up your sample application, and update the sample application with your verified credential expert card details > - Run the sample application and initiate a verifiable credential issuance process ## Prerequisites -- [Set up a tenant for Azure AD Verifiable Credentials](verifiable-credentials-configure-tenant.md).
+- [Set up a tenant for Microsoft Entra Verified ID](verifiable-credentials-configure-tenant.md).
- If you want to clone the repository that hosts the sample app, install [Git](https://git-scm.com/downloads). - [Visual Studio Code](https://code.visualstudio.com/Download) or similar code editor. - [.NET 5.0](https://dotnet.microsoft.com/download/dotnet/5.0).
In this article, you learn how to:
## Gather tenant details to set up your sample application
-Now that you've set up your Azure AD Verifiable Credentials service, you're going to gather some information about your environment and the verifiable credentials you set. You use these pieces of information when you set up your sample application.
+Now that you've set up your Microsoft Entra Verified ID service, you're going to gather some information about your environment and the verifiable credentials you set. You use these pieces of information when you set up your sample application.
1. From **Verifiable credentials (Preview)**, select **Organization settings**. 1. Copy the **Tenant identifier** value, and record it for later.
Now that you've set up your Azure AD Verifiable Credentials service, you're goin
The following screenshot demonstrates how to copy the required values:
-![Screenshot that demonstrates how to copy the required values from Azure AD Verifiable Credentials.](media/verifiable-credentials-configure-verifier/tenant-settings.png)
+![Screenshot that demonstrates how to copy the required values from Microsoft Entra Verified ID.](media/verifiable-credentials-configure-verifier/tenant-settings.png)
## Download the sample code
Now make modifications to the sample app's issuer code to update it with your ve
1. In the *active-directory-verifiable-credentials-dotnet-main* directory, open **Visual Studio Code**. Select the project inside the *1. asp-net-core-api-idtokenhint* directory.
-1. Under the project root folder, open the *appsettings.json* file. This file contains information about your credentials in Azure AD Verifiable Credentials. Update the following properties with the information that you collected during earlier steps.
+1. Under the project root folder, open the *appsettings.json* file. This file contains information about your credentials in Microsoft Entra Verified ID environment. Update the following properties with the information that you collected during earlier steps.
1. **Tenant ID**: Your tenant ID 1. **Client ID**: Your client ID
The following JSON demonstrates a complete *appsettings.json* file:
{ "AppSettings": {
- "Endpoint": "https://beta.did.msidentity.com/v1.0/{0}/verifiablecredentials/request",
- "VCServiceScope": "bbb94529-53a3-4be5-a069-7eaf2712b826/.default",
+ "Endpoint": "https://verifiedid.did.msidentity.com/v1.0",
+ "VCServiceScope": "3db474b9-6a0c-4840-96ac-1fceb342124f/.default",
"Instance": "https://login.microsoftonline.com/{0}", "TenantId": "987654321-0000-0000-0000-000000000000", "ClientId": "555555555-0000-0000-0000-000000000000", "ClientSecret": "123456789012345678901234567890", "VerifierAuthority": "did:ion:EiDJzvzaBMb_EWTWUFEasKzL2nL-BJPhQTzYWjA_rRz3hQ:eyJkZWx0YSI6eyJwYXRjaGVzIjpbeyJhY3Rpb24iOiJyZXBsYWNlIiwiZG9jdW1lbnQiOnsicHVibGljS2V5cyI6W3siaWQiOiJzaWdfMmNhMzY2YmUiLCJwdWJsaWNLZXlKd2siOnsiY3J2Ijoic2VjcDI1NmsxIiwia3R5IjoiRUMiLCJ4IjoiZDhqYmduRkRGRElzR1ZBTWx5aDR1b2RwOGV4Q2dpV3dWUGhqM0N...",
- "CredentialManifest": " https://beta.did.msidentity.com/v1.0/987654321-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert"
+ "CredentialManifest": " https://verifiedid.did.msidentity.com/v1.0/987654321-0000-0000-0000-000000000000/verifiableCredential/contracts/VerifiedCredentialExpert"
} } ```
Now you are ready to present and verify your first verified credential expert ca
1. From Visual Studio Code, run the *Verifiable_credentials_DotNet* project. Or from the command shell, run the following commands: ```bash
- cd active-directory-verifiable-credentials-dotnet/1. asp-net-core-api-idtokenhint dotnet build "asp-net-core-api-idtokenhint.csproj" -c Debug -o .\bin\Debug\netcoreapp3.1
+ cd active-directory-verifiable-credentials-dotnet/1. asp-net-core-api-idtokenhint
+ dotnet build "asp-net-core-api-idtokenhint.csproj" -c Debug -o .\bin\Debug\netcoreapp3.1
dotnet run ```
-1. In another terminal, run the following command. This command runs the [ngrok](https://ngrok.com/) to set up a URL on 3000 and make it publicly available on the internet.
+1. In another terminal, run the following command. This command runs the [ngrok](https://ngrok.com/) to set up a URL on 5000 and make it publicly available on the internet.
```bash
- ngrok http 3000
+ ngrok http 5000
``` >[!NOTE]
Now you are ready to present and verify your first verified credential expert ca
## Next steps
-Learn [how to customize your verifiable credentials](credential-design.md).
+Learn [how to customize your verifiable credentials](credential-design.md).
active-directory Verifiable Credentials Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/verifiable-credentials-faq.md
Resetting requires that you opt out and opt back into the Azure Active Directory
1. In the [Azure portal](https://portal.azure.com), go to Azure Active Directory for the subscription you use for your Azure Active Directory Verifiable credentials deployment. 1. Under Manage, select Properties :::image type="content" source="media/verifiable-credentials-faq/region.png" alt-text="settings delete and opt out":::
-1. See the value for Country or Region. If the value is a country or a region in Europe, your Azure AD Verifiable Credentials service will be set up in Europe.
+1. See the value for Country or Region. If the value is a country or a region in Europe, your Microsoft Entra Verified ID service will be set up in Europe.
### How can I check if my tenant has the new Hub endpoint?
Resetting requires that you opt out and opt back into the Azure Active Directory
"type": "IdentityHub", "serviceEndpoint": { "instances": [
- "https://beta.hub.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000"
+ "https://verifiedid.hub.msidentity.com/v1.0/12345678-0000-0000-0000-000000000000"
], "origins": [] }
No, at this point it isn't possible to keep your tenant's DID after you have opt
## Next steps -- [How to customize your Azure Active Directory Verifiable Credentials](credential-design.md)
+- [How to customize your Azure Active Directory Verifiable Credentials](credential-design.md)
active-directory Verifiable Credentials Standards https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/verifiable-credentials-standards.md
Today, we have a working JWT verifiable credentials presentation profile that su
## Next steps -- [Get started with verifiable credentials](verifiable-credentials-configure-tenant.md)
+- [Get started with verifiable credentials](verifiable-credentials-configure-tenant.md)
active-directory Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/active-directory/verifiable-credentials/whats-new.md
Previously updated : 06/27/2022 Last updated : 07/28/2022
This article lists the latest features, improvements, and changes in the Microsoft Entra Verified ID service.
+## July 2022
+
+- The Request Service APIs have a **new hostname** `verifiedid.did.msidentity.com`. The `beta.did.msidentity` and the `beta.eu.did.msidentity` will continue to work, but you should change your application and configuration. Also, you no longer need to specify `.eu.` for an EU tenant.
+- Request Service API have **new endpoints** and **updated JSON payloads**. For issuance, see [Issuance API specification](issuance-request-api.md#issuance-request-payload) and for presentation, see [Presentation API specification](presentation-request-api.md#presentation-request-payload). The old endpoints and JSON payloads will continue to work, but you should change your applications to use the new endpoints and payloads.
+- Request Service API **[Error codes](error-codes.md)** have been **updated**
+- The **[Admin API](admin-api.md)** is made **public** and is documented. The Azure portal is using the Admin API and with this REST API you can automate the onboarding or your tenant and creation of credential contracts.
+- Find issuers and credentials to verify via the [The Microsoft Entra Verified ID Network](how-use-vcnetwork.md).
+- For migrating your Azure Storage based credentials to become Managed Credentials there is a PowerShell script in the [github samples repo](https://github.com/Azure-Samples/active-directory-verifiable-credentials/tree/contractmigration/scripts/contractmigration) for the task.
+
+- We also made the following updates to our Plan and design docs:
+ - (updated) [architecture planning overview](introduction-to-verifiable-credentials-architecture.md).
+ - (updated) [Plan your issuance solution](plan-issuance-solution.md).
+ - (updated) [Plan your verification solution](plan-verification-solution.md).
+ ## June 2022 - We are adding support for the [did:web](https://w3c-ccg.github.io/did-method-web/) method. Any new tenant that starts using the Verifiable Credentials Service after June 14, 2022 will have Web as a new, default, trust system when [onboarding](verifiable-credentials-configure-tenant.md#set-up-verifiable-credentials). VC Administrators can still choose to use ION when setting a tenant. If you want to use did:web instead of ION or viceversa, you will need to [reconfigure your tenant](verifiable-credentials-faq.md?#how-do-i-reset-the-azure-ad-verifiable-credentials-service).
This article lists the latest features, improvements, and changes in the Microso
> You need to migrate your Azure Storage based credentials to become Managed Credentials. We'll soon provide migration instructions. - We made the following updates to our docs:
- - (new) [Current supported open standards for Microsoft Entra Verified ID](verifiable-credentials-standards.md).
- - (new) [How to create verifiable credentials for ID token hint](how-to-use-quickstart.md).
- - (new) [How to create verifiable credentials for ID token](how-to-use-quickstart-idtoken.md).
- - (new) [How to create verifiable credentials for self-asserted claims](how-to-use-quickstart-selfissued.md).
- - (new) [Rules and Display definition model specification](rules-and-display-definitions-model.md).
- - (new) [Creating an Azure AD tenant for development](how-to-create-a-free-developer-account.md).
+ - (new) [Current supported open standards for Microsoft Entra Verified ID](verifiable-credentials-standards.md).
+ - (new) [How to create verifiable credentials for ID token hint](how-to-use-quickstart.md).
+ - (new) [How to create verifiable credentials for ID token](how-to-use-quickstart-idtoken.md).
+ - (new) [How to create verifiable credentials for self-asserted claims](how-to-use-quickstart-selfissued.md).
+ - (new) [Rules and Display definition model specification](rules-and-display-definitions-model.md).
+ - (new) [Creating an Azure AD tenant for development](how-to-create-a-free-developer-account.md).
## May 2022
It's a good idea to start using the API soon, because the NodeJS SDK will be dep
## April 2021
-You can now issue [verifiable credentials](decentralized-identifier-overview.md) in Azure AD. This service is useful when you need to present proof of employment, education, or any other claim. The holder of such a credential can decide when, and with whom, to share their credentials. Each credential is signed by using cryptographic keys associated with the decentralized identity that the user owns and controls.
+You can now issue [verifiable credentials](decentralized-identifier-overview.md) in Azure AD. This service is useful when you need to present proof of employment, education, or any other claim. The holder of such a credential can decide when, and with whom, to share their credentials. Each credential is signed by using cryptographic keys associated with the decentralized identity that the user owns and controls.
advisor Advisor Cost Recommendations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/advisor/advisor-cost-recommendations.md
Advisor uses machine-learning algorithms to identify low utilization and to iden
Advisor identifies resources that have not been used at all over the last 7 days and makes a recommendation to shut them down. -- Metrics considered are CPU and Outbound Network utilization (memory is not considered for shutdown recommendations since weΓÇÖve found that relying on CPU and Network provide enough signals for this recommendation)-- The last 7 days of utilization data are considered-- Metrics are sampled every 30 seconds, aggregated to 1 min and then further aggregated to 30 mins (we take the average of max values while aggregating to 30 mins)
+- Recommendation criteria include **CPU** and **Outbound Network utilization** metrics. **Memory** is not considered since weΓÇÖve found that **CPU** and **Outbound Network utilization** are sufficient.
+- The last 7 days of utilization data are analyzed
+- Metrics are sampled every 30 seconds, aggregated to 1 min and then further aggregated to 30 mins (we take the max of average values while aggregating to 30 mins)
- A shutdown recommendation is created if: - P95th of the maximum value of CPU utilization summed across all cores is less than 3%. - P100 of average CPU in last 3 days (sum over all cores) <= 2%
Advisor identifies resources that have not been used at all over the last 7 days
### Resize SKU recommendations
-Advisor considers resizing virtual machines when it's possible to fit the current load on a more appropriate SKU, which costs less than the current one (we currently consider retail rates only during recommendation generation).
+Advisor recommends resizing virtual machines when it's possible to fit the current load on a more appropriate SKU, which is less expensive (based on retail rates).
-- Metrics considered are CPU, Memory and Outbound Network utilization -- The last 7 days of utilization data are considered-- Metrics are sampled every 30 seconds, aggregated to 1 min and then further aggregated to 30 mins (we take the average of max values while aggregating to 30 mins)
+- Recommendation criteria include **CPU**, **Memory** and **Outbound Network utilization**.
+- The last 7 days of utilization data are analyzed
+- Metrics are sampled every 30 seconds, aggregated to 1 min and then further aggregated to 30 mins (we take the max of average values while aggregating to 30 mins)
- An appropriate SKU is determined based on the following criteria: - Performance of the workloads on the new SKU should not be impacted. - Target for user-facing workloads:
Advisor considers resizing virtual machines when it's possible to fit the curren
- The new SKU has the same Accelerated Networking and Premium Storage capabilities - The new SKU is supported in the current region of the Virtual Machine with the recommendation - The new SKU is less expensive -- Advisor determines the type of workload (user-facing/non user-facing) by analyzing the CPU utilization characteristics of the workload. This is based on some fascinating findings by Microsoft Research. You can find more details here: [Prediction-Based Power Oversubscription in Cloud Platforms - Microsoft Research](https://www.microsoft.com/research/publication/prediction-based-power-oversubscription-in-cloud-platforms/).-- Advisor recommends not just smaller SKUs in the same family (for example D3v2 to D2v2) but also SKUs in a newer version (for example D3v2 to D2v3) or even a completely different family (for example D3v2 to E3v2) based on the best fit and the cheapest costs with no performance impacts.
+- Advisor determines if a workload is user-facing by analyzing its CPU utilization characteristics. The approach is based on findings by Microsoft Research. You can find more details here: [Prediction-Based Power Oversubscription in Cloud Platforms - Microsoft Research](https://www.microsoft.com/research/publication/prediction-based-power-oversubscription-in-cloud-platforms/).
+- Advisor recommends not just smaller SKUs in the same family (for example D3v2 to D2v2) but also SKUs in a newer version (for example D3v2 to D2v3) or a different family (for example D3v2 to E3v2) based on the best fit and the cheapest costs with no performance impacts.
### Burstable recommendations
-This is a special type of resize recommendation, where Advisor analyzes workloads to determine eligibility to run on specialized SKUs called Burstable SKUs that allow for variable workload performance requirements and are generally cheaper than general purpose SKUs. Learn more about burstable SKUs here: [B-series burstable - Azure Virtual Machines](../virtual-machines/sizes-b-series-burstable.md).
+We evaluate is workloads are eligible to run on specialized SKUs called **Burstable SKUs** that support variable workload performance requirements and are less expensive than general purpose SKUs. Learn more about burstable SKUs here: [B-series burstable - Azure Virtual Machines](../virtual-machines/sizes-b-series-burstable.md).
- A burstable SKU recommendation is made if:-- The average CPU utilization is less than a burstable SKUs' baseline performance
+- The average **CPU utilization** is less than a burstable SKUs' baseline performance
- If the P95 of CPU is less than two times the burstable SKUs' baseline performance - If the current SKU does not have accelerated networking enabled (burstable SKUs donΓÇÖt support accelerated networking yet) - If we determine that the Burstable SKU credits are sufficient to support the average CPU utilization over 7 days
advisor Advisor Reference Operational Excellence Recommendations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/advisor/advisor-reference-operational-excellence-recommendations.md
You can get these recommendations on the **Operational Excellence** tab of the A
## Spring Cloud
-### Update your outdated Azure Spring Cloud SDK to the latest version
+### Update your outdated Azure Spring Apps SDK to the latest version
-We have identified API calls from an outdated Azure Spring Cloud SDK. We recommend upgrading to the latest version for the latest fixes, performance improvements, and new feature capabilities.
+We have identified API calls from an outdated Azure Spring Apps SDK. We recommend upgrading to the latest version for the latest fixes, performance improvements, and new feature capabilities.
-Learn more about [Spring Cloud Service - SpringCloudUpgradeOutdatedSDK (Update your outdated Azure Spring Cloud SDK to the latest version)](../spring-cloud/index.yml).
+Learn more about [Spring Cloud Service - SpringCloudUpgradeOutdatedSDK (Update your outdated Azure Spring Apps SDK to the latest version)](../spring-apps/index.yml).
-### Update Azure Spring Cloud API Version
+### Update Azure Spring Apps API Version
-We have identified API calls from outdated Azure Spring Cloud API for resources under this subscription. We recommend switching to the latest Spring Cloud API version. You need to update your existing code to use the latest API version. Also, you need to upgrade your Azure SDK and Azure CLI to the latest version. This ensures you receive the latest features and performance improvements.
+We have identified API calls from outdated Azure Spring Apps API for resources under this subscription. We recommend switching to the latest Spring Cloud API version. You need to update your existing code to use the latest API version. Also, you need to upgrade your Azure SDK and Azure CLI to the latest version. This ensures you receive the latest features and performance improvements.
-Learn more about [Spring Cloud Service - UpgradeAzureSpringCloudAPI (Update Azure Spring Cloud API Version)](../spring-cloud/index.yml).
+Learn more about [Spring Cloud Service - UpgradeAzureSpringCloudAPI (Update Azure Spring Apps API Version)](../spring-apps/index.yml).
## Automation
advisor Advisor Reference Performance Recommendations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/advisor/advisor-reference-performance-recommendations.md
We have detected that you do not have up-to-date table statistics which may be i
Learn more about [SQL data warehouse - UpdateTableStatisticsSqlDW (Update statistics on table columns)](https://aka.ms/learnmorestatistics).
-### Right-size overutilized SQL Databases
-
-We've analyzed the DTU consumption of your SQL Database over the past 14 days and identified SQL Databases with high usage. You can improve your database performance by right-sizing to the recommended SKU based on the 95th percentile of your everyday workload
-
-Learn more about [SQL database - sqlRightsizePerformance (Right-size overutilized SQL Databases)](https://aka.ms/SQLDBrecommendation).
- ### Scale up to optimize cache utilization with SQL Data Warehouse We have detected that you had high cache used percentage with a low hit percentage. This indicates high cache eviction which can impact the performance of your workload.
aks Kubernetes Service Principal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/kubernetes-service-principal.md
ls -la $HOME/.azure/aksServicePrincipal.json
The default expiration time for the service principal credentials is one year. If your *aksServicePrincipal.json* file is older than one year, delete the file and retry deploying the AKS cluster.
+**General Azure CLI troubleshooting**
++ ### [Azure PowerShell](#tab/azure-powershell) The service principal credentials for an AKS cluster are cached by Azure PowerShell. If these credentials have expired, you encounter errors during deployment of the AKS cluster. The following error message when running [New-AzAksCluster][new-azakscluster] may indicate a problem with the cached service principal credentials:
aks Quick Kubernetes Deploy Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/aks/learn/quick-kubernetes-deploy-cli.md
The following output example resembles successful creation of the resource group
## Create AKS cluster
-Create an AKS cluster using the [az aks create][az-aks-create] command with the *--enable-addons monitoring* parameter to enable [Container insights][azure-monitor-containers]. The following example creates a cluster named *myAKSCluster* with one node and enables a system-assigned managed identity:
+Create an AKS cluster using the [az aks create][az-aks-create] command with the `--enable-addons monitoring` and `--enable-msi-auth-for-monitoring` parameter to enable [Azure Monitor Container insights][azure-monitor-containers] with managed identity authentication (preview). The following example creates a cluster named *myAKSCluster* with one node and enables a system-assigned managed identity:
```azurecli-interactive
-az aks create -g myResourceGroup -n myAKSCluster --enable-managed-identity --node-count 1 --enable-addons monitoring
+az aks create -g myResourceGroup -n myAKSCluster --enable-managed-identity --node-count 1 --enable-addons monitoring --enable-msi-auth-for-monitoring --generate-ssh-keys
``` After a few minutes, the command completes and returns JSON-formatted information about the cluster.
app-service Deploy Ftp https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/deploy-ftp.md
In the same management page for your app where you copied the deployment credent
# [Azure CLI](#tab/cli)
-Run the [az webapp deployment list-publishing-profiles](/cli/azure/webapp/deployment#az-webapp-deployment-list-publishing-profiles) command. The following example uses a [JMES path](https://jmespath.org/) to extract the FTP/S endpoints from the output.
+Run the [az webapp deployment list-publishing-profiles](/cli/azure/webapp/deployment#az-webapp-deployment-list-publishing-profiles) command. The following example uses a [JMESPath query](/cli/azure/query-azure-cli) to extract the FTP/S endpoints from the output.
```azurecli-interactive az webapp deployment list-publishing-profiles --name <app-name> --resource-group <group-name> --query "[?ends_with(profileName, 'FTP')].{profileName: profileName, publishUrl: publishUrl}"
app-service Networking https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/environment/networking.md
Title: App Service Environment networking
description: App Service Environment networking details Previously updated : 02/17/2022 Last updated : 08/01/2022
You can put your web application firewall devices, such as Azure Application Gat
Your application will use one of the default outbound addresses for egress traffic to public endpoints. If you want to customize the outbound address of your applications on an App Service Environment, you can add a NAT gateway to your subnet.
+> [!NOTE]
+> Outbound SMTP connectivity (port 25) is supported for App Service Environment v3. However, the supportability is determined by the subscription where the virtual network is deployed. For virtual networks created before 1. August 2022, you will have to re-enable outbound SMTP connectivity support on the subscription. For more information on subscription type support and how to request support to re-enable outbound SMTP connectivity, see [Troubleshoot outbound SMTP connectivity problems in Azure](../../virtual-network/troubleshoot-outbound-smtp-connectivity.md).
+ ## Private endpoint In order to enable Private Endpoints for apps hosted in your App Service Environment, you must first enable this feature at the App Service Environment level.
az appservice ase update --name myasename --allow-new-private-endpoint-connectio
For more information about Private Endpoint and Web App, see [Azure Web App Private Endpoint][privateendpoint] - ## DNS The following sections describe the DNS considerations and configuration that apply inbound to and outbound from your App Service Environment.
The apps in your App Service Environment will use the DNS that your virtual netw
## Limitations
-While App Service Environment does deploy into your virtual network, there are a few networking features that aren't available:
-
-* Sending SMTP traffic. Although you can still have email-triggered alerts, your app can't send outbound traffic on port 25.
-* Using Azure Network Watcher or NSG flow to monitor outbound traffic.
+While App Service Environment does deploy into your virtual network, you currently cannot use Azure Network Watcher or NSG flow to monitor outbound traffic.
## More resources
app-service Using An Ase https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/environment/using-an-ase.md
To create an app in an ASE:
Every App Service app runs in an App Service plan. App Service Environments hold App Service plans, and App Service plans hold apps. When you scale an app, you also scale the App Service plan and all the apps in that same plan.
-When you scale an App Service plan, the needed infrastructure is added automatically. There's a time delay to scale operations while the infrastructure is being added. If you do several scale operations in sequence, the first infrastructure scale request is acted on and the others are queued. When the first scale operation finishes, the other infrastructure requests all operate together. And when the infrastructure is added, the App Service plans are assigned as appropriate. Creating a new App Service plan is itself a scale operation because it requests additional hardware.
+When you scale an App Service plan, the needed infrastructure is added automatically. There's a time delay to scale operations while the infrastructure is being added. If you do several scale operations in sequence, the first infrastructure scale request is acted on and the others are queued. When the first scale operation finishes, the other infrastructure requests all operate together. And when the infrastructure is added, the App Service plans are assigned as appropriate. Creating a new App Service plan is itself a scale operation because it requests additional hardware. A scale operation usually takes 30-60 minutes to complete.
In the multitenant App Service, scaling is immediate because a pool of resources is readily available to support it. In an ASE, there's no such buffer, and resources are allocated based on need.
app-service Overview Vnet Integration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/overview-vnet-integration.md
Title: Integrate your app with an Azure virtual network
description: Integrate your app in Azure App Service with Azure virtual networks. Previously updated : 06/30/2022 Last updated : 08/01/2022
Through application routing or configuration routing options, you can configure
Application routing applies to traffic that is sent from your app after it has been started. See [configuration routing](#configuration-routing) for traffic during start up. When you configure application routing, you can either route all traffic or only private traffic (also known as [RFC1918](https://datatracker.ietf.org/doc/html/rfc1918#section-3) traffic) into your virtual network. You configure this behavior through the **Route All** setting. If **Route All** is disabled, your app only routes private traffic into your virtual network. If you want to route all your outbound app traffic into your virtual network, make sure that **Route All** is enabled.
-> [!NOTE]
-> * Only traffic configured in application or configuration routing is subject to the NSGs and UDRs that are applied to your integration subnet.
-> * When **Route All** is enabled, outbound traffic from your app is still sent from the addresses that are listed in your app properties, unless you provide routes that direct the traffic elsewhere.
+* Only traffic configured in application or configuration routing is subject to the NSGs and UDRs that are applied to your integration subnet.
+* When **Route All** is enabled, outbound traffic from your app is still sent from the addresses that are listed in your app properties, unless you provide routes that direct the traffic elsewhere.
Learn [how to configure application routing](./configure-vnet-integration-routing.md). We recommend that you use the **Route All** configuration setting to enable routing of all traffic. Using the configuration setting allows you to audit the behavior with [a built-in policy](https://portal.azure.com/#blade/Microsoft_Azure_Policy/PolicyDetailBlade/definitionId/%2Fproviders%2FMicrosoft.Authorization%2FpolicyDefinitions%2F33228571-70a4-4fa1-8ca1-26d0aba8d6ef). The existing `WEBSITE_VNET_ROUTE_ALL` app setting can still be used, and you can enable all traffic routing with either setting.
+> [!NOTE]
+> Outbound SMTP connectivity (port 25) is supported for App Service when the SMTP traffic is routed through the virtual network integration. The supportability is determined by the subscription where the virtual network is deployed. For virtual networks created before 1. August 2022, you will have to re-enable outbound SMTP connectivity support on the subscription. For more information on subscription type support and how to request support to re-enable outbound SMTP connectivity, see [Troubleshoot outbound SMTP connectivity problems in Azure](../virtual-network/troubleshoot-outbound-smtp-connectivity.md).
+ #### Configuration routing When you are using virtual network integration, you can configure how parts of the configuration traffic is managed. By default, configuration traffic will go directly over the public route, but for the mentioned individual components, you can actively configure it to be routed through the virtual network integration.
-> [!NOTE]
-> * Windows containers don't support pulling custom container images over virtual network integration.
-> * Backup/restore to private storage accounts is currently not supported.
-> * Configure SSL/TLS certificates from private Key Vaults is currently not supported.
-> * App Service Logs to private storage accounts is currently not supported. We recommend using Diagnostics Logging and allowing Trusted Services for the storage account.
- ##### Content storage Bringing your own storage for content in often used in Functions where [content storage](./../azure-functions/configure-networking-how-to.md#restrict-your-storage-account-to-a-virtual-network) is configured as part of the Functions app.
When using custom containers for Linux, you can pull the container over the virt
App settings using Key Vault references will attempt to get secrets over the public route. If the Key Vault is blocking public traffic and the app is using virtual network integration, an attempt will then be made to get the secrets through the virtual network integration.
+> [!NOTE]
+> * Windows containers don't support pulling custom container images over virtual network integration.
+> * Backup/restore to private storage accounts is currently not supported.
+> * Configure SSL/TLS certificates from private Key Vaults is currently not supported.
+> * App Service Logs to private storage accounts is currently not supported. We recommend using Diagnostics Logging and allowing Trusted Services for the storage account.
+ #### Network routing You can use route tables to route outbound traffic from your app without restriction. Common destinations can include firewall devices or gateways. You can also use a [network security group](../virtual-network/network-security-groups-overview.md) (NSG) to block outbound traffic to resources in your virtual network or the internet. An NSG that's applied to your integration subnet is in effect regardless of any route tables applied to your integration subnet.
app-service Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/app-service/overview.md
Azure App Service is a fully managed platform as a service (PaaS) offering for d
* **API and mobile features** - App Service provides turn-key CORS support for RESTful API scenarios, and simplifies mobile app scenarios by enabling authentication, offline data sync, push notifications, and more. * **Serverless code** - Run a code snippet or script on-demand without having to explicitly provision or manage infrastructure, and pay only for the compute time your code actually uses (see [Azure Functions](../azure-functions/index.yml)).
-Besides App Service, Azure offers other services that can be used for hosting websites and web applications. For most scenarios, App Service is the best choice. For microservice architecture, consider [Azure Spring-Cloud Service](../spring-cloud/index.yml) or [Service Fabric](https://azure.microsoft.com/documentation/services/service-fabric). If you need more control over the VMs on which your code runs, consider [Azure Virtual Machines](https://azure.microsoft.com/documentation/services/virtual-machines/). For more information about how to choose between these Azure services, see [Azure App Service, Virtual Machines, Service Fabric, and Cloud Services comparison](/azure/architecture/guide/technology-choices/compute-decision-tree).
+Besides App Service, Azure offers other services that can be used for hosting websites and web applications. For most scenarios, App Service is the best choice. For microservice architecture, consider [Azure Spring Apps](../spring-apps/index.yml) or [Service Fabric](https://azure.microsoft.com/documentation/services/service-fabric). If you need more control over the VMs on which your code runs, consider [Azure Virtual Machines](https://azure.microsoft.com/documentation/services/virtual-machines/). For more information about how to choose between these Azure services, see [Azure App Service, Virtual Machines, Service Fabric, and Cloud Services comparison](/azure/architecture/guide/technology-choices/compute-decision-tree).
## App Service on Linux
applied-ai-services Language Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/applied-ai-services/form-recognizer/language-support.md
Previously updated : 06/06/2022 Last updated : 07/29/2022
Language| Locale code |
|:--|:-:| |English (United States)|en-us|
-## Receipt and business card models
+## Receipt model
>[!NOTE] > It's not necessary to specify a locale. This is an optional parameter. The Form Recognizer deep-learning technology will auto-detect the language of the text in your image.
-Pre-Built Receipt and Business Cards support all English receipts and business cards with the following locales:
+Receipt supports all English receipts with the following locales:
|Language| Locale code | |:--|:-:|
Pre-Built Receipt and Business Cards support all English receipts and business c
## Business card model
+>[!NOTE]
+ > It's not necessary to specify a locale. This is an optional parameter. The Form Recognizer deep-learning technology will auto-detect the language of the text in your image.
+
+Business Card supports all English business cards with the following locales:
+
+|Language| Locale code |
+|:--|:-:|
+|English (Australia)|`en-au`|
+|English (Canada)|`en-ca`|
+|English (United Kingdom)|`en-gb`|
+|English (India|`en-in`|
+|English (United States)| `en-us`|
+ The **2022-06-30-preview** release includes Japanese language support: |Language| Locale code |
Language| Locale code |
|Portuguese (**2022-06-30-preview**)|pt| |Dutch (**2022-06-30-preview**)| nl|
-## ID documents
+## ID document model
This technology is currently available for US driver licenses and the biographical page from international passports (excluding visa and other travel documents).
attestation Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/attestation/overview.md
Client applications can be designed to take advantage of TPM attestation by dele
### AMD SEV-SNP attestation
-Azure [Confidential VM](../confidential-computing/confidential-vm-overview.md) (CVM) is based on [AMD processors with SEV-SNP technology](../confidential-computing/virtual-machine-solutions-amd.md) and aims to improve VM security posture by removing trust in host, hypervisor and Cloud Service Provider (CSP). To achieve this, CVM offers VM OS disk encryption option with platform-managed keys and binds the disk encryption keys to the virtual machine's TPM. When a CVM boots up, SNP report containing the guest VM firmware measurements will be sent to Azure Attestation. The service validates the measurements and issues an attestation token that is used to release keys from [Managed-HSM](../key-vault/managed-hsm/overview.md) or [Azure Key Vault](../key-vault/general/basic-concepts.md). These keys are used to decrypt the vTPM state of the guest VM, unlock the OS disk and start the CVM. The attestation and key release process is performed automatically on each CVM boot, and the process ensures the CVM boots up only upon successful attestation of the hardware.
+Azure [Confidential VM](../confidential-computing/confidential-vm-overview.md) (CVM) is based on [AMD processors with SEV-SNP technology](../confidential-computing/virtual-machine-solutions-amd.md). CVM offers VM OS disk encryption option with platform-managed keys or customer-managed keys and binds the disk encryption keys to the virtual machine's TPM. When a CVM boots up, SNP report containing the guest VM firmware measurements will be sent to Azure Attestation. The service validates the measurements and issues an attestation token that is used to release keys from [Managed-HSM](../key-vault/managed-hsm/overview.md) or [Azure Key Vault](../key-vault/general/basic-concepts.md). These keys are used to decrypt the vTPM state of the guest VM, unlock the OS disk and start the CVM. The attestation and key release process is performed automatically on each CVM boot, and the process ensures the CVM boots up only upon successful attestation of the hardware.
### Trusted Launch attestation
automation Manage Change Tracking https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/automation/change-tracking/manage-change-tracking.md
File content tracking allows you to view the contents of a file before and after
* You can connect the storage account to only one Automation account. * Change Tracking and Inventory must be enabled in your Automation account.
+>[!NOTE]
+> If the file size appears >1.25MB, then FileContentChecksum is incorrect due to memory constraints in the checksum calculation.
+ ### Enable tracking for file content changes Use the following steps to enable tracking for changes to file contents:
automation Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/automation/change-tracking/overview.md
Change Tracking and Inventory doesn't support or has the following limitations:
- ***.exe** files stored on Windows - The **Max File Size** column and values are unused in the current implementation. - If you are tracking file changes, it is limited to a file size of 5 MB or less.
+- If the file size appears >1.25MB, then FileContentChecksum is incorrect due to memory constraints in the checksum calculation.
- If you try to collect more than 2500 files in a 30-minute collection cycle, Change Tracking and Inventory performance might be degraded. - If network traffic is high, change records can take up to six hours to display. - If you modify a configuration while a machine or server is shut down, it might post changes belonging to the previous configuration.
availability-zones Cross Region Replication Azure https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/availability-zones/cross-region-replication-azure.md
For applications that support multiple active regions, we recommend that you use
## Benefits of cross-region replication
-Architecting cross-regional replication for your services and data can be decided on a per-service basis. You'll necessarily take a cost-benefit analysis approach based on your organization's strategic and business requirements. Primary and ripple benefits of cost-region replication are complex, extensive, and deserve elaboration. These benefits include:
+Architecting cross-regional replication for your services and data can be decided on a per-service basis. You'll necessarily take a cost-benefit analysis approach based on your organization's strategic and business requirements. Primary and ripple benefits of cross-region replication are complex, extensive, and deserve elaboration. These benefits include:
- **Region recovery sequence**: If a geography-wide outage occurs, recovery of one region is prioritized out of every enabled set of regions. Applications that are deployed across enabled region sets are guaranteed to have one of the regions prioritized for recovery. If an application is deployed across regions, any of which isn't enabled for cross-regional replication, recovery can be delayed. - **Sequential updating**: Planned Azure system updates for your enabled regions are staggered chronologically to minimize downtime, impact of bugs, and any logical failures in the rare event of a faulty update.
azure-arc Troubleshoot Agent Onboard https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-arc/servers/troubleshoot-agent-onboard.md
# Troubleshoot Azure Arc-enabled servers agent connection issues
-This article provides information on troubleshooting and resolving issues that may occur while attempting to configure the Azure Connected Machine agent for Windows or Linux. Both the interactive and at-scale installation methods when configuring connection to the service are included. For general information, see [Azure Arc-enabled servers overview](./overview.md).
+This article provides information for troubleshooting issues that may occur configuring the Azure Connected Machine agent for Windows or Linux. Both the interactive and at-scale installation methods when configuring connection to the service are included. For general information, see [Azure Arc-enabled servers overview](./overview.md).
## Agent error codes
-If you receive an error when configuring the Azure Arc-enabled servers agent, the following table can help you identify the probable cause and suggested steps to resolve your problem. You will need the `AZCM0000` ("0000" can be any 4 digit number) error code printed to the console or script output to proceed.
+Use the following table to identify and resolve issues when configuring the Azure Arc-enabled servers agent. You will need the `AZCM0000` ("0000" can be any four digit number) error code printed to the console or script output.
| Error code | Probable cause | Suggested remediation | ||-|--|
If you receive an error when configuring the Azure Arc-enabled servers agent, th
| AZCM0012 | The access token provided is invalid | Obtain a new access token and try again | | AZCM0013 | The tags provided are invalid | Check that the tags are enclosed in double quotes, separated by commas, and that any names or values with spaces are enclosed in single quotes: `--tags "SingleName='Value with spaces',Location=Redmond"` | AZCM0014 | The cloud is invalid | Specify a supported cloud: `AzureCloud` or `AzureUSGovernment` |
-| AZCM0015 | The correlation ID specified is not a valid GUID | Provide a valid GUID for `--correlation-id` |
+| AZCM0015 | The correlation ID specified isn't a valid GUID | Provide a valid GUID for `--correlation-id` |
| AZCM0016 | Missing a mandatory parameter | Review the output to identify which parameters are missing | | AZCM0017 | The resource name is invalid | Specify a name that only uses alphanumeric characters, hyphens and/or underscores. The name cannot end with a hyphen or underscore. | | AZCM0018 | The command was executed without administrative privileges | Retry the command with administrator or root privileges in an elevated command prompt or console session. |
If you receive an error when configuring the Azure Arc-enabled servers agent, th
| AZCM0042 | Creation of the Azure Arc-enabled server resource failed | Verify that the user/service principal specified has access to create Azure Arc-enabled server resources in the specified resource group. | | AZCM0043 | Deletion of the Azure Arc-enabled server resource failed | Verify that the user/service principal specified has access to delete Azure Arc-enabled server resources in the specified resource group. If the resource no longer exists in Azure, use the `--force-local-only` flag to proceed. | | AZCM0044 | A resource with the same name already exists | Specify a different name for the `--resource-name` parameter or delete the existing Azure Arc-enabled server in Azure and try again. |
-| AZCM0061 | Unable to reach the agent service | Verify you are running the command in an elevated user context (administrator/root) and that the HIMDS service is running on your server. |
+| AZCM0061 | Unable to reach the agent service | Verify you're running the command in an elevated user context (administrator/root) and that the HIMDS service is running on your server. |
| AZCM0062 | An error occurred while connecting the server | Review other error codes in the output for more specific information. If the error occurred after the Azure resource was created, you need to delete the Arc server from your resource group before retrying. |
-| AZCM0063 | An error occurred while disconnecting the server | Review other error codes in the output for more specific information. If you continue to encounter this error, you can delete the resource in Azure and then run `azcmagent disconnect --force-local-only` on the server to disconnect the agent. |
+| AZCM0063 | An error occurred while disconnecting the server | Review other error codes in the output for more specific information. If you continue to encounter this error, you can delete the resource in Azure, and then run `azcmagent disconnect --force-local-only` on the server to disconnect the agent. |
| AZCM0064 | The agent service is not responding | Check the status of the `himds` service to ensure it is running. Start the service if it is not running. If it is running, wait a minute then try again. | | AZCM0065 | An internal agent communication error occurred | Contact Microsoft Support for assistance | | AZCM0066 | The agent web service is not responding or unavailable | Contact Microsoft Support for assistance | | AZCM0067 | The agent is already connected to Azure | Run `azcmagent disconnect` to remove the current connection, then try again. | | AZCM0068 | An internal error occurred while disconnecting the server from Azure | Contact Microsoft Support for assistance |
+| AZCM0070 | Unable to obtain local config | The Hybrid Instance Metadata service (HIMDS) might not be running. Check the status of your HIMDS service (for Windows) or the HIMDS daemon (for Linux). |
| AZCM0081 | An error occurred while downloading the Azure Active Directory managed identity certificate | If this message is encountered while attempting to connect the server to Azure, the agent won't be able to communicate with the Azure Arc service. Delete the resource in Azure and try connecting again. | | AZCM0101 | The command was not parsed successfully | Run `azcmagent <command> --help` to review the correct command syntax | | AZCM0102 | Unable to retrieve the computer hostname | Run `hostname` to check for any system-level error messages, then contact Microsoft Support. |
azure-cache-for-redis Cache Best Practices Development https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-cache-for-redis/cache-best-practices-development.md
While you can connect from outside of Azure, it isn't recommended *especially wh
## Rely on hostname not public IP address
-The public IP address assigned to your cache can change as a result of a scale operation or backend improvement. We recommend relying on the hostname, in the form `<cachename>.redis.cache.windows.net`, instead of an explicit public IP address.
+The public IP address assigned to your cache can change as a result of a scale operation or backend improvement. We recommend relying on the hostname instead of an explicit public IP address. Here are the recommended forms for the various tiers:
+
+|Tier | Form |
+|-|-|
+| Basic, Standard, Premium | `<cachename>.redis.cache.windows.net` |
+| Enterprise, Enterprise Flash | `<DNS name>.<Azure region>.redisenterprise.cache.azure.net.` |
## Choose an appropriate Redis version
azure-fluid-relay Architecture https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/architecture.md
fluid.url: https://fluidframework.com/docs/build/overview/
# Overview of Azure Fluid Relay architecture
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- There are three primary concepts to understand when building an application with Fluid. - Service
There are three primary concepts to understand when building an application with
## Service
-Fluid clients require a centralized service that all connected clients use to send and receive operations. When using Fluid in an application you must use the correct package that corresponds to the underlying service you are connecting to.
+Fluid clients require a centralized service that all connected clients use to send and receive operations. When using Fluid in an application, you must use the correct package that corresponds to the underlying service you're connecting to.
-For the Azure Fluid Relay service this package is **@fluidframework/azure-client**. This package helps create and load Fluid containers hosted on Azure via Azure Fluid Relay.
+For the Azure Fluid Relay service, this package is **@fluidframework/azure-client**. This package helps create and load Fluid containers hosted on Azure via Azure Fluid Relay.
## Container The **container** is the primary unit of encapsulation in Fluid. It consists of a collection of shared objects and supporting APIs to manage the lifecycle of the container and the objects within it.
-Creating new containers is a client-driven action and container lifetimes are bound to the data stored on the supporting server. When getting existing containers it's important to consider the previous state of the container.
+Creating new containers is a client-driven action and container lifetimes are bound to the data stored on the supporting server. When getting existing containers, it's important to consider the previous state of the container.
-For more about containers see [Containers](https://fluidframework.com/docs/build/containers/) on fluidframework.com.
+For more about containers, see [Containers](https://fluidframework.com/docs/build/containers/) on fluidframework.com.
## Shared objects A **shared object** is an object type that powers collaborative data by exposing a specific API. Many shared objects can exist within the context of a container and they can be created either statically or dynamically. **Distributed Data Structures(DDSes)** and **DataObjects** are both types of shared objects.
-For more information see [Data modeling](https://fluidframework.com/docs/build/data-modeling/) on fluidframework.com.
+For more information, see [Data modeling](https://fluidframework.com/docs/build/data-modeling/) on fluidframework.com.
## Package structure There are two primary **packages** you'll use when building with Fluid. The **fluid-framework** package and a service-specific client package like **azure-client**.
-For more information see [Packages](https://fluidframework.com/docs/build/packages/) on fluidframework.com.
+For more information, see [Packages](https://fluidframework.com/docs/build/packages/) on fluidframework.com.
### The fluid-framework package
azure-fluid-relay Authentication Authorization https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/authentication-authorization.md
fluid.url: https://fluidframework.com/docs/build/auth/
# Authentication and authorization in your app
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- Security is critical to modern web applications. Fluid Framework, as a part of your web application architecture is an important piece of infrastructure to secure. Fluid Framework is a layered architecture, and auth-related concepts are implemented based on the Fluid service it's connecting to. This means that, although there are common authentication themes across all Fluid services, the details and specifics will differ for each service. ## Azure Fluid Relay service
azure-fluid-relay Container Management https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/container-management.md
# Managing Fluid containers
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- A Container is the atomic unit of storage in the Azure Fluid Relay service and represents the data stored from a Fluid session, including operations and snapshots. The Fluid runtime uses the container to rehydrate the state of a Fluid session when a user joins for the first time or rejoins after leaving. When building an application with the Fluid Framework, there are several things you need to account for regarding container creation and management, as summarized in this diagram.
azure-fluid-relay Data Encryption https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/data-encryption.md
# Data encryption in Azure Fluid Relay
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- Azure Fluid Relay leverages the encryption-at-rest capability of [Azure Kubernetes Service](../../aks/enable-host-encryption.md), [Azure Cosmos DB](../../cosmos-db/database-encryption-at-rest.md) and [Azure Blob Storage](../../storage/common/storage-service-encryption.md). The service-to-service communication between Azure Fluid Relay and these resources is TLS encrypted and is enclosed in with the Azure Virtual Network boundary, protected from external interference by Network Security Rules. The diagram below shows at a high level how Azure Fluid Relay is implemented and how it handles data storage.
The diagram below shows at a high level how Azure Fluid Relay is implemented and
### How much more does Azure Fluid Relay cost if encryption is enabled?
-Encryption-at-rest is enabled by default. There is no additional cost.
+Encryption-at-rest is enabled by default. There's no additional cost.
### Who manages the encryption keys?
The keys are managed by Microsoft.
### How often are encryption keys rotated?
-Microsoft has a set of internal guidelines for encryption key rotation which Azure Fluid Relay follows. The specific guidelines are not published. Microsoft does publish the [Security Development Lifecycle (SDL)](https://www.microsoft.com/sdl/default.aspx), which is seen as a subset of internal guidance and has useful best practices for developers.
+Microsoft has a set of internal guidelines for encryption key rotation which Azure Fluid Relay follows. The specific guidelines aren't published. Microsoft does publish the [Security Development Lifecycle (SDL)](https://www.microsoft.com/sdl/default.aspx), which is seen as a subset of internal guidance and has useful best practices for developers.
### Can I use my own encryption keys?
-Yes. For more information, refer to [Customer-managed keys for Azure Fluid Relay encryption](../concepts/customer-managed-keys.md).
+Yes. For more information, see [Customer-managed keys for Azure Fluid Relay encryption](../concepts/customer-managed-keys.md).
### What regions have encryption turned on?
All Azure Fluid Relay regions have encryption turned on for all user data.
### Does encryption affect the performance latency and throughput?
-A: There is no impact or changes to performance with encryption at rest enabled.
+A: There's no impact or changes to performance with encryption at rest enabled.
## See also
azure-fluid-relay Data Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/data-storage.md
# Data storage in Azure Fluid Relay
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- A Container is the atomic unit of storage in the Azure Fluid Relay service and represents the data stored from a Fluid session, including operations and snapshots. The Fluid runtime uses the container to rehydrate the state of a Fluid session when a user joins for the first time or rejoins after leaving.
-You have control of the Azure region where container data is stored. During the provisioning of the Azure Fluid Relay resource, you can select the region where you want that data to be stored at-rest. All containers created in that Azure Fluid Relay resource will be stored in that region. Once selected, the region cannot be changed. You will need to create a new Azure Fluid Relay resource in another region to store data in a different region.
+You have control of the Azure region where container data is stored. During the provisioning of the Azure Fluid Relay resource, you can select the region where you want that data to be stored at-rest. All containers created in that Azure Fluid Relay resource will be stored in that region. Once selected, the region can't be changed. You'll need to create a new Azure Fluid Relay resource in another region to store data in a different region.
-To deliver a highly available service, the container data is replicated to another region. This helps in the cases where disaster recovery is needed in face of a full regional outage. Internally, Azure Fluid Relay uses Azure Blob Storage cross-region replication to achieve that. The region where data is replicated is defined by the Azure regional pairs listed on the [Cross-region replication in Azure](../../availability-zones/cross-region-replication-azure.md#azure-cross-region-replication-pairings-for-all-geographies) page.
+To deliver a highly available service, the container data is replicated to another region. This data replication helps in the cases where disaster recovery is needed in face of a full regional outage. Internally, Azure Fluid Relay uses Azure Blob Storage cross-region replication to achieve that. The region where data is replicated is defined by the Azure regional pairs listed on the [Cross-region replication in Azure](../../availability-zones/cross-region-replication-azure.md#azure-cross-region-replication-pairings-for-all-geographies) page.
## Single region offering
-For regions that have the cross-region replication done outside of the geography (like Brazil South), Azure Fluid Relay provides a single region offering. You can select between the cross-region replication or this single region offering during the provisioning of the Azure Fluid Relay resource. Note that if you select the single region offering, you do not get the benefits of recovery from regional outage. Your application will experience downtime for the entire time the region is down.
+For regions that have the cross-region replication done outside of the geography (like Brazil South), Azure Fluid Relay provides a single region offering. You can select between the cross-region replication or this single region offering during the provisioning of the Azure Fluid Relay resource. If you select the single region offering, you don't get the benefits of recovery from regional outage. Your application will experience downtime for the entire time the region is down.
## What about in-transit data? During the sessionΓÇÖs lifetime, some data may live temporarily in-transit outside the region selected during resource provisioning. This allows the Azure Fluid Relay service to distribute changes in the DDSes between users at lower latency by placing the session in the closest region to your end users. The result is a better user experience for your end users.
-For the single region offering, in-transit data is scoped to the region selected. This may result in higher latencies distributing changes in DDSes to your end users if they are not close to that region.
+For the single region offering, in-transit data is scoped to the region selected. This may result in higher latencies distributing changes in DDSes to your end users if they aren't near that region.
-If the Fluid container is required for the duration of the collaborative session only, you can delete the container from the Azure Fluid Relay service. This helps you control the storage cost of your Azure Fluid Relay resource.
+If the Fluid container is required during the collaborative session only, you can delete the container from the Azure Fluid Relay service. This helps you control the storage cost of your Azure Fluid Relay resource.
## See also
azure-fluid-relay Data Structures https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/data-structures.md
fluid.url: https://fluidframework.com/docs/data-structures/overview/
# Distributed data structures
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- The Fluid Framework provides developers with distributed data structures (DDSes) that automatically ensure that each connected client has access to the same state. The APIs provided by DDSes are designed to be familiar to programmers who've used common data structures before. > [!NOTE]
These DDSes are used for storing sequential data. They are optimistic. Sequence
### Common issues and best practices for sequence DDSes -- Store only immutable data as an item in a sequence. The only way to change the value of an item is to first remove it from the sequence and then insert a new value at the position where the old value was. But because other clients can insert and remove, there's no reliable way of getting the new value into the the desired position.
+- Store only immutable data as an item in a sequence. The only way to change the value of an item is to first remove it from the sequence and then insert a new value at the position where the old value was. But because other clients can insert and remove, there's no reliable way of getting the new value into the desired position.
## Strings
azure-fluid-relay Version Compatibility https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/concepts/version-compatibility.md
# Version compatibility with Fluid Framework releases
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- To connect your application to Azure Fluid Relay service, you'll use the **@fluidframework/azure-client** library. You'll also use the **fluid-framework** library to use the core data structures and provided by the Fluid Framework.
azure-fluid-relay Azure Function Token Provider https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/azure-function-token-provider.md
fluid.url: https://fluidframework.com/docs/build/tokenproviders/
In the [Fluid Framework](https://fluidframework.com/), TokenProviders are responsible for creating and signing tokens that the `@fluidframework/azure-client` uses to make requests to the Azure Fluid Relay service. The Fluid Framework provides a simple, insecure TokenProvider for development purposes, aptly named **InsecureTokenProvider**. Each Fluid service must implement a custom TokenProvider based on the particular service's authentication and security considerations.
-Each Azure Fluid Relay resource you create is assigned a **tenant ID** and its own unique **tenant secret key**. The secret key is a **shared secret**. Your app/service knows it, and the Azure Fluid Relay service knows it. TokenProviders must know the secret key to sign requests, but the secret key cannot be included in client code.
+Each Azure Fluid Relay resource you create is assigned a **tenant ID** and its own unique **tenant secret key**. The secret key is a **shared secret**. Your app/service knows it, and the Azure Fluid Relay service knows it. TokenProviders must know the secret key to sign requests, but the secret key can't be included in client code.
## Implement an Azure Function to sign tokens
The complete solution has two pieces:
### Create an endpoint for your TokenProvider using Azure Functions
-[Azure Functions](../../azure-functions/functions-overview.md) are a fast way to create such an HTTPS endpoint. The example below implements that pattern in a class called **AzureFunctionTokenProvider**. It accepts the URL to your Azure Function, `userId` and`userName`. This specific implementation is also provided for you as an export from the `@fluidframework/azure-client` package.
+Using [Azure Functions](../../azure-functions/functions-overview.md) is a fast way to create such an HTTPS endpoint. The example below implements that pattern in a class called **AzureFunctionTokenProvider**. It accepts the URL to your Azure Function, `userId` and`userName`. This specific implementation is also provided for you as an export from the `@fluidframework/azure-client` package.
This example demonstrates how to create your own **HTTPTrigger Azure Function** that fetches the token by passing in your tenant key.
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRe
export default httpTrigger; ```
-The `generateToken` function, found in the `@fluidframework/azure-service-utils` package, generates a token for the given user that is signed using the tenant's secret key. This method enables the token to be returned to the client without exposing the secret. Instead, the token is generated server-side using the secret to provide scoped access to the given document. The example ITokenProvider below makes HTTP requests to this Azure Function to retrieve tokens.
+The `generateToken` function, found in the `@fluidframework/azure-service-utils` package, generates a token for the given user that is signed using the tenant's secret key. This method enables the token to be returned to the client without exposing the secret. Instead, the token is generated server-side using the secret to provide scoped access to the given document. The example ITokenProvider below makes HTTP requests to this Azure Function to retrieve the tokens.
### Deploy the Azure Function
-Azure Functions can be deployed in several ways. See the **Deploy** section of the [Azure Functions documentation](../../azure-functions/functions-continuous-deployment.md) for more information about deploying Azure Functions.
+Azure Functions can be deployed in several ways. For more information, see the **Deploy** section of the [Azure Functions documentation](../../azure-functions/functions-continuous-deployment.md) for more information about deploying Azure Functions.
### Implement the TokenProvider
-TokenProviders can be implemented in many ways, but must implement two separate API calls: `fetchOrdererToken` and `fetchStorageToken`. These APIs are responsible for fetching tokens for the Fluid orderer and storage services respectively. Both functions return `TokenResponse` objects representing the token value. The Fluid Framework runtime calls these two APIs as needed to retrieve tokens. Note that while your application code is using only one service endpoint to establish conectivity with the Azure Fluid Relay service, the azure-client internally in conjunction with the service translate that one endpoint to an orderer and storage endpoint pair. Those two endpoints are used from that point on for that session. That is why you need to implement the two separate functions for fetching tokens, one for each.
+TokenProviders can be implemented in many ways, but must implement two separate API calls: `fetchOrdererToken` and `fetchStorageToken`. These APIs are responsible for fetching tokens for the Fluid orderer and storage services respectively. Both functions return `TokenResponse` objects representing the token value. The Fluid Framework runtime calls these two APIs as needed to retrieve tokens. Note that while your application code is using only one service endpoint to establish connectivity with the Azure Fluid Relay service, the azure-client internally in conjunction with the service translate that one endpoint to an orderer and storage endpoint pair. Those two endpoints are used from that point on for that session which is why you need to implement the two separate functions for fetching tokens, one for each.
-To ensure that the tenant secret key is kept secure, it is stored in a secure backend location and is only accessible from within the Azure Function. To retrieve tokens, you need to make a `GET` or `POST` request to your deployed Azure Function, providing the `tenantID` and `documentId`, and `userID`/`userName`. The Azure Function is responsible for the mapping between the tenant ID and a tenant key secret to appropriately generate and sign the token.
+To ensure that the tenant secret key is kept secure, it's stored in a secure backend location and is only accessible from within the Azure Function. To retrieve tokens, you need to make a `GET` or `POST` request to your deployed Azure Function, providing the `tenantID` and `documentId`, and `userID`/`userName`. The Azure Function is responsible for the mapping between the tenant ID and a tenant key secret to appropriately generate and sign the token.
This example implementation below uses the [axios](https://www.npmjs.com/package/axios) library to make HTTP requests. You can use other libraries or approaches to making an HTTP request from server code.
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
fluid.url: https://fluidframework.com/docs/deployment/azure-frs/
# How to: Connect to an Azure Fluid Relay service
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- This article walks through the steps to get your Azure Fluid Relay service provisioned and ready to use. > [!IMPORTANT]
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 the tenant ID, orderer and storage URLs, 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` package provides an `InsecureTokenProvider` 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` 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` that fetches the token from your own backend service that is responsible for signing it with the tenant key.
Now that you have an instance of `AzureClient`, you can start using it to create
### Token providers
-The [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/azure/packages/azure-client/src/AzureFunctionTokenProvider.ts) is an implementation of `ITokenProvider` which ensures your tenant key secret is not exposed in your client-side bundle code. The `AzureFunctionTokenProvider` takes in your Azure Function URL appended by `/api/GetAzureToken` along with the current user object. Later on, it makes a `GET` request to your Azure Function by passing in the tenantId, documentId and userId/userName as optional parameters.
+The [AzureFunctionTokenProvider](https://github.com/microsoft/FluidFramework/blob/main/azure/packages/azure-client/src/AzureFunctionTokenProvider.ts) is an implementation of `ITokenProvider` that ensures your tenant key secret is not exposed in your client-side bundle code. The `AzureFunctionTokenProvider` takes in your Azure Function URL appended by `/api/GetAzureToken` along with the current user object. Later on, it makes a `GET` request to your Azure Function by passing in the tenantId, documentId and userId/userName as optional parameters.
```javascript const config = {
const { container, services } = await azureClient.createContainer(
const id = await container.attach(); ```
-The `container.attach()` call is when the container actually becomes connected to the service and is recorded in its blob storage. It returns an `id` which is the unique identifier to this container instance.
+The `container.attach()` call is when the container actually becomes connected to the service and is recorded in its blob storage. It returns an `id` that is the unique identifier to this container instance.
Any client that wants to join the same collaborative session needs to call `getContainer` with the same container `id`.
The container being fetched back will hold the `initialObjects` as defined in th
Calls to `createContainer` and `getContainer` return two values: a `container` -- described above -- and a `services` object.
-The `container` contains the Fluid data model and is service-agnostic. Any code you write against this container object returned by the `AzureClient` is reusable with the client for another service. An example of this is if you prototyped your scenario using `TinyliciousClient`, then all of your code interacting with the shared objects within the Fluid container can be reused when moving to using `AzureClient`.
+The `container` contains the Fluid data model and is service-agnostic. Any code you write against this container object returned by the `AzureClient` is reusable with the client for another service. An example is if you prototyped your scenario using `TinyliciousClient`, then all of your code interacting with the shared objects within the Fluid container can be reused when moving to using `AzureClient`.
The `services` object contains data that is specific to the Azure Fluid Relay service. This object contains an `audience` value that can be used to manage the roster of users that are currently connected to the container.
audience.on("membersChanged", onAudienceChanged);
`audience` also emits events for when the roster of members changes. `membersChanged` will fire for any roster changes, whereas `memberAdded` and `memberRemoved` will fire for their respective changes with the `clientId` and `member` values that have been modified. After any of these events fire, a new call to `getMembers` will return the updated member roster.
-A sample `AzureMember` object looks like the following:
+A sample `AzureMember` object looks like:
```json {
A sample `AzureMember` object looks like the following:
} ```
-Alongside the user ID, name and additional details, `AzureMember` objects also hold an array of `connections`. If the user is logged into the session with only one client, `connections` will only have one value in it with the ID of the client and if is in read/write mode. However, if the same user is logged in from multiple clients (i.e. they are logged in from different devices or have multiple browser tabs open with the same container), `connections` here will hold multiple values for each client. In the example data above, we can see that a user with name "Test User" and ID "0e662aca-9d7d-4ff0-8faf-9f8672b70f15" currently has the container open from two different clients. The values in the `additionalDetails` field match up to the values provided in the `AzureFunctionTokenProvider` token generation.
+Alongside the user ID, name and additional details, `AzureMember` objects also hold an array of `connections`. If the user is logged into the session with only one client, `connections` will only have one value in it with the ID of the client, and whether is in read/write mode. However, if the same user is logged in from multiple clients (that is, they are logged in from different devices or have multiple browser tabs open with the same container), `connections` here will hold multiple values for each client. In the example data above, we can see that a user with name "Test User" and ID "0e662aca-9d7d-4ff0-8faf-9f8672b70f15" currently has the container open from two different clients. The values in the `additionalDetails` field match up to the values provided in the `AzureFunctionTokenProvider` token generation.
These functions and events can be combined to present a real-time view of the users in the current session.
azure-fluid-relay Container Deletion https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/container-deletion.md
# Delete Fluid containers in Azure Fluid Relay
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- In this scenario, we will be deleting an existing Fluid container. Once a container is deleted, applications referencing the container will no longer be able to access the container or its data. ## Requirements to delete a Fluid container
az rest --method get --uri https://management.azure.com/subscriptions/<subscript
**frsResourceName**: Name of your Fluid Relay resource. Note that this is different from the tenantId of the Fluid Relay resource.
-**apiVersion**: API Version of resource provider. Minimum supported version is **2021-08-30-preview**.
+**apiVersion**: API Version of resource provider. Minimum supported version is **2022-06-01**.
## Sample output
azure-fluid-relay Fluid Json Web Token https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/fluid-json-web-token.md
# Azure Fluid Relay token contract
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- Requests sent to Azure Fluid Relay should contain a JWT token in the authorization header. This token should be [signed by the tenant key](../concepts/authentication-authorization.md). ## Claims
azure-fluid-relay Local Mode With Azure Client https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/local-mode-with-azure-client.md
# How to: Use AzureClient for local testing
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- This article walks through the steps to configure **AzureClient** in local mode and use it to test your Fluid application locally. ## Configure and create an AzureClient
This article walks through the steps to configure **AzureClient** in local mode
const azureClient = new AzureClient(clientProps); ```
-This example uses the **InsecureTokenProvider** to generate and sign authentication tokens that the Azure Fluid Relay service will accept. However, as the name implies, this is insecure and should not be used in production environments. For more information about InsecureTokenProvider, refer to [Authentication and authorization in your app](https://fluidframework.com/docs/build/auth/#the-token-provider).
+This example uses the **InsecureTokenProvider** to generate and sign authentication tokens that the Azure Fluid Relay service will accept. However, as the name implies, this implementation is insecure and shouldn't be used in production environments. For more information about InsecureTokenProvider, see [Authentication and authorization in your app](https://fluidframework.com/docs/build/auth/#the-token-provider).
-To run locally, you first configure the orderer and storage URLs to point to the domain and port that the local Azure Fluid Relay service instance is running at (http://localhost:7070 by default). The final step is to set the `tenantId` to `LOCAL_MODE_TENANT_ID`. All of these settings together configure AzureClient to work with a local Azure Fluid Relay service.
+To run locally, you first configure the endpoint to point to the domain, and port that the local Azure Fluid Relay service instance is running at (http://localhost:7070 by default). The final step is to set the `tenantId` to `LOCAL_MODE_TENANT_ID`. All of these settings together configure AzureClient to work with a local Azure Fluid Relay service.
## Enabling debug logging
azure-fluid-relay Provision Fluid Azure Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/provision-fluid-azure-portal.md
Last updated 10/05/2021 + # How to: Provision an Azure Fluid Relay service
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- Before you can connect your app to an Azure Fluid Relay, you must provision an Azure Fluid Relay server resource in your Azure account. This article walks through the steps to get your Azure Fluid Relay service provisioned and ready to use. ## Prerequisites
Each Azure Fluid Relay server resource provides a tenant for you to use in your
4. Select a location for the namespace. > [!NOTE]
- > During the public preview, the only West US 2, West Europe, and SoutheastAsia regions are supported
+ > Currently, the only regions supported are: West US 2, West Europe, and SoutheastAsia.
5. Click the **Review + Create** button at the bottom of the page.
azure-fluid-relay Test Automation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/test-automation.md
fluid.url: https://fluidframework.com/docs/testing/testing/
# How to: Use test automation with Azure Fluid Relay
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- Testing and automation are crucial to maintaining the quality and longevity of your code. Internally, Fluid uses a range of unit and integration tests powered by [Mocha](https://mochajs.org/), [Jest](https://jestjs.io/), [Puppeteer](https://github.com/puppeteer/puppeteer), and [Webpack](https://webpack.js.org/). You can run tests using the local **@fluidframework/azure-local-service** or using a test tenant in Azure Fluid Relay service. **AzureClient** can be configured to connect to both a remote service and a local service, which enables you to use a single client type between tests against live and local service instances. The only difference is the configuration used to create the client.
azure-fluid-relay Validate Document Creator https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/how-tos/validate-document-creator.md
fluid.url: https://fluidframework.com/docs/apis/azure-client/itokenprovider/
# How to: Validate a User Created a Document
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
-
-When creating a document in Azure Fluid Relay, the JWT provided by the `ITokenProvider` for the creation request can only be used once. After creating a document, the client must generate a new JWT that contains the document ID provided by the service at creation time. If an application has an authorization service that manages document access control, it will need to know who created a document with a given ID in order to authorize the generation of a new JWT for access to that document.
+When you create a document in Azure Fluid Relay, the JWT provided by the `ITokenProvider` for the creation request can only be used once. After creating a document, the client must generate a new JWT that contains the document ID provided by the service at creation time. If an application has an authorization service that manages document access control, it will need to know who created a document with a given ID in order to authorize the generation of a new JWT for access to that document.
## Inform an Authorization Service when a document is Created An application can tie into the document creation lifecycle by implementing a public `documentPostCreateCallback()` property in its `TokenProvider`. This callback will be triggered directly after creating the document, before a client requests the new JWT it needs to gain read/write permissions to the document that was created.
-The `documentPostCreateCallback()` receives 2 parameters: 1) the ID of the document that was created and 2) a JWT signed by the service with no permission scopes. The authorization service can verify the given JWT and use the information in the JWT to grant the correct user permissions for the newly created document.
+The `documentPostCreateCallback()` receives two parameters: 1) the ID of the document that was created and 2) a JWT signed by the service with no permission scopes. The authorization service can verify the given JWT and use the information in the JWT to grant the correct user permissions for the newly created document.
### Create an endpoint for your document creation callback
export default httpTrigger;
### Implement the `documentPostCreateCallback`
-This example implementation below extends the [AzureFunctionTokenProvider](https://fluidframework.com/docs/apis/azure-client/azurefunctiontokenprovider/) and uses the [axios](https://www.npmjs.com/package/axios) library to make a simple HTTP request to the Azure Function used for generating tokens.
+This example implementation below extends the [AzureFunctionTokenProvider](https://fluidframework.com/docs/apis/azure-client/azurefunctiontokenprovider/) and uses the [axios](https://www.npmjs.com/package/axios) library to make a HTTP request to the Azure Function used for generating tokens.
```typescript import { AzureFunctionTokenProvider, AzureMember } from "@fluidframework/azure-client";
azure-fluid-relay Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/overview/overview.md
# Azure Fluid Relay overview
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
- The [Fluid Framework](https://fluidframework.com/) is an open source, platform independent framework. [Azure Fluid Relay](../overview/overview.md) is a managed offering for the Fluid Framework that helps developers build real-time collaborative experiences and replicate state across connected JavaScript clients in real-time. ## What is the Fluid Framework?
The following steps are a typical flow.
1. Fluid runtime incorporates that operation into local data and raises a "valueChanged" event. 1. Client code handles that event (updates view, runs business logic).
-## Getting to version 1.0
-
-The core technology powering Fluid Framework is mature and stable. However, the layers built on top of that foundation are still a work in progress. Over the coming months we will be evolving APIs, adding new features, and working to further simplify using the framework. These changes are driven by Microsoft's use of Fluid internally and by requirements we are gathering from developers currently building on Fluid.
-
-Fluid Framework is not ready to power production-quality solutions yet. But we are excited to open source it now to give developers an opportunity to explore, learn, and contribute both through feedback and through direct participation.
azure-fluid-relay Quickstart Dice Roll https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-fluid-relay/quickstarts/quickstart-dice-roll.md
# Quickstart: Dice roller
-> [!NOTE]
-> This preview version is provided without a service-level agreement, and it's not recommended for production workloads. Certain features might not be supported or might have constrained capabilities.
-
-In this quickstart, we'll walk through through the process of creating a dice roller app that uses the Azure Fluid Relay service. The quickstart is broken into two parts. In part one, we'll create the app itself and run it against a local Fluid server. In part two, we'll reconfigure the app to run against the Azure Fluid Relay service instead of the local dev server.
+In this quickstart, we'll walk through the process of creating a dice roller app that uses the Azure Fluid Relay service. The quickstart is broken into two parts. In part one, we'll create the app itself and run it against a local Fluid server. In part two, we'll reconfigure the app to run against the Azure Fluid Relay service instead of the local dev server.
The sample code used in this quickstart is available [here](https://github.com/microsoft/FluidHelloWorld/tree/main-azure).
azure-functions Durable Functions Create First Csharp https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/durable/durable-functions-create-first-csharp.md
In this section, you use Visual Studio Code to create a local Azure Functions pr
| Prompt | Value | Description | | | -- | -- | | Select a language for your function app project | C# | Create a local C# Functions project. |
- | Select a version | Azure Functions v3 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
+ | Select a version | Azure Functions v4 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
| Select a template for your project's first function | Skip for now | | | Select how you would like to open your project | Open in current window | Reopens Visual Studio Code in the folder you selected. |
azure-functions Quickstart Java https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/durable/quickstart-java.md
To complete this tutorial, you need:
- [Apache Maven](https://maven.apache.org), version 3.0 or above. - Latest version of the [Azure Functions Core Tools](../functions-run-local.md).
- - For Azure Functions 3.x, Core Tools **v3.0.4585** or newer is required.
- For Azure Functions 4.x, Core Tools **v4.0.4590** or newer is required. - An Azure Storage account, which requires that you have an Azure subscription.
azure-functions Quickstart Js Vscode https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/durable/quickstart-js-vscode.md
In this section, you use Visual Studio Code to create a local Azure Functions pr
| Prompt | Value | Description | | | -- | -- | | Select a language for your function app project | JavaScript | Create a local Node.js Functions project. |
- | Select a version | Azure Functions v3 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
+ | Select a version | Azure Functions v4 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
| Select a template for your project's first function | Skip for now | | | Select how you would like to open your project | Open in current window | Reopens VS Code in the folder you selected. |
azure-functions Quickstart Powershell Vscode https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/durable/quickstart-powershell-vscode.md
In this section, you use Visual Studio Code to create a local Azure Functions pr
| Prompt | Value | Description | | | -- | -- | | Select a language for your function app project | PowerShell | Create a local PowerShell Functions project. |
- | Select a version | Azure Functions v3 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
+ | Select a version | Azure Functions v4 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
| Select a template for your project's first function | Skip for now | | | Select how you would like to open your project | Open in current window | Reopens VS Code in the folder you selected. |
azure-functions Quickstart Python Vscode https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/durable/quickstart-python-vscode.md
In this section, you use Visual Studio Code to create a local Azure Functions pr
| Prompt | Value | Description | | | -- | -- | | Select a language for your function app project | Python | Create a local Python Functions project. |
- | Select a version | Azure Functions v3 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
+ | Select a version | Azure Functions v4 | You only see this option when the Core Tools aren't already installed. In this case, Core Tools are installed the first time you run the app. |
| Python version | Python 3.6, 3.7, or 3.8 | Visual Studio Code will create a virtual environment with the version you select. | | Select a template for your project's first function | Skip for now | | | Select how you would like to open your project | Open in current window | Reopens Visual Studio Code in the folder you selected. |
azure-functions Functions Reference Node https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-reference-node.md
You can see the current version that the runtime is using by logging `process.ve
# [Windows](#tab/windows-setting-the-node-version)
-For Windows function apps, target the version in Azure by setting the `WEBSITE_NODE_DEFAULT_VERSION` [app setting](functions-how-to-use-azure-function-app-settings.md#settings) to a supported LTS version, such as `~14`.
+For Windows function apps, target the version in Azure by setting the `WEBSITE_NODE_DEFAULT_VERSION` [app setting](functions-how-to-use-azure-function-app-settings.md#settings) to a supported LTS version, such as `~16`.
# [Linux](#tab/linux-setting-the-node-version)
azure-functions Functions Run Local https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-functions/functions-run-local.md
Starting with version 2.x, Core Tools runs on [Windows](?tabs=windows#v2), [macO
# [Windows](#tab/windows/v4)
-The following steps use a Windows installer (MSI) to install Core Tools v4.x. For more information about other package-based installers, see the [Core Tools readme](https://github.com/Azure/azure-functions-core-tools/blob/master/README.md#windows).
+The following steps use a Windows installer (MSI) to install Core Tools v4.x. For more information about other package-based installers, see the [Core Tools readme](https://github.com/Azure/azure-functions-core-tools/blob/v4.x/README.md#windows).
Download and run the Core Tools installer, based on your version of Windows:
azure-government Azure Services In Fedramp Auditscope https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-government/compliance/azure-services-in-fedramp-auditscope.md
This article provides a detailed list of Azure, Dynamics 365, Microsoft 365, and
| [Azure Service Manager (RDFE)](/previous-versions/azure/ee460799(v=azure.100)) | &#x2705; | &#x2705; | | [Azure Sign-up portal](https://signup.azure.com/) | &#x2705; | &#x2705; | | [Azure Sphere](/azure-sphere/) | &#x2705; | &#x2705; |
+| [Azure Spring Apps](../../spring-apps/index.yml) | &#x2705; | &#x2705; |
| [Azure Stack Edge](../../databox-online/index.yml) (formerly Data Box Edge) **&ast;** | &#x2705; | &#x2705; | | [Azure Virtual Desktop](../../virtual-desktop/index.yml) (formerly Windows Virtual Desktop) | &#x2705; | &#x2705; | | [Azure VMware Solution](../../azure-vmware/index.yml) | &#x2705; | &#x2705; |
This article provides a detailed list of Azure, Dynamics 365, Microsoft 365, and
| [Service Health](../../service-health/index.yml) | &#x2705; | &#x2705; | | [SignalR Service](../../azure-signalr/index.yml) | &#x2705; | &#x2705; | | [Site Recovery](../../site-recovery/index.yml) | &#x2705; | &#x2705; |
-| [Spring Cloud](../../spring-cloud/index.yml) | &#x2705; | &#x2705; |
| [SQL Database](/azure/azure-sql/database/sql-database-paas-overview) | &#x2705; | &#x2705; | | [SQL Server Registry](/sql/sql-server/end-of-support/sql-server-extended-security-updates) | &#x2705; | &#x2705; | | [SQL Server Stretch Database](../../sql-server-stretch-database/index.yml) | &#x2705; | &#x2705; |
azure-government Documentation Government Overview Wwps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-government/documentation-government-overview-wwps.md
recommendations: false Previously updated : 07/25/2022 Last updated : 07/29/2022 # Azure for secure worldwide public sector cloud adoption
Based on customer feedback, Microsoft has started to invest in higher-level [sce
#### *Homomorphic encryption*
-[Homomorphic encryption](https://www.microsoft.com/research/project/homomorphic-encryption/) refers to a special type of encryption technology that allows for computations to be performed on encrypted data, without requiring access to a key needed to decrypt the data. The results of the computation are encrypted and can be revealed only by the owner of the encryption key. In this manner, only the encrypted data are processed in the cloud and only you can reveal the results of the computation.
+[Homomorphic encryption](https://homomorphicencryption.org/introduction/) refers to a special type of encryption technology that allows for computations to be performed on encrypted data, without requiring access to a key needed to decrypt the data. The results of the computation are encrypted and can be revealed only by the owner of the encryption key. In this manner, only the encrypted data are processed in the cloud and only you can reveal the results of the computation.
To help you adopt homomorphic encryption, [Microsoft SEAL](https://www.microsoft.com/research/project/microsoft-seal/) provides a set of encryption libraries that allow computations to be performed directly on encrypted data. This approach enables you to build end-to-end encrypted data storage and compute services where you never need to share your encryption keys with the cloud service. Microsoft SEAL aims to make homomorphic encryption easy to use and available to everyone. It provides a simple and convenient API and comes with several detailed examples demonstrating how the library can be used correctly and securely.
azure-monitor Diagnostics Extension Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/diagnostics-extension-overview.md
See the following articles for details on installing and configuring the diagnos
### Azure Cloud Service (classic) Web and Worker Roles - [Introduction to Cloud Service Monitoring](../../cloud-services/cloud-services-how-to-monitor.md) - [Enabling Azure Diagnostics in Azure Cloud Services](../../cloud-services/cloud-services-dotnet-diagnostics.md)-- [Application Insights for Azure cloud services](../app/cloudservices.md)<br>[Trace the flow of a Cloud Services application with Azure Diagnostics](../../cloud-services/cloud-services-dotnet-diagnostics-trace-flow.md)
+- [Application Insights for Azure cloud services](../app/azure-web-apps-net-core.md)<br>[Trace the flow of a Cloud Services application with Azure Diagnostics](../../cloud-services/cloud-services-dotnet-diagnostics-trace-flow.md)
### Azure Service Fabric - [Monitor and diagnose services in a local machine development setup](../../service-fabric/service-fabric-diagnostics-how-to-monitor-and-diagnose-services-locally.md)
azure-monitor Diagnostics Extension To Application Insights https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/diagnostics-extension-to-application-insights.md
Example configuration of a sink for Application Insights:
- The **ApplicationInsights** element specifies instrumentation key of the Application insights resource where the Azure diagnostics data is sent. - If you don't have an existing Application Insights resource, see [Create a new Application Insights resource](../app/create-new-resource.md) for more information on creating a resource and getting the instrumentation key.
- - If you are developing a Cloud Service with Azure SDK 2.8 and later, this instrumentation key is automatically populated. The value is based on the **APPINSIGHTS_INSTRUMENTATIONKEY** service configuration setting when packaging the Cloud Service project. See [Use Application Insights with Cloud Services](../app/cloudservices.md).
+ - If you are developing a Cloud Service with Azure SDK 2.8 and later, this instrumentation key is automatically populated. The value is based on the **APPINSIGHTS_INSTRUMENTATIONKEY** service configuration setting when packaging the Cloud Service project. See [Use Application Insights with Cloud Services](../app/azure-web-apps-net-core.md).
- The **Channels** element contains one or more **Channel** elements. - The *name* attribute uniquely refers to that channel.
In the previous configuration, the following lines have the following meanings:
- **You cannot send blob data collected by Azure diagnostics extension to Application Insights.** For example, anything specified under the *Directories* node. For Crash Dumps the actual crash dump is sent to blob storage and only a notification that the crash dump was generated is sent to Application Insights. ## Next Steps
-* Learn how to [view your Azure diagnostics information](../app/cloudservices.md) in Application Insights.
+* Learn how to [view your Azure diagnostics information](../app/azure-web-apps-net-core.md) in Application Insights.
* Use [PowerShell](../../cloud-services/cloud-services-diagnostics-powershell.md) to enable the Azure diagnostics extension for your application. * Use [Visual Studio](/visualstudio/azure/vs-azure-tools-diagnostics-for-cloud-services-and-virtual-machines) to enable the Azure diagnostics extension for your application
azure-monitor Diagnostics Extension Versions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/agents/diagnostics-extension-versions.md
Added Storage Type to PublicConfig. StorageType can be *Table*, *Blob*, *TableAn
Added the ability to route to EventHub. ### Diagnostics extension 1.5
-Added the sinks element and the ability to send diagnostics data to [Application Insights](../app/cloudservices.md) making it easier to diagnose issues across your application as well as the system and infrastructure level.
+Added the sinks element and the ability to send diagnostics data to [Application Insights](../app/azure-web-apps-net-core.md) making it easier to diagnose issues across your application as well as the system and infrastructure level.
### Azure SDK 2.6 and diagnostics extension 1.3 For Cloud Service projects in Visual Studio, the following changes were made. (These changes also apply to later versions of Azure SDK.)
azure-monitor Asp Net Dependencies https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/asp-net-dependencies.md
For ASP.NET applications, full SQL query text is collected with the help of byte
| | | | Azure Web App |In your web app control panel, [open the Application Insights pane](../../azure-monitor/app/azure-web-apps.md) and enable SQL Commands under .NET | | IIS Server (Azure VM, on-premises, and so on.) | Either use the [Microsoft.Data.SqlClient](https://www.nuget.org/packages/Microsoft.Data.SqlClient) NuGet package or use the Status Monitor PowerShell Module to [install the Instrumentation Engine](../../azure-monitor/app/status-monitor-v2-api-reference.md#enable-instrumentationengine) and restart IIS. |
-| Azure Cloud Service | Add [startup task to install StatusMonitor](../../azure-monitor/app/cloudservices.md#set-up-status-monitor-to-collect-full-sql-queries-optional) <br> Your app should be onboarded to ApplicationInsights SDK at build time by installing NuGet packages for [ASP.NET](./asp-net.md) or [ASP.NET Core applications](./asp-net-core.md) |
+| Azure Cloud Service | Add [startup task to install StatusMonitor](../../azure-monitor/app/azure-web-apps-net-core.md) <br> Your app should be onboarded to ApplicationInsights SDK at build time by installing NuGet packages for [ASP.NET](./asp-net.md) or [ASP.NET Core applications](./asp-net-core.md) |
| IIS Express | Use the [Microsoft.Data.SqlClient](https://www.nuget.org/packages/Microsoft.Data.SqlClient) NuGet package. | Azure Web Jobs | Use the [Microsoft.Data.SqlClient](https://www.nuget.org/packages/Microsoft.Data.SqlClient) NuGet package.
azure-monitor Cloudservices https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/cloudservices.md
- Title: Application Insights for Azure cloud services | Microsoft Docs
-description: Monitor your web and worker roles effectively with Application Insights
-- Previously updated : 06/02/2022---
-# Application Insights for Azure cloud services
-[Application Insights][start] can monitor [Azure cloud service apps](https://azure.microsoft.com/services/cloud-services/) for availability, performance, failures, and usage by combining data from Application Insights SDKs with [Azure Diagnostics](../agents/diagnostics-extension-overview.md) data from your cloud services. With the feedback you get about the performance and effectiveness of your app in the wild, you can make informed choices about the direction of the design in each development lifecycle.
-
-![Overview dashboard](./media/cloudservices/overview-graphs.png)
--
-## Prerequisites
-Before you begin, you need:
-
-* An [Azure](https://azure.com) subscription.
-
- [Sign in](https://azure.microsoft.com/auth/signin) with your Microsoft account for Windows, Xbox Live, or other Microsoft cloud services.
-
-* Microsoft Azure tools 2.9 or later.
-* Developer Analytics Tools 7.10 or later.
-
-## Get started quickly
-The quickest and easiest way to monitor your cloud service with Application Insights is to choose that option when you publish your service to Azure.
-
-![Example Diagnostics Settings page](./media/cloudservices/azure-cloud-application-insights.png)
-
-This option instruments your app at runtime, giving you all the telemetry that you need to monitor requests, exceptions, and dependencies in your web role. It also monitors performance counters from your worker roles. Any diagnostics traces generated by your app are also sent to Application Insights.
-
-If this option is all you need, you're done.
-
-Your next steps are [viewing metrics from your app](../essentials/metrics-charts.md) and [querying your data with Analytics](../logs/log-query-overview.md).
-
-To monitor performance in the browser, you might also want to set up [availability tests](./monitor-web-app-availability.md) and [add code to your webpages](./javascript.md).
-
-The next sections discuss the following additional options:
-
-* Send data from various components and build configurations to separate resources.
-* Add custom telemetry from your app.
-
-## Sample app instrumented with Application Insights
-In this [sample app](https://github.com/MohanGsk/ApplicationInsights-Home/tree/master/Samples/AzureEmailService), Application Insights is added to a cloud service with two worker roles hosted in Azure.
-
-In the next section, you learn how to adapt your own cloud service project in the same way.
-
-## Plan resources and resource groups
-The telemetry from your app is stored, analyzed, and displayed in an Azure resource of type Application Insights.
-
-Each resource belongs to a resource group. Resource groups are used to manage costs, to grant access to team members, and to deploy updates in a single coordinated transaction. For example, you could [write a script to deploy](../../azure-resource-manager/templates/deploy-powershell.md) an Azure cloud service and its Application Insights monitoring resources all in one operation.
-
-### Resources for components
-
-We recommend that you [add a dimension property to each telemetry item](./api-filtering-sampling.md#addmodify-properties-itelemetryinitializer) that identifies its source role. In this approach, metric charts, such as exceptions, normally show an aggregation of the counts from the various roles, but you can segment the chart by the role identifier, as necessary. You can also filter searches by the same dimension. This alternative makes it a bit easier to view everything at the same time, but it could also lead to some confusion between the roles.
-
-Browser telemetry is usually included in the same resource as its server-side web role.
-
-Put the Application Insights resources for the various components in one resource group. This approach makes it easy to manage them together.
-
-### Separate development, test, and production
-If you are developing custom events for your next feature while the previous version is live, you want to send the development telemetry to a separate Application Insights resource. Otherwise, it can be hard to find your test telemetry among all the traffic from the live site.
-
-To avoid this situation, create separate resources for each build configuration or "stamp" (development, test, production, and so on) of your system. Put the resources for each build configuration in a separate resource group.
-
-To send the telemetry to the appropriate resources, you can set up the Application Insights SDK so that it picks up a different instrumentation key, depending on the build configuration.
-
-Learn how to [dynamically set the instrumentation key](./separate-resources.md#dynamic-ikey) for different stages.
-
-## Create an Application Insights resource for each role
-
-If you've decided to create a separate resource for each role, and perhaps a separate set for each build configuration, it's easiest to create them all in the Application Insights portal. If you create resources a lot, you can [automate the process](./powershell.md).
-
-1. In the [Azure portal][portal], select **New** > **Developer Services** > **Application Insights**.
-
- ![Application Insights pane](./media/cloudservices/01-new.png)
-
-1. In the **Application Type** drop-down list, select **ASP.NET web application**.
-
-Each resource is identified by an instrumentation key. You might need this key later if you want to manually configure or verify the configuration of the SDK.
--
-## Set up Azure Diagnostics for each role
-Set this option to monitor your app with Application Insights. For web roles, this option provides performance monitoring, alerts, diagnostics, and usage analysis. For other roles, you can search and monitor Azure Diagnostics such as restart, performance counters, and calls to System.Diagnostics.Trace.
-
-1. In Visual Studio Solution Explorer, under **\<YourCloudService>** > **Roles**, open the properties of each role.
-
-1. In **Configuration**, select the **Send diagnostics data to Application Insights** check box, and then select the Application Insights resource that you created earlier.
-
-If you have decided to use a separate Application Insights resource for each build configuration, select the configuration first.
-
-![Configure Application Insights](./media/cloudservices/configure-azure-diagnostics.png)
-
-This has the effect of inserting your Application Insights instrumentation keys into the files named *ServiceConfiguration.\*.cscfg*. Here is the [Sample code](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/AzureEmailService/ServiceConfiguration.Cloud.cscfg).
-
-If you want to vary the level of diagnostics information that's sent to Application Insights, you can do so [by editing the *.cscfg* files directly](../agents/diagnostics-extension-to-application-insights.md).
-
-## <a name="sdk"></a>Install the SDK in each project
-With this option, you can add custom business telemetry to any role. The option provides a closer analysis of how your app is used and performs.
-
-In Visual Studio, configure the Application Insights SDK for each cloud app project.
-
-1. To configure **web roles**, right-click the project, and then select **Configure Application Insights** or **Add > Application Insights telemetry**.
-
-1. To configure **worker roles**:
-
- a. Right-click the project, and then select **Manage NuGet Packages**.
-
- b. Add [Application Insights for Windows Servers](https://www.nuget.org/packages/Microsoft.ApplicationInsights.WindowsServer/).
-
-1. To configure the SDK to send data to the Application Insights resource:
-
- a. In a suitable startup function, set the instrumentation key from the configuration setting in the *.cscfg* file:
-
- ```csharp
- TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
- configuration.InstrumentationKey = RoleEnvironment.GetConfigurationSettingValue("APPINSIGHTS_INSTRUMENTATIONKEY");
- var telemetryClient = new TelemetryClient(configuration);
- ```
-
- b. Repeat "step a" for each role in your app. See the examples:
-
- * [Web role](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/MvcWebRole/Global.asax.cs#L27)
- * [Worker role](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/WorkerRoleA.cs#L232)
- * [For webpages](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/MvcWebRole/Views/Shared/_Layout.cshtml#L13)
-
-1. Set the *ApplicationInsights.config* file to be copied always to the output directory.
-
- A message in the *.config* file asks you to place the instrumentation key there. However, for cloud apps, it's better to set it from the *.cscfg* file. This approach ensures that the role is correctly identified in the portal.
-
-## Set up Status Monitor to collect full SQL Queries (optional)
-
-This step is only needed if you want to capture full SQL queries on .NET Framework.
-
-1. In `\*.csdef` file Add [startup task](../../cloud-services/cloud-services-startup-tasks.md) for each role similar to
-
- ```xml
- <Startup>
- <Task commandLine="AppInsightsAgent\InstallAgent.bat" executionContext="elevated" taskType="simple">
- <Environment>
- <Variable name="ApplicationInsightsAgent.DownloadLink" value="http://go.microsoft.com/fwlink/?LinkID=522371" />
- <Variable name="RoleEnvironment.IsEmulated">
- <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
- </Variable>
- </Environment>
- </Task>
- </Startup>
- ```
-
-2. Download [InstallAgent.bat](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/AppInsightsAgent/InstallAgent.bat) and [InstallAgent.ps1](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/AppInsightsAgent/InstallAgent.ps1), put them into the `AppInsightsAgent` folder on each role project. Make sure to copy them to the output directory through Visual Studio file properties or build scripts.
-
-3. On all Worker Roles, add environment variables:
-
- ```xml
- <Environment>
- <Variable name="COR_ENABLE_PROFILING" value="1" />
- <Variable name="COR_PROFILER" value="{324F817A-7420-4E6D-B3C1-143FBED6D855}" />
- <Variable name="MicrosoftInstrumentationEngine_Host" value="{CA487940-57D2-10BF-11B2-A3AD5A13CBC0}" />
- </Environment>
- ```
-
-## Run and publish the app
-
-1. Run your app, and sign in to Azure.
-
-1. Open the Application Insights resources that you created.
-
- Individual data points are displayed in [Search][diagnostic], and aggregated data is displayed in [Metric Explorer](../essentials/metrics-charts.md).
-
-1. Add more telemetry (see the next sections) and then publish your app to get live diagnostics and usage feedback.
-
-If there is no data, do the following:
-
-1. To view individual events, open the [Search][diagnostic] tile.
-1. In the app, open various pages so that it generates some telemetry.
-1. Wait a few seconds, and then click **Refresh**.
-
-## View Azure Diagnostics events
-You can find the [Azure Diagnostics](../agents/diagnostics-extension-overview.md) information in Application Insights in the following locations:
-
-* Performance counters are displayed as custom metrics.
-* Windows event logs are shown as traces and custom events.
-* Application logs, ETW logs, and any diagnostics infrastructure logs appear as traces.
-
-To view performance counters and counts of events, open [Metrics Explorer](../essentials/metrics-charts.md) and add the following chart:
-
-![Azure Diagnostics data](./media/cloudservices/23-wad.png)
-
-To search across the various trace logs that are sent by Azure Diagnostics, use [Search](./diagnostic-search.md) or an [Analytics query](../logs/log-analytics-tutorial.md). For example, suppose you have an unhandled exception that has caused a role to crash and recycle. That information would show up in the Application channel of Windows Event Log. You can use Search to view the Windows Event Log error and get the full stack trace for the exception. Doing so helps you find the root cause of the issue.
-
-![Azure Diagnostics search](./media/cloudservices/25-wad.png)
-
-## More telemetry
-The next sections discuss how to get additional telemetry from various aspects of your app.
-
-## Track requests from worker roles
-In web roles, the requests module automatically collects data about HTTP requests. For examples of how you can override the default collection behavior, see the [sample MVCWebRole](https://github.com/MohanGsk/ApplicationInsights-Home/tree/master/Samples/AzureEmailService/MvcWebRole).
-
-You can capture the performance of calls to worker roles by tracking them in the same way as HTTP requests. In Application Insights, the Request telemetry type measures a unit of named server-side work that can be timed and can independently succeed or fail. Although HTTP requests are captured automatically by the SDK, you can insert your own code to track requests to worker roles.
-
-See the two sample worker roles instrumented to report requests:
-* [WorkerRoleA](https://github.com/MohanGsk/ApplicationInsights-Home/tree/master/Samples/AzureEmailService/WorkerRoleA)
-* [WorkerRoleB](https://github.com/MohanGsk/ApplicationInsights-Home/tree/master/Samples/AzureEmailService/WorkerRoleB)
-
-## Exceptions
-For information about how to collect unhandled exceptions from various web app types, see [Monitoring exceptions in Application Insights](./asp-net-exceptions.md).
-
-The sample web role has MVC5 and Web API 2 controllers. The unhandled exceptions from the two are captured with the following handlers:
-
-* [AiHandleErrorAttribute](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/MvcWebRole/Telemetry/AiHandleErrorAttribute.cs) set up for MVC5 controllers [as shown in this example](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/MvcWebRole/App_Start/FilterConfig.cs#L12)
-* [AiWebApiExceptionLogger](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/MvcWebRole/Telemetry/AiWebApiExceptionLogger.cs) set up for Web API 2 controllers [as shown in this example](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/MvcWebRole/App_Start/WebApiConfig.cs#L25)
-
-For worker roles, you can track exceptions in two ways:
-
-* Use TrackException(ex).
-* If you have added the Application Insights trace listener NuGet package, you can use System.Diagnostics.Trace to log exceptions [as shown in this example](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/WorkerRoleA.cs#L107).
-
-## Performance counters
-The following counters are collected by default:
-
-* \Process(??APP_WIN32_PROC??)\% Processor Time
-* \Memory\Available Bytes
-* \.NET CLR Exceptions(??APP_CLR_PROC??)\# of Exceps Thrown / sec
-* \Process(??APP_WIN32_PROC??)\Private Bytes
-* \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec
-* \Processor(_Total)\% Processor Time
-
-For web roles, these counters are also collected:
-
-* \ASP.NET Applications(??APP_W3SVC_PROC??)\Requests/Sec
-* \ASP.NET Applications(??APP_W3SVC_PROC??)\Request Execution Time
-* \ASP.NET Applications(??APP_W3SVC_PROC??)\Requests In Application Queue
-
-You can specify additional custom or other Windows performance counters by editing *ApplicationInsights.config* [as shown in this example](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/ApplicationInsights.config#L14).
-
- ![Performance counters](./media/cloudservices/002-servers.png)
-
-## Correlated telemetry for worker roles
-For a rich diagnostics experience, you can view what led to a failed or high latency request. With web roles, the SDK automatically sets up a correlation between related telemetry.
-
-To achieve this view for worker roles, you can use a custom telemetry initializer to set a common Operation.Id context attribute for all the telemetry. Doing so lets you view at a glance whether the latency or failure issue was caused by a dependency or your code.
-
-Here's how:
-
-* Set the correlationId into a CallContext [as shown in this example](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/WorkerRoleA.cs#L36). In this case, we are using the Request ID as the correlationId.
-* Add a custom TelemetryInitializer implementation, to set the Operation.Id to the correlationId that was set previously. For an example, see [ItemCorrelationTelemetryInitializer](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/Telemetry/ItemCorrelationTelemetryInitializer.cs#L13).
-* Add the custom telemetry initializer. You could do so in the *ApplicationInsights.config* file or in code [as shown in this example](https://github.com/MohanGsk/ApplicationInsights-Home/blob/master/Samples/AzureEmailService/WorkerRoleA/WorkerRoleA.cs#L233).
-
-## Client telemetry
-To get browser-based telemetry, such as page view counts, page load times, or script exceptions, and to write custom telemetry in your page scripts, see [Add the JavaScript SDK to your webpages][client].
-
-## Availability tests
-To make sure your app stays live and responsive, [Set up web tests][availability].
-
-## Display everything together
-For an overall picture of your system, you can display the key monitoring charts together on one [dashboard](./overview-dashboard.md). For example, you could pin the request and failure counts of each role.
-
-If your system uses other Azure services, such as Stream Analytics, include their monitoring charts as well.
-
-If you have a client mobile app, use [App Center](../app/mobile-center-quickstart.md). Create queries in [Analytics](../logs/log-query-overview.md) to display the event counts, and pin them to the dashboard.
-
-## Example
-[The example](https://github.com/MohanGsk/ApplicationInsights-Home/tree/master/Samples/AzureEmailService) monitors a service that has a web role and two worker roles.
-
-## Exception "method not found" on running in Azure cloud services
-Did you build for .NET [LTS](https://dotnet.microsoft.com/platform/support/policy/dotnet-core)? Earlier versions aren't automatically supported in Azure cloud services roles. [Install .NET LTS on each role](../../cloud-services/cloud-services-dotnet-install-dotnet.md) before running your app.
-
-## Next steps
-* [Configure sending Azure Diagnostics to Application Insights](../agents/diagnostics-extension-to-application-insights.md)
-* [Automatically create Application Insights resources](./powershell.md)
-* [Automate Azure Diagnostics](./powershell-azure-diagnostics.md)
-* [Azure Functions](https://github.com/christopheranderson/azure-functions-app-insights-sample)
-
-[api]: ./api-custom-events-metrics.md
-[availability]: ./monitor-web-app-availability.md
-[azure]: ./app-insights-overview.md
-[client]: ./javascript.md
-[diagnostic]: ./diagnostic-search.md
-[netlogs]: ./asp-net-trace-logs.md
-[portal]: https://portal.azure.com/
-[qna]: ../faq.yml
-[redfield]: ./status-monitor-v2-overview.md
-[start]: ./app-insights-overview.md
azure-monitor Platforms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/platforms.md
* [Azure VM and Azure virtual machine scale sets](./azure-vm-vmss-apps.md) * [Azure App Service](./azure-web-apps.md) * [Azure Functions](../../azure-functions/functions-monitoring.md)
-* [Azure Cloud Services](./cloudservices.md), including both web and worker roles
+* [Azure Cloud Services](./azure-web-apps-net-core.md), including both web and worker roles
### Auto-instrumentation (enable without code changes) * [ASP.NET - for web apps hosted with IIS](./status-monitor-v2-overview.md)
azure-monitor Powershell Azure Diagnostics https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/powershell-azure-diagnostics.md
Remove-AzureServiceDiagnosticsExtension -ServiceName "MyService" -Role "WebRole"
## See also
-* [Monitor Azure Cloud Services apps with Application Insights](./cloudservices.md)
+* [Monitor Azure Cloud Services apps with Application Insights](./azure-web-apps-net-core.md)
* [Send Azure Diagnostics to Application Insights](../agents/diagnostics-extension-to-application-insights.md)
azure-monitor Separate Resources https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/app/separate-resources.md
When you are developing the next version of a web application, you don't want to mix up the [Application Insights](../../azure-monitor/app/app-insights-overview.md) telemetry from the new version and the already released version. To avoid confusion, send the telemetry from different development stages to separate Application Insights resources, with separate instrumentation keys (ikeys). To make it easier to change the instrumentation key as a version moves from one stage to another, it can be useful to set the ikey in code instead of in the configuration file.
-(If your system is an Azure Cloud Service, there's [another method of setting separate ikeys](../../azure-monitor/app/cloudservices.md).)
+(If your system is an Azure Cloud Service, there's [another method of setting separate ikeys](../../azure-monitor/app/azure-web-apps-net-core.md).)
[!INCLUDE [azure-monitor-log-analytics-rebrand](../../../includes/azure-monitor-instrumentation-key-deprecation.md)]
azure-monitor Autoscale Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/autoscale/autoscale-overview.md
You can set up autoscale via
| API Management service|[Automatically scale an Azure API Management instance](../../api-management/api-management-howto-autoscale.md) | Azure Data Explorer Clusters|[Manage Azure Data Explorer clusters scaling to accommodate changing demand](/azure/data-explorer/manage-cluster-horizontal-scaling)| | Logic Apps |[Adding integration service environment (ISE) capacity](../../logic-apps/ise-manage-integration-service-environment.md#add-ise-capacity)|
-| Spring Cloud |[Set up autoscale for microservice applications](../../spring-cloud/how-to-setup-autoscale.md)|
+| Spring Cloud |[Set up autoscale for microservice applications](../../spring-apps/how-to-setup-autoscale.md)|
| Service Bus |[Automatically update messaging units of an Azure Service Bus namespace](../../service-bus-messaging/automate-update-messaging-units.md)| | Azure SignalR Service | [Automatically scale units of an Azure SignalR service](../../azure-signalr/signalr-howto-scale-autoscale.md) | | Media Services | [Autoscaling in Media Services](/azure/media-services/latest/release-notes#autoscaling) |
azure-monitor Change Analysis Enable https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/change/change-analysis-enable.md
ms.contributor: cawa Previously updated : 07/11/2022 Last updated : 07/29/2022
The Change Analysis service:
- Easily navigate through all resource changes. - Identify relevant changes in the troubleshooting or monitoring context.
-Register the `Microsoft.ChangeAnalysis` resource provider with an Azure Resource Manager subscription to make the tracked properties and proxied settings change data available. The `Microsoft.ChangeAnalysis` resource is automatically registered as you either:
+Register the `Microsoft.ChangeAnalysis` resource provider with an Azure Resource Manager subscription to make the resource properties and configuration change data available. The `Microsoft.ChangeAnalysis` resource is automatically registered as you either:
- Enter any UI entry point, like the Web App **Diagnose and Solve Problems** tool, or - Bring up the Change Analysis standalone tab.
azure-monitor Change Analysis Troubleshoot https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/change/change-analysis-troubleshoot.md
ms.contributor: cawa Previously updated : 03/21/2022 Last updated : 07/28/2022
If your changes still don't show after 6 hours, contact the [Change Analysis hel
### Failed to query Microsoft.ChangeAnalysis resource provider. Often, this message includes: `Azure Lighthouse subscription is not supported, the changes are only available in the subscription's home tenant`.
-Currently, the Change Analysis resource provider is limited to registration through Azure Lighthouse subscription for users outside of home tenant. We are working on addressing this limitation.
+Azure Lighthouse allows for cross-tenant resource administration. However, cross-tenant support needs to be built for each resource provider. Currently, Change Analysis has not built this support. If you're signed into one tenant, you can't query for resource or subscription changes whose home is in another tenant.
-If this is a blocking issue for you, we can provide a workaround that involves creating a service principal and explicitly assigning the role to allow the access. Contact the [Change Analysis help team](mailto:changeanalysishelp@microsoft.com) to learn more about it.
+If this is a blocking issue for you, we'd like to hear your feedback! [Contact the Change Analysis help team](mailto:changeanalysishelp@microsoft.com) to describe how you're trying to use Change Analysis.
## An error occurred while getting changes. Please refresh this page or come back later to view changes.
azure-monitor Change Analysis Visualizations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/change/change-analysis-visualizations.md
ms.contributor: cawa Previously updated : 07/11/2022 Last updated : 07/28/2022
# Visualizations for Change Analysis in Azure Monitor (preview)
-## Standalone UI
+Change Analysis provides data for various management and troubleshooting scenarios to help you understand what changes to your application might have caused the issues. You can view the Change Analysis data through several channels:
-Change Analysis lives in a standalone pane under Azure Monitor, where you can view all changes and application dependency/resource insights. You can access Change Analysis through a couple of entry points:
+## The Change Analysis standalone UI
+
+You can access Change Analysis in a standalone pane under Azure Monitor, where you can view all changes and application dependency/resource insights. You can access Change Analysis through a couple of entry points:
In the Azure portal, search for Change Analysis to launch the experience.
Send any feedback to the [Change Analysis team](mailto:changeanalysisteam@micros
:::image type="content" source="./media/change-analysis/change-analysis-feedback.png" alt-text="Screenshot of feedback button in Change Analysis tab"::: - ### Multiple subscription support The UI supports selecting multiple subscriptions to view resource changes. Use the subscription filter:
The UI supports selecting multiple subscriptions to view resource changes. Use t
## Diagnose and solve problems tool
-From your resource's overview page in Azure portal, select **Diagnose and solve problems** the left menu. As you enter the Diagnose and Solve Problems tool, the **Microsoft.ChangeAnalysis** resource provider will automatically be registered.
+From your resource's overview page in Azure portal, you can view change data by selecting **Diagnose and solve problems** the left menu. As you enter the Diagnose and Solve Problems tool, the **Microsoft.ChangeAnalysis** resource provider will automatically be registered.
### Diagnose and solve problems tool for Web App
You can view Change Analysis data for [multiple Azure resources](./change-analys
## Activity Log change history Use the [View change history](../essentials/activity-log.md#view-change-history) feature to call the Azure Monitor Change Analysis service backend to view changes associated with an operation. Changes returned include:+ - Resource level changes from [Azure Resource Graph](../../governance/resource-graph/overview.md). - Resource properties from [Azure Resource Manager](../../azure-resource-manager/management/overview.md). - In-guest changes from PaaS services, such as App Services web app.
You can also drill to Change Analysis logs via a chart you've created or pinned
## Next steps -- Learn how to [troubleshoot problems in Change Analysis](change-analysis-troubleshoot.md)
+- Learn how to [troubleshoot problems in Change Analysis](change-analysis-troubleshoot.md)
azure-monitor Change Analysis https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/change/change-analysis.md
ms.contributor: cawa Previously updated : 06/29/2022 Last updated : 07/29/2022
Azure Monitor Change Analysis service supports resource property level changes i
## Data sources Azure Monitor's Change Analysis queries for:-- Azure Resource Manager tracked properties.-- Proxied configurations.
+- Azure Resource Manager resource properties.
+- Configuration changes.
- Web app in-guest changes. Change Analysis also tracks resource dependency changes to diagnose and monitor an application end-to-end.
-### Azure Resource Manager tracked properties changes
+### Azure Resource Manager resource properties changes
Using [Azure Resource Graph](../../governance/resource-graph/overview.md), Change Analysis provides a historical record of how the Azure resources that host your application have changed over time. The following tracked settings can be detected: - Managed identities - Platform OS upgrade - Hostnames
-### Azure Resource Manager proxied setting changes
+### Azure Resource Manager configuration changes
Unlike Azure Resource Graph, Change Analysis securely queries and computes IP Configuration rules, TLS settings, and extension versions to provide more change details in the app.
azure-monitor Container Insights Enable Arc Enabled Clusters https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/containers/container-insights-enable-arc-enabled-clusters.md
- To view the monitoring data, you need to have [Log Analytics Reader](../logs/manage-access.md#azure-rbac) role assignment on the Log Analytics workspace. - The following endpoints need to be enabled for outbound access in addition to the ones mentioned under [connecting a Kubernetes cluster to Azure Arc](../../azure-arc/kubernetes/quickstart-connect-cluster.md#meet-network-requirements).
+ **Azure public cloud**
+ | Endpoint | Port | |-|| | `*.ods.opinsights.azure.com` | 443 |
| `*.monitoring.azure.com` | 443 | | `login.microsoftonline.com` | 443 |
+ The following table lists the additional firewall configuration required for managed identity authentication.
+
+ |Agent resource| Purpose | Port |
+ |--|||
+ | `global.handler.control.monitor.azure.com` | Access control service | 443 |
+ | `<cluster-region-name>.handler.control.monitor.azure.com` | Fetch data collection rules for specific AKS cluster | 443 |
+
+ **Azure Government cloud**
+ If your Azure Arc-enabled Kubernetes resource is in Azure US Government environment, following endpoints need to be enabled for outbound access: | Endpoint | Port |
| `*.ods.opinsights.azure.us` | 443 | | `*.oms.opinsights.azure.us` | 443 | | `dc.services.visualstudio.com` | 443 |
-
+
+ The following table lists the additional firewall configuration required for managed identity authentication.
+
+ |Agent resource| Purpose | Port |
+ |--|||
+ | `global.handler.control.monitor.azure.cn` | Access control service | 443 |
+ | `<cluster-region-name>.handler.control.monitor.azure.cn` | Fetch data collection rules for specific AKS cluster | 443 |
+ - If you are using an Arc enabled cluster on AKS, and previously installed [monitoring for AKS](./container-insights-enable-existing-clusters.md), please ensure that you have [disabled monitoring](./container-insights-optout.md) before proceeding to avoid issues during the extension install
Run the following commands to locate the full Azure Resource Manager identifier
>[!TIP] > This `id` can also be found in the *Overview* blade of the Log Analytics workspace through the Azure portal.
-## Create extension instance using Azure CLI
+## Create extension instance
+
+## [CLI](#tab/create-cli)
### Option 1 - With default values
This option uses the following defaults:
az k8s-extension create --name azuremonitor-containers --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers ```
+To use [managed identity authentication (preview)](container-insights-onboard.md#authentication), add the `configuration-settings` parameter as in the following:
+
+```azurecli
+az k8s-extension create --name azuremonitor-containers --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers --configuration-settings omsagent.useAADAuth=true
+```
++ ### Option 2 - With existing Azure Log Analytics workspace You can use an existing Azure Log Analytics workspace in any subscription on which you have *Contributor* or a more permissive role assignment.
If the Azure Arc-enabled Kubernetes cluster is on Azure Stack Edge, then a custo
az k8s-extension create --name azuremonitor-containers --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers --configuration-settings omsagent.logsettings.custommountpath=/home/data/docker ``` + >[!NOTE] > If you are explicitly specifying the version of the extension to be installed in the create command, then ensure that the version specified is >= 2.8.2.
-## Create extension instance using Azure portal
+## [Azure portal](#tab/create-portal)
>[!IMPORTANT] > If you are deploying Azure Monitor on a Kubernetes cluster running on top of Azure Stack Edge, then the Azure CLI option needs to be followed instead of the Azure portal option as a custom mount path needs to be set for these clusters.
az k8s-extension create --name azuremonitor-containers --cluster-name <cluster-n
4. You can now choose the [Log Analytics workspace](../logs/quick-create-workspace.md) to send your metrics and logs data to.
-5. Select the 'Configure' button to deploy the Azure Monitor Container Insights cluster extension.
+5. To use managed identity authentication, select the *Use managed identity (preview)* checkbox.
+
+6. Select the 'Configure' button to deploy the Azure Monitor Container Insights cluster extension.
### Onboarding from Azure Monitor blade
az k8s-extension create --name azuremonitor-containers --cluster-name <cluster-n
3. Click on the 'Enable' link next to the cluster that you want to enable monitoring for.
-4. Choose the Log Analytics workspace and select the 'Configure' button to continue.
+4. Choose the Log Analytics workspace.
-## Create extension instance using Azure Resource Manager
+5. To use managed identity authentication, select the *Use managed identity (preview)* checkbox.
+
+6. Select the 'Configure' button to continue.
+
+## [Resource Manager](#tab/create-arm)
1. Download Azure Resource Manager template and parameter:
az k8s-extension create --name azuremonitor-containers --cluster-name <cluster-n
az deployment group create --resource-group <resource-group> --template-file ./arc-k8s-azmon-extension-arm-template.json --parameters @./arc-k8s-azmon-extension-arm-template-params.json ``` ++ ## Verify extension installation status Once you have successfully created the Azure Monitor extension for your Azure Arc-enabled Kubernetes cluster, you can additionally check the status of installation using the Azure portal or CLI. Successful installations should show the status as 'Installed'. If your status is showing 'Failed' or remains in the 'Pending' state for long periods of time, proceed to the Troubleshooting section below.
-### Azure portal
+### [Azure portal](#tab/verify-portal)
1. In the Azure portal, select the Azure Arc-enabled Kubernetes cluster with the extension installing 2. Select the 'Extensions' item under the 'Settings' section of the resource blade 3. You should see an extension with the name 'azuremonitor-containers' listed, with the listed status in the 'Install status' column
-### Azure CLI
+### [CLI](#tab/verify-cli)
Run the following command to show the latest status of the `Microsoft.AzureMonitor.Containers` extension ```azurecli az k8s-extension show --name azuremonitor-containers --cluster-name <cluster-name> --resource-group <resource-group> --cluster-type connectedClusters -n azuremonitor-containers ``` ++
+## Migrate to managed identity authentication (preview)
+Use the flowing guidance to migrate an existing extension instance to managed identity authentication (preview).
+
+## [CLI](#tab/migrate-cli)
+First retrieve the Log Analytics workspace configured for Container insights extension.
+
+```cli
+az k8s-extension show --name azuremonitor-containers --cluster-name \<cluster-name\> --resource-group \<resource-group\> --cluster-type connectedClusters -n azuremonitor-containers
+```
+
+Enable Container insights extension with managed identity authentication option using the workspace returned in the first step.
+
+```cli
+az k8s-extension create --name azuremonitor-containers --cluster-name \<cluster-name\> --resource-group \<resource-group\> --cluster-type connectedClusters --extension-type Microsoft.AzureMonitor.Containers --configuration-settings omsagent.useAADAuth=true logAnalyticsWorkspaceResourceID=\<workspace-resource-id\>
+```
+
+## [Resource Manager](#tab/migrate-arm)
++
+1. Download the template at [https://aka.ms/arc-k8s-azmon-extension-msi-arm-template](https://aka.ms/arc-k8s-azmon-extension-msi-arm-template) and save it as **arc-k8s-azmon-extension-msi-arm-template.json**.
+
+2. Download the parameter file at [https://aka.ms/arc-k8s-azmon-extension-msi-arm-template-params](https://aka.ms/arc-k8s-azmon-extension-msi-arm-template) and save it as **arc-k8s-azmon-extension-msi-arm-template-params.json**.
+
+3. Edit the values in the parameter file.
+
+ - For **workspaceDomain**, use *opinsights.azure.com* for Azure public cloud and *opinsights.azure.us* for Azure Government cloud.
+ - Specify the tags in the **resourceTagValues** parameter if you want to use any Azure tags on the Azure resources that will be created as part of the Container insights extension.
+
+4. Deploy the template to create Container Insights extension.
+
+```cli
+az login
+az account set --subscription "Subscription Name"
+az deployment group create --resource-group <resource-group> --template-file ./arc-k8s-azmon-extension-msi-arm-template.json --parameters @./arc-k8s-azmon-extension-msi-arm-template-params.json
+```
+++ ## Delete extension instance The following command only deletes the extension instance, but doesn't delete the Log Analytics workspace. The data within the Log Analytics resource is left intact.
azure-monitor Container Insights Enable Existing Clusters https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/containers/container-insights-enable-existing-clusters.md
-# Enable monitoring of Azure Kubernetes Service (AKS) cluster already deployed
+# Enable monitoring for existing Azure Kubernetes Service (AKS) cluster
This article describes how to set up Container insights to monitor managed Kubernetes cluster hosted on [Azure Kubernetes Service](../../aks/index.yml) that have already been deployed in your subscription. If you're connecting an existing AKS cluster to an Azure Log Analytics workspace in another subscription, the Microsoft.ContainerService resource provider must be registered in the subscription in which the Log Analytics workspace was created. For more information, see [Register resource provider](../../azure-resource-manager/management/resource-providers-and-types.md#register-resource-provider).
-## Enable using Azure CLI
+
+## [CLI](#tab/azure-cli)
+
+> [!NOTE]
+> Azure CLI version 2.39.0 or higher required for managed identity authentication.
The following step enables monitoring of your AKS cluster using Azure CLI. In this example, you are not required to pre-create or specify an existing workspace. This command simplifies the process for you by creating a default workspace in the default resource group of the AKS cluster subscription if one does not already exist in the region. The default workspace created resembles the format of *DefaultWorkspace-\<GUID>-\<Region>*.
If you would rather integrate with an existing workspace, perform the following
provisioningState : Succeeded ```
-## Enable using Terraform
+## [Terraform](#tab/terraform)
+To enable monitoring using Terraform, do the following:
1. Add the **oms_agent** add-on profile to the existing [azurerm_kubernetes_cluster resource](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/kubernetes_cluster)
If you would rather integrate with an existing workspace, perform the following
3. The metrics are not collected by default through Terraform, so once onboarded, there is an additional step to assign the monitoring metrics publisher role, which is required to [enable the metrics](./container-insights-update-metrics.md#update-one-cluster-by-using-the-azure-cli).
-## Enable from Azure Monitor in the portal
+## [Azure Monitor portal](#tab/portal-azure-monitor)
To enable monitoring of your AKS cluster in the Azure portal from Azure Monitor, do the following:
To enable monitoring of your AKS cluster in the Azure portal from Azure Monitor,
>[!NOTE] >If you want to create a new Log Analytics workspace for storing the monitoring data from the cluster, follow the instructions in [Create a Log Analytics workspace](../logs/quick-create-workspace.md). Be sure to create the workspace in the same subscription that the AKS container is deployed to.
+6. Select **Use managed identity** if you want to use [managed identity authentication with the Azure Monitor agent](container-insights-onboard.md#authentication).
+ After you've enabled monitoring, it might take about 15 minutes before you can view health metrics for the cluster.
-## Enable directly from AKS cluster in the portal
+## [AKS portal](#tab/portal-aks)
To enable monitoring directly from one of your AKS clusters in the Azure portal, do the following:
To enable monitoring directly from one of your AKS clusters in the Azure portal,
>[!NOTE] >If you want to create a new Log Analytics workspace for storing the monitoring data from the cluster, follow the instructions in [Create a Log Analytics workspace](../logs/quick-create-workspace.md). Be sure to create the workspace in the same subscription that the AKS container is deployed to.
+6. Select **Use managed identity** if you want to use [managed identity authentication with the Azure Monitor agent](container-insights-onboard.md#authentication).
++ After you've enabled monitoring, it might take about 15 minutes before you can view operational data for the cluster.
-## Enable using an Azure Resource Manager template
+## [Resource Manager template](#tab/arm)
+ This method includes two JSON templates. One template specifies the configuration to enable monitoring, and the other contains parameter values that you configure to specify the following:
This method includes two JSON templates. One template specifies the configuratio
>[!NOTE] >The template needs to be deployed in the same resource group as the cluster.
->
-The Log Analytics workspace has to be created before you enable monitoring using Azure PowerShell or CLI. To create the workspace, you can set it up through [Azure Resource Manager](../logs/resource-manager-workspace.md), through [PowerShell](../logs/powershell-workspace-configuration.md?toc=%2fpowershell%2fmodule%2ftoc.json), or in the [Azure portal](../logs/quick-create-workspace.md).
-If you are unfamiliar with the concept of deploying resources by using a template, see:
+### Prerequisites
+The Log Analytics workspace must be created before you deploy the Resource Manager template.
-* [Deploy resources with Resource Manager templates and Azure PowerShell](../../azure-resource-manager/templates/deploy-powershell.md)
-* [Deploy resources with Resource Manager templates and the Azure CLI](../../azure-resource-manager/templates/deploy-cli.md)
+### Create or download templates
-If you choose to use the Azure CLI, you first need to install and use the CLI locally. You must be running the Azure CLI version 2.0.59 or later. To identify your version, run `az --version`. If you need to install or upgrade the Azure CLI, see [Install the Azure CLI](/cli/azure/install-azure-cli).
+**If you want to enable [managed identity authentication (preview)](container-insights-onboard.md#authentication)**
+
+1. Download the template at [https://aka.ms/aks-enable-monitoring-msi-onboarding-template-file](https://aka.ms/aks-enable-monitoring-msi-onboarding-template-file) and save it as **existingClusterOnboarding.json**.
+
+2. Download the parameter file at [https://aka.ms/aks-enable-monitoring-msi-onboarding-template-parameter-file](https://aka.ms/aks-enable-monitoring-msi-onboarding-template-parameter-file) and save it as **existingClusterParam.json**.
+
+3. Edit the values in the parameter file.
+
+ - For **aksResourceId** and **aksResourceLocation**, use the values on the **AKS Overview** page for the AKS cluster.
+ - For **workspaceResourceId**, use the resource ID of your Log Analytics workspace.
+ - For **resourceTagValues**, match the existing tag values specified for the existing Container insights extension DCR of the cluster and the name of the data collection rule, which will be MSCI-\<clusterName\>-\<clusterRegion\> and this resource created in Log Analytics Workspace Resource Group. If this first-time onboarding, you can set the arbitrary tag values.
-### Create and execute a template
-1. Copy and paste the following JSON syntax into your file:
+**If you don't want to enable [managed identity authentication (preview)](container-insights-onboard.md#authentication)**
+
+1. Save the following JSON as **existingClusterOnboarding.json**.
```json {
If you choose to use the Azure CLI, you first need to install and use the CLI lo
} ```
-2. Save this file as **existingClusterOnboarding.json** to a local folder.
-
-3. Paste the following JSON syntax into your file:
+2. Save the following JSON as **existingClusterParam.json**.
```json {
If you choose to use the Azure CLI, you first need to install and use the CLI lo
} ```
-4. Edit the values for **aksResourceId** and **aksResourceLocation** using the values on the **AKS Overview** page for the AKS cluster. The value for **workspaceResourceId** is the full resource ID of your Log Analytics workspace, which includes the workspace name.
+2. Download the parameter file at [https://aka.ms/aks-enable-monitoring-msi-onboarding-template-parameter-file](https://aka.ms/aks-enable-monitoring-msi-onboarding-template-parameter-file) and save as **existingClusterParam.json**.
- Edit the values for **aksResourceTagValues** to match the existing tag values specified for the AKS cluster.
+3. Edit the values in the parameter file.
-5. Save this file as **existingClusterParam.json** to a local folder.
+ - For **aksResourceId** and **aksResourceLocation**, use the values on the **AKS Overview** page for the AKS cluster.
+ - For **workspaceResourceId**, use the resource ID of your Log Analytics workspace.
+ - For **aksResourceTagValues**, use the existing tag values specified for the AKS cluster.
-6. You are ready to deploy this template.
- * To deploy with Azure PowerShell, use the following commands in the folder that contains the template:
+### Deploy template
- ```powershell
- New-AzResourceGroupDeployment -Name OnboardCluster -ResourceGroupName <ResourceGroupName> -TemplateFile .\existingClusterOnboarding.json -TemplateParameterFile .\existingClusterParam.json
- ```
+If you are unfamiliar with the concept of deploying resources by using a template, see:
- The configuration change can take a few minutes to complete. When it's completed, a message is displayed that's similar to the following and includes the result:
+* [Deploy resources with Resource Manager templates and Azure PowerShell](../../azure-resource-manager/templates/deploy-powershell.md)
+* [Deploy resources with Resource Manager templates and the Azure CLI](../../azure-resource-manager/templates/deploy-cli.md)
- ```output
- provisioningState : Succeeded
- ```
+If you choose to use the Azure CLI, you first need to install and use the CLI locally. You must be running the Azure CLI version 2.0.59 or later. To identify your version, run `az --version`. If you need to install or upgrade the Azure CLI, see [Install the Azure CLI](/cli/azure/install-azure-cli).
- * To deploy with Azure CLI, run the following commands:
- ```azurecli
- az login
- az account set --subscription "Subscription Name"
- az deployment group create --resource-group <ResourceGroupName> --template-file ./existingClusterOnboarding.json --parameters @./existingClusterParam.json
- ```
+#### To deploy with Azure PowerShell:
- The configuration change can take a few minutes to complete. When it's completed, a message is displayed that's similar to the following and includes the result:
+```powershell
+New-AzResourceGroupDeployment -Name OnboardCluster -ResourceGroupName <ResourceGroupName> -TemplateFile .\existingClusterOnboarding.json -TemplateParameterFile .\existingClusterParam.json
+```
- ```output
- provisioningState : Succeeded
- ```
+The configuration change can take a few minutes to complete. When it's completed, a message is displayed that's similar to the following and includes the result:
- After you've enabled monitoring, it might take about 15 minutes before you can view health metrics for the cluster.
+```output
+provisioningState : Succeeded
+```
+
+#### To deploy with Azure CLI, run the following commands:
+
+```azurecli
+az login
+az account set --subscription "Subscription Name"
+az deployment group create --resource-group <ResourceGroupName> --template-file ./existingClusterOnboarding.json --parameters @./existingClusterParam.json
+```
+
+The configuration change can take a few minutes to complete. When it's completed, a message is displayed that's similar to the following and includes the result:
+
+```output
+provisioningState : Succeeded
+```
+
+After you've enabled monitoring, it might take about 15 minutes before you can view health metrics for the cluster.
++ ## Verify agent and solution deployment
After a few minutes, the command completes and returns JSON-formatted informatio
} ```
+## Migrate to managed identity authentication
+
+### Existing clusters with service principal
+AKS Clusters with service principal must first disable monitoring and then upgrade to managed identity. Only Azure public cloud, Azure China cloud, and Azure Government cloud are currently supported for this migration.
++
+1. Disable monitoring with the following command:
+
+ ```cli
+ az aks disable-addons -a monitoring -g <resource-group-name> -n <cluster-name> --workspace-resource-id <workspace-resource-id>
+ ```
+
+2. Upgrade cluster to system managed identity with the following command:
+
+ ```cli
+ az aks update -g <resource-group-name> -n <cluster-name> --enable-managed-identity --workspace-resource-id <workspace-resource-id>
+ ```
+
+3. Enable Monitoring addon with managed identity authentication with the following command:
+
+ ```cli
+ az aks enable-addons -a monitoring --enable-msi-auth-for-monitoring -g <resource-group-name> -n <cluster-name> --workspace-resource-id <workspace-resource-id>
+ ```
+
+### Existing clusters with system assigned identity
+AKS Clusters with system assigned identity must first disable monitoring and then upgrade to managed identity. Only Azure public cloud, Azure China cloud, and Azure Government cloud are currently supported for this migration.
+
+1. Disable monitoring with the following command:
+
+ ```cli
+ az aks disable-addons -a monitoring -g <resource-group-name> -n <cluster-name> --workspace-resource-id <workspace-resource-id>
+ ```
+
+2. Enable Monitoring addon with Managed Identity Auth Option
+
+ ```cli
+ az aks enable-addons -a monitoring --enable-msi-auth-for-monitoring -g <resource-group-name> -n <cluster-name> --workspace-resource-id <workspace-resource-id>
+ ```
+
+## Limitations
+
+- Enabling managed identity authentication (preview) is not currently supported using Terraform or Azure Policy.
+- When you enable managed identity authentication (preview), a data collection rule is created with the name *MSCI-\<cluster-name\>-\<cluster-region\>*. This name cannot currently be modified.
+ ## Next steps * If you experience issues while attempting to onboard the solution, review the [troubleshooting guide](container-insights-troubleshoot.md)
azure-monitor Container Insights Enable New Cluster https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/containers/container-insights-enable-new-cluster.md
This article describes how to set up Container insights to monitor managed Kuber
To enable monitoring of a new AKS cluster created with Azure CLI, follow the step in the quickstart article under the section [Create AKS cluster](../../aks/learn/quick-kubernetes-deploy-cli.md). >[!NOTE]
->If you choose to use the Azure CLI, you first need to install and use the CLI locally. You must be running the Azure CLI version 2.0.74 or later. To identify your version, run `az --version`. If you need to install or upgrade the Azure CLI, see [Install the Azure CLI](/cli/azure/install-azure-cli).
+>If you choose to use the Azure CLI, you first need to install and use the CLI locally. You must be running the Azure CLI version 2.39.0 or later. To identify your version, run `az --version`. If you need to install or upgrade the Azure CLI, see [Install the Azure CLI](/cli/azure/install-azure-cli).
>If you have installed the aks-preview CLI extension version 0.4.12 or higher, remove any changes you have made to enable a preview extension as it can override the default Azure CLI behavior since AKS Preview features aren't available in Azure US Governmnet cloud. ## Enable using Terraform
azure-monitor Container Insights Onboard https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/containers/container-insights-onboard.md
The versions of Kubernetes and support policy are the same as those [supported i
Before you start, make sure that you've met the following requirements: **Log Analytics workspace**
-Container insights supports a [Log Analytics workspace](../logs/log-analytics-workspace-overview.md) in the regions that are listed in [Products available by region](https://azure.microsoft.com/global-infrastructure/services/?regions=all&products=monitor). For a list of the supported mapping pairs to use for the default workspace, see [Region mappings supported by Container insights](container-insights-region-mapping.md).
+Container insights stores its data in a [Log Analytics workspace](../logs/log-analytics-workspace-overview.md). It supports workspaces in the regions that are listed in [Products available by region](https://azure.microsoft.com/global-infrastructure/services/?regions=all&products=monitor). For a list of the supported mapping pairs to use for the default workspace, see [Region mappings supported by Container insights](container-insights-region-mapping.md).
You can let the onboarding experience create a default workspace in the default resource group of the AKS cluster subscription. If you already have a workspace though, then you will most likely want to use that one. See [Designing your Azure Monitor Logs deployment](../logs/design-logs-deployment.md) for details.
If you have a Kubernetes cluster with Windows nodes, then please review and conf
The following table lists the proxy and firewall configuration information that's required for the containerized agent to communicate with Container insights. All network traffic from the agent is outbound to Azure Monitor.
+**Azure public cloud**
+ |Agent resource|Port | |--|| | `*.ods.opinsights.azure.com` | 443 |
The following table lists the proxy and firewall configuration information that'
| `*.monitoring.azure.com` | 443 | | `login.microsoftonline.com` | 443 |
+The following table lists the additional firewall configuration required for managed identity authentication.
+
+|Agent resource| Purpose | Port |
+|--|||
+| `global.handler.control.monitor.azure.com` | Access control service | 443 |
+| `<cluster-region-name>.handler.control.monitor.azure.com` | Fetch data collection rules for specific AKS cluster | 443 |
+
+**Azure China 21Vianet cloud**
+ The following table lists the proxy and firewall configuration information for Azure China 21Vianet:
-|Agent resource|Port |Description |
+|Agent resource| Purpose | Port |
|--||-|
-| `*.ods.opinsights.azure.cn` | 443 | Data ingestion |
-| `*.oms.opinsights.azure.cn` | 443 | OMS onboarding |
-| `dc.services.visualstudio.com` | 443 | For agent telemetry that uses Azure Public Cloud Application Insights |
+| `*.ods.opinsights.azure.cn` | Data ingestion | 443 |
+| `*.oms.opinsights.azure.cn` | OMS onboarding | 443 |
+| `dc.services.visualstudio.com` | For agent telemetry that uses Azure Public Cloud Application Insights | 443 |
++
+The following table lists the additional firewall configuration required for managed identity authentication.
+
+|Agent resource| Purpose | Port |
+|--|||
+| `global.handler.control.monitor.azure.cn` | Access control service | 443 |
+| `<cluster-region-name>.handler.control.monitor.azure.cn` | Fetch data collection rules for specific AKS cluster | 443 |
+
+**Azure Government cloud**
The following table lists the proxy and firewall configuration information for Azure US Government:
-|Agent resource|Port |Description |
+|Agent resource| Purpose | Port |
|--||-|
-| `*.ods.opinsights.azure.us` | 443 | Data ingestion |
-| `*.oms.opinsights.azure.us` | 443 | OMS onboarding |
-| `dc.services.visualstudio.com` | 443 | For agent telemetry that uses Azure Public Cloud Application Insights |
+| `*.ods.opinsights.azure.us` | Data ingestion | 443 |
+| `*.oms.opinsights.azure.us` | OMS onboarding | 443 |
+| `dc.services.visualstudio.com` | For agent telemetry that uses Azure Public Cloud Application Insights | 443 |
+
+The following table lists the additional firewall configuration required for managed identity authentication.
+
+|Agent resource| Purpose | Port |
+|--|||
+| `global.handler.control.monitor.azure.us` | Access control service | 443 |
+| `<cluster-region-name>.handler.control.monitor.azure.us` | Fetch data collection rules for specific AKS cluster | 443 |
++
+## Authentication
+Container Insights now supports authentication using managed identity (preview). This is a secure and simplified authentication model where the monitoring agent uses the clusterΓÇÖs managed identity to send data to Azure Monitor. It replaces the existing legacy certificate-based local authentication and removes the requirement of adding a *Monitoring Metrics Publisher* role to the cluster.
+
+> [!NOTE]
+> Container Insights preview features are available on a self-service, opt-in basis. Previews are provided "as is" and "as available," and they're excluded from the service-level agreements and limited warranty. Container Insights previews are partially covered by customer support on a best-effort basis. As such, these features aren't meant for production use. For more information, see [Frequently asked questions about Azure Kubernetes Service (AKS)](../../aks/faq.md).
## Agent
-Container insights relies on a containerized Log Analytics agent for Linux. This specialized agent collects performance and event data from all nodes in the cluster, and the agent is automatically deployed and registered with the specified Log Analytics workspace during deployment.
+
+### Azure Monitor agent
+When using managed identity authentication (preview), Container insights relies on a containerized Azure Monitor agent for Linux. This specialized agent collects performance and event data from all nodes in the cluster, and the agent is automatically deployed and registered with the specified Log Analytics workspace during deployment.
++
+### Log Analytics agent
+When not using managed identity authentication, Container insights relies on a containerized Log Analytics agent for Linux. This specialized agent collects performance and event data from all nodes in the cluster, and the agent is automatically deployed and registered with the specified Log Analytics workspace during deployment.
The agent version is *microsoft/oms:ciprod04202018* or later, and it's represented by a date in the following format: *mmddyyyy*. When a new version of the agent is released, it's automatically upgraded on your managed Kubernetes clusters that are hosted on Azure Kubernetes Service (AKS). To track which versions are released, see [agent release announcements](https://github.com/microsoft/docker-provider/tree/ci_feature_prod).
To enable Container insights, use one of the methods that's described in the fol
| Deployment state | Method | ||--|
-| New Kubernetes cluster | [Enable monitoring for a new AKS cluster using the Azure CLI](../../aks/learn/quick-kubernetes-deploy-cli.md)|
+| New Kubernetes cluster | [Enable monitoring for a new AKS cluster using the Azure CLI](../../aks/learn/quick-kubernetes-deploy-cli.md) |
| | [Enable for a new AKS cluster by using the open-source tool Terraform](container-insights-enable-new-cluster.md#enable-using-terraform)| | | [Enable for a new OpenShift cluster by using an Azure Resource Manager template](container-insights-azure-redhat-setup.md#enable-for-a-new-cluster-using-an-azure-resource-manager-template) | | | [Enable for a new OpenShift cluster by using the Azure CLI](/azure/openshift/#az-openshift-create) |
-| Existing AKS cluster | [Enable monitoring for an existing AKS cluster using the Azure CLI](container-insights-enable-existing-clusters.md#enable-using-azure-cli) |
-| |[Enable for an existing AKS cluster using Terraform](container-insights-enable-existing-clusters.md#enable-using-terraform) |
-| | [Enable for an existing AKS cluster from Azure Monitor](container-insights-enable-existing-clusters.md#enable-from-azure-monitor-in-the-portal)|
-| | [Enable directly from an AKS cluster in the Azure portal](container-insights-enable-existing-clusters.md#enable-directly-from-aks-cluster-in-the-portal)|
-| | [Enable for AKS cluster using an Azure Resource Manager template](container-insights-enable-existing-clusters.md#enable-using-an-azure-resource-manager-template)|
-| Existing non-AKS Kubernetes cluster | [Enable for non-AKS Kubernetes cluster hosted outside of Azure and enabled with Azure Arc using the Azure CLI](container-insights-enable-arc-enabled-clusters.md#create-extension-instance-using-azure-cli). |
-| | [Enable for non-AKS Kubernetes cluster hosted outside of Azure and enabled with Azure Arc using a preconfigured Azure Resource Manager template](container-insights-enable-arc-enabled-clusters.md#create-extension-instance-using-azure-resource-manager) |
-| | [Enable for non-AKS Kubernetes cluster hosted outside of Azure and enabled with Azure Arc from the multicluster page Azure Monitor](container-insights-enable-arc-enabled-clusters.md#create-extension-instance-using-azure-portal) |
+| Existing AKS cluster | [Enable monitoring for an existing AKS cluster using the Azure CLI](container-insights-enable-existing-clusters.md?tabs=azure-powershell) |
+| | [Enable for an existing AKS cluster using Terraform](container-insights-enable-existing-clusters.md?tabs=terraform) |
+| | [Enable for an existing AKS cluster from Azure Monitor portal](container-insights-enable-existing-clusters.md?tabs=portal-azure-monitor)|
+| | [Enable directly from an AKS cluster in the Azure portal](container-insights-enable-existing-clusters.md?tabs=portal-aks)|
+| | [Enable for AKS cluster using an Azure Resource Manager template](container-insights-enable-existing-clusters.md?tabs=aks)|
+| Existing non-AKS Kubernetes cluster | [Enable for non-AKS Kubernetes cluster hosted outside of Azure and enabled with Azure Arc using the Azure CLI](container-insights-enable-arc-enabled-clusters.md?tabs=create-cli#create-extension-instance). |
+| | [Enable for non-AKS Kubernetes cluster hosted outside of Azure and enabled with Azure Arc using a preconfigured Azure Resource Manager template](container-insights-enable-arc-enabled-clusters.md?tabs=create-arm#create-extension-instance) |
+| | [Enable for non-AKS Kubernetes cluster hosted outside of Azure and enabled with Azure Arc from the multicluster page Azure Monitor](container-insights-enable-arc-enabled-clusters.md?tabs=create-portal#create-extension-instance) |
## Next steps Once you've enabled monitoring, you can begin analyzing the performance of your Kubernetes clusters that are hosted on Azure Kubernetes Service (AKS), Azure Stack, or another environment. To learn how to use Container insights, see [View Kubernetes cluster performance](container-insights-analyze.md).
azure-monitor Data Platform https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/data-platform.md
na Previously updated : 07/19/2022 Last updated : 07/28/2022
Read more about distributed tracing at [What is distributed tracing?](app/distri
[Changes](./change/change-analysis-visualizations.md) are a series of events that occur in your Azure application, from the infrastructure layer through application deployment. Changes are traced on a subscription-level using [the Change Analysis tool](./change/change-analysis.md). The Change Analysis tool increases observability by building on the power of [Azure Resource Graph](../governance/resource-graph/overview.md) to provide detailed insights into your application changes.
-Once [Change Analysis is enabled](./change/change-analysis-enable.md), the `Microsoft.ChangeAnalysis` resource provider is registered with an Azure Resource Manager subscription to make the tracked properties and proxied settings change data available. Change Analysis' [integrations with Monitoring and Diagnostics tools](./change/change-analysis-visualizations.md) provide data for various management and troubleshooting scenarios to help users understand what changes might have caused the issues.
+Once [Change Analysis is enabled](./change/change-analysis-enable.md), the `Microsoft.ChangeAnalysis` resource provider is registered with an Azure Resource Manager subscription to make the resource properties and configuration change data available. Change Analysis provides data for various management and troubleshooting scenarios to help users understand what changes might have caused the issues:
+- Troubleshoot your application via the [Diagnose & solve problems tool](./change/change-analysis-enable.md).
+- Perform general management and monitoring via the [Change Analysis standalone UI](./change/change-analysis-visualizations.md#the-change-analysis-standalone-ui) and [the activity log](./change/change-analysis-visualizations.md#activity-log-change-history).
+- [Learn more about how to view data results for other scenarios](./change/change-analysis-visualizations.md).
Read more about Change Analysis, including data sources in [Use Change Analysis in Azure Monitor](./change/change-analysis.md).
azure-monitor Solutions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/insights/solutions.md
Monitoring solutions can contain multiple types of Azure resources. You can view
To list the monitoring solutions installed in your subscription:
-1. Go to the [Azure portal](https://portal.azure.com). Search for and select **Solutions**.
+1.Select the **Solutions** menu in the Azure portal.
Solutions installed in all your workspaces are listed. The name of the solution is followed by the name of the workspace where it's installed. 1. Use the dropdown boxes at the top of the screen to filter by subscription or resource group.
You can remove any installed monitoring solution, except **LogManagment**, which
### [Portal](#tab/portal)
-To remove an installed solution by using the portal, find it in the [list of installed solutions](#list-installed-monitoring-solutions). Select the name of the solution to open its summary page, and then select **Delete**.
+To remove an installed solution by using the portal, find it in the [list of installed solutions](#list-installed-monitoring-solutions). Select the name of the solution for the workspace you want to remove it from to open its summary page, and then select **Delete**.
### [Azure CLI](#tab/azure-cli)
azure-monitor Monitor Reference https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/monitor-reference.md
The following table lists Azure services and the data they collect into Azure Mo
| [Azure Analysis Services](../analysis-services/index.yml) | Microsoft.AnalysisServices/servers | [**Yes**](./essentials/metrics-supported.md#microsoftanalysisservicesservers) | [**Yes**](./essentials/resource-logs-categories.md#microsoftanalysisservicesservers) | | | | [API Management](../api-management/index.yml) | Microsoft.ApiManagement/service | [**Yes**](./essentials/metrics-supported.md#microsoftapimanagementservice) | [**Yes**](./essentials/resource-logs-categories.md#microsoftapimanagementservice) | | | | [Azure App Configuration](../azure-app-configuration/index.yml) | Microsoft.AppConfiguration/configurationStores | [**Yes**](./essentials/metrics-supported.md#microsoftappconfigurationconfigurationstores) | [**Yes**](./essentials/resource-logs-categories.md#microsoftappconfigurationconfigurationstores) | | |
- | [Azure Spring Cloud](../spring-cloud/overview.md) | Microsoft.AppPlatform/Spring | [**Yes**](./essentials/metrics-supported.md#microsoftappplatformspring) | [**Yes**](./essentials/resource-logs-categories.md#microsoftappplatformspring) | | |
+ | [Azure Spring Apps](../spring-apps/overview.md) | Microsoft.AppPlatform/Spring | [**Yes**](./essentials/metrics-supported.md#microsoftappplatformspring) | [**Yes**](./essentials/resource-logs-categories.md#microsoftappplatformspring) | | |
| [Azure Attestation Service](../attestation/overview.md) | Microsoft.Attestation/attestationProviders | No | [**Yes**](./essentials/resource-logs-categories.md#microsoftattestationattestationproviders) | | | | [Azure Automation](../automation/index.yml) | Microsoft.Automation/automationAccounts | [**Yes**](./essentials/metrics-supported.md#microsoftautomationautomationaccounts) | [**Yes**](./essentials/resource-logs-categories.md#microsoftautomationautomationaccounts) | | | | [Azure VMware Solution](../azure-vmware/index.yml) | Microsoft.AVS/privateClouds | [**Yes**](./essentials/metrics-supported.md#microsoftavsprivateclouds) | [**Yes**](./essentials/resource-logs-categories.md#microsoftavsprivateclouds) | | |
azure-monitor Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/overview.md
description: Overview of Microsoft services and functionalities that contribute
Previously updated : 04/27/2022 Last updated : 07/25/2022
Azure Monitor uses a version of the [Kusto Query Language](/azure/kusto/query/)
![Diagram that shows logs data flowing into Log Analytics for analysis.](media/overview/logs.png)
-Change Analysis alerts you to live site issues, outages, component failures, or other change data. It also provides insights into those application changes, increases observability, and reduces the mean time to repair. You automatically register the `Microsoft.ChangeAnalysis` resource provider with an Azure Resource Manager subscription by going to Change Analysis via the Azure portal. For web app in-guest changes, you can enable Change Analysis by using the [Diagnose and solve problems tool](./change/change-analysis-visualizations.md#diagnose-and-solve-problems-tool).
+Change Analysis alerts you to live site issues, outages, component failures, or other change data. It also provides insights into those application changes, increases observability, and reduces the mean time to repair. You automatically register the `Microsoft.ChangeAnalysis` resource provider with an Azure Resource Manager subscription by going to Change Analysis via the Azure portal. For web app in-guest changes, you can enable Change Analysis by using the [Diagnose and solve problems tool](./change/change-analysis-enable.md#enable-web-app-in-guest-change-collection-via-azure-portal).
Change Analysis builds on [Azure Resource Graph](../governance/resource-graph/overview.md) to provide a historical record of how your Azure resources have changed over time. It detects managed identities, platform operating system upgrades, and hostname changes. Change Analysis securely queries IP configuration rules, TLS settings, and extension versions to provide more detailed change data.
Azure resources generate a significant amount of monitoring data. Azure Monitor
| Metrics | Metrics are numerical values that describe some aspect of a system at a particular point in time. They are collected at regular intervals and are identified with a timestamp, a name, a value, and one or more defining labels. Metrics can be aggregated using a variety of algorithms, compared to other metrics, and analyzed for trends over time.<br><br>Metrics in Azure Monitor are stored in a time-series database which is optimized for analyzing time-stamped data. For more information, see [Azure Monitor Metrics](essentials/data-platform-metrics.md). | | Logs | [Logs](logs/data-platform-logs.md) are events that occurred within the system. They can contain different kinds of data and may be structured or free form text with a timestamp. They may be created sporadically as events in the environment generate log entries, and a system under heavy load will typically generate more log volume.<br><br>Logs in Azure Monitor are stored in a Log Analytics workspace that's based on [Azure Data Explorer](/azure/data-explorer/) which provides a powerful analysis engine and [rich query language](/azure/kusto/query/). For more information, see [Azure Monitor Logs](logs/data-platform-logs.md). | | Distributed traces | Traces are series of related events that follow a user request through a distributed system. They can be used to determine behavior of application code and the performance of different transactions. While logs will often be created by individual components of a distributed system, a trace measures the operation and performance of your application across the entire set of components.<br><br>Distributed tracing in Azure Monitor is enabled with the [Application Insights SDK](app/distributed-tracing.md), and trace data is stored with other application log data collected by Application Insights and stored in Azure Monitor Logs. For more information, see [What is Distributed Tracing?](app/distributed-tracing.md). |
+| Changes | Changes are a series of events that occur in your Azure application and resources. Change Analysis is a subscription-level observability tool that's built on the power of Azure Resource Graph. <br><br> Once Change Analysis is enabled, the `Microsoft.ChangeAnalysis` resource provider is registered with an Azure Resource Manager subscription. Change Analysis' integrations with Monitoring and Diagnostics tools provide data to help users understand what changes might have caused the issues. Read more about Change Analysis in [Use Change Analysis in Azure Monitor](./change/change-analysis.md). |
> [!NOTE]
azure-monitor Profiler Cloudservice https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/profiler/profiler-cloudservice.md
In this article, you will:
## Track requests with Application Insights
-When publishing your CloudService to Azure portal, add the [Application Insights SDK to Azure Cloud Services](../app/cloudservices.md).
+When publishing your CloudService to Azure portal, add the [Application Insights SDK to Azure Cloud Services](../app/azure-web-apps-net-core.md).
:::image type="content" source="./media/profiler-cloudservice/enable-app-insights.png" alt-text="Screenshot showing the checkbox for sending information to Application Insights.":::
azure-monitor Vminsights Configure Workspace https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-configure-workspace.md
Previously updated : 06/07/2022 Last updated : 06/22/2022 # Configure Log Analytics workspace for VM insights VM insights collects its data from one or more Log Analytics workspaces in Azure Monitor. Prior to onboarding agents, you must create and configure a workspace. This article describes the requirements of the workspace and to configure it for VM insights.
+> [!IMPORTANT]
+> Configuration of the Log Analytics workspace is only required for using VM insights with virtual machines using Log Analytics agent. Virtual machines using Azure Monitor agent do not use the *VMInsights* solution that's installed in this configuration. To support Azure Monitor agent, a standard Log Analytics workspace just needs be created as described in [Create Log Analytics workspace](#create-log-analytics-workspace).
+ ## Overview A single subscription can use any number of workspaces depending on your requirements. The only requirement of the workspace is that it be located in a supported location and be configured with the *VMInsights* solution.
Access Log Analytics workspaces in the Azure portal from the **Log Analytics wor
[![Log Anlytics workspaces](media/vminsights-configure-workspace/log-analytics-workspaces.png)](media/vminsights-configure-workspace/log-analytics-workspaces.png#lightbox)
-You can create a new Log Analytics workspace using any of the following methods. See Design a Log Analytics workspace configuration(../logs/workspace-design.md) for guidance on determining the number of workspaces you should use in your environment and how to design their access strategy.
+You can create a new Log Analytics workspace using any of the following methods. See [Design a Log Analytics workspace configuration](../logs/workspace-design.md) for guidance on determining the number of workspaces you should use in your environment and how to design their access strategy.
* [Azure portal](../logs/quick-create-workspace.md)
New-AzResourceGroupDeployment -Name ConfigureWorkspace -ResourceGroupName my-res
+## Remove VMInsights solution from workspace
+If you have completely migrated your virtual machines to Azure Monitor agent and no longer want to support virtual machines with the Log Analytics agent in your workspace, then you should remove the *VMInisghts* solution from the workspace. This will ensure that you don't collect data from any Log Analytics agents that inadvertently remain.
+
+To remove the *VMInsights*solution, use the same process as [removing any other solution from a workspace](../insights/solutions.md#remove-a-monitoring-solution).
+
+1. Select the **Solutions** menu in the Azure portal.
+2. Locate the *VMInsights* solution for your workspace and select it to view its detail.
+3. Click **Delete**
## Next steps - See [Onboard agents to VM insights](vminsights-enable-overview.md) to connect agents to VM insights.
azure-monitor Vminsights Enable Hybrid https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-enable-hybrid.md
This article describes how to enable VM insights for a virtual machine outside o
> [!IMPORTANT] > The recommended method of enabling hybrid VMs is first enabling [Azure Arc for servers](../../azure-arc/servers/overview.md) so that the VMs can be enabled for VM insights using processes similar to Azure VMs. This article describes how to onboard hybrid VMs if you choose not to use Azure Arc. ++ ## Prerequisites - [Create and configure a Log Analytics workspace](./vminsights-configure-workspace.md).
azure-monitor Vminsights Enable Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-enable-overview.md
description: Learn how to deploy and configure VM insights. Find out the system
Previously updated : 06/08/2022 Last updated : 06/24/2022
This article provides an overview of the options available to enable VM insights
- Virtual machines hosted in another cloud environment. ## Installation options and supported machines
-The following table shows the installation methods available for different supported machines.
+The following table shows the installation methods available for enabling VM insights on supported machines.
| Method | Scope | |:|:|
-| [Azure portal](vminsights-enable-portal.md) | Single Azure virtual machine, Azure virtual machine scale set, or Azure Arc machine |
-| [Azure Policy](vminsights-enable-policy.md) | Multiple Azure virtual machines, Azure virtual machine scale sets, or Azure Arc machines |
-| [PowerShell](vminsights-enable-powershell.md) | Multiple Azure virtual machines, Azure virtual machine scale sets, or Azure Arc machines |
-| [Manual install](vminsights-enable-hybrid.md) | Virtual machines or physical computers on-premises other cloud environments |
+| [Azure portal](vminsights-enable-portal.md) | Enable individual machines with the Azure portal. |
+| [Azure Policy](vminsights-enable-policy.md) | Create policy to automatically enable when a supported machine is created. |
+| [Resource Manager templates](../vm/vminsights-enable-resource-manager.md) | Enable multiple machines using any of the supported methods to deploy a Resource Manager template such as CLI and PowerShell. |
+| [PowerShell](vminsights-enable-powershell.md) | Use a PowerShell script to enable multiple machines. Log Analytics agent only. |
+| [Manual install](vminsights-enable-hybrid.md) | Virtual machines or physical computers on-premises other cloud environments. Log Analytics agent only |
## Supported Azure Arc machines VM insights is available for Azure Arc-enabled servers in regions where the Arc extension service is available. You must be running version 0.9 or above of the Arc Agent.
-| Connected source | Supported | Description |
-|:--|:--|:--|
-| Windows agents | Yes | Along with the [Log Analytics agent for Windows](../agents/log-analytics-agent.md), Windows agents need the Dependency agent. For more information, see [supported operating systems](../agents/agents-overview.md#supported-operating-systems). |
-| Linux agents | Yes | Along with the [Log Analytics agent for Linux](../agents/log-analytics-agent.md), Linux agents need the Dependency agent. For more information, see [supported operating systems](#supported-operating-systems). |
-| System Center Operations Manager management group | No | |
- ## Supported operating systems
-VM insights supports any operating system that supports the Log Analytics agent and Dependency agent. See [Overview of Azure Monitor agents
+VM insights supports any operating system that supports the Dependency agent and either the Azure Monitor agent (preview) or Log Analytics agent. See [Overview of Azure Monitor agents
](../agents/agents-overview.md#supported-operating-systems) for a complete list. > [!IMPORTANT] > If the ethernet device for your virtual machine has more than nine characters, then it wonΓÇÖt be recognized by VM insights and data wonΓÇÖt be sent to the InsightsMetrics table. The agent will collect data from [other sources](../agents/agent-data-sources.md).
-> [!IMPORTANT]
-> The VM insights guest health feature has more limited operating system support while it's in public preview. See [Enable VM insights guest health (preview)](../vm/vminsights-health-enable.md) for a detailed list.
### Linux considerations See the following list of considerations on Linux support of the Dependency agent that supports VM insights:
VM insights requires a Log Analytics workspace. See [Configure Log Analytics wor
> [!NOTE] > VM Insights does not support sending data to more than one Log Analytics workspace (multi-homing). > +
+## Network requirements
+
+- See [Network requirements](../agents/log-analytics-agent.md#network-requirements) for the network requirements for the Log Analytics agent.
+- The dependency agent requires a connection from the virtual machine to the address 169.254.169.254. This is the Azure metadata service endpoint. Ensure that firewall settings allow connections to this endpoint.
+ ## Agents
-When you enable VM insights for a machine, the following two agents are installed. See [Network requirements](../agents/log-analytics-agent.md#network-requirements) for the network requirements for these agents.
+When you enable VM insights for a machine, the following agents are installed. See [Network requirements](../agents/log-analytics-agent.md#network-requirements) for the network requirements for these agents.
-- [Log Analytics agent](../agents/log-analytics-agent.md). Collects events and performance data from the virtual machine or virtual machine scale set and delivers it to the Log Analytics workspace. Deployment methods for the Log Analytics agent on Azure resources use the VM extension for [Windows](../../virtual-machines/extensions/oms-windows.md) and [Linux](../../virtual-machines/extensions/oms-linux.md).-- Dependency agent. Collects discovered data about processes running on the virtual machine and external process dependencies, which are used by the [Map feature in VM insights](../vm/vminsights-maps.md). The Dependency agent relies on the Log Analytics agent to deliver its data to Azure Monitor. Deployment methods for the Dependency agent on Azure resources use the VM extension for [Windows](../../virtual-machines/extensions/agent-dependency-windows.md) and [Linux](../../virtual-machines/extensions/agent-dependency-linux.md).
+> [!IMPORTANT]
+> VM insights support for Azure Monitor agent is currently in public preview. Azure Monitor agent includes several advantages over Log Analytics agent, and is the preferred agent for virtual machines and virtual machine scale sets. See [Migrate to Azure Monitor agent from Log Analytics agent](../agents/azure-monitor-agent-migration.md) for comparison of the agent and information on migrating.
-> [!NOTE]
-> The Log Analytics agent is the same agent used by System Center Operations Manager. VM insights can monitor agents that are also monitored by Operations Manager if they are directly connected, and you install the Dependency agent on them. Agents connected to Azure Monitor through a [management group connection](../tform/../agents/om-agents.md) cannot be monitored by VM insights.
+- [Azure Monitor agent](../agents/azure-monitor-agent-overview.md) or [Log Analytics agent](../agents/log-analytics-agent.md). Collects data from the virtual machine or virtual machine scale set and delivers it to the Log Analytics workspace.
+- Dependency agent. Collects discovered data about processes running on the virtual machine and external process dependencies, which are used by the [Map feature in VM insights](../vm/vminsights-maps.md). The Dependency agent relies on the Azure Monitor agent or Log Analytics agent to deliver its data to Azure Monitor.
-The following are multiple methods for deploying these agents.
+## Changes for Azure Monitor agent
+There are several changes in the process for enabling VM insights when using the Azure Monitor agent.
-| Method | Description |
-|:|:|
-| [Azure portal](../vm/vminsights-enable-portal.md) | Install both agents on a single virtual machine, virtual machine scale set, or hybrid virtual machines connected with Azure Arc. |
-| [Resource Manager templates](../vm/vminsights-enable-resource-manager.md) | Install both agents using any of the supported methods to deploy a Resource Manager template including CLI and PowerShell. |
-| [Azure Policy](../vm/vminsights-enable-policy.md) | Assign Azure Policy initiative to automatically install the agents when a virtual machine or virtual machine scale set is created. |
-| [Manual install](../vm/vminsights-enable-hybrid.md) | Install the agents in the guest operating system on computers hosted outside of Azure including in your datacenter or other cloud environments. |
+**Workspace configuration.** You no longer need to [enable VM insights on the Log Analytics workspace](vminsights-configure-workspace.md) since the VMinsights management pack isn't used by Azure Monitor agent.
+**Data collection rule.** Azure Monitor agent uses [data collection rules](../essentials/data-collection-rule-overview.md) to configure its data collection. VM insights creates a data collection rule that is automtically deployed if you enable your machine using the Azure portal. If you use other methods to onboard your machines, then you may need to install the data collection rule first.
-## Network requirements
+**Agent deployment.** There are minor changes to the the process for onboarding virtual machines and virtual machine scale sets to VM insights in the Azure portal. You must now select which agent you want to use, and you must select a data collection rule for Azure Monitor agent. See [Enable VM insights in the Azure portal](vminsights-enable-portal.md) for details.
-- See [Network requirements](../agents/log-analytics-agent.md#network-requirements) for the network requirements for the Log Analytics agent.-- The dependency agent requires a connection from the virtual machine to the address 169.254.169.254. This is the Azure metadata service endpoint. Ensure that firewall settings allow connections to this endpoint.
+## Data collection rule (Azure Monitor agent)
+When you enable VM insights on a machine with the Azure Monitor agent you must specify a [data collection rule (DCR)](../essentials/data-collection-rule-overview.md) to use. The DCR specifies the data to collect and the workspace to use. VM insights creates a default DCR if one doesn't already exist. See [Enable VM insights for Azure Monitor agent
+](vminsights-enable-portal.md#enable-vm-insights-for-azure-monitor-agent) for more information on creating and editing the VM insights data collection rule.
-## Management packs
+> [!IMPORTANT]
+> It's not recommended to create your own DCR to support VM insights. The DCR created by VM insights includes a special data stream required for its operation. While you can edit this DCR to collect additional data such as Windows and Syslog events, you should create additional DCRs and associate with the machine.
+
+The DCR is defined by the options in the following table.
+
+| Option | Description |
+|:|:|
+| Guest performance | Specifies whether to collect performance data from the guest operating system. This is required for all machines. |
+| Processes and dependencies | Collected details about processes running on the virtual machine and dependencies between machines. This enables the [map feature in VM insights](vminsights-maps.md). This is optional and enables the [VM insights map feature](vminsights-maps.md) for the machine. |
+| Log Analytics workspace | Workspace to store the data. Only workspaces with VM insights will be listed. |
+
+## Management packs (Log Analytics agent)
When a Log Analytics workspace is configured for VM insights, two management packs are forwarded to all the Windows computers connected to that workspace. The management packs are named *Microsoft.IntelligencePacks.ApplicationDependencyMonitor* and *Microsoft.IntelligencePacks.VMInsights* and are written to *%Programfiles%\Microsoft Monitoring Agent\Agent\Health Service State\Management Packs*. The data source used by the *ApplicationDependencyMonitor* management pack is **%Program files%\Microsoft Monitoring Agent\Agent\Health Service State\Resources\<AutoGeneratedID>\Microsoft.EnterpriseManagement.Advisor.ApplicationDependencyMonitorDataSource.dll*. The data source used by the *VMInsights* management pack is *%Program files%\Microsoft Monitoring Agent\Agent\Health Service State\Resources\<AutoGeneratedID>\ Microsoft.VirtualMachineMonitoringModule.dll*.
+## Migrate from Log Analytics agent
+The Azure Monitor agent and the Log Analytics agent can both be installed on the same machine during migration. You should be careful that running both agents may lead to duplication of data and increased cost. If a machine has both agents installed, you'll have a warning in the Azure portal that you may be collecting duplicate data.
+
+> [!WARNING]
+> Collecting duplicate data from a single machine with both the Azure Monitor agent and Log Analytics agent can result in the following consequences:
+>
+> - Additional ingestion cost from sending duplicate data to the Log Analytics workspace.
+> - The map feature of VM insights may be inaccurate since it does not check for duplicate data.
++
+You must remove the Log Analytics agent yourself from any machines that are using it. Before you do this, ensure that the machine is not relying any other solutions that require the Log Analytics agent. See [Migrate to Azure Monitor agent from Log Analytics agent](../agents/azure-monitor-agent-migration.md) for details.
+
+After you verify that no Log Analytics agents are still connected to your Log Analytics workspace, you can [remove the VMInsights solution from the workspace](vminsights-configure-workspace.md#remove-vminsights-solution-from-workspace) which is no longer needed.
+
+> [!NOTE]
+> To check if you have any machines with both agents sending data to your Log Analytics workspace, run the following [log query](../logs/log-query-overview.md) in [Log Analytics](../logs/log-analytics-overview.md). This will show the last heartbeat for each computer. If a computer has both agents, then it will return two records each with a different `category`. The Azure Monitor agent will have a `category` of *Azure Monitor Agent*. The Log Analytics agent will have a `category` of *Direct Agent*.
+>
+> ```KQL
+> Heartbeat
+> | summarize max(TimeGenerated) by Computer, Category
+> | sort by Computer
+> ```
++ ## Diagnostic and usage data Microsoft automatically collects usage and performance data through your use of the Azure Monitor service. Microsoft uses this data to improve the quality, security, and integrity of the service.
azure-monitor Vminsights Enable Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-enable-policy.md
This article explains how to enable VM insights for Azure virtual machines or hy
If you're not familiar with Azure Policy, get a brief introduction at [Deploy Azure Monitor at scale using Azure Policy](../best-practices.md). + > [!NOTE] > To use Azure Policy with Azure virtual machine scale sets, or to work with Azure Policy directly to enable Azure virtual machines, see [Deploy Azure Monitor at scale using Azure Policy](../best-practices.md).
azure-monitor Vminsights Enable Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-enable-portal.md
Title: Enable Azure Monitor for single virtual machine or virtual machine scale set in the Azure portal
+ Title: Enable VM insights in the Azure portal
description: Learn how to enable VM insights on a single Azure virtual machine or virtual machine scale set using the Azure portal.
Last updated 06/08/2022
-# Enable Azure Monitor for single virtual machine or virtual machine scale set in the Azure portal
-This article describes how to enable VM insights for a virtual machine or virtual machine scale set using the Azure portal. This procedure can be used for the following:
+# Enable VM insights in the Azure portal
+This article describes how to enable VM insights using the Azure portal for the following :
- Azure virtual machine - Azure virtual machine scale set
This article describes how to enable VM insights for a virtual machine or virtua
## Prerequisites -- [Create and configure a Log Analytics workspace](./vminsights-configure-workspace.md). Alternatively, you can create a new workspace during this process.
+- [Create a Log Analytics workspace](./vminsights-configure-workspace.md). You can create a new workspace during this process, but you should use an existing workspace if you already have one. See [Log Analytics workspace overview](../logs/log-analytics-workspace-overview.md) and [Design a Log Analytics workspace architecture](../logs/workspace-design.md) for more information.
- See [Supported operating systems](./vminsights-enable-overview.md#supported-operating-systems) to ensure that the operating system of the virtual machine or virtual machine scale set you're enabling is supported.
+- See [Manage the Azure Monitor agent](../agents/azure-monitor-agent-manage.md#prerequisites) for prerequisites related to Azure Monitor agent.
-## Enable VM insights
-From the Azure portal, select **Virtual machines**, **Virtual machine scale sets**, or **Servers - Azure Arc** and select a resource from the list. In the **Monitoring** section of the menu, select **Insights** and then **Enable**. The following example shows an Azure virtual machine, but the menu is similar for Azure virtual machine scale set or Azure Arc.
+> [!NOTE]
+> This process describes enabling VM insights from the **Monitor** menu in the Azure portal. You can perform the same process from the **Insights** menu for a particular virtual machine or virtual machine scale set.
+
+## View monitored and unmonitored machines
+Open VM insights by selecting **Virtual Machines** from the **Monitor** menu in the Azure portal. The **Overview** page lists all of the virtual machines and virtual machine scale sets in the selected subscriptions. Machines will either be included in the **Monitored** or **Not monitored** tab depending on whether the machine is currently being monitored by VM insights.
-![Enable VM insights for a VM](media/vminsights-enable-portal/enable-vminsights-vm-portal.png)
+A machine may be listed in **Not monitored** even though it has the Azure Monitor or Log Analytics agent installed but has not been enabled for VM insights. If a virtual machine has the Log Analytics agent installed but not the Dependency agent, it will be listed as not monitored. In this case, the Azure Monitor agent will be started without being given the option for the Log Analytics agent.
+
+> [!NOTE]
+> **Data collection rule** column has replaced the **Workspace** column on the **Overview** page to support the [Azure Monitor agent](vminsights-enable-overview.md#agents). This either shows the data collection rules used by the Azure Monitor agent for each machine, or it gives the option to configure with the Azure Monitor agent.
-If the virtual machine isn't already connected to a Log Analytics workspace, then you'll be prompted to select one. If you haven't previously [created a workspace](../logs/quick-create-workspace.md), then you can select a default for the location where the virtual machine or virtual machine scale set is deployed in the subscription. This workspace will be created and configured if it doesn't already exist. If you select an existing workspace, it will be configured for VM insights if it wasn't already.
+## Enable VM insights for Azure Monitor agent
> [!NOTE]
-> If you select a workspace that wasn't previously configured for VM insights, the *VMInsights* management pack will be added to this workspace. This will be applied to any agent already connected to the workspace, whether or not it's enabled for VM insights. Performance data will be collected from these virtual machines and stored in the *InsightsMetrics* table.
+> A system-assigned managed identity will be added for a machine as part of the installation process of the Azure Monitor agent if one doesn't already exist.
+
+Use this procedure to enable an unmonitored virtual machine or virtual machine scale set using Azure Monitor agent.
+
+1. Select **Virtual Machines** from the **Monitor** menu in the Azure portal.
+
+1. From the **Overview** page, select **Not Monitored**.
+
+2. Click the **Enable** button next to any machine that you want to enable. If a machine is currently running, then you must start it to enable it.
+
+ :::image type="content" source="media/vminsights-enable-portal/enable-unmonitored.png" lightbox="media/vminsights-enable-portal/enable-unmonitored.png" alt-text="Screenshot with unmonitored machines in V M insights.":::
+
+3. Click **Enable** on the introduction page to view the configuration.
+
+4. Select **Azure Monitor agent** from the **Monitoring configuration** page and then select **Azure Monitor agent**.
+
+5. If a [data collection rule (DCR)](vminsights-enable-overview.md#data-collection-rule-azure-monitor-agent) hasn't already been created for unmonitored machines, then one will be created with the following details.
+
+ - **Guest performance** enabled.
+ - **Processes and dependencies** disabled.
+
+6. If you want this configuration, then click **Configure** to start the agent installation, or select a different data collection rule from the dropdown. Only data collection rules enabled for VM insights will be included.
+
+7. If you want a different configuration or want to use a different Log Analytics workspace, then click **Create new** to create a new data collection rule. This will allow you to select a workspace and specify whether you want to collect processes and dependencies to enable the [map feature in VM insights](vminsights-maps.md).
++
+6. Click **Configure** to start the configuration process. It will take several minutes for the agent to be installed and data to start being collected. You'll receive status messages as the configuration is performed.
+
+7. If you use a manual upgrade model for your virtual machine scale set, upgrade the instances to complete the setup. You can start the upgrades from the **Instances** page, in the **Settings** section.
++++
+## Enable VM insights for Log Analytics agent
+Use this procedure to enable an unmonitored virtual machine or virtual machine scale set using Log Analytics agent.
+
+1. Select **Virtual Machines** from the **Monitor** menu in the Azure portal.
+
+1. From the **Overview** page, select **Not Monitored**.
+
+2. Click the **Enable** button next to any machine that you want to enable. If a machine is currently running, then you must start it to enable it.
+
+
+3. Click **Enable** on the introduction page to view the configuration.
+
+4. Select **Azure Monitor agent** from the **Monitoring configuration** page and then select **Log Analytics agent**.
+
+5. If the virtual machine isn't already connected to a Log Analytics workspace, then you'll be prompted to select one. If you haven't previously [created a workspace](../logs/quick-create-workspace.md), then you can select a default for the location where the virtual machine or virtual machine scale set is deployed in the subscription. This workspace will be created and configured if it doesn't already exist. If you select an existing workspace, it will be configured for VM insights if it wasn't already.
+
+ > [!NOTE]
+ > If you select a workspace that wasn't previously configured for VM insights, the *VMInsights* management pack will be added to this workspace. This will be applied to any agent already connected to the workspace, whether or not it's enabled for VM insights. Performance data will be collected from these virtual machines and stored in the *InsightsMetrics* table.
+
+6. Click **Configure** to modify the configuration. The only option you can modify is the workspace. You will receive status messages as the configuration is performed.
+
+7. If you use a manual upgrade model for your virtual machine scale set, upgrade the instances to complete the setup. You can start the upgrades from the **Instances** page, in the **Settings** section.
++
+## Enable Azure Monitor agent on monitored machines
+Use this procedure to add the Azure Monitor agent to machines that are already enabled with the Log Analytics agent.
+
+1. Select **Virtual Machines** from the **Monitor** menu in the Azure portal.
+
+2. From the **Overview** page, select **Monitored**.
+
+3. Click **Configure using Azure Monitor agent** next to any machine that you want to enable. If a machine is currently running, then you must start it to enable it.
+
+ :::image type="content" source="media/vminsights-enable-portal/add-azure-monitor-agent.png" lightbox="media/vminsights-enable-portal/add-azure-monitor-agent.png" alt-text="Screenshot showing monitoring configuration to Azure Monitor agent to monitored machine.":::
-![Select workspace](media/vminsights-enable-portal/select-workspace.png)
-You will receive status messages as the configuration is performed.
+1. Follow the process described in [Enable VM insights for Azure Monitor agent
+](#enable-vm-insights-for-azure-monitor-agent) to select a data collection rule. The only difference is that the data collection rule hasn't created for monitored machines has **Processes and dependencies** enabled for backward compatibility with the Log Analytics agent.
+
+ :::image type="content" source="media/vminsights-enable-portal/enable-monitored-configure-azure-monitor-agent.png" lightbox="media/vminsights-enable-portal/enable-monitored-configure-azure-monitor-agent.png" alt-text="Screenshot showing monitoring configuration for Azure Monitor agent for monitored machine.":::
->[!NOTE]
->If you use a manual upgrade model for your virtual machine scale set, upgrade the instances to complete the setup. You can start the upgrades from the **Instances** page, in the **Settings** section.
+5. With both agents installed, a warning will be displayed indicating that you may be collecting duplicate data.
-![Enable VM insights monitoring deployment processing](media/vminsights-enable-portal/onboard-vminsights-vm-portal-status.png)
+ :::image type="content" source="media/vminsights-enable-portal/both-agents-installed.png" lightbox="media/vminsights-enable-portal/both-agents-installed.png" alt-text="Screenshot showing warning message for both agents installed":::
+ > [!WARNING]
+ > Collecting duplicate data from a single machine with both the Azure Monitor agent and Log Analytics agent can result in the following consequences:
+ >
+ > - Additional ingestion cost from sending duplicate data to the Log Analytics workspace.
+ > - The map feature of VM insights may be inaccurate since it does not check for duplicate data.
+ >
+ > See [Migrate from Log Analytics agent](vminsights-enable-overview.md#migrate-from-log-analytics-agent).
+4. Once you've verified that the Azure Monitor agent has been enabled, remove the Log Analytics agent from the machine to prevent duplicate data collection.
## Next steps
azure-monitor Vminsights Enable Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-enable-powershell.md
This article describes how to enable VM insights on Azure virtual machines using
- Azure virtual machine - Azure virtual machine scale set
+> [!NOTE]
+> This article only applies to the Log Analytics agent. To enable VM insights with the Azure monitor agent, use other installation methods described in [Enable VM insights overview](vminsights-enable-overview.md).
## Prerequisites - [Create and configure a Log Analytics workspace](./vminsights-configure-workspace.md).
To enable VM insights for multiple VMs or virtual machine scale sets, use the Po
- The scoped resource group that's specified by *ResourceGroup*. - A single VM or virtual machine scale set that's specified by *Name*.
-For each virtual machine or virtual machine scale set, the script verifies whether the VM extension for the Log Analytics agent and Dependency agent are already installed. If both extensions are installed, the script tries to reinstall it. If both extensions aren't installed, the script installs them.
+For each virtual machine or virtual machine scale set, the script verifies whether the VM extension for the Log Analytics agent and Dependency agent is already installed. If both extensions are installed, the script tries to reinstall it. If both extensions aren't installed, the script installs them.
Verify you are using Azure PowerShell module Az version 1.0.0 or later with `Enable-AzureRM` compatibility aliases enabled. Run `Get-Module -ListAvailable Az` to find the version. If you need to upgrade, see [Install Azure PowerShell module](/powershell/azure/install-az-ps). If you're running PowerShell locally, you also need to run `Connect-AzAccount` to create a connection with Azure.
azure-monitor Vminsights Enable Resource Manager https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-enable-resource-manager.md
This article describes how to enable VM insights for a virtual machine or virtua
## Prerequisites -- [Create and configure a Log Analytics workspace](./vminsights-configure-workspace.md).
+- [Create and configure a Log Analytics workspace](./vminsights-configure-workspace.md). The workspace must be in the same region as the data collection rule for Azure Monitor agent.
- See [Supported operating systems](./vminsights-enable-overview.md#supported-operating-systems) to ensure that the operating system of the virtual machine or virtual machine scale set you're enabling is supported.
+- See [Manage the Azure Monitor agent](../agents/azure-monitor-agent-manage.md#prerequisites) for prerequisites related to Azure Monitor agent.
## Resource Manager templates
+Azure Resource Manager templates are available for download that onboard virtual machines and virtual machine scale sets. A different set of templates is used for Azure Monitor agent and Log Analytics agent. The templates install the required agents and perform the configuration required to onboard to machine to VM insights.
-We have created example Azure Resource Manager templates for onboarding your virtual machines and virtual machine scale sets. These templates include scenarios you can use to enable monitoring on an existing resource and create a new resource that has monitoring enabled.
++
+If you aren't familiar how to deploy a Resource Manager template, see [Deploy templates](#deploy-templates) for different options.
>[!NOTE] >The template needs to be deployed in the same resource group as the virtual machine or virtual machine scale set being enabled.
+## Azure Monitor agent
+Download the [Azure Monitor agent templates](https://aka.ms/vminsights/downloadAMADaVmiArmTemplates). You must first install the data collection rule and can then install agents to use that DCR.
-The Azure Resource Manager templates are provided in an archive file (.zip) that you can [download](https://aka.ms/VmInsightsARMTemplates) from our GitHub repo. Contents of the file include folders that represent each deployment scenario with a template and parameter file. Before you run them, modify the parameters file and specify the values required.
+### Deploy data collection rule
+You only need to perform this step once. This will install the DCR that's used by each agent. The DCR will be created in the same resource group as the workspace with a name in the format "MSVMI-{WorkspaceName}".
-The download file contains the following templates for different scenarios:
+Use on of the following sets of template and parameter files folders depending on your requirements:
-- **ExistingVmOnboarding** template enables VM insights if the virtual machine already exists.-- **NewVmOnboarding** template creates a virtual machine and enables VM insights to monitor it.-- **ExistingVmssOnboarding** template enables VM insights if the virtual machine scale set already exists.-- **NewVmssOnboarding** template creates virtual machine scale sets and enables VM insights to monitor them.-- **ConfigureWorkspace** template configures your Log Analytics workspace to support VM insights by enabling the solutions and collection of Linux and Windows operating system performance counters.
+| Folder | File | Description |
+|:|:|
+| DeployDcr\\<br>PerfAndMapDcr | DeployDcrTemplate<br>DeployDcrParameters | Enable both Performance and Map experience of VM Insights. |
+| DeployDcr\\<br>PerfOnlyDcr | DeployDcrTemplate<br>DeployDcrParameters | Enable only Performance experience of VM Insights. |
++
+### Deploy agents to machines
+Once the data collection rule has been created, deploy the agents using one of the templates in the following table. You specify the resource ID of the DCR that you created in the first step in the parameters file. Each of the templates requires that the virtual machine or virtual machine scale set is already created.
+
+| Folder | File | Description |
+|:|:|
+| ExistingVmOnboarding\\<br>PerfAndMapOnboarding | ExistingVmOnboardingTemplate.json<br>ExistingVmOnboardingParameters.json | Enable both Performance and Map experience for virtual machine. Use with PerfAndMapDcr. |
+| ExistingVmOnboarding\\<br>PerfOnlyOnboarding | ExistingVmOnboardingTemplate.json<br>ExistingVmOnboardingParameters.json | Enable only Performance experience for virtual machine. Use with PerfOnlyDCR. |
+| ExistingVmssOnboarding\\<br>PerfAndMapOnboarding | ExistingVmOnboardingTemplate.json<br>ExistingVmssOnboardingParameters.json | Enable both Performance and Map experience for virtual machine scale set. Use with PerfAndMapDcr. |
+| ExistingVmssOnboarding\\<br>PerfOnlyOnboarding | ExistingVmOnboardingTemplate.json<br>ExistingVmssOnboardingParameters.json | Enable only Performance experience for virtual machine scale set. Use with PerfOnlyDCR. |
+
+> [!NOTE]
+> If your virtual machines scale sets have an upgrade policy set to manual, VM insights will not be enabled for instances by default after installing the template. You must manually upgrade the instances.
+
+## Log Analytics agent
+Download the [Logs Analytics agent templates](https://aka.ms/VmInsightsARMTemplates). You must first configure the workspace and can then install agents to use that DCR.
+
+### Configure workspace
+You only need to perform this step once for each workspace that will use VM insights.
++
+| Folder | File | Description |
+|:|:|
+| ConfigureWorkspace | ConfigureWorkspaceTemplate.json<br>ConfigureWorkspaceParameters | Install *VMInsights* solution required for the workspace. |
+
+### Deploy agents to machines
+Once the workspace has been configured, deploy the agents using one of the templates in the following table. Templates are available that apply to an existing machine or create a new machine enabled for VM insights.
++
+| Folder | File | Description |
+|:|:|
+| NewVmOnboarding | NewVmOnboardingTemplate.json<br>NewVmOnboardingParameters.json | Creates a virtual machine and enables it to be monitored with VM insights. |
+| ExistingVmOnboarding | ExistingVmOnboarding.json<br>ExistingVmOnboarding.json | Enables VM insights on existing virtual machine. |
+| NewVmssOnboarding | NewVmssOnboarding.json<br>NewVmssOnboarding.json | Creates a virtual machine scale set and enables it to be monitored with VM insights. |
+| ExistingVmssOnboarding | ExistingVmssOnboarding.json<br>ExistingVmssOnboarding.json | Enables VM insights on existing virtual machine scale set. |
+| ExistingArcVmOnboarding | ExistingArcVmOnboarding.json<br>ExistingArcVmOnboarding.json | Enables VM insights on existing Arc-enabled server. |
->[!NOTE]
->If virtual machine scale sets were already present and the upgrade policy is set to **Manual**, VM insights won't be enabled for instances by default after running the **ExistingVmssOnboarding** Azure Resource Manager template. You have to manually upgrade the instances.
## Deploy templates The templates can be deployed using [any deployment method for Resource Manager templates](../../azure-resource-manager/templates/deploy-powershell.md) including the following examples using PowerShell and CLI.
New-AzResourceGroupDeployment -Name OnboardCluster -ResourceGroupName <ResourceG
az deployment group create --resource-group <ResourceGroupName> --template-file <Template.json> --parameters <Parameters.json> ```
+## To deploy a resource manager template
+Each folder in the download has a template and a parameters file. Modify the parameters file with required details such as Virtual Machine Resource ID, Workspace resource ID, data collection rule resource ID, Location, and OS Type. Do not modify the template file unless you need to customize it for your particular scenario.
+
+### Deploy with the Azure portal
+See [Quickstart: Create and deploy ARM templates by using the Azure portal](../../azure-resource-manager/resource-manager-quickstart-create-templates-use-the-portal.md) for details on deploying a template from the Azure portal.
+
+### Deploy with PowerShell
+Use the following command to deploy the template with PowerShell.
+
+```PowerShell
+New-AzResourceGroupDeployment -Name OnboardCluster -ResourceGroupName <ResourceGroupName> -TemplateFile <Template.json> -TemplateParameterFile <Parameters.json>
+```
+
+### Azure CLI
+Use the following command to deploy the template with Azure CLI.
+
+```sh
+az login
+az account set --subscription "Subscription Name"
+az deployment group create --resource-group <ResourceGroupName> --template-file <Template.json> --parameters <Parameters.json>
+```
++ ## Next steps
azure-monitor Vminsights Maps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-maps.md
In VM insights, you can view discovered application components on Windows and Li
For information about configuring VM insights, see [Enable VM insights](./vminsights-enable-overview.md).
-## Sign in to Azure
-Sign in to the [Azure portal](https://portal.azure.com).
+## Prerequisites
+To enable the map feature in VM insights, the virtual machine requires one of the following. See [Enable VM insights on unmonitored machine](vminsights-maps.md) for details on each.
+
+- Azure Monitor agent with **processes and dependencies** enabled.
+- Log Analytics agent enabled for VM insights.
++
+> [!WARNING]
+> Collecting duplicate data from a single machine with both the Azure Monitor agent and Log Analytics agent can result in the map feature of VM insights being inaccurate since it does not check for duplicate data.
+>
+> See [Migrate from Log Analytics agent](vminsights-enable-overview.md#migrate-from-log-analytics-agent) for more information.
## Introduction to the Map experience Before diving into the Map experience, you should understand how it presents and visualizes information. Whether you select the Map feature directly from a VM or from Azure Monitor, the Map feature presents a consistent experience. The only difference is that from Azure Monitor, one map shows all the members of a multiple-tier application or cluster.
azure-monitor Vminsights Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-monitor/vm/vminsights-overview.md
Last updated 06/21/2022
VM insights monitors the performance and health of your virtual machines and virtual machine scale sets, including their running processes and dependencies on other resources. It can help deliver predictable performance and availability of vital applications by identifying performance bottlenecks and network issues and can also help you understand whether an issue is related to other dependencies. > [!NOTE]
-> VM insights does not currently support [Azure Monitor agent](../agents/azure-monitor-agent-overview.md).
+> VM insights now supports [Azure Monitor agent](../agents/azure-monitor-agent-overview.md). See [Enable VM insights overview](vminsights-enable-overview.md#agents).
VM insights supports Windows and Linux operating systems on the following machines:
There's no direct cost for VM insights, but you're charged for its activity in t
The log size varies by the string lengths of performance counters, and it can increase with the number of logical disks and network adapters allocated to the VM. If you're already using Service Map, the only change you'll see is the extra performance data that's sent to the Azure Monitor `InsightsMetrics` data type.ΓÇï
+## Accessing VM insights
+Access VM insights for all your virtual machines and virtual machine scale sets by selecting **Virtual Machines** from the **Monitor** menu in the Azure portal. Access VM insights for a single virtual machine or virtual machine scale set by selecting **Insights** from the machine's menu in the Azure portal.
## Configuring VM insights The steps to configure VM insights are as follows. Follow each link for detailed guidance on each step: - [Create Log Analytics workspace.](./vminsights-configure-workspace.md#create-log-analytics-workspace)-- [Add VMInsights solution to workspace.](./vminsights-configure-workspace.md#add-vminsights-solution-to-workspace)
+- [Add VMInsights solution to workspace.](./vminsights-configure-workspace.md#add-vminsights-solution-to-workspace) (Log Analytics agent only))
- [Install agents on virtual machine and virtual machine scale set to be monitored.](./vminsights-enable-overview.md) > [!NOTE]
azure-netapp-files Create Active Directory Connections https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/create-active-directory-connections.md
na Previously updated : 07/26/2022 Last updated : 07/29/2022 # Create and manage Active Directory connections for Azure NetApp Files
Several features of Azure NetApp Files require that you have an Active Directory
![Screenshot of the AES description field which is a checkbox.](../media/azure-netapp-files/active-directory-aes-encryption.png) See [Requirements for Active Directory connections](#requirements-for-active-directory-connections) for requirements.
-
+ ![Active Directory AES encryption](../media/azure-netapp-files/active-directory-aes-encryption.png)
+ * <a name="ldap-signing"></a>**LDAP Signing** This option enables LDAP signing. This functionality enables integrity verification for Simple Authentication and Security Layer (SASL) LDAP binds from Azure NetApp Files and the user-specified [Active Directory Domain Services domain controllers](/windows/win32/ad/active-directory-domain-services).
This feature is currently in preview. You need to register the feature before us
Get-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFSharedAD ``` You can also use [Azure CLI commands](/cli/azure/feature) `az feature register` and `az feature show` to register the feature and display the registration status.
-
+
+## <a name="reset-active-directory"></a> Reset Active Directory computer account password
+
+If you accidentally reset the password of the AD computer account on the AD server or the AD server is unreachable, you can safely reset the computer account password to preserve connectivity to your volumes. A reset affects all volumes on the SMB server.
+
+### Register the feature
+
+The reset Active Directory computer account password feature is currently in public preview. If you are using this feature for the first time, you need to register the feature first.
+
+1. Register the **reset Active Directory computer account password** feature:
+```azurepowershell-interactive
+Register-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFResetADAccountForVolume
+```
+2. Check the status of the feature registration. The **RegistrationState** may be in the `Registering` state for up to 60 minutes before changing to`Registered`. Wait until the status is `Registered` before continuing.
+```azurepowershell-interactive
+Get-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFResetADAccountForVolume
+```
+You can also use [Azure CLI commands](/cli/azure/feature) `az feature register` and `az feature show` to register the feature and display the registration status.
+
+### Steps
+
+1. Navigate to the volume **Overview** menu. Select **Reset Active Directory Account**.
+Alternately, navigate to the **Volumes** menu. Identify the volume for which you want to reset the Active Directory account and select the meatballs menu at the end of the row. Select **Reset Active Directory Account**.
+2. A warning message that explains the implications of this action will pop up. Type **yes** in the text box to proceed.
+ ## Next steps * [Understand guidelines for Active Directory Domain Services site design and planning for Azure NetApp Files](understand-guidelines-active-directory-domain-service-site.md)
azure-netapp-files Performance Impact Kerberos https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/performance-impact-kerberos.md
na Previously updated : 06/25/2021 Last updated : 07/22/2022 # Performance impact of Kerberos on Azure NetApp Files NFSv4.1 volumes
There are two areas of focus: light load and upper limit. The following lists de
**Performance impact of krb5:**
-* Low concurrency (r/w):
- * Sequential latency increased 0.3 ms.
- * Random I/O latency increased 0.2 ms.
- * Metadata I/O latency increased 0.2 ms.
-* High concurrency (r/w):
- * Maximum sequential throughput was unimpacted by krb5.
- * Maximum random I/O decreased by 30% for pure read workloads with the overall impact dropping to zero as the workload shifts to pure write.
- * Maximum metadata workload decreased 30%.
+* Average IOPS decreased by 53%
+* Average throughput decreased by 53%
+* Average latency increased by 3.2 ms
**Performance impact of krb5i:**
-* Low concurrency (r/w):
- * Sequential latency increased 0.5 ms.
- * Random I/O latency increased 0.2 ms.
- * Metadata I/O latency increased 0.2 ms.
-* High concurrency (r/w):
- * Maximum sequential throughput decreased by 70% overall regardless of the workload mixture.
- * Maximum random I/O decreased by 50% for pure read workloads with the overall impact decreasing to 25% as the workload shifts to pure write.
- * Maximum metadata workload decreased 30%.
+* Average IOPS decreased by 55%
+* Average throughput decreased by 55%
+* Average latency increased by 0.6 ms
**Performance impact of krb5p:**
-* Low concurrency (r/w):
- * Sequential latency increased 0.8 ms.
- * Random I/O latency increased 0.2 ms.
- * Metadata I/O latency increased 0.2 ms.
-* High concurrency (r/w):
- * Maximum sequential throughput decreased by 85% overall regardless of the workload mixture.
- * Maximum random I/O decreased by 65% for pure read workloads with the overall impact decreasing to 43% as the workload shifts to pure write.
- * Maximum metadata workload decreased 30%.
+* Average IOPS decreased by 77%
+* Average throughput decreased by 77%
+* Average latency increased by 1.6 ms
## Next steps
azure-netapp-files Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-netapp-files/whats-new.md
na Previously updated : 06/28/2022 Last updated : 07/29/2022
Azure NetApp Files is updated regularly. This article provides a summary about the latest new features and enhancements.
+## July 2022
+
+* [Active Directory connection enhancement: Reset Active Directory computer account password](create-active-directory-connections.md#reset-active-directory) (Preview)
+ If you (accidentally) reset the password of the AD computer account on the AD server or the AD server is unreachable, you can now safely reset the computer account password to preserve connectivity to your volumes directly from the portal.
+ ## June 2022 * [Disaster Recovery with Azure NetApp Files, JetStream DR and Azure VMware Solution](../azure-vmware/deploy-disaster-recovery-using-jetstream.md#disaster-recovery-with-azure-netapp-files-jetstream-dr-and-azure-vmware-solution)
- Disaster Recovery to cloud is a resilient and cost-effective way of protecting the workloads against site outages and data corruption events like ransomware. Leveraging the VMware VAIO framework, on-premise VMware workloads can be replicated to Azure Blob storage and recovered with minimal or close to no data loss and near-zero Recovery Time Objective (RTO). JetStream DR can now seamlessly recover workloads replicated from on-premises to Azure VMware Solution to Azure NetApp Files. JetStream DR enables cost-effective disaster recovery by consuming minimal resources at the DR site and using cost-effective cloud storage. JetStream DR automates recovery to Azure NetApp Files datastores using Azure Blob Storage. It can recover independent VMs or groups of related VMs into the recovery site infrastructure according to runbook settings. It also provides point-in-time recovery for ransomware protection.
+ Disaster Recovery to cloud is a resilient and cost-effective way of protecting the workloads against site outages and data corruption events like ransomware. Leveraging the VMware VAIO framework, on-premises VMware workloads can be replicated to Azure Blob storage and recovered with minimal or close to no data loss and near-zero Recovery Time Objective (RTO). JetStream DR can now seamlessly recover workloads replicated from on-premises to Azure VMware Solution to Azure NetApp Files. JetStream DR enables cost-effective disaster recovery by consuming minimal resources at the DR site and using cost-effective cloud storage. JetStream DR automates recovery to Azure NetApp Files datastores using Azure Blob Storage. It can recover independent VMs or groups of related VMs into the recovery site infrastructure according to runbook settings. It also provides point-in-time recovery for ransomware protection.
* [Azure NetApp Files datastores for Azure VMware Solution](../azure-vmware/attach-azure-netapp-files-to-azure-vmware-solution-hosts.md) (Preview)
azure-resource-manager Bicep Config Linter https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/bicep/bicep-config-linter.md
Title: Linter settings for Bicep config description: Describes how to customize configuration values for the Bicep linter Previously updated : 07/21/2022 Last updated : 07/29/2022 # Add linter settings in the Bicep config file
The following example shows the rules that are available for configuration.
"analyzers": { "core": { "enabled": true,
- "verbose": false,
"rules": { "adminusername-should-not-be-literal": { "level": "warning"
The following example shows the rules that are available for configuration.
"prefer-interpolation": { "level": "warning" },
+ "prefer-unquoted-property-names": {
+ "level": "warning"
+ },
"secure-parameter-default": { "level": "warning" },
For the rule about hardcoded environment URLs, you can customize which URLs are
{ "analyzers": { "core": {
- "verbose": false,
"enabled": true, "rules": { "no-hardcoded-env-urls": {
azure-resource-manager Linter Rule Prefer Unquoted Property Names https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/bicep/linter-rule-prefer-unquoted-property-names.md
+
+ Title: Linter rule - prefer unquoted property names
+description: Linter rule - prefer unquoted property names
+ Last updated : 07/29/2022++
+# Linter rule - prefer unquoted property names
+
+This rule finds unnecessary single quotes where an object property name is declared and where an object property is dereferenced with array access.
+
+In Bicep, quotes are optionally allowed when the object property keys contain numbers or special characters. For example, space, '-', or '.'. For more information, see [Objects](./data-types.md#objects).
+
+## Linter rule code
+
+Use the following value in the [Bicep configuration file](bicep-config-linter.md) to customize rule settings:
+
+`prefer-unquoted-property-names`
+
+## Solution
+
+Quotes are not required in following code:
+
+```bicep
+var obj = {
+ newProp: {} // Property name is fine.
+ 'my-prop' : {} // Quotes are required.
+ '1' : {} // Quotes are required.
+ 'myProp': {} // Quotes are NOT required.
+ }
+
+var x0 = obj.newProp // Code is fine.
+var x1 = obj['my-prop'] // Quotes and square brackets are required.
+var x2 = obj['1'] // Quotes and square brackets are required.
+var x3 = obj['myProp'] // Use obj.myProp instead.
+```
+
+You can fix it by removing the unnecessary quotes:
+
+```bicep
+var obj = {
+ newProp: {}
+ 'my-prop' : {}
+ '1' : {}
+ myProp: {}
+ }
++
+var x0 = obj.newProp
+var x1 = obj['my-prop']
+var x2 = obj['1']
+var x3 = obj.myProp
+```
+
+## Next steps
+
+For more information about the linter, see [Use Bicep linter](./linter.md).
azure-resource-manager Linter https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/bicep/linter.md
Title: Use Bicep linter description: Learn how to use Bicep linter. Previously updated : 07/22/2022 Last updated : 07/29/2022 # Use Bicep linter
The default set of linter rules is minimal and taken from [arm-ttk test cases](.
- [no-unused-vars](./linter-rule-no-unused-variables.md) - [outputs-should-not-contain-secrets](./linter-rule-outputs-should-not-contain-secrets.md) - [prefer-interpolation](./linter-rule-prefer-interpolation.md)
+- [prefer-unquoted-property-names](./linter-rule-prefer-unquoted-property-names.md)
- [secure-parameter-default](./linter-rule-secure-parameter-default.md) - [simplify-interpolation](./linter-rule-simplify-interpolation.md) - [use-protectedsettings-for-commandtoexecute-secrets](./linter-rule-use-protectedsettings-for-commandtoexecute-secrets.md)
azure-resource-manager Azure Services Resource Providers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-resource-manager/management/azure-services-resource-providers.md
The resources providers that are marked with **- registered** are registered by
| Microsoft.AnalysisServices | [Azure Analysis Services](../../analysis-services/index.yml) | | Microsoft.ApiManagement | [API Management](../../api-management/index.yml) | | Microsoft.AppConfiguration | [Azure App Configuration](../../azure-app-configuration/index.yml) |
-| Microsoft.AppPlatform | [Azure Spring Cloud](../../spring-cloud/overview.md) |
+| Microsoft.AppPlatform | [Azure Spring Apps](../../spring-apps/overview.md) |
| Microsoft.Attestation | Azure Attestation Service | | Microsoft.Authorization - [registered](#registration) | [Azure Resource Manager](../index.yml) | | Microsoft.Automation | [Automation](../../automation/index.yml) |
The resources providers that are marked with **- registered** are registered by
| Microsoft.MarketplaceApps | core | | Microsoft.MarketplaceOrdering - [registered](#registration) | core | | Microsoft.Media | [Media Services](/azure/media-services/) |
-| Microsoft.Microservices4Spring | [Azure Spring Cloud](../../spring-cloud/overview.md) |
+| Microsoft.Microservices4Spring | [Azure Spring Apps](../../spring-apps/overview.md) |
| Microsoft.Migrate | [Azure Migrate](../../migrate/migrate-services-overview.md) | | Microsoft.MixedReality | [Azure Spatial Anchors](../../spatial-anchors/index.yml) | | Microsoft.NetApp | [Azure NetApp Files](../../azure-netapp-files/index.yml) |
azure-video-indexer Concepts Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-video-indexer/concepts-overview.md
Use textual and visual content moderation models to keep your users safe from in
## Insights
-Insights contain an aggregated view of the data: faces, topics, emotions. Azure Video Indexer analyzes the video and audio content by running 30+ AI models, generating rich insights. Below is an illustration of the audio and video analysis performed by Azure Video Indexer in the background.
+Insights contain an aggregated view of the data: faces, topics, emotions. Azure Video Indexer analyzes the video and audio content by running 30+ AI models, generating rich insights. For more information about available models, see [overview](video-indexer-overview.md).
-> [!div class="mx-imgBorder"]
-> :::image type="content" source="./media/video-indexer-overview/model-chart.png" alt-text="Diagram of Azure Video Indexer flow.":::
-
[!INCLUDE [insights](./includes/insights.md)] The [Azure Video Indexer](https://www.videoindexer.ai/) website enables you to use your video's deep insights to: find the right media content, locate the parts that youΓÇÖre interested in, and use the results to create an entirely new project. Once created, the project can be rendered and downloaded from Azure Video Indexer and be used in your own editing applications or downstream workflows. For more information, see [Use editor to create projects](use-editor-create-project.md).
azure-video-indexer Video Indexer Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/azure-video-indexer/video-indexer-overview.md
[!INCLUDE [regulation](./includes/regulation.md)]
-> [!NOTE]
-> The service is now rebranded from Azure Video Analyzer for Media to **Azure Video Indexer**. Click [here](https://vi.microsoft.com) to read more.
- Azure Video Indexer is a cloud application, part of Azure Applied AI Services, built on Azure Media Services and Azure Cognitive Services (such as the Face, Translator, Computer Vision, and Speech). It enables you to extract the insights from your videos using Azure Video Indexer video and audio models. Azure Video Indexer analyzes the video and audio content by running 30+ AI models, generating rich insights. Below is an illustration of the audio and video analysis performed by Azure Video Indexer in the background. > [!div class="mx-imgBorder"]
-> :::image type="content" source="./media/video-indexer-overview/model-chart.png" alt-text="Diagram of Azure Video Indexer flow.":::
+> :::image type="content" source="./media/video-indexer-overview/model-chart.png" alt-text="Diagram of Azure Video Indexer flow." lightbox="./media/video-indexer-overview/model-chart.png":::
-To start extracting insights with Azure Video Indexer, you need to [create an account](connect-to-azure.md) and upload videos, see the [how can I get started](#how-can-i-get-started-with-azure-video-indexer) section below.
+To start extracting insights with Azure Video Indexer, see the [how can I get started](#how-can-i-get-started-with-azure-video-indexer) section below.
## Compliance, Privacy and Security
batch Batch Cli Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/batch/batch-cli-get-started.md
To get help with any Batch command, add `-h` to the end of your command. Don't a
To return verbose command output, add `-v` or `-vv` to the end of your command. Use these switches to display the full error output. The `-vv` flag returns the actual REST requests and responses.
-To view the command output in JSON format, add `--json` to the end of your command. For example, to display the properties of a pool named **pool001**, run `az batch pool show pool001 --json`. Then, copy and modify the output to [create Batch resources using a JSON configuration file](#create-resources-with-json).
+To view the command output in JSON format, add `--json` to the end of your command. For example, to display the properties of a pool named **pool001**, run `az batch pool show pool001 --json`. Then, copy and modify the output to [create Batch resources using a JSON configuration file](#create-resources-with-json).
+
+**General Azure CLI troubleshooting**
++ ## Next steps > [!div class="nextstepaction"]
center-sap-solutions Install Software https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/center-sap-solutions/install-software.md
Before you can download the software, set up an Azure Storage account for the do
- `wheel` version 0.37.1 - `jq` version 1.6 - `ansible` version 2.9.27
+ - `netaddr` version 0.8.0
- `zip`
+ - `netaddr` version 0.8.0
1. Sign in to Azure:
Before you can download the software, set up an Azure Storage account for the do
1. Download the following shell script for the deployer VM packages. ```azurecli
- wget "https://raw.githubusercontent.com/Azure/ACSS-preview/main/Installation%20Script/DownloadDeployerVMPackages.sh" -O "DownloadDeployerVMPackages.sh"
+ wget "https://raw.githubusercontent.com/Azure/Azure-Center-for-SAP-solutions-preview/main/DownloadDeployerVMPackages.sh" -O "DownloadDeployerVMPackages.sh"
``` 1. Update the shell script's file permissions.
cloud-services Cloud Services Guestos Msrc Releases https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cloud-services/cloud-services-guestos-msrc-releases.md
na Previously updated : 7/11/2022 Last updated : 7/29/2022 # Azure Guest OS The following tables show the Microsoft Security Response Center (MSRC) updates applied to the Azure Guest OS. Search this article to determine if a particular update applies to the Guest OS you are using. Updates always carry forward for the particular [family][family-explain] they were introduced in.
+>[!NOTE]
+>
+>The July Guest OS is currently being rolled out to Cloud Service VMs that are configured for automatic updates. When the rollout is complete, this version will be made available for manual updates through the Azure portal and configuration files. The following patches are included in the July Guest OS. This list is subject to change.
+
+## July 2022 Guest OS
+
+| Product Category | Parent KB Article | Vulnerability Description | Guest OS | Date First Introduced |
+| | | | | |
+| Rel 22-07 | [5015811] | Latest Cumulative Update(LCU) | 6.45 | Jul 12, 2022 |
+| Rel 22-07 | [5015827] | Latest Cumulative Update(LCU) | 7.13 | Jul 12, 2022 |
+| Rel 22-07 | [5015808] | Latest Cumulative Update(LCU) | 5.69 | Jul 12, 2022 |
+| Rel 22-07 | [5015805] | IE Cumulative Updates | 2.124, 3.111, 4.104 | Jul 12, 2022 |
+| Rel 22-07 | [5013641] | . NET Framework 3.5 and 4.7.2 Cumulative Update | 6.46 | May 10, 2022 |
+| Rel 22-07 | [5013630] | .NET Framework 4.8 Security and Quality Rollup | 7.14 | May 10, 2022 |
+| Rel 22-07 | [5016058] | Servicing Stack update | 5.70 | Jul 12, 2022 |
+| Rel 22-07 | [4494175] | Microcode | 5.70 | Sep 1, 2020 |
+| Rel 22-07 | [4494174] | Microcode | 6.46 | Sep 1, 2020 |
+| Rel 22-07 | [5013637] | .NET Framework 3.5 Security and Quality Rollup LKG  | 2.126 | Jun 14, 2022 |
+| Rel 22-07 | [5013644] | .NET Framework 4.6.2 Security and Quality Rollup LKG  | 2.126 | May 10, 2022 |
+| Rel 22-07 | [5013638] | .NET Framework 3.5 Security and Quality Rollup LKG 6B is a Non-Sec Release  | 4.106 | Jun 14, 2020 |
+| Rel 22-07 | [5013643] | .NET Framework 4.6.2 Security and Quality Rollup LKG 6B is a Non-Sec Release  | 4.106 | May 10, 2022 |
+| Rel 22-07 | [5013635] | .NET Framework 3.5 Security  and Quality Rollup LKG  | 3.113 | Jun 14, 2022 |
+| Rel 22-07 | [5013642] | .NET Framework 4.6.2 Security and Quality Rollup LKG  | 3.113 | May 10, 2022 |
+| Rel 22-07 | [5015861] | Monthly Rollup  | 2.126 | Jul 12, 2022 |
+| Rel 22-07 | [5015863] | Monthly Rollup  | 3.113 | Jul 12, 2022 |
+| Rel 22-07 | [5015874] | Monthly Rollup  | 4.106 | Jul 12, 2022 |
+| Rel 22-07 | [5016263] | Servicing Stack update  | 3.113 | Jul 12, 2022 |
+| Rel 22-07 | [5016264] | Servicing Stack update  | 4.106 | Jul 12, 2022 |
+| Rel 22-07 | [4578013] | OOB Standalone Security Update  | 4.106 | Aug 19, 2020 |
+| Rel 22-07 | [5016057] | Servicing Stack update  | 2.126 | Jul 12, 2022 |
+
+[5015811]: https://support.microsoft.com/kb/5015811
+[5015827]: https://support.microsoft.com/kb/5015827
+[5015808]: https://support.microsoft.com/kb/5015808
+[5015805]: https://support.microsoft.com/kb/5015805
+[5013641]: https://support.microsoft.com/kb/5013641
+[5013630]: https://support.microsoft.com/kb/5013630
+[5016058]: https://support.microsoft.com/kb/5016058
+[4494175]: https://support.microsoft.com/kb/4494175
+[4494174]: https://support.microsoft.com/kb/4494174
+[5013637]: https://support.microsoft.com/kb/5013637
+[5013644]: https://support.microsoft.com/kb/5013644
+[5013638]: https://support.microsoft.com/kb/5013638
+[5013643]: https://support.microsoft.com/kb/5013643
+[5013635]: https://support.microsoft.com/kb/5013635
+[5013642]: https://support.microsoft.com/kb/5013642
+[5015861]: https://support.microsoft.com/kb/5015861
+[5015863]: https://support.microsoft.com/kb/5015863
+[5015874]: https://support.microsoft.com/kb/5015874
+[5016263]: https://support.microsoft.com/kb/5016263
+[5016264]: https://support.microsoft.com/kb/5016264
+[4578013]: https://support.microsoft.com/kb/4578013
+[5016057]: https://support.microsoft.com/kb/5016057
## June 2022 Guest OS
cloud-services Cloud Services Guestos Update Matrix https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cloud-services/cloud-services-guestos-update-matrix.md
The September Guest OS has released.
## Family 7 releases **Windows Server 2022**
+.NET Framework installed: 4.8
+ | Configuration string | Release date | Disable date | | | | | | WA-GUEST-OS-7.13_202206-01 | July 11, 2022 | Post 7.15 |
cloud-services Cloud Services How To Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cloud-services/cloud-services-how-to-monitor.md
Most likely you have two **.cscfg** files, one named **ServiceConfiguration.clou
## Use Application Insights
-When you publish the Cloud Service from Visual Studio, you are given the option to send the diagnostic data to Application Insights. You can create the Application Insights Azure resource at that time or send the data to an existing Azure resource. Your cloud service can be monitored by Application Insights for availability, performance, failures, and usage. Custom charts can be added to Application Insights so that you can see the data that matters the most. Role instance data can be collected by using the Application Insights SDK in your cloud service project. For more information on how to integrate Application Insights, see [Application Insights with Cloud Services](../azure-monitor/app/cloudservices.md).
+When you publish the Cloud Service from Visual Studio, you are given the option to send the diagnostic data to Application Insights. You can create the Application Insights Azure resource at that time or send the data to an existing Azure resource. Your cloud service can be monitored by Application Insights for availability, performance, failures, and usage. Custom charts can be added to Application Insights so that you can see the data that matters the most. Role instance data can be collected by using the Application Insights SDK in your cloud service project. For more information on how to integrate Application Insights, see [Application Insights with Cloud Services](../azure-monitor/app/azure-web-apps-net-core.md).
Note that while you can use Application Insights to display the performance counters (and the other settings) you have specified through the Windows Azure Diagnostics extension, you only get a richer experience by integrating the Application Insights SDK into your worker and web roles. ## Next steps -- [Learn about Application Insights with Cloud Services](../azure-monitor/app/cloudservices.md)
+- [Learn about Application Insights with Cloud Services](../azure-monitor/app/azure-web-apps-net-core.md)
- [Set up performance counters](diagnostics-performance-counters.md)
cloud-services Diagnostics Performance Counters https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cloud-services/diagnostics-performance-counters.md
A performance counter can be added to your cloud service for either Azure Diagno
### Application Insights
-Azure Application Insights for Cloud Services allows you specify what performance counters you want to collect. After you [add Application Insights to your project](../azure-monitor/app/cloudservices.md#sdk), a config file named **ApplicationInsights.config** is added to your Visual Studio project. This config file defines what type of information Application Insights collects and sends to Azure.
+Azure Application Insights for Cloud Services allows you specify what performance counters you want to collect. After you [add Application Insights to your project](../azure-monitor/app/azure-web-apps-net-core.md), a config file named **ApplicationInsights.config** is added to your Visual Studio project. This config file defines what type of information Application Insights collects and sends to Azure.
Open the **ApplicationInsights.config** file and find the **ApplicationInsights** > **TelemetryModules** element. Each `<Add>` child-element defines a type of telemetry to collect, along with its configuration. The performance counter telemetry module type is `Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector.PerformanceCollectorModule, Microsoft.AI.PerfCounterCollector`. If this element is already defined, do not add it a second time. Each performance counter to collect is defined under a node named `<Counters>`. Here is an example that collects drive performance counters:
Application Insights automatically collects the following performance counters:
* \Process(??APP_WIN32_PROC??)\IO Data Bytes/sec * \Processor(_Total)\% Processor Time
-For more information, see [System performance counters in Application Insights](../azure-monitor/app/performance-counters.md) and [Application Insights for Azure Cloud Services](../azure-monitor/app/cloudservices.md#performance-counters).
+For more information, see [System performance counters in Application Insights](../azure-monitor/app/performance-counters.md) and [Application Insights for Azure Cloud Services](../azure-monitor/app/azure-web-apps-net-core.md).
### Azure Diagnostics
As previously stated, the performance counters you want to collect are defined i
## More information -- [Application Insights for Azure Cloud Services](../azure-monitor/app/cloudservices.md#performance-counters)
+- [Application Insights for Azure Cloud Services](../azure-monitor/app/azure-web-apps-net-core.md)
- [System performance counters in Application Insights](../azure-monitor/app/performance-counters.md) - [Specifying a Counter Path](/windows/win32/perfctrs/specifying-a-counter-path) - [Azure Diagnostics Schema - Performance Counters](../azure-monitor/agents/diagnostics-extension-schema-windows.md#performancecounters-element)
cognitive-services How To Use Custom Entity Pattern Matching https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/Speech-Service/how-to-use-custom-entity-pattern-matching.md
Last updated 11/15/2021 ms.devlang: cpp, csharp
-zone_pivot_groups: programming-languages-set-nine
+zone_pivot_groups: programming-languages-set-thirteen
Be sure you have the following items before you begin this guide:
::: zone pivot="programming-language-cpp" [!INCLUDE [cpp](includes/how-to/intent-recognition/cpp/pattern-matching.md)] ::: zone-end+
cognitive-services How To Use Simple Language Pattern Matching https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/Speech-Service/how-to-use-simple-language-pattern-matching.md
Last updated 04/19/2022
-zone_pivot_groups: programming-languages-set-nine
+zone_pivot_groups: programming-languages-set-thirteen
Intents will be added using calls to the IntentRecognizer->AddIntent() API.
[!INCLUDE [cpp](includes/how-to/intent-recognition/cpp/simple-pattern-matching.md)] ::: zone-end
-## Next steps
-
-* Improve your pattern matching by using [custom entities](how-to-use-custom-entity-pattern-matching.md).
-* Look through our [GitHub samples](https://github.com/Azure-Samples/cognitive-services-speech-sdk).
cognitive-services Language Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/Speech-Service/language-support.md
The Intent Recognizer Pattern Matcher supports the following locales:
| Locale | Locale (BCP-47) | |--|--| | English (United States) | `en-US` |
+| Chinese (Cantonese, Traditional) | `zh-HK` |
+| Chinese (Mandarin, Simplified) | `zh-CN` |
## Next steps
cognitive-services Get Started With Document Translation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/Translator/document-translation/get-started-with-document-translation.md
Previously updated : 06/23/2022 Last updated : 07/28/2022 recommendations: false ms.devlang: csharp, golang, java, javascript, python
gradle run
> [!IMPORTANT] >
-> For the code samples below, you'll hard-code your Shared Access Signature (SAS) URL where indicated. Remember to remove the SAS URL from your code when you're done, and never post it publicly. For production, use a secure way of storing and accessing your credentials like [Azure Key Vault](../../../key-vault/general/overview.md). See the Cognitive Services [security](../../cognitive-services-security.md) article for more information.
+> For the code samples below, you'll hard-code your Shared Access Signature (SAS) URL where indicated. Remember to remove the SAS URL from your code when you're done, and never post it publicly. For production, use a secure way of storing and accessing your credentials like [Azure Managed Identity](managed-identity.md). See the Azure Storage [security](/azure/storage/common/authorize-data-access) article for more information.
> > You may need to update the following fields, depending upon the operation: >>>
cognitive-services Migrate https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/concepts/migrate.md
Previously updated : 12/03/2021 Last updated : 07/27/2022
cognitive-services Model Lifecycle https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/concepts/model-lifecycle.md
Previously updated : 05/25/2022 Last updated : 07/27/2022
By default, API requests will use the latest Generally Available model. You can
> If youΓÇÖre using the SDK for C#, Java, JavaScript or Python, see the reference documentation for information on the appropriate model-version parameter. For synchronous endpoints, use the `model-version` query parameter. For example:
-POST `<resource-url>/text/analytics/v3.1/sentiment?model-version=2021-10-01-preview`.
+`POST <your-language-resource-endpoint>/language/:analyze-text?api-version=2022-05-01&model-version=2022-06-01`.
For asynchronous endpoints, use the `model-version` property in the request body under task properties.
Use the table below to find which model versions are supported by each feature:
| Feature | Supported versions | Latest Generally Available version | Latest preview version | |--||||
-| Sentiment Analysis and opinion mining | `2019-10-01` | `2021-10-01` | |
+| Sentiment Analysis and opinion mining | `2019-10-01`, `2020-04-01`, `2021-10-01`, `2022-06-01` | `2022-06-01` | |
| Language Detection | `2021-11-20` | `2021-11-20` | | | Entity Linking | `2021-06-01` | `2021-06-01` | | | Named Entity Recognition (NER) | `2021-06-01` | `2021-06-01` | |
Use the table below to find which model versions are supported by each feature:
| PII detection for conversations (Preview) | `2022-05-15-preview` | | `2022-05-15-preview` | | Question answering | `2021-10-01` | `2021-10-01` | | | Text Analytics for health | `2021-05-15`, `2022-03-01` | `2022-03-01` | |
-| Key phrase extraction | `2021-06-01` | `2021-06-01` | |
+| Key phrase extraction | `2019-10-01`, `2020-07-01`, `2021-06-01`, `2022-07-01` | `2022-07-01` | |
| Document summarization (preview) | `2021-08-01` | | `2021-08-01` | | Conversation summarization (preview) | `2022-05-15-preview` | | `2022-05-15-preview` |
cognitive-services Call Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/key-phrase-extraction/how-to/call-api.md
Previously updated : 03/01/2022 Last updated : 07/27/2022
cognitive-services Use Containers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/key-phrase-extraction/how-to/use-containers.md
Previously updated : 11/02/2021 Last updated : 07/27/2022 keywords: on-premises, Docker, container, natural language processing
cognitive-services Language Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/key-phrase-extraction/language-support.md
Previously updated : 11/02/2021 Last updated : 07/28/2022
Use this article to find the natural languages supported by Key Phrase Analysis.
## Supported languages > [!NOTE]
-> Languages are added as new [model versions](how-to/call-api.md#specify-the-key-phrase-extraction-model) are released for specific features. The current model version for Key Phrase Extraction is `2021-06-01`.
-
-| Language | Language code | v3 support | Starting with v3 model version: | Notes |
-|:-|:-:|:-:|:--:|::|
-| Afrikaans      |     `af`  |     ✓      |                2020-07-01                 |                    |
-| Bulgarian      |     `bg`  |     ✓      |                2020-07-01                 |                    |
-| Catalan    |     `ca`  |     ✓      |                2020-07-01                 |                    |
-| Chinese-Simplified    |     `zh-hans` |     ✓      |                2021-06-01                 |                    |
-| Croatian | `hr` | Γ£ô | 2020-07-01 | |
-| Danish | `da` | Γ£ô | 2019-10-01 | |
-| Dutch                 |     `nl`      |     ✓      |                2019-10-01                 |                    |
-| English               |     `en`      |     ✓      |                2019-10-01                 |                    |
-| Estonian              |     `et`      |     ✓      |                2020-07-01                 |                    |
-| Finnish               |     `fi`      |     ✓      |                2019-10-01                 |                    |
-| French                |     `fr`      |     ✓      |                2019-10-01                 |                    |
-| German                |     `de`      |     ✓      |                2019-10-01                 |                    |
-| Greek    |     `el`  |     ✓      |                2020-07-01                 |                    |
-| Hungarian    |     `hu`  |     ✓      |                2020-07-01                 |                    |
-| Italian               |     `it`      |     ✓      |                2019-10-01                 |                    |
-| Indonesian            |     `id`      |     ✓      |                2020-07-01                 |                    |
-| Japanese              |     `ja`      |     ✓      |                2019-10-01                 |                    |
-| Korean                |     `ko`      |     ✓      |                2019-10-01                 |                    |
-| Latvian               |     `lv`      |     ✓      |                2020-07-01                 |                    |
-| Norwegian  (Bokmål)   |     `no`      |     ✓      |                2020-07-01                 | `nb` also accepted |
-| Polish                |     `pl`      |    ✓      |                2019-10-01                 |                    |
-| Portuguese (Brazil)   |    `pt-BR`    |     ✓      |                2019-10-01                 |                    |
-| Portuguese (Portugal) |    `pt-PT`    |    ✓      |                2019-10-01                 | `pt` also accepted |
-| Romanian              |     `ro`      |     ✓      |                2020-07-01                 |                    |
-| Russian               |     `ru`      |     ✓      |                2019-10-01                 |                    |
-| Spanish               |     `es`      |     ✓      |                2019-10-01                 |                    |
-| Slovak                |     `sk`      |     ✓      |                2020-07-01                 |                    |
-| Slovenian             |     `sl`      |     ✓      |                2020-07-01                 |                    |
-| Swedish               |     `sv`      |     ✓      |                2019-10-01                 |                    |
-| Turkish              |     `tr`      |     ✓      |                2020-07-01                 |                    |
+> Languages are added as new [model versions](how-to/call-api.md#specify-the-key-phrase-extraction-model) are released for specific features. The current model version for Key Phrase Extraction is `2022-07-01`.
+
+Total supported language codes: 31
+
+| Language | Language code | Starting with model version | Notes |
+|:-|:-:|:--:|::|
+| Afrikaans      |     `af`  |                2020-07-01                 |                    |
+| Bulgarian      |     `bg`  |                2020-07-01                 |                    |
+| Catalan    |     `ca`  |                2020-07-01                 |                    |
+| Chinese-Simplified    |     `zh-hans` |                2021-06-01                 |                    |
+| Croatian | `hr` | 2020-07-01 | |
+| Danish | `da` | 2019-10-01 | |
+| Dutch                 |     `nl`      |                2019-10-01                 |                    |
+| English               |     `en`      |                2019-10-01                 |                    |
+| Estonian              |     `et`      |                2020-07-01                 |                    |
+| Finnish               |     `fi`      |                2019-10-01                 |                    |
+| French                |     `fr`      |                2019-10-01                 |                    |
+| German                |     `de`      |                2019-10-01                 |                    |
+| Greek    |     `el`  |                2020-07-01                 |                    |
+| Hungarian    |     `hu`  |                2020-07-01                 |                    |
+| Italian               |     `it`      |                2019-10-01                 |                    |
+| Indonesian            |     `id`      |                2020-07-01                 |                    |
+| Japanese              |     `ja`      |                2019-10-01                 |                    |
+| Korean                |     `ko`      |                2019-10-01                 |                    |
+| Latvian               |     `lv`      |                2020-07-01                 |                    |
+| Norwegian  (Bokmål)   |     `no`      |                2020-07-01                 | `nb` also accepted |
+| Polish                |     `pl`      |                2019-10-01                 |                    |
+| Portuguese (Brazil)   |    `pt-BR`    |                2019-10-01                 |                    |
+| Portuguese (Portugal) |    `pt-PT`    |                2019-10-01                 | `pt` also accepted |
+| Romanian              |     `ro`      |                2020-07-01                 |                    |
+| Russian               |     `ru`      |                2019-10-01                 |                    |
+| Spanish               |     `es`      |                2019-10-01                 |                    |
+| Slovak                |     `sk`      |                2020-07-01                 |                    |
+| Slovenian             |     `sl`      |                2020-07-01                 |                    |
+| Swedish               |     `sv`      |                2019-10-01                 |                    |
+| Turkish              |     `tr`      |                2020-07-01                 |                    |
## Next steps
-[Key phrase analysis overview](overview.md)
+* [how to call the API](how-to/call-api.md) for more information.
+* [Quickstart: Use the key phrase extraction client library and REST API](quickstart.md)
cognitive-services Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/language-detection/overview.md
Previously updated : 11/02/2021 Last updated : 07/27/2022
cognitive-services Extract Excel Information https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/named-entity-recognition/tutorials/extract-excel-information.md
Previously updated : 11/02/2021 Last updated : 07/27/2022
cognitive-services How To Call https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/personally-identifiable-information/how-to-call.md
Previously updated : 03/01/2022 Last updated : 07/27/2022
# How to detect and redact Personally Identifying Information (PII)
-The PII feature can evaluate unstructured text, extract extract sensitive information (PII) and health information (PHI) in text across several pre-defined categories.
+The PII feature can evaluate unstructured text, extract sensitive information (PII) and health information (PHI) in text across several pre-defined categories.
## Determine how to process the data (optional)
The API will attempt to detect the [defined entity categories](concepts/entity-c
## Getting PII results
-When you get results from PII detection, you can stream the results to an application or save the output to a file on the local system. The API response will include [recognized entities](concepts/entity-categories.md), including their categories and sub-categories, and confidence scores. The text string with the PII entities redacted will also be returned.
+When you get results from PII detection, you can stream the results to an application or save the output to a file on the local system. The API response will include [recognized entities](concepts/entity-categories.md), including their categories and subcategories, and confidence scores. The text string with the PII entities redacted will also be returned.
## Service and data limits
cognitive-services Limits https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/question-answering/concepts/limits.md
Question answering limits provided below are a combination of the [Azure Cogniti
The maximum number of knowledge bases is based on [Azure Cognitive Search tier limits](../../../../search/search-limits-quotas-capacity.md).
-|**Azure Cognitive Search tier** | **Free** | **Basic** |**S1** | **S2**| **S3** |**S3 HD**|
-|||||||-|
-|Maximum number of published knowledge bases allowed|2|14|49|199|199|2,999|
+Choose the appropriate [Azure search SKU](https://azure.microsoft.com/pricing/details/search/) for your scenario. Typically, you decide the number of knowledge bases you need based on number of different subject domains. One subject domain (for a single language) should be in one knowledge base.
+
+With custom question answering, you have a choice to set up your language resource in a single language or multiple languages. You can make this selection when you create your first project in the [Language Studio](https://language.azure.com/).
+
+ > [!IMPORTANT]
+ > You can publish N-1 knowledge bases of a single language or N/2 knowledge bases of different languages in a particular tier, where N is the maximum indexes allowed in the tier. Also check the maximum size and the number of documents allowed per tier.
+
+For example, if your tier has 15 allowed indexes, you can publish 14 knowledge bases of the same language (one index per published knowledge base). The 15th index is used for all the knowledge bases for authoring and testing. If you choose to have knowledge bases in different languages, then you can only publish seven knowledge bases.
- For example, if your tier has 15 allowed indexes, you can publish 14 knowledge bases (one index per published knowledge base). The 15th index, `testkb`, is used for all the knowledge bases for authoring and testing.
## Extraction limits
File names may not include the following characters:
### Maximum number of files > [!NOTE]
-> Question answering currently has no limits on the number of sources that can be added. Throughput is currently capped at 10 transactions per second for both management APIs and prediction APIs.
+> Question answering currently has no limits on the number of sources that can be added. Throughput is currently capped at 10 text records per second for both management APIs and prediction APIs.
### Maximum number of deep-links from URL
These represent the limits when unstructured files are used to *Create new proje
These represent the limits when REST API is used to answer a question based without having to create a project/knowledge base: * Number of documents: 5 * Maximum size of a single document: 5,120 characters
-* Maximum three responses per document.
+* Maximum three responses per document.
cognitive-services Call Api https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/sentiment-opinion-mining/how-to/call-api.md
Previously updated : 03/15/2022 Last updated : 07/27/2022
cognitive-services Language Support https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/sentiment-opinion-mining/language-support.md
Title: Sentiment Analysis and Opinion Mining language support
-description: This article explains which natural languages are supported by the Sentiment Analysis and Opinion Mining features of Azure Cognitive Service for Language.
+description: This article explains which languages are supported by the Sentiment Analysis and Opinion Mining features of Azure Cognitive Service for Language.
Previously updated : 11/08/2021 Last updated : 07/27/2022 # Sentiment Analysis and Opinion Mining language support
-Use this article to learn which natural languages are supported by Sentiment Analysis and Opinion Mining.
+Use this article to learn which languages are supported by Sentiment Analysis and Opinion Mining.
> [!NOTE]
-> Languages are added as new model versions are released. The current Generally Available model version for Sentiment Analysis is `2020-04-01`. To use the latest preview model version (`2021-10-01-preview`), specify it in your API call. See [how to call the API](how-to/call-api.md#specify-the-sentiment-analysis-model) for more information.
+> Languages are added as new model versions are released. The current generally available model version for Sentiment Analysis is `2022-06-01`.
## Sentiment Analysis language support
-| Language | Language code | Starting with model version: | Notes |
-|:-|:-:|:--:|-:|
+Total supported language codes: 21
+
+| Language | Language code | Starting with model version | Notes |
+|-|-|--|-|
| Chinese-Simplified | `zh-hans` | 2019-10-01 | `zh` also accepted | | Chinese-Traditional | `zh-hant` | 2019-10-01 | | | Dutch | `nl` | 2019-10-01 | |
Use this article to learn which natural languages are supported by Sentiment Ana
| Italian | `it` | 2019-10-01 | | | Japanese | `ja` | 2019-10-01 | | | Korean | `ko` | 2019-10-01 | |
-| Norwegian (Bokmål) | `no` | 2020-04-01 | |
-| Portuguese (Brazil) | `pt-BR` | 2020-04-01 | |
+| Norwegian (Bokmål) | `no` | 2019-10-01 | |
+| Portuguese (Brazil) | `pt-BR` | 2019-10-01 | |
| Portuguese (Portugal) | `pt-PT` | 2019-10-01 | `pt` also accepted | | Spanish | `es` | 2019-10-01 | |
-| Turkish | `tr` | 2020-04-01 | |
+| Arabic | `ar` | 2022-06-01 | |
+| Danish | `da` | 2022-06-01 | |
+| Greek | `el` | 2022-06-01 | |
+| Finnish | `fi` | 2022-06-01 | |
+| Polish | `pl` | 2022-06-01 | |
+| Russian | `ru` | 2022-06-01 | |
+| Swedish | `sv` | 2022-06-01 | |
### Opinion Mining language support
-| Language | Language code | Starting with model version: | Notes |
-|:-|:-:|::|-:|
+Total supported language codes: 7
+
+| Language | Language code | Starting with model version | Notes |
+|-|-||-|
| English | `en` | 2020-04-01 | |
-| French | `fr` | 2021-10-01-preview | |
-| German | `de` | 2021-10-01-preview | |
-| Italian | `it` | 2021-10-01-preview | |
-| Portuguese (Brazil) | `pt-BR` | 2021-10-01-preview | |
-| Portuguese (Portugal) | `pt-PT` | 2021-10-01-preview | `pt` also accepted |
-| Spanish | `es` | 2021-10-01-preview | |
+| French | `fr` | 2021-10-01 | |
+| German | `de` | 2021-10-01 | |
+| Italian | `it` | 2021-10-01 | |
+| Portuguese (Brazil) | `pt-BR` | 2021-10-01 | |
+| Portuguese (Portugal) | `pt-PT` | 2021-10-01 | `pt` also accepted |
+| Spanish | `es` | 2021-10-01 | |
## Next steps
-[Sentiment Analysis and Opinion Mining overview](overview.md)
+* [how to call the API](how-to/call-api.md#specify-the-sentiment-analysis-model) for more information.
+* [Quickstart: Use the Sentiment Analysis client library and REST API](quickstart.md)
cognitive-services Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/sentiment-opinion-mining/overview.md
Previously updated : 06/15/2022 Last updated : 07/27/2022
Sentiment analysis and opinion mining are features offered by [Azure Cognitive Service for Language](../overview.md), a collection of machine learning and AI algorithms in the cloud for developing intelligent applications that involve written language. These features help you find out what people think of your brand or topic by mining text for clues about positive or negative sentiment, and can associate them with specific aspects of the text.
+Both sentiment analysis and opinion mining work with a variety of [written languages](./language-support.md).
+ * [**Quickstarts**](quickstart.md) are getting-started instructions to guide you through making requests to the service. * [**How-to guides**](how-to/call-api.md) contain instructions for using the service in more specific or customized ways.
An AI system includes not only the technology, but also the people who will use
## Next steps There are two ways to get started using the entity linking feature:
-* [Language Studio](../language-studio.md), which is a web-based platform that enables you to try several Azure Cognitive Service for Language features without needing to write code.
+* [Language Studio](../language-studio.md), which is a web-based platform that enables you to try several Language service features without needing to write code.
* The [quickstart article](quickstart.md) for instructions on making requests to the service using the REST API and client library SDK.
cognitive-services Whats New https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cognitive-services/language-service/whats-new.md
Previously updated : 07/18/2022 Last updated : 07/28/2022
Azure Cognitive Service for Language is updated on an ongoing basis. To stay up-
* Performance and quality improvements for the following 11 [languages](./sentiment-opinion-mining/language-support.md) supported by sentiment analysis: `ar`, `da`, `el`, `fi`, `hi`, `nl`, `no`, `pl`, `ru`, `sv`, `tr` * Performance and quality improvements for the following 20 [languages](./key-phrase-extraction/language-support.md) supported by key phrase extraction: `af`, `bg`, `ca`, `hr`, `da`, `nl`, `et`, `fi`, `el`, `hu`, `id`, `lv`, `no`, `pl`, `ro`, `ru`, `sk`, `sl`, `sv`, `tr`
+* Conversational PII is now available in all Azure regions supported by the Language service.
+* A new version of the Language API (`2022-07-15-preview`) has been released. It provides:
+ * Automatic language detection for asynchronous tasks.
+ * For Text Analytics for health, confidence score are now returned in relations.
+
+ To use this version in your REST API calls, use the following URL:
+
+ ```http
+ <your-language-resource-endpoint>/language/:analyze-text?api-version=2022-07-15-preview`
+ ```
+
## June 2022 * v1.0 client libraries for [conversational language understanding](./conversational-language-understanding/how-to/call-api.md?tabs=azure-sdk#send-a-conversational-language-understanding-request) and [orchestration workflow](./orchestration-workflow/how-to/call-api.md?tabs=azure-sdk#send-an-orchestration-workflow-request) are Generally Available for the following languages: * [C#](https://github.com/Azure/azure-sdk-for-net/tree/Azure.AI.Language.Conversations_1.0.0/sdk/cognitivelanguage/Azure.AI.Language.Conversations)
communication-services Custom Teams Endpoint Use Cases https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/custom-teams-endpoint-use-cases.md
Title: Use cases for Azure Communication Services support Teams identities
+ Title: Use cases of Azure Communication Services support for Teams identities
-description: This article describes use cases for Azure Communication Services support Teams identities.
+description: This article describes use cases of Azure Communication Services support for Teams identities.
-# Azure Communication Services support Teams identities ΓÇö Use cases
+# Azure Communication Services support for Teams identities ΓÇö Use cases
-Microsoft Teams provides identities managed by Azure Active Directory and calling experiences controlled by Teams Admin Center and policies. Users might have assigned licenses to enable PSTN connectivity and advanced calling capabilities of Microsoft Teams Phone. Azure Communication Services support Teams identities for managing Teams VoIP calls, Teams PSTN calls, and join Teams meetings. Developers might extend the Azure Communication Services with Graph API to provide contextual data from Microsoft 365 ecosystem. This page is providing inspiration on how to use existing Microsoft technologies to provide an end-to-end experience for calling scenarios with Teams users and Azure Communication Services calling SDKs.
+Microsoft Teams provides identities managed by Azure Active Directory and calling experiences controlled by Teams Admin Center and policies. Users might have assigned licenses to enable phone calls and advanced calling capabilities of Microsoft Teams Phone. Azure Communication Services support for Teams identities allows managing Teams voice over IP (VoIP) calls, Teams phone calls, and join Teams meetings. Developers might extend the Azure Communication Services with Graph API to provide contextual data from Microsoft 365 ecosystem. This page is providing inspiration on how to use existing Microsoft technologies to provide an end-to-end experience for calling scenarios with Teams users and Azure Communication Services calling SDKs.
## Use case 1: Make outbound Teams PSTN call
-This scenario is showing a multi-tenant use case, where company Contoso is providing SaaS to company Fabrikam. SaaS allows Fabrikam's users to make Teams PSTN calls via a custom website that takes the identity of the Teams user and configuration of the PSTN connectivity assigned to that Teams user.
+This scenario is showing a multi-tenant use case, where company Contoso is providing SaaS to company Fabrikam. SaaS allows Fabrikam's users to make Teams phone calls via a custom website that takes the identity of the Teams user and configuration of the PSTN connectivity assigned to that Teams user.
-![Diagram is showing user experience of Alice making Teams PSTN call to customer Megan.](./media/custom-teams-endpoint/end-to-end-use-cases/cte-e2e-cte-to-pstn-out-overview.svg)
+![Diagram is showing user experience of Alice making Teams phone call to customer Megan.](./media/custom-teams-endpoint/end-to-end-use-cases/cte-e2e-cte-to-pstn-out-overview.svg)
-The following sequence diagram shows detailed steps of initiation of a Teams PSTN call:
+The following sequence diagram shows detailed steps of initiation of a Teams phone call:
### Steps 1. Authenticate Alice from Fabrikam in Contoso's client application: Alice is using a browser to open Fabrikam's web page and authenticates. You can find more details about [the authentication with Teams identity](./custom-teams-endpoint-authentication-overview.md). If the authentication is successful, Alice is redirected to the initial page.
The following sequence diagram shows detailed steps of initiation of a Teams PST
```js const callClient = new CallClient(); tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
-callAgent = await callClient.createCallAgent(tokenCredential)
+callAgent = await callClient.createTeamsCallAgent(tokenCredential)
``` Then you need to start a call to Megan's phone number.
Then you need to start a call to Megan's phone number.
const pstnCallee = { phoneNumber: '<MEGAN_PHONE_NUMBER_E164_FORMAT>' } const oneToOneCall = callAgent.startCall([pstnCallee], { threadId: '00000000-0000-0000-0000-000000000000' }); ```
-4. Connecting PSTN call to Megan: The call is routed through the Teams PSTN connectivity assigned to Alice, reaching the PSTN network and ringing the phone associated with the provided phone number. Megan sees an incoming call from the phone number associated with Alice's Teams user.
+4. Connecting PSTN call to Megan: The call is routed through the Teams phone connectivity assigned to Alice, reaching the PSTN network and ringing the phone associated with the provided phone number. Megan sees an incoming call from the phone number associated with Alice's Teams user.
5. Megans accepts the call: Megan accepts the call and the connection between Alice and Megan is established.
-## Use case 2: Receive inbound Teams PSTN call
-This scenario is showing a multi-tenant use case, where company Contoso is providing SaaS to company Fabrikam. SaaS allows Fabrikam's users to receive a Teams PSTN call via a custom website that takes the identity of the Teams user and configuration of the PSTN connectivity assigned to that Teams user.
+## Use case 2: Receive inbound Teams phone call
+This scenario is showing a multi-tenant use case, where company Contoso is providing SaaS to company Fabrikam. SaaS allows Fabrikam's users to receive a Teams phone call via a custom website that takes the identity of the Teams user and configuration of the PSTN connectivity assigned to that Teams user.
-![Diagram is showing user experience of Alice receiving Teams PSTN call from customer Megan.](./media/custom-teams-endpoint/end-to-end-use-cases/cte-e2e-cte-to-pstn-in-overview.svg)
+![Diagram is showing user experience of Alice receiving Teams phone call from customer Megan.](./media/custom-teams-endpoint/end-to-end-use-cases/cte-e2e-cte-to-pstn-in-overview.svg)
-The following sequence diagram shows detailed steps for accepting incoming Teams PSTN calls:
+The following sequence diagram shows detailed steps for accepting incoming Teams phone calls:
### Steps 1. Authenticate Alice from Fabrikam in Contoso's client application: Alice is using a browser to open Fabrikam's web page and authenticates. You can find more details about [the authentication with Teams identity](./custom-teams-endpoint-authentication-overview.md). If the authentication is successful, Alice is redirected to the initial page.
The following sequence diagram shows detailed steps for accepting incoming Teams
```js const callClient = new CallClient(); tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
-callAgent = await callClient.createCallAgent(tokenCredential)
+callAgent = await callClient.createTeamsCallAgent(tokenCredential)
``` Then you subscribe to the incoming call event. ```js
-const incomingCallHandler = async (args: { incomingCall: IncomingCall }) => {
+const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
+
+ const incomingCall = args.teamsIncomingCall;
+
// Get information about caller var callerInfo = incomingCall.callerInfo
If you select the decline button, then the following code is used:
incomingCall.reject(); ```
-3. Megan start's a call to PSTN number assigned to Teams user Alice: Megan uses her phone to call Alice. The carrier network will connect to Teams PSTN connectivity assigned to Alice and it will ring all Teams endpoints registered for Alice. It includes: Teams desktop, mobile, web clients, and applications based on Azure Communication Services calling SDK.
+3. Megan start's a call to PSTN number assigned to Teams user Alice: Megan uses her phone to call Alice. The carrier network will connect to Teams phone connectivity assigned to Alice and it will ring all Teams endpoints registered for Alice. It includes: Teams desktop, mobile, web clients, and applications based on Azure Communication Services calling SDK.
4. Contoso's client application shows Megan's incoming call: Client application receives incoming call notification. _showIncomingCall_ method would use custom Contoso's logic to translate the phone number to customer's name (for example, a database storing key-value pairs consisting of a phone number and customer name). When the information is retrieved, the notification is shown to Alice in Contoso's client application. 5. Alice accepts the call: Alice selects a button to accept the call and the connection between Alice and Megan is established.
This scenario is showing a multi-tenant use case, where company Contoso is provi
The following sequence diagram shows detailed steps for initiation of a Teams VoIP call: ### Steps 1. Authenticate Alice from Fabrikam in Contoso's client application: Alice is using a browser to open Fabrikam's web page and authenticates. You can find more details about [the authentication with Teams identity](./custom-teams-endpoint-authentication-overview.md). If the authentication is successful, Alice is redirected to the initial page.
Permissions: Chat.Create (delegated)
Response: response.body.value.id; // "19:8c0a1a67-50ce-4114-bb6c-da9c5dbcf6ca_e8b753b5-4117-464e-9a08-713e1ff266b3@unq.gbl.spaces" ```
-Then the client application creates an instance of callAgent, that holds the Azure Communication Services access token acquired during first step.
+Then the client application creates an instance of callAgent that holds the Azure Communication Services access token acquired during first step.
```js const callClient = new CallClient(); tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
-callAgent = await callClient.createCallAgent(tokenCredential)
+callAgent = await callClient.createTeamsCallAgent(tokenCredential)
``` Then you start a call to Megan's Teams ID.
This scenario is showing a multi-tenant use case, where company Contoso is provi
The following sequence diagram shows detailed steps for accepting incoming Teams VoIP calls: ### Steps 1. Authenticate Alice from Fabrikam in Contoso's client application: Alice is using a browser to open Fabrikam's web page and authenticates. You can find more details about [the authentication with Teams identity](./custom-teams-endpoint-authentication-overview.md). If the authentication is successful, Alice is redirected to the initial page.
-2. Subscribe for receiving calls: Client application uses Azure Communication Services calling SDK to provide the calling capability. First, it creates an instance of callAgent, that holds the Azure Communication Services access token acquired during first step.
+2. Subscribe for receiving calls: Client application uses Azure Communication Services calling SDK to provide the calling capability. First, it creates an instance of callAgent that holds the Azure Communication Services access token acquired during first step.
```js const callClient = new CallClient(); tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
-callAgent = await callClient.createCallAgent(tokenCredential)
+callAgent = await callClient.createTeamsCallAgent(tokenCredential)
``` Then application subscribes to the incoming call event. ```js
-const incomingCallHandler = async (args: { incomingCall: IncomingCall }) => {
+const incomingCallHandler = async (args: { teamsIncomingCall: TeamsIncomingCall }) => {
+
+ const incomingCall = args.teamsIncomingCall;
+
// Get information about caller var callerInfo = incomingCall.callerInfo
This scenario is showing a multi-tenant use case, where company Contoso is provi
The following sequence diagram shows detailed steps for joining a Teams meeting: ### Steps 1. Authenticate Alice from Fabrikam in Contoso's client application: Alice is using a browser to open Fabrikam's web page and authenticates. You can find more details about [the authentication with Teams identity](./custom-teams-endpoint-authentication-overview.md). If the authentication is successful, Alice is redirected to the initial page.
Response: response.body.value[0].subject; // ΓÇ¥Project TailspinΓÇ¥
Contoso's client application will then show the list of Teams meetings and the ability to join them.
-3. Join Teams meeting "Project Tailspin": Alice selects a button to join Teams meeting "Project Tailspin" in the Contoso's Client application. Client application uses Azure Communication Services calling SDK to provide the calling capability. Client applications create an instance of callAgent, that holds the Azure Communication Services access token acquired during first step.
+3. Join Teams meeting "Project Tailspin": Alice selects a button to join Teams meeting "Project Tailspin" in the Contoso's Client application. Client application uses Azure Communication Services calling SDK to provide the calling capability. Client applications create an instance of callAgent that holds the Azure Communication Services access token acquired during first step.
```js const callClient = new CallClient(); tokenCredential = new AzureCommunicationTokenCredential('<AlICE_ACCESS_TOKEN>');
-callAgent = await callClient.createCallAgent(tokenCredential)
+callAgent = await callClient.createTeamsCallAgent(tokenCredential)
``` Then application joins a meeting via received joinUrl.
communication-services Capabilities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/guest/capabilities.md
+
+ Title: Capabilities for Teams guests
+
+description: Calling capabilities of Azure Communication Services support for Teams guests
++ Last updated : 7/9/2022+++++
+# Capabilities for Teams guests
+
+In this article, you will learn which capabilities are supported for Teams guests using Azure Communication Services SDKs.
+
+## Client capabilities
+The following table shows supported client-side capabilities available in Azure Communication Services SDKs:
+
+| Capability | Supported |
+| | |
+| Send and receive chat messages | ✔️ |
+| Use typing indicators | ✔️ |
+| Read receipt | ❌ |
+| File sharing | ❌ |
+| Reply to chat message | ❌ |
+| React to chat message | ❌ |
+| Audio and video calling | ✔️ |
+| Share screen and see shared screen | ✔️ |
+| Manage Teams convenient recording | ❌ |
+| Manage Teams transcription | ❌ |
+| Receive closed captions | ❌ |
+| Add and remove meeting participants | ❌ |
+| Raise and lower hand | ❌ |
+| See raised and lowered hand | ❌ |
+| See and set reactions | ❌ |
+| Control Teams third-party applications | ❌ |
+| Interact with a poll or Q&A | ❌ |
+| Set and unset spotlight | ❌ |
+| See PowerPoint Live | ❌ |
+| See Whiteboard | ❌ |
+| Participation in breakout rooms | ❌ |
+| Apply background effects | ❌ |
+| See together mode video stream | ❌ |
+
+When Teams guest leaves the meeting, or the meeting ends, they can no longer send or receive new chat messages and no longer have access to messages sent and received during the meeting.
+
+## Server capabilities
+
+The following table shows supported server-side capabilities available in Azure Communication
+
+|Capability | Supported |
+| | |
+| [Manage ACS call recording](../../voice-video-calling/call-recording.md) | ❌ |
+| [Azure Metrics](../../metrics.md) | ✔️ |
+| [Azure Monitor](../../logging-and-diagnostics.md) | ✔️ |
+| [Azure Communication Services Insights](../../analytics/insights.md) | ✔️ |
+| [Azure Communication Services Voice and video calling events](../../../../event-grid/communication-services-voice-video-events.md) | ❌ |
++
+## Teams capabilities
+
+The following table shows supported Teams capabilities:
+
+|Capability | Supported |
+| | |
+| [Teams Call Analytics](/MicrosoftTeams/use-call-analytics-to-troubleshoot-poor-call-quality) | ✔️ |
+| [Teams real-time Analytics](/microsoftteams/use-real-time-telemetry-to-troubleshoot-poor-meeting-quality) | ❌ |
++
+## Next steps
+
+- [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+- [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+- [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+- [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+- [Communicate as Teams user](../../teams-endpoint.md).
+
communication-services Limitations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/guest/limitations.md
+
+ Title: Known issues and limitations
+
+description: Known issues and limitations of Azure Communication Services support for Teams guests
++ Last updated : 7/9/2022+++++
+# Known issues and limitations
+
+- When using Microsoft Graph to [list the participants in a Teams meeting](/graph/api/call-list-participants), details for Communication Services users are not currently included.
+- Teams meetings support up to 1000 participants, but the Azure Communication Services Calling SDK currently only supports 350 participants, and Chat SDK supports 250 participants.
+- With [Cloud Video Interop for Microsoft Teams](/microsoftteams/cloud-video-interop), some devices have seen issues when a Communication Services user shares their screen.
+- [Teams activity handler events](/microsoftteams/platform/bots/bot-basics?tabs=csharp) for bots don't fire when Communication Services users join a Teams meeting.
+
+## Next steps
+
+- [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+- [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+- [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+- [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+- [Communicate as Teams user](../../teams-endpoint.md).
communication-services Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/guest/overview.md
+
+ Title: Communication as Teams guest
+
+description: Introduction to Azure Communication Services support for Teams guests
++ Last updated : 7/9/2022+++++
+# Communication as Teams guest
+
+You can use Azure Communication Services to build applications that enable external users to join and participate in Teams meetings as Teams anonymous users (Guests). Customers can join Teams meetings from within your applications or websites. The main benefits are:
+- No requirement to download Teams desktop, mobile or web clients for external users
+- External users don't lose context by switching to another application
+- Browser support on mobile devices
+- User interface (UI) customization
+- No additional Teams licenses are required
+
+## Use cases
+Here are real-world examples of applications:
+- Healthcare provider uses Teams clients to conduct telehealth virtual visit with a patient who uses a healthcare provider application or website
+- Customers interested in mortgage schedules virtual consultation on Bank's website with a Bank clerk, who joins consultation via Teams client
+- Manufacturer schedules a virtual conference for partners to announce the launch of a new product. Partners can join the launch via a web browser on their phones
+
+## Prototyping
+
+Developers can experiment with the capabilities on multiple levels to evaluate, learn and customize the product.
+
+### Low code or no-code
+
+You can create an identity and access token for Teams guests on Azure portal without a single line of code. [Here are steps how to do it](../../../quickstarts/identity/quick-create-identity.md).
+
+With a valid identity, access token, and Teams meeting URL, you can use [Azure Communication Services UI Library](https://azure.github.io/communication-ui-library/?path=/story/composites-call-with-chat-jointeamsmeeting--join-teams-meeting) to join Teams meeting without any code.
+
+### Single-click deployment
+
+The [Azure Communication Services Calling Hero Sample](../../../samples/calling-hero-sample.md) demonstrates how developers can use Azure Communication Services Calling Web SDK to join a Teams meeting from a web application as a Teams guest. You can experiment with the capability with single-click deployment to Azure.
+
+### Coding
+
+The data flow for joining Teams meetings is available at the [client and server architecture page](../../client-and-server-architecture.md). When implementing the experience, you must implement client logic for real-time communication and server logic for authentication. The following articles will guide you in implementing the communication for Teams guests.
+
+High-level coding articles:
+1. [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+1. [Stateful Client (Meeting)](https://azure.github.io/communication-ui-library/?path=/story/composites-meeting-basicexample--basic-example)
+
+Low-level coding articles:
+1. [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+1. [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+1. [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+
+## Supported use cases
+
+The following table show supported use cases for Teams guest with Azure Communication
+
+| Scenario | Supported |
+| | |
+| Join Teams meeting | ✔️ |
+| Join channel Teams meeting [1] | ✔️ |
+| Join Teams webinar [2] | ✔️ |
+| [Join Teams live events](/microsoftteams/teams-live-events/what-are-teams-live-events).| ❌ |
+| Join [Teams meeting scheduled in application for personal use](https://www.microsoft.com/microsoft-teams/teams-for-home) | ❌ |
+| Join Teams 1:1 or group call | ❌ |
+| Join Teams 1:1 or group chat | ❌ |
+
+- [1] Teams guests can join a channel Teams meeting with audio and video, but they won't be able to send or receive any chat messages
+- [2] Teams guest users may join a Teams webinar. However, the presenter and attendee roles aren't honored for Teams guests. Thus Teams guests on Azure Communication Services SDKs could perform actions not intended for attendees, such as screen sharing, turning their camera on/off, or unmuting themselves, if your application provides UX for those actions.
+
+## Pricing
+Any licensed Teams users can schedule Teams meetings and share the invite with external users. External users can join the Teams meeting experience via existing Teams desktop, mobile, and web clients without additional charge. External users joining via Azure Communication Services SDKs will pay
+[standard Azure Communication Services consumption](https://azure.microsoft.com/pricing/details/communication-services/) for audio, video, and chat. There's no additional fee for the interoperability capability itself.
++
+## Next steps
+
+- [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+- [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+- [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+- [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+- [Communicate as Teams user](../../teams-endpoint.md).
communication-services Privacy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/guest/privacy.md
+
+ Title: User privacy for Teams guests
+
+description: User privacy requirements in Azure Communication Services support for Teams guests
++ Last updated : 7/9/2022+++++
+# Privacy
+Interoperability between Azure Communication Services and Microsoft Teams enables your applications and users to participate in Teams calls, meetings, and chats. It is your responsibility to ensure that the users of your application are notified when recording or transcription are enabled in a Teams call or meeting.
+
+Microsoft will indicate to you via the Azure Communication Services API that recording or transcription has commenced, and you must communicate this fact, in real-time, to your users within your application's user interface. You agree to indemnify Microsoft for all costs and damages incurred due to your failure to comply with this obligation.
+
+## Chat storage
+
+All chat messages sent by Teams users or Communication Services users during a Teams meeting are stored in the geographic region associated with the Microsoft 365 organization hosting the meeting. For more information, review the article [Location of data in Microsoft Teams](/microsoftteams/location-of-data-in-teams). For each Teams guest joining via Azure Communication Services SDKs in the meetings, there is a copy of the most recently sent message stored in the geographic region associated with the Communication Services resource used to develop the Communication Services application. Review the article [Region availability and data residency](./privacy.md).
+
+Azure Communication Services will delete all copies of the most recently sent message per Teams retention policies. If no retention policy is defined, Azure Communication Services deletes data after 30 days. For more information about Teams retention policies, review the article [Learn about retention for Microsoft Teams](/microsoft-365/compliance/retention-policies-teams).
+
+## Next steps
+
+- [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+- [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+- [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+- [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+- [Communicate as Teams user](../../teams-endpoint.md).
communication-services Teams Administration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/guest/teams-administration.md
+
+ Title: Teams controls for Teams guest
+
+description: Teams administrator controls to impact Azure Communication Services support for Teams guests
++ Last updated : 7/9/2022+++++
+# Teams administrator controls
+Teams administrators have the following policies to control the experience for Teams guests in Teams meetings.
+
+|Setting name|Policy scope|Description| Supported |
+| - | -| -| |
+| [Anonymous users can join a meeting](/microsoftteams/meeting-settings-in-teams#allow-anonymous-users-to-join-meetings) | organization-wide | If disabled, Teams guests can't join Teams meeting | ✔️ |
+| [Let anonymous people join a meeting](/microsoftteams/meeting-settings-in-teams#allow-anonymous-users-to-join-meetings) | per-organizer | If disabled, Teams guests can't join Teams meeting | ✔️ |
+| [Let anonymous people start a meeting](/microsoftteams/meeting-settings-in-teams#allow-anonymous-users-to-join-meetings)| per-organizer | If enabled, Teams guests can start a Teams meeting without Teams user | ✔️ |
+| [Automatically admit people](/microsoftteams/meeting-policies-participants-and-guests#automatically-admit-people) | per-organizer | If set to "Everyone", Teams guests can bypass lobby. Otherwise, Teams guests have to wait in the lobby until an authenticated user admits them.| ✔️ |
+| [Who can present in meetings](/microsoftteams/meeting-policies-in-teams-general#designated-presenter-role-mode) | per-user | Controls who in the Teams meeting can share screen | ❌ |
+| [Blocked anonymous join client types](/powershell/module/skype/set-csteamsmeetingpolicy) | per-organizer | If property "BlockedAnonymousJoinClientTypes" is set to "Teams" or "Null", the Teams guests via Azure Communication Services can join Teams meeting | ✔️ |
+
+Your custom application should consider user authentication and other security measures to protect Teams meetings. Be mindful of the security implications of enabling anonymous users to join meetings. Use the [Teams security guide](/microsoftteams/teams-security-guide#addressing-threats-to-teams-meetings) to configure capabilities available to anonymous users.
+
+## Next steps
+
+- [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+- [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+- [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+- [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+- [Communicate as Teams user](../../teams-endpoint.md).
communication-services Teams Client Experience https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/interop/guest/teams-client-experience.md
+
+ Title: Teams client experience for Teams guest
+
+description: Teams client experience of Azure Communication Services support for Teams guests
++ Last updated : 7/9/2022+++++
+# Experience for users in Teams client
+Teams guest joining Teams meeting with Azure Communication Services SDKs will be represented in Teams client as any other Teams anonymous user. Teams guests will be marked as "external" in the participant's lists as Teams clients. As Teams anonymous users, their capabilities in the Teams meeting will be limited regardless of the assigned Teams meeting role.
+
+## Next steps
+
+- [Authenticate as Teams guest](../../../quickstarts/access-tokens.md)
+- [Join Teams meeting audio and video as Teams guest](../../../quickstarts/voice-video-calling/get-started-teams-interop.md)
+- [Join Teams meeting chat as Teams guest](../../../quickstarts/chat/meeting-interop.md)
+- [Join meeting options](../../../how-tos/calling-sdk/teams-interoperability.md)
+- [Communicate as Teams user](../../teams-endpoint.md).
communication-services Teams Endpoint https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/teams-endpoint.md
Title: Integrate communication as Teams user with Azure Communication Services
+ Title: Communication as Teams user
-description: This article discusses how to integrate communication as Teams user with Azure Communication Services.
+description: This article discusses how to integrate communication as Teams user with Azure Communication Services and Graph API.
-# Integrate communication as Teams user with Azure Communication Services and Graph API
+# Communication as Teams user
[!INCLUDE [Public Preview](../includes/public-preview-include-document.md)]
communication-services Inbound Calling Capabilities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/telephony/inbound-calling-capabilities.md
+
+ Title: Inbound calling capabilities - Azure Communication Services
+description: Enable inbound PSTN and direct routing calling for different endpoints in Azure Communication Services.
+++++ Last updated : 07/29/2022+++++
+# Enable inbound telephony calling for Azure Communication Services.
+
+Inbound PSTN calling is currently supported in GA for Dynamics Omnichannel with phone numbers [provided by Microsoft](./telephony-concept.md#voice-calling-pstn) and phone numbers that supplied by [direct routing](./telephony-concept.md#azure-direct-routing).
+
+**Inbound calling with Dynamics 365 Omnichannel (OC)**
+
+ Supported in General Availability, to setup inbound PSTN or direct routing with Dynamics 365 OC, follow the [instructions here](/dynamics365/customer-service/voice-channel-inbound-calling)
+
+ **Inbound calling with Power Virtual Agents**
+
+ *Coming soon*
+
+**Inbound calling with ACS Client Calling SDK**
+
+*Coming soon*
+
+**Inbound calling with Azure Bot Framework**
+
+Customers participating in Azure Bot Framework Telephony Channel preview can find the [instructions here](/azure/bot-service/bot-service-channel-connect-telephony)
communication-services Troubleshooting Info https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/concepts/troubleshooting-info.md
You can find your current Teams license using [licenseDetails](/graph/api/resour
] } ```
-1. Find license detail where property `servicePlanName` has one of the values in the [Eligible Teams Licenses table](../quickstarts/eligible-teams-licenses.md#eligible-teams-licenses)
+1. Find license detail where property `servicePlanName` has one of the values in the [Eligible Teams Licenses table](../quickstarts/eligible-teams-licenses.md)
## Calling SDK error codes
communication-services Eligible Teams Licenses https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/quickstarts/eligible-teams-licenses.md
# Teams License requirements to use Azure Communication Services support for Teams users
-To use Azure Communication Services support for Teams users, you need an Azure Active Directory instance with users that have a valid Teams license. Furthermore, license must be assigned to the administrators or relevant users. This article describes the Teams license requirements to use Azure Communication Services support for Teams users.
+To use Azure Communication Services support for Teams users, you need an Azure Active Directory instance with users that have a valid Teams license. Furthermore, license must be assigned to the administrators or relevant users. This article describes the service plans requirements to use Azure Communication Services support for Teams users.
-### Eligible Teams licenses
+## Eligible products and service plans
-Ensure that your Azure Active Directory users have at least one of the following eligible Teams licenses:
+Ensure that your Azure Active Directory users have at least one of the following eligible service plans or products:
-| Service Plan (friendly names) | Service Plan ID |
-|: |: |
-| TEAMS1 | 57ff2da0-773e-42df-b2af-ffb7a2317929 |
-| TEAMS_FREE | 4fa4026d-ce74-4962-a151-8e96d57ea8e4 |
-| TEAMS_GOV | 304767db-7d23-49e8-a945-4a7eb65f9f28 |
-| TEAMS_GCCHIGH | 495922d5-f138-498b-8967-4acdcdfb2a74 |
-| TEAMS_AR_GCCHIGH | 9953b155-8aef-4c56-92f3-72b0487fce41 |
-| TEAMS_DOD | ec0dd2de-a877-4059-a9b8-5838b5629b2a |
-| TEAMS_AR_DOD | fd500458-c24c-478e-856c-a6067a8376cd |
+| Service Plan (friendly names) | Service Plan ID | Product names|
+|: |: | : |
+| TEAMS1 | 57ff2da0-773e-42df-b2af-ffb7a2317929 | COMMON AREA PHONE |
+| | | Dynamics 365 Remote Assist |
+| | | Dynamics 365 Remote Assist HoloLens |
+| | | Microsoft 365 A3 for Faculty |
+| | | MICROSOFT 365 A3 FOR STUDENTS |
+| | | Microsoft 365 A3 for students use benefit |
+| | | Microsoft 365 A3 - Unattended License for students use benefit |
+| | | Microsoft 365 A5 for Faculty |
+| | | MICROSOFT 365 A5 FOR STUDENTS |
+| | | Microsoft 365 A5 for students use benefit |
+| | | Microsoft 365 A5 without Audio Conferencing for students use benefit |
+| | | MICROSOFT 365 BUSINESS BASIC |
+| | | MICROSOFT 365 BUSINESS BASIC |
+| | | MICROSOFT 365 BUSINESS STANDARD |
+| | | MICROSOFT 365 BUSINESS STANDARD - PREPAID LEGACY |
+| | | MICROSOFT 365 BUSINESS PREMIUM |
+| | | MICROSOFT 365 E3 |
+| | | Microsoft 365 E3 - Unattended License |
+| | | Microsoft 365 E5 |
+| | | Microsoft 365 E5 Developer (without Windows and Audio Conferencing) |
+| | | Microsoft 365 E5 without Audio Conferencing |
+| | | Microsoft 365 F1 |
+| | | Microsoft 365 F3 |
+| | | Microsoft 365 F1 |
+| | | MICROSOFT TEAMS EXPLORATORY |
+| | | Microsoft Teams Rooms Standard |
+| | | Microsoft Teams Rooms Standard without Audio Conferencing |
+| | | Microsoft Teams Trial |
+| | | Office 365 A1 for faculty |
+| | | Office 365 A1 Plus for faculty |
+| | | Office 365 A1 for students |
+| | | Office 365 A1 Plus for students |
+| | | Office 365 A3 for faculty |
+| | | Office 365 A3 for students |
+| | | Office 365 A5 for faculty |
+| | | Office 365 A5 for students |
+| | | Microsoft Teams Commercial Cloud |
+| | | Office 365 E1 |
+| | | OFFICE 365 E2 |
+| | | Office 365 E3 |
+| | | OFFICE 365 E3 DEVELOPER |
+| | | OFFICE 365 E4 |
+| | | Office 365 E5 |
+| | | OFFICE 365 E5 WITHOUT AUDIO CONFERENCING |
+| | | OFFICE 365 F3 |
+| | | Teams Rooms Premium |
+| TEAMS_FREE | 4fa4026d-ce74-4962-a151-8e96d57ea8e4 | MICROSOFT TEAMS (FREE) |
+| TEAMS_GOV | 304767db-7d23-49e8-a945-4a7eb65f9f28 | Common Area Phone for GCC |
+| | | Microsoft 365 F3 GCC |
+| | | Microsoft 365 GCC G5 |
+| | | MICROSOFT 365 G3 GCC |
+| | | Office 365 G1 GCC |
+| | | OFFICE 365 G3 GCC |
+| | | Office 365 G5 GCC |
+| TEAMS_AR_GCCHIGH | 9953b155-8aef-4c56-92f3-72b0487fce41 | Microsoft 365 E3_USGOV_GCCHIGH |
+| | | Office 365 E3_USGOV_GCCHIGH |
+| TEAMS_AR_DOD | fd500458-c24c-478e-856c-a6067a8376cd | Office 365 E3_USGOV_DOD |
+| | | Microsoft 365 E3_USGOV_DOD |
For more information, see [Azure AD Product names and service plan identifiers](../../active-directory/enterprise-users/licensing-service-plan-reference.md).
-### How to find current Teams license
+### How to find assigned service plans and products?
-You can find your current Teams license using [licenseDetails](/graph/api/resources/licensedetails) Microsoft Graph API that returns licenses assigned to a user.
+You can find your current service plans and licenses using [licenseDetails](/graph/api/resources/licensedetails) Microsoft Graph API that returns licenses assigned to a user. Or you can find product names in [the Azure portal](https://portal.azure.com/#blade/Microsoft_AAD_IAM/LicensesMenuBlade/Products) or the [Microsoft 365 admin center](https://admin.microsoft.com).
For more information on verification for eligibility, see [Verification of Teams license eligibility](../concepts/troubleshooting-info.md#verification-of-teams-license-eligibility-to-use-azure-communication-services-support-for-teams-users).
The following articles might be of interest to you:
- Try [quickstart for authentication of Teams users](./manage-teams-identity.md). - Try [quickstart for calling to a Teams user](./voice-video-calling/get-started-with-voice-video-calling-custom-teams-client.md). - Learn more about [Azure Communication Services support Teams identities](../concepts/teams-endpoint.md)-- Learn more about [Teams interoperability](../concepts/teams-interop.md)
+- Learn more about [Teams interoperability](../concepts/teams-interop.md)
communication-services Get Started Rooms https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/communication-services/quickstarts/rooms/get-started-rooms.md
zone_pivot_groups: acs-js-csharp-java-python
This quickstart will help you get started with Azure Communication Services Rooms. A `room` is a server-managed communications space for a known, fixed set of participants to collaborate for a pre-determined duration. The [rooms conceptual documentation](../../concepts/rooms/room-concept.md) covers more details and use cases for `rooms`. - ::: zone pivot="programming-language-csharp" [!INCLUDE [Use rooms with .NET SDK](./includes/rooms-quickstart-net.md)] ::: zone-end
This quickstart will help you get started with Azure Communication Services Room
[!INCLUDE [Use rooms with Java SDK](./includes/rooms-quickstart-python.md)] ::: zone-end + ## Object model The table below lists the main properties of `room` objects:
The table below lists the main properties of `room` objects:
| `validUntil` | Latest time a `room` can be used. | | `roomJoinPolicy` | Specifies which user identities are allowed to join room calls. Valid options are `InviteOnly` and `CommunicationServiceUsers`. | | `participants` | List of participants to a `room`. Specified as a `CommunicationIdentifier`. |
+| `roleType` | The role of a room participant. Can be either `Presenter`, `Attendee`, or `Consumer`. |
## Next steps
container-apps Compare Options https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/container-apps/compare-options.md
There are many options for teams to build and deploy cloud native and containeri
- [Azure Container Instances](#azure-container-instances) - [Azure Kubernetes Service](#azure-kubernetes-service) - [Azure Functions](#azure-functions)-- [Azure Spring Cloud](#azure-spring-apps)
+- [Azure Spring Apps](#azure-spring-apps)
- [Azure Red Hat OpenShift](#azure-red-hat-openshift) There's no perfect solution for every use case and every team. The following explanation provides general guidance and recommendations as a starting point to help find the best fit for your team and your requirements.
You can get started building your first container app [using the quickstarts](ge
[Azure Functions](../azure-functions/functions-overview.md) is a serverless Functions-as-a-Service (FaaS) solution. It's optimized for running event-driven applications using the functions programming model. It shares many characteristics with Azure Container Apps around scale and integration with events, but optimized for ephemeral functions deployed as either code or containers. The Azure Functions programming model provides productivity benefits for teams looking to trigger the execution of your functions on events and bind to other data sources. When building FaaS-style functions, Azure Functions is the ideal option. The Azure Functions programming model is available as a base container image, making it portable to other container based compute platforms allowing teams to reuse code as environment requirements change. ### Azure Spring Apps
-[Azure Spring Apps](../spring-cloud/overview.md) makes it easy to deploy Spring Boot microservice applications to Azure without any code changes. The service manages the infrastructure of Spring Cloud applications so developers can focus on their code. Azure Spring Cloud provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more. If your team or organization is predominantly Spring, Azure Spring Apps is an ideal option.
+[Azure Spring Apps](../spring-apps/overview.md) makes it easy to deploy Spring Boot microservice applications to Azure without any code changes. The service manages the infrastructure of Spring Cloud applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more. If your team or organization is predominantly Spring, Azure Spring Apps is an ideal option.
### Azure Red Hat OpenShift [Azure Red Hat OpenShift](../openshift/intro-openshift.md) is jointly engineered, operated, and supported by Red Hat and Microsoft to provide an integrated product and support experience for running Kubernetes-powered OpenShift. With Azure Red Hat OpenShift, teams can choose their own registry, networking, storage, and CI/CD solutions, or use the built-in solutions for automated source code management, container and application builds, deployments, scaling, health management, and more from OpenShift. If your team or organization is using OpenShift, Azure Red Hat OpenShift is an ideal option.
container-apps Manage Secrets https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/container-apps/manage-secrets.md
Previously updated : 11/02/2021 Last updated : 07/28/2022
Azure Container Apps allows your application to securely store sensitive configu
- Each application revision can reference one or more secrets. - Multiple revisions can reference the same secret(s).
-When a secret is updated or deleted, you can respond to changes in one of two ways:
+An updated or deleted secret does not automatically impact existing revisions in your app. When a secret is updated or deleted, you can respond to changes in one of two ways:
1. Deploy a new revision. 2. Restart an existing revision.
-An updated or removed secret does not automatically restart a revision.
--- Before you delete a secret, deploy a new revision that no longer references the old secret.-- If you change a secret value, you need to restart the revision to consume the new value.
+Before you delete a secret, deploy a new revision that no longer references the old secret. Then deactivate all revisions that reference the secret.
## Defining secrets
Secrets are defined at the application level in the `resources.properties.config
} ```
-Here, a connection string to a queue storage account is declared in the `secrets` array. To use this configuration you would replace `<MY-CONNECTION-STRING-VALUE>` with the value of your connection string.
+Here, a connection string to a queue storage account is declared in the `secrets` array. In this example, you would replace `<MY-CONNECTION-STRING-VALUE>` with the value of your connection string.
# [Azure CLI](#tab/azure-cli)
-Secrets are defined using the `--secrets` parameter.
+When you create a container app, secrets are defined using the `--secrets` parameter.
-- The parameter accepts a comma-delimited set of name/value pairs.
+- The parameter accepts a space-delimited set of name/value pairs.
- Each pair is delimited by an equals sign (`=`). ```bash
az containerapp create \
--name queuereader \ --environment "my-environment-name" \ --image demos/queuereader:v1 \
- --secrets "queue-connection-string=$CONNECTION_STRING" \
+ --secrets "queue-connection-string=$CONNECTION_STRING"
``` Here, a connection string to a queue storage account is declared in the `--secrets` parameter. The value for `queue-connection-string` comes from an environment variable named `$CONNECTION_STRING`. # [PowerShell](#tab/powershell)
-Secrets are defined using the `--secrets` parameter.
+When you create a container app, secrets are defined using the `--secrets` parameter.
-- The parameter accepts a comma-delimited set of name/value pairs.
+- The parameter accepts a space-delimited set of name/value pairs.
- Each pair is delimited by an equals sign (`=`). ```azurecli
az containerapp create `
--name queuereader ` --environment "my-environment-name" ` --image demos/queuereader:v1 `
- --secrets "queue-connection-string=$CONNECTION_STRING" `
+ --secrets "queue-connection-string=$CONNECTION_STRING"
``` Here, a connection string to a queue storage account is declared in the `--secrets` parameter. The value for `queue-connection-string` comes from an environment variable named `$CONNECTION_STRING`.
-## Using secrets
+## <a name="using-secrets"></a>Referencing secrets in environment variables
-The secret value is mapped to the secret name declared at the application level as described in the [defining secrets](#defining-secrets) section. The `passwordSecretRef` and `secretref` parameters are used to reference the secret names as environment variables at the container level. The `passwordSecretRef` provides a descriptive parameter name for secrets containing passwords.
+After declaring secrets at the application level as described in the [defining secrets](#defining-secrets) section, you can reference them in environment variables when you create a new revision in your container app. When an environment variable references a secret, its value is populated with the value defined in the secret.
## Example
-The following example shows an application that declares a connection string at the application level and is used throughout the configuration via `secretref`.
+The following example shows an application that declares a connection string at the application level. This connection is referenced in a container environment variable and in a scale rule.
# [ARM template](#tab/arm-template)
In this example, the application connection string is declared as `queue-connect
:::code language="json" source="code/secure-app-arm-template.json" highlight="11,12,13,27,28,29,30,31,44,45,61,62":::
-Here, the environment variable named `connection-string` gets its value from the application-level `queue-connection-string` secret. Also, the Azure Queue Storage scale rule's authorization configuration uses the `queue-connection-string` as a connection is established.
+Here, the environment variable named `connection-string` gets its value from the application-level `queue-connection-string` secret. Also, the Azure Queue Storage scale rule's authentication configuration uses the `queue-connection-string` secret as to define its connection.
To avoid committing secret values to source control with your ARM template, pass secret values as ARM template parameters. # [Azure CLI](#tab/azure-cli)
-In this example, you create an application with a secret that's referenced in an environment variable using the Azure CLI.
+In this example, you create a container app using the Azure CLI with a secret that's referenced in an environment variable. To reference a secret in an environment variable in the Azure CLI, set its value to `secretref:`, followed by the name of the secret.
```bash az containerapp create \
az containerapp create \
--env-vars "QueueName=myqueue" "ConnectionString=secretref:queue-connection-string" ```
-Here, the environment variable named `connection-string` gets its value from the application-level `queue-connection-string` secret by using `secretref`.
+Here, the environment variable named `connection-string` gets its value from the application-level `queue-connection-string` secret.
# [PowerShell](#tab/powershell)
-In this example, you create an application with a secret that's referenced in an environment variable using the Azure CLI.
+In this example, you create a container app using the Azure CLI with a secret that's referenced in an environment variable. To reference a secret in an environment variable in the Azure CLI, set its value to `secretref:`, followed by the name of the secret.
```azurecli az containerapp create `
az containerapp create `
--env-vars "QueueName=myqueue" "ConnectionString=secretref:queue-connection-string" ```
-Here, the environment variable named `connection-string` gets its value from the application-level `queue-connection-string` secret by using `secretref`.
+Here, the environment variable named `connection-string` gets its value from the application-level `queue-connection-string` secret.
cosmos-db Sql Api Sdk Java Spring V2 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/sql/sql-api-sdk-java-spring-v2.md
The [Spring Framework](https://spring.io/projects/spring-framework) is a programming and configuration model that streamlines Java application development. Spring streamlines the "plumbing" of applications by using dependency injection. Many developers like Spring because it makes building and testing applications more straightforward. [Spring Boot](https://spring.io/projects/spring-boot) extends this handling of the plumbing with an eye toward web application and microservices development. [Spring Data](https://spring.io/projects/spring-data) is a programming model for accessing datastores like Azure Cosmos DB from the context of a Spring or Spring Boot application.
-You can use Spring Data Azure Cosmos DB in your [Azure Spring Cloud](https://azure.microsoft.com/services/spring-cloud/) applications.
+You can use Spring Data Azure Cosmos DB in your applications hosted in [Azure Spring Apps](https://azure.microsoft.com/services/spring-apps/).
> [!IMPORTANT] > These release notes are for version 2 of Spring Data Azure Cosmos DB. You can find [release notes for version 3 here](sql-api-sdk-java-spring-v3.md).
cosmos-db Sql Api Sdk Java Spring V3 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/sql/sql-api-sdk-java-spring-v3.md
The Spring Data Azure Cosmos DB version 3 for Core (SQL) allows developers to us
The [Spring Framework](https://spring.io/projects/spring-framework) is a programming and configuration model that streamlines Java application development. Spring streamlines the "plumbing" of applications by using dependency injection. Many developers like Spring because it makes building and testing applications more straightforward. [Spring Boot](https://spring.io/projects/spring-boot) extends this handling of the plumbing with an eye toward web application and microservices development. [Spring Data](https://spring.io/projects/spring-data) is a programming model and framework for accessing datastores like Azure Cosmos DB from the context of a Spring or Spring Boot application.
-You can use Spring Data Azure Cosmos DB in your [Azure Spring Cloud](https://azure.microsoft.com/services/spring-cloud/) applications.
+You can use Spring Data Azure Cosmos DB in your applications hosted in [Azure Spring Apps](https://azure.microsoft.com/services/spring-apps/).
## Spring Boot support policy
cosmos-db Create Table Java https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/table/create-table-java.md
To access your table(s) in Cosmos DB, your app will need the table connection st
### [Azure CLI](#tab/azure-cli)
-To get the primary table storage connection string using Azure CLI, use the [az Cosmos DB keys list](/cli/azure/cosmosdb/keys#az-cosmosdb-keys-list) command with the option `--type connection-strings`. This command uses a [JMESPath query](https://jmespath.org/) to display only the primary table connection string.
+To get the primary table storage connection string using Azure CLI, use the [az Cosmos DB keys list](/cli/azure/cosmosdb/keys#az_cosmosdb_keys_list) command with the option `--type connection-strings`. This command uses a [JMESPath query](/cli/azure/query-azure-cli) to display only the primary table connection string.
```azurecli # This gets the primary Table connection string
cosmos-db Create Table Nodejs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/table/create-table-nodejs.md
To access your table(s) in Cosmos DB, your app will need the table connection st
### [Azure CLI](#tab/azure-cli)
-To get the primary table storage connection string using Azure CLI, use the [az cosmosdb keys list](/cli/azure/cosmosdb/keys#az-cosmosdb-keys-list) command with the option `--type connection-strings`. This command uses a [JMESPath query](https://jmespath.org/) to display only the primary table connection string.
+To get the primary table storage connection string using Azure CLI, use the [az cosmosdb keys list](/cli/azure/cosmosdb/keys#az-cosmosdb-keys-list) command with the option `--type connection-strings`. This command uses a [JMESPath query](/cli/azure/query-azure-cli) to display only the primary table connection string.
```azurecli # This gets the primary Table connection string
cosmos-db How To Use Python https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cosmos-db/table/how-to-use-python.md
To access your table(s) in Cosmos DB, your app will need the table connection st
### [Azure CLI](#tab/azure-cli)
-To get the primary connection string using Azure CLI, use the [az cosmosdb keys list](/cli/azure/cosmosdb/keys#az-cosmosdb-keys-list) command with the option `--type connection-strings`. This command uses a [JMESPath query](https://jmespath.org/) to display only the primary table connection string.
+To get the primary connection string using Azure CLI, use the [az cosmosdb keys list](/cli/azure/cosmosdb/keys#az-cosmosdb-keys-list) command with the option `--type connection-strings`. This command uses a [JMESPath query](/cli/azure/query-azure-cli) to display only the primary table connection string.
```azurecli # This gets the primary connection string
cost-management-billing Prepare Buy Reservation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/reservations/prepare-buy-reservation.md
You can pay for reservations with monthly payments. Unlike an up-front purchase
If reservation is purchased using Microsoft customer agreement (MCA), your monthly payment amount may vary, depending on the current month's market exchange rate for your local currency.
-Monthly payments are not available for: Databricks, SUSE Linux reservations, Red Hat Plans and Azure Red Hat OpenShift Licenses.
+Monthly payments are not available for: Databricks, Synapse Analytics - Pre-purchase, SUSE Linux reservations, Red Hat Plans and Azure Red Hat OpenShift Licenses.
### View payments made
cost-management-billing View Reservations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/cost-management-billing/reservations/view-reservations.md
By default, the following users can view and manage reservations:
- A Reservation administrator for reservations in their Azure Active Directory (Azure AD) tenant (directory) - A Reservation reader has read-only access to reservations in their Azure Active Directory tenant (directory)
-Currently, the reservation administrator and reservation reader roles are only available to assign using PowerShell. They can't be viewed or assigned in the Azure portal. For more information, see [Grant access with PowerShell](#grant-access-with-powershell).
- The reservation lifecycle is independent of an Azure subscription, so the reservation isn't a resource under the Azure subscription. Instead, it's a tenant-level resource with its own Azure RBAC permission separate from subscriptions. Reservations don't inherit permissions from subscriptions after the purchase. ## View and manage reservations
When you use the PowerShell script to assign the ownership role and it runs succ
## Tenant-level access [User Access Administrator](../../role-based-access-control/built-in-roles.md#user-access-administrator) rights are required before you can grant users or groups the Reservation Administrator and Reservation Reader roles at the tenant level. In order to get User Access Administrator rights at the tenant level, follow [Elevate access](../../role-based-access-control/elevate-access-global-admin.md) steps.
-## Add a Reservation Administrator role at the tenant level
+## Add a Reservation Administrator role or Reservation Reader role at the tenant level
+You can assign these roles from [Azure portal](https://portal.azure.com).
+
+1. Sign in to the Azure portal and navigate to **Reservations**.
+2. At the top of the page, select **Role Assignment**.
+3. To make modifications, add user as a Reservation Administrator or Reservation Reader using Access control.
+
+## Add a Reservation Administrator role at the tenant level using Azure PowerShell script
Use the following Azure PowerShell script to add a Reservation Administrator role at the tenant level with PowerShell.
New-AzRoleAssignment -Scope "/providers/Microsoft.Capacity" -PrincipalId <Object
- Accept pipeline input: False - Accept wildcard characters: False
-## Assign a Reservation Reader role at the tenant level
+## Assign a Reservation Reader role at the tenant level using Azure PowerShell script
Use the following Azure PowerShell script to assign the Reservation Reader role at the tenant level with PowerShell.
data-factory Connector Hubspot https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-hubspot.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This HubSpot connector is supported for the following activities:
+This HubSpot connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
-You can copy data from HubSpot to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+For a list of data stores that are supported as sources/sinks , see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Jira https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-jira.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Jira connector is supported for the following activities:
+This Jira connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Jira to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Magento https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-magento.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Magento connector is supported for the following activities:
+This Magento connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Magento to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Marketo https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-marketo.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Marketo connector is supported for the following activities:
+This Marketo connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Marketo to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Currently, Marketo instance which is integrated with external CRM is not supported.
data-factory Connector Office 365 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-office-365.md
Azure Data Factory and Synapse Analytics pipelines integrate with [Microsoft Gra
This article outlines how to use the Copy Activity to copy data from Office 365. It builds on the [copy activity overview](copy-activity-overview.md) article that presents a general overview of copy activity. ## Supported capabilities+
+This Office 365 connector is supported for the following capabilities:
+
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+ ADF Office 365 connector and Microsoft Graph data connect enables at scale ingestion of different types of datasets from Exchange Email enabled mailboxes, including address book contacts, calendar events, email messages, user information, mailbox settings, and so on. Refer [here](/graph/data-connect-datasets) to see the complete list of datasets available. For now, within a single copy activity you can only **copy data from Office 365 into [Azure Blob Storage](connector-azure-blob-storage.md), [Azure Data Lake Storage Gen1](connector-azure-data-lake-store.md), and [Azure Data Lake Storage Gen2](connector-azure-data-lake-storage.md) in JSON format** (type setOfObjects). If you want to load Office 365 into other types of data stores or in other formats, you can chain the first copy activity with a subsequent copy activity to further load data into any of the [supported ADF destination stores](copy-activity-overview.md#supported-data-stores-and-formats) (refer to "supported as a sink" column in the "Supported data stores and formats" table).
data-factory Connector Oracle Eloqua https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-oracle-eloqua.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Oracle Eloqua connector is supported for the following activities:
+This Oracle Eloqua connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Oracle Eloqua to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Oracle Responsys https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-oracle-responsys.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Oracle Responsys connector is supported for the following activities:
+This Oracle Responsys connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Oracle Responsys to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Oracle Service Cloud https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-oracle-service-cloud.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Oracle Service Cloud connector is supported for the following activities:
+This Oracle Service Cloud connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Oracle Service Cloud to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Paypal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-paypal.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This PayPal connector is supported for the following activities:
+This PayPal connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from PayPal to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Quickbase https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-quickbase.md
This article outlines how to use Data Flow to transform data in Quickbase (Previ
## Supported capabilities
-This Quickbase connector is supported for the following activities:
+This Quickbase connector is supported for the following capabilities:
-- [Mapping data flow](concepts-data-flow-overview.md)
+| Supported capabilities|IR |
+|| --|
+|[Mapping data flow](concepts-data-flow-overview.md) (source/-)|&#9312; |
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
## Create a Quickbase linked service using UI
data-factory Connector Quickbooks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-quickbooks.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This QuickBooks connector is supported for the following activities:
+This QuickBooks connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from QuickBooks Online to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
This connector supports QuickBooks OAuth 2.0 authentication.
data-factory Connector Salesforce Marketing Cloud https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce-marketing-cloud.md
This article outlines how to use the Copy Activity in Azure Data Factory or Syna
## Supported capabilities
-This Salesforce Marketing Cloud connector is supported for the following activities:
+This Salesforce Marketing Cloud connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Salesforce Marketing Cloud to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The Salesforce Marketing Cloud connector supports OAuth 2 authentication, and it supports both legacy and enhanced package types. The connector is built on top of the [Salesforce Marketing Cloud REST API](https://developer.salesforce.com/docs/atlas.en-us.mc-apis.meta/mc-apis/index-api.htm).
data-factory Connector Salesforce Service Cloud https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce-service-cloud.md
This article outlines how to use Copy Activity in Azure Data Factory and Synapse
## Supported capabilities
-This Salesforce Service Cloud connector is supported for the following activities:
+This Salesforce Service Cloud connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/sink)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Salesforce Service Cloud to any supported sink data store. You also can copy data from any supported source data store to Salesforce Service Cloud. For a list of data stores that are supported as sources or sinks by the Copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources or sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Specifically, this Salesforce Service Cloud connector supports:
data-factory Connector Salesforce https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-salesforce.md
This article outlines how to use Copy Activity in Azure Data Factory and Azure S
## Supported capabilities
-This Salesforce connector is supported for the following activities:
+This Salesforce connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/sink)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Salesforce to any supported sink data store. You also can copy data from any supported source data store to Salesforce. For a list of data stores that are supported as sources or sinks by the Copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources or sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Specifically, this Salesforce connector supports:
data-factory Connector Sap Cloud For Customer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-sap-cloud-for-customer.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This SAP Cloud for Customer connector is supported for the following activities:
+This SAP Cloud for Customer connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/sink)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from SAP Cloud for Customer to any supported sink data store, or copy data from any supported source data store to SAP Cloud for Customer. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Specifically, this connector enables the service to copy data from/to SAP Cloud for Customer including the SAP Cloud for Sales, SAP Cloud for Service, and SAP Cloud for Social Engagement solutions.
data-factory Connector Sap Ecc https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-sap-ecc.md
This article outlines how to use the copy activity in Azure Data Factory to copy
## Supported capabilities
-This SAP ECC connector is supported for the following activities:
+This SAP ECC connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from SAP ECC to any supported sink data store. For a list of data stores that are supported as sources or sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources or sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Specifically, this SAP ECC connector supports:
data-factory Connector Servicenow https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-servicenow.md
This article outlines how to use the Copy Activity in Azure Data Factory and Syn
## Supported capabilities
-This ServiceNow connector is supported for the following activities:
+This ServiceNow connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from ServiceNow to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity. Therefore you don't need to manually install any driver using this connector.
data-factory Connector Sharepoint Online List https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-sharepoint-online-list.md
This article outlines how to use Copy Activity in Azure Data Factory and Azure S
## Supported capabilities
-This SharePoint Online List connector is supported for the following activities:
+This SharePoint Online List connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources or sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
-You can copy data from SharePoint Online List to any supported sink data store. For a list of data stores that Copy Activity supports as sources and sinks, see [Supported data stores and formats](copy-activity-overview.md#supported-data-stores-and-formats).
Specifically, this SharePoint List Online connector uses service principal authentication and retrieves data via OData protocol.
data-factory Connector Shopify https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-shopify.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Shopify connector is supported for the following activities:
+This Shopify connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Shopify to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Smartsheet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-smartsheet.md
This article outlines how to use Data Flow to transform data in Smartsheet (Prev
## Supported capabilities
-This Smartsheet connector is supported for the following activities:
+This Smartsheet connector is supported for the following capabilities:
-- [Mapping data flow](concepts-data-flow-overview.md)
+| Supported capabilities|IR |
+|| --|
+|[Mapping data flow](concepts-data-flow-overview.md) (source/-)|&#9312; |
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
## Create a Smartsheet linked service using UI
data-factory Connector Square https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-square.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Square connector is supported for the following activities:
+This Square connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Square to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
The service provides a built-in driver to enable connectivity, therefore you don't need to manually install any driver using this connector.
data-factory Connector Teamdesk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-teamdesk.md
This article outlines how to use Data Flow to transform data in TeamDesk (Previe
## Supported capabilities
-This TeamDesk connector is supported for the following activities:
+This TeamDesk connector is supported for the following capabilities:
-- [Mapping data flow](concepts-data-flow-overview.md)
+| Supported capabilities|IR |
+|| --|
+|[Mapping data flow](concepts-data-flow-overview.md) (source/-)|&#9312; |
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
## Create a TeamDesk linked service using UI
data-factory Connector Troubleshoot Ftp Sftp Http https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-troubleshoot-ftp-sftp-http.md
Previously updated : 07/08/2022 Last updated : 07/29/2022
This article provides suggestions to troubleshoot common problems with the FTP,
- **Symptoms**: You are unable to connect to SFTP via ADF and meet the following error message: `Failed to negotiate key exchange algorithm.` - **Cause**: The key exchange algorithms provided by the SFTP server are not supported in ADF. The key exchange algorithms supported by ADF are:
+ - curve25519-sha256
+ - curve25519-sha256@libssh.org
+ - ecdh-sha2-nistp256
+ - ecdh-sha2-nistp384
+ - ecdh-sha2-nistp521
- diffie-hellman-group-exchange-sha256 - diffie-hellman-group-exchange-sha1
+ - diffie-hellman-group16-sha512
+ - diffie-hellman-group14-sha256
- diffie-hellman-group14-sha1 - diffie-hellman-group1-sha1
+ The latest version to support above key exchange algorithms on SHIR is version 5.19.
+ ### Error Code: SftpInvalidHostKeyFingerprint - **Message**: `Host key finger-print validation failed. Expected fingerprint is '<value in linked service>', real finger-print is '<server real value>'`
data-factory Connector Twilio https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-twilio.md
This article outlines how to use Data Flow to transform data in Twilio (Preview)
## Supported capabilities
-This Twilio connector is supported for the following activities:
+This Twilio connector is supported for the following capabilities:
-- [Mapping data flow](concepts-data-flow-overview.md)
+| Supported capabilities|IR |
+|| --|
+|[Mapping data flow](concepts-data-flow-overview.md) (source/-)|&#9312; |
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
## Create a Twilio linked service using UI
data-factory Connector Web Table https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-web-table.md
The difference among this Web table connector, the [REST connector](connector-re
## Supported capabilities
-This Web table connector is supported for the following activities:
+This Web table connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9313;|
-You can copy data from Web table database to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Specifically, this Web table connector supports **extracting table content from an HTML page**.
data-factory Connector Xero https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-xero.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Xero connector is supported for the following activities:
+This Xero connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
-You can copy data from Xero to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
Specifically, this Xero connector supports:
data-factory Connector Zendesk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-zendesk.md
This article outlines how to use Data Flow to transform data in Zendesk (Preview
## Supported capabilities
-This Zendesk connector is supported for the following activities:
+This Zendesk connector is supported for the following capabilities:
-- [Mapping data flow](concepts-data-flow-overview.md)
+| Supported capabilities|IR |
+|| --|
+|[Mapping data flow](concepts-data-flow-overview.md) (source/-)|&#9312; |
+
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
+
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
## Create a Zendesk linked service using UI
data-factory Connector Zoho https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/data-factory/connector-zoho.md
This article outlines how to use the Copy Activity in an Azure Data Factory or S
## Supported capabilities
-This Zoho connector is supported for the following activities:
+This Zoho connector is supported for the following capabilities:
-- [Copy activity](copy-activity-overview.md) with [supported source/sink matrix](copy-activity-overview.md)-- [Lookup activity](control-flow-lookup-activity.md)
+| Supported capabilities|IR |
+|| --|
+|[Copy activity](copy-activity-overview.md) (source/-)|&#9312; &#9313;|
+|[Lookup activity](control-flow-lookup-activity.md)|&#9312; &#9313;|
+<small>*&#9312; Azure integration runtime &#9313; Self-hosted integration runtime*</small>
-You can copy data from Zoho to any supported sink data store. For a list of data stores that are supported as sources/sinks by the copy activity, see the [Supported data stores](copy-activity-overview.md#supported-data-stores-and-formats) table.
+For a list of data stores that are supported as sources/sinks, see the [Supported data stores](connector-overview.md#supported-data-stores) table.
This connector supports Xero access token authentication and OAuth 2.0 authentication.
defender-for-iot Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/defender-for-iot/organizations/overview.md
Many legacy IoT and OT devices don't support agents, and can therefore remain un
Traditional network security monitoring tools may lack understanding of networks containing specialized protocols, devices, and relevant machine-to-machine (M2M) behaviors. Agentless monitoring in Defender for IoT provides visibility and security into those networks. -- **Discover IoT/OT devices** in your network, their details, and how they communicate. Gather data from network sensors, Microsoft Defender for end-point, and third-party sources.
+- **Discover IoT/OT devices** in your network, their details, and how they communicate. Gather data from network sensors, Microsoft Defender for Endpoint, and third-party sources.
- **Assess risks and manage vulnerabilities** using machine learning, threat intelligence, and behavioral analytics. For example:
digital-twins Quickstart Azure Digital Twins Explorer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/digital-twins/quickstart-azure-digital-twins-explorer.md
Move on to the next quickstart to visualize an Azure Digital Twins scenario in a
> [!div class="nextstepaction"] > [Get started with 3D Scenes Studio](quickstart-3d-scenes-studio.md)+
+Or, skip ahead to the tutorials to dive deeper into the SDKs, twin graph creation, and event flow setup.
+* [Code a client app](tutorial-code.md)
+* [Create a graph in Azure Digital Twins](tutorial-command-line-app.md)
+* [Connect an end-to-end solution](tutorial-end-to-end.md)
dms Tutorial Postgresql Azure Postgresql Online https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/dms/tutorial-postgresql-azure-postgresql-online.md
To complete all the database objects like table schemas, indexes and stored proc
az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name runnowtask --expand output ```
- * You can also use [JMESPATH](https://jmespath.org/) query format to only extract the migrationState from the expand output:
+ * You can also use [JMESPath](/cli/azure/query-azure-cli) query format to only extract the migrationState from the expand output:
```azurecli az dms project task show --service-name PostgresCLI --project-name PGMigration --resource-group PostgresDemo --name runnowtask --expand output --query 'properties.output[].migrationState'
governance Remediate Resources https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/governance/policy/how-to/remediate-resources.md
Title: Remediate non-compliant resources description: This guide walks you through the remediation of resources that are non-compliant to policies in Azure Policy. Previously updated : 04/27/2022 Last updated : 07/29/2022
az role definition list --name "Contributor"
## Configure the managed identity
-Each Azure Policy assignment can be associated with only one managed identity. However, the managed identity can be assigned multiple roles. Configuration occurs in two steps: first create either a system-assigned or user-assigned managed identity, then grant it the necessary roles.
+Each Azure Policy assignment can be associated with only one managed identity. However, the managed identity can be assigned multiple roles. Configuration occurs in two steps: first create either a system-assigned or user-assigned managed identity, then grant it the necessary roles.
> [!NOTE] > When creating a managed identity through the portal, roles will be granted automatically to the managed identity. If **roleDefinitionIds** are later edited in the policy definition, the new permissions must be manually granted, even in the portal.
When creating an assignment using the portal, Azure Policy can generate a system
:::image type="content" source="../media/remediate-resources/remediation-tab.png" alt-text="Screenshot of a policy assignment creating a system-assigned managed identity in East US with Log Analytics Contributor permissions.":::
-To set a system-assigned managed identity in the portal:
+To set a system-assigned managed identity in the portal:
-1. On the **Remediation** tab of the create/edit assignment view, under **Types of Managed Identity**, ensure that **System assigned managed identity**
-is selected.
+1. On the **Remediation** tab of the create/edit assignment view, under **Types of Managed Identity**, ensure that **System assigned managed identity**
+is selected.
-1. Specify the location at which the managed identity is to be located.
+1. Specify the location at which the managed identity is to be located.
-To set a user-assigned managed identity in the portal:
+To set a user-assigned managed identity in the portal:
-1. On the **Remediation** tab of the create/edit assignment view, under **Types of Managed Identity**, ensure that **User assigned managed identity**
-is selected.
+1. On the **Remediation** tab of the create/edit assignment view, under **Types of Managed Identity**, ensure that **User assigned managed identity**
+is selected.
-1. Specify the scope where the managed identity is hosted. The scope of the managed identity does not have to equate to the scope of the assignment, but it must be in the same tenant.
+1. Specify the scope where the managed identity is hosted. The scope of the managed identity does not have to equate to the scope of the assignment, but it must be in the same tenant.
-1. Under **Existing user assigned identities**, select the managed identity.
+1. Under **Existing user assigned identities**, select the managed identity.
# [PowerShell](#tab/azure-powershell)
-To create an identity during the assignment of the policy, **Location** must be defined and **Identity** used.
+To create an identity during the assignment of the policy, **Location** must be defined and **Identity** used.
The following example gets the definition of the built-in policy **Deploy SQL DB transparent data encryption** sets the target resource group, and then creates the assignment using a **system assigned** managed identity.
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/poli
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup' # Get the existing user assigned managed identity ID
-$userassignedidentity = Get-AzUserAssignedIdentity -ResourceGroupName $rgname -Name $userassignedidentityname
+$userassignedidentity = Get-AzUserAssignedIdentity -ResourceGroupName $rgname -Name $userassignedidentityname
$userassignedidentityid = $userassignedidentity.Id # Create the assignment using the -Location and -Identity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL D
``` The `$assignment` variable now contains the principal ID of the managed identity along with the standard values returned when creating a policy assignment. It can be accessed through
-`$assignment.Identity.PrincipalId` for system-assigned managed identities and `$assignment.Identity.UserAssignedIdentities[$userassignedidentityid].PrincipalId` for user-assigned managed identities.
+`$assignment.Identity.PrincipalId` for system-assigned managed identities and `$assignment.Identity.UserAssignedIdentities[$userassignedidentityid].PrincipalId` for user-assigned managed identities.
# [Azure CLI](#tab/azure-cli)
To add a system-assigned identity or a user-assigned identity to a policy assign
### Grant permissions to the managed identity through defined roles > [!IMPORTANT]
->
+>
> If the managed identity does not have the permissions needed to execute the required remediation task, it will be granted permissions *automatically* only through the portal. You may skip this step if creating a managed identity through the portal. > > For all other methods, the assignment's managed identity must be manually granted access through the addition of roles, or else the remediation deployment will fail.
->
+>
> Example scenarios that require manual permissions:
-> - If the assignment is created through SDK
+> - If the assignment is created through an Azure software development kit (SDK)
> - If a resource modified by **deployIfNotExists** or **modify** is outside the scope of the policy > assignment > - If the template accesses properties on resources outside the scope of the policy assignment
To add a role to the assignment's managed identity, follow these steps:
# [PowerShell](#tab/azure-powershell) The new managed identity must complete replication through Azure Active Directory before it can be
-granted the needed roles. Once replication is complete, the following example iterates the policy
+granted the needed roles. Once replication is complete, the following examples iterate the policy
definition in `$policyDef` for the **roleDefinitionIds** and uses [New-AzRoleAssignment](/powershell/module/az.resources/new-azroleassignment) to grant the new managed identity the roles.
+Specifically, the first example shows you how to grant roles at the policy scope. The second
+example demonstrates how to grant roles at the initiative (policy set) scope.
+ ```azurepowershell-interactive
+###################################################
+# Grant roles to managed identity at policy scope #
+###################################################
+ # Use the $policyDef to get to the roleDefinitionIds array $roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds
if ($roleDefinitionIds.Count -gt 0)
{ $roleDefinitionIds | ForEach-Object { $roleDefId = $_.Split("/") | Select-Object -Last 1
- New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
+ New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId
+ -RoleDefinitionId $roleDefId
} }+
+#######################################################
+# Grant roles to managed identity at initiative scope #
+#######################################################
+
+#If the policy had no managed identity in its logic, then no impact. If there is a managed identity
+used for enforcement, replicate it on the new assignment.
+$getNewInitiativeAssignment = Get-AzPolicyAssignment -Name $newInitiativeDefinition.Name
+
+#Create an array to store role definition's IDs used by policies inside the initiative.
+$InitiativeRoleDefinitionIds = @();
+
+#Loop through the policy definitions inside the initiative and gather their role definition IDs
+foreach ($policyDefinitionIdInsideInitiative in $InitiativeDefinition.Properties.PolicyDefinitions.policyDefinitionId) {
+ $policyDef = Get-AzPolicyDefinition -Id $policyDefinitionIdInsideInitiative
+ $roleDefinitionIds = $policyDef.Properties.PolicyRule.then.details.roleDefinitionIds
+ $InitiativeRoleDefinitionIds += $roleDefinitionIds
+}
+
+#Create the role assignments used by the initiative assignment at the subscription scope.
+if ($InitiativeRoleDefinitionIds.Count -gt 0) {
+ $InitiativeRoleDefinitionIds | Sort-Object -Unique | ForEach-Object {
+ $roleDefId = $_.Split("/") | Select-Object -Last 1
+ New-AzRoleAssignment -Scope "/subscriptions/$($subscription)" -ObjectId $getNewInitiativeAssignment.Identity.PrincipalId
+ -RoleDefinitionId $roleDefId
+ }
+}
``` # [Azure CLI](#tab/azure-cli)
There are three ways to create a remediation task through the portal.
1. All **deployIfNotExists** and **modify** policy assignments are shown on the **Policies to remediate** tab. Select one with resources that are non-compliant to open the **New remediation task** page.
-
+ 1. Follow steps to [specify remediation task details](#step-2-specify-remediation-task-details). #### Option 2: Create a remediation task from a non-compliant policy assignment
the **Remediation** tab of the wizard offers a _Create a remediation task_ optio
> [!NOTE] > This is the most streamlined approach for creating a remediation task and is supported for policies assigned on a _subscription_. For policies assigned on a _management group_, remediation tasks should be created using [Option 1](#option-1-create-a-remediation-task-from-the-remediation-page) or [Option 2](#option-2-create-a-remediation-task-from-a-non-compliant-policy-assignment) after evaluation has determined resource compliance.
-1. From the assignment wizard in the portal, navigate to the **Remediation** tab. Select the check box for **Create a remediation task**.
+1. From the assignment wizard in the portal, navigate to the **Remediation** tab. Select the check box for **Create a remediation task**.
1. If the remediation task is initiated from an initiative assignment, select the policy to remediate from the drop-down.
the **Remediation** tab of the wizard offers a _Create a remediation task_ optio
This step is only applicable when using [Option 1](#option-1-create-a-remediation-task-from-the-remediation-page) or [Option 2](#option-2-create-a-remediation-task-from-a-non-compliant-policy-assignment) to initiate remediation task creation.
-1. If the remediation task is initiated from an initiative assignment, select the policy to remediate from the drop-down. One **deployIfNotExists** or **modify** policy can be remediated through a single Remediation task at a time.
+1. If the remediation task is initiated from an initiative assignment, select the policy to remediate from the drop-down. One **deployIfNotExists** or **modify** policy can be remediated through a single Remediation task at a time.
-1. Optionally modify remediation settings on the **New remediation task** page:
+1. Optionally modify remediation settings on the **New remediation task** page:
- - **Failure Threshold percentage** - Used to specify whether the remediation task should fail if the percentage of failures exceeds the given threshold. Provided as a number between 0 to 100. By default, the failure threshold is 100%.
+ - **Failure Threshold percentage** - Used to specify whether the remediation task should fail if the percentage of failures exceeds the given threshold. Provided as a number between 0 to 100. By default, the failure threshold is 100%.
- **Resource Count** - Determines how many non-compliant resources to remediate in a given remediation task. The default value is 500 (the previous limit). The maximum number is 50,000 resources. - **Parallel Deployments** - Determines how many resources to remediate at the same time. The allowed values are 1 to 30 resources at a time. The default value is 10. > [!NOTE] > These settings cannot be changed once the remediation task has started.
-
+ 1. On the same page, filter the resources to remediate by using the **Scope** ellipses to pick child resources from where the policy is assigned (including down to the individual resource objects). Additionally, use the **Locations** dropdown list to further filter
- the resources.
+ the resources.
:::image type="content" source="../media/remediate-resources/select-resources.png" alt-text="Screenshot of the Remediate node and the grid of resources to remediate." border="false":::
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptio
``` You may also choose to adjust remediation settings through these optional parameters:-- `-FailureThreshold` - Used to specify whether the remediation task should fail if the percentage of failures exceeds the given threshold. Provided as a number between 0 to 100. By default, the failure threshold is 100%.
+- `-FailureThreshold` - Used to specify whether the remediation task should fail if the percentage of failures exceeds the given threshold. Provided as a number between 0 to 100. By default, the failure threshold is 100%.
- `-ParallelDeploymentCount` - Determines how many non-compliant resources to remediate in a given remediation task. The default value is 500 (the previous limit). The maximum number is 50,000 resources. - `-ResourceCount` - Determines how many resources to remediate at the same time. The allowed values are 1 to 30 resources at a time. The default value is 10.
guides Azure Developer Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/guides/developer/azure-developer-guide.md
Azure Spring Cloud is a serverless microservices platform that enables you to bu
> **When to use:** As a fully managed service Azure Spring Cloud is a good choice when you're minimizing operational cost running Spring Boot/Spring Cloud based microservices on Azure. >
-> **Get started:** [Deploy your first Spring Boot app in Azure Spring Cloud](../../spring-cloud/quickstart.md).
+> **Get started:** [Deploy your first Spring Boot app in Azure Spring Apps](../../spring-apps/quickstart.md).
### Enhance your applications with Azure services
hdinsight Kafka Mirrormaker 2 0 Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/hdinsight/kafka/kafka-mirrormaker-2-0-guide.md
export KAFKA_OPTS="-Djava.security.auth.login.config=<path-to-jaas.conf>"
``` # specify any number of cluster aliases
- clusters = src, dest
+ clusters = source, destination
# connection information for each cluster # This is a comma separated host:port pairs for each cluster
- # for example. "A_host1:9092, A_host2:9092, A_host3:9092"
- source.bootstrap.servers = wn0-src-kafka.azurehdinsight.net:9092,wn1-src-kafka.azurehdinsight.net:9092,wn2-src-kafka.azurehdinsight.net:9092
- destination.bootstrap.servers = wn0-dest-kafka.azurehdinsight.net:9092,wn1-dest-kafka.azurehdinsight.net:9092,wn2-dest-kafka.azurehdinsight.net:9092
+ # for example. "A_host1:9092, A_host2:9092, A_host3:9092" and you can see the exact host name on Ambari > Hosts
+ source.bootstrap.servers = wn0-src-kafka.bx.internal.cloudapp.net:9092,wn1-src-kafka.bx.internal.cloudapp.net:9092,wn2-src-kafka.bx.internal.cloudapp.net:9092
+ destination.bootstrap.servers = wn0-dest-kafka.bx.internal.cloudapp.net:9092,wn1-dest-kafka.bx.internal.cloudapp.net:9092,wn2-dest-kafka.bx.internal.cloudapp.net:9092
# enable and configure individual replication flows source->destination.enabled = true
iot-dps Quick Create Simulated Device Tpm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-dps/quick-create-simulated-device-tpm.md
# Quickstart: Provision a simulated TPM device In this quickstart, you'll create a simulated device on your Windows machine. The simulated device will be configured to use a [Trusted Platform Module (TPM) attestation](concepts-tpm-attestation.md) mechanism for authentication. After you've configured your device, you'll provision it to your IoT hub using the Azure IoT Hub Device Provisioning Service. Sample code will then be used to help enroll the device with a Device Provisioning Service instance. If you're unfamiliar with the process of provisioning, review the [provisioning](about-iot-dps.md#provisioning-process) overview. Also make sure you've completed the steps in [Set up IoT Hub Device Provisioning Service with the Azure portal](./quick-setup-auto-provision.md) before continuing.
The Azure IoT Device Provisioning Service supports two types of enrollments:
* [Individual Enrollments](concepts-service.md#individual-enrollment) that are used to enroll a single device. This article demonstrates individual enrollments.+
+Trusted Platform Module (TPM) attestation isn't supported in the Python SDK. With Python, you can provision a device using [symmetric keys](quick-create-simulated-device-symm-key.md) or [X.509 certificates](quick-create-simulated-device-x509.md).
+ ## Prerequisites
This article demonstrates individual enrollments.
The following prerequisites are for a Windows development environment. For Linux or macOS, see the appropriate section in [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-c/blob/master/doc/devbox_setup.md) in the SDK documentation. ::: zone pivot="programming-language-ansi-c" * [Visual Studio](https://visualstudio.microsoft.com/vs/) 2019 with the ['Desktop development with C++'](/cpp/ide/using-the-visual-studio-ide-for-cpp-desktop-development) workload enabled. Visual Studio 2015 and Visual Studio 2017 are also supported.
The following prerequisites are for a Windows development environment. For Linux
::: zone-end -
-* Install [Python 2.x or 3.x](https://www.python.org/downloads/). Make sure to use the 32-bit or 64-bit installation as required by your setup. When prompted during the installation, make sure to add Python to your platform-specific environment variables.
-
-* If you're using Windows OS, install the [Visual C++ redistributable package](https://support.microsoft.com/help/2977003/the-latest-supported-visual-c-downloads) to allow the use of native DLLs from Python.
-
-* [Visual Studio](https://visualstudio.microsoft.com/vs/) 2019 with the ['Desktop development with C++'](/cpp/ide/using-the-visual-studio-ide-for-cpp-desktop-development) workload enabled. Visual Studio 2015 and Visual Studio 2017 are also supported.
-
-* [CMake build system](https://cmake.org/download/).
-- ::: zone pivot="programming-language-java" * Install [Java SE Development Kit 8](/azure/developer/java/fundamentals/java-support-on-azure) or later installed on your machine.
The following prerequisites are for a Windows development environment. For Linux
* Download and install [Maven](https://maven.apache.org/install.html). ::: zone-end * Install the latest version of [Git](https://git-scm.com/download/). Make sure that Git is added to the environment variables accessible to the command window. See [Software Freedom Conservancy's Git client tools](https://git-scm.com/download/) for the latest version of `git` tools to install, which includes *Git Bash*, the command-line app that you can use to interact with your local Git repository.
The following prerequisites are for a Windows development environment. For Linux
## Prepare your development environment ::: zone pivot="programming-language-ansi-c" In this section, you'll prepare a development environment used to build the [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c) and the [TPM](/windows/device-security/tpm/trusted-platform-module-overview) device simulator sample.
In this section, you'll prepare a development environment used to build the [Azu
::: zone-end -
-1. Open a Git CMD or Git Bash command-line environment.
-
-2. Clone the [Python](https://github.com/Azure/azure-iot-sdk-python) GitHub repository using the following command:
-
- ```cmd/sh
- git clone --single-branch --branch v1-deprecated https://github.com/Azure/azure-iot-sdk-python.git --recursive
- ```
-
-3. Create a folder in your local copy of this GitHub repo for the CMake build process.
-
- ```cmd/sh
- cd azure-iot-sdk-python/c
- mkdir cmake
- cd cmake
- ```
-
-4. Follow [these instructions](https://github.com/Azure/azure-iot-sdk-python/blob/v1-deprecated/doc/python-devbox-setup.md) to build the Python packages.
-
- > [!NOTE]
- > If running the `build_client.cmd` make sure to use the `--use-tpm-simulator` flag.
- >
- > [!NOTE]
- > If using `pip` make sure to also install the `azure-iot-provisioning-device-client` package. Note that the released PIP packages are using the real TPM, not the simulator. To use the simulator you need to compile from the source using the `--use-tpm-simulator` flag.
-- ::: zone pivot="programming-language-java" 1. Open a Git CMD or Git Bash command-line environment.
In this section, you'll prepare a development environment used to build the [Azu
::: zone-end ## Build and run the TPM device simulator
In this section, you'll build and run the TPM simulator. This simulator listens
::: zone-end -
-1. Run the following command to enable the SAS token authentication (the command also generates a Visual Studio solution for the simulated device):
-
- ```cmd/sh
- cmake -Duse_prov_client:BOOL=ON -Duse_tpm_simulator:BOOL=ON ..
- ```
-
-2. Open a second command prompt.
-
-3. In the second command prompt, navigate to the TPM simulator folder.
-
-4. Run the [TPM](/windows/device-security/tpm/trusted-platform-module-overview) simulator to be the [HSM](https://azure.microsoft.com/blog/azure-iot-supports-new-security-hardware-to-strengthen-iot-security/) for the simulated device.
-
-5. Select **Allow Access**. The simulator listens over a socket on ports 2321 and 2322. Do not close this command window; you will need to keep this simulator running until the end of this quickstart guide.
-
- ```cmd/sh
- .\azure-iot-sdk-python\c\provisioning_client\deps\utpm\tools\tpm_simulator\Simulator.exe
- ```
-
- ![TPM Simulator](./media/quick-create-simulated-device-tpm/simulator.png)
-- ::: zone pivot="programming-language-java" 1. Run the [TPM](/windows/device-security/tpm/trusted-platform-module-overview) simulator to be the [HSM](https://azure.microsoft.com/blog/azure-iot-supports-new-security-hardware-to-strengthen-iot-security/) for the simulated device.
In this section, you'll build and run the TPM simulator. This simulator listens
::: zone-end <a id="simulatetpm"></a>
In this section, you'll build and run the TPM simulator. This simulator listens
::: zone-end In this section, you'll build and execute a sample that reads the endorsement key and registration ID from the TPM simulator you left running, and is still listening over ports 2321 and 2322. These values will be used for device enrollment with your Device Provisioning Service instance.
In this section, you'll build and execute a sample that reads the endorsement ke
::: zone-end -
-1. Launch Visual Studio.
-
-2. Open the solution generated in the *cmake* folder named `azure_iot_sdks.sln`.
-
-3. On the Visual Studio menu, select **Build** > **Build Solution** to build all projects in the solution.
-
-4. Right-click the **tpm_device_provision** project and select **Set as Startup Project**.
-
-5. Run the solution. The output window displays the **_Endorsement key_** and the **_Registration ID_** needed for device enrollment. Copy these values.
-- ::: zone pivot="programming-language-java" 1. Sign in to the Azure portal, select the **All resources** button on the left-hand menu and open your Device Provisioning Service. Note your _ID Scope_ and _Provisioning Service Global Endpoint_.
In this section, you'll build and execute a sample that reads the endorsement ke
::: zone-end <a id="portalenrollment"></a> ## Create a device enrollment entry 1. Sign in to the [Azure portal](https://portal.azure.com).
In this section, you'll build and execute a sample that reads the endorsement ke
7. Select **Save**. ::: zone-end ## Register the device In this section, you'll configure sample code to use the [Advanced Message Queuing Protocol (AMQP)](https://wikipedia.org/wiki/Advanced_Message_Queuing_Protocol) to send the device's boot sequence to your Device Provisioning Service instance. This boot sequence causes the device to be registered to an IoT hub linked to the Device Provisioning Service instance. ::: zone pivot="programming-language-ansi-c" <a id="firstbootsequence"></a>
In this section, you'll configure sample code to use the [Advanced Message Queui
::: zone-end -
-1. Navigate to the samples folder of the Git repository.
-
- ```cmd/sh
- cd azure-iot-sdk-python/provisioning_device_client/samples
- ```
-
-2. Using your Python IDE, edit the Python script named **provisioning\_device\_client\_sample.py** (replace `{globalServiceEndpoint}` and `{idScope}` to the values that you previously copied). Also, make sure *SECURITY\_DEVICE\_TYPE* is set to `ProvisioningSecurityDeviceType.TPM`.
-
- ```python
- GLOBAL_PROV_URI = "{globalServiceEndpoint}"
- ID_SCOPE = "{idScope}"
- SECURITY_DEVICE_TYPE = ProvisioningSecurityDeviceType.TPM
- PROTOCOL = ProvisioningTransportProvider.HTTP
- ```
-
- ![Service information](./media/quick-create-simulated-device-tpm/extract-dps-endpoints-python.png)
-
-3. Run the sample.
-
- ```cmd/sh
- python provisioning_device_client_sample.py
- ```
-
-4. Notice the messages that simulate the device booting and connecting to the Device Provisioning Service to get your IoT hub information.
-- ::: zone pivot="programming-language-java" 1. In the command window running the Java sample code on your machine, press *Enter* to continue running the application. Notice the messages that simulate the device booting and connecting to the Device Provisioning Service to get your IoT hub information.
In this section, you'll configure sample code to use the [Advanced Message Queui
![Java TPM device program final](./media/quick-create-simulated-device-tpm/program-final-java.png) ::: zone-end ## Confirm your device provisioning registration
In this section, you'll configure sample code to use the [Advanced Message Queui
4. In the **Explorers** menu, select **IoT Devices**. 5. If your device was provisioned successfully, the device ID should appear in the list, with **Status** set as *enabled*. If you don't see your device, select **Refresh** at the top of the page.
- :::zone pivot="programming-language-ansi-c"
- ![Device is registered with the IoT hub for C](./media/quick-create-simulated-device-tpm/hub-registration-ansi-c.png)
- :::zone-end
- :::zone pivot="programming-language-csharp"
+5. If your device was provisioned successfully, the device ID should appear in the list, with **Status** set as *enabled*. If you don't see your device, select **Refresh** at the top of the page.
![Device is registered with the IoT hub for C#](./media/quick-create-simulated-device-tpm/hub-registration-csharp.png)
- ::: zone-end
- ::: zone pivot="programming-language-nodejs"
+5. If your device was provisioned successfully, the device ID should appear in the list, with **Status** set as *enabled*. If you don't see your device, select **Refresh** at the top of the page.
![Device is registered with the IoT hub for Node.js](./media/quick-create-simulated-device-tpm/hub-registration-nodejs.png)
- ::: zone-end
-
- ::: zone pivot="programming-language-python"
-
- ![Device is registered with the IoT hub](./media/quick-create-simulated-device-tpm/hub-registration-python.png)
-
- ::: zone-end
- ::: zone pivot="programming-language-java"
+5. If your device was provisioned successfully, the device ID should appear in the list, with **Status** set as *enabled*. If you don't see your device, select **Refresh** at the top of the page.
![Device is registered with the IoT hub](./media/quick-create-simulated-device-tpm/hub-registration-java.png)
- ::: zone-end
> [!NOTE] > If you changed the *initial device twin state* from the default value in the enrollment entry for your device, it can pull the desired twin state from the hub and act accordingly. For more information, see [Understand and use device twins in IoT Hub](../iot-hub/iot-hub-devguide-device-twins.md).
If you plan to continue working on and exploring the device client sample, don't
In this quickstart, you've created a TPM simulated device on your machine and provisioned it to your IoT hub using the IoT Hub Device Provisioning Service. To learn how to enroll your TPM device programmatically, continue to the quickstart for programmatic enrollment of a TPM device.
+> [!div class="nextstepaction"]
+> [Create an individual enrollment for a TPM device using the DPS service SDK](quick-enroll-device-tpm.md?pivots=programming-language-csharp)
+> [!div class="nextstepaction"]
+> [Create an individual enrollment for a TPM device using the DPS service SDK](quick-enroll-device-tpm.md?pivots=programming-language-nodejs)
> [!div class="nextstepaction"]
-> [Quickstart - Enroll TPM device to Azure IoT Hub Device Provisioning Service](quick-enroll-device-tpm.md)
+> [Create an individual enrollment for a TPM device using the DPS service SDK](quick-enroll-device-tpm.md?pivots=programming-language-java)
iot-dps Quick Create Simulated Device X509 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-dps/quick-create-simulated-device-x509.md
In this section, you'll prepare a development environment that's used to build t
::: zone pivot="programming-language-python"
-1. In your Windows command prompt, clone the [Azure IoT Samples for Python](https://github.com/Azure/azure-iot-sdk-node.git) GitHub repository using the following command:
+1. In your Windows command prompt, clone the [Azure IoT Samples for Python](https://github.com/Azure/azure-iot-sdk-python.git) GitHub repository using the following command:
```cmd git clone https://github.com/Azure/azure-iot-sdk-python.git --recursive
iot-dps Quick Enroll Device Tpm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-dps/quick-enroll-device-tpm.md
Title: Quickstart - Enroll individual device to Azure Device Provisioning Service using TPM attestation
-description: Quickstart - Enroll an individual device to Azure IoT Hub Device Provisioning Service (DPS) using TPM attestation.
+ Title: How to programmatically create an Azure Device Provisioning Service individual enrollment for TPM attestation
+description: This article shows you how to programmatically create an individual enrollment entry for a device that uses TPM attestation.
Previously updated : 04/28/2022- Last updated : 07/28/2022+
+ms.devlang: csharp, java, nodejs
zone_pivot_groups: iot-dps-set2
-# Quickstart: Enroll individual device to IoT Hub Device Provisioning Service using TPM attestation
+# Programmatically create a Device Provisioning Service individual enrollment for TPM attestation
-This article shows you how to programmatically create an individual enrollment for a TPM device in the Azure IoT Hub Device Provisioning Service by using the [Microsoft Azure IoT SDK](../iot-hub/iot-hub-devguide-sdks.md) and a sample application. You can optionally enroll a simulated TPM device to the provisioning service by using this individual enrollment entry.
+This article shows you how to programmatically create an individual enrollment for a TPM device in the Azure IoT Hub Device Provisioning Service by using the [Azure IoT Hub DPS service SDK](libraries-sdks.md#service-sdks) and a sample application. After you've created the individual enrollment, you can optionally enroll a simulated TPM device to the provisioning service through this enrollment entry.
Although these steps work on both Windows and Linux computers, this article uses a Windows development computer. ## Prerequisites
+* [!INCLUDE [quickstarts-free-trial-note](../../includes/quickstarts-free-trial-note.md)]
* Complete the steps in [Set up IoT Hub Device Provisioning Service with the Azure portal](./quick-setup-auto-provision.md). :::zone pivot="programming-language-csharp"
-* Install [Visual Studio 2019](https://www.visualstudio.com/vs/).
-
-* Install [.NET Core 3.1 SDK or later](https://dotnet.microsoft.com/download) or later on your Windows-based machine. You can use the following command to check your version.
+* Install [.NET 6.0 SDK or later](https://dotnet.microsoft.com/download) or later on your Windows-based machine. You can use the following command to check your version.
```bash dotnet --info ```
-* (Optional) If you want to enroll a simulated device at the end of this quickstart, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md) up to the step where you get an endorsement key for the device. Save the endorsement key, registration ID, and, optionally, the device ID.
+* (Optional) If you want to enroll a simulated device at the end of this article, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-csharp) up to the step where you get an endorsement key for the device. Save the **Endorsement key**, you'll use it later in this article.
+
+ > [!NOTE]
+ > Don't follow the steps to create an individual enrollment by using the Azure portal.
:::zone-end
Although these steps work on both Windows and Linux computers, this article uses
* Install [Node.js v4.0+](https://nodejs.org).
-* (Optional) Create an endorsement key. Follow the steps in [Create and provision a simulated device](quick-create-simulated-device-tpm.md) until you get the key.
+* (Optional) If you want to enroll a simulated device at the end of this article, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-nodejs) up to the step where you get an endorsement key and registration ID for the device. Save the **Endorsement key** and **Registration ID**, you'll use them later in this article.
+
+ > [!NOTE]
+ > Don't follow the steps to create an individual enrollment by using the Azure portal.
:::zone-end :::zone pivot="programming-language-java"
-* Install the [Java SE Development Kit 8](/azure/developer/java/fundamentals/java-support-on-azure). This quickstart installs the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/) below. It works on both Windows and Linux. This quickstart uses Windows.
+* Install the [Java SE Development Kit 8](/azure/developer/java/fundamentals/java-support-on-azure). This article installs the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/) below. It works on both Windows and Linux. This article uses Windows.
* Install [Maven 3](https://maven.apache.org/download.cgi). * Install [Git](https://git-scm.com/download/) and make sure the the path is added to the environment variable `PATH`.
+* (Optional) If you want to enroll a simulated device at the end of this article, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-java) up to the step where you get an endorsement key for the device. Note the **Endorsement key** and the **Registration ID**, you'll use them later in this article.
-
-> [!NOTE]
-> Don't follow the steps to create an individual enrollment by using the Azure portal.
+ > [!NOTE]
+ > Don't follow the steps to create an individual enrollment by using the Azure portal.
-
-<a id="setupdevbox"></a>
-
-## Prepare the development environment
-### Set up environment variables
+## Get TPM endorsement key (Optional)
-To set up environment variables:
+You can follow the steps in this article to create a sample individual enrollment. In this, case, you'll be able to view the enrollment entry in DPS, but you won't be able to use it to provision a device.
-1. The `PATH` variable should include the full path to *jdk1.8.x\bin* directory. If this is your machine's first Java installation, then create a new environment variable named `JAVA_HOME` and point it to the full path to the *jdk1.8.x* directory. On Windows machine, this directory is found in the *C:\\Program Files\\Java\\* folder, and you can create or edit environment variables by searching for **Edit the system environment variables** on the **Control panel** of your Windows machine.
- You can check if Java is successfully set up on your machine by running the following command on your command window:
+You can also choose to follow the steps in this article to create an individual enrollment and enroll a simulated TPM device. If you want to enroll a simulated device at the end of this article, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-csharp) up to the step where you get an endorsement key for the device. Save the **Endorsement key**, you'll use it later in this article.
- ```cmd\sh
- java -version
- ```
+> [!NOTE]
+> Don't follow the steps to create an individual enrollment by using the Azure portal.
-2. Edit environment variable `PATH` to point to the *apache-maven-3.x.x\\bin* folder inside the folder where Maven was extracted. You may confirm that Maven is successfully installed by running this command on your command window:
- ```cmd\sh
- mvn --version
- ```
-3. Make sure [git](https://git-scm.com/download/) is installed on your machine and is added to the environment variable `PATH`.
+You can also choose to follow the steps in this article to create an individual enrollment and enroll a simulated TPM device. If you want to enroll a simulated device at the end of this article, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-nodejs) up to the step where you get an endorsement key and registration ID for the device. Save the **Endorsement key** and **Registration ID**, you'll use them later in this article.
-### Clone Git repository for Azure IoT Java SDK
+> [!NOTE]
+> Don't follow the steps to create an individual enrollment by using the Azure portal.
-To clone the Azure IoT Java SDK:
-1. Open a command prompt.
-2. Clone the GitHub repo for device enrollment code sample using the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/):
+You can also choose to follow the steps in this article to create an individual enrollment and enroll a simulated TPM device. If you want to enroll a simulated device at the end of this article, follow the procedure in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-java) up to the step where you get an endorsement key for the device. Note the **Endorsement key** and the **Registration ID**, you'll use them later in this article.
- ```cmd\sh
- git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
- ```
+> [!NOTE]
+> Don't follow the steps to create an individual enrollment by using the Azure portal.
:::zone-end ## Get the connection string for your provisioning service
-For the sample in this quickstart, you'll need to copy the connection string for your provisioning service.
+For the sample in this article, you'll need to copy the connection string for your provisioning service.
1. Sign in to the [Azure portal](https://portal.azure.com).
For the sample in this quickstart, you'll need to copy the connection string for
:::zone pivot="programming-language-csharp"
-This section shows you how to create a .NET Core console app that adds an individual enrollment for a TPM device to your provisioning service. With some modification, you can also follow these steps to create a [Windows IoT Core](https://developer.microsoft.com/en-us/windows/iot) console app to add the individual enrollment. To learn more about developing with IoT Core, see [Windows IoT Core developer documentation](/windows/iot-core/).
-
-1. Open Visual Studio, and select **Create a new project**.
-
-2. In the **Create a new project** panel, select **Console Application*.
-
-3. Select **Next**.
+This section shows you how to create a .NET Core console app that adds an individual enrollment for a TPM device to your provisioning service.
-4. For **Project name**, type *CreateEnrollmentGroup*.
+1. Open a Windows command prompt and navigate to a folder where you want to create your app.
-5. Select**Next**. Keep the default **Target framework**.
+1. To create a console project, run the following command:
-6. Select **Create**.
+ ```cmd
+ dotnet new console --framework net6.0 --use-program-main
+ ```
-7. After the solution opens, in the **Solution Explorer** pane, right-click the **CreateEnrollmentGroup** project, and then select **Manage NuGet Packages**.
+1. To add a reference to the DPS service SDK, run the following command:
-8. In **NuGet Package Manager**, select **Browse**.
+ ```cmd
+ dotnet add package Microsoft.Azure.Devices.Provisioning.Service
+ ```
-9. Type in and select *Microsoft.Azure.Devices.Provisioning.Service*.
+ This step downloads, installs, and adds a reference to the [Azure IoT DPS service client NuGet package](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Service/) and its dependencies. This package includes the binaries for the .NET service SDK.
-10. Select **Install**.
+1. Open *Program.cs* file in an editor.
- ![NuGet Package Manager window](media//quick-enroll-device-tpm/add-nuget.png)
+1. Replace the namespace statement at the top of the file with the following:
- This step downloads, installs, and adds a reference to the [Azure IoT Provisioning Service Client SDK](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Service/) NuGet package and its dependencies.
+ ```csharp
+ namespace CreateIndividualEnrollment;
+ ```
-11. Add the following `using` statements after the other `using` statements at the top of `Program.cs`:
+1. Add the following `using` statements at the top of the file **above** the `namespace` statement:
```csharp using System.Threading.Tasks; using Microsoft.Azure.Devices.Provisioning.Service; ```
-12. Add the following fields to the `Program` class, and make the listed changes.
+1. Add the following fields to the `Program` class, and make the listed changes.
```csharp private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
This section shows you how to create a .NET Core console app that adds an indivi
private const ProvisioningStatus OptionalProvisioningStatus = ProvisioningStatus.Enabled; ```
-13. Replace the `ProvisioningServiceConnectionString` placeholder value with the connection string of the provisioning service that you copied in the previous section.
+ * Replace the `ProvisioningServiceConnectionString` placeholder value with the connection string of the provisioning service that you copied in the previous section.
-14. If you're using this quickstart together with the [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md) quickstart to provision a simulated device, replace the endorsement key and registration ID with the values that you noted in that quickstart. You can replace the device ID with the value suggested in that quickstart, use your own value, or use the default value in this sample.
+ * If you're using this article together with the [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-csharp) quickstart to provision a simulated device, replace the endorsement key with the value that you noted in that quickstart. You can replace the device ID and registration ID with the values suggested in that quickstart, use your own values, or use the default values in this sample.
-15. Add the following method to the `Program` class. This code creates individual enrollment entry and then calls the `CreateOrUpdateIndividualEnrollmentAsync` method on the `ProvisioningServiceClient` to add the individual enrollment to the provisioning service.
+1. Add the following method to the `Program` class. This code creates an individual enrollment entry and then calls the `CreateOrUpdateIndividualEnrollmentAsync` method on the `ProvisioningServiceClient` to add the individual enrollment to the provisioning service.
```csharp public static async Task RunSample()
This section shows you how to create a .NET Core console app that adds an indivi
ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString)) { #region Create a new individualEnrollment config
- Console.WriteLine("\nCreating a new individualEnrollment...");
+ Console.WriteLine("\nCreating a new individualEnrollment object...");
Attestation attestation = new TpmAttestation(TpmEndorsementKey); IndividualEnrollment individualEnrollment = new IndividualEnrollment(
This section shows you how to create a .NET Core console app that adds an indivi
#endregion #region Create the individualEnrollment
- Console.WriteLine("\nAdding new individualEnrollment...");
+ Console.WriteLine("\nAdding the individualEnrollment to the provisioning service...");
IndividualEnrollment individualEnrollmentResult = await provisioningServiceClient.CreateOrUpdateIndividualEnrollmentAsync(individualEnrollment).ConfigureAwait(false); Console.WriteLine("\nIndividualEnrollment created with success.");
This section shows you how to create a .NET Core console app that adds an indivi
} ```
-16. Finally, replace the `Main` method with the following lines:
+1. Finally, replace the `Main` method with the following lines:
```csharp static async Task Main(string[] args)
This section shows you how to create a .NET Core console app that adds an indivi
} ```
-17. Build the solution.
+1. Save your changes.
:::zone-end
This section shows you how to create a .NET Core console app that adds an indivi
npm install azure-iot-provisioning-service ```
+ This step downloads, installs, and adds a reference to the [Azure IoT DPS service client package](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Service/) and its dependencies. This package includes the binaries for the Node.js service SDK.
+ 2. Using a text editor, create a _create_individual_enrollment.js_ file in your working folder. Add the following code to the file: ```Java
This section shows you how to create a .NET Core console app that adds an indivi
:::zone pivot="programming-language-java"
-1. In the downloaded source code, navigate to the sample folder *_azure-iot-sdk-java/provisioning/provisioning-samples/service-enrollment-sample_*. Open the file *_/src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentSample.java_*.
+1. Open a Windows command prompt.
-2. Replace `[Provisioning Connection String]` with the connection string that you copied in [Get the connection string for your provisioning service](#get-the-connection-string-for-your-provisioning-service).
+1. Clone the [Microsoft Azure IoT SDKs for Java GitHub repo](https://github.com/Azure/azure-iot-sdk-java):
+
+ ```cmd\sh
+ git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
+ ```
+
+1. Go to the sample folder:
+
+ ```cmd
+ cd azure-iot-sdk-java\provisioning\provisioning-samples\service-enrollment-sample
+ ```
+
+1. Open the file *\src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java* in an editor.
+
+1. Replace `[Provisioning Connection String]` with the connection string that you copied in [Get the connection string for your provisioning service](#get-the-connection-string-for-your-provisioning-service).
```Java private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]"; ```
- 2. Add the TPM device details:
- 1. Get the *Registration ID* and the *TPM endorsement key* for a TPM device simulation, by following the steps leading to the section [Simulate TPM device](quick-create-simulated-device-tpm.md#simulatetpm).
- 2. Use the **_Registration ID_** and the **_Endorsement Key_** from the output of the preceding step, to replace the `[RegistrationId]` and `[TPM Endorsement Key]` in the sample code file **_ServiceEnrollmentSample.java_**:
-
- ```Java
- private static final String REGISTRATION_ID = "[RegistrationId]";
- private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
- ```
-
-3. To configure your provisioning service from within the sample code, proceed to the next step. If you do not want to configure it, make sure to comment out or delete the following statements in the _ServiceEnrollmentSample.java_ file:
+1. Add the TPM device details. Replace the `[RegistrationId]` and `[TPM Endorsement Key]` in the following statements with your endorsement key and registration ID.
```Java
- / / The following parameters are optional. Remove it if you don't need.
- individualEnrollment.setDeviceId(DEVICE_ID);
- individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
- individualEnrollment.setProvisioningStatus(PROVISIONING_STATUS);
+ private static final String REGISTRATION_ID = "[RegistrationId]";
+ private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
```
-4. This step shows you how to configure your provisioning service in the sample code.
+ * If you're using this article together with the [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-java) quickstart to provision a simulated device, use the **Registration ID** and **Endorsement key** values that you noted from that quickstart.
- 1. Go to the [Azure portal](https://portal.azure.com).
+ * If you're using this article to just create a sample individual enrollment and don't intend to use it to enroll a device, you can use the following value for an endorsement key:
- 2. On the left-hand menu or on the portal page, select **All resources**.
+ ```java
+ private static final String TPM_ENDORSEMENT_KEY = "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnefZcBhgy1SSDQMQ==";
+ ```
- 3. Select your Device Provisioning Service.
+ Enter your own value for the registration ID, for example, "myJavaDevice".
- 4. In the **Overview** panel, copy the hostname of the *Service endpoint*. In the source code sample, replace `[Host name]` with the copied hostname.
+1. For individual enrollments, you can choose to set a device ID that DPS will assign to the device when it provisions it to IoT Hub. If you don't assign a device ID, DPS will use the registration ID as the device ID. By default, this sample assigns "myJavaDevice" as the device ID. If you want to change the device ID, modify the following statement:
+
+ ```java
+ private static final String DEVICE_ID = "myJavaDevice";
+ ```
+
+ If you don't want to assign a specific device ID, comment out the following statement:
+
+ ```java
+ individualEnrollment.setDeviceId(DEVICE_ID);
+ ```
+
+1. The sample allows you to set an IoT hub in the individual enrollment to provision the device to. This must be an IoT hub that has been previously linked to the provisioning service. For this article, we'll let DPS choose from the linked hubs according to the default allocation policy, evenly-weighted distribution. Comment out the following statement in the file:
```Java
- private static final String IOTHUB_HOST_NAME = "[Host name].azure-devices.net";
+ individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
```
-5. Study the sample code. It creates, updates, queries, and deletes an individual TPM device enrollment. To verify successful enrollment in portal, temporarily comment out the following lines of code at the end of the _ServiceEnrollmentSample.java_ file:
+1. The sample creates, updates, queries, and deletes an individual TPM device enrollment. To verify successful enrollment in portal, temporarily comment out the following lines of code at the end of the file:
```Java // *********************************** Delete info of individualEnrollment ************************************
This section shows you how to create a .NET Core console app that adds an indivi
provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID); ```
-6. Save the file _ServiceEnrollmentSample.java_.
+1. Save your changes.
:::zone-end
This section shows you how to create a .NET Core console app that adds an indivi
:::zone pivot="programming-language-csharp"
-1. Run the sample in Visual Studio to create the enrollment. A command window will appear, and will display confirmation messages.
+1. Run the sample:
+
+ ```csharp
+ dotnet run
+ ```
2. Upon successful creation, the command window displays the properties of the new enrollment.
This section shows you how to create a .NET Core console app that adds an indivi
:::zone pivot="programming-language-nodejs"
-To run the sample, you'll need the connection string for your provisioning service that you copied in the previous section, as well as the endorsement key for device. If you've followed the [Create and provision a simulated device](quick-create-simulated-device-tpm.md) quickstart to create a simulated TPM device, use the key created for that device. Otherwise, to create a sample individual enrollment, you can use the following endorsement key supplied with the [Node.js Service SDK](https://github.com/Azure/azure-iot-sdk-node):
+To run the sample, you'll need the connection string for your provisioning service that you copied in the previous section, as well as the endorsement key for the device. If you've followed the [Create and provision a simulated device](quick-create-simulated-device-tpm.md) quickstart to create a simulated TPM device, use the endorsement key created for that device. Otherwise, to create a sample individual enrollment, you can use the following endorsement key supplied with the [Node.js Service SDK](https://github.com/Azure/azure-iot-sdk-node):
```bash AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEA
:::zone pivot="programming-language-java"
-1. Open a command window in Administrator mode, and go to the folder *_azure-iot-sdk-java/provisioning/provisioning-samples/service-enrollment-group-sample_*.
-
-2. In the command prompt, use this command:
+1. From the *azure-iot-sdk-java\provisioning\provisioning-samples\service-enrollment-sample* folder in your command prompt, run the following command to build the sample:
```cmd\sh mvn install -DskipTests ```
- This command downloads the Maven package [`com.microsoft.azure.sdk.iot.provisioning.service`](https://mvnrepository.com/artifact/com.microsoft.azure.sdk.iot.provisioning/provisioning-service-client) to your machine. This package includes the binaries for the Java service SDK, that the sample code needs to build. If you ran the _X.509 certificate generator_ tool in the preceding section, this package will be already downloaded on your machine.
+ This command downloads the [Azure IoT DPS service client Maven package](https://mvnrepository.com/artifact/com.microsoft.azure.sdk.iot.provisioning/provisioning-service-client) to your machine and builds the sample. This package includes the binaries for the Java service SDK.
-3. In the command prompt, run the script:
+1. Switch to the *target* folder and run the sample. Be aware that the build in the previous step outputs .jar file in the *target* folder with the following file format: `service-enrollment-sample-{version}-with-deps.jar`; for example: `service-enrollment-sample-1.8.1-with-deps.jar`. You may need to replace the version in the command below.
```cmd\sh cd target
- java -jar ./service-enrollment-group-sample-{version}-with-deps.jar
+ java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
```
-4. Upon successful creation, the command window displays the properties of the new enrollment.
-
+1. Upon successful creation, the command window displays the properties of the new enrollment.
:::zone-end
To verify that the enrollment group has been created:
:::zone-end
+## Enroll a simulated device (Optional)
++
+If you've been following steps in the [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-csharp) quickstart to provision a simulated device, resume the quickstart at [Register the device](quick-create-simulated-device-tpm.md?pivots=programming-language-csharp#register-the-device).
+++
+If you've been following steps in the [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-nodejs) quickstart to provision a simulated device, resume the quickstart at [Register the device](quick-create-simulated-device-tpm.md?pivots=programming-language-nodejs#register-the-device).
+++
+If you've been following steps in the [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivots=programming-language-java) quickstart to provision a simulated device, resume the quickstart at [Register the device](quick-create-simulated-device-tpm.md?pivots=programming-language-java#register-the-device).
++ ## Clean up resources
-If you plan to explore the DPS tutorials, don't clean up the resources created in this quickstart. Otherwise, use the following steps to delete all resources created by this quickstart.
+If you plan to explore the DPS tutorials, don't clean up the resources created in this article. Otherwise, use the following steps to delete all resources created by this article.
1. Close the sample output window on your computer.
If you plan to explore the DPS tutorials, don't clean up the resources created i
3. Select your Device Provisioning Service.
-4. In the **Settings** menu, select **Manage enrollments**.
+4. In the left-hand menu under **Settings**, select **Manage enrollments**.
5. Select the **Individual Enrollments** tab.
-6. Select the check box next to the *REGISTRATION ID* of the device you enrolled in this quickstart.
+6. Select the check box next to the *REGISTRATION ID* of the enrollment entry you created in this article.
7. At the top of the page, select **Delete**.
-8. From your Device Provisioning Service in the Azure portal, select **Certificates**.
+
+8. If you followed the steps in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivot=programming-language-csharp) to create a simulated TPM device, do the following steps:
-9. Select the certificate you uploaded for this quickstart.
+ 1. In the Azure portal, navigate to the IoT Hub where your device was provisioned.
-10. At the top of **Certificate Details**, select **Delete**.
+ 1. In the left-hand menu under **Device management**, select **Devices**.
-11. If you followed the steps in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md) to create a simulated TPM device, do the following steps:
+ 1. Select the check box next to the *Device ID* of the device you registered in this article.
+
+ 1. At the top of the pane, select **Delete**.
++
+8. If you followed the steps in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivot=programming-language-nodejs) to create a simulated TPM device, do the following steps:
1. Close the TPM simulator window and the sample output window for the simulated device.
- 2. In the Azure portal, navigate to the IoT Hub where your device was provisioned.
+ 2. In the Azure portal, navigate to the IoT Hub where your device was provisioned.
- 3. In the menu under **Explorers**, select **IoT devices**.
+ 3. In the left-hand menu under **Device management**, select **Devices**.
- 4. Select the check box next to the *DEVICE ID* of the device you registered in this quickstart.
+ 4. Select the check box next to the *Device ID* of the device you registered in this article.
5. At the top of the pane, select **Delete**.++
+8. If you followed the steps in [Create and provision a simulated TPM device](quick-create-simulated-device-tpm.md?pivot=programming-language-java) to create a simulated TPM device, do the following steps:
+
+ 1. Close the TPM simulator window and the sample output window for the simulated device.
+
+ 2. In the Azure portal, navigate to the IoT Hub where your device was provisioned.
+
+ 3. In the left-hand menu under **Device management**, select **Devices**.
+
+ 4. Select the check box next to the *Device ID* of the device you registered in this article.
+
+ 5. At the top of the pane, select **Delete**.
## Next steps
-In this quickstart, youΓÇÖve programmatically created an individual enrollment entry for a TPM device. Optionally, you created a TPM simulated device on your computer and provisioned it to your IoT hub using the Azure IoT Hub Device Provisioning Service. To learn about provisioning multiple devices, continue to the tutorials for the Device Provisioning Service.
+In this article, youΓÇÖve programmatically created an individual enrollment entry for a TPM device. Optionally, you created a TPM simulated device on your computer and provisioned it to your IoT hub using the Azure IoT Hub Device Provisioning Service. To explore further, check out the following links:
+
+* For more information about TPM attestation with DPS, see [TPM attestation](concepts-x509-attestation.md).
+
+* For an end-to-end example of a provisioning a device through an individual enrollment using TPM attestation, see the [Provision a simulated TPM device](quick-create-simulated-device-tpm.md) quickstart.
-> [!div class="nextstepaction"]
-> [How to provision devices using symmetric key enrollment groups](how-to-legacy-device-symm-key.md)
+* To learn about managing individual enrollments and enrollment groups using Azure portal, see [How to manage device enrollments with Azure portal](how-to-manage-enrollments.md).
iot-dps Quick Enroll Device X509 https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-dps/quick-enroll-device-x509.md
Title: Quickstart - Group enrollment to the Azure Device Provisioning Service using X.509 certificate attestation
-description: This quickstart shows you how to programmatically enroll a group of devices that use intermediate or root CA X.509 certificate attestation.
+ Title: How to programmatically create an Azure Device Provisioning Service enrollment group for X.509 certificate attestation
+description: This article shows you how to programmatically create an enrollment group to enroll a group of devices that use intermediate or root CA X.509 certificate attestation.
Previously updated : 04/28/2022- Last updated : 07/22/2022+
+ms.devlang: csharp, java, nodejs
zone_pivot_groups: iot-dps-set2
-# Quickstart: Enroll a group of devices to the Device Provisioning Service using X.509 certificate attestation
+# Programmatically create a Device Provisioning Service enrollment group for X.509 certificate attestation
-
-This quickstart shows you how to programmatically create an [enrollment group](concepts-service.md#enrollment-group) that uses intermediate or root CA X.509 certificates. The enrollment group is created by using the [Microsoft Azure IoT SDK](../iot-hub/iot-hub-devguide-sdks.md) and a sample application. An enrollment group controls access to the provisioning service for devices that share a common signing certificate in their certificate chain. To learn more, see [Controlling device access to the provisioning service with X.509 certificates](./concepts-x509-attestation.md#controlling-device-access-to-the-provisioning-service-with-x509-certificates). For more information about using X.509 certificate-based Public Key Infrastructure (PKI) with Azure IoT Hub and Device Provisioning Service, see [X.509 CA certificate security overview](../iot-hub/iot-hub-x509ca-overview.md).
---
-This quickstart shows you how to programmatically create an individual enrollment and an [enrollment group](concepts-service.md#enrollment-group) that uses intermediate or root CA X.509 certificates. The enrollment group is created by using the [Microsoft Azure IoT SDK](../iot-hub/iot-hub-devguide-sdks.md) and a sample application. An enrollment group controls access to the provisioning service for devices that share a common signing certificate in their certificate chain. To learn more, see [Controlling device access to the provisioning service with X.509 certificates](./concepts-x509-attestation.md#controlling-device-access-to-the-provisioning-service-with-x509-certificates). For more information about using X.509 certificate-based Public Key Infrastructure (PKI) with Azure IoT Hub and Device Provisioning Service, see [X.509 CA certificate security overview](../iot-hub/iot-hub-x509ca-overview.md).
-
+This article shows you how to programmatically create an [enrollment group](concepts-service.md#enrollment-group) that uses intermediate or root CA X.509 certificates. The enrollment group is created by using the [Azure IoT Hub DPS service SDK](libraries-sdks.md#service-sdks) and a sample application. An enrollment group controls access to the provisioning service for devices that share a common signing certificate in their certificate chain. To learn more, see [Controlling device access to the provisioning service with X.509 certificates](./concepts-x509-attestation.md#controlling-device-access-to-the-provisioning-service-with-x509-certificates). For more information about using X.509 certificate-based Public Key Infrastructure (PKI) with Azure IoT Hub and Device Provisioning Service, see [X.509 CA certificate security overview](../iot-hub/iot-hub-x509ca-overview.md).
## Prerequisites
This quickstart shows you how to programmatically create an individual enrollmen
:::zone pivot="programming-language-csharp"
-* Install [Visual Studio 2019](https://www.visualstudio.com/vs/).
-
-* Install [.NET Core 3.1 SDK or later](https://dotnet.microsoft.com/download) or later on your Windows-based machine. You can use the following command to check your version.
+* Install [.NET 6.0 SDK or later](https://dotnet.microsoft.com/download) or later on your Windows-based machine. You can use the following command to check your version.
```bash dotnet --info
This quickstart shows you how to programmatically create an individual enrollmen
:::zone pivot="programming-language-java"
-* [Java SE Development Kit 8](/azure/developer/java/fundamentals/java-support-on-azure). This quickstart installs the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/) below. It works on both Windows and Linux. This quickstart uses Windows.
+* [Java SE Development Kit 8](/azure/developer/java/fundamentals/java-support-on-azure). This article installs the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/) below. It works on both Windows and Linux. This article uses Windows.
* [Maven 3](https://maven.apache.org/download.cgi).
This quickstart shows you how to programmatically create an individual enrollmen
>[!NOTE] >Although the steps in this article work on both Windows and Linux computers, this article uses a Windows development computer.
-## Prepare test certificates
-
-For this quickstart, you must have a *.pem* or a *.cer* file that contains the public portion of an intermediate or root CA X.509 certificate. This certificate must be uploaded to your provisioning service, and verified by the service.
--
-### Clone the Azure IoT C SDK
-
-The [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c) contains test tooling that can help you create an X.509 certificate chain, upload a root or intermediate certificate from that chain, and do proof-of-possession with the service to verify the certificate.
-
-If you've already cloned the latest release of the [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c) GitHub repository, skip to the [next section](#create-the-test-certificate).
-
-1. Open a web browser, and go to the [Release page of the Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c/releases/latest).
-
-2. Copy the tag name for the latest release of the Azure IoT C SDK.
-
-3. Open a command prompt or Git Bash shell. Run the following commands to clone the latest release of the [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c) GitHub repository. (replace `<release-tag>` with the tag you copied in the previous step).
-
- ```cmd/sh
- git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
- cd azure-iot-sdk-c
- git submodule update --init
- ```
-
- This operation may take several minutes to complete.
-
-4. The test tooling should now be located in the *azure-iot-sdk-c/tools/CACertificates* of the repository that you cloned.
---
-<a id="javasample"></a>
-
-### Clone the Azure IoT Java SDK
-
-The [Azure IoT Java SDK](https://github.com/Azure/azure-iot-sdk-java) contains test tooling that can help you create an X.509 certificate chain, upload a root or intermediate certificate from that chain, and do proof-of-possession with the service to verify the certificate.
-
-1. Open a command prompt.
-
-2. Clone the GitHub repo for device enrollment code sample using the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/):
-
- ```cmd\sh
- git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
- ```
--
-### Create the test certificate
-
-To create the test certificate:
-
+## Create test certificates
-To create the certificate, follow the steps in [Managing test CA certificates for samples and tutorials](https://github.com/Azure/azure-iot-sdk-c/blob/master/tools/CACertificates/CACertificateOverview.md).
+Enrollment groups that use X.509 certificate attestation can be configured to use a root CA certificate or an intermediate certificate. The more usual case is to configure the enrollment group with an intermediate certificate. This provides more flexibility as multiple intermediate certificates can be generated or revoked by the same root CA certificate.
->[!TIP]
->In addition to the tooling in the C SDK, the [Group certificate verification sample](https://github.com/Azure-Samples/azure-iot-samples-csharp/tree/master/provisioning/Samples/service/GroupCertificateVerificationSample) in the *Microsoft Azure IoT SDK for .NET* shows how to do proof-of-possession in C# with an existing X.509 intermediate or root CA certificate.
+For this article, you'll need either a root CA certificate file, an intermediate CA certificate file, or both in *.pem* or *.cer* format. One file contains the public portion of the root CA X.509 certificate and the other contains the public portion of the intermediate CA X.509 certificate.
-
+If you already have a root CA file and/or an intermediate CA file, you can continue to [Add and verify your root or intermediate CA certificate](#add-and-verify-your-root-or-intermediate-ca-certificate).
-1. In a command window, go to the folder *_azure-iot-sdk-java/provisioning/provisioning-tools/provisioning-x509-cert-generator_*.
+If you don't have a root CA file and/or an intermediate CA file, follow the steps in [Create an X.509 certificate chain](tutorial-custom-hsm-enrollment-group-x509.md?tabs=windows#create-an-x509-certificate-chain) to create them. You can stop after you complete the steps in [Create the intermediate CA certificate](tutorial-custom-hsm-enrollment-group-x509.md?tabs=windows#create-the-intermediate-ca-certificate) as you won't need device certificates to complete the steps in this article. When you're finished, you'll have two X.509 certificate files: *./certs/azure-iot-test-only.root.ca.cert.pem* and *./certs/azure-iot-test-only.intermediate.cert.pem*.
-2. To build the tool, run the following command:
+## Add and verify your root or intermediate CA certificate
- ```cmd\sh
- mvn clean install
- ```
+Devices that provision through an enrollment group using X.509 certificates, present the entire certificate chain when they authenticate with DPS. For DPS to be able to validate the certificate chain, the root or intermediate certificate configured in an enrollment group must either be a verified certificate or must roll up to a verified certificate in the certificate chain a device presents when it authenticates with the service.
-3. To run the tool, use the following commands:
+For this article, assuming you have both a root CA certificate and an intermediate CA certificate signed by the root CA:
- ```cmd\sh
- cd target
- java -jar ./provisioning-x509-cert-generator-{version}-with-deps.jar
- ```
+* If you plan on creating the enrollment group with the root CA certificate, you'll need to upload and verify the root CA certificate.
-4. When prompted, you may optionally enter a _Common Name_ for your certificates.
+* If you plan on creating the enrollment group with the intermediate CA certificate, you can upload and verify either the root CA certificate or the intermediate CA certificate. (If you have multiple intermediate CA certificates in the certificate chain, you could, alternatively, upload and verify any intermediate certificate that sits between the root CA certificate and the intermediate certificate that you create the enrollment group with.)
-5. The tool locally generates a *Client Cert*, the *Client Cert Private Key*, and the *Root Cert*. Copy the *Root Cert*, as you'll need it to modify the sample code.
+To add and verify your root or intermediate CA certificate to the Device Provisioning Service:
-6. Close the command window, or enter **n** when prompted for *Verification Code*.
--
-### Add and verify your test certificate
-
-To add and verify your certificate to the Device Provisioning Service.
-
-1. After you've created the certificates, sign in to the [Azure portal](https://portal.azure.com).
+1. Sign in to the [Azure portal](https://portal.azure.com).
2. On the left-hand menu or on the portal page, select **All resources**. 3. Select your Device Provisioning Service.
-4. In the **Settings** menu, select **Certificates*.
+4. In the **Settings** menu, select **Certificates**.
5. On the top menu, select **+ Add:**.
-6. Type in in a certificate name, and upload the *.pem* file you create in the preceding section.
+6. Enter a name for your root or intermediate CA certificate, and upload the *.pem* or *.cer* file.
7. Select **Set certificate status to verified on upload**.
-8. Select **Save**.
+ :::image type="content" source="./media/quick-enroll-device-x509/add-certificate.png" alt-text="Screenshot that shows adding the root CA certificate to a DPS instance.":::
+8. Select **Save**.
## Get the connection string for your provisioning service
-For the sample in this quickstart, you'll need to copy the connection string for your provisioning service.
+For the sample in this article, you'll need to copy the connection string for your provisioning service.
1. Sign in to the [Azure portal](https://portal.azure.com).
For the sample in this quickstart, you'll need to copy the connection string for
6. In the **Access Policy** panel, copy and save the primary key connection string.
- ![Get provisioning service connection string from the portal](media/quick-enroll-device-x509/get-service-connection-string.png)
+ :::image type="content" source="./media/quick-enroll-device-x509/get-service-connection-string.png" alt-text="Screenshot that shows the location of the provisioning service connection string in the portal.":::
## Create the enrollment group sample
For the sample in this quickstart, you'll need to copy the connection string for
This section shows you how to create a .NET Core console application that adds an enrollment group to your provisioning service.
->[!TIP]
->You can, with some modification, follow these steps to create a [Windows IoT Core](https://developer.microsoft.com/en-us/windows/iot) console application that adds an enrollment group. To learn more about developing with IoT Core, see the [Windows IoT Core developer documentation](/windows/iot-core/).
+1. Open a Windows command prompt and navigate to a folder where you want to create your app.
-1. Open Visual Studio, and select **Create a new project**.
+1. To create a console project, run the following command:
-2. In the **Create a new project** panel, select **Console Application*.
-
-3. Select **Next**.
-
-4. For **Project name**, type *CreateEnrollmentGroup*.
-
-5. Select**Next**. Keep the default **Target framework**.
-
-6. Select **Create**.
+ ```cmd
+ dotnet new console --framework net6.0 --use-program-main
+ ```
-7. After the solution opens, in the **Solution Explorer** pane, right-click the **CreateEnrollmentGroup** project, and then select **Manage NuGet Packages**.
+1. To add a reference to the DPS service SDK, run the following command:
-8. In **NuGet Package Manager**, select **Browse**.
+ ```cmd
+ dotnet add package Microsoft.Azure.Devices.Provisioning.Service
+ ```
-9. Type in and select *Microsoft.Azure.Devices.Provisioning.Service*.
+ This step downloads, installs, and adds a reference to the [Azure IoT DPS service client NuGet package](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Service/) and its dependencies. This package includes the binaries for the .NET service SDK.
-10. Select **Install**.
+1. Open *Program.cs* file in an editor.
- ![NuGet Package Manager window](media//quick-enroll-device-x509/add-nuget.png)
+1. Replace the namespace statement at the top of the file with the following:
- This step downloads, installs, and adds a reference to the [Azure IoT Provisioning Service Client SDK](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Service/) NuGet package and its dependencies.
+ ```csharp
+ namespace CreateEnrollmentGroup;
+ ```
-11. Add the following `using` statements after the other `using` statements at the top of `Program.cs`:
+1. Add the following `using` statements at the top of the file **above** the `namespace` statement:
```csharp using System.Security.Cryptography.X509Certificates;
This section shows you how to create a .NET Core console application that adds a
using Microsoft.Azure.Devices.Provisioning.Service; ```
-12. Add the following fields to the `Program` class, and make the listed changes.
+1. Add the following fields to the `Program` class, and make the indicated changes.
```csharp private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
This section shows you how to create a .NET Core console application that adds a
private static string X509RootCertPath = @"{Path to a .cer or .pem file for a verified root CA or intermediate CA X.509 certificate}"; ```
-13. Replace the `ProvisioningServiceConnectionString` placeholder value with the connection string of the provisioning service that you copied in the previous section.
+ * Replace the `ProvisioningServiceConnectionString` placeholder value with the connection string of the provisioning service that you copied in the previous section.
-14. Replace the `X509RootCertPath` placeholder value with the path to a .pem or .cer file. This file represents the public part of an intermediate or root CA X.509 certificate that has been previously uploaded and verified with your provisioning service.
+ * Replace the `X509RootCertPath` placeholder value with the path to a .pem or .cer file. This file represents the public part of a either a root CA X.509 certificate that has been previously uploaded and verified with your provisioning service, or an intermediate certificate that has itself been uploaded and verified or had a certificate in its signing chain uploaded and verified.
-15. You may optionally change the `EnrollmentGroupId` value. The string can contain only lower case characters and hyphens.
+ * You may optionally change the `EnrollmentGroupId` value. The string can contain only lower case characters and hyphens.
> [!IMPORTANT] > In production code, be aware of the following security considerations:
This section shows you how to create a .NET Core console application that adds a
> * Hard-coding the connection string for the provisioning service administrator is against security best practices. Instead, the connection string should be held in a secure manner, such as in a secure configuration file or in the registry. > * Be sure to upload only the public part of the signing certificate. Never upload .pfx (PKCS12) or .pem files containing private keys to the provisioning service.
-16. Add the following method to the `Program` class. This code creates an enrollment group entry and then calls the `CreateOrUpdateEnrollmentGroupAsync` method on `ProvisioningServiceClient` to add the enrollment group to the provisioning service.
+1. Add the following method to the `Program` class. This code creates an [`EnrollmentGroup`](/dotnet/api/microsoft.azure.devices.provisioning.service.enrollmentgroup) entry and then calls the [`ProvisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync`](/dotnet/api/microsoft.azure.devices.provisioning.service.provisioningserviceclient.createorupdateenrollmentgroupasync) method to add the enrollment group to the provisioning service.
```csharp public static async Task RunSample()
This section shows you how to create a .NET Core console application that adds a
} ```
-17. Finally, replace the `Main` method with the following lines:
+1. Finally, replace the `Main` method with the following lines:
```csharp static async Task Main(string[] args)
This section shows you how to create a .NET Core console application that adds a
} ```
-18. Build the solution.
+1. Save your changes.
:::zone-end
This section shows you how to create a Node.js script that adds an enrollment gr
npm install azure-iot-provisioning-service ```
+ This step downloads, installs, and adds a reference to the [Azure IoT DPS service client package](https://www.nuget.org/packages/Microsoft.Azure.Devices.Provisioning.Service/) and its dependencies. This package includes the binaries for the Node.js service SDK.
+ 2. Using a text editor, create a **create_enrollment_group.js** file in your working folder. Add the following code to the file and save: ```javascript
This section shows you how to create a Node.js script that adds an enrollment gr
<a id="runjavasample"></a>
-1. In the Azure IoT Java SDK, go to the sample folder *_azure-iot-sdk-java/provisioning/provisioning-samples/service-enrollment-group-sample_*.
+1. Open a Windows command prompt.
-2. Open the file *_/src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java_* in an editor of your choice.
+1. Clone the GitHub repo for device enrollment code sample using the [Java Service SDK](https://azure.github.io/azure-iot-sdk-java/master/service/):
-3. Replace `[Provisioning Connection String]` with the connection string that you copied in [Get the connection string for your provisioning service](#get-the-connection-string-for-your-provisioning-service).
+ ```cmd\sh
+ git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
+ ```
-4. Replace the `PUBLIC_KEY_CERTIFICATE_STRING` value with the value of the *Root Cert** you generated in the previous section. Make sure to replace the entire sample value, including the lines **_--BEGIN CERTIFICATE--_** and **_--END CERTIFICATE--_**.
+1. From the location where you downloaded the repo, go to the sample folder:
-5. To configure your provisioning service from within the sample code, proceed to the next step. If you do not want to configure it, make sure to comment out or delete the following statements in the _ServiceEnrollmentGroupSample.java_ file:
+ ```cmd\sh
+ cd azure-iot-sdk-java\provisioning\provisioning-samples\service-enrollment-group-sample
+ ```
- ```Java
- enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME); // Optional parameter.
- enrollmentGroup.setProvisioningStatus(ProvisioningStatus.ENABLED); // Optional parameter.
+1. Open the file *_/src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java_* in an editor of your choice.
+
+1. Replace `[Provisioning Connection String]` with the connection string that you copied in [Get the connection string for your provisioning service](#get-the-connection-string-for-your-provisioning-service).
+
+1. Replace the `PUBLIC_KEY_CERTIFICATE_STRING` constant string with the value of your root or intermediate CA certificate `.pem` file. This file represents the public part of a either a root CA X.509 certificate that has been previously uploaded and verified with your provisioning service, or an intermediate certificate that has itself been uploaded and verified or had a certificate in its signing chain uploaded and verified.
+
+ The syntax of certificate text must follow the pattern below with no extra spaces or characters.
+
+ ```java
+ private static final String PUBLIC_KEY_CERTIFICATE_STRING =
+ "--BEGIN CERTIFICATE--\n" +
+ "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" +
+ ...
+ "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" +
+ "--END CERTIFICATE--";
```
-6. This step shows you how to configure your provisioning service in the sample code.
+ Updating this string value manually can be prone to error. To generate the proper syntax, you can copy and paste the following command into a **Git Bash** prompt, replace `your-cert.pem` with the location of your certificate file, and press **ENTER**. This command will generate the syntax for the `PUBLIC_KEY_CERTIFICATE_STRING` string constant value and write it to the output.
- 1. Go to the [Azure portal](https://portal.azure.com).
+ ```bash
+ sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' your-cert.pem
+ ```
- 2. On the left-hand menu or on the portal page, select **All resources**.
+ Copy and paste the output certificate text for the constant value.
- 3. Select your Device Provisioning Service.
+ > [!IMPORTANT]
+ > In production code, be aware of the following security considerations:
+ >
+ > * Hard-coding the connection string for the provisioning service administrator is against security best practices. Instead, the connection string should be held in a secure manner, such as in a secure configuration file or in the registry.
+ > * Be sure to upload only the public part of the signing certificate. Never upload .pfx (PKCS12) or .pem files containing private keys to the provisioning service.
- 4. In the **Overview** panel, copy the hostname of the *Service endpoint*. In the source code sample, replace `[Host name]` with the copied hostname.
+1. The sample allows you to set an IoT hub in the enrollment group to provision the device to. This must be an IoT hub that has been previously linked to the provisioning service. For this article, we'll let DPS choose from the linked hubs according to the default allocation policy, evenly-weighted distribution. Comment out the following statement in the file:
- ```Java
- private static final String IOTHUB_HOST_NAME = "[Host name].azure-devices.net";
- ```
+ ```Java
+ enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME); // Optional parameter.
+ ```
-7. Study the sample code. It creates, updates, queries, and deletes a group enrollment for X.509 devices. To verify successful enrollment in portal, temporarily comment out the following lines of code at the end of the _ServiceEnrollmentGroupSample.java_ file:
+1. The sample code creates, updates, queries, and deletes an enrollment group for X.509 devices. To verify successful creation of the enrollment group in Azure portal, comment out the following lines of code near the end of the file:
```Java // ************************************** Delete info of enrollmentGroup ***************************************
This section shows you how to create a Node.js script that adds an enrollment gr
provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId); ```
-8. Save the file _ServiceEnrollmentGroupSample.java_.
+1. Save the _ServiceEnrollmentGroupSample.java_ file.
:::zone-end
This section shows you how to create a Node.js script that adds an enrollment gr
:::zone pivot="programming-language-csharp"
-1. Run the sample in Visual Studio to create the enrollment group. A command window will appear, and will display confirmation messages.
+1. Run the sample:
+
+ ```csharp
+ dotnet run
+ ```
2. Upon successful creation, the command window displays the properties of the new enrollment group.
This section shows you how to create a Node.js script that adds an enrollment gr
:::zone pivot="programming-language-nodejs"
-1. Open a command prompt, and the following command (include the quotes around the command arguments and replace `<connection string>` withe connection string you copied in the previous section, and `<certificate .pem file>` with the path of your `.pem` file):
+1. Run the following command in your command prompt. Include the quotes around the command arguments and replace `<connection string>` withe connection string you copied in the previous section, and `<certificate .pem file>` with the path to your certificate `.pem` file. This file represents the public part of a either a root CA X.509 certificate that has been previously uploaded and verified with your provisioning service, or an intermediate certificate that has itself been uploaded and verified or had a certificate in its signing chain uploaded and verified.
```cmd\sh node create_enrollment_group.js "<connection string>" "<certificate .pem file>"
This section shows you how to create a Node.js script that adds an enrollment gr
:::zone pivot="programming-language-java"
-1. Open a command window in Administrator mode, and go to the folder *_azure-iot-sdk-java/provisioning/provisioning-samples/service-enrollment-group-sample_*.
-
-2. In the command prompt, use this command:
+1. From the *azure-iot-sdk-java\provisioning\provisioning-samples\service-enrollment-group-sample* folder in your command prompt, run the following command to build the sample:
```cmd\sh mvn install -DskipTests ```
- This command downloads the Maven package [`com.microsoft.azure.sdk.iot.provisioning.service`](https://mvnrepository.com/artifact/com.microsoft.azure.sdk.iot.provisioning/provisioning-service-client) to your machine. This package includes the binaries for the Java service SDK, that the sample code needs to build. If you ran the _X.509 certificate generator_ tool in the preceding section, this package will be already downloaded on your machine.
+ This command downloads the [Azure IoT DPS service client Maven package](https://mvnrepository.com/artifact/com.microsoft.azure.sdk.iot.provisioning/provisioning-service-client) to your machine and builds the sample. This package includes the binaries for the Java service SDK.
-3. In the command prompt, run the script:
+1. Switch to the *target* folder and run the sample. Be aware that the build in the previous step outputs .jar file in the *target* folder with the following file format: `provisioning-x509-sample-{version}-with-deps.jar`; for example: `provisioning-x509-sample-1.8.1-with-deps.jar`. You may need to replace the version in the command below.
```cmd\sh cd target
- java -jar ./service-enrollment-group-sample-{version}-with-deps.jar
+ java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
```
-4. Upon successful creation, the command window displays the properties of the new enrollment group.
+1. Upon successful creation, the command window displays the properties of the new enrollment group.
:::zone-end
To verify that the enrollment group has been created:
2. In the **Settings** menu, select **Manage enrollments**.
-3. Select **Enrollment Groups**. You should see a new enrollment entry that corresponds to the registration ID that you used in the sample.
+3. Select **Enrollment Groups**. You should see a new enrollment entry that corresponds to the enrollment group ID that you used in the sample.
:::zone pivot="programming-language-csharp" :::zone-end :::zone pivot="programming-language-nodejs"
-![Enrollment properties in the portal](media/quick-enroll-device-x509/verify-enrollment-nodejs.png)
:::zone-end :::zone pivot="programming-language-java" :::zone-end
+## Clean up resources
-## Modifications to enroll a single X.509 device
+If you plan to explore the Azure IoT Hub Device Provisioning Service tutorials, don't clean up the resources created in this article. Otherwise, use the following steps to delete all resources created by this article.
-To enroll a single X.509 device, modify the *individual enrollment* sample code used in [Enroll TPM device to IoT Hub Device Provisioning Service using Java service SDK](quick-enroll-device-tpm.md) as follows:
+1. Close the sample output window on your computer.
-1. Copy the *Common Name* of your X.509 client certificate to the clipboard. If you wish to use the _X.509 certificate generator_ tool as shown in the [preceding sample code section](#javasample), either enter a _Common Name_ for your certificate, or use the default **microsoftriotcore**. Use this **Common Name** as the value for the *REGISTRATION_ID* variable.
+2. From the left-hand menu in the Azure portal, select **All resources**.
- ```Java
- // Use common name of your X.509 client certificate
- private static final String REGISTRATION_ID = "[RegistrationId]";
- ```
+3. Select your Device Provisioning Service.
-2. Rename the variable *TPM_ENDORSEMENT_KEY* as *PUBLIC_KEY_CERTIFICATE_STRING*. Copy your client certificate or the **Client Cert** from the output of the _X.509 certificate generator_ tool, as the value for the *PUBLIC_KEY_CERTIFICATE_STRING* variable.
+4. In the left-hand menu under **Settings**, select **Manage enrollments**.
- ```Java
- // Rename the variable *TPM_ENDORSEMENT_KEY* as *PUBLIC_KEY_CERTIFICATE_STRING*
- private static final String PUBLIC_KEY_CERTIFICATE_STRING =
- "--BEGIN CERTIFICATE--\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n" +
- "--END CERTIFICATE--\n";
- ```
+5. Select the **Enrollment Groups** tab.
-3. In the **main** function, replace the line `Attestation attestation = new TpmAttestation(TPM_ENDORSEMENT_KEY);` with the following to use the X.509 client certificate:
+6. Select the check box next to the *GROUP NAME* of the enrollment group you created in this article.
- ```Java
- Attestation attestation = X509Attestation.createFromClientCertificates(PUBLIC_KEY_CERTIFICATE_STRING);
- ```
+7. At the top of the page, select **Delete**.
-4. Save, build, and run the *individual enrollment* sample file, using the steps in the section [Create the individual enrollment sample](quick-enroll-device-tpm.md).
+8. From your Device Provisioning Service in the Azure portal, select **Certificates** under **Settings** on the left-hand menu.
+9. Select the certificate you uploaded for this article.
-## Clean up resources
+10. At the top of **Certificate Details**, select **Delete**.
-If you plan to explore the Azure IoT Hub Device Provisioning Service tutorials, don't clean up the resources created in this quickstart. Otherwise, use the following steps to delete all resources created by this quickstart.
+## Certificate tooling
-1. Close the sample output window on your computer.
-2. From the left-hand menu in the Azure portal, select **All resources**.
+The [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c) has scripts that can help you create root CA, intermediate CA, and device certificates, and do proof-of-possession with the service to verify root and intermediate CA certificates. To learn more, see [Managing test CA certificates for samples and tutorials](https://github.com/Azure/azure-iot-sdk-c/blob/master/tools/CACertificates/CACertificateOverview.md).
-3. Select your Device Provisioning Service.
+The [Group certificate verification sample](https://github.com/Azure-Samples/azure-iot-samples-csharp/tree/master/provisioning/Samples/service/GroupCertificateVerificationSample) in the [Azure IoT Samples for C# (.NET)](https://github.com/Azure-Samples/azure-iot-samples-csharp) shows how to do proof-of-possession in C# with an existing X.509 intermediate or root CA certificate.
-4. In the **Settings** menu, select **Manage enrollments**.
-5. Select the **Enrollment Groups** tab.
-6. Select the check box next to the *REGISTRATION ID* of the device you enrolled in this quickstart.
+The [Azure IoT Node.js SDK](https://github.com/Azure/azure-iot-sdk-node) has scripts that can help you create root CA, intermediate CA, and device certificates, and do proof-of-possession with the service to verify root and intermediate CA certificates. To learn more, see [Tools for the Azure IoT Device Provisioning Device SDK for Node.js](https://github.com/Azure/azure-iot-sdk-node/tree/main/provisioning/tools).
-7. At the top of the page, select **Delete**.
+You can also use tools available in the [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c). To learn more, see [Managing test CA certificates for samples and tutorials](https://github.com/Azure/azure-iot-sdk-c/blob/master/tools/CACertificates/CACertificateOverview.md).
-8. From your Device Provisioning Service in the Azure portal, select **Certificates**.
-9. Select the certificate you uploaded for this quickstart.
-10. At the top of **Certificate Details**, select **Delete**.
+The [Azure IoT Java SDK](https://github.com/Azure/azure-iot-sdk-java) contains test tooling that can help you create an X.509 certificate chain, upload a root or intermediate certificate from that chain, and do proof-of-possession with the service to verify root and intermediate CA certificates. To learn more, see [X509 certificate generator using DICE emulator](https://github.com/Azure/azure-iot-sdk-java/tree/main/provisioning/provisioning-tools/provisioning-x509-cert-generator).
-## Next steps
-In this quickstart, you created an enrollment group for an X.509 intermediate or root CA certificate using the Azure IoT Hub Device Provisioning Service. To learn about device provisioning in depth, continue to the tutorials for the Device Provisioning Service.
+## Next steps
-> [!div class="nextstepaction"]
-> [Use custom allocation policies with Device Provisioning Service](tutorial-custom-allocation-policies.md)
+In this article, you created an enrollment group for an X.509 intermediate or root CA certificate using the Azure IoT Hub Device Provisioning Service. To explore further, check out the following links:
+* For more information about X.509 certificate attestation with DPS, see [X.509 certificate attestation](concepts-x509-attestation.md).
-> [!div class="nextstepaction"]
->[Node.js device provisioning sample](https://github.com/Azure/azure-iot-sdk-node/tree/main/provisioning/device/samples).
+* For an end-to-end example of provisioning devices through an enrollment group using X.509 certificates, see the [Provision multiple X.509 devices using enrollment groups](tutorial-custom-hsm-enrollment-group-x509.md) tutorial.
+* To learn about managing individual enrollments and enrollment groups using Azure portal, see [How to manage device enrollments with Azure portal](how-to-manage-enrollments.md).
iot-edge How To Access Dtpm https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-edge/how-to-access-dtpm.md
[!INCLUDE [iot-edge-version-all-supported](../../includes/iot-edge-version-all-supported.md)]
-Trusted platform module (TPM) technology is a technology designed to provide hardware-based, security-related functions. A TPM chip is a secure crypto-processor that is designed to carry out cryptographic operations. The Azure IoT Edge for Linux on Windows (EFLOW) virtual machine doesn't support vTPM. However, the user can enable or disable the TPM passthrough feature, that allows the EFLOW virtual machine to use the Windows host OS TPM. The TPM passthrough feature enables two main scenarios:
+A Trusted platform module (TPM) chip is a secure crypto-processor that is designed to carry out cryptographic operations. This technology is designed to provide hardware-based, security-related functions. The Azure IoT Edge for Linux on Windows (EFLOW) virtual machine doesn't have a virtual TPMs attached to the VM. However, the user can enable or disable the TPM passthrough feature, that allows the EFLOW virtual machine to use the Windows host OS TPM. The TPM passthrough feature enables two main scenarios:
- Use TPM technology for IoT Edge device provisioning using Device Provision Service (DPS) - Read-only access to cryptographic keys stored inside the TPM.
-This article describes how to develop a sample code in C# to read cryptographic keys stored inside the TPM.
+This article describes how to develop a sample code in C# to read cryptographic keys stored inside the device TPM.
> [!IMPORTANT] > The access to the TPM keys is limited to read-only. If you want to write keys to the TPM, you need to do it from the Windows host OS. ## Prerequisites -- A Windows host OS with a TPM or vTPM
+- A Windows host OS with a TPM or vTPM (ig using Windows host OS virtual machine).
- EFLOW virtual machine with TPM passthrough enabled. Using an elevated PowerShell session, use `Set-EflowVmFeature -feature "DpsTpm" -enable` to enable TPM passthrough. For more information, see [Set-EflowVmFeature to enable TPM passthrough](./reference-iot-edge-for-linux-on-windows-functions.md#set-eflowvmfeature). - Ensure that the NV index (default index=3001) is initialized with 8 bytes of data. The default AuthValue used by the sample is {1,2,3,4,5,6,7,8} which corresponds to the NV (Windows) Sample in the TSS.MSR libraries when writing to the TPM. All index initialization must take place on the Windows Host before reading from the EFLOW VM. For more information about TPM samples, see [TSS.MSR](https://github.com/microsoft/TSS.MSR).
+ > [!WARNING]
+ > Enabling TPM passthrough to the virtual machine may increase security risks.
+
## Create the dTPM executable The following steps show you how to create a sample executable to access a TPM index from the EFLOW VM. For more information about EFLOW TPM passthrough, see [Azure IoT Edge for Linux on Windows Security](./iot-edge-for-linux-on-windows-security.md).
-> [!WARNING]
-> Enabling TPM passthrough to the virtual machine may increase security risks.
- 1. Open Visual Studio 2019 or 2022. 1. Select **Create a new project**.
iot-hub Iot Hub C C Module Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-c-c-module-twin-getstarted.md
> [!NOTE] > [Module identities and module twins](iot-hub-devguide-module-twins.md) are similar to Azure IoT Hub device identity and device twin, but provide finer granularity. While Azure IoT Hub device identity and device twin enable the back-end application to configure a device and provides visibility on the device's conditions, a module identity and module twin provide these capabilities for individual components of a device. On capable devices with multiple components, such as operating system based devices or firmware devices, it allows for isolated configuration and conditions for each component.
-At the end of this tutorial, you have two C apps:
+At the end of this article, you have two C apps:
* **CreateIdentities**, which creates a device identity, a module identity and associated security key to connect your device and module clients.
At the end of this tutorial, you have two C apps:
* An active Azure account. (If you don't have an account, you can create an [Azure free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
-* The latest [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c).
-
-## Create an IoT hub
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+* The latest [Azure IoT C SDK](https://github.com/Azure/azure-iot-sdk-c).
## Get the IoT hub connection string
iot-hub Iot Hub Csharp Csharp C2d https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-csharp-csharp-c2d.md
Azure IoT Hub is a fully managed service that helps enable reliable and secure b
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp). It shows you how to do the following tasks:
+This article builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp). It shows you how to do the following tasks:
* From your solution back end, send cloud-to-device messages to a single device through IoT Hub.
This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-deve
You can find more information on cloud-to-device messages in [D2C and C2D Messaging with IoT Hub](iot-hub-devguide-messaging.md).
-At the end of this tutorial, you run two .NET console apps.
+At the end of this article, you run two .NET console apps.
* **SimulatedDevice**. This app connects to your IoT hub and receives cloud-to-device messages. This app is a modified version of the app created in [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp). * **SendCloudToDevice**. This app sends a cloud-to-device message to the device app through IoT Hub, and then receives its delivery acknowledgment. > [!NOTE]
-> IoT Hub has SDK support for many device platforms and languages, including C, Java, Python, and JavaScript, through [Azure IoT device SDKs](iot-hub-devguide-sdks.md). For step-by-step instructions on how to connect your device to this tutorial's code, and generally to Azure IoT Hub, see the [IoT Hub developer guide](iot-hub-devguide.md).
+> IoT Hub has SDK support for many device platforms and languages, including C, Java, Python, and JavaScript, through [Azure IoT device SDKs](iot-hub-devguide-sdks.md). For step-by-step instructions on how to connect your device to this article's code, and generally to Azure IoT Hub, see the [IoT Hub developer guide](iot-hub-devguide.md).
> ## Prerequisites
In this section, you modify the **SendCloudToDevice** app to request feedback, a
![Device app receiving message and service app receiving feedback](./media/iot-hub-csharp-csharp-c2d/sendc2d2.png) > [!NOTE]
-> For simplicity, this tutorial does not implement any retry policy. In production code, you should implement retry policies, such as exponential backoff, as suggested in [Transient fault handling](/azure/architecture/best-practices/transient-faults).
+> For simplicity, this article does not implement any retry policy. In production code, you should implement retry policies, such as exponential backoff, as suggested in [Transient fault handling](/azure/architecture/best-practices/transient-faults).
> ## Next steps
iot-hub Iot Hub Csharp Csharp Device Management Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-csharp-csharp-device-management-get-started.md
[!INCLUDE [iot-hub-selector-dm-getstarted](../../includes/iot-hub-selector-dm-getstarted.md)]
-This tutorial shows you how to:
-
-* Use the Azure portal to create an IoT hub and create a device identity in your IoT hub.
+This article shows you how to:
* Create a simulated device app that contains a direct method that reboots that device. Direct methods are invoked from the cloud. * Create a .NET console app that calls the reboot direct method in the simulated device app through your IoT hub.
-At the end of this tutorial, you have two .NET console apps:
+At the end of this article, you have two .NET console apps:
* **SimulateManagedDevice**. This app connects to your IoT hub with the device identity created earlier, receives a reboot direct method, simulates a physical reboot, and reports the time for the last reboot.
At the end of this tutorial, you have two .NET console apps:
* Visual Studio.
-* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
-
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-## Create an IoT hub
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-
-## Register a new device in the IoT hub
+* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
## Get the IoT hub connection string
In this section, you create a .NET console app, using C#, that initiates a remot
1. Select **Build** > **Build Solution**. > [!NOTE]
-> This tutorial performs only a single query for the device's reported properties. In production code, we recommend polling to detect changes in the reported properties.
+> This article performs only a single query for the device's reported properties. In production code, we recommend polling to detect changes in the reported properties.
## Create a simulated device app
To create the simulated device app, follow these steps:
using Microsoft.Azure.Devices.Shared; ```
-1. Add the following fields to the **Program** class. Replace the `{device connection string}` placeholder value with the device connection string that you noted previously in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+1. Add the following fields to the **Program** class. Replace the `{device connection string}` placeholder value with the device connection string you saw when you registered a device in the IoT Hub:
```csharp static string DeviceConnectionString = "{device connection string}";
To create the simulated device app, follow these steps:
1. Select **Build** > **Build Solution**. > [!NOTE]
-> To keep things simple, this tutorial does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in [Transient fault handling](/azure/architecture/best-practices/transient-faults).
+> To keep things simple, this article does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in [Transient fault handling](/azure/architecture/best-practices/transient-faults).
## Run the apps
iot-hub Iot Hub Csharp Csharp File Upload https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-csharp-csharp-file-upload.md
[!INCLUDE [iot-hub-file-upload-language-selector](../../includes/iot-hub-file-upload-language-selector.md)]
-This tutorial shows you how to use the file upload feature of IoT Hub with the Azure IoT .NET device and service SDKs.
+This article shows you how to use the file upload feature of IoT Hub with the Azure IoT .NET device and service SDKs.
-The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-csharp-csharp-c2d.md) tutorial show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure Message Routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Microsoft Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
+The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-csharp-csharp-c2d.md) article show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure Message Routing with IoT Hub](tutorial-routing.md) article shows a way to reliably store device-to-cloud messages in Microsoft Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
* Videos * Large files that contain images * Vibration data sampled at high frequency * Some form of preprocessed data
-These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upload files from a device, you can still use the security and reliability of IoT Hub. This tutorial shows you how.
+These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upload files from a device, you can still use the security and reliability of IoT Hub. This article shows you how.
-At the end of this tutorial you run two .NET console apps:
+At the end of this article you run two .NET console apps:
* **FileUploadSample**. This device app uploads a file to storage using a SAS URI provided by your IoT hub. You'll run this app from the Azure IoT C# samples repository that you download in the prerequisites.
At the end of this tutorial you run two .NET console apps:
* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
+ * The sample applications you run in this article are written using C#. For the Azure IoT C# samples, we recommend you have the .NET Core SDK 3.1 or greater on your development machine. You can download the .NET Core SDK for multiple platforms from [.NET](https://dotnet.microsoft.com/download).
At the end of this tutorial you run two .NET console apps:
* Make sure that port 8883 is open in your firewall. The sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
--
-## Register a new device in the IoT hub
-- [!INCLUDE [iot-hub-associate-storage](../../includes/iot-hub-include-associate-storage.md)] ## Upload file from a device app
Now you're ready to run the applications.
-1. Next, run the device app to upload the file to Azure storage. Open a new command prompt and change folders to the **azure-iot-samples-csharp-main\iot-hub\Samples\device\FileUploadSample** under the folder where you expanded the Azure IoT C# samples. Run the following commands. Replace the `{Your device connection string}` placeholder value in the second command with the device connection string you copied previously in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+1. Next, run the device app to upload the file to Azure storage. Open a new command prompt and change folders to the **azure-iot-samples-csharp-main\iot-hub\Samples\device\FileUploadSample** under the folder where you expanded the Azure IoT C# samples. Run the following commands. Replace the `{Your device connection string}` placeholder value in the second command with the device connection string you saw when you registered a device in the IoT Hub.
```cmd/sh dotnet restore
You can use the portal to view the uploaded file in the storage container you co
## Next steps
-In this tutorial, you learned how to use the file upload feature of IoT Hub to simplify file uploads from devices. You can continue to explore this feature with the following articles:
+In this article, you learned how to use the file upload feature of IoT Hub to simplify file uploads from devices. You can continue to explore this feature with the following articles:
* [Overview of file uploads with IoT Hub](iot-hub-devguide-file-upload.md)
iot-hub Iot Hub Csharp Csharp Module Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-csharp-csharp-module-twin-getstarted.md
> [!NOTE] > [Module identities and module twins](iot-hub-devguide-module-twins.md) are similar to Azure IoT Hub device identity and device twin, but provide finer granularity. While Azure IoT Hub device identity and device twin enable the back-end application to configure a device and provide visibility on the device's conditions, a module identity and module twin provide these capabilities for individual components of a device. On capable devices with multiple components, such as operating system based devices or firmware devices, module identities and module twins allow for isolated configuration and conditions for each component.
-At the end of this tutorial, you have two .NET console apps:
+At the end of this article, you have two .NET console apps:
* **CreateIdentities**. This app creates a device identity, a module identity, and associated security key to connect your device and module clients.
At the end of this tutorial, you have two .NET console apps:
* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
-## Create a hub
-
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
## Get the IoT hub connection string
iot-hub Iot Hub Csharp Csharp Schedule Jobs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-csharp-csharp-schedule-jobs.md
To learn more about each of these capabilities, see:
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial shows you how to:
+This article shows you how to:
* Create a device app that implements a direct method called **LockDoor**, which can be called by the back-end app. * Create a back-end app that creates a job to call the **LockDoor** direct method on multiple devices. Another job sends desired property updates to multiple devices.
-At the end of this tutorial, you have two .NET (C#) console apps:
+At the end of this article, you have two .NET (C#) console apps:
* **SimulateDeviceMethods**. This app connects to your IoT hub and implements the **LockDoor** direct method.
At the end of this tutorial, you have two .NET (C#) console apps:
* Visual Studio.
-* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
-
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-## Create an IoT hub
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-
-## Register a new device in the IoT hub
+* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
## Create a simulated device app
In this section, you create a .NET console app that responds to a direct method
1. Save your work and build your solution. > [!NOTE]
-> To keep things simple, this tutorial does not implement any retry policies. In production code, you should implement retry policies (such as connection retry), as suggested in [Transient fault handling](/azure/architecture/best-practices/transient-faults).
+> To keep things simple, this article does not implement any retry policies. In production code, you should implement retry policies (such as connection retry), as suggested in [Transient fault handling](/azure/architecture/best-practices/transient-faults).
> ## Get the IoT hub connection string
You are now ready to run the apps.
## Next steps
-In this tutorial, you used a job to schedule a direct method to a device and the update of the device twin's properties.
+In this article, you used a job to schedule a direct method to a device and the update of the device twin's properties.
* To continue getting started with IoT Hub and device management patterns such as end-to-end image-based update in [Device Update for Azure IoT Hub tutorial using the Raspberry Pi 3 B+ Reference Image](../iot-hub-device-update/device-update-raspberry-pi.md).
iot-hub Iot Hub Csharp Csharp Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-csharp-csharp-twin-getstarted.md
[!INCLUDE [iot-hub-selector-twin-get-started](../../includes/iot-hub-selector-twin-get-started.md)]
-In this tutorial, you create these .NET console apps:
+In this article, you create these .NET console apps:
* **AddTagsAndQuery**. This back-end app adds tags and queries device twins.
In this tutorial, you create these .NET console apps:
* Visual Studio.
-* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
-
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-## Create an IoT hub
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-
-## Register a new device in the IoT hub
+* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
## Get the IoT hub connection string
In this section, you create a .NET console app that connects to your hub as **my
using Newtonsoft.Json; ```
-1. Add the following fields to the **Program** class. Replace `{device connection string}` with the device connection string that you noted in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+1. Add the following fields to the **Program** class. Replace `{device connection string}` with the device connection string you saw when you registered a device in the IoT Hub:
```csharp static string DeviceConnectionString = "HostName=<yourIotHubName>.azure-devices.net;DeviceId=<yourIotDeviceName>;SharedAccessKey=<yourIotDeviceAccessKey>";
In this section, you create a .NET console app that connects to your hub as **my
## Next steps
-In this tutorial, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a simulated device app to report device connectivity information in the device twin. You also learned how to query this information using the SQL-like IoT Hub query language.
+In this article, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a simulated device app to report device connectivity information in the device twin. You also learned how to query this information using the SQL-like IoT Hub query language.
You can learn more from the following resources:
-* To learn how to send telemetry from devices, see the [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp) tutorial.
+* To learn how to send telemetry from devices, see the [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-csharp) article.
-* To learn how to configure devices using device twin's desired properties, see the [Use desired properties to configure devices](tutorial-device-twins.md) tutorial.
+* To learn how to configure devices using device twin's desired properties, see the [Use desired properties to configure devices](tutorial-device-twins.md) article.
* To learn how to control devices interactively, such as turning on a fan from a user-controlled app, see the [Use direct methods](./quickstart-control-device.md?pivots=programming-language-csharp) quickstart.
iot-hub Iot Hub Ios Swift C2d https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-ios-swift-c2d.md
Azure IoT Hub is a fully managed service that helps enable reliable and secure bi-directional communications between millions of devices and a solution back end. The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md) quickstart shows how to create an IoT hub, provision a device identity in it, and code a simulated device app that sends device-to-cloud messages.
-This tutorial shows you how to:
+This article shows you how to:
* Receive cloud-to-device messages on a device.
At the end of this article, you run the following Swift iOS project:
* **sample-device**, the same app created in [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md), which connects to your IoT hub and receives cloud-to-device messages. > [!NOTE]
-> IoT Hub has SDK support for many device platforms and languages (including C, Java, Python, and JavaScript) through Azure IoT device SDKs. For step-by-step instructions on how to connect your device to this tutorial's code, and generally to Azure IoT Hub, see the [Azure IoT Developer Center](https://www.azure.com/develop/iot).
+> IoT Hub has SDK support for many device platforms and languages (including C, Java, Python, and JavaScript) through Azure IoT device SDKs. For step-by-step instructions on how to connect your device to this article's code, and generally to Azure IoT Hub, see the [Azure IoT Developer Center](https://www.azure.com/develop/iot).
## Prerequisites
You are now ready to receive cloud-to-device messages. Use the Azure portal to s
## Next steps
-In this tutorial, you learned how to send and receive cloud-to-device messages.
+In this article, you learned how to send and receive cloud-to-device messages.
To learn more about developing solutions with IoT Hub, see the [IoT Hub developer guide](iot-hub-devguide.md).
iot-hub Iot Hub Java Java C2d https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-java-java-c2d.md
Azure IoT Hub is a fully managed service that helps enable reliable and secure b
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java). It shows you how to do the following:
+This article builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java). It shows you how to do the following:
* From your solution back end, send cloud-to-device messages to a single device through IoT Hub.
This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-deve
You can find more information on [cloud-to-device messages in the IoT Hub developer guide](iot-hub-devguide-messaging.md).
-At the end of this tutorial, you run two Java console apps:
+At the end of this article, you run two Java console apps:
* **simulated-device**, a modified version of the app created in [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java), which connects to your IoT hub and receives cloud-to-device messages. * **send-c2d-messages**, which sends a cloud-to-device message to the simulated device app through IoT Hub, and then receives its delivery acknowledgment. > [!NOTE]
-> IoT Hub has SDK support for many device platforms and languages (including C, Java, Python, and JavaScript) through Azure IoT device SDKs. For step-by-step instructions on how to connect your device to this tutorial's code, and generally to Azure IoT Hub, see the [Azure IoT Developer Center](https://azure.microsoft.com/develop/iot).
+> IoT Hub has SDK support for many device platforms and languages (including C, Java, Python, and JavaScript) through Azure IoT device SDKs. For step-by-step instructions on how to connect your device to this article's code, and generally to Azure IoT Hub, see the [Azure IoT Developer Center](https://azure.microsoft.com/develop/iot).
## Prerequisites
-* A complete working version of the [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) quickstart or the [Configure message routing with IoT Hub](tutorial-routing.md) tutorial.
+* A complete working version of the [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) quickstart or the [Configure message routing with IoT Hub](tutorial-routing.md) article.
* [Java SE Development Kit 8](/java/azure/jdk/). Make sure you select **Java 8** under **Long-term support** to get to downloads for JDK 8.
In this section, you create a Java console app that sends cloud-to-device messag
``` > [!NOTE]
- > For simplicity, this tutorial does not implement any retry policy. In production code, you should implement retry policies (such as exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
+ > For simplicity, this article does not implement any retry policy. In production code, you should implement retry policies (such as exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
9. To build the **simulated-device** app using Maven, execute the following command at the command prompt in the simulated-device folder:
You are now ready to run the applications.
## Next steps
-In this tutorial, you learned how to send and receive cloud-to-device messages.
+In article, you learned how to send and receive cloud-to-device messages.
To learn more about developing solutions with IoT Hub, see the [IoT Hub developer guide](iot-hub-devguide.md).
iot-hub Iot Hub Java Java Device Management Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-java-java-device-management-getstarted.md
[!INCLUDE [iot-hub-selector-dm-getstarted](../../includes/iot-hub-selector-dm-getstarted.md)]
-This tutorial shows you how to:
-
-* Use the Azure portal to create an IoT Hub and create a device identity in your IoT hub.
+This article shows you how to:
* Create a simulated device app that implements a direct method to reboot the device. Direct methods are invoked from the cloud. * Create an app that invokes the reboot direct method in the simulated device app through your IoT hub. This app then monitors the reported properties from the device to see when the reboot operation is complete.
-At the end of this tutorial, you have two Java console apps:
+At the end of this article, you have two Java console apps:
**simulated-device**. This app:
At the end of this tutorial, you have two Java console apps:
## Prerequisites
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
+ * [Java SE Development Kit 8](/java/azure/jdk/). Make sure you select **Java 8** under **Long-term support** to get to downloads for JDK 8. * [Maven 3](https://maven.apache.org/download.cgi)
At the end of this tutorial, you have two Java console apps:
* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
--
-## Register a new device in the IoT hub
-- ## Get the IoT hub connection string [!INCLUDE [iot-hub-howto-device-management-shared-access-policy-text](../../includes/iot-hub-howto-device-management-shared-access-policy-text.md)]
In this section, you create a Java console app that simulates a device. The app
import java.util.HashSet; ```
-9. Add the following class-level variables to the **App** class. Replace `{yourdeviceconnectionstring}` with the device connection string you noted in the [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub) section:
+9. Add the following class-level variables to the **App** class. Replace `{yourdeviceconnectionstring}` with the device connection string you saw when you registered a device in the IoT Hub:
```java private static final int METHOD_SUCCESS = 200;
iot-hub Iot Hub Java Java File Upload https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-java-java-file-upload.md
[!INCLUDE [iot-hub-file-upload-language-selector](../../includes/iot-hub-file-upload-language-selector.md)]
-This tutorial shows you how to use the file upload capabilities of IoT Hub using Java. For an overview of the file upload process, see [Upload Files with IoT Hub](iot-hub-devguide-file-upload.md).
+This article shows you how to use the file upload capabilities of IoT Hub using Java. For an overview of the file upload process, see [Upload Files with IoT Hub](iot-hub-devguide-file-upload.md).
-The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-java-java-c2d.md) tutorial show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure message routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
+The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-java-java-c2d.md) articles show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure message routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
* Videos * Large files that contain images * Vibration data sampled at high frequency * Some form of preprocessed data.
-These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upload files from a device, you can still use the security and reliability of IoT Hub. This tutorial shows you how. Also, there are two samples located at [https://github.com/Azure/azure-iot-sdk-java/tree/main/device/iot-device-samples/file-upload-sample/src/main/java/samples/com/microsoft/azure/sdk/iot](https://github.com/Azure/azure-iot-sdk-java/tree/main/device/iot-device-samples/file-upload-sample/src/main/java/samples/com/microsoft/azure/sdk/iot) in GitHub.
+These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upload files from a device, you can still use the security and reliability of IoT Hub. This article shows you how. Also, there are two samples located at [https://github.com/Azure/azure-iot-sdk-java/tree/main/device/iot-device-samples/file-upload-sample/src/main/java/samples/com/microsoft/azure/sdk/iot](https://github.com/Azure/azure-iot-sdk-java/tree/main/device/iot-device-samples/file-upload-sample/src/main/java/samples/com/microsoft/azure/sdk/iot) in GitHub.
> [!NOTE] > IoT Hub supports many device platforms and languages (including C, .NET, and JavaScript) through Azure IoT device SDKs. Refer to the [Azure IoT Developer Center](https://azure.microsoft.com/develop/iot) for step-by-step instructions on how to connect your device to Azure IoT Hub.
These files are typically batch processed in the cloud using tools such as [Azur
## Prerequisites
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
+ * [Java SE Development Kit 8](/java/azure/jdk/). Make sure you select **Java 8** under **Long-term support** to get to downloads for JDK 8. * [Maven 3](https://maven.apache.org/download.cgi)
These files are typically batch processed in the cloud using tools such as [Azur
* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
--
-## Register a new device in the IoT hub
-- [!INCLUDE [iot-hub-associate-storage](../../includes/iot-hub-include-associate-storage.md)] ## Create a project using Maven
The following screenshot shows the output from the **read-file-upload-notificati
## Next steps
-In this tutorial, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. You can continue to explore IoT hub features and scenarios with the following articles:
+In this article, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. You can continue to explore IoT hub features and scenarios with the following articles:
* [Create an IoT hub programmatically](iot-hub-rm-template-powershell.md)
iot-hub Iot Hub Java Java Schedule Jobs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-java-java-schedule-jobs.md
To learn more about each of these capabilities, see:
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial shows you how to:
+This article shows you how to:
* Create a device app that implements a direct method called **lockDoor**. The device app also receives desired property changes from the back-end app. * Create a back-end app that creates a job to call the **lockDoor** direct method on multiple devices. Another job sends desired property updates to multiple devices.
-At the end of this tutorial, you have a Java console device app and a Java console back-end app:
+At the end of this article, you have a Java console device app and a Java console back-end app:
**simulated-device** that connects to your IoT hub, implements the **lockDoor** direct method, and handles desired property changes.
At the end of this tutorial, you have a Java console device app and a Java conso
## Prerequisites
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
+ * [Java SE Development Kit 8](/java/azure/jdk/). Make sure you select **Java 8** under **Long-term support** to get to downloads for JDK 8. * [Maven 3](https://maven.apache.org/download.cgi)
At the end of this tutorial, you have a Java console device app and a Java conso
* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
--
-## Register a new device in the IoT hub
--
-You can also use the [IoT extension for Azure CLI](https://github.com/Azure/azure-iot-cli-extension) tool to add a device to your IoT hub.
- ## Get the IoT hub connection string [!INCLUDE [iot-hub-howto-schedule-jobs-shared-access-policy-text](../../includes/iot-hub-howto-schedule-jobs-shared-access-policy-text.md)]
In this section, you create a Java console app that handles the desired properti
import java.util.Scanner; ```
-9. Add the following class-level variables to the **App** class. Replace `{yourdeviceconnectionstring}` with the device connection string you copied previously in the [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub) section:
+9. Add the following class-level variables to the **App** class. Replace `{yourdeviceconnectionstring}` with the device connection string you saw when you registered a device in your IoT Hub:
```java private static String connString = "{yourdeviceconnectionstring}";
You are now ready to run the console apps.
## Next steps
-In this tutorial, you used a job to schedule a direct method to a device and the update of the device twin's properties.
+In this article, you used a job to schedule a direct method to a device and the update of the device twin's properties.
Use the following resources to learn how to:
-* Send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) tutorial.
+* Send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) article.
* Control devices interactively (such as turning on a fan from a user-controlled app) with the [Use direct methods](./quickstart-control-device.md?pivots=programming-language-java) quickstart.
iot-hub Iot Hub Java Java Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-java-java-twin-getstarted.md
[!INCLUDE [iot-hub-selector-twin-get-started](../../includes/iot-hub-selector-twin-get-started.md)]
-In this tutorial, you create two Java console apps:
+In this article, you create two Java console apps:
* **add-tags-query**, a Java back-end app that adds tags and queries device twins. * **simulated-device**, a Java device app that connects to your IoT hub and reports its connectivity condition using a reported property.
In this tutorial, you create two Java console apps:
## Prerequisites
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
+ * [Java SE Development Kit 8](/java/azure/jdk/). Make sure you select **Java 8** under **Long-term support** to get to downloads for JDK 8. * [Maven 3](https://maven.apache.org/download.cgi)
In this tutorial, you create two Java console apps:
* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
--
-## Register a new device in the IoT hub
-- ## Get the IoT hub connection string [!INCLUDE [iot-hub-howto-twin-shared-access-policy-text](../../includes/iot-hub-howto-twin-shared-access-policy-text.md)]
In this section, you create a Java console app that sets a reported property val
import java.util.Scanner; ```
-9. Add the following class-level variables to the **App** class. Replace `{yourdeviceconnectionstring}` with the device connection string you copied in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+9. Add the following class-level variables to the **App** class. Replace `{yourdeviceconnectionstring}` with the device connection string you saw when you registered a device in the IoT Hub:
```java private static String connString = "{yourdeviceconnectionstring}";
You are now ready to run the console apps.
## Next steps
-In this tutorial, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a device app to report device connectivity information in the device twin. You also learned how to query the device twin information using the SQL-like IoT Hub query language.
+In this article, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a device app to report device connectivity information in the device twin. You also learned how to query the device twin information using the SQL-like IoT Hub query language.
Use the following resources to learn how to:
-* Send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) tutorial.
+* Send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-java) article.
* Control devices interactively (such as turning on a fan from a user-controlled app) with the [Use direct methods](./quickstart-control-device.md?pivots=programming-language-java) quickstart.
iot-hub Iot Hub Node Node C2d https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-node-node-c2d.md
Azure IoT Hub is a fully managed service that helps enable reliable and secure b
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs). It shows you how to:
+This article builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs). It shows you how to:
* From your solution back end, send cloud-to-device messages to a single device through IoT Hub. * Receive cloud-to-device messages on a device.
This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-deve
You can find more information on cloud-to-device messages in the [IoT Hub developer guide](iot-hub-devguide-messaging.md).
-At the end of this tutorial, you run two Node.js console apps:
+At the end of this article, you run two Node.js console apps:
* **SimulatedDevice**, a modified version of the app created in [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs), which connects to your IoT hub and receives cloud-to-device messages. * **SendCloudToDeviceMessage**, which sends a cloud-to-device message to the simulated device app through IoT Hub, and then receives its delivery acknowledgment. > [!NOTE]
-> IoT Hub has SDK support for many device platforms and languages (including C, Java, Python, and JavaScript) through Azure IoT device SDKs. For step-by-step instructions on how to connect your device to this tutorial's code, and generally to Azure IoT Hub, see the [Azure IoT Developer Center](https://azure.microsoft.com/develop/iot).
+> IoT Hub has SDK support for many device platforms and languages (including C, Java, Python, and JavaScript) through Azure IoT device SDKs. For step-by-step instructions on how to connect your device to this article's code, and generally to Azure IoT Hub, see the [Azure IoT Developer Center](https://azure.microsoft.com/develop/iot).
> ## Prerequisites
-* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this tutorial on either Windows or Linux.
+* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this article on either Windows or Linux.
* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial) in just a couple of minutes.)
You are now ready to run the applications.
![Run the app to send the cloud-to-device command](./media/iot-hub-node-node-c2d/sendc2d.png) > [!NOTE]
- > For simplicity, this tutorial does not implement any retry policy. In production code, you should implement retry policies (such as exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
+ > For simplicity, this article does not implement any retry policy. In production code, you should implement retry policies (such as exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
> ## Next steps
-In this tutorial, you learned how to send and receive cloud-to-device messages.
+In this article, you learned how to send and receive cloud-to-device messages.
To learn more about developing solutions with IoT Hub, see the [IoT Hub developer guide](iot-hub-devguide.md).
iot-hub Iot Hub Node Node Device Management Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-node-node-device-management-get-started.md
[!INCLUDE [iot-hub-selector-dm-getstarted](../../includes/iot-hub-selector-dm-getstarted.md)]
-This tutorial shows you how to:
-
-* Use the [Azure portal](https://portal.azure.com) to create an IoT Hub and create a device identity in your IoT hub.
+This article shows you how to:
* Create a simulated device app that contains a direct method that reboots that device. Direct methods are invoked from the cloud. * Create a Node.js console app that calls the reboot direct method in the simulated device app through your IoT hub.
-At the end of this tutorial, you have two Node.js console apps:
+At the end of this article, you have two Node.js console apps:
* **dmpatterns_getstarted_device.js**, which connects to your IoT hub with the device identity created earlier, receives a reboot direct method, simulates a physical reboot, and reports the time for the last reboot.
At the end of this tutorial, you have two Node.js console apps:
## Prerequisites
-* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this tutorial on either Windows or Linux.
-
-* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-## Create an IoT hub
+* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this article on either Windows or Linux.
-
-## Register a new device in the IoT hub
+* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
## Create a simulated device app
In this section, you:
var Protocol = require('azure-iot-device-mqtt').Mqtt; ```
-5. Add a **connectionString** variable and use it to create a **Client** instance. Replace the `{yourdeviceconnectionstring}` placeholder value with the device connection string you copied previously in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+5. Add a **connectionString** variable and use it to create a **Client** instance. Replace the `{yourdeviceconnectionstring}` placeholder value with the device connection string you saw when you registered a device in the IoT Hub:
```javascript var connectionString = '{yourdeviceconnectionstring}';
In this section, you:
8. Save and close the **dmpatterns_getstarted_device.js** file. > [!NOTE]
-> To keep things simple, this tutorial does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
+> To keep things simple, this article does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
## Get the IoT hub connection string
iot-hub Iot Hub Node Node File Upload https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-node-node-file-upload.md
[!INCLUDE [iot-hub-file-upload-language-selector](../../includes/iot-hub-file-upload-language-selector.md)]
-The tutorial shows you how to:
+The article shows you how to:
* Securely provide a device with an Azure blob URI for uploading a file. * Use the IoT Hub file upload notifications to trigger processing the file in your app back end.
-The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-node-node-c2d.md) tutorial show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure Message Routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Microsoft Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
+The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-node-node-c2d.md) articles show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure Message Routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Microsoft Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
* Videos * Large files that contain images * Vibration data sampled at high frequency * Some form of pre-processed data.
-These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upland files from a device, you can still use the security and reliability of IoT Hub. This tutorial shows you how.
+These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upland files from a device, you can still use the security and reliability of IoT Hub. This article shows you how.
At the end of this article, you run two Node.js console apps:
At the end of this article, you run two Node.js console apps:
## Prerequisites
-* Node.js version 10.0.x or later. The LTS version is recommended. You can download Node.js from [nodejs.org](https://nodejs.org).
- * An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-
-## Create an IoT hub
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-## Register a new device in the IoT hub
+* Node.js version 10.0.x or later. The LTS version is recommended. You can download Node.js from [nodejs.org](https://nodejs.org).
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
[!INCLUDE [iot-hub-associate-storage](../../includes/iot-hub-include-associate-storage.md)]
In this section, you create a device app to upload a file to IoT hub. The code i
1. Copy an image file to the `fileupload` folder and give it a name such as `myimage.png`.
-1. Add environment variables for your device connection string and the path to the file that you want to upload. You got the device connection string when you [registered the device with your IoT hub](#register-a-new-device-in-the-iot-hub).
+1. Add environment variables for your device connection string and the path to the file that you want to upload. You got the device connection string when you registered a device in the IoT Hub.
- For Windows:
You can use the portal to view the uploaded file in the storage container you co
## Next steps
-In this tutorial, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. You can continue to explore IoT hub features and scenarios with the following articles:
+In this article, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. You can continue to explore IoT hub features and scenarios with the following articles:
* [Create an IoT hub programmatically](iot-hub-rm-template-powershell.md)
iot-hub Iot Hub Node Node Module Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-node-node-module-twin-getstarted.md
> [!NOTE] > [Module identities and module twins](iot-hub-devguide-module-twins.md) are similar to Azure IoT Hub device identity and device twin, but provide finer granularity. While Azure IoT Hub device identity and device twin enable the back-end application to configure a device and provides visibility on the device's conditions, a module identity and module twin provide these capabilities for individual components of a device. On capable devices with multiple components, such as operating system-based devices or firmware devices, it allows for isolated configuration and conditions for each component.
-At the end of this tutorial, you have two Node.js apps:
+At the end of this article, you have two Node.js apps:
* **CreateIdentities**, which creates a device identity, a module identity, and associated security keys to connect your device and module clients.
At the end of this tutorial, you have two Node.js apps:
## Prerequisites
-* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this tutorial on either Windows or Linux.
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
-
-## Create an IoT hub
+* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this article on either Windows or Linux.
+* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
## Get the IoT hub connection string
iot-hub Iot Hub Node Node Schedule Jobs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-node-node-schedule-jobs.md
Learn more about each of these capabilities in these articles:
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial shows you how to:
+This article shows you how to:
* Create a Node.js simulated device app that has a direct method, which enables **lockDoor**, which can be called by the solution back end. * Create a Node.js console app that calls the **lockDoor** direct method in the simulated device app using a job and updates the desired properties using a device job.
-At the end of this tutorial, you have two Node.js apps:
+At the end of this article, you have two Node.js apps:
* **simDevice.js**, which connects to your IoT hub with the device identity and receives a **lockDoor** direct method.
At the end of this tutorial, you have two Node.js apps:
## Prerequisites
-* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this tutorial on either Windows or Linux.
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
-
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-## Create an IoT hub
+* Node.js version 10.0.x or later. [Prepare your development environment](https://github.com/Azure/azure-iot-sdk-node/tree/main/doc/node-devbox-setup.md) describes how to install Node.js for this article on either Windows or Linux.
-
-## Register a new device in the IoT hub
+* An active Azure account. (If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.)
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
## Create a simulated device app
In this section, you create a Node.js console app that responds to a direct meth
8. Save and close the **simDevice.js** file. > [!NOTE]
-> To keep things simple, this tutorial does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
+> To keep things simple, this article does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
> ## Get the IoT hub connection string
You are now ready to run the applications.
## Next steps
-In this tutorial, you used a job to schedule a direct method to a device and the update of the device twin's properties.
+In this article, you used a job to schedule a direct method to a device and the update of the device twin's properties.
To continue getting started with IoT Hub and device management patterns such as end-to-end image-based update in [Device Update for Azure IoT Hub tutorial using the Raspberry Pi 3 B+ Reference Image](../iot-hub-device-update/device-update-raspberry-pi.md).
iot-hub Iot Hub Node Node Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-node-node-twin-getstarted.md
[!INCLUDE [iot-hub-selector-twin-get-started](../../includes/iot-hub-selector-twin-get-started.md)]
-At the end of this tutorial, you will have two Node.js console apps:
+At the end of this article, you will have two Node.js console apps:
* **AddTagsAndQuery.js**, a Node.js back-end app, which adds tags and queries device twins.
At the end of this tutorial, you will have two Node.js console apps:
## Prerequisites
-To complete this tutorial, you need:
+To complete this article, you need:
+
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
* Node.js version 10.0.x or later.
To complete this tutorial, you need:
* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
--
-## Register a new device in the IoT hub
-- ## Get the IoT hub connection string [!INCLUDE [iot-hub-howto-twin-shared-access-policy-text](../../includes/iot-hub-howto-twin-shared-access-policy-text.md)]
In this section, you create a Node.js console app that connects to your hub as *
3. Using a text editor, create a new **ReportConnectivity.js** file in the **reportconnectivity** folder.
-4. Add the following code to the **ReportConnectivity.js** file. Replace `{device connection string}` with the device connection string you copied when you created the **myDeviceId** device identity in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+4. Add the following code to the **ReportConnectivity.js** file. Replace `{device connection string}` with the device connection string you saw when you registered a device in the IoT Hub:
```javascript 'use strict';
In this section, you create a Node.js console app that connects to your hub as *
## Next steps
-In this tutorial, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a simulated device app to report device connectivity information in the device twin. You also learned how to query this information using the SQL-like IoT Hub query language.
+In this article, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a simulated device app to report device connectivity information in the device twin. You also learned how to query this information using the SQL-like IoT Hub query language.
Use the following resources to learn how to:
-* send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs) tutorial,
+* send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-nodejs) article,
-* configure devices using device twin's desired properties with the [Use desired properties to configure devices](tutorial-device-twins.md) tutorial,
+* configure devices using device twin's desired properties with the [Use desired properties to configure devices](tutorial-device-twins.md) article,
* control devices interactively (such as turning on a fan from a user-controlled app), with the [Use direct methods](./quickstart-control-device.md?pivots=programming-language-nodejs) quickstart.
iot-hub Iot Hub Portal Csharp Module Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-portal-csharp-module-twin-getstarted.md
> [Module identities and module twins](iot-hub-devguide-module-twins.md) are similar to Azure IoT Hub device identity and device twin, but provide finer granularity. While Azure IoT Hub device identity and device twin enable the back-end application to configure a device and provide visibility on the device's conditions, a module identity and module twin provide these capabilities for individual components of a device. On capable devices with multiple components, such as operating system based devices or firmware devices, module identities and module twins allow for isolated configuration and conditions for each component. >
-In this tutorial, you will learn:
+In this article, you will learn:
* How to create a module identity in the portal.
In this tutorial, you will learn:
* Visual Studio.
-* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
-
-## Create a hub
-
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-## Register a new device in the hub
-
+* An active Azure account. If you don't have an account, you can create a [free account](https://azure.microsoft.com/pricing/free-trial/) in just a couple of minutes.
## Create a module identity in the portal
iot-hub Iot Hub Python Python C2d https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-python-python-c2d.md
Azure IoT Hub is a fully managed service that helps enable reliable and secure b
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python). It shows you how to:
+This article builds on [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python). It shows you how to:
* From your solution back end, send cloud-to-device messages to a single device through IoT Hub.
This tutorial builds on [Send telemetry from a device to an IoT hub](../iot-deve
You can find more information on cloud-to-device messages in the [IoT Hub developer guide](iot-hub-devguide-messaging.md).
-At the end of this tutorial, you run two Python console apps:
+At the end of this article, you run two Python console apps:
* **SimulatedDevice.py**, a modified version of the app created in [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python), which connects to your IoT hub and receives cloud-to-device messages.
You are now ready to run the applications.
## Next steps
-In this tutorial, you learned how to send and receive cloud-to-device messages.
+In this article, you learned how to send and receive cloud-to-device messages.
To learn more about developing solutions with IoT Hub, see the [IoT Hub developer guide](iot-hub-devguide.md).
iot-hub Iot Hub Python Python Device Management Get Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-python-python-device-management-get-started.md
[!INCLUDE [iot-hub-selector-dm-getstarted](../../includes/iot-hub-selector-dm-getstarted.md)]
-This tutorial shows you how to:
+This article shows you how to:
* Use the Azure portal to create an IoT Hub and create a device identity in your IoT hub.
This tutorial shows you how to:
* Create a Python console app that calls the reboot direct method in the simulated device app through your IoT hub.
-At the end of this tutorial, you have two Python console apps:
+At the end of this article, you have two Python console apps:
* **dmpatterns_getstarted_device.py**, which connects to your IoT hub with the device identity created earlier, receives a reboot direct method, simulates a physical reboot, and reports the time for the last reboot.
At the end of this tutorial, you have two Python console apps:
## Prerequisites
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
+ [!INCLUDE [iot-hub-include-python-installation-notes](../../includes/iot-hub-include-python-v2-installation-notes.md)] * Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
-## Create an IoT hub
- ## Register a new device in the IoT hub
iot-hub Iot Hub Python Python File Upload https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-python-python-file-upload.md
[!INCLUDE [iot-hub-file-upload-language-selector](../../includes/iot-hub-file-upload-language-selector.md)]
-This article shows how to use the [file upload capabilities of IoT Hub](iot-hub-devguide-file-upload.md) to upload a file to [Azure blob storage](../storage/index.yml). The tutorial shows you how to:
+This article shows how to use the [file upload capabilities of IoT Hub](iot-hub-devguide-file-upload.md) to upload a file to [Azure blob storage](../storage/index.yml). The article shows you how to:
* Securely provide a storage container for uploading a file. * Use the Python client to upload a file through your IoT hub.
-The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-python-python-c2d.md) tutorial show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure Message Routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Microsoft Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
+The [Send telemetry from a device to an IoT hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python) quickstart and [Send cloud-to-device messages with IoT Hub](iot-hub-python-python-c2d.md) articles show the basic device-to-cloud and cloud-to-device messaging functionality of IoT Hub. The [Configure Message Routing with IoT Hub](tutorial-routing.md) tutorial shows a way to reliably store device-to-cloud messages in Microsoft Azure blob storage. However, in some scenarios, you can't easily map the data your devices send into the relatively small device-to-cloud messages that IoT Hub accepts. For example:
* Videos * Large files that contain images * Vibration data sampled at high frequency * Some form of pre-processed data.
-These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upland files from a device, you can still use the security and reliability of IoT Hub. This tutorial shows you how.
+These files are typically batch processed in the cloud using tools such as [Azure Data Factory](../data-factory/introduction.md) or the [Hadoop](../hdinsight/index.yml) stack. When you need to upland files from a device, you can still use the security and reliability of IoT Hub. This article shows you how.
-At the end of this tutorial, you run the Python console app:
+At the end of this article, you run the Python console app:
* **FileUpload.py**, which uploads a file to storage using the Python Device SDK.
Now you're ready to run the application.
## Next steps
-In this tutorial, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. You can continue to explore IoT hub features and scenarios with the following articles:
+In this article, you learned how to use the file upload capabilities of IoT Hub to simplify file uploads from devices. You can continue to explore IoT hub features and scenarios with the following articles:
* [Create an IoT hub programmatically](iot-hub-rm-template-powershell.md)
iot-hub Iot Hub Python Python Module Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-python-python-module-twin-getstarted.md
> [Module identities and module twins](iot-hub-devguide-module-twins.md) are similar to Azure IoT Hub device identities and device twins, but provide finer granularity. While Azure IoT Hub device identities and device twins enable a back-end application to configure a device and provide visibility on the device's conditions, module identities and module twins provide these capabilities for individual components of a device. On capable devices with multiple components, such as operating system based devices or firmware devices, they allow for isolated configuration and conditions for each component. >
-At the end of this tutorial, you have three Python apps:
+At the end of this article, you have three Python apps:
* **CreateModule**, which creates a device identity, a module identity, and associated security keys to connect your device and module clients.
At the end of this tutorial, you have three Python apps:
## Prerequisites -
-## Create an IoT hub
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
## Get the IoT hub connection string
iot-hub Iot Hub Python Python Schedule Jobs https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-python-python-schedule-jobs.md
Learn more about each of these capabilities in these articles:
[!INCLUDE [iot-hub-basic](../../includes/iot-hub-basic-whole.md)]
-This tutorial shows you how to:
+This article shows you how to:
* Create a Python simulated device app that has a direct method, which enables **lockDoor**, which can be called by the solution back end. * Create a Python console app that calls the **lockDoor** direct method in the simulated device app using a job and updates the desired properties using a device job.
-At the end of this tutorial, you have two Python apps:
+At the end of this article, you have two Python apps:
**simDevice.py**, which connects to your IoT hub with the device identity and receives a **lockDoor** direct method.
At the end of this tutorial, you have two Python apps:
## Prerequisites -
-## Create an IoT hub
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-## Register a new device in the IoT hub
- ## Create a simulated device app
In this section, you create a Python console app that responds to a direct metho
6. Save and close the **simDevice.py** file. > [!NOTE]
-> To keep things simple, this tutorial does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
+> To keep things simple, this article does not implement any retry policy. In production code, you should implement retry policies (such as an exponential backoff), as suggested in the article, [Transient Fault Handling](/azure/architecture/best-practices/transient-faults).
> ## Get the IoT hub connection string
In this section, you create a Python console app that initiates a remote **lockD
2. Using a text editor, create a new **scheduleJobService.py** file in your working directory.
-3. Add the following `import` statements and variables at the start of the **scheduleJobService.py** file. Replace the `{IoTHubConnectionString}` placeholder with the IoT hub connection string you copied previously in [Get the IoT hub connection string](#get-the-iot-hub-connection-string). Replace the `{deviceId}` placeholder with the device ID you registered in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub):
+3. Add the following `import` statements and variables at the start of the **scheduleJobService.py** file. Replace the `{IoTHubConnectionString}` placeholder with the IoT hub connection string you copied previously in [Get the IoT hub connection string](#get-the-iot-hub-connection-string). Replace the `{deviceId}` placeholder with the device ID (the name) from your registered device:
```python import os
You are now ready to run the applications.
## Next steps
-In this tutorial, you used a job to schedule a direct method to a device and the update of the device twin's properties.
+In this article, you used a job to schedule a direct method to a device and the update of the device twin's properties.
To continue getting started with IoT Hub and device management patterns such as end-to-end image-based update in [Device Update for Azure IoT Hub tutorial using the Raspberry Pi 3 B+ Reference Image](../iot-hub-device-update/device-update-raspberry-pi.md).
iot-hub Iot Hub Python Twin Getstarted https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/iot-hub/iot-hub-python-twin-getstarted.md
[!INCLUDE [iot-hub-selector-twin-get-started](../../includes/iot-hub-selector-twin-get-started.md)]
-At the end of this tutorial, you will have two Python console apps:
+At the end of this article, you will have two Python console apps:
* **AddTagsAndQuery.py**, a Python back-end app, which adds tags and queries device twins.
At the end of this tutorial, you will have two Python console apps:
## Prerequisites -
-* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
+* An IoT Hub. Create one with the [CLI](iot-hub-create-using-cli.md) or the [Azure portal](iot-hub-create-through-portal.md).
-## Create an IoT hub
+* A registered device. Register one in the [Azure portal](iot-hub-create-through-portal.md#register-a-new-device-in-the-iot-hub).
-
-## Register a new device in the IoT hub
+* Make sure that port 8883 is open in your firewall. The device sample in this article uses MQTT protocol, which communicates over port 8883. This port may be blocked in some corporate and educational network environments. For more information and ways to work around this issue, see [Connecting to IoT Hub (MQTT)](iot-hub-mqtt-support.md#connecting-to-iot-hub).
## Get the IoT hub connection string
In this section, you create a Python console app that adds location metadata to
from azure.iot.hub.models import Twin, TwinProperties, QuerySpecification, QueryResult ```
-4. Add the following code. Replace `[IoTHub Connection String]` with the IoT hub connection string you copied in [Get the IoT hub connection string](#get-the-iot-hub-connection-string). Replace `[Device Id]` with the device ID you registered in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+4. Add the following code. Replace `[IoTHub Connection String]` with the IoT hub connection string you copied in [Get the IoT hub connection string](#get-the-iot-hub-connection-string). Replace `[Device Id]` with the device ID (the name) from your registered device in the IoT Hub.
```python IOTHUB_CONNECTION_STRING = "[IoTHub Connection String]"
In this section, you create a Python console app that connects to your hub as yo
from azure.iot.device import IoTHubModuleClient ```
-4. Add the following code. Replace the `[IoTHub Device Connection String]` placeholder value with the device connection string you copied in [Register a new device in the IoT hub](#register-a-new-device-in-the-iot-hub).
+4. Add the following code. Replace the `[IoTHub Device Connection String]` placeholder value with the device connection string you saw when you registered a device in the IoT Hub:
```python CONNECTION_STRING = "[IoTHub Device Connection String]"
In this section, you create a Python console app that connects to your hub as yo
## Next steps
-In this tutorial, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a simulated device app to report device connectivity information in the device twin. You also learned how to query this information using the registry.
+In this article, you configured a new IoT hub in the Azure portal, and then created a device identity in the IoT hub's identity registry. You added device metadata as tags from a back-end app, and wrote a simulated device app to report device connectivity information in the device twin. You also learned how to query this information using the registry.
Use the following resources to learn how to:
-* Send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python) tutorial.
+* Send telemetry from devices with the [Get started with IoT Hub](../iot-develop/quickstart-send-telemetry-iot-hub.md?pivots=programming-language-python) article.
-* Configure devices using device twin's desired properties with the [Use desired properties to configure devices](tutorial-device-twins.md) tutorial.
+* Configure devices using device twin's desired properties with the [Use desired properties to configure devices](tutorial-device-twins.md) article.
* Control devices interactively (such as turning on a fan from a user-controlled app), with the [Use direct methods](./quickstart-control-device.md?pivots=programming-language-python) quickstart.
key-vault Client Libraries https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/key-vault/general/client-libraries.md
Each SDK has separate client libraries for key vault, secrets, keys, and certifi
| .NET | - [API Reference](/dotnet/api/azure.security.keyvault.secrets)<br>- [NuGet package](https://www.nuget.org/packages/Azure.Security.KeyVault.Secrets/)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-net/tree/master/sdk/keyvault/Azure.Security.KeyVault.Secrets)<br>- [Quickstart](../secrets/quick-create-net.md) | - [API Reference](/dotnet/api/azure.security.keyvault.keys)<br>- [NuGet package](https://www.nuget.org/packages/Azure.Security.KeyVault.Keys/)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-net/tree/master/sdk/keyvault/Azure.Security.KeyVault.Keys)<br>- [Quickstart](../keys/quick-create-net.md) | - [API Reference](/dotnet/api/azure.security.keyvault.certificates)<br>- [NuGet package](https://www.nuget.org/packages/Azure.Security.KeyVault.Certificates/)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-net/tree/master/sdk/keyvault/Azure.Security.KeyVault.Certificates)<br>- [Quickstart](../certificates/quick-create-net.md) | - [API Reference](/dotnet/api/microsoft.azure.management.keyvault)<br>- [NuGet Package](https://www.nuget.org/packages/Microsoft.Azure.Management.KeyVault/)<br> - [Library source code](https://github.com/Azure/azure-sdk-for-net/tree/master/sdk/keyvault/Microsoft.Azure.Management.KeyVault)| | Python| - [API Reference](/python/api/overview/azure/keyvault-secrets-readme)<br>- [PyPi package](https://pypi.org/project/azure-keyvault-secrets/)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-secrets)<br>- [Quickstart](../secrets/quick-create-python.md) |- [API Reference](/python/api/overview/azure/keyvault-keys-readme)<br>- [PyPi package](https://pypi.org/project/azure-keyvault-keys/)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-keys)<br>- [Quickstart](../keys/quick-create-python.md) | - [API Reference](/python/api/overview/azure/keyvault-certificates-readme)<br>- [PyPi package](https://pypi.org/project/azure-keyvault-certificates/)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-certificates)<br>- [Quickstart](../certificates/quick-create-python.md) | - [API Reference](/python/api/azure-mgmt-keyvault/azure.mgmt.keyvault)<br> - [PyPi package](https://pypi.org/project/azure-mgmt-keyvault/)<br> - [Library source code](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-mgmt-keyvault)| | Java | - [API Reference](https://azuresdkdocs.blob.core.windows.net/$web/jav) |- [API Reference](/java/api/com.microsoft.azure.management.keyvault)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/keyvault/microsoft-azure-keyvault)|
+| Spring | - [Reference](/azure/developer/java/spring-framework/spring-cloud-azure?tabs=maven#secret-management)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring)<br>- [Quickstart](/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-key-vault) | | - [Reference](/azure/developer/java/spring-framework/spring-cloud-azure-appendix#azure-key-vault-certificates-properties)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring)<br>- [Quickstart](/azure/developer/java/spring-framework/configure-spring-boot-starter-java-app-with-azure-key-vault-certificates) | |
| Node.js | - [API Reference](/javascript/api/@azure/keyvault-secrets/)<br>- [npm package](https://www.npmjs.com/package/@azure/keyvault-secrets)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/keyvault/keyvault-secrets)<br>- [Quickstart](../secrets/quick-create-node.md) |- [API Reference](/javascript/api/@azure/keyvault-keys/)<br>- [npm package](https://www.npmjs.com/package/@azure/keyvault-keys)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/keyvault/keyvault-keys)<br>- [Quickstart](../keys/quick-create-node.md)| - [API Reference](/javascript/api/@azure/keyvault-certificates/)<br>- [npm package](https://www.npmjs.com/package/@azure/keyvault-certificates)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/keyvault/keyvault-certificates)<br>- [Quickstart](../certificates/quick-create-node.md) | - [API Reference](/javascript/api/@azure/arm-keyvault/)<br>- [npm package](https://www.npmjs.com/package/@azure/arm-keyvault)<br>- [Library source code](https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/keyvault/arm-keyvault) ## Next steps
key-vault About Keys Details https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/key-vault/keys/about-keys-details.md
Following table shows a summary of key types and supported algorithms.
- **RSNULL** - See [RFC2437](https://tools.ietf.org/html/rfc2437), a specialized use-case to enable certain TLS scenarios. > [!NOTE]
-> The DigestInfo is constructed on the server side for Sign operations that algorithms RS256, RS384 and RS512 generate
+> The DigestInfo is constructed on the server side for Sign operations that algorithms RS256, RS384 and RS512 generate.
## Symmetric key algorithms (Managed HSM only) - **AES-KW** - AES Key Wrap ([RFC3394](https://tools.ietf.org/html/rfc3394)).
machine-learning Tutorial 1St Experiment Bring Data https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/machine-learning/tutorial-1st-experiment-bring-data.md
Title: "Tutorial: Upload data and train a model"
+ Title: "Tutorial: Upload data and train a model (SDK v2)"
description: How to upload and use your own data in a remote training job. This is part 3 of a three-part getting-started series.
Last updated 07/10/2022-+ # Tutorial: Upload data and train a model (part 3 of 3) [!INCLUDE [sdk v2](../../includes/machine-learning-sdk-v2.md)]
+> [!div class="op_single_selector" title1="Select the version of Azure Machine Learning SDK you are using:"]
+> * [v1](v1/tutorial-1st-experiment-bring-data.md)
+> * [v2 (preview)](tutorial-1st-experiment-bring-data.md)
+ This tutorial shows you how to upload and use your own data to train machine learning models in Azure Machine Learning. This tutorial is *part 3 of a three-part tutorial series*. In [Part 2: Train a model](tutorial-1st-experiment-sdk-train.md), you trained a model in the cloud, using sample data from `PyTorch`. You also downloaded that data through the `torchvision.datasets.CIFAR10` method in the PyTorch API. In this tutorial, you'll use the downloaded data to learn the workflow for working with your own data in Azure Machine Learning.
machine-learning Tutorial 1St Experiment Hello World https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/machine-learning/tutorial-1st-experiment-hello-world.md
Title: "Tutorial: Get started with a Python script"
+ Title: "Tutorial: Get started with a Python script (SDK v2)"
description: Get started with your first Python script in Azure Machine Learning. This is part 1 of a three-part getting-started series.
Last updated 07/10/2022-+ # Tutorial: Get started with a Python script in Azure Machine Learning (part 1 of 3) [!INCLUDE [sdk v2](../../includes/machine-learning-sdk-v2.md)]
+> [!div class="op_single_selector" title1="Select the version of Azure Machine Learning SDK you are using:"]
+> * [v1](v1/tutorial-1st-experiment-hello-world.md)
+> * [v2 (preview)](tutorial-1st-experiment-hello-world.md)
+ In this tutorial, you run your first Python script in the cloud with Azure Machine Learning. This tutorial is *part 1 of a three-part tutorial series*. This tutorial avoids the complexity of training a machine learning model. You will run a "Hello World" Python script in the cloud. You will learn how a control script is used to configure and create a run in Azure Machine Learning.
Here's a description of how the control script works:
`ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)` :::column-end::: :::column span="2":::
- [MLClient](/python/api/azure-ai-ml/azure.ai.ml.mlclient) manages your Azure Machine Learning workspace and it's assets and resources.
+ [MLClient](/python/api/azure-ai-ml/azure.ai.ml.mlclient) manages your Azure Machine Learning workspace and its assets and resources.
:::column-end::: :::row-end::: :::row:::
machine-learning Tutorial 1St Experiment Sdk Train https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/machine-learning/tutorial-1st-experiment-sdk-train.md
Title: "Tutorial: Train a first Python machine learning model "
+ Title: "Tutorial: Train a first Python machine learning model (SDK v2)"
description: How to train a machine learning model in Azure Machine Learning. This is part 2 of a three-part getting-started series.
Last updated 07/10/2022-+ # Tutorial: Train your first machine learning model (part 2 of 3) [!INCLUDE [sdk v2](../../includes/machine-learning-sdk-v2.md)]
+> [!div class="op_single_selector" title1="Select the version of Azure Machine Learning SDK you are using:"]
+> * [v1](v1/tutorial-1st-experiment-sdk-train.md)
+> * [v2 (preview)](tutorial-1st-experiment-sdk-train.md)
+ This tutorial shows you how to train a machine learning model in Azure Machine Learning. This tutorial is _part 2 of a three-part tutorial series_. In [Part 1: Run "Hello world!"](tutorial-1st-experiment-hello-world.md) of the series, you learned how to use a control script to run a job in the cloud.
if __name__ == "__main__":
### View the output
-1. In the page that opens, you'll see the job status. The first time you run this script, Azure Machine Learning will build a new Docker image from your PyTorch environment. The whole job might around 10 minutes to complete. This image will be reused in future jobs to make them job much quicker.
+1. In the page that opens, you'll see the job status. The first time you run this script, Azure Machine Learning will build a new Docker image from your PyTorch environment. The whole job might take around 10 minutes to complete. This image will be reused in future jobs to make them job much quicker.
1. You can see view Docker build logs in the Azure Machine Learning studio. Select the **Outputs + logs** tab, and then select **20_image_build_log.txt**. 1. When the status of the job is **Completed**, select **Output + logs**. 1. Select **std_log.txt** to view the output of your job.
machine-learning Tutorial 1St Experiment Bring Data https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/machine-learning/v1/tutorial-1st-experiment-bring-data.md
+
+ Title: "Tutorial: Upload data and train a model (SDK v1)"
+
+description: How to upload and use your own data in a remote training job, with SDK v1. This is part 3 of a three-part getting-started series.
+++++++ Last updated : 07/29/2022+++
+# Tutorial: Upload data and train a model (SDK v1, part 3 of 3)
++
+> [!div class="op_single_selector" title1="Select the version of Azure Machine Learning SDK you are using:"]
+> * [v1](tutorial-1st-experiment-bring-data.md)
+> * [v2 (preview)](../tutorial-1st-experiment-bring-data.md)
+
+This tutorial shows you how to upload and use your own data to train machine learning models in Azure Machine Learning. This tutorial is *part 3 of a three-part tutorial series*.
+
+In [Part 2: Train a model](tutorial-1st-experiment-sdk-train.md), you trained a model in the cloud, using sample data from `PyTorch`. You also downloaded that data through the `torchvision.datasets.CIFAR10` method in the PyTorch API. In this tutorial, you'll use the downloaded data to learn the workflow for working with your own data in Azure Machine Learning.
+
+In this tutorial, you:
+
+> [!div class="checklist"]
+> * Upload data to Azure.
+> * Create a control script.
+> * Understand the new Azure Machine Learning concepts (passing parameters, datasets, datastores).
+> * Submit and run your training script.
+> * View your code output in the cloud.
+
+## Prerequisites
+
+You'll need the data that was downloaded in the previous tutorial. Make sure you have completed these steps:
+
+1. [Create the training script](tutorial-1st-experiment-sdk-train.md#create-training-scripts).
+1. [Test locally](tutorial-1st-experiment-sdk-train.md#test-locally).
+
+## Adjust the training script
+
+By now you have your training script (get-started/src/train.py) running in Azure Machine Learning, and you can monitor the model performance. Let's parameterize the training script by introducing arguments. Using arguments will allow you to easily compare different hyperparameters.
+
+Our training script is currently set to download the CIFAR10 dataset on each run. The following Python code has been adjusted to read the data from a directory.
+
+>[!NOTE]
+> The use of `argparse` parameterizes the script.
+
+1. Open *train.py* and replace it with this code:
+
+ ```python
+ import os
+ import argparse
+ import torch
+ import torch.optim as optim
+ import torchvision
+ import torchvision.transforms as transforms
+ from model import Net
+ from azureml.core import Run
+ run = Run.get_context()
+ if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--data_path',
+ type=str,
+ help='Path to the training data'
+ )
+ parser.add_argument(
+ '--learning_rate',
+ type=float,
+ default=0.001,
+ help='Learning rate for SGD'
+ )
+ parser.add_argument(
+ '--momentum',
+ type=float,
+ default=0.9,
+ help='Momentum for SGD'
+ )
+ args = parser.parse_args()
+ print("===== DATA =====")
+ print("DATA PATH: " + args.data_path)
+ print("LIST FILES IN DATA PATH...")
+ print(os.listdir(args.data_path))
+ print("================")
+ # prepare DataLoader for CIFAR10 data
+ transform = transforms.Compose([
+ transforms.ToTensor(),
+ transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
+ ])
+ trainset = torchvision.datasets.CIFAR10(
+ root=args.data_path,
+ train=True,
+ download=False,
+ transform=transform,
+ )
+ trainloader = torch.utils.data.DataLoader(
+ trainset,
+ batch_size=4,
+ shuffle=True,
+ num_workers=2
+ )
+ # define convolutional network
+ net = Net()
+ # set up pytorch loss / optimizer
+ criterion = torch.nn.CrossEntropyLoss()
+ optimizer = optim.SGD(
+ net.parameters(),
+ lr=args.learning_rate,
+ momentum=args.momentum,
+ )
+ # train the network
+ for epoch in range(2):
+ running_loss = 0.0
+ for i, data in enumerate(trainloader, 0):
+ # unpack the data
+ inputs, labels = data
+ # zero the parameter gradients
+ optimizer.zero_grad()
+ # forward + backward + optimize
+ outputs = net(inputs)
+ loss = criterion(outputs, labels)
+ loss.backward()
+ optimizer.step()
+ # print statistics
+ running_loss += loss.item()
+ if i % 2000 == 1999:
+ loss = running_loss / 2000
+ run.log('loss', loss) # log loss metric to AML
+ print(f'epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}')
+ running_loss = 0.0
+ print('Finished Training')
+ ```
+
+1. **Save** the file. Close the tab if you wish.
+
+### Understanding the code changes
+
+The code in `train.py` has used the `argparse` library to set up `data_path`, `learning_rate`, and `momentum`.
+
+```python
+# .... other code
+parser = argparse.ArgumentParser()
+parser.add_argument('--data_path', type=str, help='Path to the training data')
+parser.add_argument('--learning_rate', type=float, default=0.001, help='Learning rate for SGD')
+parser.add_argument('--momentum', type=float, default=0.9, help='Momentum for SGD')
+args = parser.parse_args()
+# ... other code
+```
+
+Also, the `train.py` script was adapted to update the optimizer to use the user-defined parameters:
+
+```python
+optimizer = optim.SGD(
+ net.parameters(),
+ lr=args.learning_rate, # get learning rate from command-line argument
+ momentum=args.momentum, # get momentum from command-line argument
+)
+```
++
+## Upload the data to Azure
+
+To run this script in Azure Machine Learning, you need to make your training data available in Azure. Your Azure Machine Learning workspace comes equipped with a _default_ datastore. This is an Azure Blob Storage account where you can store your training data.
+
+>[!NOTE]
+> Azure Machine Learning allows you to connect other cloud-based datastores that store your data. For more details, see the [datastores documentation](./concept-data.md).
+
+1. Create a new Python control script in the **get-started** folder (make sure it is in **get-started**, *not* in the **/src** folder). Name the script *upload-data.py* and copy this code into the file:
+
+ ```python
+ # upload-data.py
+ from azureml.core import Workspace
+ from azureml.core import Dataset
+ from azureml.data.datapath import DataPath
+
+ ws = Workspace.from_config()
+ datastore = ws.get_default_datastore()
+ Dataset.File.upload_directory(src_dir='data',
+ target=DataPath(datastore, "datasets/cifar10")
+ )
+ ```
+
+ The `target_path` value specifies the path on the datastore where the CIFAR10 data will be uploaded.
+
+ >[!TIP]
+ > While you're using Azure Machine Learning to upload the data, you can use [Azure Storage Explorer](https://azure.microsoft.com/features/storage-explorer/) to upload ad hoc files. If you need an ETL tool, you can use [Azure Data Factory](../../data-factory/introduction.md) to ingest your data into Azure.
+
+2. Select **Save and run script in terminal** to run the *upload-data.py* script.
+
+ You should see the following standard output:
+
+ ```txt
+ Uploading ./data\cifar-10-batches-py\data_batch_2
+ Uploaded ./data\cifar-10-batches-py\data_batch_2, 4 files out of an estimated total of 9
+ .
+ .
+ Uploading ./data\cifar-10-batches-py\data_batch_5
+ Uploaded ./data\cifar-10-batches-py\data_batch_5, 9 files out of an estimated total of 9
+ Uploaded 9 files
+ ```
+
+## Create a control script
+
+As you've done previously, create a new Python control script called *run-pytorch-data.py* in the **get-started** folder:
+
+```python
+# run-pytorch-data.py
+from azureml.core import Workspace
+from azureml.core import Experiment
+from azureml.core import Environment
+from azureml.core import ScriptRunConfig
+from azureml.core import Dataset
+
+if __name__ == "__main__":
+ ws = Workspace.from_config()
+ datastore = ws.get_default_datastore()
+ dataset = Dataset.File.from_files(path=(datastore, 'datasets/cifar10'))
+
+ experiment = Experiment(workspace=ws, name='day1-experiment-data')
+
+ config = ScriptRunConfig(
+ source_directory='./src',
+ script='train.py',
+ compute_target='cpu-cluster',
+ arguments=[
+ '--data_path', dataset.as_named_input('input').as_mount(),
+ '--learning_rate', 0.003,
+ '--momentum', 0.92],
+ )
+
+ # set up pytorch environment
+ env = Environment.from_conda_specification(
+ name='pytorch-env',
+ file_path='pytorch-env.yml'
+ )
+ config.run_config.environment = env
+
+ run = experiment.submit(config)
+ aml_url = run.get_portal_url()
+ print("Submitted to compute cluster. Click link below")
+ print("")
+ print(aml_url)
+```
+
+> [!TIP]
+> If you used a different name when you created your compute cluster, make sure to adjust the name in the code `compute_target='cpu-cluster'` as well.
+
+### Understand the code changes
+
+The control script is similar to the one from [part 3 of this series](tutorial-1st-experiment-sdk-train.md), with the following new lines:
+
+ :::column span="":::
+ `dataset = Dataset.File.from_files( ... )`
+ :::column-end:::
+ :::column span="2":::
+ A [dataset](/python/api/azureml-core/azureml.core.dataset.dataset) is used to reference the data you uploaded to Azure Blob Storage. Datasets are an abstraction layer on top of your data that are designed to improve reliability and trustworthiness.
+ :::column-end:::
+ :::column span="":::
+ `config = ScriptRunConfig(...)`
+ :::column-end:::
+ :::column span="2":::
+ [ScriptRunConfig](/python/api/azureml-core/azureml.core.scriptrunconfig) is modified to include a list of arguments that will be passed into `train.py`. The `dataset.as_named_input('input').as_mount()` argument means the specified directory will be _mounted_ to the compute target.
+ :::column-end:::
+
+## Submit the run to Azure Machine Learning
+
+Select **Save and run script in terminal** to run the *run-pytorch-data.py* script. This run will train the model on the compute cluster using the data you uploaded.
+
+This code will print a URL to the experiment in the Azure Machine Learning studio. If you go to that link, you'll be able to see your code running.
+++
+### Inspect the log file
+
+In the studio, go to the experiment job (by selecting the previous URL output) followed by **Outputs + logs**. Select the `std_log.txt` file. Scroll down through the log file until you see the following output:
+
+```txt
+Processing 'input'.
+Processing dataset FileDataset
+{
+ "source": [
+ "('workspaceblobstore', 'datasets/cifar10')"
+ ],
+ "definition": [
+ "GetDatastoreFiles"
+ ],
+ "registration": {
+ "id": "XXXXX",
+ "name": null,
+ "version": null,
+ "workspace": "Workspace.create(name='XXXX', subscription_id='XXXX', resource_group='X')"
+ }
+}
+Mounting input to /tmp/tmp9kituvp3.
+Mounted input to /tmp/tmp9kituvp3 as folder.
+Exit __enter__ of DatasetContextManager
+Entering Job History Context Manager.
+Current directory: /mnt/batch/tasks/shared/LS_root/jobs/dsvm-aml/azureml/tutorial-session-3_1600171983_763c5381/mounts/workspaceblobstore/azureml/tutorial-session-3_1600171983_763c5381
+Preparing to call script [ train.py ] with arguments: ['--data_path', '$input', '--learning_rate', '0.003', '--momentum', '0.92']
+After variable expansion, calling script [ train.py ] with arguments: ['--data_path', '/tmp/tmp9kituvp3', '--learning_rate', '0.003', '--momentum', '0.92']
+
+Script type = None
+===== DATA =====
+DATA PATH: /tmp/tmp9kituvp3
+LIST FILES IN DATA PATH...
+['cifar-10-batches-py', 'cifar-10-python.tar.gz']
+```
+
+Notice:
+
+- Azure Machine Learning has mounted Blob Storage to the compute cluster automatically for you.
+- The ``dataset.as_named_input('input').as_mount()`` used in the control script resolves to the mount point.
++
+## Clean up resources
+
+If you plan to continue now to another tutorial, or to start your own training jobs, skip to [Next steps](#next-steps).
+
+### Stop compute instance
+
+If you're not going to use it now, stop the compute instance:
+
+1. In the studio, on the left, select **Compute**.
+1. In the top tabs, select **Compute instances**
+1. Select the compute instance in the list.
+1. On the top toolbar, select **Stop**.
++
+### Delete all resources
++
+You can also keep the resource group but delete a single workspace. Display the workspace properties and select **Delete**.
+
+## Next steps
+
+In this tutorial, we saw how to upload data to Azure by using `Datastore`. The datastore served as cloud storage for your workspace, giving you a persistent and flexible place to keep your data.
+
+You saw how to modify your training script to accept a data path via the command line. By using `Dataset`, you were able to mount a directory to the remote job.
+
+Now that you have a model, learn:
+
+> [!div class="nextstepaction"]
+> [How to deploy MLflow models](how-to-deploy-mlflow-models.md).
machine-learning Tutorial 1St Experiment Hello World https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/machine-learning/v1/tutorial-1st-experiment-hello-world.md
+
+ Title: 'Tutorial: Get started with a Python script (v1)'
+
+description: Get started with your first Python script in Azure Machine Learning, with SDK v1. This is part 1 of a three-part getting-started series.
+++++++ Last updated : 07/29/2022+++
+# Tutorial: Get started with a Python script in Azure Machine Learning (SDK v1, part 1 of 3)
++
+> [!div class="op_single_selector" title1="Select the version of Azure Machine Learning SDK you are using:"]
+> * [v1](tutorial-1st-experiment-hello-world.md)
+> * [v2 (preview)](../tutorial-1st-experiment-hello-world.md)
+
+In this tutorial, you run your first Python script in the cloud with Azure Machine Learning. This tutorial is *part 1 of a three-part tutorial series*.
+
+This tutorial avoids the complexity of training a machine learning model. You will run a "Hello World" Python script in the cloud. You will learn how a control script is used to configure and create a run in Azure Machine Learning.
+
+In this tutorial, you will:
+
+> [!div class="checklist"]
+> * Create and run a "Hello world!" Python script.
+> * Create a Python control script to submit "Hello world!" to Azure Machine Learning.
+> * Understand the Azure Machine Learning concepts in the control script.
+> * Submit and run the "Hello world!" script.
+> * View your code output in the cloud.
+
+## Prerequisites
+
+- Complete [Quickstart: Set up your workspace to get started with Azure Machine Learning](../quickstart-create-resources.md) to create a workspace, compute instance, and compute cluster to use in this tutorial series.
+
+## Create and run a Python script
+
+This tutorial will use the compute instance as your development computer. First create a few folders and the script:
+
+1. Sign in to the [Azure Machine Learning studio](https://ml.azure.com) and select your workspace if prompted.
+1. On the left, select **Notebooks**
+1. In the **Files** toolbar, select **+**, then select **Create new folder**.
+ :::image type="content" source="../media/tutorial-1st-experiment-hello-world/create-folder.png" alt-text="Screenshot shows create a new folder tool in toolbar.":::
+1. Name the folder **get-started**.
+1. To the right of the folder name, use the **...** to create another folder under **get-started**.
+ :::image type="content" source="../media/tutorial-1st-experiment-hello-world/create-sub-folder.png" alt-text="Screenshot shows create a subfolder menu.":::
+1. Name the new folder **src**. Use the **Edit location** link if the file location is not correct.
+1. To the right of the **src** folder, use the **...** to create a new file in the **src** folder.
+1. Name your file *hello.py*. Switch the **File type** to *Python (*.py)*.
+
+Copy this code into your file:
+
+```python
+# src/hello.py
+print("Hello world!")
+```
+
+Your project folder structure will now look like:
+++
+### Test your script
+
+You can run your code locally, which in this case means on the compute instance. Running code locally has the benefit of interactive debugging of code.
+
+If you have previously stopped your compute instance, start it now with the **Start compute** tool to the right of the compute dropdown. Wait about a minute for state to change to *Running*.
++
+Select **Save and run script in terminal** to run the script.
++
+You'll see the output of the script in the terminal window that opens. Close the tab and select **Terminate** to close the session.
+
+## Create a control script
+
+A *control script* allows you to run your `hello.py` script on different compute resources. You use the control script to control how and where your machine learning code is run.
+
+Select the **...** at the end of **get-started** folder to create a new file. Create a Python file called *run-hello.py* and copy/paste the following code into that file:
+
+```python
+# get-started/run-hello.py
+from azureml.core import Workspace, Experiment, Environment, ScriptRunConfig
+
+ws = Workspace.from_config()
+experiment = Experiment(workspace=ws, name='day1-experiment-hello')
+
+config = ScriptRunConfig(source_directory='./src', script='hello.py', compute_target='cpu-cluster')
+
+run = experiment.submit(config)
+aml_url = run.get_portal_url()
+print(aml_url)
+```
+
+> [!TIP]
+> If you used a different name when you created your compute cluster, make sure to adjust the name in the code `compute_target='cpu-cluster'` as well.
+
+### Understand the code
+
+Here's a description of how the control script works:
+
+ :::column span="":::
+ `ws = Workspace.from_config()`
+ :::column-end:::
+ :::column span="2":::
+ [Workspace](/python/api/azureml-core/azureml.core.workspace.workspace) connects to your Azure Machine Learning workspace, so that you can communicate with your Azure Machine Learning resources.
+ :::column-end:::
+ :::column span="":::
+ `experiment = Experiment( ... )`
+ :::column-end:::
+ :::column span="2":::
+ [Experiment](/python/api/azureml-core/azureml.core.experiment.experiment) provides a simple way to organize multiple jobs under a single name. Later you can see how experiments make it easy to compare metrics between dozens of jobs.
+ :::column-end:::
+ :::column span="":::
+ `config = ScriptRunConfig( ... )`
+ :::column-end:::
+ :::column span="2":::
+ [ScriptRunConfig](/python/api/azureml-core/azureml.core.scriptrunconfig) wraps your `hello.py` code and passes it to your workspace. As the name suggests, you can use this class to _configure_ how you want your _script_ to _run_ in Azure Machine Learning. It also specifies what compute target the script will run on. In this code, the target is the compute cluster that you created in the [setup tutorial](../quickstart-create-resources.md).
+ :::column-end:::
+ :::column span="":::
+ `run = experiment.submit(config)`
+ :::column-end:::
+ :::column span="2":::
+ Submits your script. This submission is called a [run](/python/api/azureml-core/azureml.core.run%28class%29). In v2, it has been renamed to a job. A run/job encapsulates a single execution of your code. Use a job to monitor the script progress, capture the output, analyze the results, visualize metrics, and more.
+ :::column-end:::
+ :::column span="":::
+ `aml_url = run.get_portal_url()`
+ :::column-end:::
+ :::column span="2":::
+ The `run` object provides a handle on the execution of your code. Monitor its progress from the Azure Machine Learning studio with the URL that's printed from the Python script.
+ :::column-end:::
++
+## Submit and run your code in the cloud
+
+1. Select **Save and run script in terminal** to run your control script, which in turn runs `hello.py` on the compute cluster that you created in the [setup tutorial](../quickstart-create-resources.md).
+
+1. In the terminal, you may be asked to sign in to authenticate. Copy the code and follow the link to complete this step.
+
+1. Once you're authenticated, you'll see a link in the terminal. Select the link to view the job.
+
+ [!INCLUDE [amlinclude-info](../../../includes/machine-learning-py38-ignore.md)]
+
+## View the output
+
+1. In the page that opens, you'll see the job status.
+1. When the status of the job is **Completed**, select **Output + logs** at the top of the page.
+1. Select **std_log.txt** to view the output of your job.
+
+## Monitor your code in the cloud in the studio
+
+The output from your script will contain a link to the studio that looks something like this:
+`https://ml.azure.com/experiments/hello-world/runs/<run-id>?wsid=/subscriptions/<subscription-id>/resourcegroups/<resource-group>/workspaces/<workspace-name>`.
+
+Follow the link. At first, you'll see a status of **Queued** or **Preparing**. The very first run will take 5-10 minutes to complete. This is because the following occurs:
+
+* A docker image is built in the cloud
+* The compute cluster is resized from 0 to 1 node
+* The docker image is downloaded to the compute.
+
+Subsequent jobs are much quicker (~15 seconds) as the docker image is cached on the compute. You can test this by resubmitting the code below after the first job has completed.
+
+Wait about 10 minutes. You'll see a message that the job has completed. Then use **Refresh** to see the status change to *Completed*. Once the job completes, go to the **Outputs + logs** tab. There you can see a `std_log.txt` file that looks like this:
+
+```txt
+ 1: [2020-08-04T22:15:44.407305] Entering context manager injector.
+ 2: [context_manager_injector.py] Command line Options: Namespace(inject=['ProjectPythonPath:context_managers.ProjectPythonPath', 'RunHistory:context_managers.RunHistory', 'TrackUserError:context_managers.TrackUserError', 'UserExceptions:context_managers.UserExceptions'], invocation=['hello.py'])
+ 3: Starting the daemon thread to refresh tokens in background for process with pid = 31263
+ 4: Entering Job History Context Manager.
+ 5: Preparing to call script [ hello.py ] with arguments: []
+ 6: After variable expansion, calling script [ hello.py ] with arguments: []
+ 7:
+ 8: Hello world!
+ 9: Starting the daemon thread to refresh tokens in background for process with pid = 31263
+10:
+11:
+12: The experiment completed successfully. Finalizing job...
+13: Logging experiment finalizing status in history service.
+14: [2020-08-04T22:15:46.541334] TimeoutHandler __init__
+15: [2020-08-04T22:15:46.541396] TimeoutHandler __enter__
+16: Cleaning up all outstanding Job operations, waiting 300.0 seconds
+17: 1 items cleaning up...
+18: Cleanup took 0.1812913417816162 seconds
+19: [2020-08-04T22:15:47.040203] TimeoutHandler __exit__
+```
+
+On line 8, you see the "Hello world!" output.
+
+The `70_driver_log.txt` file contains the standard output from a job. This file can be useful when you're debugging remote jobs in the cloud.
++
+## Next steps
+
+In this tutorial, you took a simple "Hello world!" script and ran it on Azure. You saw how to connect to your Azure Machine Learning workspace, create an experiment, and submit your `hello.py` code to the cloud.
+
+In the next tutorial, you build on these learnings by running something more interesting than `print("Hello world!")`.
+
+> [!div class="nextstepaction"]
+> [Tutorial: Train a model](tutorial-1st-experiment-sdk-train.md)
+
+>[!NOTE]
+> If you want to finish the tutorial series here and not progress to the next step, remember to [clean up your resources](tutorial-1st-experiment-bring-data.md#clean-up-resources).
machine-learning Tutorial 1St Experiment Sdk Train https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/machine-learning/v1/tutorial-1st-experiment-sdk-train.md
+
+ Title: "Tutorial: Train a first Python machine learning model (SDK v1)"
+
+description: How to train a machine learning model in Azure Machine Learning, with SDK v1. This is part 2 of a three-part getting-started series.
+++++++ Last updated : 07/29/2022+++
+# Tutorial: Train your first machine learning model (SDK v1, part 2 of 3)
++
+> [!div class="op_single_selector" title1="Select the version of Azure Machine Learning SDK you are using:"]
+> * [v1](tutorial-1st-experiment-sdk-train.md)
+> * [v2 (preview)](../tutorial-1st-experiment-sdk-train.md)
+
+This tutorial shows you how to train a machine learning model in Azure Machine Learning. This tutorial is *part 2 of a three-part tutorial series*.
+
+ In [Part 1: Run "Hello world!"](tutorial-1st-experiment-hello-world.md) of the series, you learned how to use a control script to run a job in the cloud.
+
+In this tutorial, you take the next step by submitting a script that trains a machine learning model. This example will help you understand how Azure Machine Learning eases consistent behavior between local debugging and remote runs.
+
+In this tutorial, you:
+
+> [!div class="checklist"]
+> * Create a training script.
+> * Use Conda to define an Azure Machine Learning environment.
+> * Create a control script.
+> * Understand Azure Machine Learning classes (`Environment`, `Run`, `Metrics`).
+> * Submit and run your training script.
+> * View your code output in the cloud.
+> * Log metrics to Azure Machine Learning.
+> * View your metrics in the cloud.
+
+## Prerequisites
+
+- Completion of [part 1](tutorial-1st-experiment-hello-world.md) of the series.
+
+## Create training scripts
+
+First you define the neural network architecture in a *model.py* file. All your training code will go into the `src` subdirectory, including *model.py*.
+
+The training code is taken from [this introductory example](https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html) from PyTorch. Note that the Azure Machine Learning concepts apply to any machine learning code, not just PyTorch.
+
+1. Create a *model.py* file in the **src** subfolder. Copy this code into the file:
+
+ ```python
+ import torch.nn as nn
+ import torch.nn.functional as F
+
+
+ class Net(nn.Module):
+ def __init__(self):
+ super(Net, self).__init__()
+ self.conv1 = nn.Conv2d(3, 6, 5)
+ self.pool = nn.MaxPool2d(2, 2)
+ self.conv2 = nn.Conv2d(6, 16, 5)
+ self.fc1 = nn.Linear(16 * 5 * 5, 120)
+ self.fc2 = nn.Linear(120, 84)
+ self.fc3 = nn.Linear(84, 10)
+
+ def forward(self, x):
+ x = self.pool(F.relu(self.conv1(x)))
+ x = self.pool(F.relu(self.conv2(x)))
+ x = x.view(-1, 16 * 5 * 5)
+ x = F.relu(self.fc1(x))
+ x = F.relu(self.fc2(x))
+ x = self.fc3(x)
+ return x
+ ```
+1. On the toolbar, select **Save** to save the file. Close the tab if you wish.
+
+1. Next, define the training script, also in the **src** subfolder. This script downloads the CIFAR10 dataset by using PyTorch `torchvision.dataset` APIs, sets up the network defined in *model.py*, and trains it for two epochs by using standard SGD and cross-entropy loss.
+
+ Create a *train.py* script in the **src** subfolder:
+
+ ```python
+ import torch
+ import torch.optim as optim
+ import torchvision
+ import torchvision.transforms as transforms
+
+ from model import Net
+
+ # download CIFAR 10 data
+ trainset = torchvision.datasets.CIFAR10(
+ root="../data",
+ train=True,
+ download=True,
+ transform=torchvision.transforms.ToTensor(),
+ )
+ trainloader = torch.utils.data.DataLoader(
+ trainset, batch_size=4, shuffle=True, num_workers=2
+ )
+
+
+ if __name__ == "__main__":
+
+ # define convolutional network
+ net = Net()
+
+ # set up pytorch loss / optimizer
+ criterion = torch.nn.CrossEntropyLoss()
+ optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
+
+ # train the network
+ for epoch in range(2):
+
+ running_loss = 0.0
+ for i, data in enumerate(trainloader, 0):
+ # unpack the data
+ inputs, labels = data
+
+ # zero the parameter gradients
+ optimizer.zero_grad()
+
+ # forward + backward + optimize
+ outputs = net(inputs)
+ loss = criterion(outputs, labels)
+ loss.backward()
+ optimizer.step()
+
+ # print statistics
+ running_loss += loss.item()
+ if i % 2000 == 1999:
+ loss = running_loss / 2000
+ print(f"epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}")
+ running_loss = 0.0
+
+ print("Finished Training")
+ ```
+
+1. You now have the following folder structure:
+
+ :::image type="content" source="../media/tutorial-1st-experiment-sdk-train/directory-structure.png" alt-text="Directory structure shows train.py in src subdirectory":::
++
+## Test locally
+
+Select **Save and run script in terminal** to run the *train.py* script directly on the compute instance.
+
+After the script completes, select **Refresh** above the file folders. You'll see the new data folder called **get-started/data** Expand this folder to view the downloaded data.
++
+## Create a Python environment
+
+Azure Machine Learning provides the concept of an [environment](/python/api/azureml-core/azureml.core.environment.environment) to represent a reproducible, versioned Python environment for running experiments. It's easy to create an environment from a local Conda or pip environment.
+
+First you'll create a file with the package dependencies.
+
+1. Create a new file in the **get-started** folder called `pytorch-env.yml`:
+
+ ```yml
+ name: pytorch-env
+ channels:
+ - defaults
+ - pytorch
+ dependencies:
+ - python=3.6.2
+ - pytorch
+ - torchvision
+ ```
+1. On the toolbar, select **Save** to save the file. Close the tab if you wish.
+
+## Create the control script
+
+The difference between the following control script and the one that you used to submit "Hello world!" is that you add a couple of extra lines to set the environment.
+
+Create a new Python file in the **get-started** folder called `run-pytorch.py`:
+
+```python
+# run-pytorch.py
+from azureml.core import Workspace
+from azureml.core import Experiment
+from azureml.core import Environment
+from azureml.core import ScriptRunConfig
+
+if __name__ == "__main__":
+ ws = Workspace.from_config()
+ experiment = Experiment(workspace=ws, name='day1-experiment-train')
+ config = ScriptRunConfig(source_directory='./src',
+ script='train.py',
+ compute_target='cpu-cluster')
+
+ # set up pytorch environment
+ env = Environment.from_conda_specification(
+ name='pytorch-env',
+ file_path='pytorch-env.yml'
+ )
+ config.run_config.environment = env
+
+ run = experiment.submit(config)
+
+ aml_url = run.get_portal_url()
+ print(aml_url)
+```
+
+> [!TIP]
+> If you used a different name when you created your compute cluster, make sure to adjust the name in the code `compute_target='cpu-cluster'` as well.
+
+### Understand the code changes
+
+ :::column span="":::
+ `env = ...`
+ :::column-end:::
+ :::column span="2":::
+ References the dependency file you created above.
+ :::column-end:::
+ :::column span="":::
+ `config.run_config.environment = env`
+ :::column-end:::
+ :::column span="2":::
+ Adds the environment to [ScriptRunConfig](/python/api/azureml-core/azureml.core.scriptrunconfig).
+ :::column-end:::
+
+## Submit the run to Azure Machine Learning
+
+1. Select **Save and run script in terminal** to run the *run-pytorch.py* script.
+
+1. You'll see a link in the terminal window that opens. Select the link to view the job.
+
+ [!INCLUDE [amlinclude-info](../../../includes/machine-learning-py38-ignore.md)]
+
+### View the output
+
+1. In the page that opens, you'll see the job status. The first time you run this script, Azure Machine Learning will build a new Docker image from your PyTorch environment. The whole job might take around 10 minutes to complete. This image will be reused in future jobs to make them run much quicker.
+1. You can see view Docker build logs in the Azure Machine Learning studio. Select the **Outputs + logs** tab, and then select **20_image_build_log.txt**.
+1. When the status of the job is **Completed**, select **Output + logs**.
+1. Select **std_log.txt** to view the output of your job.
+
+```txt
+Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ../data/cifar-10-python.tar.gz
+Extracting ../data/cifar-10-python.tar.gz to ../data
+epoch=1, batch= 2000: loss 2.19
+epoch=1, batch= 4000: loss 1.82
+epoch=1, batch= 6000: loss 1.66
+...
+epoch=2, batch= 8000: loss 1.51
+epoch=2, batch=10000: loss 1.49
+epoch=2, batch=12000: loss 1.46
+Finished Training
+```
+
+If you see an error `Your total snapshot size exceeds the limit`, the **data** folder is located in the `source_directory` value used in `ScriptRunConfig`.
+
+Select the **...** at the end of the folder, then select **Move** to move **data** to the **get-started** folder.
++
+## Log training metrics
+
+Now that you have a model training in Azure Machine Learning, start tracking some performance metrics.
+
+The current training script prints metrics to the terminal. Azure Machine Learning provides a mechanism for logging metrics with more functionality. By adding a few lines of code, you gain the ability to visualize metrics in the studio and to compare metrics between multiple jobs.
+
+### Modify *train.py* to include logging
+
+1. Modify your *train.py* script to include two more lines of code:
+
+ ```python
+ import torch
+ import torch.optim as optim
+ import torchvision
+ import torchvision.transforms as transforms
+ from model import Net
+ from azureml.core import Run
+
+
+ # ADDITIONAL CODE: get run from the current context
+ run = Run.get_context()
+
+ # download CIFAR 10 data
+ trainset = torchvision.datasets.CIFAR10(
+ root='./data',
+ train=True,
+ download=True,
+ transform=torchvision.transforms.ToTensor()
+ )
+ trainloader = torch.utils.data.DataLoader(
+ trainset,
+ batch_size=4,
+ shuffle=True,
+ num_workers=2
+ )
+
+
+ if __name__ == "__main__":
+ # define convolutional network
+ net = Net()
+ # set up pytorch loss / optimizer
+ criterion = torch.nn.CrossEntropyLoss()
+ optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)
+ # train the network
+ for epoch in range(2):
+ running_loss = 0.0
+ for i, data in enumerate(trainloader, 0):
+ # unpack the data
+ inputs, labels = data
+ # zero the parameter gradients
+ optimizer.zero_grad()
+ # forward + backward + optimize
+ outputs = net(inputs)
+ loss = criterion(outputs, labels)
+ loss.backward()
+ optimizer.step()
+ # print statistics
+ running_loss += loss.item()
+ if i % 2000 == 1999:
+ loss = running_loss / 2000
+ # ADDITIONAL CODE: log loss metric to AML
+ run.log('loss', loss)
+ print(f'epoch={epoch + 1}, batch={i + 1:5}: loss {loss:.2f}')
+ running_loss = 0.0
+ print('Finished Training')
+ ```
+
+2. **Save** this file, then close the tab if you wish.
+
+#### Understand the additional two lines of code
+
+In *train.py*, you access the run object from _within_ the training script itself by using the `Run.get_context()` method and use it to log metrics:
+
+```python
+# ADDITIONAL CODE: get run from the current context
+run = Run.get_context()
+
+...
+# ADDITIONAL CODE: log loss metric to AML
+run.log('loss', loss)
+```
+
+Metrics in Azure Machine Learning are:
+
+- Organized by experiment and run, so it's easy to keep track of and
+compare metrics.
+- Equipped with a UI so you can visualize training performance in the studio.
+- Designed to scale, so you keep these benefits even as you run hundreds of experiments.
+
+### Update the Conda environment file
+
+The `train.py` script just took a new dependency on `azureml.core`. Update `pytorch-env.yml` to reflect this change:
+
+```yml
+name: pytorch-env
+channels:
+ - defaults
+ - pytorch
+dependencies:
+ - python=3.6.2
+ - pytorch
+ - torchvision
+ - pip
+ - pip:
+ - azureml-sdk
+```
+
+Make sure you save this file before you submit the run.
+
+### Submit the run to Azure Machine Learning
+
+Select the tab for the *run-pytorch.py* script, then select **Save and run script in terminal** to re-run the *run-pytorch.py* script. Make sure you've saved your changes to `pytorch-env.yml` first.
+
+This time when you visit the studio, go to the **Metrics** tab where you can now see live updates on the model training loss! It may take a 1 to 2 minutes before the training begins.
++
+## Next steps
+
+In this session, you upgraded from a basic "Hello world!" script to a more realistic training script that required a specific Python environment to run. You saw how to use curated Azure Machine Learning environments. Finally, you saw how in a few lines of code you can log metrics to Azure Machine Learning.
+
+There are other ways to create Azure Machine Learning environments, including [from a pip requirements.txt](/python/api/azureml-core/azureml.core.environment.environment#from-pip-requirements-name--file-path-) file or [from an existing local Conda environment](/python/api/azureml-core/azureml.core.environment.environment#from-existing-conda-environment-name--conda-environment-name-).
+
+In the next session, you'll see how to work with data in Azure Machine Learning by uploading the CIFAR10 dataset to Azure.
+
+> [!div class="nextstepaction"]
+> [Tutorial: Bring your own data](tutorial-1st-experiment-bring-data.md)
+
+>[!NOTE]
+> If you want to finish the tutorial series here and not progress to the next step, remember to [clean up your resources](tutorial-1st-experiment-bring-data.md#clean-up-resources).
managed-instance-apache-cassandra Configure Hybrid Cluster https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/managed-instance-apache-cassandra/configure-hybrid-cluster.md
ms.devlang: azurecli
# Quickstart: Configure a hybrid cluster with Azure Managed Instance for Apache Cassandra
-Azure Managed Instance for Apache Cassandra provides automated deployment and scaling operations for managed open-source Apache Cassandra datacenters. This service helps you accelerate hybrid scenarios and reduce ongoing maintenance.
+Azure Managed Instance for Apache Cassandra provides automated deployment and scaling operations for managed open-source Apache Cassandra datacenters. This service helps you accelerate hybrid scenarios and reduce ongoing maintenance.
This quickstart demonstrates how to use the Azure CLI commands to configure a hybrid cluster. If you have existing datacenters in an on-premises or self-hosted environment, you can use Azure Managed Instance for Apache Cassandra to add other datacenters to that cluster and maintain them.
This quickstart demonstrates how to use the Azure CLI commands to configure a hy
* [Azure Virtual Network](../virtual-network/virtual-networks-overview.md) with connectivity to your self-hosted or on-premises environment. For more information on connecting on premises environments to Azure, see the [Connect an on-premises network to Azure](/azure/architecture/reference-architectures/hybrid-networking/) article.
-## <a id="create-account"></a>Configure a hybrid cluster
+## <a id="configure-hybrid"></a>Configure a hybrid cluster
1. Sign in to the [Azure portal](https://portal.azure.com/) and navigate to your Virtual Network resource.
This quickstart demonstrates how to use the Azure CLI commands to configure a hy
> [!IMPORTANT] > If your existing Apache Cassandra cluster only has a single data center, and this is the first time a data center is being added, ensure that the `endpoint_snitch` parameter in `cassandra.yaml` is set to `GossipingPropertyFileSnitch`.
+ > [!IMPORTANT]
+ > If your existing application code is using QUORUM for consistency, you should ensure that **prior to changing the replication settings in the step below**, your existing application code is using **LOCAL_QUORUM** to connect to your existing cluster (otherwise live updates will fail after you change replication settings in the below step). Once the replication strategy has been changed, you can revert to QUORUM if preferred.
+
+ 1. Finally, use the following CQL query to update the replication strategy in each keyspace to include all datacenters across the cluster: ```bash ALTER KEYSPACE "ks" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}; ```
- You also need to update the password tables:
+ You also need to update several system tables:
```bash ALTER KEYSPACE "system_auth" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}
+ ALTER KEYSPACE "system_distributed" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}
+ ALTER KEYSPACE "system_traces" WITH REPLICATION = {'class': 'NetworkTopologyStrategy', 'on-premise-dc': 3, 'managed-instance-dc': 3}
``` > [!IMPORTANT]
- > If you are using hybrid cluster as a method of migrating historic data into the new Azure Managed Instance Cassandra data centers, ensure that you disable automatic repairs:
- > ```azurecli-interactive
- > az managed-cassandra cluster update --cluster-name --resource-group--repair-enabled false
- > ```
- > Then run `nodetool repair --full` on all the nodes in your existing cluster's data center. You should run this **only after all of the prior steps have been taken**. This should ensure that all historical data is replicated to your new data centers in Azure Managed Instance for Apache Cassandra. If you have a very large amount of data in your existing cluster, it may be necessary to run the repairs at the keyspace or even table level - see [here](https://cassandra.apache.org/doc/latest/cassandra/operating/repair.html) for more details on running repairs in Cassandra. Prior to changing the replication settings, you should also make sure that any application code that connects to your existing Cassandra cluster is using LOCAL_QUORUM. You should leave it at this setting during the migration (it can be switched back afterwards if required). After the migration is completed, you can enable automatic repair again, and point your application code to the new Cassandra Managed Instance data center's seed nodes (and revert the quorum settings if preferred).
- >
- > Finally, to decommission your old data center:
- >
- > - Run `ALTER KEYSPACE` for each keyspace, removing the old data center.
- > - We recommend running `nodetool repair` for each keyspace as well, before the below step.
- > - Run [nodetool decommision](https://cassandra.apache.org/doc/latest/cassandra/operating/topo_changes.html#removing-nodes) for each on premise data center node.
+ > If the data center(s) in your existing cluster do not enforce [client-to-node encryption (SSL)](https://cassandra.apache.org/doc/3.11/cassandra/operating/security.html#client-to-node-encryption), and you intend for your application code to connect directly to Cassandra Managed Instance, you will also need to enable SSL in your application code.
++
+## <a id="hybrid-real-time-migration"></a>Use hybrid cluster for real-time migration
+
+The above instructions provide guidance for configuring a hybrid cluster. However, this is also a great way of achieving a seamless zero-downtime migration. If you have an on-premise or other Cassandra environment that you want to decommission with zero downtime, in favour of running your workload in Azure Managed Instance for Apache Cassandra, the following steps must be completed in this order:
+
+1. Configure hybrid cluster - follow the instructions above.
+1. Temporarily disable automatic repairs in Azure Managed Instance for Apache Cassandra for the duration of the migration:
+
+ ```azurecli-interactive
+ az managed-cassandra cluster update --cluster-name --resource-group--repair-enabled false
+ ```
+
+1. Run `nodetool repair --full` on each node in your existing cluster's data center. You should run this **only after all of the prior steps have been taken**. This should ensure that all historical data is replicated to your new data centers in Azure Managed Instance for Apache Cassandra. For most installations you can only run one or two in parallel to not overload the cluster. You can monitor a particular repair run by checking `nodetool netsats` and `nodetool compactionstats` against the specific node. If you have a very large amount of data in your existing cluster, it may be necessary to run the repairs at the keyspace or even table level - see [here](https://cassandra.apache.org/doc/latest/cassandra/operating/repair.html) for more details on running repairs in Cassandra.
++ > [!NOTE] > To speed up repairs we advise (if system load permits it) to increase both stream throughput and compaction throughput as in the example below: >```azure-cli > az managed-cassandra cluster invoke-command --resource-group $resourceGroupName --cluster-name $clusterName --host $host --command-name nodetool --arguments "setstreamthroughput"="" "7000"="" >
- > az managed-cassandra cluster invoke-command --resource-group $resourceGroupName --cluster-name $clusterName --host $host --command-name nodetool --arguments "setcompactionthroughput"="" "960"=""
- >```
+ > az managed-cassandra cluster invoke-command --resource-group $resourceGroupName --cluster-name $clusterName --host $host --command-name nodetool --arguments "setcompactionthroughput"="" "960"=""
+
+1. Cut over your application code to point to the seed nodes in your new Azure Managed Instance for Apache Cassandra data center(s).
+
+ > [!IMPORTANT]
+ > As also mentioned in the hybrid setup instructions, if the data center(s) in your existing cluster do not enforce [client-to-node encryption (SSL)](https://cassandra.apache.org/doc/3.11/cassandra/operating/security.html#client-to-node-encryption), you will need to enable this in your application code, as Cassandra Managed Instance enforces this.
+
+1. Run nodetool repair **again** on all the nodes in your existing cluster's data center, in the same manner as in step 3 above (to ensure any deltas are replicated following application cut over).
+
+1. Run ALTER KEYSPACE for each keyspace, in the same manner as done earlier, but now removing your old data center(s).
+
+1. Run [nodetool decommission](https://cassandra.apache.org/doc/latest/cassandra/tools/nodetool/decommission.html) for each old data center node.
+
+1. Switch your application code back to quorum (if required/preferred).
+
+1. Re-enable automatic repairs:
+
+ ```azurecli-interactive
+ az managed-cassandra cluster update --cluster-name --resource-group--repair-enabled true
+ ```
## Troubleshooting
managed-instance-apache-cassandra Create Cluster Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/managed-instance-apache-cassandra/create-cluster-portal.md
If you don't have an Azure subscription, create a [free account](https://azure.m
## Update Cassandra configuration
-The service allows update to a limited set of Cassandra configurations on a datacenter via the portal or by [using CLI commands](manage-resources-cli.md#update-yaml). The following YAML settings are supported:
--- column_index_size_in_kb-- allocate_tokens_for_keyspace-- compaction_throughput_mb_per_sec-- read_request_timeout_in_ms-- range_request_timeout_in_ms-- aggregated_request_timeout_in_ms-- write_request_timeout_in_ms-- request_timeout_in_ms-- internode_compression-- batchlog_replay_throttle_in_kb-
-To update settings in the portal:
+The service allows update to Cassandra YAML configuration on a datacenter via the portal or by [using CLI commands](manage-resources-cli.md#update-yaml). To update settings in the portal:
1. Find `Cassandra Configuration` under settings. Highlight the data center whose configuration you want to change, and click update:
To update settings in the portal:
:::image type="content" source="./media/create-cluster-portal/update-config-3.png" alt-text="Screenshot of the updated Cassandra config." lightbox="./media/create-cluster-portal/update-config-3.png" border="true"::: > [!NOTE]
- > Only overridden Cassandra configuration values are shown in the portal.
+ > Only overridden Cassandra configuration values are shown in the portal.
+
+ > [!IMPORTANT]
+ > Ensure the Cassandra yaml settings you provide are appropriate for the version of Cassandra you have deployed. See [here](https://github.com/apache/cassandra/blob/cassandra-3.11/conf/cassandra.yaml) for Cassandra v3.11 settings and [here](https://github.com/apache/cassandra/blob/cassandra-4.0/conf/cassandra.yaml) for v4.0. The following YAML settings are **not** allowed to be updated:
+ >
+ > - cluster_name
+ > - seed_provider
+ > - initial_token
+ > - autobootstrap
+ > - client_ecncryption_options
+ > - server_encryption_options
+ > - transparent_data_encryption_options
+ > - audit_logging_options
+ > - authenticator
+ > - authorizer
+ > - role_manager
+ > - storage_port
+ > - ssl_storage_port
+ > - native_transport_port
+ > - native_transport_port_ssl
+ > - listen_address
+ > - listen_interface
+ > - broadcast_address
+ > - hints_directory
+ > - data_file_directories
+ > - commitlog_directory
+ > - cdc_raw_directory
+ > - saved_caches_directory
## Troubleshooting
managed-instance-apache-cassandra Manage Resources Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/managed-instance-apache-cassandra/manage-resources-cli.md
az managed-cassandra datacenter update \
### <a id="update-yaml"></a>Update Cassandra configuration
-Change Cassandra configuration on a datacenter by using the [az managed-cassandra datacenter update](/cli/azure/managed-cassandra/datacenter#az-managed-cassandra-datacenter-update) command. You will need to base64 encode the YAML fragment by using an [online tool](https://www.base64encode.org/). The following YAML settings are supported:
--- column_index_size_in_kb-- allocate_tokens_for_keyspace-- compaction_throughput_mb_per_sec-- read_request_timeout_in_ms-- range_request_timeout_in_ms-- aggregated_request_timeout_in_ms-- write_request_timeout_in_ms-- request_timeout_in_ms-- internode_compression-- batchlog_replay_throttle_in_kb
+Change Cassandra configuration on a datacenter by using the [az managed-cassandra datacenter update](/cli/azure/managed-cassandra/datacenter#az-managed-cassandra-datacenter-update) command. You will need to base64 encode the YAML fragment by using an [online tool](https://www.base64encode.org/).
For example, the following YAML fragment:
az managed-cassandra datacenter update \
--base64-encoded-cassandra-yaml-fragment $yamlFragment ```
+> [!IMPORTANT]
+> Ensure the Cassandra yaml settings you provide are appropriate for the version of Cassandra you have deployed. See [here](https://github.com/apache/cassandra/blob/cassandra-3.11/conf/cassandra.yaml) for Cassandra v3.11 settings and [here](https://github.com/apache/cassandra/blob/cassandra-4.0/conf/cassandra.yaml) for v4.0. The following YAML settings are **not** allowed to be updated:
+>
+> - cluster_name
+> - seed_provider
+> - initial_token
+> - autobootstrap
+> - client_ecncryption_options
+> - server_encryption_options
+> - transparent_data_encryption_options
+> - audit_logging_options
+> - authenticator
+> - authorizer
+> - role_manager
+> - storage_port
+> - ssl_storage_port
+> - native_transport_port
+> - native_transport_port_ssl
+> - listen_address
+> - listen_interface
+> - broadcast_address
+> - hints_directory
+> - data_file_directories
+> - commitlog_directory
+> - cdc_raw_directory
+> - saved_caches_directory
+++ ### <a id="get-datacenters-cluster"></a>Get the datacenters in a cluster Get datacenters in a cluster by using the [az managed-cassandra datacenter list](/cli/azure/managed-cassandra/datacenter#az-managed-cassandra-datacenter-list) command:
network-watcher Network Watcher Troubleshoot Manage Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/network-watcher/network-watcher-troubleshoot-manage-cli.md
The action text provides general guidance on how to resolve the issue. If an act
For instructions on downloading files from azure storage accounts, refer to [Get started with Azure Blob storage using .NET](../storage/blobs/storage-quickstart-blobs-dotnet.md). Another tool that can be used is Storage Explorer. More information about Storage Explorer can be found here at the following link: [Storage Explorer](https://storageexplorer.com/)
+## Azure CLI troubleshooting
++ ## Next steps If settings have been changed that stop VPN connectivity, see [Manage Network Security Groups](../virtual-network/manage-network-security-group.md) to track down the network security group and security rules that may be in question.
orbital Downlink Aqua https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/orbital/downlink-aqua.md
Sign in to the [Azure portal - Orbital Preview](https://aka.ms/orbital/portal).
- Ensure that the VM has at least one standard public IP 3. Create a tmpfs on the virtual machine. This virtual machine is where the data will be written to in order to avoid slow writes to disk: ```console
+sudo mkdir /media/aqua
sudo mount -t tmpfs -o size=28G tmpfs /media/aqua ``` 4. Ensure that SOCAT is installed on the machine:
payment-hsm Getting Started https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/payment-hsm/getting-started.md
The HSM devices will be charged based on the service pricing page. All other Azu
## payShield customization considerations
-If you are using payShield on-premise today with a custom firmware, a porting exercise is required to update the firmware to a version compatible with the Azure deployment. Please contact your Thales account manager to request a quote.
+If you are using payShield on-premises today with a custom firmware, a porting exercise is required to update the firmware to a version compatible with the Azure deployment. Please contact your Thales account manager to request a quote.
Ensure that the following information is provided: - Customization hardware platform (e.g., payShield 9000 or payShield 10K)
Ensure that the following information is provided:
## Support
-There is no service-level agreement (SLA) for this public preview. Use of this service for production workloads isn't supported
-
-The HSM base firmware installed in public preview is Thales payShield10K base software version 1.4a 1.8.3.
-
-Microsoft will provide support for hardware issues, networking issues, and provisioning issues. Support tickets can be created from the Azure portal. Select **Dedicated HSM** as the Service Type, and mention "payment HSM" in the summary field, with a severity case of B or C.
-
-Support through engineering escalation is only available during business hours: Monday - Friday, 9 AM - 5 PM PST.
-
-Thales provides application-level support, such as client software, HSM configuration, and backup.
-
-Customers are responsible for applying payShield security patches and upgrading payShield firmware for their provisioned HSMs. Thales payShield10K versions prior to 1.4a 1.8.3. aren't supported
-
-Microsoft will apply payShield security patches to unallocated HSMs.
+For details on Azure Payment HSM prerequisites, support channels, and division of support responsibility between Microsoft, Thales, and the customer, see the [Azure Payment HSM service support guide](support-guide.md).
## Next steps
Microsoft will apply payShield security patches to unallocated HSMs.
- See some common [deployment scenarios](deployment-scenarios.md) - Learn about [Certification and compliance](certification-compliance.md) - Read the [frequently asked questions](faq.yml)--
payment-hsm Support Guide https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/payment-hsm/support-guide.md
+
+ Title: Azure Payment HSM Service support guide
+description: Azure Payment HSM Service support guide
+++
+tags: azure-resource-manager
+++ Last updated : 07/28/2022+++
+# Azure Payment HSM service support guide
+
+This article outlines the Azure Payment HSM prerequisites, support channels, and division of support responsibility between Microsoft, Thales, and the customer.
+
+> [!IMPORTANT]
+> There is no service-level agreement (SLA) during the Azure Payment HSM public preview. Use of this service for production workloads will not be supported until GA.
+
+## Prerequisites
+
+Microsoft will work with Thales to ensure that customers meet the prerequisites before starting the onboarding process.
+
+- Customers must have access to the [Thales CPL Customer Support Portal](https://supportportal.thalesgroup.com/csm) (Customer ID).
+- Customers must have Thales smart cards and card readers for payShield Manager. If a customer need to purchase smart cards or card readers they should contact their Thales representatives, or find their contacts through the [Thales contact page](https://cpl.thalesgroup.com/contact-us).
+- If a customer need to purchase a payShield Trusted Management Device (TMD), they should contact their Thales representatives or find their contacts through the [Thales contact page](https://cpl.thalesgroup.com/contact-us).
+- Customers must download and review the "Hosted HSM End User Guide", which is available through the Thales CPL Customer Support Portal. The Hosted HSM End User Guide will provide more details on the changes to payShield to this service.
+- Customers must review the "Azure Payment HSM - Get Ready for payShield 10K" guide that they received from Microsoft. (Customers who do not have the guide may request it from [Microsoft Support](#microsoft-support).)
+- If a customer is new to payShield or the remote management option, they should take the formal training courses available from Thales and its approved partners.
+- If a customer is using payShield on premises today with custom firmware, they must conduct a porting exercise to update the firmware to a version compatible with the Azure deployment. Contact a Thales account manager to request a quote.
+
+## Firmware and license support
+
+The HSM base firmware installed in public preview is Thales payShield10K base software version 1.4a 1.8.3 with the Premium Package license. Versions below 1.4a 1.8.3. are not supported. Customers must ensure that they only upgrade to a firmware version that meets their compliance requirements.
+
+Customers are responsible for applying payShield security patches and upgrading payShield firmware for their provisioned HSMs, as needed. If customers have questions or require assistance, they should work with Thales support.
+
+Microsoft is responsible for applying payShield security patches to unallocated HSMs.
+
+## Microsoft support
+
+Microsoft will provide support for hardware issues, networking issues, and provisioning issues.
+
+Explore the range of Azure support options and choose the plan that best fits at [Microsoft Support Plans](https://azure.microsoft.com/support/plans/). Customers should understand initial response time, listed at [Support scope and responsiveness](https://azure.microsoft.com/support/plans/response/).
+
+Microsoft support can be contacted by creating a support ticket through the Azure portal:
+
+- From the Azure portal homepage, select the "Support + troubleshooting" icon (a question mark in a circle) in the upper-right.
+- Select the "Help + Support" button.
+- Select "Create a support request".
+- On the "New support request" screen, select "Technical" as your issue type, and then "Payment HSM" as the service type.
+
+## Thales support
+
+Thales will provide payment application-level support including client software, HSM configuration and backup, and HSM operation support.
+
+All Azure Payment HSM customers have Enhanced Support Plan with Thales. The [Thales Welcome Pack for Authentication and Encryption Products](https://supportportal.thalesgroup.com/csm?sys_kb_id=1d2bac074f13f340102400818110c7d9&id=kb_article_view&sysparm_rank=1&sysparm_tsqueryId=e7f1843d87f3c9107b0664e80cbb352e&sysparm_article=KB0019882) is an important reference for customers, as it explains the Thales support plan, scope, and responsiveness. Please download the [Thales Welcome Pack PDF](https://supportportal.thalesgroup.com/sys_attachment.do?sys_id=52681fca1b1e0110e2af520f6e4bcb96).
+
+Thales support can be contacted through the [Thales CPL Customer Support Portal](https://supportportal.thalesgroup.com/csm).
+
+## Support contacts
+
+Depending on the nature of your issue or query, you may need to contact Microsoft and/or Thales support. The table below provides high level guidance. When you do not know where to get support, contact Microsoft support first.
+
+| Issues | Microsoft Support | Thales Support | Additional Information |
+|--|--|--|--|
+| HSM provisioning, HSM networking, HSM hardware, management and host port connection | X | | |
+| HSM reset, HSM delete | X | | |
+| HSM Tamper event | X | | Microsoft can recover logs from medium Tamper based on customer's request. It is highly recommended that customer should implement Realtime log replication and backup. |
+| payShield manager operation, key management | | X | |
+| payShield applications, host commands | | X | |
+| payShield firmware upgrade, security patch | | X | Customers are responsible for upgrading their allocated HSM's firmware and applying security patches. Firmware versions below 1.4a 1.8.3. are not supported.<br><br>Microsoft is responsible for applying payShield security patches to unallocated HSMs. |
+| Smart card, Card Readers | | X | Customers can purchase smart cards and readers through their Thales representatives. |
+| TMD | | X | The customer can purchase TMD through their Thales representatives. |
+| Hosted HSM End User Guide | | X | Customers must download "Hosted HSM End User Guide" from Thales support portal for more details on the changes to payShield to this service. |
+| payShield 10K documentation, TMD documentation | | X | |
+| payShield audit and error logs backup | N/A | N/A | The customer is responsible for implementing their own mechanism to back up their audit and error logs. It is highly recommended that customer implement real time log replication and backup. |
+| Key backup | N/A | N/A | Customers are responsible to implement their own mechanism to back up keys. |
+| Custom firmware | | X | If customers are using payShield on premise today with a custom firmware, a porting exercise is required to update the firmware to a version compatible with the Azure deployment. Contact Thales account manager to request a quote. Custom firmware will be supported by Thales support. |
+
+## Next steps
+
+- Learn more about [Azure Payment HSM](overview.md)
+- See some common [deployment scenarios](deployment-scenarios.md)
+- Learn about [Certification and compliance](certification-compliance.md)
+- Read the [frequently asked questions](faq.yml)
private-5g-core Enable Log Analytics For Private 5G Core https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/private-5g-core/enable-log-analytics-for-private-5g-core.md
Log Analytics is a tool in the Azure portal used to edit and run log queries wit
## Create an Azure Monitor extension
-Follow the steps in [Azure Monitor Container Insights for Azure Arc-enabled Kubernetes clusters](../azure-monitor/containers/container-insights-enable-arc-enabled-clusters.md) to create an Azure Monitor extension for the Azure Arc-enabled Kubernetes cluster. Ensure that you use the instructions for the Azure CLI, and that you choose **Option 4 - On Azure Stack Edge** when you carry out [Create extension instance using Azure CLI](../azure-monitor/containers/container-insights-enable-arc-enabled-clusters.md#create-extension-instance-using-azure-cli).
+Follow the steps in [Azure Monitor Container Insights for Azure Arc-enabled Kubernetes clusters](../azure-monitor/containers/container-insights-enable-arc-enabled-clusters.md) to create an Azure Monitor extension for the Azure Arc-enabled Kubernetes cluster. Ensure that you use the instructions for the Azure CLI, and that you choose **Option 4 - On Azure Stack Edge** when you carry out [Create extension instance using Azure CLI](../azure-monitor/containers/container-insights-enable-arc-enabled-clusters.md?tabs=cli#create-extension-instance).
## Configure and deploy the ConfigMap
role-based-access-control Built In Roles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/built-in-roles.md
The following table provides a brief description of each built-in role. Click th
> | **Web** | | | > | [Azure Maps Data Contributor](#azure-maps-data-contributor) | Grants access to read, write, and delete access to map related data from an Azure maps account. | 8f5e0ce6-4f7b-4dcf-bddf-e6f48634a204 | > | [Azure Maps Data Reader](#azure-maps-data-reader) | Grants access to read map related data from an Azure maps account. | 423170ca-a8f6-4b0f-8487-9e4eb8f49bfa |
-> | [Azure Spring Cloud Config Server Contributor](#azure-spring-cloud-config-server-contributor) | Allow read, write and delete access to Azure Spring Cloud Config Server | a06f5c24-21a7-4e1a-aa2b-f19eb6684f5b |
-> | [Azure Spring Cloud Config Server Reader](#azure-spring-cloud-config-server-reader) | Allow read access to Azure Spring Cloud Config Server | d04c6db6-4947-4782-9e91-30a88feb7be7 |
-> | [Azure Spring Cloud Data Reader](#azure-spring-cloud-data-reader) | Allow read access to Azure Spring Cloud Data | b5537268-8956-4941-a8f0-646150406f0c |
-> | [Azure Spring Cloud Service Registry Contributor](#azure-spring-cloud-service-registry-contributor) | Allow read, write and delete access to Azure Spring Cloud Service Registry | f5880b48-c26d-48be-b172-7927bfa1c8f1 |
-> | [Azure Spring Cloud Service Registry Reader](#azure-spring-cloud-service-registry-reader) | Allow read access to Azure Spring Cloud Service Registry | cff1b556-2399-4e7e-856d-a8f754be7b65 |
+> | [Azure Spring Apps Config Server Contributor](#azure-spring-apps-config-server-contributor) | Allow read, write and delete access to Azure Spring Apps Config Server | a06f5c24-21a7-4e1a-aa2b-f19eb6684f5b |
+> | [Azure Spring Apps Config Server Reader](#azure-spring-apps-config-server-reader) | Allow read access to Azure Spring Apps Config Server | d04c6db6-4947-4782-9e91-30a88feb7be7 |
+> | [Azure Spring Apps Data Reader](#azure-spring-apps-data-reader) | Allow read access to Azure Spring Apps Data | b5537268-8956-4941-a8f0-646150406f0c |
+> | [Azure Spring Apps Service Registry Contributor](#azure-spring-apps-service-registry-contributor) | Allow read, write and delete access to Azure Spring Apps Service Registry | f5880b48-c26d-48be-b172-7927bfa1c8f1 |
+> | [Azure Spring Apps Service Registry Reader](#azure-spring-apps-service-registry-reader) | Allow read access to Azure Spring Apps Service Registry | cff1b556-2399-4e7e-856d-a8f754be7b65 |
> | [Media Services Account Administrator](#media-services-account-administrator) | Create, read, modify, and delete Media Services accounts; read-only access to other Media Services resources. | 054126f8-9a2b-4f1c-a9ad-eca461f08466 | > | [Media Services Live Events Administrator](#media-services-live-events-administrator) | Create, read, modify, and delete Live Events, Assets, Asset Filters, and Streaming Locators; read-only access to other Media Services resources. | 532bc159-b25e-42c0-969e-a1d439f60d77 | > | [Media Services Media Operator](#media-services-media-operator) | Create, read, modify, and delete Assets, Asset Filters, Streaming Locators, and Jobs; read-only access to other Media Services resources. | e4395492-1534-4db2-bedf-88c14621589c |
Grants access to read map related data from an Azure maps account. [Learn more](
} ```
-### Azure Spring Cloud Config Server Contributor
+### Azure Spring Apps Config Server Contributor
-Allow read, write and delete access to Azure Spring Cloud Config Server [Learn more](../spring-cloud/how-to-access-data-plane-azure-ad-rbac.md)
+Allow read, write and delete access to Azure Spring Apps Config Server [Learn more](../spring-apps/how-to-access-data-plane-azure-ad-rbac.md)
> [!div class="mx-tableFixed"] > | Actions | Description |
Allow read, write and delete access to Azure Spring Cloud Config Server [Learn m
"assignableScopes": [ "/" ],
- "description": "Allow read, write and delete access to Azure Spring Cloud Config Server",
+ "description": "Allow read, write and delete access to Azure Spring Apps Config Server",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/a06f5c24-21a7-4e1a-aa2b-f19eb6684f5b", "name": "a06f5c24-21a7-4e1a-aa2b-f19eb6684f5b", "permissions": [
Allow read, write and delete access to Azure Spring Cloud Config Server [Learn m
"notDataActions": [] } ],
- "roleName": "Azure Spring Cloud Config Server Contributor",
+ "roleName": "Azure Spring Apps Config Server Contributor",
"roleType": "BuiltInRole", "type": "Microsoft.Authorization/roleDefinitions" } ```
-### Azure Spring Cloud Config Server Reader
+### Azure Spring Apps Config Server Reader
-Allow read access to Azure Spring Cloud Config Server [Learn more](../spring-cloud/how-to-access-data-plane-azure-ad-rbac.md)
+Allow read access to Azure Spring Apps Config Server [Learn more](../spring-apps/how-to-access-data-plane-azure-ad-rbac.md)
> [!div class="mx-tableFixed"] > | Actions | Description |
Allow read access to Azure Spring Cloud Config Server [Learn more](../spring-clo
"assignableScopes": [ "/" ],
- "description": "Allow read access to Azure Spring Cloud Config Server",
+ "description": "Allow read access to Azure Spring Apps Config Server",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/d04c6db6-4947-4782-9e91-30a88feb7be7", "name": "d04c6db6-4947-4782-9e91-30a88feb7be7", "permissions": [
Allow read access to Azure Spring Cloud Config Server [Learn more](../spring-clo
"notDataActions": [] } ],
- "roleName": "Azure Spring Cloud Config Server Reader",
+ "roleName": "Azure Spring Apps Config Server Reader",
"roleType": "BuiltInRole", "type": "Microsoft.Authorization/roleDefinitions" } ```
-### Azure Spring Cloud Data Reader
+### Azure Spring Apps Data Reader
-Allow read access to Azure Spring Cloud Data
+Allow read access to Azure Spring Apps Data
> [!div class="mx-tableFixed"] > | Actions | Description |
Allow read access to Azure Spring Cloud Data
"assignableScopes": [ "/" ],
- "description": "Allow read access to Azure Spring Cloud Data",
+ "description": "Allow read access to Azure Spring Apps Data",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b5537268-8956-4941-a8f0-646150406f0c", "name": "b5537268-8956-4941-a8f0-646150406f0c", "permissions": [
Allow read access to Azure Spring Cloud Data
"notDataActions": [] } ],
- "roleName": "Azure Spring Cloud Data Reader",
+ "roleName": "Azure Spring Apps Data Reader",
"roleType": "BuiltInRole", "type": "Microsoft.Authorization/roleDefinitions" } ```
-### Azure Spring Cloud Service Registry Contributor
+### Azure Spring Apps Service Registry Contributor
-Allow read, write and delete access to Azure Spring Cloud Service Registry [Learn more](../spring-cloud/how-to-access-data-plane-azure-ad-rbac.md)
+Allow read, write and delete access to Azure Spring Apps Service Registry [Learn more](../spring-apps/how-to-access-data-plane-azure-ad-rbac.md)
> [!div class="mx-tableFixed"] > | Actions | Description |
Allow read, write and delete access to Azure Spring Cloud Service Registry [Lear
"assignableScopes": [ "/" ],
- "description": "Allow read, write and delete access to Azure Spring Cloud Service Registry",
+ "description": "Allow read, write and delete access to Azure Spring Apps Service Registry",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/f5880b48-c26d-48be-b172-7927bfa1c8f1", "name": "f5880b48-c26d-48be-b172-7927bfa1c8f1", "permissions": [
Allow read, write and delete access to Azure Spring Cloud Service Registry [Lear
"notDataActions": [] } ],
- "roleName": "Azure Spring Cloud Service Registry Contributor",
+ "roleName": "Azure Spring Apps Service Registry Contributor",
"roleType": "BuiltInRole", "type": "Microsoft.Authorization/roleDefinitions" } ```
-### Azure Spring Cloud Service Registry Reader
+### Azure Spring Apps Service Registry Reader
-Allow read access to Azure Spring Cloud Service Registry [Learn more](../spring-cloud/how-to-access-data-plane-azure-ad-rbac.md)
+Allow read access to Azure Spring Apps Service Registry [Learn more](../spring-apps/how-to-access-data-plane-azure-ad-rbac.md)
> [!div class="mx-tableFixed"] > | Actions | Description |
Allow read access to Azure Spring Cloud Service Registry [Learn more](../spring-
"assignableScopes": [ "/" ],
- "description": "Allow read access to Azure Spring Cloud Service Registry",
+ "description": "Allow read access to Azure Spring Apps Service Registry",
"id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/cff1b556-2399-4e7e-856d-a8f754be7b65", "name": "cff1b556-2399-4e7e-856d-a8f754be7b65", "permissions": [
Allow read access to Azure Spring Cloud Service Registry [Learn more](../spring-
"notDataActions": [] } ],
- "roleName": "Azure Spring Cloud Service Registry Reader",
+ "roleName": "Azure Spring Apps Service Registry Reader",
"roleType": "BuiltInRole", "type": "Microsoft.Authorization/roleDefinitions" }
role-based-access-control Custom Roles Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/custom-roles-cli.md
na Previously updated : 06/17/2020 Last updated : 07/28/2022
az role definition update --role-definition ~/roles/vmoperator.json
## Delete a custom role
-To delete a custom role, use [az role definition delete](/cli/azure/role/definition#az-role-definition-delete). To specify the role to delete, use the role name or the role ID. To determine the role ID, use [az role definition list](/cli/azure/role/definition#az-role-definition-list).
+1. Remove any role assignments that use the custom role. For more information, see [Find role assignments to delete a custom role](custom-roles.md#find-role-assignments-to-delete-a-custom-role).
-```azurecli
-az role definition delete --name {roleNameOrId}
-```
-
-The following example deletes the *Virtual Machine Operator* custom role.
-
-```azurecli
-az role definition delete --name "Virtual Machine Operator"
-```
+1. Use [az role definition delete](/cli/azure/role/definition#az-role-definition-delete) to delete the custom role. To specify the role to delete, use the role name or the role ID. To determine the role ID, use [az role definition list](/cli/azure/role/definition#az-role-definition-list).
+ ```azurecli
+ az role definition delete --name {roleNameOrId}
+ ```
+
+ The following example deletes the *Virtual Machine Operator* custom role.
+
+ ```azurecli
+ az role definition delete --name "Virtual Machine Operator"
+ ```
+
## Next steps - [Tutorial: Create an Azure custom role using Azure CLI](tutorial-custom-role-cli.md)
role-based-access-control Custom Roles Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/custom-roles-portal.md
Previously updated : 08/27/2021 Last updated : 07/28/2022
Follow these steps to view your custom roles.
## Delete a custom role
-1. As described earlier in this article, open your list of custom roles.
+1. Remove any role assignments that use the custom role. For more information, see [Find role assignments to delete a custom role](custom-roles.md#find-role-assignments-to-delete-a-custom-role).
-1. Remove any role assignments that using the custom role.
+1. As described earlier in this article, open your list of custom roles.
1. Click the ellipsis (**...**) for the custom role you want to delete and then click **Delete**.
role-based-access-control Custom Roles Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/custom-roles-powershell.md
na Previously updated : 03/18/2020 Last updated : 07/28/2022
Set-AzRoleDefinition -InputFile "C:\CustomRoles\customrole1.json"
## Delete a custom role
-To delete a custom role, use the [Remove-AzRoleDefinition](/powershell/module/az.resources/remove-azroledefinition) command.
-
-The following example removes the *Virtual Machine Operator* custom role.
-
-```azurepowershell
-Get-AzRoleDefinition "Virtual Machine Operator"
-Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
-```
-
-```Example
-PS C:\> Get-AzRoleDefinition "Virtual Machine Operator"
-
-Name : Virtual Machine Operator
-Id : 88888888-8888-8888-8888-888888888888
-IsCustom : True
-Description : Can monitor and restart virtual machines.
-Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
- Microsoft.Compute/virtualMachines/start/action...}
-NotActions : {}
-AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
- /subscriptions/11111111-1111-1111-1111-111111111111}
-
-PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
-
-Confirm
-Are you sure you want to remove role definition with name 'Virtual Machine Operator'.
-[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
-```
-
+1. Remove any role assignments that use the custom role. For more information, see [Find role assignments to delete a custom role](custom-roles.md#find-role-assignments-to-delete-a-custom-role).
+
+1. Use the [Remove-AzRoleDefinition](/powershell/module/az.resources/remove-azroledefinition) command to delete the custom role.
+
+ The following example removes the *Virtual Machine Operator* custom role.
+
+ ```azurepowershell
+ Get-AzRoleDefinition "Virtual Machine Operator"
+ Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
+ ```
+
+ ```Example
+ PS C:\> Get-AzRoleDefinition "Virtual Machine Operator"
+
+ Name : Virtual Machine Operator
+ Id : 88888888-8888-8888-8888-888888888888
+ IsCustom : True
+ Description : Can monitor and restart virtual machines.
+ Actions : {Microsoft.Storage/*/read, Microsoft.Network/*/read, Microsoft.Compute/*/read,
+ Microsoft.Compute/virtualMachines/start/action...}
+ NotActions : {}
+ AssignableScopes : {/subscriptions/00000000-0000-0000-0000-000000000000,
+ /subscriptions/11111111-1111-1111-1111-111111111111}
+
+ PS C:\> Get-AzRoleDefinition "Virtual Machine Operator" | Remove-AzRoleDefinition
+
+ Confirm
+ Are you sure you want to remove role definition with name 'Virtual Machine Operator'.
+ [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
+ ```
+
## Next steps - [Tutorial: Create an Azure custom role using Azure PowerShell](tutorial-custom-role-powershell.md)
role-based-access-control Custom Roles Rest https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/custom-roles-rest.md
rest-api Previously updated : 03/19/2020 Last updated : 07/28/2022
To update a custom role, use the [Role Definitions - Create Or Update](/rest/api
To delete a custom role, use the [Role Definitions - Delete](/rest/api/authorization/roledefinitions/delete) REST API. To call this API, you must be signed in with a user that is assigned a role that has the `Microsoft.Authorization/roleDefinitions/delete` permission on all the `assignableScopes`. Of the built-in roles, only [Owner](built-in-roles.md#owner) and [User Access Administrator](built-in-roles.md#user-access-administrator) include this permission.
+1. Remove any role assignments that use the custom role. For more information, see [Find role assignments to delete a custom role](custom-roles.md#find-role-assignments-to-delete-a-custom-role).
+ 1. Use the [Role Definitions - List](/rest/api/authorization/roledefinitions/list) or [Role Definitions - Get](/rest/api/authorization/roledefinitions/get) REST API to get the GUID identifier of the custom role. For more information, see the earlier [List custom roles](#list-custom-roles) section. 1. Start with the following request:
role-based-access-control Custom Roles https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/custom-roles.md
Previously updated : 06/28/2022 Last updated : 07/28/2022
Just like built-in roles, the `AssignableScopes` property specifies the scopes t
| Update a custom role | `Microsoft.Authorization/ roleDefinitions/write` | Users that are granted this action on all the `AssignableScopes` of the custom role can update custom roles in those scopes. For example, [Owners](built-in-roles.md#owner) and [User Access Administrators](built-in-roles.md#user-access-administrator) of management groups, subscriptions, and resource groups. | | View a custom role | `Microsoft.Authorization/ roleDefinitions/read` | Users that are granted this action at a scope can view the custom roles that are available for assignment at that scope. All built-in roles allow custom roles to be available for assignment. |
+## Find role assignments to delete a custom role
+
+Before you can delete a custom role, you must remove any role assignments that use the custom role. If you try to delete a custom role with role assignments, you get the message: `There are existing role assignments referencing role (code: RoleDefinitionHasAssignments)`.
+
+Here are steps to help find the role assignments before deleting a custom role:
+
+- List the [custom role definition](role-definitions-list.md).
+- In the [assignable scopes](role-definitions.md#assignablescopes) section, get the management groups, subscriptions, and resource groups.
+- Iterate over the assignable scopes and [list the role assignments](role-assignments-list-portal.md).
+- [Remove the role assignments](role-assignments-remove.md) that use the custom role.
+- [Delete the custom role](custom-roles-portal.md#delete-a-custom-role).
+ ## Custom role limits The following list describes the limits for custom roles.
role-based-access-control Resource Provider Operations https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/resource-provider-operations.md
Azure service: [StorSimple](../storsimple/index.yml)
### Microsoft.AppPlatform
-Azure service: [Azure Spring Cloud](../spring-cloud/index.yml)
+Azure service: [Azure Spring Apps](../spring-apps/index.yml)
> [!div class="mx-tableFixed"] > | Action | Description |
role-based-access-control Troubleshooting https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/role-based-access-control/troubleshooting.md
na Previously updated : 07/27/2022 Last updated : 07/28/2022
There are role assignments still using the custom role.
**Solution**
-Remove those role assignments and try to delete the custom role again.
+Remove the role assignments that use the custom role and try to delete the custom role again. For more information, see [Find role assignments to delete a custom role](custom-roles.md#find-role-assignments-to-delete-a-custom-role).
### Symptom - Unable to add more than one management group as assignable scope
route-server Quickstart Configure Route Server Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/route-server/quickstart-configure-route-server-cli.md
This article helps you configure Azure Route Server to peer with a Network Virtu
[!INCLUDE [route server preview note](../../includes/route-server-note-preview-date.md)]
-## Prerequisites
+## Prerequisites
-* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
-* Make sure you have the latest Azure CLI, or you can use Azure Cloud Shell in the portal.
-* Review the [service limits for Azure Route Server](route-server-faq.md#limitations).
+* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+* [Install the latest Azure CLI](/cli/azure/install-azure-cli), or make sure you can use [Azure Cloud Shell](/azure/cloud-shell/quickstart) in the portal.
+* Review the [service limits for Azure Route Server](route-server-faq.md#limitations).
-## Sign in to your Azure account and select your subscription.
+## Sign in to your Azure account and select your subscription.
To begin your configuration, sign in to your Azure account. If you use the Cloud Shell "Try It", you're signed in automatically. Use the following examples to help you connect:
az network routeserver peering list-learned-routes \
--name myNVA \ --routeserver myRouteServer --resource-group myRouteServerRG \
-```
+```
+ ## Clean up resources
route-server Quickstart Configure Route Server Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/route-server/quickstart-configure-route-server-powershell.md
description: In this quickstart, you learn how to create and configure a Route S
Previously updated : 09/01/2021 Last updated : 07/28/2022
$subnet = @{
$subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet $virtualnetwork | Set-AzVirtualNetwork+
+$vnetInfo = Get-AzVirtualNetwork -Name myVirtualNetwork
+$subnetId = (Get-AzVirtualNetworkSubnetConfig -Name RouteServerSubnet -VirtualNetwork $vnetInfo).Id
``` ## Create the Route Server
$virtualnetwork | Set-AzVirtualNetwork
2. Create the Azure Route Server with [New-AzRouteServer](/powershell/module/az.network/new-azrouteserver). This example creates an Azure Route Server named **myRouteServer** in the **WestUS** location. The *HostedSubnet* is the resource ID of the RouteServerSubnet created in the previous section.
- ```azurepowershell-interactive
+ ```azurepowershell-interactive
$rs = @{ RouteServerName = 'myRouteServer' ResourceGroupName = 'myRouteServerRG' Location = 'WestUS'
- HostedSubnet = $subnetConfig.Id
+ HostedSubnet = $subnetId
PublicIP = $publicIp } New-AzRouteServer @rs
RouteServerIps : {10.5.10.4, 10.5.10.5}
If you have an ExpressRoute and an Azure VPN gateway in the same virtual network and you want them to exchange routes, you can enable route exchange on the Azure Route Server.
-1. To enable route exchange between Azure Route Server and the gateway(s) use [Update-AzRouteServer](/powershell/module/az.network/update-azrouteserver) with the *-AllowBranchToBranchTraffic* flag:
+1. To enable route exchange between Azure Route Server and the gateway(s), use [Update-AzRouteServer](/powershell/module/az.network/update-azrouteserver) with the *-AllowBranchToBranchTraffic* flag:
```azurepowershell-interactive $routeserver = @{
$routeserver = @{
Update-AzRouteServer @routeserver ```
-2. To disable route exchange between Azure Route Server and the gateway(s) use [Update-AzRouteServer](/powershell/module/az.network/update-azrouteserver) without the *-AllowBranchToBranchTraffic* flag:
+2. To disable route exchange between Azure Route Server and the gateway(s), use [Update-AzRouteServer](/powershell/module/az.network/update-azrouteserver) without the *-AllowBranchToBranchTraffic* flag:
```azurepowershell-interactive $routeserver = @{
Get-AzRouteServerPeerLearnedRoute @routeserver
``` ## Clean up resources
-If you no longer need the Azure Route Server, use the first command to remove the BGP peering and then the second command to remove the Route Server.
+If you no longer need the Azure Route Server, use the first command to remove the BGP peering, and then the second command to remove the Route Server.
1. Remove the BGP peering between Azure Route Server and an NVA with [Remove-AzRouteServerPeer](/powershell/module/az.network/remove-azrouteserverpeer):
service-connector Quickstart Cli Spring Cloud Connection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/service-connector/quickstart-cli-spring-cloud-connection.md
The [Azure CLI](/cli/azure) is a set of commands used to create and manage Azure
- Version 2.30.0 or higher of the Azure CLI. If using Azure Cloud Shell, the latest version is already installed. -- At least one Spring Cloud application running on Azure. If you don't have a Spring Cloud application, [create one](../spring-cloud/quickstart.md).
+- At least one Spring Cloud application running on Azure. If you don't have a Spring Cloud application, [create one](../spring-apps/quickstart.md).
## View supported target service types
service-connector Quickstart Portal Spring Cloud Connection https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/service-connector/quickstart-portal-spring-cloud-connection.md
This quickstart shows you how to create a new service connection with Service Co
## Prerequisites - An Azure account with an active subscription. [Create an Azure account for free](https://azure.microsoft.com/free).-- A Spring Cloud application running on Azure. If you don't have one yet, [create a Spring Cloud application](../spring-cloud/quickstart.md).
+- A Spring Cloud application running on Azure. If you don't have one yet, [create a Spring Cloud application](../spring-apps/quickstart.md).
## Sign in to Azure
service-connector Tutorial Java Spring Confluent Kafka https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/service-connector/tutorial-java-spring-confluent-kafka.md
Title: 'Tutorial: Deploy a Spring Boot app connected to Apache Kafka on Confluent Cloud with Service Connector in Azure Spring Cloud'
-description: Create a Spring Boot app connected to Apache Kafka on Confluent Cloud with Service Connector in Azure Spring Cloud.
+ Title: 'Tutorial: Deploy a Spring Boot app connected to Apache Kafka on Confluent Cloud with Service Connector in Azure Spring Apps'
+description: Create a Spring Boot app connected to Apache Kafka on Confluent Cloud with Service Connector in Azure Spring Apps.
ms.devlang: java
Last updated 05/03/2022
-# Tutorial: Deploy a Spring Boot app connected to Apache Kafka on Confluent Cloud with Service Connector in Azure Spring Cloud
+# Tutorial: Deploy a Spring Boot app connected to Apache Kafka on Confluent Cloud with Service Connector in Azure Spring Apps
-Learn how to access Apache Kafka on Confluent Cloud for a Spring Boot application running on Azure Spring Cloud. In this tutorial, you complete the following tasks:
+Learn how to access Apache Kafka on Confluent Cloud for a Spring Boot application running on Azure Spring Apps. In this tutorial, you complete the following tasks:
> [!div class="checklist"] > * Create Apache Kafka on Confluent Cloud > * Create a Spring Cloud application > * Build and deploy the Spring Boot app
-> * Connect Apache Kafka on Confluent Cloud to Azure Spring Cloud using Service Connector
+> * Connect Apache Kafka on Confluent Cloud to Azure Spring Apps using Service Connector
## Set up your initial environment
Create an instance of Apache Kafka for Confluent Cloud by following [this guidan
1. Under **default environment**, select the **Schema Registry** tab. Enable the Schema Registry and note down the **API endpoint**. 1. Create API keys for schema registry. Save the key and secret.
-### Create a Spring Cloud instance
+### Create an Azure Spring Apps instance
-Create an instance of Azure Spring Cloud by following [the Spring Cloud quickstart](../spring-cloud/quickstart.md) in Java. Make sure your Spring Cloud instance is created in [the region that has Service Connector support](concept-region-support.md).
+Create an instance of Azure Spring Apps by following [the Azure Spring Apps quickstart](../spring-apps/quickstart.md) in Java. Make sure your Azure Spring Apps instance is created in [the region that has Service Connector support](concept-region-support.md).
## Build and deploy the app
az spring-cloud connection create confluent-cloud -g <your-spring-cloud-resource
``` Replace the following placeholder texts with your own data:
-* Replace *`<your-resource-group-name>`* with the resource group name that you created your Spring Cloud instance.
+* Replace *`<your-resource-group-name>`* with the resource group name that you created for your Apps Spring Apps instance.
* Replace *`<kafka-bootstrap-server-url>`* with your kafka bootstrap server url (the value should be like `pkc-xxxx.eastus.azure.confluent.cloud:9092`) * Replace *`<cluster-api-key>`* and *`<cluster-api-secret>`* with your cluster API key and secret. * Replace *`<kafka-schema-registry-endpoint>`* with your kafka Schema Registry endpoint (the value should be like `https://psrc-xxxx.westus2.azure.confluent.cloud`)
site-recovery Azure To Azure Troubleshoot Errors https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/site-recovery/azure-to-azure-troubleshoot-errors.md
Perform the following steps to fix this issue.
`./install -d /usr/local/ASR -r MS -q -v Azure` 6. If the installer succeeds, retry the enable replication job.
+## Troubleshoot and handle time changes on replicated servers
+This error occurs when the source machine's time moves forward and then moves back in short time, to correct the change. You may not notice the change as the time is corrected very quickly.
+
+**How to fix**:
+To resolve this issue, wait till system time crosses the skewed future time. Another option is to disable and enable replication once again, which is only feasible for forward replication (data replicated from primary to secondary region) and is not applicable for reverse replication (data replicated from secondary to primary region).
+ ## Next steps [Replicate Azure VMs to another Azure region](azure-to-azure-how-to-enable-replication.md)
site-recovery Site Recovery Deployment Planner History https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/site-recovery/site-recovery-deployment-planner-history.md
This article provides history of all versions of Azure Site Recovery Deployment
- Added support for vCenter 6.7. - Added support for Windows Server 2019 and Red Hat Enterprise Linux (RHEL) workstation. -
+> [!Note]
+>- It is not recommended to run the deployment planner on the ESXi version 6.7.0 Update 2 Build 13006603, as it does not work as expected.
## Version 2.3
site-recovery Vmware Azure Troubleshoot Replication https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/site-recovery/vmware-azure-troubleshoot-replication.md
When you try to select the source machine to enable replication by using Site Re
Virtual machines that are replicated under Site Recovery aren't available in the Azure portal if there are duplicate entries in the system. [Learn more](https://social.technet.microsoft.com/wiki/contents/articles/32026.asr-vmware-to-azure-how-to-cleanup-duplicatestale-entries.aspx) about deleting stale entries and resolving the issue.
+Another reason could be that the machine was cloned. When machines move between hypervisor and if BIOS ID changes, then the mobility agent blocks replication. Replication of cloned machines is not supported by Site Recovery.
+ ## No crash consistent recovery point available for the VM in the last 'XXX' minutes Some of the most common issues are listed below
This error occurs when trying to enable replication and the application folders
- All the items under the below path - - *C:\thirdparty\rrdtool-1.2.15-win32-perl58\rrdtool\Release\**
+## Troubleshoot and handle time changes on replicated servers
+This error occurs when the source machine's time moves forward and then moves back in short time, to correct the change. You may not notice the change as the time is corrected very quickly.
+
+**How to fix**:
+To resolve this issue, wait till system time crosses the skewed future time. Another option is to disable and enable replication once again, which is only feasible for forward replication (data replicated from on-premises to Azure) and is not applicable for reverse replication (data replicated from Azure to on-premises).
+ ## Next steps If you need more help, post your question in the [Microsoft Q&A question page for Azure Site Recovery](/answers/topics/azure-site-recovery.html). We have an active community, and one of our engineers can assist you.
spring-apps Access App Virtual Network https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/access-app-virtual-network.md
+
+ Title: "Azure Spring Apps access app in virtual network"
+description: Access app in Azure Spring Apps in a virtual network.
++++ Last updated : 11/30/2021+
+ms.devlang: azurecli
++
+# Access your application in a private network
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to access an endpoint for your application in a private network.
+
+When **Assign Endpoint** on applications in an Azure Spring Apps service instance is deployed in your virtual network, the endpoint is a private fully qualified domain name (FQDN). The domain is only accessible in the private network. Apps and services use the application endpoint. They include the *Test Endpoint* described in [View apps and deployments](./how-to-staging-environment.md#view-apps-and-deployments). *Log streaming*, described in [Stream Azure Spring Apps app logs in real-time](./how-to-log-streaming.md), also works only within the private network.
+
+## Find the IP for your application
+
+#### [Portal](#tab/azure-portal)
+
+1. Select the virtual network resource you created as explained in [Deploy Azure Spring Apps in your Azure virtual network (VNet injection)](./how-to-deploy-in-azure-virtual-network.md).
+
+2. In the **Connected devices** search box, enter *kubernetes-internal*.
+
+3. In the filtered result, find the **Device** connected to the service runtime **Subnet** of the service instance, and copy its **IP Address**. In this sample, the IP Address is *10.1.0.7*.
+
+ [ ![Create DNS record](media/spring-cloud-access-app-vnet/create-dns-record.png) ](media/spring-cloud-access-app-vnet/create-dns-record.png)
+
+#### [CLI](#tab/azure-CLI)
+
+Find the IP Address for your Spring Cloud services. Customize the value of your Azure Spring Apps instance name based on your real environment.
+
+ ```azurecli
+ SPRING_CLOUD_NAME='spring-cloud-name'
+ SERVICE_RUNTIME_RG=`az spring show \
+ --resource-group $RESOURCE_GROUP \
+ --name $SPRING_CLOUD_NAME \
+ --query "properties.networkProfile.serviceRuntimeNetworkResourceGroup" \
+ --output tsv`
+ IP_ADDRESS=`az network lb frontend-ip list \
+ --lb-name kubernetes-internal \
+ --resource-group $SERVICE_RUNTIME_RG \
+ --query "[0].privateIpAddress" \
+ --output tsv`
+ ```
+++
+## Add a DNS for the IP
+
+If you have your own DNS solution for your virtual network, like Active Directory Domain Controller, Infoblox, or another, you need to point the domain `*.private.azuremicroservices.io` to the [IP address](#find-the-ip-for-your-application). Otherwise, you can follow the following instructions to create an **Azure Private DNS Zone** in your subscription to translate/resolve the private fully qualified domain name (FQDN) to its IP address.
+
+> [!NOTE]
+> If you are using Azure China, please replace `private.azuremicroservices.io` with `private.microservices.azure.cn` in this article. Learn more about [Check Endpoints in Azure](/azure/china/resources-developer-guide#check-endpoints-in-azure).
+
+## Create a private DNS zone
+
+The following procedure creates a private DNS zone for an application in the private network.
+
+#### [Portal](#tab/azure-portal)
+
+1. Open the Azure portal. From the top search box, search for **Private DNS zones**, and select **Private DNS zones** from the results.
+
+2. On the **Private DNS zones** page, select **Add**.
+
+3. Fill out the form on the **Create Private DNS zone** page. Enter *private.azuremicroservices.io* as the **Name** of the zone.
+
+4. Select **Review + Create**.
+
+5. Select **Create**.
+
+#### [CLI](#tab/azure-CLI)
+
+1. Define variables for your subscription, resource group, and Azure Spring Apps instance. Customize the values based on your real environment.
+
+ ```azurecli
+ SUBSCRIPTION='subscription-id'
+ RESOURCE_GROUP='my-resource-group'
+ VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
+ ```
+
+1. Sign in to the Azure CLI and choose your active subscription.
+
+ ```azurecli
+ az login
+ az account set --subscription ${SUBSCRIPTION}
+ ```
+
+1. Create the private DNS zone.
+
+ ```azurecli
+ az network private-dns zone create \
+ --resource-group $RESOURCE_GROUP \
+ --name private.azuremicroservices.io
+ ```
+++
+It may take a few minutes to create the zone.
+
+## Link the virtual network
+
+To link the private DNS zone to the virtual network, you need to create a virtual network link.
+
+#### [Portal](#tab/azure-portal)
+
+1. Select the private DNS zone resource created above: *private.azuremicroservices.io*
+
+2. On the left pane, select **Virtual network links**, then select **Add**.
+
+4. Enter *azure-spring-apps-dns-link* for the **Link name**.
+
+5. For **Virtual network**, select the virtual network you created as explained in [Deploy Azure Spring Apps in your Azure virtual network (VNet injection)](./how-to-deploy-in-azure-virtual-network.md).
+
+ ![Add virtual network link](media/spring-cloud-access-app-vnet/add-virtual-network-link.png)
+
+6. Select **OK**.
+
+#### [CLI](#tab/azure-CLI)
+
+Link the private DNS zone you created to the virtual network holding your Azure Spring Apps service.
+
+ ```azurecli
+ az network private-dns link vnet create \
+ --resource-group $RESOURCE_GROUP \
+ --name azure-spring-apps-dns-link \
+ --zone-name private.azuremicroservices.io \
+ --virtual-network $VIRTUAL_NETWORK_NAME \
+ --registration-enabled false
+ ```
++
+## Create DNS record
+
+To use the private DNS zone to translate/resolve DNS, you must create an "A" type record in the zone.
+
+#### [Portal](#tab/azure-portal)
+
+1. Select the private DNS zone resource created above: *private.azuremicroservices.io*.
+
+1. Select **Record set**.
+
+1. In **Add record set**, enter or select this information:
+
+ |Setting |Value |
+ |||
+ |Name |Enter *\** |
+ |Type |Select **A** |
+ |TTL |Enter *1* |
+ |TTL unit |Select **Hours** |
+ |IP address |Enter the IP address copied in step 3. In the sample, the IP is *10.1.0.7*. |
+
+1. Select **OK**.
+
+ ![Add private DNS zone record](media/spring-cloud-access-app-vnet/private-dns-zone-add-record.png)
+
+#### [CLI](#tab/azure-CLI)
+
+Use the [IP address](#find-the-ip-for-your-application) to create the A record in your DNS zone.
+
+ ```azurecli
+ az network private-dns record-set a add-record \
+ --resource-group $RESOURCE_GROUP \
+ --zone-name private.azuremicroservices.io \
+ --record-set-name '*' \
+ --ipv4-address $IP_ADDRESS
+ ```
+++
+## Assign private FQDN for your application
+
+After following the procedure in [Deploy Azure Spring Apps in a virtual network](./how-to-deploy-in-azure-virtual-network.md), you can assign a private FQDN for your application.
+
+#### [Portal](#tab/azure-portal)
+
+1. Select the Azure Spring Apps service instance deployed in your virtual network, and open the **Apps** tab in the menu on the left.
+
+2. Select the application to show the **Overview** page.
+
+3. Select **Assign Endpoint** to assign a private FQDN to your application. Assigning an FQDN can take a few minutes.
+
+ ![Assign private endpoint](media/spring-cloud-access-app-vnet/assign-private-endpoint.png)
+
+4. The assigned private FQDN (labeled **URL**) is now available. It can only be accessed within the private network, but not on the Internet.
+
+#### [CLI](#tab/azure-CLI)
+
+Update your app to assign an endpoint to it. Customize the value of your app name based on your real environment.
+
+```azurecli
+SPRING_CLOUD_APP='your spring cloud app'
+az spring app update \
+ --resource-group $RESOURCE_GROUP \
+ --name $SPRING_CLOUD_APP \
+ --service $SPRING_CLOUD_NAME \
+ --assign-endpoint true
+```
+++
+## Access application private FQDN
+
+After the assignment, you can access the application's private FQDN in the private network. For example, you can create a jumpbox machine in the same virtual network, or a peered virtual network. Then, on that jumpbox or virtual machine, the private FQDN is accessible.
+
+![Access private endpoint in vnet](media/spring-cloud-access-app-vnet/access-private-endpoint.png)
+
+## Clean up resources
+
+If you plan to continue working with subsequent articles, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following command:
+
+```azurecli
+az group delete --name $RESOURCE_GROUP
+```
+
+## Next steps
+
+- [Expose applications with end-to-end TLS in a virtual network](./expose-apps-gateway-end-to-end-tls.md)
+- [Troubleshooting Azure Spring Apps in VNET](./troubleshooting-vnet.md)
+- [Customer Responsibilities for Running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md)
spring-apps Breaking Changes https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/breaking-changes.md
+
+ Title: Azure Spring Apps API breaking changes
+description: Describes the breaking changes introduced by the latest Azure Spring Apps stable API version.
++++ Last updated : 05/25/2022+++
+# Azure Spring Apps API breaking changes
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes breaking changes introduced into the Azure Spring Apps API.
+
+The Azure Spring Apps service releases the new stable API version 2022-04-01. The new API version introduces breaking changes based on the previous stable API version 2020-07-01. We suggest that you update your API calls to the new API version.
+
+## Previous API deprecation date
+
+The previous API version 2020-07-01 will not be supported starting April, 2025.
+
+## API breaking changes from 2020-07-01 to 2022-04-01
+
+### Deprecate number value CPU and MemoryInGB in Deployments
+
+Deprecate field `properties.deploymentSettings.cpu` and `properties.deploymentSettings.memoryInGB` in the `Spring/Apps/Deployments` resource. Use `properties.deploymentSettings.resourceRequests.cpu` and `properties.deploymentSettings.resourceRequests.memory` instead.
+
+### RBAC role change for blue-green deployment
+
+Deprecate field `properties.activeDeploymentName` in the `Spring/Apps` resource. Use `POST/SUBSCRIPTIONS/RESOURCEGROUPS/PROVIDERS/MICROSOFT.APPPLATFORM/SPRING/APPS/SETACTIVEDEPLOYMENTS` for blue-green deployment. This action needs a separate RBAC role `spring/apps/setActiveDeployments/action` to perform.
+
+### Move options from different property bags for the Spring/Apps/Deployments resource
+
+- Deprecate `properties.createdTime`. Use `systemData.createdAt`.
+- Deprecate `properties.deploymentSettings.jvmOptions`. Use `properties.source.jvmOptions`.
+- Deprecate `properties.deploymentSettings.jvmOptions`. Use `properties.source.runtimeVersion`.
+- Deprecate `properties.deploymentSettings.netCoreMainEntryPath`. Use `properties.source.netCoreMainEntryPath`.
+- Deprecate `properties.appName`, which you can extract from `id`.
+
+## Updates in the Azure CLI extension
+
+### Add new RBAC role for blue-green deployment
+
+You need to add RBAC role `spring/apps/setActiveDeployments/action` to perform the following Azure CLI commands:
+
+```azurecli
+az spring app set-deployment \
+ --resource-group <resource-group-name> \
+ --service <service-instance-name> \
+ --name <app-name> \
+ --deployment <deployment-name>
+az spring app unset-deployment \
+ --resource-group <resource-group-name> \
+ --service <service-instance-name> \
+ --name <app-name>
+```
+
+### Output updates
+
+If you're using the Azure CLI `spring-cloud` extension with a version lower than 3.0.0, and you want to upgrade the extension version or migrate to the `spring` extension, then you should take care of the following output updates.
+
+- `az spring app` command output: Remove `properties.activeDeploymentName`. Use `properties.activeDeployment.name` instead.
+- `az spring app` command output: Remove `properties.createdTime`. Use `systemData.createdAt` instead.
+- `az spring app` command output: Remove `properties.activeDeployment.properties.deploymentSettings.cpu`. Use `properties.activeDeployment.properties.deploymentSettings.resourceRequests.cpu` instead.
+- `az spring app` command output: Remove `properties.activeDeployment.properties.deploymentSettings.memoryInGB`. Use `properties.activeDeployment.properties.deploymentSettings.resourceRequests.memory` instead.
+- `az spring app` command output: Remove `properties.activeDeployment.properties.deploymentSettings.jvmOptions`. Use `properties.activeDeployment.properties.source.jvmOptions` instead.
+- `az spring app` command output: Remove `properties.activeDeployment.properties.deploymentSettings.runtimeVersion`. Use `properties.activeDeployment.properties.source.runtimeVersion` instead.
+- `az spring app` command output: Remove `properties.activeDeployment.properties.deploymentSettings.netCoreMainEntryPath`. Use `properties.activeDeployment.properties.source.netCoreMainEntryPath` instead.
spring-apps Concept App Status https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/concept-app-status.md
+
+ Title: App status in Azure Spring Apps
+description: Learn the app status categories in Azure Spring Apps
+++ Last updated : 03/30/2022++++
+# App status in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to view app status for Azure Spring Apps.
+
+The Azure Spring Apps UI delivers information about the status of running applications. There's an **Apps** option for each resource group in a subscription that displays general status of application types. For each application type, there's a display of **Application instances**.
+
+## Apps status
+
+To view general status of an application type, select **Apps** in the left navigation pane of a resource group. The result displays the status of the deployed app:
+
+* **Provisioning Status**: Shows the deploymentΓÇÖs provisioning state.
+* **Running instance**: Shows how many app instances are running and how many app instances you desire. If you stop the app, this column shows **stopped**.
+* **Registered Instance**: Shows how many app instances are registered to Eureka and how many app instances you desire. If you stop the app, this column shows **stopped**. Eureka isn't applicable to enterprise tier. For more information if you're using the enterprise tier, see [Use Service Registry](how-to-enterprise-service-registry.md).
+
+![Apps status](media/spring-cloud-concept-app-status/apps-ui-status.png)
+
+## Deployment status
+
+The deployment status shows the running state of the deployment. The status is reported as one of the following values:
+
+| Value | Definition |
+||--|
+| Running | The deployment SHOULD be running. |
+| Stopped | The deployment SHOULD be stopped. |
+
+## Provisioning status
+
+The *deployment provisioning* status describes the state of operations of the deployment resource. This status shows the comparison between the functionality and the deployment definition.
+
+The provisioning state is accessible only from the CLI. It's reported as one of the following values:
+
+| Value | Definition |
+|--||
+| Creating | The resource is creating and isn't ready. |
+| Updating | The resource is updating and the functionality may be different from the deployment definition until the update is complete. |
+| Succeeded | Successfully supplied resources and deploys the binary. The deployment's functionality is the same as the definition and all app instances are working. |
+| Failed | Failed to achieve the *Succeeded* goal. |
+| Deleting | The resource is being deleted which prevents operation, and the resource isn't available in this status. |
+
+## App instances status
+
+The *app instance* status represents every instance of the app. To view the status of a specific instance of a deployed app, select the **Name** of the app in the **Apps** UI. The results will display:
+
+* **Status**: Whether the instance is running or its current state
+* **DiscoveryStatus**: The registered status of the app instance in the Eureka server
+
+![App instances status](media/spring-cloud-concept-app-status/apps-ui-instance-status.png)
+
+### App instance status
+
+The instance status is reported as one of the following values:
+
+| Value | Definition |
+|-||
+| Starting | The binary is successfully deployed to the given instance. The instance booting the jar file may fail because the jar can't run properly. Azure Spring Apps will restart the app instance in 60 seconds if it detects that the app instance is still in the *Starting* state. |
+| Running | The instance works. The instance can serve requests from inside Azure Spring Apps. |
+| Failed | The app instance failed to start the userΓÇÖs binary after several retries. The app instance may be in one of the following states:<br/>- The app may stay in the *Starting* status and never be ready for serving requests.<br/>- The app may boot up but crashed in a few seconds. |
+| Terminating | The app instance is shutting down. The app may not serve requests and the app instance will be removed. |
+
+### App discovery status
+
+The discovery status of the instance is reported as one of the following values:
+
+| Value | Definition |
+|-||
+| UP | The app instance is registered to Eureka and ready to receive traffic |
+| OUT_OF_SERVICE | The app instance is registered to Eureka and able to receive traffic. but shuts down for traffic intentionally. |
+| DOWN | The app instance is registered but not able to receive traffic. |
+| UNREGISTERED | The app instance isn't registered to Eureka. |
+| N/A | The app instance is running with custom container or service discovery is not enabled. |
+
+## App registration status
+
+The *app registration* status shows the state in service discovery. Azure Spring Apps uses Eureka for service discovery. For more information on how the Eureka client calculates the state, see [Eureka's health checks](https://cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/multi/multi__service_discovery_eureka_clients.html#_eureka_s_health_checks).
+## Next steps
+
+* [Prepare a Spring or Steeltoe application for deployment in Azure Spring Apps](how-to-prepare-app-deployment.md)
spring-apps Concept Manage Monitor App Spring Boot Actuator https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/concept-manage-monitor-app-spring-boot-actuator.md
+
+ Title: "Manage and monitor app with Spring Boot Actuator"
+description: Learn how to manage and monitor app with Spring Boot Actuator.
++++ Last updated : 05/06/2022+++
+# Manage and monitor app with Spring Boot Actuator
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+After deploying new binary to your app, you may want to check the functionality and see information about your running application. This article explains how to access the API from a test endpoint provided by Azure Spring Apps and expose the production-ready features for your app.
+
+## Prerequisites
+
+This article assumes that you have a Spring Boot 2.x application that can be successfully deployed and booted on Azure Spring Apps service. See [Quickstart: Launch an existing application in Azure Spring Apps using the Azure portal](./quickstart.md)
+
+## Verify app through test endpoint
+
+1. Go to **Application dashboard** and select your app to enter the app overview page.
+
+1. In the **Overview** pane, you should see **Test Endpoint**. Access this endpoint from command line or browser and observe the API response.
+
+1. Note the **Test endpoint** URI that will be used in the coming section.
+
+>[!TIP]
+> * If the app returns a front-end page and references other files through relative path, confirm that your test endpoint ends with a slash (/). This will ensure that the CSS file is loaded correctly.
+> * If you view your API from a brower and your browser requires you to enter login credentials to view the page, use [URL decode](https://www.urldecoder.org/) to decode your test endpoint. URL decode returns a URL in the form "https://\<username>:\<password>@\<cluster-name>.test.azureapps.io/\<app-name>/\<deployment-name>". Use this form to access your endpoint.
+
+## Add actuator dependency
+
+To add the actuator to a Maven-based project, add the 'Starter' dependency:
+
+```xml
+<dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ </dependency>
+</dependencies>
+```
+
+Compile the new binary and deploy it to your app.
+
+## Enable production-ready features
+
+Actuator endpoints let you monitor and interact with your application. By default, Spring Boot application exposes `health` and `info` endpoints to show arbitrary application info and health information.
+
+To observe the configuration and configurable environment, we need to enable `env` and `configgrops` endpoints as well.
+
+1. Go to app **Overview** pane, select **Configuration** in the setting menu, go to the **Environment variables** configuration page.
+1. Add the following properties as in the "key:value" form. This environment will open the Spring Actuator endpoint "env", "health", "info".
+
+ ```properties
+ management.endpoints.web.exposure.include: env,health,info
+ ```
+
+1. Select the **Save** button, your application will restart automatically and load the new environment variables.
+
+You can now go back to the app overview pane and wait until the Provisioning Status changes to "Succeeded". There will be more than one running instance.
+
+> [!Note]
+> Once you expose the app to public, these actuator endpoints are exposed to public as well. You can hide all endpoints by deleting the environment variables `management.endpoints.web.exposure.include`, and set `management.endpoints.web.exposure.exclude=*`
+
+## View the actuator endpoint to view application information
+
+1. You can now access the url `"<test-endpoint>/actuator/"` to see all endpoints exposed by Spring Boot Actuator.
+1. Access url `"<test-endpoint>/actuator/env"`, you can see active profiles used by the app, and all environment variables loaded.
+1. If you want to search a specific environment, you can access url `"<test-endpoint>/actuator/env/{toMatch}"` to view it.
+
+To view all the endpoints built-in, see [Exposing Endpoints](https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-endpoints-exposing-endpoints)
+
+## Next steps
+
+* [Understand metrics for Azure Spring Apps](./concept-metrics.md)
+* [Understanding app status in Azure Spring Apps](./concept-app-status.md)
spring-apps Concept Metrics https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/concept-metrics.md
+
+ Title: Metrics for Azure Spring Apps
+description: Learn how to review metrics in Azure Spring Apps
+++ Last updated : 09/08/2020++++
+# Metrics for Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Azure Metrics explorer is a component of the Microsoft Azure portal that allows plotting charts, visually correlating trends, and investigating spikes and dips in metrics. Use the metrics explorer to investigate the health and utilization of your resources.
+
+In Azure Spring Apps, there are two viewpoints for metrics.
+* Charts in each application overview page
+* Common metrics page
+
+ ![Metrics Charts](media/metrics/metrics-1.png)
+
+Charts in the application **Overview** provide quick status checks for each application. The common **Metrics** page contains all metrics available for reference. You can build your own charts in the common metrics page and pin them in Dashboard.
+
+## Application overview page
+
+Select an app in **Apps** to find charts in the overview page.
+
+![Application Metrics Management](media/metrics/metrics-2.png)
+
+Each application's **Application Overview** page presents a metrics chart that allows you to perform a quick status check of your application.
+
+![Application Metrics Overview](media/metrics/metrics-3.png)
+
+Azure Spring Apps provides these five charts with metrics that are updated every minute:
+
+* **Http Server Errors**: Error count for HTTP requests to your app
+* **Data In**: Bytes received by your app
+* **Data Out**: Bytes sent by your app
+* **Requests**: Requests received by your app
+* **Average Response Time**: Average response time from your app
+
+For the chart, you can select a time range from one hour to seven days.
+
+## Common metrics page
+
+The **Metrics** in the left navigation pane links to the common metrics page.
+
+First, select metrics to view:
+
+![Select Metric View](media/metrics/metrics-4.png)
+
+Details of all metrics options can be found in the [section](#user-metrics-options) below.
+
+Next, select aggregation type for each metric:
+
+![Metric Aggregation](media/metrics/metrics-5.png)
+
+The aggregation type indicates how to aggregate metric points in the chart by time. There is one raw metric point every minute, and the pre-aggregation type within a minute is pre-defined by metrics type.
+
+* Sum: Sum all values as target output.
+* Average: Use the Average value in the period as target output.
+* Max/Min: Use the Max/Min value in the period as target output.
+
+The time range can also be adjusted from last 30 minutes to last 30 days or a custom time range.
+
+![Metric Modification](media/metrics/metrics-6.png)
+
+The default view includes all of an Azure Spring Apps service's application's metrics together. Metrics of one app or instance can be filtered in the display. Select **Add filter**, set the property to **App**, and select the target application you want to monitor in the **Values** text box.
+
+You can use two kinds of filters (properties):
+
+* App: filter by app name
+* Instance: filter by app instance
+
+![Metric Filters](media/metrics/metrics-7.png)
+
+You can also use the **Apply splitting** option, which will draw multiple lines for one app:
+
+![Metric Splitting](media/metrics/metrics-8.png)
+
+>[!TIP]
+> You can build your own charts on the metrics page and pin them to your **Dashboard**. Start by naming your chart. Next, select **Pin to dashboard in the top right corner**. You can now check on your application at your Portal **Dashboard**.
+
+## User metrics options
+
+The following tables show the available metrics and details.
+
+### Error
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Name | Spring Actuator Metric Name | Unit | Details |
+>|-|-|-||
+>| tomcat.global.error | tomcat.global.error | Count | Number of errors that occurred in processed requests |
+
+### Performance
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Name | Spring Actuator Metric Name | Unit | Details |
+>|-|-|-||
+>| system.cpu.usage | system.cpu.usage | Percent | Recent CPU usage for the whole system (Obsolete and don't suggest using it). This value is a double in the [0.0,1.0] interval. A value of 0.0 means that all CPUs were idle during the recent period of time observed, while a value of 1.0 means that all CPUs were actively running 100% of the time during the recent period being observed.|
+>| process.cpu.usage | App CPU Usage Percentage | Percent | Recent CPU usage for the Java Virtual Machine process (Obsolete and don't suggest using it). This value is a double in the [0.0,1.0] interval. A value of 0.0 means that none of the CPUs were running threads from the JVM process during the recent period of time observed, while a value of 1.0 means that all CPUs were actively running threads from the JVM 100% of the time during the recent period being observed. Threads from the JVM include the application threads as well as the JVM internal threads.|
+>| App CPU Usage | | Percent | Recent CPU usage of the JVM process against the CPU allocated to this app. This value is a double in the [0.0,1.0] interval. A value of 0.0 means that none of the CPUs were running threads from the JVM process during the recent period of time observed, while a value of 1.0 means that all CPUs were actively running threads from the JVM 100% of the time during the recent period being observed. Threads from the JVM include the application threads as well as the JVM internal threads.|
+>| App CPU Usage (Deprecated) | | Percent | Deprecated metric of App CPU Usage. Use the new App CPU Usage metric instead.|
+>| App Memory Usage | | Percent | Recent memory usage of the JVM process against the memory allocated to this app. This value is a double in the [0.0,1.0] interval. A value of 0.0 means that none of the memory was allocated by threads from the JVM process during the recent period of time observed, while a value of 1.0 means that all memory was allocated by threads from the JVM 100% of the time during the recent period being observed. Threads from the JVM include the application threads as well as the JVM internal threads.|
+>| jvm.memory.committed | jvm.memory.committed | Bytes | Represents the amount of memory that is guaranteed to be available for use by the JVM. The JVM may release memory to the system and committed could be less than init. committed will always be greater than or equal to used. |
+>| jvm.memory.used | jvm.memory.used | Bytes | Represents the amount of memory currently used in bytes. |
+>| jvm.memory.max | jvm.memory.max | Bytes | Represents the maximum amount of memory that can be used for memory management. The amount of used and committed memory will always be less than or equal to max if max is defined. A memory allocation may fail if it attempts to increase the used memory such that used > committed even if used <= max would still be true (for example, when the system is low on virtual memory). |
+>| jvm.gc.max.data.size | jvm.gc.max.data.size | Bytes | The peak memory usage of the old generation memory pool since the Java virtual machine was started. |
+>| jvm.gc.live.data.size | jvm.gc.live.data.size | Bytes | Size of old generation memory pool after a full GC. |
+>| jvm.gc.memory.promoted | jvm.gc.memory.promoted | Bytes | Count of positive increases in the size of the old generation memory pool before GC to after GC. |
+>| jvm.gc.memory.allocated | jvm.gc.memory.allocated | Bytes | Incremented for an increase in the size of the young generation memory pool after one GC to before the next. |
+>| jvm.gc.pause.total.count | jvm.gc.pause (total-count) | Count | Total GC count after this JMV started, including Young and Old GC. |
+>| jvm.gc.pause.total.time | jvm.gc.pause (total-time) | Milliseconds | Total GC time consumed after this JMV started, including Young and Old GC. |
+
+### Performance (.NET)
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Name | Spring Actuator Metric Name | Unit | Details |
+>||--|||
+>| CPU usage | cpu-usage | Percent | The percent of the process's CPU usage relative to all of the system CPU resources [0-100]. |
+>| Working set | working-set | Megabytes | Amount of working set used by the process. |
+>| GC heap size | gc-heap-size | Megabytes | Total heap size reported by the garbage collector. |
+>| Gen 0 GC count | gen-0-gc-count | Count | Number of Generation 0 garbage collections per second. |
+>| Gen 1 GC count | gen-1-gc-count | Count | Number of Generation 1 garbage collections per second. |
+>| Gen 2 GC count | gen-2-gc-count | Count | Number of Generation 2 garbage collections per second. |
+>| Time in GC | timein-gc | Percent | The percent of time in garbage collection since the last garbage collection. |
+>| Gen 0 heap size | gen-0-size | Bytes | Generation 0 heap size. |
+>| Gen 1 heap size | gen-1-size | Bytes | Generation 1 heap size. |
+>| Gen 2 heap size | gen-2-size | Bytes | Generation 2 heap size. |
+>| LOH heap size | loh-size | Bytes | Large Object Heap heap size. |
+>| Allocation rate | alloc-rate | Bytes | Number of bytes allocated per second. |
+>| Assembly count | assembly-count | Count | Number of assemblies loaded. |
+>| Exception count | exception-count | Count | Number of exceptions per second. |
+>| Thread pool thread count | threadpool-thread-count | Count | Number of thread pool threads. |
+>| Monitor lock contention count | monitor-lock-contention-count | Count | The number of times per second there was contention when trying to take a monitor's lock. |
+>| Thread pool queue length | threadpool-queue-length | Count | Thread pool work items queue length. |
+>| Thread pool completed items count | threadpool-completed-items-count | Count | Thread pool completed work items count. |
+>| Active timers count | active-timer-count | Count | The number of timers that are currently active. An active timer is one that is registered to tick at some point in the future, and has not yet been canceled. |
+
+For more information, see [dotnet counters](/dotnet/core/diagnostics/dotnet-counters).
+
+### Request
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Name | Spring Actuator Metric Name | Unit | Details |
+>|-|-|-||
+>| tomcat.global.sent | tomcat.global.sent | Bytes | Amount of data Tomcat web server sent |
+>| tomcat.global.received | tomcat.global.received | Bytes | Amount of data Tomcat web server received |
+>| tomcat.global.request.total.count | tomcat.global.request (total-count) | Count | Total count of Tomcat web server processed requests |
+>| tomcat.global.request.max | tomcat.global.request.max | Milliseconds | Maximum time of Tomcat web server to process a request |
+
+### Request (.NET)
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Name | Spring Actuator Metric Name | Unit | Details |
+>||--|||
+>| Requests per second | requests-per-second | Count | Request rate. |
+>| Total requests | total-requests | Count | Total number of requests. |
+>| Current requests | current-requests | Count | Number of current requests. |
+>| Failed requests | failed-requests | Count | Number of failed requests. |
+
+For more information, see [dotnet counters](/dotnet/core/diagnostics/dotnet-counters).
+
+### Session
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Name | Spring Actuator Metric Name | Unit | Details |
+>|-|-|-||
+>| tomcat.sessions.active.max | tomcat.sessions.active.max | Count | Maximum number of sessions that have been active at the same time |
+>| tomcat.sessions.alive.max | tomcat.sessions.alive.max | Milliseconds | Longest time (in seconds) that an expired session was alive |
+>| tomcat.sessions.created | tomcat.sessions.created | Count | Number of sessions that have been created |
+>| tomcat.sessions.expired | tomcat.sessions.expired | Count | Number of sessions that have expired |
+>| tomcat.sessions.rejected | tomcat.sessions.rejected | Count | Number of sessions that were not created because the maximum number of active sessions reached. |
+>| tomcat.sessions.active.current | tomcat.sessions.active.current | Count | Tomcat Session Active Count |
+
+### Ingress
+
+>[!div class="mx-tdCol2BreakAll"]
+>| Display Name | Azure Metric Name | Unit | Details |
+>|--|--|-|-|
+>| Bytes Received | IngressBytesReceived | Bytes | Count of bytes received by Azure Spring Apps from the clients |
+>| Bytes Sent | IngressBytesSent | Bytes | Count of bytes sent by Azure Spring Apps to the clients |
+>| Requests | IngressRequests | Count | Count of requests by Azure Spring Apps from the clients |
+>| Failed Requests | IngressFailedRequests | Count | Count of failed requests by Azure Spring Apps from the clients |
+>| Response Status | IngressResponseStatus | Count | HTTP response status returned by Azure Spring Apps. The response status code distribution can be further categorized to show responses in 2xx, 3xx, 4xx, and 5xx categories |
+>| Response Time | IngressResponseTime | Seconds | Http response time return by Azure Spring Apps |
+>| Throughput In (bytes/s) | IngressBytesReceivedRate | BytesPerSecond | Bytes received per second by Azure Spring Apps from the clients |
+>| Throughput Out (bytes/s) | IngressBytesSentRate | BytesPerSecond | Bytes sent per second by Azure Spring Apps to the clients |
+
+## Next steps
+
+* [Quickstart: Monitoring Azure Spring Apps apps with logs, metrics, and tracing](./quickstart-logs-metrics-tracing.md)
+* [Getting started with Azure Metrics Explorer](../azure-monitor/essentials/metrics-getting-started.md)
+* [Analyze logs and metrics with diagnostics settings](./diagnostic-services.md)
+* [Tutorial: Monitor Spring app resources using alerts and action groups](./tutorial-alerts-action-groups.md)
+* [Quotas and Service Plans for Azure Spring Apps](./quotas.md)
spring-apps Concept Security Controls https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/concept-security-controls.md
+
+ Title: Security controls for Azure Spring Apps Service
+description: Use security controls built in into Azure Spring Apps Service.
++++ Last updated : 04/23/2020+++
+# Security controls for Azure Spring Apps Service
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Security controls are built in into Azure Spring Apps Service.
+
+A security control is a quality or feature of an Azure service that contributes to the service's ability to prevent, detect, and respond to security vulnerabilities. For each control, we use *Yes* or *No* to indicate whether it is currently in place for the service. We use *N/A* for a control that is not applicable to the service.
+
+**Data protection security controls**
+
+| Security control | Yes/No | Notes | Documentation |
+|:-|:-|:-|:-|
+| Server-side encryption at rest: Microsoft-managed keys | Yes | User uploaded source and artifacts, config server settings, app settings, and data in persistent storage are stored in Azure Storage, which automatically encrypts the content at rest.<br><br>Config server cache, runtime binaries built from uploaded source, and application logs during the application lifetime are saved to Azure managed disk, which automatically encrypts the content at rest.<br><br>Container images built from user uploaded source are saved in Azure Container Registry, which automatically encrypts the image content at rest. | [Azure Storage encryption for data at rest](../storage/common/storage-service-encryption.md)<br><br>[Server-side encryption of Azure managed disks](../virtual-machines/disk-encryption.md)<br><br>[Container image storage in Azure Container Registry](../container-registry/container-registry-storage.md) |
+| Encryption in transient | Yes | User app public endpoints use HTTPS for inbound traffic by default. | |
+| API calls encrypted | Yes | Management calls to configure Azure Spring Apps service occur via Azure Resource Manager calls over HTTPS. | [Azure Resource Manager](../azure-resource-manager/index.yml) |
+| Customer Lockbox | Yes | Provide Microsoft with access to relevant customer data during support scenarios. | [Customer Lockbox for Microsoft Azure](../security/fundamentals/customer-lockbox-overview.md)
+
+**Network access security controls**
+
+| Security control | Yes/No | Notes | Documentation |
+|:-|:-|:-|:-|
+| Service Tag | Yes | Use **AzureSpringCloud** service tag to define outbound network access controls on [network security groups](../virtual-network/network-security-groups-overview.md#security-rules) or [Azure Firewall](../firewall/service-tags.md), to allow traffic to applications in Azure Spring Apps. | [Service tags](../virtual-network/service-tags-overview.md) |
+
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md)
spring-apps Concept Understand App And Deployment https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/concept-understand-app-and-deployment.md
+
+ Title: "App and deployment in Azure Spring Apps"
+description: This topic explains the distinction between application and deployment in Azure Spring Apps.
++++ Last updated : 07/23/2020+++
+# App and deployment in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+**App** and **Deployment** are the two key concepts in the resource model of Azure Spring Apps. In Azure Spring Apps, an *App* is an abstraction of one business app. One version of code or binary deployed as the *App* runs in a *Deployment*. Apps run in an *Azure Spring Apps Service Instance*, or simply *service instance*, as shown next.
+
+ ![Apps and Deployments](./media/spring-cloud-app-and-deployment/app-deployment-rev.png)
+
+You can have multiple service instances within a single Azure subscription, but the Azure Spring Apps Service is easiest to use when all of the Apps that make up a business app reside within a single service instance.
+
+Azure Spring Apps standard tier allows one App to have one production deployment and one staging deployment, so that you can do blue/green deployment on it easily.
+
+## App
+
+The following features/properties are defined on App level.
+
+| Features | Description |
+|:--|:-|
+| Public</br>Endpoint | The URL to access the app |
+| Custom</br>Domain | CNAME record that secures the custom domain |
+| Service</br>Binding | Out of box connection with other Azure services |
+| Managed</br>Identity | Managed identity by Azure Active Directory allows your app to easily access other Azure AD-protected resources such as Azure Key Vault |
+| Persistent</br>Storage | Setting that enables data to persist beyond app restart |
+
+## Deployment
+
+The following features/properties are defined on Deployment level, and will be exchanged when swapping production/staging deployment.
+
+| Features | Description |
+|:--|:-|
+| CPU | Number of vcores per App instance |
+| Memory | Gb of memory per App instance|
+| Instance</br>Count | The number of app instances, set manually or automatically |
+| Auto-Scale | Scale instance count automatically based on predefined rules and schedules |
+| JVM</br>Options | Setting JVM options |
+| Environment</br>Variables | Setting environment variables |
+| Runtime</br>Version | Java 8/Java 11|
+
+## Restrictions
+
+* **An App must have one production Deployment**: Deleting a production Deployment is blocked by the API. It should be swapped to staging before deleting.
+* **An App can have at most two Deployments**: Creating more than two deployments is blocked by the API. Deploy your new binary to either the existing production or staging deployment.
+* **Deployment management is not available in Basic Tier**: Use Standard tier for Blue-Green deployment capability.
+
+## Next steps
+
+* [Set up a staging environment in Azure Spring Apps](./how-to-staging-environment.md)
spring-apps Concepts Blue Green Deployment Strategies https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/concepts-blue-green-deployment-strategies.md
+
+ Title: "Blue-green deployment strategies in Azure Spring Apps"
+description: This topic explains two approaches to blue-green deployments in Azure Spring Apps.
++++ Last updated : 11/12/2021+++
+# Blue-green deployment strategies in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes the blue-green deployment support in Azure Spring Apps.
+
+Azure Spring Apps (Standard tier and higher) permits two deployments for every app, only one of which receives production traffic. This pattern is commonly known as blue-green deployment. Azure Spring Apps's support for blue-green deployment, together with a [Continuous Delivery (CD)](/devops/deliver/what-is-continuous-delivery) pipeline and rigorous automated testing, allows agile application deployments with high confidence.
+
+## Alternating deployments
+
+The simplest way to implement blue-green deployment with Azure Spring Apps is to create two fixed deployments and always deploy to the deployment that isn't receiving production traffic. With the [Azure Spring Apps task for Azure Pipelines](/azure/devops/pipelines/tasks/deploy/azure-spring-cloud), you can deploy this way just by setting the `UseStagingDeployment` flag to `true`.
+
+Here's how the alternating deployments approach works in practice:
+
+Suppose your application has two deployments: `deployment1` and `deployment2`. Currently, `deployment1` is set as the production deployment, and is running version `v3` of the application.
+
+This makes `deployment2` the staging deployment. Thus, when the Continuous Delivery (CD) pipeline is ready to run, it deploys the next version of the app, version `v4`, onto the staging deployment `deployment2`.
+
+![Two deployments: deployment1 receives production traffic](media/spring-cloud-blue-green-patterns/alternating-deployments-1.png)
+
+After `v4` has started up on `deployment2`, you can run automated and manual tests against it through a private test endpoint to ensure `v4` meets all expectations.
+
+![V4 is now deployed on deployment2 and undergoes testing](media/spring-cloud-blue-green-patterns/alternating-deployments-2.png)
+
+When you have confidence in `v4`, you can set `deployment2` as the production deployment so that it receives all production traffic. `v3` will remain running on `deployment1` in case you discover a critical issue that requires rolling back.
+
+![V4 on deployment2 now receives production traffic](media/spring-cloud-blue-green-patterns/alternating-deployments-3.png)
+
+Now, `deployment1` is the staging deployment. So the next run of the deployment pipeline deploys onto `deployment1`.
+
+![V5 deployed on deployment1](media/spring-cloud-blue-green-patterns/alternating-deployments-4.png)
+
+You can now test `V5` on `deployment1`'s private test endpoint.
+
+![V5 tested on deployment1](media/spring-cloud-blue-green-patterns/alternating-deployments-5.png)
+
+Finally, after `v5` meets all your expectations, you set `deployment1` as the production deployment once again, so that `v5` receives all production traffic.
+
+![V5 receives traffic on deployment1](media/spring-cloud-blue-green-patterns/alternating-deployments-6.png)
+
+### Tradeoffs of the alternating deployments approach
+
+The alternating deployments approach is simple and fast, as it doesn't require the creation of new deployments. However, it does present several disadvantages, as described in the following sections.
+
+#### Persistent staging deployment
+
+The staging deployment always remains running, and thus consuming resources of the Azure Spring Apps instance. This effectively doubles the resource requirements of each application on Azure Spring Apps.
+
+#### The approval race condition
+
+Suppose in the above application, the release pipeline requires manual approval before each new version of the application can receive production traffic. This creates the risk that while one version (`v6`) awaits manual approval on the staging deployment, the deployment pipeline will run again and overwrite it with a newer version (`v7`). Then, when the approval for `v6` is granted, the pipeline that deployed `v6` will set the staging deployment as production. But now it will be the unapproved `v7`, not the approved `v6`, that is deployed on that deployment and receives traffic.
+
+![The approval race condition](media/spring-cloud-blue-green-patterns/alternating-deployments-race-condition.png)
+
+You may be able to prevent the race condition by ensuring that the deployment flow for one version can't begin until the deployment flow for all previous versions is complete or aborted. Another way to prevent the approval race condition is to use the Named Deployments approach described below.
+
+## Named deployments
+
+In the named deployments approach, a new deployment is created for each new version of the application being deployed. After the application is tested on its bespoke deployment, that deployment is set as the production deployment. The deployment containing the previous version can be allowed to persist just long enough to be confident that a rollback won't be needed.
+
+In the illustration below, version `v5` is running on the deployment `deployment-v5`. The deployment name now contains the version because the deployment was created specifically for this version. There's no other deployment at the outset. Now, to deploy version `v6`, the deployment pipeline creates a new deployment `deployment-v6` and deploys app version `v6` there.
+
+![Deploying new version on a named deployment](media/spring-cloud-blue-green-patterns/named-deployment-1.png)
+
+There's no risk of another version being deployed in parallel. First, Azure Spring Apps doesn't allow the creation of a third deployment while two deployments already exist. Second, even if it was possible to have more than two deployments, each deployment is identified by the version of the application it contains. Thus, the pipeline orchestrating the deployment of `v6` would only attempt to set `deployment-v6` as the production deployment.
+
+![New version receives production traffic named deployment](media/spring-cloud-blue-green-patterns/named-deployment-2.png)
+
+After the deployment created for the new version receives production traffic, you'll need to remove the deployment containing the previous version to make room for future deployments. You may wish to postpone by some number of minutes or hours so you can roll back to the previous version if you discover a critical issue in the new version.
+
+![After a fallback period, deleting the previous deployment](media/spring-cloud-blue-green-patterns/named-deployment-3.png)
+
+### Tradeoffs of the named deployments approach
+
+The named deployments approach has the following benefits:
+
+* It prevents the approval race condition.
+* It reduces resource consumption by deleting the staging deployment when it's not in use.
+
+However, there are drawbacks as well, as described in the following section.
+
+#### Deployment pipeline failures
+
+Between the time a deployment starts and the time the staging deployment is deleted, any additional attempts to run the deployment pipeline will fail. The pipeline will attempt to create a new deployment, which will result in an error because only two deployments are permitted per application in Azure Spring Apps.
+
+Therefore, the deployment orchestration must either have the means to retry a failed deployment process at a later time, or the means to ensure that the deployment flows for each version will remain queued until the flow is completed for all previous versions.
+
+## Next steps
+
+* [Automate application deployments to Azure Spring Apps](./how-to-cicd.md)
spring-apps Connect Managed Identity To Azure Sql https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/connect-managed-identity-to-azure-sql.md
+
+ Title: Use Managed identity to connect Azure SQL to Azure Spring Apps app
+description: Set up managed identity to connect Azure SQL to an Azure Spring Apps app.
++++ Last updated : 03/25/2021+++
+# Use a managed identity to connect Azure SQL Database to an Azure Spring Apps app
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to create a managed identity for an Azure Spring Apps app and use it to access Azure SQL Database.
+
+[Azure SQL Database](https://azure.microsoft.com/services/sql-database/) is the intelligent, scalable, relational database service built for the cloud. ItΓÇÖs always up to date, with AI-powered and automated features that optimize performance and durability. Serverless compute and Hyperscale storage options automatically scale resources on demand, so you can focus on building new applications without worrying about storage size or resource management.
+
+## Prerequisites
+
+* Follow the [Spring Data JPA tutorial](/azure/developer/java/spring-framework/configure-spring-data-jpa-with-azure-sql-server) to provision an Azure SQL Database and get it work with a Java app locally
+* Follow the [Azure Spring Apps system-assigned managed identity tutorial](./how-to-enable-system-assigned-managed-identity.md) to provision an Azure Spring Apps app with MI enabled
+
+## Grant permission to the Managed Identity
+
+Connect to your SQL server and run the following SQL query:
+
+```sql
+CREATE USER [<MIName>] FROM EXTERNAL PROVIDER;
+ALTER ROLE db_datareader ADD MEMBER [<MIName>];
+ALTER ROLE db_datawriter ADD MEMBER [<MIName>];
+ALTER ROLE db_ddladmin ADD MEMBER [<MIName>];
+GO
+```
+
+This `<MIName>` follows the rule: `<service instance name>/apps/<app name>`, for example: `myspringcloud/apps/sqldemo`. You can also query the MIName with Azure CLI:
+
+```azurecli
+az ad sp show --id <identity object ID> --query displayName
+```
+
+## Configure your Java app to use Managed Identity
+
+Open the *src/main/resources/application.properties* file, and add `Authentication=ActiveDirectoryMSI;` at the end of the following line. Be sure to use the correct value for $AZ_DATABASE_NAME variable.
+
+```properties
+spring.datasource.url=jdbc:sqlserver://$AZ_DATABASE_NAME.database.windows.net:1433;database=demo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;Authentication=ActiveDirectoryMSI;
+```
+
+## Build and deploy the app to Azure Spring Apps
+
+Rebuild the app and deploy it to the Azure Spring Apps app provisioned in the second bullet point under Prerequisites. Now you have a Spring Boot application, authenticated by a Managed Identity, that uses JPA to store and retrieve data from an Azure SQL Database in Azure Spring Apps.
+
+## Next steps
+
+* [How to access Storage blob with managed identity in Azure Spring Apps](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/managed-identity-storage-blob)
+* [How to enable system-assigned managed identity for applications in Azure Spring Apps](./how-to-enable-system-assigned-managed-identity.md)
+* [Learn more about managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md)
+* [Authenticate Azure Spring Apps with Key Vault in GitHub Actions](./github-actions-key-vault.md)
spring-apps Diagnostic Services https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/diagnostic-services.md
+
+ Title: Analyze logs and metrics in Azure Spring Apps | Microsoft Docs
+description: Learn how to analyze diagnostics data in Azure Spring Apps
+++ Last updated : 01/06/2020++++
+# Analyze logs and metrics with diagnostics settings
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to analyze diagnostics data in Azure Spring Apps.
+
+Using the diagnostics functionality of Azure Spring Apps, you can analyze logs and metrics with any of the following
+
+* Use Azure Log Analytics, where the data is written to Azure Storage. There is a delay when exporting logs to Log Analytics.
+* Save logs to a storage account for auditing or manual inspection. You can specify the retention time (in days).
+* Stream logs to your event hub for ingestion by a third-party service or custom analytics solution.
+
+Choose the log category and metric category you want to monitor.
+
+> [!TIP]
+> Just want to stream your logs? Check out this [Azure CLI command](/cli/azure/spring/app#az-spring-cloud-app-logs)!
+
+## Logs
+
+|Log | Description |
+|-|-|
+| **ApplicationConsole** | Console log of all customer applications. |
+| **SystemLogs** | Currently, only [Spring Cloud Config Server](https://cloud.spring.io/spring-cloud-config/reference/html/#_spring_cloud_config_server) logs in this category. |
+| **IngressLogs** | [Ingress logs](#show-ingress-log-entries-containing-a-specific-host) of all customer's applications, only access logs. |
+| **BuildLogs** | [Build logs](#show-build-log-entries-for-a-specific-app) of all customer's applications for each build stage. |
+
+## Metrics
+
+For a complete list of metrics, see the [User metrics options](./concept-metrics.md#user-metrics-options) section of [Metrics for Azure Spring Apps](concept-metrics.md).
+
+To get started, enable one of these services to receive the data. To learn about configuring Log Analytics, see [Get started with Log Analytics in Azure Monitor](../azure-monitor/logs/log-analytics-tutorial.md).
+
+## Configure diagnostics settings
+
+1. In the Azure portal, go to your Azure Spring Apps instance.
+1. Select **diagnostics settings** option, and then select **Add diagnostics setting**.
+1. Enter a name for the setting, and then choose where you want to send the logs. You can select any combination of the following three options:
+ * **Archive to a storage account**
+ * **Stream to an event hub**
+ * **Send to Log Analytics**
+
+1. Choose which log category and metric category you want to monitor, and then specify the retention time (in days). The retention time applies only to the storage account.
+1. Select **Save**.
+
+> [!NOTE]
+> There might be a gap of up to 15 minutes between when logs or metrics are emitted and when they appear in your storage account, your event hub, or Log Analytics.
+> If the Azure Spring Apps instance is deleted or moved, the operation won't cascade to the **diagnostics settings** resources. The **diagnostics settings** resources have to be deleted manually before the operation against its parent, the Azure Spring Apps instance. Otherwise, if a new Azure Spring Apps instance is provisioned with the same resource ID as the deleted one, or if the Azure Spring Apps instance is moved back, the previous **diagnostics settings** resources continue extending it.
+
+## View the logs and metrics
+
+There are various methods to view logs and metrics as described under the following headings.
+
+### Use the Logs blade
+
+1. In the Azure portal, go to your Azure Spring Apps instance.
+1. To open the **Log Search** pane, select **Logs**.
+1. In the **Tables** search box
+ * To view logs, enter a simple query such as:
+
+ ```sql
+ AppPlatformLogsforSpring
+ | limit 50
+ ```
+
+ * To view metrics, enter a simple query such as:
+
+ ```sql
+ AzureMetrics
+ | limit 50
+ ```
+
+1. To view the search result, select **Run**.
+
+### Use Log Analytics
+
+1. In the Azure portal, in the left pane, select **Log Analytics**.
+1. Select the Log Analytics workspace that you chose when you added your diagnostics settings.
+1. To open the **Log Search** pane, select **Logs**.
+1. In the **Tables** search box,
+ * to view logs, enter a simple query such as:
+
+ ```sql
+ AppPlatformLogsforSpring
+ | limit 50
+ ```
+
+ * to view metrics, enter a simple query such as:
+
+ ```sql
+ AzureMetrics
+ | limit 50
+ ```
+
+1. To view the search result, select **Run**.
+1. You can search the logs of the specific application or instance by setting a filter condition:
+
+ ```sql
+ AppPlatformLogsforSpring
+ | where ServiceName == "YourServiceName" and AppName == "YourAppName" and InstanceName == "YourInstanceName"
+ | limit 50
+ ```
+
+ > [!NOTE]
+ > `==` is case sensitive, but `=~` is not.
+
+To learn more about the query language that's used in Log Analytics, see [Azure Monitor log queries](/azure/data-explorer/kusto/query/). To query all your Log Analytics logs from a centralized client, check out [Azure Data Explorer](/azure/data-explorer/query-monitor-data).
+
+### Use your storage account
+
+1. In the Azure portal, find **Storage accounts** in left navigation panel or search box.
+1. Select the storage account that you chose when you added your diagnostics settings.
+1. To open the **Blob Container** pane, select **Blobs**.
+1. To review application logs, search for a container called **insights-logs-applicationconsole**.
+1. To review application metrics, search for a container called **insights-metrics-pt1m**.
+
+To learn more about sending diagnostics information to a storage account, see [Store and view diagnostics data in Azure Storage](../storage/common/storage-introduction.md).
+
+### Use your event hub
+
+1. In the Azure portal, find **Event Hubs** in left navigation panel or search box.
+
+1. Search for and select the event hub that you chose when you added your diagnostics settings.
+1. To open the **Event Hub List** pane, select **Event Hubs**.
+1. To review application logs, search for an event hub called **insights-logs-applicationconsole**.
+1. To review application metrics, search for an event hub called **insights-metrics-pt1m**.
+
+To learn more about sending diagnostics information to an event hub, see [Streaming Azure Diagnostics data in the hot path by using Event Hubs](../azure-monitor/agents/diagnostics-extension-stream-event-hubs.md).
+
+## Analyze the logs
+
+Azure Log Analytics is running with a Kusto engine so you can query your logs for analysis. For a quick introduction to querying logs by using Kusto, review the [Log Analytics tutorial](../azure-monitor/logs/log-analytics-tutorial.md).
+
+Application logs provide critical information and verbose logs about your application's health, performance, and more. In the next sections are some simple queries to help you understand your application's current and past states.
+
+### Show application logs from Azure Spring Apps
+
+To review a list of application logs from Azure Spring Apps, sorted by time with the most recent logs shown first, run the following query:
+
+```sql
+AppPlatformLogsforSpring
+| project TimeGenerated , ServiceName , AppName , InstanceName , Log
+| sort by TimeGenerated desc
+```
+
+### Show logs entries containing errors or exceptions
+
+To review unsorted log entries that mention an error or exception, run the following query:
+
+```sql
+AppPlatformLogsforSpring
+| project TimeGenerated , ServiceName , AppName , InstanceName , Log
+| where Log contains "error" or Log contains "exception"
+```
+
+Use this query to find errors, or modify the query terms to find specific error codes or exceptions.
+
+### Show the number of errors and exceptions reported by your application over the last hour
+
+To create a pie chart that displays the number of errors and exceptions logged by your application in the last hour, run the following query:
+
+```sql
+AppPlatformLogsforSpring
+| where TimeGenerated > ago(1h)
+| where Log contains "error" or Log contains "exception"
+| summarize count_per_app = count() by AppName
+| sort by count_per_app desc
+| render piechart
+```
+
+### Show ingress log entries containing a specific host
+
+To review log entries that are generated by a specific host, run the following query:
+
+```sql
+AppPlatformIngressLogs
+| where TimeGenerated > ago(1h) and Host == "ingress-asc.test.azuremicroservices.io"
+| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
+| sort by TimeGenerated
+```
+
+Use this query to find response `Status`, `RequestTime`, and other properties of this specific host's ingress logs.
+
+### Show ingress log entries for a specific requestId
+
+To review log entries for a specific `requestId` value *\<request_ID>*, run the following query:
+
+```sql
+AppPlatformIngressLogs
+| where TimeGenerated > ago(1h) and ReqId == "<request_ID>"
+| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
+| sort by TimeGenerated
+```
+
+### Show build log entries for a specific app
+
+To review log entries for a specific app during the build process, run the following query:
+
+```sql
+AppPlatformBuildLogs
+| where TimeGenerated > ago(1h) and PodName contains "<app-name>"
+| sort by TimeGenerated
+```
+
+### Show build log entries for a specific app in a specific build stage
+
+To review log entries for a specific app in a specific build stage, run the following query. Replace the *`<app-name>`* placeholder with your application name. Replace the *`<build-stage>`* placeholder with one of the following values, which represent the stages of the build process: `prepare`, `detect`, `restore`, `analyze`, `build`, `export`, or `completion`.
+
+```sql
+AppPlatformBuildLogs
+| where TimeGenerated > ago(1h) and PodName contains "<app-name>" and ContainerName == "<build-stage>"
+| sort by TimeGenerated
+```
+
+### Learn more about querying application logs
+
+Azure Monitor provides extensive support for querying application logs by using Log Analytics. To learn more about this service, see [Get started with log queries in Azure Monitor](../azure-monitor/logs/get-started-queries.md). For more information about building queries to analyze your application logs, see [Overview of log queries in Azure Monitor](../azure-monitor/logs/log-query-overview.md).
+
+## Frequently asked questions (FAQ)
+
+### How do I convert multi-line Java stack traces into a single line?
+
+There is a workaround to convert your multi-line stack traces into a single line. You can modify the Java log output to reformat stack trace messages, replacing newline characters with a token. If you use Java Logback library, you can reformat stack trace messages by adding `%replace(%ex){'[\r\n]+', '\\n'}%nopex` as follows:
+
+```xml
+<configuration>
+ <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>
+ level: %level, message: "%logger{36}: %msg", exceptions: "%replace(%ex){'[\r\n]+', '\\n'}%nopex"%n
+ </pattern>
+ </encoder>
+ </appender>
+ <root level="INFO">
+ <appender-ref ref="CONSOLE"/>
+ </root>
+</configuration>
+```
+
+You can then replace the token with newline characters in Log Analytics as below:
+
+```sql
+AppPlatformLogsforSpring
+| extend Log = array_strcat(split(Log, '\\n'), '\n')
+```
+
+You may be able to use the same strategy for other Java log libraries.
+
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md)
spring-apps Disaster Recovery https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/disaster-recovery.md
+
+ Title: Azure Spring Apps geo-disaster recovery | Microsoft Docs
+description: Learn how to protect your Spring application from regional outages
+++ Last updated : 10/24/2019++++
+# Azure Spring Apps disaster recovery
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains some strategies you can use to protect your applications in Azure Spring Apps from experiencing downtime. Any region or data center may experience downtime caused by regional disasters, but careful planning can mitigate impact on your customers.
+
+## Plan your application deployment
+
+Applications in Azure Spring Apps run in a specific region. Azure operates in multiple geographies around the world. An Azure geography is a defined area of the world that contains at least one Azure Region. An Azure region is an area within a geography, containing one or more data centers. Each Azure region is paired with another region within the same geography, together making a regional pair. Azure serializes platform updates (planned maintenance) across regional pairs, ensuring that only one region in each pair is updated at a time. In the event of an outage affecting multiple regions, at least one region in each pair will be prioritized for recovery.
+
+Ensuring high availability and protection from disasters requires that you deploy your Spring applications to multiple regions. Azure provides a list of [paired regions](../availability-zones/cross-region-replication-azure.md) so that you can plan your Spring app deployments to regional pairs. We recommend that you consider three key factors when designing your architecture: region availability, Azure paired regions, and service availability.
+
+* Region availability: Choose a geographic area close to your users to minimize network lag and transmission time.
+* Azure paired regions: Choose paired regions within your chosen geographic area to ensure coordinated platform updates and prioritized recovery efforts if needed.
+* Service availability: Decide whether your paired regions should run hot/hot, hot/warm, or hot/cold.
+
+## Use Azure Traffic Manager to route traffic
+
+[Azure Traffic Manager](../traffic-manager/traffic-manager-overview.md) provides DNS-based traffic load-balancing and can distribute network traffic across multiple regions. Use Azure Traffic Manager to direct customers to the closest Azure Spring Apps service instance to them. For best performance and redundancy, direct all application traffic through Azure Traffic Manager before sending it to your Azure Spring Apps service.
+
+If you have applications in Azure Spring Apps running in multiple regions, use Azure Traffic Manager to control the flow of traffic to your applications in each region. Define an Azure Traffic Manager endpoint for each service using the service IP. Customers should connect to an Azure Traffic Manager DNS name pointing to the Azure Spring Apps service. Azure Traffic Manager load balances traffic across the defined endpoints. If a disaster strikes a data center, Azure Traffic Manager will direct traffic from that region to its pair, ensuring service continuity.
+
+## Create Azure Traffic Manager for Azure Spring Apps
+
+1. Create Azure Spring Apps in two different regions.
+You will need two service instances of Azure Spring Apps deployed in two different regions (East US and West Europe). Launch an existing application in Azure Spring Apps using the Azure portal to create two service instances. Each will serve as primary and fail-over endpoint for Traffic.
+
+**Two service instances info:**
+
+| Service Name | Location | Application |
+|--|--|--|
+| service-sample-a | East US | gateway / auth-service / account-service |
+| service-sample-b | West Europe | gateway / auth-service / account-service |
+
+2. Set up Custom Domain for Service
+Follow [Custom Domain Document](./tutorial-custom-domain.md) to set up custom domain for these two existing service instances. After successful set up, both service instances will bind to custom domain: bcdr-test.contoso.com
+
+3. Create a traffic manager and two endpoints: [Create a Traffic Manager profile using the Azure portal](../traffic-manager/quickstart-create-traffic-manager-profile.md).
+
+Here is the traffic manager profile:
+* Traffic Manager DNS Name: `http://asa-bcdr.trafficmanager.net`
+* Endpoint Profiles:
+
+| Profile | Type | Target | Priority | Custom Header Settings |
+|--|--|--|--|--|
+| Endpoint A Profile | External Endpoint | service-sample-a.azuremicroservices.io | 1 | host: bcdr-test.contoso.com |
+| Endpoint B Profile | External Endpoint | service-sample-b.azuremicroservices.io | 2 | host: bcdr-test.contoso.com |
+
+4. Create a CNAME record in DNS Zone: bcdr-test.contoso.com CNAME asa-bcdr.trafficmanager.net.
+
+5. Now, the environment is completely set up. Customers should be able to access the app via: bcdr-test.contoso.com
+
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md)
spring-apps Expose Apps Gateway End To End Tls https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/expose-apps-gateway-end-to-end-tls.md
+
+ Title: Expose applications with end-to-end TLS in a virtual network using Application Gateway
+
+description: How to expose applications to the internet using Application Gateway
++++ Last updated : 02/28/2022+
+ms.devlang: java, azurecli
++
+# Expose applications with end-to-end TLS in a virtual network
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to expose applications to the internet using Application Gateway. When an Azure Spring Apps service instance is deployed in your virtual network, applications on the service instance are only accessible in the private network. To make the applications accessible on the Internet, you need to integrate with Azure Application Gateway.
+
+## Prerequisites
+
+- [Azure CLI version 2.0.4 or later](/cli/azure/install-azure-cli).
+- An Azure Spring Apps service instance deployed in a virtual network with an application accessible over the private network using the default `.private.azuremicroservices.io` domain suffix. For more information, see [Deploy Azure Spring Apps in a virtual network](./how-to-deploy-in-azure-virtual-network.md)
+- A custom domain to be used to access the application.
+- A certificate, stored in Key Vault, which matches the custom domain to be used to establish the HTTPS listener. For more information, see [Tutorial: Import a certificate in Azure Key Vault](../key-vault/certificates/tutorial-import-certificate.md).
+
+## Configure Application Gateway for Azure Spring Apps
+
+We recommend that the domain name, as seen by the browser, is the same as the host name which Application Gateway uses to direct traffic to the Azure Spring Apps back end. This recommendation provides the best experience when using Application Gateway to expose applications hosted in Azure Spring Apps and residing in a virtual network. If the domain exposed by Application Gateway is different from the domain accepted by Azure Spring Apps, cookies and generated redirect URLs (for example) can be broken.
+
+To configure Application Gateway in front of Azure Spring Apps, use the following steps.
+
+1. Follow the instructions in [Deploy Azure Spring Apps in a virtual network](./how-to-deploy-in-azure-virtual-network.md).
+1. Follow the instructions in [Access your application in a private network](./access-app-virtual-network.md).
+1. Acquire a certificate for your domain of choice and store that in Key Vault. For more information, see [Tutorial: Import a certificate in Azure Key Vault](../key-vault/certificates/tutorial-import-certificate.md).
+1. Configure a custom domain and corresponding certificate from Key Vault on an app deployed onto Azure Spring Apps. For more information, see [Tutorial: Map an existing custom domain to Azure Spring Apps](./tutorial-custom-domain.md).
+1. Deploy Application Gateway in a virtual network configured according to the following list:
+ - Use Azure Spring Apps in the backend pool, referenced by the domain suffixed with `private.azuremicroservices.io`.
+ - Include an HTTPS listener using the same certificate from Key Vault.
+ - Configure the virtual network with HTTP settings that use the custom domain name configured on Azure Spring Apps instead of the domain suffixed with `private.azuremicroservices.io`.
+1. Configure your public DNS to point to Application Gateway.
+
+## Define variables
+
+Next, use the following commands to define variables for the resource group and virtual network you created as directed in [Deploy Azure Spring Apps in a virtual network](./how-to-deploy-in-azure-virtual-network.md). Customize the values based on your real environment. When you define `SPRING_APP_PRIVATE_FQDN`, remove `https://` from the URI.
+
+```bash
+SUBSCRIPTION='subscription-id'
+RESOURCE_GROUP='my-resource-group'
+LOCATION='eastus'
+SPRING_CLOUD_NAME='name-of-spring-cloud-instance'
+APPNAME='name-of-app-in-azure-spring-apps'
+SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
+VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
+APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
+APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'
+```
+
+## Sign in to Azure
+
+Use the following command to sign in to the Azure CLI and choose your active subscription.
+
+```azurecli
+az login
+az account set --subscription $SUBSCRIPTION
+```
+
+## Acquire a certificate
+
+### [Use a publicly signed certificate](#tab/public-cert)
+
+For production deployments, you'll most likely use a publicly signed certificate. In this case, import the certificate in Azure Key Vault. For more information, see [Tutorial: Import a certificate in Azure Key Vault](../key-vault/certificates/tutorial-import-certificate.md). Make sure the certificate includes the entire certificate chain.
+
+### [Use a self-signed certificate](#tab/self-signed-cert)
+
+When you need a self-signed certificate for testing or development, you need to create it. You'll also need to ensure that the list of "Subject Alternative Names" in the certificate contains the domain name on which you'll expose the application. When creating a self-signed certificate through Azure Key Vault, you can do so through the Azure portal. Alternatively, when using the Azure CLI, you'll need a policy JSON file.
+
+To request the default policy, use the following command:
+
+```azurecli
+az keyvault certificate get-default-policy
+```
+
+Next, adapt the policy JSON as shown in the following example, indicating the `subject` and `SubjectAlternativeNames`:
+
+```json
+{
+ // ...
+ "subject": "C=US, ST=WA, L=Redmond, O=Contoso, OU=Contoso HR, CN=myapp.mydomain.com",
+ "subjectAlternativeNames": {
+ "dnsNames": [
+ "myapp.mydomain.com",
+ "*.myapp.mydomain.com"
+ ],
+ "emails": [
+ "hello@contoso.com"
+ ],
+ "upns": []
+ }
+ // ...
+}
+```
+
+After you've finished updating the policy JSON (see [Update Certificate Policy](/rest/api/keyvault/certificates/update-certificate-policy/update-certificate-policy)), you can create a self-signed certificate in Key Vault by using the following commands:
+
+```azurecli
+KV_NAME='name-of-key-vault'
+CERT_NAME_IN_KEY_VAULT='name-of-certificate-in-key-vault'
+
+az keyvault certificate create \
+ --vault-name $KV_NAME \
+ --name $CERT_NAME_IN_KEY_VAULT \
+ --policy "$KV_CERT_POLICY"
+```
+++
+## Configure the public domain name on Azure Spring Apps
+
+Traffic will enter the application deployed on Azure Spring Apps using the public domain name. To configure your application to listen to this host name and do so over HTTPS, use the following commands to add a custom domain to your app:
+
+```azurecli
+KV_NAME='name-of-key-vault'
+KV_RG='resource-group-name-of-key-vault'
+CERT_NAME_IN_AZURE_SPRING_APPS='name-of-certificate-in-Azure-Spring-Apps'
+CERT_NAME_IN_KEY_VAULT='name-of-certificate-with-intermediaries-in-key-vault'
+DOMAIN_NAME=myapp.mydomain.com
+
+# provide permissions to Azure Spring Apps to read the certificate from Key Vault:
+VAULTURI=$(az keyvault show -n $KV_NAME -g $KV_RG --query properties.vaultUri -o tsv)
+
+# get the object id for the Azure Spring Apps Domain-Management Service Principal:
+ASADM_OID=$(az ad sp show --id 03b39d0f-4213-4864-a245-b1476ec03169 --query objectId --output tsv)
+
+# allow this Service Principal to read and list certificates and secrets from Key Vault:
+az keyvault set-policy -g $KV_RG -n $KV_NAME --object-id $ASADM_OID --certificate-permissions get list --secret-permissions get list
+
+# add custom domain name and configure TLS using the certificate:
+az spring certificate add \
+ --resource-group $RESOURCE_GROUP \
+ --service $SPRING_CLOUD_NAME \
+ --name $CERT_NAME_IN_AZURE_SPRING_APPS \
+ --vault-certificate-name $CERT_NAME_IN_KEY_VAULT \
+ --vault-uri $VAULTURI
+az spring app custom-domain bind \
+ --resource-group $RESOURCE_GROUP \
+ --service $SPRING_CLOUD_NAME \
+ --domain-name $DOMAIN_NAME \
+ --certificate $CERT_NAME_IN_AZURE_SPRING_APPS \
+ --app $APPNAME
+```
+## Create network resources
+
+The Azure Application Gateway to be created will join the same virtual network as--or peered virtual network to--the Azure Spring Apps service instance. First create a new subnet for the Application Gateway in the virtual network using `az network vnet subnet create`, and also create a Public IP address as the Frontend of the Application Gateway using `az network public-ip create`.
+
+```azurecli
+APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
+az network vnet subnet create \
+ --name $APPLICATION_GATEWAY_SUBNET_NAME \
+ --resource-group $RESOURCE_GROUP \
+ --vnet-name $VIRTUAL_NETWORK_NAME \
+ --address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
+az network public-ip create \
+ --resource-group $RESOURCE_GROUP \
+ --location $LOCATION \
+ --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
+ --allocation-method Static \
+ --sku Standard
+```
+
+## Create a Managed Identity for Application Gateway
+
+Application Gateway will need to be able to access Key Vault to read the certificate. To do so, it will use a User-assigned [Managed Identity](../active-directory/managed-identities-azure-resources/overview.md). Create the Managed Identity by using the following command:
+
+```azurecli
+APPGW_IDENTITY_NAME='name-for-appgw-managed-identity'
+az identity create \
+ --resource-group $RESOURCE_GROUP \
+ --name $APPGW_IDENTITY_NAME
+```
+
+Then fetch the objectId for the Managed Identity as it will be used later on to give rights to access the certificate in Key Vault:
+
+```azurecli
+APPGW_IDENTITY_CLIENTID=$(az identity show --resource-group $RESOURCE_GROUP --name $APPGW_IDENTITY_NAME --query clientId --output tsv)
+APPGW_IDENTITY_OID=$(az ad sp show --id $APPGW_IDENTITY_CLIENTID --query objectId --output tsv)
+```
+
+## Set policy on Key Vault
+
+Configure Key Vault using the following command so that the Managed Identity for Application Gateway is allowed to access the certificate stored in Key Vault:
+
+```azurecli
+az keyvault set-policy \
+ --name $KV_NAME \
+ --resource-group $KV_RG \
+ --object-id $APPGW_IDENTITY_OID \
+ --secret-permissions get list \
+ --certificate-permissions get list
+```
+
+## Create Application Gateway
+
+Create an application gateway using `az network application-gateway create` and specify your application's private fully qualified domain name (FQDN) as servers in the backend pool. Make sure to use the user-assigned Managed Identity and to point to the certificate in Key Vault using the certificate's Secret ID. Then update the HTTP setting using `az network application-gateway http-settings update` to use the public host name.
+
+```azurecli
+APPGW_NAME='name-for-application-gateway'
+
+KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show --name $CERT_NAME_IN_KEY_VAULT --vault-name $KV_NAME --query sid --output tsv)
+
+az network application-gateway create \
+ --name $APPGW_NAME \
+ --resource-group $RESOURCE_GROUP \
+ --location $LOCATION \
+ --capacity 2 \
+ --sku Standard_v2 \
+ --frontend-port 443 \
+ --http-settings-cookie-based-affinity Disabled \
+ --http-settings-port 443 \
+ --http-settings-protocol Https \
+ --public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
+ --vnet-name $VIRTUAL_NETWORK_NAME \
+ --subnet $APPLICATION_GATEWAY_SUBNET_NAME \
+ --servers $SPRING_APP_PRIVATE_FQDN \
+ --key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
+ --identity $APPGW_IDENTITY_NAME
+```
+
+It can take up to 30 minutes for Azure to create the application gateway.
+
+### Update HTTP Settings to use the domain name towards the backend
+
+#### [Use a publicly signed certificate](#tab/public-cert-2)
+
+Update the HTTP settings to use the public domain name as the hostname instead of the domain suffixed with ".private.azuremicroservices.io" to send traffic to Azure Spring Apps with.
+
+```azurecli
+az network application-gateway http-settings update \
+ --resource-group $RESOURCE_GROUP \
+ --gateway-name $APPGW_NAME \
+ --host-name-from-backend-pool false \
+ --host-name $DOMAIN_NAME \
+ --name appGatewayBackendHttpSettings
+```
+
+#### [Use a self-signed certificate](#tab/self-signed-cert-2)
+
+Update the HTTP settings to use the public domain name as the hostname instead of the domain suffixed with ".private.azuremicroservices.io" to send traffic to Azure Spring Apps with. Given that a self-signed certificate is used, it will need to be allow-listed on the HTTP Settings of Application Gateway.
+
+To allowlist the certificate, first fetch the public portion of it from Key Vault by using the following command:
+
+```azurecli
+az keyvault certificate download \
+ --vault-name $KV_NAME \
+ --name $CERT_NAME_IN_KEY_VAULT \
+ --file ./selfsignedcert.crt \
+ --encoding DER
+```
+
+Then upload it to Application Gateway using this command:
+
+```azurecli
+az network application-gateway root-cert create \
+ --resource-group $RG \
+ --cert-file ./selfsignedcert.crt \
+ --gateway-name $APPGW_NAME \
+ --name MySelfSignedTrustedRootCert
+```
+
+Now you can update the HTTP Settings to trust the new (self-signed) root certificate by using this command:
+
+```azurecli
+az network application-gateway http-settings update \
+ --resource-group $RG \
+ --gateway-name $APPGW_NAME \
+ --host-name-from-backend-pool false \
+ --host-name $DOMAIN_NAME \
+ --name appGatewayBackendHttpSettings \
+ --root-certs MySelfSignedTrustedRootCert
+```
+++
+### Check the deployment of Application Gateway
+
+After it's created, check the backend health by using the following command. The output of this command enables you to determine whether the application gateway reaches your application through its private FQDN.
+
+```azurecli
+az network application-gateway show-backend-health \
+ --name $APPGW_NAME \
+ --resource-group $RESOURCE_GROUP
+```
+
+The output indicates the healthy status of backend pool, as shown in the following example:
+
+```output
+{
+ "backendAddressPools": [
+ {
+ "backendHttpSettingsCollection": [
+ {
+ "servers": [
+ {
+ "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
+ "health": "Healthy",
+ "healthProbeLog": "Success. Received 200 status code",
+ "ipConfiguration": null
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+
+## Configure DNS and access the application
+
+Now configure the public DNS to point to Application Gateway using a CNAME or A-record. You can find the public address for Application Gateway by using the following command:
+
+```azurecli
+az network public-ip show \
+ --resource-group $RESOURCE_GROUP \
+ --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
+ --query [ipAddress] \
+ --output tsv
+```
+
+You can now access the application using the public domain name.
+
+## Next steps
+
+- [Troubleshooting Azure Spring Apps in VNET](./troubleshooting-vnet.md)
+- [Customer Responsibilities for Running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md)
spring-apps Expose Apps Gateway Tls Termination https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/expose-apps-gateway-tls-termination.md
+
+ Title: "Expose applications to the internet using Application Gateway with TLS termination"
+
+description: How to expose applications to internet using Application Gateway with TLS termination
++++ Last updated : 11/09/2021+++
+# Expose applications to the internet with TLS Termination at Application Gateway
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+This article explains how to expose applications to the internet using Application Gateway.
+
+When an Azure Spring Apps service instance is deployed in your virtual network (VNET), applications on the service instance are only accessible in the private network. To make the applications accessible on the Internet, you need to integrate with Azure Application Gateway. The incoming encrypted traffic can be decrypted at the application gateway or it can be passed to Azure Spring Apps encrypted to achieve end-to-end TLS/SSL. For dev and test purposes, you can start with SSL termination at the application gateway, which is covered in this guide. For production, we recommend end-to-end TLS/SSL with private certificate, as described in [Expose applications with end-to-end TLS in a virtual network](expose-apps-gateway-end-to-end-tls.md).
+
+## Prerequisites
+
+- [Azure CLI version 2.0.4 or later](/cli/azure/install-azure-cli).
+- An Azure Spring Apps service instance deployed in a virtual network with an application accessible over the private network using the default `.private.azuremicroservices.io` domain suffix. For more information, see [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md)
+- A custom domain to be used to access the application.
+- A certificate, stored in Key Vault, which matches the custom domain to be used to establish the HTTPS listener. For more information, see [Tutorial: Import a certificate in Azure Key Vault](../key-vault/certificates/tutorial-import-certificate.md).
+
+## Configure Application Gateway for Azure Spring Apps
+
+We recommend that the domain name, as seen by the browser, is the same as the host name which Application Gateway uses to direct traffic to the Azure Spring Apps back end. This recommendation provides the best experience when using Application Gateway to expose applications hosted in Azure Spring Apps and residing in a virtual network. If the domain exposed by Application Gateway is different from the domain accepted by Azure Spring Apps, cookies and generated redirect URLs (for example) can be broken.
+
+To configure Application Gateway in front of Azure Spring Apps in a private VNET, use the following steps.
+
+1. Follow the instructions in [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+1. Follow the instructions in [Access your application in a private network](access-app-virtual-network.md).
+1. Acquire a certificate for your domain of choice and store that in Key Vault. For more information, see [Tutorial: Import a certificate in Azure Key Vault](../key-vault/certificates/tutorial-import-certificate.md).
+1. Configure a custom domain and corresponding certificate from Key Vault on an app deployed onto Azure Spring Apps. For more information, see [Tutorial: Map an existing custom domain to Azure Spring Apps](tutorial-custom-domain.md).
+1. Deploy Application Gateway in a virtual network configured according to the following list:
+ - Use Azure Spring Apps in the backend pool, referenced by the domain suffixed with `private.azuremicroservices.io`.
+ - Include an HTTPS listener using the same certificate from Key Vault.
+ - Configure the virtual network with HTTP settings that use the custom domain name configured on Azure Spring Apps instead of the domain suffixed with `private.azuremicroservices.io`.
+1. Configure your public DNS to point to the application gateway.
+
+## Define variables
+
+Next, use the following commands to define variables for the resource group and virtual network you created as directed in [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md). Replace the *\<...>* placeholders with real values based on your actual environment. When you define `SPRING_APP_PRIVATE_FQDN`, remove `https://` from the URI.
+
+```bash
+SUBSCRIPTION='<subscription-id>'
+RESOURCE_GROUP='<resource-group-name>'
+LOCATION='eastus'
+SPRING_CLOUD_NAME='<name-of-Azure-Spring-Apps-instance>'
+APPNAME='<name-of-app-in-Azure-Spring-Apps>'
+SPRING_APP_PRIVATE_FQDN='$APPNAME.private.azuremicroservices.io'
+VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
+APPLICATION_GATEWAY_SUBNET_NAME='app-gw-subnet'
+APPLICATION_GATEWAY_SUBNET_CIDR='10.1.2.0/24'
+```
+
+## Sign in to Azure
+
+Use the following command to sign in to the Azure CLI and choose your active subscription.
+
+```azurecli
+az login
+az account set --subscription $SUBSCRIPTION
+```
+
+## Configure the public domain name on Azure Spring Apps
+
+Traffic will enter the application deployed on Azure Spring Apps using the public domain name. To configure your application to listen to this host name over HTTP, use the following commands to add a custom domain to your app, replacing the *\<...>* placeholders with real values:
+
+```azurecli
+KV_NAME='<name-of-key-vault>'
+KV_RG='<resource-group-name-of-key-vault>'
+CERT_NAME_IN_KV='<name-of-certificate-with-intermediaries-in-key-vault>'
+DOMAIN_NAME=myapp.mydomain.com
+
+az spring app custom-domain bind \
+ --resource-group $RESOURCE_GROUP \
+ --service $SPRING_CLOUD_NAME \
+ --domain-name $DOMAIN_NAME \
+ --app $APPNAME
+```
+
+## Create network resources
+
+The application gateway to be created will join the same virtual network as the Azure Spring Apps service instance. First, create a new subnet for the application gateway in the virtual network, then create a public IP address as the frontend of the application gateway, as shown in the following example.
+
+```azurecli
+APPLICATION_GATEWAY_PUBLIC_IP_NAME='app-gw-public-ip'
+az network vnet subnet create \
+ --name $APPLICATION_GATEWAY_SUBNET_NAME \
+ --resource-group $RESOURCE_GROUP \
+ --vnet-name $VIRTUAL_NETWORK_NAME \
+ --address-prefix $APPLICATION_GATEWAY_SUBNET_CIDR
+az network public-ip create \
+ --resource-group $RESOURCE_GROUP \
+ --location $LOCATION \
+ --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
+ --allocation-method Static \
+ --sku Standard
+```
+
+### Create a managed identity for the application gateway
+
+Your application gateway will need to be able to access Key Vault to read the certificate. To do this, the application gateway will use a user-assigned managed identity. For more information, see [What are managed identities for Azure resources?](../active-directory/managed-identities-azure-resources/overview.md). Create the managed identity by using the following command, replacing the *\<...>* placeholder:
+
+```azurecli
+APPGW_IDENTITY_NAME='<name-for-appgw-managed-identity>'
+az identity create \
+ --resource-group $RESOURCE_GROUP \
+ --name $APPGW_IDENTITY_NAME
+```
+
+Then, use the following command to fetch the `objectId` for the managed identity. This value will be used later on to give rights to access the certificate in Key Vault.
+
+```azurecli
+APPGW_IDENTITY_CLIENTID=$(az identity show --resource-group $RESOURCE_GROUP --name $APPGW_IDENTITY_NAME --query clientId --output tsv)
+APPGW_IDENTITY_OID=$(az ad sp show --id $APPGW_IDENTITY_CLIENTID --query objectId --output tsv)
+```
+
+### Set policy on Key Vault
+
+Configure Key Vault using the following command so that the managed identity for the application gateway is allowed to access the certificate stored in Key Vault:
+
+```azurecli
+az keyvault set-policy \
+ --resource-group $KV_RG \
+ --name $KV_NAME \
+ --object-id $APPGW_IDENTITY_OID \
+ --secret-permissions get list \
+ --certificate-permissions get list
+```
+
+## Create an application gateway
+
+### [CLI](#tab/azure-cli)
+
+Create an application gateway using `az network application-gateway create` and specify your application's private fully qualified domain name (FQDN) as servers in the backend pool. Be sure to use the user-assigned managed identity and point to the certificate in Key Vault using the certificate's secret ID.
+
+```azurecli
+APPGW_NAME='<name-for-application-gateway>'
+CERT_NAME_IN_KV='<name-of-certificate-in-key-vault>'
+KEYVAULT_SECRET_ID_FOR_CERT=$(az keyvault certificate show --name $CERT_NAME_IN_KV --vault-name $KV_NAME --query sid --output tsv)
+
+az network application-gateway create \
+ --name $APPGW_NAME \
+ --resource-group $RESOURCE_GROUP \
+ --location $LOCATION \
+ --capacity 2 \
+ --sku Standard_v2 \
+ --frontend-port 443 \
+ --http-settings-cookie-based-affinity Disabled \
+ --http-settings-port 80 \
+ --http-settings-protocol Http \
+ --public-ip-address $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
+ --vnet-name $VIRTUAL_NETWORK_NAME \
+ --subnet $APPLICATION_GATEWAY_SUBNET_NAME \
+ --servers $SPRING_APP_PRIVATE_FQDN \
+ --key-vault-secret-id $KEYVAULT_SECRET_ID_FOR_CERT \
+ --identity $APPGW_IDENTITY_NAME
+```
+
+It can take up to 30 minutes for Azure to create the application gateway.
+
+### [Azure portal](#tab/azure-portal)
+
+Create an application gateway using the following steps to enable SSL termination at the application gateway.
+
+1. Sign in to the Azure portal and create a new Application Gateway resource.
+1. Fill in the required fields for creating the application gateway. Leave the default values as they are.
+1. After you provide a value for the **Virtual network** field, the **Subnet** field appears. Create a separate subnet for the application gateway in the VNET, as shown in the following screenshot.
+
+ :::image type="content" source="media/expose-apps-gateway-tls-termination/create-application-gateway-basics.png" alt-text="Screenshot of Azure portal 'Create application gateway' page.":::
+
+1. Create a public IP address and assign it to the frontend of the application gateway, as shown in the following screenshot.
+
+ :::image type="content" source="media/expose-apps-gateway-tls-termination/create-frontend-ip.png" alt-text="Screenshot of Azure portal showing Frontends tab of 'Create application gateway' page.":::
+
+1. Create a backend pool for the application gateway. Select **Target** as your FQDN of the application deployed in Azure Spring Apps.
+
+ :::image type="content" source="media/expose-apps-gateway-tls-termination/create-backend-pool.png" alt-text="Screenshot of Azure portal 'Add a backend pool' page.":::
+
+1. Create a routing rule with HTTP listener.
+ 1. Select the public IP that you created earlier.
+ 1. Select **HTTPS** as protocol and **443** as port.
+ 1. Choose a certificate from Key Vault.
+ 1. Select the managed identity you created earlier.
+ 1. Select the right key vault and certificate, which were added to the key vault earlier.
+
+ :::image type="content" source="media/expose-apps-gateway-tls-termination/create-routingrule-with-http-listener.png" alt-text="Screenshot of Azure portal 'Add a routing rule' page.":::
+
+ 1. Select the **Backend targets** tab.
+
+ :::image type="content" source="media/expose-apps-gateway-tls-termination/create-backend-http-settings.png" alt-text="Screenshot of Azure portal 'Add a H T T P setting' page.":::
+
+1. Select **Review and Create** to create the application gateway.
+
+It can take up to 30 minutes for Azure to create the application gateway.
+++
+### Update HTTP settings to use the domain name towards the backend
+
+Update the HTTP settings to use the public domain name as the hostname instead of the domain suffixed with `.private.azuremicroservices.io` to send traffic to Azure Spring Apps with.
+
+```azurecli
+az network application-gateway http-settings update \
+ --resource-group $RESOURCE_GROUP \
+ --gateway-name $APPGW_NAME \
+ --host-name-from-backend-pool false \
+ --host-name $DOMAIN_NAME \
+ --name appGatewayBackendHttpSettings
+```
+
+### Check the deployment of the application gateway
+
+After it's created, check the backend health by using the following command. The output of this command enables you to determine whether the application gateway reaches your application through its private fully qualified domain name (FQDN).
+
+```azurecli
+az network application-gateway show-backend-health \
+ --name $APPGW_NAME \
+ --resource-group $RESOURCE_GROUP
+```
+
+The output indicates the healthy status of backend pool, as shown in the following example:
+
+```output
+{
+ "backendAddressPools": [
+ {
+ "backendHttpSettingsCollection": [
+ {
+ "servers": [
+ {
+ "address": "my-azure-spring-apps-hello-vnet.private.azuremicroservices.io",
+ "health": "Healthy",
+ "healthProbeLog": "Success. Received 200 status code",
+ "ipConfiguration": null
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+
+## Configure DNS and access the application
+
+Configure the public DNS to point to the application gateway using a CNAME or A-record. You can find the public address for the application gateway by using the following command:
+
+```azurecli
+az network public-ip show \
+ --resource-group $RESOURCE_GROUP \
+ --name $APPLICATION_GATEWAY_PUBLIC_IP_NAME \
+ --query [ipAddress] \
+ --output tsv
+```
+
+You can now access the application using the public domain name.
+
+## Clean up resources
+
+If you plan to continue working with subsequent articles, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following command:
+
+```azurecli
+az group delete --name $RESOURCE_GROUP
+```
+
+## Next steps
+
+- [Exposing applications with end-to-end TLS in a virtual network](./expose-apps-gateway-end-to-end-tls.md)
+- [Troubleshooting Azure Spring Apps in VNET](./troubleshooting-vnet.md)
+- [Customer Responsibilities for Running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md)
spring-apps Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/faq.md
+
+ Title: Frequently asked questions about Azure Spring Apps | Microsoft Docs
+description: This article answers frequently asked questions about Azure Spring Apps.
+++ Last updated : 09/08/2020++
+zone_pivot_groups: programming-languages-spring-apps
++
+# Azure Spring Apps FAQ
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article answers frequently asked questions about Azure Spring Apps.
+
+## General
+
+### Why Azure Spring Apps?
+
+Azure Spring Apps provides a platform as a service (PaaS) for Spring developers. Azure Spring Apps manages your application infrastructure so that you can focus on application code and business logic. Core features built into Azure Spring Apps include Eureka, Config Server, Service Registry Server, VMware Tanzu® Build Service™, Blue-green deployment, and more. This service also enables developers to bind their applications with other Azure services, such as Azure Cosmos DB, Azure Database for MySQL, and Azure Cache for Redis.
+
+Azure Spring Apps enhances the application diagnostics experience for developers and operators by integrating Azure Monitor, Application Insights, and Log Analytics.
+
+### How secure is Azure Spring Apps?
+
+Security and privacy are among the top priorities for Azure and Azure Spring Apps customers. Azure helps ensure that only customers have access to application data, logs, or configurations by securely encrypting all of this data.
+
+* The service instances in Azure Spring Apps are isolated from each other.
+* Azure Spring Apps provides complete TLS/SSL and certificate management.
+* Critical security patches for OpenJDK and Spring runtimes are applied to Azure Spring Apps as soon as possible.
+
+### How does Azure Spring Apps host my applications?
+
+Each service instance in Azure Spring Apps is backed by a fully dedicated Kubernetes cluster with multiple worker nodes. Azure Spring Apps manages the underlying Kubernetes cluster for you, including high availability, scalability, Kubernetes version upgrade, and so on.
+
+Azure Spring Apps intelligently schedules your applications on the underlying Kubernetes worker nodes. To provide high availability, Azure Spring Apps distributes applications with 2 or more instances on different nodes.
+
+### In which regions is Azure Spring Apps Basic/Standard tier available?
+
+East US, East US 2, Central US, South Central US, North Central US, West US, West US 2, West US 3, West Europe, North Europe, UK South, Southeast Asia, Australia East, Canada Central, UAE North, Central India, Korea Central, East Asia, Japan East, South Africa North, Brazil South, France Central, China East 2(Mooncake), and China North 2(Mooncake). [Learn More](https://azure.microsoft.com/global-infrastructure/services/?products=spring-cloud)
+
+### In which regions is Azure Spring Apps Enterprise tier available?
+
+East US, East US 2, Central US, South Central US, North Central US, West US, West US 2, West US 3, West Europe, North Europe, UK South, Southeast Asia, Australia East, Canada Central, UAE North, Central India, Korea Central, East Asia, Japan East, South Africa North, Brazil South, and France Central.
+
+### Is any customer data stored outside of the specified region?
+
+Azure Spring Apps is a regional service. All customer data in Azure Spring Apps is stored to a single, specified region. To learn more about geo and region, see [Data residency in Azure](https://azure.microsoft.com/global-infrastructure/data-residency/).
+
+### What are the known limitations of Azure Spring Apps?
+
+Azure Spring Apps has the following known limitations:
+
+* `spring.application.name` will be overridden by the application name that's used to create each application.
+* `server.port` defaults to port 1025. If any other value is applied, it will be overridden. Please also respect this setting and not specify server port in your code.
+* The Azure portal, Azure Resource Manager templates, and Terraform do not support uploading application packages. You can upload application packages by deploying the application using the Azure CLI, Azure DevOps, Maven Plugin for Azure Spring Apps, Azure Toolkit for IntelliJ, and the Visual Studio Code extension for Azure Spring Apps.
+
+### What pricing tiers are available?
+
+Which one should I use and what are the limits within each tier?
+
+* Azure Spring Apps offers two pricing tiers: Basic and Standard. The Basic tier is targeted for Dev/Test and trying out Azure Spring Apps. The Standard tier is optimized to run general purpose production traffic. See [Azure Spring Apps pricing details](https://azure.microsoft.com/pricing/details/spring-apps/) for limits and feature level comparison.
+
+### What's the difference between Service Binding and Service Connector?
+
+We are not actively developing additional capabilities for Service Binding in favor of the new Azure-wise solution named [Service Connector](../service-connector/overview.md). On the one hand, the new solution brings you consistent integration experience across App hosting services on Azure like App Service. On the other hand, it covers your needs better by starting with supporting 10+ most used target Azure services including MySQL, SQL DB, Cosmos DB, Postgres DB, Redis, Storage and more. Service Connector is currently in Public Preview, we invite you to try out the new experience.
+
+### How can I provide feedback and report issues?
+
+If you encounter any issues with Azure Spring Apps, create an [Azure Support Request](../azure-portal/supportability/how-to-create-azure-support-request.md). To submit a feature request or provide feedback, go to [Azure Feedback](https://feedback.azure.com/d365community/forum/79b1327d-d925-ec11-b6e6-000d3a4f06a4).
+
+### How do I get VMware Spring Runtime support (Enterprise tier only)
+
+Enterprise tier has built-in VMware Spring Runtime Support, so you can open support tickets to [VMware](https://aka.ms/ascevsrsupport) if you think your issue is in the scope of VMware Spring Runtime Support. To better understand VMware Spring Runtime Support itself, see the [VMware Spring Runtime](https://tanzu.vmware.com/spring-runtime). To understand the details about how to register and use this support service, see the Support section in the [Enterprise tier FAQ from VMware](https://aka.ms/EnterpriseTierFAQ). For any other issues, open support tickets with Microsoft.
+
+> [!IMPORTANT]
+> After you create an Enterprise tier instance, your entitlement will be ready within three business days. If you encounter any exceptions, raise a support ticket with Microsoft to get help with it.
+
+## Development
+
+### I am a Spring developer but new to Azure. What is the quickest way for me to learn how to develop an application in Azure Spring Apps?
+
+For the quickest way to get started with Azure Spring Apps, follow the instructions in [Quickstart: Launch an application in Azure Spring Apps by using the Azure portal](./quickstart.md).
+
+### Is Spring Boot 2.4.x supported?
+We've identified an issue with Spring Boot 2.4 and are currently working with the Spring community to resolve it. In the meantime, please include these two dependencies to enable TLS authentication between your apps and Eureka.
+
+```xml
+<dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>1.19.4</version>
+</dependency>
+<dependency>
+ <groupId>com.sun.jersey.contribs</groupId>
+ <artifactId>jersey-apache-client4</artifactId>
+ <version>1.19.4</version>
+</dependency>
+```
++
+### Where can I view my Spring application logs and metrics?
+
+Find metrics in the App Overview tab and the [Azure Monitor](../azure-monitor/essentials/data-platform-metrics.md#metrics-explorer) tab.
+
+Azure Spring Apps supports exporting Spring application logs and metrics to Azure Storage, Event Hub, and [Log Analytics](../azure-monitor/logs/data-platform-logs.md). The table name in Log Analytics is *AppPlatformLogsforSpring*. To learn how to enable it, see [Diagnostic services](diagnostic-services.md).
+
+### Does Azure Spring Apps support distributed tracing?
+
+Yes. For more information, see [Tutorial: Use Distributed Tracing with Azure Spring Apps](./how-to-distributed-tracing.md).
+
+### What resource types does Service Binding support?
+
+Three services are currently supported:
+
+* Azure Cosmos DB
+* Azure Database for MySQL
+* Azure Cache for Redis.
+
+### Can I view, add, or move persistent volumes from inside my applications?
+
+Yes.
+
+### How many outbound public IP addresses does an Azure Spring Apps instance have?
+
+The number of outbound public IP addresses may vary according to the tiers and other factors.
+
+| Azure Spring Apps instance type | Default number of outbound public IP addresses |
+| -- | - |
+| Basic Tier instances | 1 |
+| Standard Tier instances | 2 |
+| VNet injection instances | 1 |
+
+### Can I increase the number of outbound public IP addresses?
+
+Yes, you can open a [support ticket](https://azure.microsoft.com/support/faq/) to request for more outbound public IP addresses.
+
+### When I delete/move an Azure Spring Apps service instance, will its extension resources be deleted/moved as well?
+
+It depends on the logic of resource providers that own the extension resources. The extension resources of a `Microsoft.AppPlatform` instance do not belong to the same namespace, so the behavior varies by resource provider. For example, the delete/move operation won't cascade to the **diagnostics settings** resources. If a new Azure Spring Apps instance is provisioned with the same resource ID as the deleted one, or if the previous Azure Spring Apps instance is moved back, the previous **diagnostics settings** resources continue extending it.
+
+You can delete the Azure Spring Apps diagnostic settings by using Azure CLI:
+
+```azurecli
+ az monitor diagnostic-settings delete --name $DIAGNOSTIC_SETTINGS_NAME --resource $AZURE_SPRING_APPS_RESOURCE_ID
+```
+
+## Java runtime and OS versions
+
+### Which versions of Java runtime are supported in Azure Spring Apps?
+
+Azure Spring Apps supports Java LTS versions with the most recent builds, currently Java 8, Java 11, and Java17 are supported. For more information, see [Install the JDK for Azure and Azure Stack](/azure/developer/java/fundamentals/java-jdk-install).
+
+### Who built these Java runtimes?
+
+Azul Systems. The Azul Zulu for Azure - Enterprise Edition JDK builds are a no-cost, multi-platform, production-ready distribution of the OpenJDK for Azure and Azure Stack backed by Microsoft and Azul Systems. They contain all the components for building and running Java SE applications.
+
+### How often will Java runtimes get updated?
+
+LTS and MTS JDK releases have quarterly security updates, bug fixes, and critical out-of-band updates and patches as needed. This support includes backports to Java 7 and 8 of security updates and bug fixes reported in newer versions of Java, like Java 11.
+
+### How long will Java 8 and Java 11 LTS versions be supported?
+
+See [Java long-term support for Azure and Azure Stack](/azure/developer/java/fundamentals/java-support-on-azure).
+
+* Java 8 LTS will be supported until December 2030.
+* Java 11 LTS will be supported until September 2027.
+
+### How can I download a supported Java runtime for local development?
+
+See [Install the JDK for Azure and Azure Stack](/azure/developer/java/fundamentals/java-jdk-install).
+
+### What is the retire policy for older Java runtimes?
+
+Public notice will be sent out at 12 months before any old runtime version is retired. You will have 12 months to migrate to a later version.
+
+* Subscription admins will get email notification when we will retire a Java version.
+* The retire information will be published in the documentation.
+
+### How can I get support for issues at the Java runtime level?
+
+You can open a support ticket with Azure Support. See [How to create an Azure support request](../azure-portal/supportability/how-to-create-azure-support-request.md).
+
+### What is the operation system to run my apps?
+
+The most recent Ubuntu LTS version is used, currently [Ubuntu 20.04 LTS (Focal Fossa)](https://releases.ubuntu.com/focal/) is the default OS.
+
+### How often are OS security patches applied?
+
+Security patches applicable to Azure Spring Apps are rolled out to production on a monthly basis.
+Critical security patches (CVE score >= 9) applicable to Azure Spring Apps are rolled out as soon as possible.
+
+## Deployment
+
+### Does Azure Spring Apps support blue-green deployment?
+
+Yes. For more information, see [Set up a staging environment](./how-to-staging-environment.md).
+
+### Can I access Kubernetes to manipulate my application containers?
+
+No. Azure Spring Apps abstracts the developer from the underlying architecture, allowing you to concentrate on application code and business logic.
+
+### Does Azure Spring Apps support building containers from source?
+
+Yes. For more information, see [Quickstart: Deploy your first application to Azure Spring Apps](./quickstart.md).
+
+### Does Azure Spring Apps support autoscaling in app instances?
+
+Yes. For more information, see [Set up autoscale for applications](./how-to-setup-autoscale.md).
+
+### How does Azure Spring Apps monitor the health status of my application?
+
+Azure Spring Apps continuously probes port 1025 for customer's applications. These probes determine whether the application container is ready to start accepting traffic and whether Azure Spring Apps needs to restart the application container. Internally, Azure Spring Apps uses Kubernetes liveness and readiness probes to achieve the status monitoring.
+
+>[!NOTE]
+> Because of these probes, you currently can't launch applications in Azure Spring Apps without exposing port 1025.
+
+### Whether and when will my application be restarted?
+
+Yes. For more information, see [Monitor app lifecycle events using Azure Activity log and Azure Service Health](./monitor-app-lifecycle-events.md).
+
+### What are the best practices for migrating existing Spring applications to Azure Spring Apps?
+
+For more information, see [Migrate Spring applications to Azure Spring Apps](/azure/developer/java/migration/migrate-spring-cloud-to-azure-spring-cloud).
+
+## .NET Core versions
+
+### Which .NET Core versions are supported?
+
+.NET Core 3.1 and later versions.
+
+### How long will .NET Core 3.1 be supported?
+
+Until Dec 3, 2022. See [.NET Core Support Policy](https://dotnet.microsoft.com/platform/support/policy/dotnet-core).
+
+## Troubleshooting
+
+### What are the impacts of service registry rarely unavailable?
+
+In some rarely happened scenario, you may see some errors like the following one from your application logs:
+
+```output
+RetryableEurekaHttpClient: Request execution failure with status code 401; retrying on another server if available
+```
+
+This issue is introduced by the Spring framework with very low rate due to network instability or other network issues.
+
+There should be no impacts to user experience, eureka client has both heartbeat and retry policy to take care of this. You could consider it as one transient error and skip it safely.
+
+We will enhance this part and avoid this error from usersΓÇÖ applications in short future.
+
+## Next steps
+
+If you have further questions, see the [Azure Spring Apps troubleshooting guide](./troubleshoot.md).
spring-apps Github Actions Key Vault https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/github-actions-key-vault.md
+
+ Title: Authenticate Azure Spring Apps with Key Vault in GitHub Actions
+description: How to use Azure Key Vault with a CI/CD workflow for Azure Spring Apps with GitHub Actions
++++ Last updated : 09/08/2020+++
+# Authenticate Azure Spring Apps with Azure Key Vault in GitHub Actions
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use Key Vault with a CI/CD workflow for Azure Spring Apps with GitHub Actions.
+
+Key vault is a secure place to store keys. Enterprise users need to store credentials for CI/CD environments in scope that they control. The key to get credentials in the key vault should be limited to resource scope. It has access to only the key vault scope, not the entire Azure scope. It's like a key that can only open a strong box not a master key that can open all doors in a building. It's a way to get a key with another key, which is useful in a CICD workflow.
+
+## Generate Credential
+
+To generate a key to access the key vault, execute command below on your local machine:
+
+```azurecli
+az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT> --sdk-auth
+```
+
+The scope specified by the `--scopes` parameter limits the key access to the resource. It can only access the strong box.
+
+With results:
+
+```output
+{
+ "clientId": "<GUID>",
+ "clientSecret": "<GUID>",
+ "subscriptionId": "<GUID>",
+ "tenantId": "<GUID>",
+ "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
+ "resourceManagerEndpointUrl": "https://management.azure.com/",
+ "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
+ "galleryEndpointUrl": "https://gallery.azure.com/",
+ "managementEndpointUrl": "https://management.core.windows.net/"
+}
+```
+
+Then save the results to GitHub **secrets** as described in [Set up your GitHub repository and authenticate with Azure](./how-to-github-actions.md#set-up-github-repository-and-authenticate).
+
+## Add Access Policies for the Credential
+
+The credential you created above can get only general information about the Key Vault, not the contents it stores. To get secrets stored in the Key Vault, you need set access policies for the credential.
+
+Go to the **Key Vault** dashboard in Azure portal, select the **Access control** menu, then open the **Role assignments** tab. Select **Apps** for **Type** and `This resource` for **scope**. You should see the credential you created in previous step:
+
+![Set access policy](./media/github-actions/key-vault1.png)
+
+Copy the credential name, for example, `azure-cli-2020-01-19-04-39-02`. Open the **Access policies** menu, then select the **Add Access Policy** link. Select `Secret Management` for **Template**, then select **Principal**. Paste the credential name in **Principal**/**Select** input box:
+
+![Select](./media/github-actions/key-vault2.png)
+
+Select the **Add** button in the **Add access policy** dialog, then select **Save**.
+
+## Generate full-scope Azure Credential
+
+This is the master key to open all doors in the building. The procedure is similar to the previous step, but here we change the scope to generate the master key:
+
+```azurecli
+az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID> --sdk-auth
+```
+
+Again, results:
+
+```output
+{
+ "clientId": "<GUID>",
+ "clientSecret": "<GUID>",
+ "subscriptionId": "<GUID>",
+ "tenantId": "<GUID>",
+ "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
+ "resourceManagerEndpointUrl": "https://management.azure.com/",
+ "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
+ "galleryEndpointUrl": "https://gallery.azure.com/",
+ "managementEndpointUrl": "https://management.core.windows.net/"
+}
+```
+
+Copy the entire JSON string. Go back to **Key Vault** dashboard. Open the **Secrets** menu, then select the **Generate/Import** button. Input the secret name, such as `AZURE-CREDENTIALS-FOR-SPRING`. Paste the JSON credential string to the **Value** input box. You may notice the value input box is a one-line text field, rather than a multi-line text area. You can paste the complete JSON string there.
+
+![Full scope credential](./media/github-actions/key-vault3.png)
+
+## Combine credentials in GitHub Actions
+
+Set the credentials used when the CICD pipeline executes:
+
+```console
+on: [push]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: azure/login@v1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }} # Strong box key you generated in the first step
+ - uses: Azure/get-keyvault-secrets@v1.0
+ with:
+ keyvault: "<Your Key Vault Name>"
+ secrets: "AZURE-CREDENTIALS-FOR-SPRING" # Master key to open all doors in the building
+ id: keyvaultaction
+ - uses: azure/login@v1
+ with:
+ creds: ${{ steps.keyvaultaction.outputs.AZURE-CREDENTIALS-FOR-SPRING }}
+ - name: Azure CLI script
+ uses: azure/CLI@v1
+ with:
+ azcliversion: 2.0.75
+ inlineScript: |
+ az extension add --name spring # Spring CLI commands from here
+ az spring list
+
+```
+
+## Next steps
+
+* [Use Azure Spring Apps CI/CD with GitHub Actions](./how-to-github-actions.md)
spring-apps How To Access Data Plane Azure Ad Rbac https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-access-data-plane-azure-ad-rbac.md
+
+ Title: "Access Config Server and Service Registry"
+
+description: How to access Config Server and Service Registry Endpoints with Azure Active Directory role-based access control.
++++ Last updated : 08/25/2021+++
+# Access Config Server and Service Registry
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+This article explains how to access the Spring Cloud Config Server and Spring Cloud Service Registry managed by Azure Spring Apps using Azure Active Directory (Azure AD) role-based access control (RBAC).
+
+> [!NOTE]
+> Applications deployed and running inside the Azure Spring Apps service are automatically wired up with certificate-based authentication and authorization when accessing the managed Spring Cloud Config Server and Service Registry. You don't need to follow this guidance for these applications. The related certificates are fully managed by the Azure Spring Apps platform, and are automatically injected in your application when connected to Config Server and Service Registry.
+
+## Assign role to Azure AD user/group, MSI, or service principal
+
+Assign the role to the [user | group | service-principal | managed-identity] at [management-group | subscription | resource-group | resource] scope.
+
+| Role name | Description |
+|-||
+| Azure Spring Apps Config Server Reader | Allow read access to Azure Spring Apps Config Server. |
+| Azure Spring Apps Config Server Contributor | Allow read, write, and delete access to Azure Spring Apps Config Server. |
+| Azure Spring Apps Service Registry Reader | Allow read access to Azure Spring Apps Service Registry. |
+| Azure Spring Apps Service Registry Contributor | Allow read, write, and delete access to Azure Spring Apps Service Registry. |
+
+For detailed steps, see [Assign Azure roles using the Azure portal](../role-based-access-control/role-assignments-portal.md).
+
+## Access Config Server and Service Registry Endpoints
+
+After the role is assigned, the assignee can access the Spring Cloud Config Server and the Spring Cloud Service Registry endpoints using the following procedures:
+
+1. Get an access token. After an Azure AD user is assigned the role, they can use the following commands to sign in to Azure CLI with user, service principal, or managed identity to get an access token. For details, see [Authenticate Azure CLI](/cli/azure/authenticate-azure-cli).
+
+ ```azurecli
+ az login
+ az account get-access-token
+ ```
+
+1. Compose the endpoint. We support the default endpoints of the Spring Cloud Config Server and Spring Cloud Service Registry managed by Azure Spring Apps.
+
+ * *'https://SERVICE_NAME.svc.azuremicroservices.io/eureka/{path}'*
+ * *'https://SERVICE_NAME.svc.azuremicroservices.io/config/{path}'*
+
+ >[!NOTE]
+ > If you're using Azure China, replace `*.azuremicroservices.io` with `*.microservices.azure.cn`. For more information, see the section [Check endpoints in Azure](/azure/china/resources-developer-guide#check-endpoints-in-azure) in the [Azure China developer guide](/azure/china/resources-developer-guide).
+
+1. Access the composed endpoint with the access token. Put the access token in a header to provide authorization: `--header 'Authorization: Bearer {TOKEN_FROM_PREVIOUS_STEP}`.
+
+ For example:
+
+ a. Access an endpoint like *'https://SERVICE_NAME.svc.azuremicroservices.io/config/actuator/health'* to see the health status of Config Server.
+
+ b. Access an endpoint like *'https://SERVICE_NAME.svc.azuremicroservices.io/eureka/eureka/apps'* to see the registered apps in Spring Cloud Service Registry (Eureka here).
+
+ If the response is *401 Unauthorized*, check to see if the role is successfully assigned. It will take several minutes for the role to take effect or to verify that the access token has not expired.
+
+For more information about actuator endpoint, see [Production ready endpoints](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints).
+
+For Eureka endpoints, see [Eureka-REST-operations](https://github.com/Netflix/eureka/wiki/Eureka-REST-operations)
+
+For config server endpoints and detailed path information, see [ResourceController.java](https://github.com/spring-cloud/spring-cloud-config/blob/main/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java) and [EncryptionController.java](https://github.com/spring-cloud/spring-cloud-config/blob/main/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EncryptionController.java).
+
+## Register Spring Boot apps to Spring Cloud Config Server and Service Registry managed by Azure Spring Apps
+
+After the role is assigned, you can register Spring Boot apps to Spring Cloud Config Server and Service Registry managed by Azure Spring Apps with Azure AD token authentication. Both Config Server and Service Registry support [custom REST template](https://cloud.spring.io/spring-cloud-config/reference/html/#custom-rest-template) to inject the bearer token for authentication.
+
+For more information, see the samples [Access Azure Spring Apps managed Config Server](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/custom-config-server-client) and [Access Azure Spring Apps managed Service Registry](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/custom-eureka-client). The following sections explain some important details in these samples.
+
+**In *AccessTokenManager.java*:**
+
+`AccessTokenManager` is responsible for getting an access token from Azure AD. Configure the service principal's sign-in information in the *application.properties* file and initialize `ApplicationTokenCredentials` to get the token. You can find this file in both samples.
+
+```java
+prop.load(in);
+tokenClientId = prop.getProperty("access.token.clientId");
+String tenantId = prop.getProperty("access.token.tenantId");
+String secret = prop.getProperty("access.token.secret");
+String clientId = prop.getProperty("access.token.clientId");
+credentials = new ApplicationTokenCredentials(
+ clientId, tenantId, secret, AzureEnvironment.AZURE);
+```
+
+**In *CustomConfigServiceBootstrapConfiguration.java*:**
+
+`CustomConfigServiceBootstrapConfiguration` implements the custom REST template for Config Server and injects the token from Azure AD as `Authorization` headers. You can find this file in the [Config Server sample](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/custom-config-server-client).
+
+```java
+public class RequestResponseHandlerInterceptor implements ClientHttpRequestInterceptor {
+
+ @Override
+ public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
+ String accessToken = AccessTokenManager.getToken();
+ request.getHeaders().remove(AUTHORIZATION);
+ request.getHeaders().add(AUTHORIZATION, "Bearer " + accessToken);
+
+ ClientHttpResponse response = execution.execute(request, body);
+ return response;
+ }
+
+}
+```
+
+**In *CustomRestTemplateTransportClientFactories.java*:**
+
+The previous two classes are for the implementation of the custom REST template for Spring Cloud Service Registry. The `intercept` part is the same as in the Config Server above. Be sure to add `factory.mappingJacksonHttpMessageConverter()` to the message converters. You can find this file in the [Spring Cloud Service Registry sample](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/custom-eureka-client).
+
+```java
+private RestTemplate customRestTemplate() {
+ /*
+ * Inject your custom rest template
+ */
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.getInterceptors()
+ .add(new RequestResponseHandlerInterceptor());
+ RestTemplateTransportClientFactory factory = new RestTemplateTransportClientFactory();
+
+ restTemplate.getMessageConverters().add(0, factory.mappingJacksonHttpMessageConverter());
+
+ return restTemplate;
+}
+```
+
+If you're running applications on a Kubernetes cluster, we recommend that you use an IP address to register Spring Cloud Service Registry for access.
+
+```properties
+eureka.instance.prefer-ip-address=true
+```
+
+## Next steps
+
+* [Authenticate Azure CLI](/cli/azure/authenticate-azure-cli)
+* [Production ready endpoints](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready-endpoints)
+* [Create roles and permissions](how-to-permissions.md)
spring-apps How To Appdynamics Java Agent Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-appdynamics-java-agent-monitor.md
+
+ Title: "How to monitor Spring Boot apps with the AppDynamics Java Agent (Preview)"
+
+description: How to use the AppDynamics Java agent to monitor Spring Boot applications in Azure Spring Apps.
++++ Last updated : 06/07/2022+
+ms.devlang: azurecli
++
+# How to monitor Spring Boot apps with the AppDynamics Java Agent (Preview)
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to use the AppDynamics Java Agent to monitor Spring Boot applications in Azure Spring Apps.
+
+With the AppDynamics Java Agent, you can:
+
+- Monitor applications
+- Configure the AppDynamics Java Agent using environment variables
+- Check all monitoring data from the AppDynamics dashboard
+
+The following video introduces the AppDynamics Java in-process agent.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/4dZuRX5bNAs]
+
+## Prerequisites
+
+* [Azure CLI](/cli/azure/install-azure-cli)
+* [An AppDynamics account](https://www.appdynamics.com/)
+
+## Activate the AppDynamics Java in-process agent
+
+For the whole workflow, you need to:
+
+* Activate the AppDynamics Java in-process agent in Azure Spring Apps to generate application metrics data.
+* Connect the AppDynamics Agent to the AppDynamics Controller to collect and visualize the data in the controller.
+
+![Diagram showing a Spring Boot application in 'Azure Spring Apps' box with a two-directional arrow connecting it to an 'AppDynamics Agent' box, which also has an arrow pointing to an 'AppDynamics Controller' box](media/how-to-appdynamics-java-agent-monitor/appdynamics-activation.jpg)
+
+### Activate an application with the AppDynamics Agent using the Azure CLI
+
+To activate an application through the Azure CLI, use the following steps.
+
+1. Create a resource group.
+1. Create an instance of Azure Spring Apps.
+1. Create an application using the following command. Replace the placeholders *\<...>* with your own values.
+
+ ```azurecli
+ az spring app create \
+ --resource-group "<your-resource-group-name>" \
+ --service "<your-Azure-Spring-Apps-instance-name>" \
+ --name "<your-app-name>" \
+ --is-public true
+ ```
+
+1. Create a deployment with the AppDynamics Agent using environment variables.
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group "<your-resource-group-name>" \
+ --service "<your-Azure-Spring-Apps-instance-name>" \
+ --name "<your-app-name>" \
+ --jar-path app.jar \
+ --jvm-options="-javaagent:/opt/agents/appdynamics/java/javaagent.jar" \
+ --env APPDYNAMICS_AGENT_APPLICATION_NAME=<your-app-name> \
+ APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY=<your-agent-access-key> \
+ APPDYNAMICS_AGENT_ACCOUNT_NAME=<your-agent-account-name> \
+ APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME=true \
+ APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME_PREFIX=<your-agent-node-name> \
+ APPDYNAMICS_AGENT_TIER_NAME=<your-agent-tier-name> \
+ APPDYNAMICS_CONTROLLER_HOST_NAME=<your-AppDynamics-controller-host-name> \
+ APPDYNAMICS_CONTROLLER_SSL_ENABLED=true \
+ APPDYNAMICS_CONTROLLER_PORT=443
+ ```
+
+Azure Spring Apps pre-installs the AppDynamics Java agent to the path */opt/agents/appdynamics/java/javaagent.jar*. You can activate the agent from your applications' JVM options, then configure the agent using environment variables. You can find values for these variables at [Monitor Azure Spring Apps with Java Agent](https://docs.appdynamics.com/21.11/en/application-monitoring/install-app-server-agents/java-agent/monitor-azure-spring-cloud-with-java-agent). For more information about how these variables help to view and organize reports in the AppDynamics UI, see [Tiers and Nodes](https://docs.appdynamics.com/21.9/en/application-monitoring/tiers-and-nodes).
+
+### Activate an application with the AppDynamics Agent using the Azure portal
+
+To activate an application through the Azure portal, use the following steps.
+
+1. Navigate to your Azure Spring Apps instance in the Azure portal.
+
+1. Select **Apps** from the **Settings** section of the left navigation pane.
+
+ :::image type="content" source="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-list.png" alt-text="Screenshot of Azure portal showing the Apps section." lightbox="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-list.png":::
+
+1. Select the application to navigate to the **Overview** page.
+
+ :::image type="content" source="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-overview.png" alt-text="Screenshot of Azure portal app overview page." lightbox="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-overview.png":::
+
+1. Select **Configuration** in the left navigation pane to add, update, or delete the environment variables of the application.
+
+ :::image type="content" source="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-configuration-env.png" alt-text="Screenshot of Azure portal showing the 'Environment variables' section of the app's Configuration page." lightbox="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-configuration-env.png":::
+
+1. Select **General settings** to add, update, or delete the JVM options of the application.
+
+ :::image type="content" source="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-configuration-general.png" alt-text="Screenshot of Azure portal showing the 'General settings' section of the app's Configuration page, with 'J V M options' highlighted." lightbox="media/how-to-appdynamics-java-agent-monitor/azure-spring-cloud-app-configuration-general.png":::
+
+## Automate provisioning
+
+You can also run a provisioning automation pipeline using Terraform, Bicep, or Azure Resource Manager template (ARM template). This pipeline can provide a complete hands-off experience to instrument and monitor any new applications that you create and deploy.
+
+### Automate provisioning using Terraform
+
+To configure the environment variables in a Terraform template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Manages an Active Azure Spring Apps Deployment](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/spring_cloud_active_deployment).
+
+```terraform
+resource "azurerm_spring_cloud_java_deployment" "example" {
+ ...
+ jvm_options = "-javaagent:/opt/agents/appdynamics/java/javaagent.jar"
+ ...
+ environment_variables = {
+ "APPDYNAMICS_AGENT_APPLICATION_NAME" : "<your-app-name>",
+ "APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY" : "<your-agent-access-key>",
+ "APPDYNAMICS_AGENT_ACCOUNT_NAME" : "<your-agent-account-name>",
+ "APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME" : "true",
+ "APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME_PREFIX" : "<your-agent-node-name>",
+ "APPDYNAMICS_AGENT_TIER_NAME" : "<your-agent-tier-name>",
+ "APPDYNAMICS_CONTROLLER_HOST_NAME" : "<your-AppDynamics-controller-host-name>",
+ "APPDYNAMICS_CONTROLLER_SSL_ENABLED" : "true",
+ "APPDYNAMICS_CONTROLLER_PORT" : "443"
+ }
+}
+```
+
+### Automate provisioning using Bicep
+
+To configure the environment variables in a Bicep file, add the following code to the file, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=bicep).
+
+```bicep
+deploymentSettings: {
+ environmentVariables: {
+ APPDYNAMICS_AGENT_APPLICATION_NAME : '<your-app-name>'
+ APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY : '<your-agent-access-key>'
+ APPDYNAMICS_AGENT_ACCOUNT_NAME : '<your-agent-account-name>'
+ APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME : 'true'
+ APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME_PREFIX : '<your-agent-node-name>'
+ APPDYNAMICS_AGENT_TIER_NAME : '<your-agent-tier-name>'
+ APPDYNAMICS_CONTROLLER_HOST_NAME : '<your-AppDynamics-controller-host-name>'
+ APPDYNAMICS_CONTROLLER_SSL_ENABLED : 'true'
+ APPDYNAMICS_CONTROLLER_PORT : '443'
+ }
+ jvmOptions: '-javaagent:/opt/agents/appdynamics/java/javaagent.jar'
+}
+```
+
+### Automate provisioning using an ARM template
+
+To configure the environment variables in an ARM template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=json).
+
+```JSON
+"deploymentSettings": {
+ "environmentVariables": {
+ "APPDYNAMICS_AGENT_APPLICATION_NAME" : "<your-app-name>",
+ "APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY" : "<your-agent-access-key>",
+ "APPDYNAMICS_AGENT_ACCOUNT_NAME" : "<your-agent-account-name>",
+ "APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME" : "true",
+ "APPDYNAMICS_JAVA_AGENT_REUSE_NODE_NAME_PREFIX" : "<your-agent-node-name>",
+ "APPDYNAMICS_AGENT_TIER_NAME" : "<your-agent-tier-name>",
+ "APPDYNAMICS_CONTROLLER_HOST_NAME" : "<your-AppDynamics-controller-host-name>",
+ "APPDYNAMICS_CONTROLLER_SSL_ENABLED" : "true",
+ "APPDYNAMICS_CONTROLLER_PORT" : "443"
+ },
+ "jvmOptions": "-javaagent:/opt/agents/appdynamics/java/javaagent.jar",
+ ...
+}
+```
+
+## Review reports in the AppDynamics dashboard
+
+This section shows various reports in AppDynamics.
+
+The following screenshot shows an overview of your apps in the AppDynamics dashboard:
++
+The **Application Dashboard** shows the overall information for each of your apps, as shown in the following screenshots using example applications:
+
+- `api-gateway`
+
+ :::image type="content" source="media/how-to-appdynamics-java-agent-monitor/appdynamics-dashboard-api-gateway.jpg" alt-text="AppDynamics screenshot showing the Application Dashboard for the example api-gateway app." lightbox="media/how-to-appdynamics-java-agent-monitor/appdynamics-dashboard-api-gateway.jpg":::
+
+- `customers-service`
+
+ :::image type="content" source="media/how-to-appdynamics-java-agent-monitor/appdynamics-dashboard-customers-service.jpg" alt-text="AppDynamics screenshot showing the Application Dashboard for the example customers-service app." lightbox="media/how-to-appdynamics-java-agent-monitor/appdynamics-dashboard-customers-service.jpg":::
+
+The following screenshot shows how you can get basic information from the **Database Calls** dashboard.
++
+You can also get information about the slowest database calls, as shown in these screenshots:
+++
+The following screenshot shows memory usage analysis in the **Heap** section of the **Memory** page:
++
+You can also see the garbage collection process, as shown in this screenshot:
++
+The following screenshot shows the **Slow Transactions** page:
++
+You can define more metrics for the JVM, as shown in this screenshot of the **Metric Browser**:
++
+## View AppDynamics Agent logs
+
+By default, Azure Spring Apps will print the *info* level logs of the AppDynamics Agent to `STDOUT`. The logs will be mixed with the application logs. You can find the explicit agent version from the application logs.
+
+You can also get the logs of the AppDynamics Agent from the following locations:
+
+* Azure Spring Apps logs
+* Azure Spring Apps Application Insights
+* Azure Spring Apps LogStream
+
+## Learn about AppDynamics Agent upgrade
+
+The AppDynamics Agent will be upgraded regularly with JDK (quarterly). Agent upgrade may affect the following scenarios:
+
+* Existing applications using AppDynamics Agent before upgrade will be unchanged, but will require restart or redeploy to engage the new version of AppDynamics Agent.
+* Applications created after upgrade will use the new version of AppDynamics Agent.
+
+## Configure VNet injection instance outbound traffic
+
+For VNet injection instances of Azure Spring Apps, make sure the outbound traffic is configured correctly for AppDynamics Agent. For details, see [SaaS Domains and IP Ranges](https://docs.appdynamics.com/display/PA).
+
+## Understand the limitations
+
+To understand the limitations of the AppDynamics Agent, see [Monitor Azure Spring Apps with Java Agent](https://docs.appdynamics.com/21.11/en/application-monitoring/install-app-server-agents/java-agent/monitor-azure-spring-cloud-with-java-agent).
+
+## Next steps
+
+* [Use Application Insights Java In-Process Agent in Azure Spring Apps](./how-to-application-insights.md)
spring-apps How To Application Insights https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-application-insights.md
+
+ Title: How to use Application Insights Java In-Process Agent in Azure Spring Apps
+description: How to monitor apps using Application Insights Java In-Process Agent in Azure Spring Apps.
++++ Last updated : 06/20/2022+
+zone_pivot_groups: spring-apps-tier-selection
++
+# Use Application Insights Java In-Process Agent in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to monitor applications by using the Application Insights Java agent in Azure Spring Apps.
+
+With this feature you can:
+
+* Search tracing data with different filters.
+* View a dependency map of Spring applications.
+* Check request performance.
+* Monitor real-time live metrics.
+* Check request failures.
+* Check application metrics.
+* Check application logs.
+
+Application Insights can provide many observable perspectives, including:
+
+* Application map
+* Performance
+* Failures
+* Metrics
+* Live Metrics
+* Availability
+* Logs
+
+## Using the Application Insights feature
+
+When the **Application Insights** feature is enabled, you can:
+
+* In the left navigation pane, select **Application Insights** to view the **Overview** page of Application Insights. The **Overview** page will show you an overview of all running applications.
+* Select **Application Map** to see the status of calls between applications.
+
+ :::image type="content" source="media/spring-cloud-application-insights/insights-process-agent-map.png" alt-text="Screenshot of Azure portal Application Insights with Application map page showing." lightbox="media/spring-cloud-application-insights/insights-process-agent-map.png":::
+
+* Select the link between customers-service and `petclinic` to see more details such as a query from SQL.
+* Select an endpoint to see all the applications making requests to the endpoint.
+
+* In the left navigation pane, select **Performance** to see the performance data of all applications' operations, dependencies, and roles.
+
+ :::image type="content" source="media/spring-cloud-application-insights/insights-process-agent-performance.png" alt-text="Screenshot of Azure portal Application Insights with Performance page showing." lightbox="media/spring-cloud-application-insights/insights-process-agent-performance.png":::
+
+* In the left navigation pane, select **Failures** to see any unexpected failures or exceptions from your applications.
+
+ :::image type="content" source="media/spring-cloud-application-insights/insights-process-agent-failures.png" alt-text="Screenshot of Azure portal Application Insights with Failures page showing." lightbox="media/spring-cloud-application-insights/insights-process-agent-failures.png":::
+
+* In the left navigation pane, select **Metrics** and select the namespace, you'll see both Spring Boot metrics and custom metrics, if any.
+
+ :::image type="content" source="media/spring-cloud-application-insights/insights-process-agent-metrics.png" alt-text="Screenshot of Azure portal Application Insights with Metrics page showing." lightbox="media/spring-cloud-application-insights/insights-process-agent-metrics.png":::
+
+* In the left navigation pane, select **Live Metrics** to see the real-time metrics for different dimensions.
+
+ :::image type="content" source="media/spring-cloud-application-insights/petclinic-microservices-live-metrics.png" alt-text="Screenshot of Azure portal Application Insights with Live Metrics page showing." lightbox="media/spring-cloud-application-insights/petclinic-microservices-live-metrics.png":::
+
+* In the left navigation pane, select **Availability** to monitor the availability and responsiveness of Web apps by creating [Availability tests in Application Insights](../azure-monitor/app/monitor-web-app-availability.md).
+
+ :::image type="content" source="media/spring-cloud-application-insights/petclinic-microservices-availability.png" alt-text="Screenshot of Azure portal Application Insights with Availability page showing." lightbox="media/spring-cloud-application-insights/petclinic-microservices-availability.png":::
+
+* In the left navigation pane, select **Logs** to view all applications' logs, or one application's logs when filtering by `cloud_RoleName`.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-application-logs.png" alt-text="Screenshot of Azure portal Application Insights with Logs page showing." lightbox="media/enterprise/how-to-application-insights/application-insights-application-logs.png":::
+
+## Manage Application Insights using the Azure portal
++
+Enable the Java In-Process Agent by using the following procedure.
+
+1. Go to the **service | Overview** page of your service instance, then select **Application Insights** in the **Monitoring** section.
+1. Select **Enable Application Insights** to enable Application Insights in Azure Spring Apps.
+1. Select an existing instance of Application Insights or create a new one.
+1. When **Application Insights** is enabled, you can configure one optional sampling rate (default 10.0%).
+
+ :::image type="content" source="media/spring-cloud-application-insights/insights-process-agent.png" alt-text="Screenshot of Azure portal Azure Spring Apps instance with Application Insights page showing and 'Enable Application Insights' checkbox highlighted." lightbox="media/spring-cloud-application-insights/insights-process-agent.png":::
+
+1. Select **Save** to save the change.
+
+> [!NOTE]
+> Do not use the same Application Insights instance in different Azure Spring Apps instances, or you'll see mixed data.
+++
+You can use the Portal to check or update the current settings in Application Insights.
+
+### Enable Application Insights using the Azure portal
+
+1. Select **Application Insights**.
+1. Enable Application Insights by selecting **Edit binding**, or the **Unbound** hyperlink.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-binding-enable.png" alt-text="Screenshot of Azure portal Azure Spring Apps instance with Application Insights page showing and drop-down menu visible with 'Edit binding' option.":::
+
+1. Edit **Application Insights** or **Sampling rate**, then select **Save**.
+
+### Disable Application Insights
+
+1. Select **Application Insights**.
+1. Select **Unbind binding** to disable Application Insights.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-unbind-binding.png" alt-text="Screenshot of Azure portal Azure Spring Apps instance with Application Insights page showing and drop-down menu visible with 'Unbind binding' option.":::
+
+### Change Application Insights Settings
+
+Select the name under the *Application Insights* column to open the Application Insights section.
++
+### Edit Application Insights buildpack bindings in Build Service
+
+To check and update the current settings for the Application Insights buildpack bindings in Build Service, follow these steps:
+
+1. Select **Build Service**.
+1. Choose your builder.
+1. Select **Edit** under the Bindings column.
+
+Application Insights settings are found in the *ApplicationInsights* item listed under the *Binding type* column.
+
+1. Select the **Bound** hyperlink, or select **Edit Binding** under the ellipse, to open and edit the Application Insights buildpack bindings.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-builder-settings.png" alt-text="Screenshot of Azure portal 'Edit bindings for default builder' pane.":::
+
+1. Edit the binding settings, then select **Save**.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-edit-binding.png" alt-text="Screenshot of Azure portal 'Edit binding' pane.":::
++
+## Manage Application Insights using Azure CLI
+
+You can manage Application Insights using Azure CLI commands. In the following commands, be sure to replace the *\<placeholder>* text with the values described. The *\<service-instance-name>* placeholder refers to the name of your Azure Spring Apps instance.
+
+### Enable Application Insights
+
+To configure Application Insights when creating an Azure Spring Apps instance, use the following command. For the `app-insights` argument, you can specify an Application Insights name or resource ID.
++
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name "service-instance-name" \
+ --app-insights <name-or-resource-ID> \
+ --sampling-rate <sampling-rate>
+```
+++
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name "service-instance-name" \
+ --app-insights <name-or-resource-ID> \
+ --sampling-rate <sampling-rate>
+ --sku Enterprise
+```
++
+You can also use an Application Insights connection string (preferred) or instrumentation key, as shown in the following example.
++
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --app-insights-key <connection-string-or-instrumentation-key> \
+ --sampling-rate <sampling-rate>
+```
+++
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --app-insights-key <connection-string-or-instrumentation-key> \
+ --sampling-rate <sampling-rate>
+ --sku Enterprise
+```
++
+### Disable Application Insights
+
+To disable Application Insights when creating an Azure Spring Apps instance, use the following command:
++
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --disable-app-insights
+```
+++
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --disable-app-insights
+ --sku Enterprise
+```
+++
+### Check Application Insights settings
+
+To check the Application Insights settings of an existing Azure Spring Apps instance, use the following command:
+
+```azurecli
+az spring app-insights show \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name>
+```
+
+### Update Application Insights
+
+To update Application Insights to use a connection string (preferred) or instrumentation key, use the following command:
+
+```azurecli
+az spring app-insights update \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --app-insights-key <connection-string-or-instrumentation-key> \
+ --sampling-rate <sampling-rate>
+```
+
+To update Application Insights to use the resource name or ID, use the following command:
+
+```azurecli
+az spring app-insights update \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --app-insights <name-or-resource-ID> \
+ --sampling-rate <sampling-rate>
+```
+
+### Disable Application Insights with the update command
+
+To disable Application Insights on an existing Azure Spring Apps instance, use the following command:
+
+```azurecli
+az spring app-insights update \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --disable
+```
+++
+### Manage Application Insights buildpack bindings
+
+This section applies to the Enterprise Tier only, and provides instructions that that supplement the previous section.
+
+Azure Enterprise tier uses [Buildpack Bindings](./how-to-enterprise-build-service.md#buildpack-bindings) to integrate [Azure Application Insights](../azure-monitor/app/app-insights-overview.md) with the type `ApplicationInsights`.
+
+To create an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding create \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+ --type ApplicationInsights \
+ --properties sampling-percentage=<your-sampling-percentage> \
+ connection-string=<your-connection-string>
+```
+
+To list all buildpack bindings, and find Application Insights bindings the type `ApplicationInsights`, use the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding list \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-resource-name> \
+ --builder-name <your-builder-name>
+```
+
+To replace an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding set \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+ --type ApplicationInsights \
+ --properties sampling-percentage=<your-sampling-percentage> \
+ connection-string=<your-connection-string>
+```
+
+To get an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding show \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+```
+
+To delete an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding delete \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+```
++
+## Automation
++
+The following sections describe how to automate your deployment using Bicep, Azure Resource Manager templates (ARM templates) or Terraform.
+
+### Bicep
+
+To deploy using a Bicep file, copy the following content into a *main.bicep* file. For more information, see [Microsoft.AppPlatform Spring/monitoringSettings](/azure/templates/microsoft.appplatform/spring/monitoringsettings).
+
+```bicep
+param springName string
+param location string = resourceGroup().location
+
+resource spring 'Microsoft.AppPlatform/Spring@2020-07-01' = {
+ name: springName
+ location: location
+ properties: {}
+}
+
+resource monitorSetting 'Microsoft.AppPlatform/Spring/monitoringSettings@2020-11-01-preview' = {
+ parent: spring
+ name: 'default'
+ properties: {
+ appInsightsInstrumentationKey: '00000000-0000-0000-0000-000000000000'
+ appInsightsSamplingRate: 88
+ }
+}
+```
+
+### ARM templates
+
+To deploy using an ARM template, copy the following content into an *azuredeploy.json* file. For more information, see [Microsoft.AppPlatform Spring/monitoringSettings](/azure/templates/microsoft.appplatform/spring/monitoringsettings).
+
+```json
+{
+ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
+ "contentVersion": "1.0.0.0",
+ "parameters": {
+ "springName": {
+ "type": "string"
+ },
+ "location": {
+ "type": "string",
+ "defaultValue": "[resourceGroup().location]"
+ }
+ },
+ "resources": [
+ {
+ "type": "Microsoft.AppPlatform/Spring",
+ "apiVersion": "2020-07-01",
+ "name": "[parameters('springName')]",
+ "location": "[parameters('location')]",
+ "properties": {}
+ },
+ {
+ "type": "Microsoft.AppPlatform/Spring/monitoringSettings",
+ "apiVersion": "2020-11-01-preview",
+ "name": "[format('{0}/{1}', parameters('springName'), 'default')]",
+ "properties": {
+ "appInsightsInstrumentationKey": "00000000-0000-0000-0000-000000000000",
+ "appInsightsSamplingRate": 88
+ },
+ "dependsOn": [
+ "[resourceId('Microsoft.AppPlatform/Spring', parameters('springName'))]"
+ ]
+ }
+ ]
+}
+```
+
+### Terraform
+
+For a Terraform deployment, use the following template. For more information, see [azurerm_spring_cloud_service](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/spring_cloud_service).
+
+```terraform
+provider "azurerm" {
+ features {}
+}
+
+resource "azurerm_resource_group" "example" {
+ name = "example-resources"
+ location = "West Europe"
+}
+
+resource "azurerm_application_insights" "example" {
+ name = "tf-test-appinsights"
+ location = azurerm_resource_group.example.location
+ resource_group_name = azurerm_resource_group.example.name
+ application_type = "web"
+}
+
+resource "azurerm_spring_cloud_service" "example" {
+ name = "example-springcloud"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+ sku_name = "S0"
+
+ config_server_git_setting {
+ uri = "https://github.com/Azure-Samples/piggymetrics"
+ label = "config"
+ search_paths = ["dir1", "dir2"]
+ }
+
+ trace {
+ connection_string = azurerm_application_insights.example.connection_string
+ sample_rate = 10.0
+ }
+
+ tags = {
+ Env = "staging"
+ }
+}
+```
+++
+Automation in Enterprise tier is pending support. Documentation will be added as soon as it's available.
++
+## Java agent update/upgrade
++
+The Java agent will be updated/upgraded regularly with the JDK, which may affect the following scenarios.
+
+> [!NOTE]
+> The JDK version will be updated/upgraded quarterly per year.
+
+* Existing applications that use the Java agent before updating/upgrading won't be affected.
+* Applications created after updating/upgrading will use the new version of the Java agent.
+* Existing applications that didn't previously use the Java agent will require restart or redeployment to use the new version of the Java agent.
+++
+The Java agent will be updated/upgraded when the buildpack is updated.
+++
+## Java agent configuration hot-loading
+
+Azure Spring Apps has enabled a hot-loading mechanism to adjust the settings of agent configuration without restart of applications.
+
+> [!NOTE]
+> The hot-loading mechanism has a delay in minutes.
+
+* When the Java agent has been previously enabled, changes to the Application Insights instance and/or SamplingRate do NOT require applications to be restarted.
+* If you enable the Java agent, then you must restart applications.
+* When you disable the Java agent, applications will stop to send all monitoring data after a delay in minutes. You can restart applications to remove the agent from the Java runtime environment.
++
+## Concept matching between Azure Spring Apps and Application Insights
+
+| Azure Spring Apps | Application Insights |
+| | |
+| `App` | * __Application Map__/Role<br />* __Live Metrics__/Role<br />* __Failures__/Roles/Cloud Role<br />* __Performance__/Roles/Could Role |
+| `App Instance` | * __Application Map__/Role Instance<br />* __Live Metrics__/Service Name<br />* __Failures__/Roles/Cloud Instance<br />* __Performance__/Roles/Could Instance |
+
+The name `App Instance` from Azure Spring Apps will be changed or generated in the following scenarios:
+
+* You create a new application.
+* You deploy a JAR file or source code to an existing application.
+* You initiate a blue/green deployment.
+* You restart the application.
+* You stop the deployment of an application, and then restart it.
+
+When data is stored in Application Insights, it contains the history of Azure Spring Apps app instances created or deployed since the Java agent was enabled. For example, in the Application Insights portal, you can see application data created yesterday, but then deleted within a specific time range, like the last 24 hours. The following scenarios show how this works:
+
+* You created an application around 8:00 AM today from Azure Spring Apps with the Java agent enabled, and then you deployed a JAR file to this application around 8:10 AM today. After some testing, you change the code and deploy a new JAR file to this application at 8:30 AM today. Then, you take a break, and when you come back around 11:00 AM, you check some data from Application Insights. You'll see:
+ * Three instances in Application Map with time ranges in the last 24 hours, and Failures, Performance, and Metrics.
+ * One instance in Application Map with a time range in the last hour, and Failures, Performance, and Metrics.
+ * One instance in Live Metrics.
+* You created an application around 8:00 AM today from Azure Spring Apps with the Java agent enabled, and then you deployed a JAR file to this application around 8:10 AM today. Around 8:30 AM today, you try a blue/green deployment with another JAR file. Currently, you have two deployments for this application. After a break around 11:00 AM today, you want to check some data from Application Insights. You'll see:
+ * Three instances in Application Map with time ranges in the last 24 hours, and Failures, Performance, and Metrics.
+ * Two instances in Application Map with time ranges in last hour, and Failures, Performance, and Metrics.
+ * Two instances in Live Metrics.
+
+## Next steps
+
+* [Use distributed tracing with Azure Spring Apps](./how-to-distributed-tracing.md)
+* [Analyze logs and metrics](diagnostic-services.md)
+* [Stream logs in real time](./how-to-log-streaming.md)
+* [Application Map](../azure-monitor/app/app-map.md)
+* [Live Metrics](../azure-monitor/app/live-stream.md)
+* [Performance](../azure-monitor/app/tutorial-performance.md)
+* [Failures](../azure-monitor/app/tutorial-runtime-exceptions.md)
+* [Metrics](../azure-monitor/essentials/tutorial-metrics.md)
+* [Logs](../azure-monitor/logs/data-platform-logs.md)
spring-apps How To Bind Cosmos https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-bind-cosmos.md
+
+ Title: Bind an Azure Cosmos DB to your application in Azure Spring Apps
+description: Learn how to bind Azure Cosmos DB to your application in Azure Spring Apps
+++ Last updated : 10/06/2019++++
+# Bind an Azure Cosmos DB database to your application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Instead of manually configuring your Spring Boot applications, you can automatically bind select Azure services to your applications by using Azure Spring Apps. This article demonstrates how to bind your application to an Azure Cosmos DB database.
+
+Prerequisites:
+
+* A deployed Azure Spring Apps instance. Follow our [quickstart on deploying via the Azure CLI](./quickstart.md) to get started.
+* An Azure Cosmos DB account with a minimum permission level of Contributor.
+
+## Prepare your Java project
+
+1. Add one of the following dependencies to your application's pom.xml pom.xml file. Choose the dependency that is appropriate for your API type.
+
+ * API type: Core (SQL)
+
+ ```xml
+ <dependency>
+ <groupId>com.azure.spring</groupId>
+ <artifactId>azure-spring-boot-starter-cosmos</artifactId>
+ <version>3.6.0</version>
+ </dependency>
+ ```
+
+ * API type: MongoDB
+
+ ```xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-mongodb</artifactId>
+ </dependency>
+ ```
+
+ * API type: Cassandra
+
+ ```xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-cassandra</artifactId>
+ </dependency>
+ ```
+
+ * API type: Azure Table
+
+ ```xml
+ <dependency>
+ <groupId>com.microsoft.azure</groupId>
+ <artifactId>azure-storage-spring-boot-starter</artifactId>
+ <version>2.0.5</version>
+ </dependency>
+ ```
+
+1. Update the current app by running `az spring app deploy`, or create a new deployment for this change by running `az spring app deployment create`.
+
+## Bind your app to the Azure Cosmos DB
+
+#### [Service Binding](#tab/Service-Binding)
+Azure Cosmos DB has five different API types that support binding. The following procedure shows how to use them:
+
+1. Create an Azure Cosmos DB database. Refer to the quickstart on [creating a database](../cosmos-db/create-cosmosdb-resources-portal.md) for help.
+
+1. Record the name of your database. For this procedure, the database name is **testdb**.
+
+1. Go to your Azure Spring Apps service page in the Azure portal. Go to **Application Dashboard** and select the application to bind to Azure Cosmos DB. This application is the same one you updated or deployed in the previous step.
+
+1. Select **Service binding**, and select **Create service binding**. To fill out the form, select:
+ * The **Binding type** value **Azure Cosmos DB**.
+ * The API type.
+ * Your database name.
+ * The Azure Cosmos DB account.
+
+ > [!NOTE]
+ > If you are using Cassandra, use a key space for the database name.
+
+1. Restart the application by selecting **Restart** on the application page.
+
+1. To ensure the service is bound correctly, select the binding name and verify its details. The `property` field should be similar to this example:
+
+ ```properties
+ azure.cosmosdb.uri=https://<some account>.documents.azure.com:443
+ azure.cosmosdb.key=abc******
+ azure.cosmosdb.database=testdb
+ ```
+
+#### [Terraform](#tab/Terraform)
+The following Terraform script shows how to set up an Azure Spring Apps app with Azure Cosmos DB MongoDB API.
+
+```terraform
+provider "azurerm" {
+ features {}
+}
+
+variable "application_name" {
+ type = string
+ description = "The name of your application"
+ default = "demo-abc"
+}
+
+resource "azurerm_resource_group" "example" {
+ name = "example-resources"
+ location = "West Europe"
+}
+
+resource "azurerm_cosmosdb_account" "cosmosdb" {
+ name = "cosmosacct-${var.application_name}-001"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+ offer_type = "Standard"
+ kind = "MongoDB"
+
+ consistency_policy {
+ consistency_level = "Session"
+ }
+
+ geo_location {
+ failover_priority = 0
+ location = azurerm_resource_group.example.location
+ }
+}
+
+resource "azurerm_cosmosdb_mongo_database" "cosmosdb" {
+ name = "cosmos-${var.application_name}-001"
+ resource_group_name = azurerm_cosmosdb_account.cosmosdb.resource_group_name
+ account_name = azurerm_cosmosdb_account.cosmosdb.name
+}
+
+resource "azurerm_spring_cloud_service" "example" {
+ name = "${var.application_name}"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+}
+
+resource "azurerm_spring_cloud_app" "example" {
+ name = "${var.application_name}-app"
+ resource_group_name = azurerm_resource_group.example.name
+ service_name = azurerm_spring_cloud_service.example.name
+ is_public = true
+ https_only = true
+}
+
+resource "azurerm_spring_cloud_java_deployment" "example" {
+ name = "default"
+ spring_cloud_app_id = azurerm_spring_cloud_app.example.id
+ cpu = 2
+ memory_in_gb = 4
+ instance_count = 2
+ jvm_options = "-XX:+PrintGC"
+ runtime_version = "Java_11"
+
+ environment_variables = {
+ "azure.cosmosdb.uri" : azurerm_cosmosdb_account.cosmosdb.connection_strings[0]
+ "azure.cosmosdb.database" : azurerm_cosmosdb_mongo_database.cosmosdb.name
+ }
+}
+
+resource "azurerm_spring_cloud_active_deployment" "example" {
+ spring_cloud_app_id = azurerm_spring_cloud_app.example.id
+ deployment_name = azurerm_spring_cloud_java_deployment.example.name
+}
+```
+++
+## Next steps
+
+In this article, you learned how to bind your application in Azure Spring Apps to an Azure Cosmos DB database. To learn more about binding services to your application, see [Bind to an Azure Cache for Redis cache](./how-to-bind-redis.md).
spring-apps How To Bind Mysql https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-bind-mysql.md
+
+ Title: How to bind an Azure Database for MySQL instance to your application in Azure Spring Apps
+description: Learn how to bind an Azure Database for MySQL instance to your application in Azure Spring Apps
+++ Last updated : 11/04/2019++++
+# Bind an Azure Database for MySQL instance to your application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+With Azure Spring Apps, you can bind select Azure services to your applications automatically, instead of having to configure your Spring Boot application manually. This article shows you how to bind your application to your Azure Database for MySQL instance.
+
+## Prerequisites
+
+* A deployed Azure Spring Apps instance
+* An Azure Database for MySQL account
+* Azure CLI
+
+If you don't have a deployed Azure Spring Apps instance, follow the instructions in [Quickstart: Launch an application in Azure Spring Apps by using the Azure portal](./quickstart.md) to deploy your first Spring app.
+
+## Prepare your Java project
+
+1. In your project's *pom.xml* file, add the following dependency:
+
+ ```xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
+ </dependency>
+ ```
+
+1. In the *application.properties* file, remove any `spring.datasource.*` properties.
+
+1. Update the current app by running `az spring app deploy`, or create a new deployment for this change by running `az spring app deployment create`.
+
+## Bind your app to the Azure Database for MySQL instance
+
+#### [Service Binding](#tab/Service-Binding)
+1. Note the admin username and password of your Azure Database for MySQL account.
+
+1. Connect to the server, create a database named **testdb** from a MySQL client, and then create a new non-admin account.
+
+1. In the Azure portal, on your **Azure Spring Apps** service page, look for the **Application Dashboard**, and then select the application to bind to your Azure Database for MySQL instance. This is the same application that you updated or deployed in the previous step.
+
+1. Select **Service binding**, and then select the **Create service binding** button.
+
+1. Fill out the form, selecting **Azure MySQL** as the **Binding type**, using the same database name you used earlier, and using the same username and password you noted in the first step.
+
+1. Restart the app, and this binding should now work.
+
+1. To ensure that the service binding is correct, select the binding name, and then verify its detail. The `property` field should look like this:
+
+ ```properties
+ spring.datasource.url=jdbc:mysql://some-server.mysql.database.azure.com:3306/testdb?useSSL=true&requireSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
+ spring.datasource.username=admin@some-server
+ spring.datasource.password=abc******
+ spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
+ ```
+
+#### [Terraform](#tab/Terraform)
+
+The following Terraform script shows how to set up an Azure Spring Apps app with Azure Database for MySQL.
+
+```terraform
+provider "azurerm" {
+ features {}
+}
+
+variable "application_name" {
+ type = string
+ description = "The name of your application"
+ default = "demo-abc"
+}
+
+variable "administrator_login" {
+ type = string
+ description = "The MySQL administrator login"
+ default = "myadmin"
+}
+
+resource "azurerm_resource_group" "example" {
+ name = "example-resources"
+ location = "West Europe"
+}
+
+resource "random_password" "password" {
+ length = 32
+ special = true
+ override_special = "_%@"
+}
+
+resource "azurerm_mysql_server" "database" {
+ name = "mysql-${var.application_name}-001"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+
+ administrator_login = var.administrator_login
+ administrator_login_password = random_password.password.result
+
+ sku_name = "B_Gen5_1"
+ storage_mb = 5120
+ version = "5.7"
+ auto_grow_enabled = true
+ backup_retention_days = 7
+ geo_redundant_backup_enabled = false
+ infrastructure_encryption_enabled = false
+ public_network_access_enabled = true
+ ssl_enforcement_enabled = true
+ ssl_minimal_tls_version_enforced = "TLS1_2"
+}
+
+resource "azurerm_mysql_database" "database" {
+ name = "mysqldb-${var.application_name}-001"
+ resource_group_name = azurerm_resource_group.example.name
+ server_name = azurerm_mysql_server.database.name
+ charset = "utf8"
+ collation = "utf8_unicode_ci"
+}
+
+# This rule is to enable the 'Allow access to Azure services' checkbox
+resource "azurerm_mysql_firewall_rule" "database" {
+ name = "mysqlfw-${var.application_name}-001"
+ resource_group_name = azurerm_resource_group.example.name
+ server_name = azurerm_mysql_server.database.name
+ start_ip_address = "0.0.0.0"
+ end_ip_address = "0.0.0.0"
+}
+
+resource "azurerm_spring_cloud_service" "example" {
+ name = "example-springcloud"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+}
+
+resource "azurerm_spring_cloud_app" "example" {
+ name = "example-springcloudapp"
+ resource_group_name = azurerm_resource_group.example.name
+ service_name = azurerm_spring_cloud_service.example.name
+ is_public = true
+ https_only = true
+}
+
+resource "azurerm_spring_cloud_java_deployment" "example" {
+ name = "default"
+ spring_cloud_app_id = azurerm_spring_cloud_app.example.id
+ cpu = 2
+ memory_in_gb = 4
+ instance_count = 2
+ jvm_options = "-XX:+PrintGC"
+ runtime_version = "Java_11"
+
+ environment_variables = {
+ "spring.datasource.url" : "jdbc:mysql://${azurerm_mysql_server.database.fqdn}:3306/${azurerm_mysql_database.database.name}?useSSL=true&requireSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC"
+ "spring.datasource.username" : "${var.administrator_login}@${azurerm_mysql_server.database.name}"
+ "spring.datasource.password" : random_password.password.result
+ "spring.jpa.properties.hibernate.dialect" : "org.hibernate.dialect.MySQL5InnoDBDialect"
+ }
+}
+
+resource "azurerm_spring_cloud_active_deployment" "example" {
+ spring_cloud_app_id = azurerm_spring_cloud_app.example.id
+ deployment_name = azurerm_spring_cloud_java_deployment.example.name
+}
+```
+++
+## Next steps
+
+In this article, you learned how to bind an application in Azure Spring Apps to an Azure Database for MySQL instance. To learn more about binding services to an application, see [Bind an Azure Cosmos DB database to an application in Azure Spring Apps](./how-to-bind-cosmos.md).
spring-apps How To Bind Redis https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-bind-redis.md
+
+ Title: Bind Azure Cache for Redis to your application in Azure Spring Apps
+description: Learn how to bind Azure Cache for Redis to your application in Azure Spring Apps
+++ Last updated : 10/31/2019++++
+# Bind Azure Cache for Redis to your application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Instead of manually configuring your Spring Boot applications, you can automatically bind select Azure services to your applications by using Azure Spring Apps. This article shows how to bind your application to Azure Cache for Redis.
+
+## Prerequisites
+
+* A deployed Azure Spring Apps instance
+* An Azure Cache for Redis service instance
+* The Azure Spring Apps extension for the Azure CLI
+
+If you don't have a deployed Azure Spring Apps instance, follow the steps in the [quickstart on deploying an Azure Spring Apps app](./quickstart.md).
+
+## Prepare your Java project
+
+1. Add the following dependency to your project's pom.xml file:
+
+ ```xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
+ </dependency>
+ ```
+
+1. Remove any `spring.redis.*` properties from the `application.properties` file
+
+1. Update the current deployment using `az spring app update` or create a new deployment using `az spring app deployment create`.
+
+## Bind your app to the Azure Cache for Redis
+
+#### [Service Binding](#tab/Service-Binding)
+1. Go to your Azure Spring Apps service page in the Azure portal. Go to **Application Dashboard** and select the application to bind to Azure Cache for Redis. This application is the same one you updated or deployed in the previous step.
+
+1. Select **Service binding** and select **Create service binding**. Fill out the form, being sure to select the **Binding type** value **Azure Cache for Redis**, your Azure Cache for Redis server, and the **Primary** key option.
+
+1. Restart the app. The binding should now work.
+
+1. To ensure the service binding is correct, select the binding name and verify its details. The `property` field should look like this:
+
+ ```properties
+ spring.redis.host=some-redis.redis.cache.windows.net
+ spring.redis.port=6380
+ spring.redis.password=abc******
+ spring.redis.ssl=true
+ ```
+
+#### [Terraform](#tab/Terraform)
+
+The following Terraform script shows how to set up an Azure Spring Apps app with Azure Cache for Redis.
+
+```terraform
+provider "azurerm" {
+ features {}
+}
+
+variable "application_name" {
+ type = string
+ description = "The name of your application"
+ default = "demo-abc"
+}
+
+resource "azurerm_resource_group" "example" {
+ name = "example-resources"
+ location = "West Europe"
+}
+
+resource "azurerm_redis_cache" "redis" {
+ name = "redis-${var.application_name}-001"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+ capacity = 0
+ family = "C"
+ sku_name = "Standard"
+ enable_non_ssl_port = false
+ minimum_tls_version = "1.2"
+}
+
+resource "azurerm_spring_cloud_service" "example" {
+ name = "${var.application_name}"
+ resource_group_name = azurerm_resource_group.example.name
+ location = azurerm_resource_group.example.location
+}
+
+resource "azurerm_spring_cloud_app" "example" {
+ name = "${var.application_name}-app"
+ resource_group_name = azurerm_resource_group.example.name
+ service_name = azurerm_spring_cloud_service.example.name
+ is_public = true
+ https_only = true
+}
+
+resource "azurerm_spring_cloud_java_deployment" "example" {
+ name = "default"
+ spring_cloud_app_id = azurerm_spring_cloud_app.example.id
+ cpu = 2
+ memory_in_gb = 4
+ instance_count = 2
+ jvm_options = "-XX:+PrintGC"
+ runtime_version = "Java_11"
+
+ environment_variables = {
+ "spring.redis.host" = azurerm_redis_cache.redis.hostname
+ "spring.redis.password" = azurerm_redis_cache.redis.primary_access_key
+ "spring.redis.port" = "6380"
+ "spring.redis.ssl" = "true"
+ }
+}
+
+resource "azurerm_spring_cloud_active_deployment" "example" {
+ spring_cloud_app_id = azurerm_spring_cloud_app.example.id
+ deployment_name = azurerm_spring_cloud_java_deployment.example.name
+}
+```
+++
+## Next steps
+
+In this article, you learned how to bind your application in Azure Spring Apps to Azure Cache for Redis. To learn more about binding services to your application, see [Bind to an Azure Database for MySQL instance](./how-to-bind-mysql.md).
spring-apps How To Built In Persistent Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-built-in-persistent-storage.md
+
+ Title: How to use built-in persistent storage in Azure Spring Apps | Microsoft Docs
+description: How to use built-in persistent storage in Azure Spring Apps
+++ Last updated : 10/28/2021++++
+# Use built-in persistent storage in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+Azure Spring Apps provides two types of built-in storage for your application: persistent and temporary.
+
+By default, Azure Spring Apps provides temporary storage for each application instance. Temporary storage is limited to 5 GB per instance with the default mount path /tmp.
+
+> [!WARNING]
+> If you restart an application instance, the associated temporary storage is permanently deleted.
+
+Persistent storage is a file-share container managed by Azure and allocated per application. Data stored in persistent storage is shared by all instances of an application. An Azure Spring Apps instance can have a maximum of 10 applications with persistent storage enabled. Each application is allocated 50 GB of persistent storage. The default mount path for persistent storage is /persistent.
+
+> [!WARNING]
+> If you disable an applications's persistent storage, all of that storage is deallocated and all of the stored data is lost.
+
+## Enable or disable built-in persistent storage
+
+You can modify the state of built-in persistent storage using the Azure portal or by using the Azure CLI.
+
+#### [Portal](#tab/azure-portal)
+
+## Enable or disable built-in persistent storage with the portal
+
+The portal can be used to enable or disable built-in persistent storage.
+
+1. From the **Home** page of your Azure portal, select **All Resources**.
+
+ >![Locate the All Resources icon](media/portal-all-resources.jpg)
+
+1. Select the Azure Spring Apps resource that needs persistent storage. In this example, the selected application is called **upspring**.
+
+ > ![Select your application](media/select-service.jpg)
+
+1. Under the **Settings** heading, select **Apps**.
+
+1. Your Azure Spring Apps services appear in a table. Select the service that you want to add persistent storage to. In this example, the **gateway** service is selected.
+
+ > ![Select your service](media/select-gateway.jpg)
+
+1. From the service's configuration page, select **Configuration**
+
+1. Select the **Persistent Storage** tab and select **Enable** to turn on persistent storage, or select **Disable** to turn off persistent storage.
+
+ > ![Enable persistent storage](media/enable-persistent-storage.jpg)
+
+If persistent storage is enabled, its size and path are shown on the **Persistent Storage** tab.
+
+#### [Azure CLI](#tab/azure-cli)
+## Use the Azure CLI to enable or disable built-in persistent storage
+If necessary, install the Azure Spring Apps extension for the Azure CLI using this command:
+
+```azurecli
+az extension add --name spring
+```
+
+Other operations:
+
+* To create an app with built-in persistent storage enabled:
+
+ ```azurecli
+ az spring app create -n <app> -g <resource-group> -s <service-name> --enable-persistent-storage true
+ ```
+
+* To enable built-in persistent storage for an existing app:
+
+ ```azurecli
+ az spring app update -n <app> -g <resource-group> -s <service-name> --enable-persistent-storage true
+ ```
+
+* To disable built-in persistent storage in an existing app:
+
+ ```azurecli
+ az spring app update -n <app> -g <resource-group> -s <service-name> --enable-persistent-storage false
+ ```
+++
+> [!WARNING]
+> If you disable an applications's persistent storage, all of that storage is deallocated and all of the stored data is permanently lost.
+
+## Next steps
+
+* Learn about [application and service quotas](./quotas.md).
+* Learn how to [manually scale your application](./how-to-scale-manual.md).
spring-apps How To Capture Dumps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-capture-dumps.md
+
+ Title: Capture heap dump and thread dump manually and use Java Flight Recorder in Azure Spring Apps
+description: Learn how to manually capture a heap dump, a thread dump, or start Java Flight Recorder.
++++ Last updated : 01/21/2022+++
+# Capture heap dump and thread dump manually and use Java Flight Recorder in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes how to manually generate a heap dump or thread dump, and how to start Java Flight Recorder (JFR).
+
+Effective troubleshooting is critical to ensure you can fix issues in production environments and keep your business online. Azure Spring Apps provides application log streaming and query, rich metrics emitting, alerts, distributed tracing, and so forth. However, when you get alerts about requests with high latency, JVM heap leak, or high CPU usage, there's no last-mile solution. For this reason, we've enabled you to manually generate a heap dump, generate a thread dump, and start JFR.
+
+## Prerequisites
+
+* A deployed Azure Spring Apps service instance. To get started, see [Quickstart: Deploy your first application to Azure Spring Apps](quickstart.md).
+* At least one application already created in your service instance.
+* Your own persistent storage as described in [How to enable your own persistent storage in Azure Spring Apps](how-to-custom-persistent-storage.md). This storage is used to save generated diagnostic files. The paths you provide in the parameter values below should be under the mount path of the persistent storage bound to your app. If you want to use a path under the mount path, be sure to create the subpath beforehand.
+
+## Generate a heap dump
+
+Use the following command to generate a heap dump of your app in Azure Spring Apps.
+
+```azurecli
+az spring app deployment generate-heap-dump \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --app <app-name> \
+ --deployment <deployment-name> \
+ --app-instance <app-instance name> \
+ --file-path <your-target-file-path-in-your-persistent-storage-mount-path>
+```
+
+## Generate a thread dump
+
+Use the following command to generate a thread dump of your app in Azure Spring Apps.
+
+```azurecli
+az spring app deployment generate-thread-dump \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --app <app-name> \
+ --deployment <deployment-name> \
+ --app-instance <app-instance name> \
+ --file-path <your-target-file-path-in-your-persistent-storage-mount-path>
+```
+
+## Start JFR
+
+Use the following command to start JFR for your app in Azure Spring Apps.
+
+```azurecli
+az spring app deployment start-jfr \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --app <app-name> \
+ --deployment <deployment-name> \
+ --app-instance <app-instance name> \
+ --file-path <your-target-file-path-in-your-persistent-storage-mount-path> \
+ --duration <duration-of-JFR>
+```
+
+The default value for `duration` is 60 seconds.
+
+## Generate a dump using the Azure portal
+
+Use the following steps to generate a heap or thread dump of your app in Azure Spring Apps.
+
+1. In the Azure portal, navigate to your target app, then select **Troubleshooting**.
+2. In the **Troubleshooting** pane, select the app instance and the type of dump you'd like to collect.
+3. In the **File path** field, specify the mount path of your persistent storage.
+4. Select **Collect**.
+
+## Get your diagnostic files
+
+Navigate to the target file path in your persistent storage and find your dump/JFR. From there, you can download them to your local machine. The name of the generated file will be similar to *`<app-instance>_heapdump_<time-stamp>.hprof`* for the heap dump, *`<app-instance>_threaddump_<time-stamp>.txt`* for the thread dump, and *`<app-instance>_JFR_<time-stamp>.jfr`* for the JFR file.
+
+## Next steps
+
+* [Use the diagnostic settings of JVM options for advanced troubleshooting in Azure Spring Apps](how-to-dump-jvm-options.md)
spring-apps How To Cicd https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-cicd.md
+
+ Title: Automate application deployments to Azure Spring Apps
+description: Describes how to use the Azure Spring Apps task for Azure Pipelines.
+++ Last updated : 09/13/2021++
+zone_pivot_groups: programming-languages-spring-apps
++
+# Automate application deployments to Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use the [Azure Spring Apps task for Azure Pipelines](/azure/devops/pipelines/tasks/deploy/azure-spring-cloud) to deploy applications.
+
+Continuous integration and continuous delivery tools let you quickly deploy updates to existing applications with minimal effort and risk. Azure DevOps helps you organize and control these key jobs.
+
+The following video describes end-to-end automation using tools of your choice, including Azure Pipelines.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/D2cfXAbUwDc?list=PLPeZXlCR7ew8LlhnSH63KcM0XhMKxT1k_]
++
+## Create an Azure Resource Manager service connection
+
+First, create an Azure Resource Manager service connection to your Azure DevOps project. For instructions, see [Connect to Microsoft Azure](/azure/devops/pipelines/library/connect-to-azure). Be sure to select the same subscription you're using for your Azure Spring Apps service instance.
+
+## Build and deploy apps
+
+You can now build and deploy your projects using a series of tasks. The following Azure Pipelines template defines variables, a .NET Core task to build the application, and an Azure Spring Apps task to deploy the application.
+
+```yaml
+variables:
+ workingDirectory: './steeltoe-sample'
+ planetMainEntry: 'Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll'
+ solarMainEntry: 'Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll'
+ planetAppName: 'planet-weather-provider'
+ solarAppName: 'solar-system-weather'
+ serviceName: '<your service name>'
+
+steps:
+# Restore, build, publish and package the zipped planet app
+- task: DotNetCoreCLI@2
+ inputs:
+ command: 'publish'
+ publishWebProjects: false
+ arguments: '--configuration Release'
+ zipAfterPublish: false
+ modifyOutputPath: false
+ workingDirectory: $(workingDirectory)
+
+# Deploy the planet app
+- task: AzureSpringCloud@0
+ inputs:
+ azureSubscription: '<Service Connection Name>'
+ Action: 'Deploy'
+ AzureSpringCloud: $(serviceName)
+ AppName: 'testapp'
+ UseStagingDeployment: false
+ DeploymentName: 'default'
+ Package: $(workingDirectory)/src/$(planetAppName)/publish-deploy-planet.zip
+ RuntimeVersion: 'NetCore_31'
+ DotNetCoreMainEntryPath: $(planetMainEntry)
+
+# Deploy the solar app
+- task: AzureSpringCloud@0
+ inputs:
+ azureSubscription: '<Service Connection Name>'
+ Action: 'Deploy'
+ AzureSpringCloud: $(serviceName)
+ AppName: 'testapp'
+ UseStagingDeployment: false
+ DeploymentName: 'default'
+ Package: $(workingDirectory)/src/$(solarAppName)/publish-deploy-solar.zip
+ RuntimeVersion: 'NetCore_31'
+ DotNetCoreMainEntryPath: $(solarMainEntry)
+```
++
+## Set up an Azure Spring Apps instance and an Azure DevOps project
+
+First, use the following steps to set up an existing Azure Spring Apps instance for use with Azure DevOps.
+
+1. Go to your Azure Spring Apps instance, then create a new app.
+1. Go to the Azure DevOps portal, then create a new project under your chosen organization. If you don't have an Azure DevOps organization, you can create one for free.
+1. Select **Repos**, then import the [Spring Boot demo code](https://github.com/spring-guides/gs-spring-boot) to the repository.
+
+## Create an Azure Resource Manager service connection
+
+Next, create an Azure Resource Manager service connection to your Azure DevOps project. For instructions, see [Connect to Microsoft Azure](/azure/devops/pipelines/library/connect-to-azure). Be sure to select the same subscription you're using for your Azure Spring Apps service instance.
+
+## Build and deploy apps
+
+You can now build and deploy your projects using a series of tasks. The following sections show you various options for deploying your app using Azure DevOps.
+
+### Deploy using a pipeline
+
+To deploy using a pipeline, follow these steps:
+
+1. Select **Pipelines**, then create a new pipeline with a Maven template.
+1. Edit the *azure-pipelines.yml* file to set the `mavenPomFile` field to *'complete/pom.xml'*.
+1. Select **Show assistant** on the right side, then select the **Azure Spring Apps** template.
+1. Select the service connection you created for your Azure Subscription, then select your Azure Spring Apps instance and app instance.
+1. Disable **Use Staging Deployment**.
+1. Set **Package or folder** to *complete/target/spring-boot-complete-0.0.1-SNAPSHOT.jar*.
+1. Select **Add** to add this task to your pipeline.
+
+ Your pipeline settings should match the following image.
+
+ :::image type="content" source="media/spring-cloud-how-to-cicd/pipeline-task-setting.jpg" alt-text="Screenshot of pipeline settings." lightbox="media/spring-cloud-how-to-cicd/pipeline-task-setting.jpg":::
+
+ You can also build and deploy your projects using following pipeline template. This example first defines a Maven task to build the application, followed by a second task that deploys the JAR file using the Azure Spring Apps task for Azure Pipelines.
+
+ ```yaml
+ steps:
+ - task: Maven@3
+ inputs:
+ mavenPomFile: 'complete/pom.xml'
+ - task: AzureSpringCloud@0
+ inputs:
+ azureSubscription: '<your service connection name>'
+ Action: 'Deploy'
+ AzureSpringCloud: <your Azure Spring Apps service>
+ AppName: <app-name>
+ UseStagingDeployment: false
+ DeploymentName: 'default'
+ Package: ./target/your-result-jar.jar
+ ```
+
+3. Select **Save and run**, then wait for job to finish.
+
+### Blue-green deployments
+
+The deployment shown in the previous section receives application traffic immediately upon deployment. This enables you to test the application in the production environment before it receives any customer traffic.
+
+#### Edit the pipeline file
+
+To build the application the same way as shown previously and deploy it to a staging deployment, use the following template. In this example, the staging deployment must already exist. For an alternative approach, see [Blue-green deployment strategies](concepts-blue-green-deployment-strategies.md).
+
+```yaml
+steps:
+- task: Maven@3
+ inputs:
+ mavenPomFile: 'pom.xml'
+- task: AzureSpringCloud@0
+ inputs:
+ azureSubscription: '<your service connection name>'
+ Action: 'Deploy'
+ AzureSpringCloud: <your Azure Spring Apps service>
+ AppName: <app-name>
+ UseStagingDeployment: true
+ Package: ./target/your-result-jar.jar
+- task: AzureSpringCloud@0
+ inputs:
+ azureSubscription: '<your service connection name>'
+ Action: 'Set Production'
+ AzureSpringCloud: <your Azure Spring Apps service>
+ AppName: <app-name>
+ UseStagingDeployment: true
+```
+
+#### Use the Releases section
+
+The following steps show you how to enable a blue-green deployment from the **Releases** section.
+
+1. Select **Pipelines** and create a new pipeline for your Maven build and publish artifact.
+ 1. Select **Azure Repos Git** for your code location.
+ 1. Select a repository where your code is located.
+ 1. Select the **Maven** template and modify the file to set the `mavenPomFile` field to *`complete/pom.xml`*.
+ 1. Select **Show assistant** on the right side and select the **Publish build artifacts** template.
+ 1. Set **Path to publish** to *complete/target/spring-boot-complete-0.0.1-SNAPSHOT.jar*.
+ 1. Select **Save and run**.
+
+1. Select **Releases**, then **Create release**.
+1. Add a new pipeline, and select **Empty job** to create a job.
+1. Under **Stages** select the line **1 job, 0 task**
+
+ :::image type="content" source="media/spring-cloud-how-to-cicd/create-new-job.jpg" alt-text="Screenshot of where to select to add a task to a job.":::
+
+ 1. Select the **+** to add a task to the job.
+ 1. Search for the **Azure Spring Apps** template, then select **Add** to add the task to the job.
+ 1. Select **Azure Spring Apps Deploy:** to edit the task.
+ 1. Fill this task with your app's information, then disable **Use Staging Deployment**.
+ 1. Enable **Create a new staging deployment if one does not exist**, then enter a name in **Deployment**.
+ 1. Select **Save** to save this task.
+ 1. Select **OK**.
+1. Select **Pipeline**, then select **Add an artifact**.
+ 1. Under **Source (build pipeline)** select the pipeline created previously.
+ 1. Select **Add**, then **Save**.
+1. Select **1 job, 1 task** under **Stages**.
+1. Navigate to the **Azure Spring Apps Deploy** task in **Stage 1**, then select the ellipsis next to **Package or folder**.
+1. Select *spring-boot-complete-0.0.1-SNAPSHOT.jar* in the dialog, then select **OK**.
+
+ :::image type="content" source="media/spring-cloud-how-to-cicd/change-artifact-path.jpg" alt-text="Screenshot of the 'Select a file or folder' dialog box.":::
+
+1. Select the **+** to add another **Azure Spring Apps** task to the job.
+2. Change the action to **Set Production Deployment**.
+3. Select **Save**, then **Create release** to automatically start the deployment.
+
+To verify your app's current release status, select **View release**. After this task is finished, visit the Azure portal to verify your app status.
+
+### Deploy from source
+
+To deploy directly to Azure without a separate build step, use the following pipeline template.
+
+```yaml
+- task: AzureSpringCloud@0
+ inputs:
+ azureSubscription: '<your service connection name>'
+ Action: 'Deploy'
+ AzureSpringCloud: <your Azure Spring Apps service>
+ AppName: <app-name>
+ UseStagingDeployment: false
+ DeploymentName: 'default'
+ Package: $(Build.SourcesDirectory)
+```
++
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md)
spring-apps How To Circuit Breaker Metrics https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-circuit-breaker-metrics.md
+
+ Title: Collect Spring Cloud Resilience4J Circuit Breaker Metrics with Micrometer
+description: How to collect Spring Cloud Resilience4J Circuit Breaker Metrics with Micrometer in Azure Spring Apps.
++++ Last updated : 12/15/2020+++
+# Collect Spring Cloud Resilience4J Circuit Breaker Metrics with Micrometer (Preview)
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to collect Spring Cloud Resilience4j Circuit Breaker Metrics with Application Insights Java in-process agent. With this feature you can monitor metrics of resilience4j circuit breaker from Application Insights with Micrometer.
+
+We use the [spring-cloud-circuit-breaker-demo](https://github.com/spring-cloud-samples/spring-cloud-circuitbreaker-demo) to show how it works.
+
+## Prerequisites
+
+* Enable Java In-Process agent from the [Java In-Process Agent for Application Insights guide](./how-to-application-insights.md#manage-application-insights-using-the-azure-portal).
+* Enable dimension collection for resilience4j metrics from the [Application Insights guide](../azure-monitor/app/pre-aggregated-metrics-log-metrics.md#custom-metrics-dimensions-and-pre-aggregation).
+* Install git, Maven, and Java, if not already in use by the development computer.
+
+## Build and deploy apps
+
+The following procedure builds and deploys apps.
+
+1. Clone and build the demo repository.
+
+```bash
+git clone https://github.com/spring-cloud-samples/spring-cloud-circuitbreaker-demo.git
+cd spring-cloud-circuitbreaker-demo && mvn clean package -DskipTests
+```
+
+2. Create applications with endpoints
+
+```azurecli
+az spring app create
+ --resource-group ${resource-group-name} \
+ --name resilience4j \
+ --service ${Azure-Spring-Apps-instance-name} \
+ --assign-endpoint
+az spring app create \
+ --resource-group ${resource-group-name} \
+ --service ${Azure-Spring-Apps-instance-name} \
+ --name reactive-resilience4j \
+ --assign-endpoint
+```
+
+3. Deploy applications.
+
+```azurecli
+az spring app deploy -n resilience4j \
+ --jar-path ./spring-cloud-circuitbreaker-demo-resilience4j/target/spring-cloud-circuitbreaker-demo-resilience4j-0.0.1.BUILD-SNAPSHOT.jar \
+ -s ${service_name} -g ${resource_group}
+az spring app deploy -n reactive-resilience4j \
+ --jar-path ./spring-cloud-circuitbreaker-demo-reactive-resilience4j/target/spring-cloud-circuitbreaker-demo-reactive-resilience4j-0.0.1.BUILD-SNAPSHOT.jar \
+ -s ${service_name} -g ${resource_group}
+```
+
+> [!Note]
+>
+> * Include the required dependency for Resilience4j:
+>
+> ```xml
+> <dependency>
+> <groupId>io.github.resilience4j</groupId>
+> <artifactId>resilience4j-micrometer</artifactId>
+> </dependency>
+> <dependency>
+> <groupId>org.springframework.cloud</groupId>
+> <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
+> </dependency>
+> ```
+>
+> * The customer code must use the API of `CircuitBreakerFactory`, which is implemented as a `bean` automatically created when you include a Spring Cloud Circuit Breaker starter. For details see [Spring Cloud Circuit Breaker](https://spring.io/projects/spring-cloud-circuitbreaker#overview).
+>
+> * The following 2 dependencies have conflicts with resilient4j packages above. Be sure the customer does not include them.
+>
+> ```xml
+> <dependency>
+> <groupId>org.springframework.cloud</groupId>
+> <artifactId>spring-cloud-starter-sleuth</artifactId>
+> </dependency>
+> <dependency>
+> <groupId>org.springframework.cloud</groupId>
+> <artifactId>spring-cloud-starter-zipkin</artifactId>
+> </dependency>
+> ```
+>
+>
+> Navigate to the URL provided by gateway applications, and access the endpoint from [spring-cloud-circuit-breaker-demo](https://github.com/spring-cloud-samples/spring-cloud-circuitbreaker-demo) as follows:
+>
+> ```console
+> /get
+> /get/delay/{seconds}
+> /get/fluxdelay/{seconds}
+> ```
+
+## Locate Resilence4j Metrics from Portal
+
+1. Select the **Application Insights** Blade from Azure Spring Apps portal, and select **Application Insights**.
+
+ [ ![resilience4J 0](media/spring-cloud-resilience4j/resilience4J-0.png)](media/spring-cloud-resilience4j/resilience4J-0.PNG)
+
+2. Select **Metrics** from the **Application Insights** page. Select **azure.applicationinsights** from **Metrics Namespace**. Also select **resilience4j_circuitbreaker_buffered_calls** metrics with **Average**.
+
+ [ ![resilience4J 1](media/spring-cloud-resilience4j/resilience4J-1.png)](media/spring-cloud-resilience4j/resilience4J-1.PNG)
+
+3. Select **resilience4j_circuitbreaker_calls** metrics and **Average**.
+
+ [ ![resilience4J 2](media/spring-cloud-resilience4j/resilience4J-2.png)](media/spring-cloud-resilience4j/resilience4J-2.PNG)
+
+4. Select **resilience4j_circuitbreaker_calls** metrics and **Average**. Select **Add filter**, and then select name as **createNewAccount**.
+
+ [ ![resilience4J 3](media/spring-cloud-resilience4j/resilience4J-3.png)](media/spring-cloud-resilience4j/resilience4J-3.PNG)
+
+5. Select **resilience4j_circuitbreaker_calls** metrics and **Average**. Then select **Apply splitting**, and select **kind**.
+
+ [ ![resilience4J 4](media/spring-cloud-resilience4j/resilience4J-4.png)](media/spring-cloud-resilience4j/resilience4J-4.PNG)
+
+6. Select **resilience4j_circuitbreaker_calls**, `**resilience4j_circuitbreaker_buffered_calls**, and **resilience4j_circuitbreaker_slow_calls** metrics with **Average**.
+
+ [ ![resilience4J 5](media/spring-cloud-resilience4j/resilience4j-5.png)](media/spring-cloud-resilience4j/resilience4j-5.PNG)
+
+## Next steps
+
+* [Application insights](./how-to-application-insights.md)
+* [Distributed tracing](./how-to-distributed-tracing.md)
+* [Circuit breaker dashboard](./tutorial-circuit-breaker.md)
spring-apps How To Config Server https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-config-server.md
+
+ Title: Configure your managed Spring Cloud Config Server in Azure Spring Apps
+description: Learn how to configure a managed Spring Cloud Config Server in Azure Spring Apps on the Azure portal
++++ Last updated : 12/10/2021+++
+# Configure a managed Spring Cloud Config Server in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+This article shows you how to configure a managed Spring Cloud Config Server in Azure Spring Apps service.
+
+Spring Cloud Config Server provides server and client-side support for an externalized configuration in a distributed system. The Config Server instance provides a central place to manage external properties for applications across all environments. For more information, see the [Spring Cloud Config Server reference](https://spring.io/projects/spring-cloud-config).
+
+## Prerequisites
+
+* An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* An already provisioned and running Azure Spring Apps service of basic or standard tier. To set up and launch an Azure Spring Apps service, see [Quickstart: Launch a Java Spring application by using the Azure CLI](./quickstart.md). Spring Cloud Config Server is not applicable to enterprise tier.
+
+## Restriction
+
+There are some restrictions when you use Config Server with a Git back end. Some properties are automatically injected into your application environment to access Config Server and Service Discovery. If you also configure those properties from your Config Server files, you might experience conflicts and unexpected behavior. The properties include:
+
+```yaml
+eureka.client.service-url.defaultZone
+eureka.client.tls.keystore
+eureka.instance.preferIpAddress
+eureka.instance.instance-id
+server.port
+spring.cloud.config.tls.keystore
+spring.application.name
+spring.jmx.enabled
+```
+
+> [!CAUTION]
+> We strongly recommend that you *do not* put the above properties in your Config Server application files.
+
+## Create your Config Server files
+
+Azure Spring Apps supports Azure DevOps, GitHub, GitLab, and Bitbucket for storing your Config Server files. When you've your repository ready, create the configuration files with the following instructions and store them there.
+
+Additionally, some configurable properties are available only for certain types. The following subsections list the properties for each repository type.
+
+### Public repository
+
+When you use a public repository, your configurable properties are more limited.
+
+All configurable properties that are used to set up the public Git repository are listed in the following table:
+
+> [!NOTE]
+> Using a hyphen (-) to separate words is the only naming convention that's currently supported. For example, you can use *default-label*, but not *defaultLabel*.
+
+| Property | Required | Feature |
+| :-- | -- | |
+| `uri` | Yes | The URI of the Git repository that's used as the Config Server back end begins with *http://*, *https://*, *git@*, or *ssh://*. |
+| `default-label` | No | The default label of the Git repository, should be the *branch name*, *tag name*, or *commit-id* of the repository. |
+| `search-paths` | No | An array of strings that are used to search subdirectories of the Git repository. |
+
+### Private repository with SSH authentication
+
+All configurable properties used to set up private Git repository with SSH are listed in the following table:
+
+> [!NOTE]
+> Using a hyphen (-) to separate words is the only naming convention that's currently supported. For example, you can use *default-label*, but not *defaultLabel*.
+
+| Property | Required | Feature |
+| :- | -- | |
+| `uri` | Yes | The URI of the Git repository used as the Config Server back end, should be started with *http://*, *https://*, *git@*, or *ssh://*. |
+| `default-label` | No | The default label of the Git repository, should be the *branch name*, *tag name*, or *commit-id* of the repository. |
+| `search-paths` | No | An array of strings used to search subdirectories of the Git repository. |
+| `private-key` | No | The SSH private key to access the Git repository, _required_ when the URI starts with *git@* or *ssh://*. |
+| `host-key` | No | The host key of the Git repository server shouldn't include the algorithm prefix as covered by `host-key-algorithm`. |
+| `host-key-algorithm` | No | The host key algorithm should be *ssh-dss*, *ssh-rsa*, *ecdsa-sha2-nistp256*, *ecdsa-sha2-nistp384*, or *ecdsa-sha2-nistp521*. *Required* only if `host-key` exists. |
+| `strict-host-key-checking` | No | Indicates whether the Config Server instance will fail to start when using the private `host-key`. Should be *true* (default value) or *false*. |
+
+> [!NOTE]
+> Config Server takes `master` (om Git itself) as the default label if you don't specify one. But GitHub has changed the default branch from `master` to `main` recently. To avoid Azure Spring Apps Config Server failure, be sure to pay attention to the default label when setting up Config Server with GitHub, especially for newly-created repositories.
+
+### Private repository with basic authentication
+
+All configurable properties used to set up private Git repository with basic authentication are listed below.
+
+> [!NOTE]
+> Using a hyphen (-) to separate words is the only naming convention that's currently supported. For example, use *default-label*, not *defaultLabel*.
+
+| Property | Required | Feature |
+| :-- | -- | |
+| `uri` | Yes | The URI of the Git repository that's used as the Config Server back end should be started with *http://*, *https://*, *git@*, or *ssh://*. |
+| `default-label` | No | The default label of the Git repository, should be the *branch name*, *tag name*, or *commit-id* of the repository. |
+| `search-paths` | No | An array of strings used to search subdirectories of the Git repository. |
+| `username` | No | The username that's used to access the Git repository server, _required_ when the Git repository server supports `Http Basic Authentication`. |
+| `password` | No | The password or personal access token used to access the Git repository server, _required_ when the Git repository server supports `Http Basic Authentication`. |
+
+> [!NOTE]
+> Many `Git` repository servers support the use of tokens rather than passwords for HTTP Basic Authentication. Some repositories allow tokens to persist indefinitely. However, some Git repository servers, including Azure DevOps Server, force tokens to expire in a few hours. Repositories that cause tokens to expire shouldn't use token-based authentication with Azure Spring Apps.
+> GitHub has removed support for password authentication, so you'll need to use a personal access token instead of password authentication for GitHub. For more information, see [Token authentication](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/).
+
+### Other Git repositories
+
+All configurable properties used to set up Git repositories with pattern are listed below.
+
+> [!NOTE]
+> Using a hyphen (-) to separate words is the only naming convention that's currently supported. For example, use *default-label*, not *defaultLabel*.
+
+| Property | Required | Feature |
+| : | - | |
+| `repos` | No | A map consisting of the settings for a Git repository with a given name. |
+| `repos."uri"` | Yes on `repos` | The URI of the Git repository that's used as the Config Server back end should be started with *http://*, *https://*, *git@*, or *ssh://*. |
+| `repos."name"` | Yes on `repos` | A name to identify on the Git repository, _required_ only if `repos` exists. For example, *team-A*, *team-B*. |
+| `repos."pattern"` | No | An array of strings used to match an application name. For each pattern, use the `{application}/{profile}` format with wildcards. |
+| `repos."default-label"` | No | The default label of the Git repository should be the *branch name*, *tag name*, or *commit-id* of the repository. |
+| `repos."search-paths`" | No | An array of strings used to search subdirectories of the Git repository. |
+| `repos."username"` | No | The username that's used to access the Git repository server, _required_ when the Git repository server supports `Http Basic Authentication`. |
+| `repos."password"` | No | The password or personal access token used to access the Git repository server, _required_ when the Git repository server supports `Http Basic Authentication`. |
+| `repos."private-key"` | No | The SSH private key to access Git repository, _required_ when the URI starts with *git@* or *ssh://*. |
+| `repos."host-key"` | No | The host key of the Git repository server shouldn't include the algorithm prefix as covered by `host-key-algorithm`. |
+| `repos."host-key-algorithm"` | No | The host key algorithm should be *ssh-dss*, *ssh-rsa*, *ecdsa-sha2-nistp256*, *ecdsa-sha2-nistp384*, or *ecdsa-sha2-nistp521*. *Required* only if `host-key` exists. |
+| `repos."strict-host-key-checking"` | No | Indicates whether the Config Server instance will fail to start when using the private `host-key`. Should be *true* (default value) or *false*. |
+
+The following table shows some examples for the **Additional repositories** section. For more information, see [Pattern Matching and Multiple Repositories](https://cloud.spring.io/spring-cloud-config/reference/html/#_pattern_matching_and_multiple_repositories) in the Spring documentation.
+
+| Patterns | Description |
+| : | - |
+| *test-config-server-app-0/\** | The pattern and repository URI will match a Spring boot application named `test-config-server-app-0` with any profile. |
+| *test-config-server-app-1/dev* | The pattern and repository URI will match a Spring boot application named `test-config-server-app-1` with dev profile. |
+| *test-config-server-app-2/prod* | The pattern and repository URI will match a Spring boot application named `test-config-server-app-2` with prod profile. |
++
+## Attach your Config Server repository to Azure Spring Apps
+
+Now that your configuration files are saved in a repository, you need to connect Azure Spring Apps to it.
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+2. Go to your Azure Spring Apps **Overview** page.
+
+3. Select **Config Server** in the left navigation pane.
+
+4. In the **Default repository** section, set **URI** to "https://github.com/Azure-Samples/piggymetrics-config".
+
+5. Select **Validate**.
+
+ ![Navigate to config server](media/how-to-config-server/portal-config.png)
+
+6. When validation is complete, select **Apply** to save your changes.
+
+ ![Validating config server](media/how-to-config-server/validate-complete.png)
+
+7. Updating the configuration can take a few minutes.
+
+ ![Updating config server](media/how-to-config-server/updating-config.png)
+
+8. You should get a notification when the configuration is complete.
+
+### Enter repository information directly to the Azure portal
+
+#### Default repository
+
+* **Public repository**: In the **Default repository** section, in the **Uri** box, paste the repository URI. Set the **Label** to **config**. Ensure that the **Authentication** setting is **Public**, and then select **Apply** to finish.
+
+* **Private repository**: Azure Spring Apps supports basic password/token-based authentication and SSH.
+
+ * **Basic Authentication**: In the **Default repository** section, in the **Uri** box, paste the repository URI, and then select the **Authentication** ("pencil" icon) button. In the **Edit Authentication** pane, in the **Authentication type** drop-down list, select **HTTP Basic**, and then enter your username and password/token to grant access to Azure Spring Apps. Select **OK**, and then select **Apply** to finish setting up your Config Server instance.
+
+ ![The Edit Authentication pane basic auth](media/spring-cloud-tutorial-config-server/basic-auth.png)
+
+ > [!CAUTION]
+ > Some Git repository servers use a *personal-token* or an *access-token*, such as a password, for **Basic Authentication**. You can use that kind of token as a password in Azure Spring Apps, because it will never expire. But for other Git repository servers, such as Bitbucket and Azure DevOps Server, the *access-token* expires in one or two hours. This means that the option isn't viable when you use those repository servers with Azure Spring Apps.
+ > GitHub has removed support for password authentication, so you'll need to use a personal access token instead of password authentication for GitHub. For more information, see [Token authentication](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/).
+
+ * **SSH**: In the **Default repository** section, in the **Uri** box, paste the repository URI, and then select the **Authentication** ("pencil" icon) button. In the **Edit Authentication** pane, in the **Authentication type** drop-down list, select **SSH**, and then enter your **Private key**. Optionally, specify your **Host key** and **Host key algorithm**. Be sure to include your public key in your Config Server repository. Select **OK**, and then select **Apply** to finish setting up your Config Server instance.
+
+ ![The Edit Authentication pane ssh auth](media/spring-cloud-tutorial-config-server/ssh-auth.png)
+
+#### Additional repositories
+
+If you want to use an optional **Additional repositories** to configure your service, specify the **URI** and **Authentication** the same way as the **Default repository**. Be sure to include a **Name** for your pattern, and then select **Apply** to attach it to your instance.
+
+### Enter repository information into a YAML file
+
+If you've written a YAML file with your repository settings, you can import the file directly from your local machine to Azure Spring Apps. A simple YAML file for a private repository with basic authentication would look like this:
+
+```yaml
+spring:
+ cloud:
+ config:
+ server:
+ git:
+ uri: https://github.com/azure-spring-cloud-samples/config-server-repository.git
+ username: <username>
+ password: <password/token>
+
+```
+
+Select the **Import settings** button, and then select the YAML file from your project directory. Select **Import**, and then an `async` operation from your **Notifications** will pop up. After 1-2 minutes, it should report success.
+
+![The Config Server Notifications pane](media/spring-cloud-tutorial-config-server/local-yml-success.png)
+
+The information from your YAML file should be displayed in the Azure portal. Select **Apply** to finish.
+
+## Using Azure Repos for Azure Spring Apps Configuration
+
+Azure Spring Apps can access Git repositories that are public, secured by SSH, or secured using HTTP basic authentication. We'll use that last option, as it's easier to create and manage with Azure Repos.
+
+### Get repo url and credentials
+
+1. In the Azure Repos portal for your project, select the **Clone** button:
+
+ ![Picture of Clone Button](media/spring-cloud-tutorial-config-server/clone-button.png)
+
+1. Copy the clone URL from the textbox. This URL will typically be in the form:
+
+ ```text
+ https://<organization name>@dev.azure.com/<organization name>/<project name>/_git/<repository name>
+ ```
+
+ Remove everything after `https://` and before `dev.azure.com`, including the `@`. The resulting URL should be in the form:
+
+ ```text
+ https://dev.azure.com/<organization name>/<project name>/_git/<repository name>
+ ```
+
+ Save this URL for use in the next section.
+
+1. Select **Generate Git Credentials**. A username and password will appear and should be saved for use in the next section.
+
+### Configure Azure Spring Apps to access the Git repository
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. Go to your Azure Spring Apps **Overview** page.
+
+1. Select the service to configure.
+
+1. In the left pane of the service page, under **Settings**, select the **Config Server** tab. Configure the repository we previously created:
+
+ * Add the repository URL that you've saved from the previous section.
+ * Select **Authentication** and then select **HTTP Basic**.
+ * The __username__ is the username saved from the previous section.
+ * The __password__ is the password saved from the previous section.
+ * Select **Apply** and then wait for the operation to succeed.
+
+ ![Spring Cloud config server](media/spring-cloud-tutorial-config-server/config-server-azure-repos.png)
+
+## Delete your configuration
+
+You can select the **Reset** button that appears in the **Config Server** tab to erase your existing settings completely. Delete the config server settings if you want to connect your Config Server instance to another source, such as moving from GitHub to Azure DevOps.
+
+## Config Server refresh
+
+When properties are changed, services consuming those properties need to be notified before changes can be made. The default solution for Spring Cloud Config is to manually trigger the [refresh event](https://spring.io/guides/gs/centralized-configuration/), which may not be feasible if there are lots of app instances. Instead, you can automatically refresh values from the config server by letting the config client poll for changes based on a refresh internal.
+
+1. Register a scheduled task to refresh the context in a given interval.
+
+ ```java
+ @ConditionalOnBean({RefreshEndpoint.class})
+ @Configuration
+ @AutoConfigureAfter({RefreshAutoConfiguration.class, RefreshEndpointAutoConfiguration.class})
+ @EnableScheduling
+ public class ConfigClientAutoRefreshConfiguration implements SchedulingConfigurer {
+ @Value("${spring.cloud.config.refresh-interval:60}")
+ private long refreshInterval;
+ @Value("${spring.cloud.config.auto-refresh:false}")
+ private boolean autoRefresh;
+ private RefreshEndpoint refreshEndpoint;
+ public ConfigClientAutoRefreshConfiguration(RefreshEndpoint refreshEndpoint) {
+ this.refreshEndpoint = refreshEndpoint;
+ }
+ @Override
+ public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
+ if (autoRefresh) {
+ // set minimal refresh interval to 5 seconds
+ refreshInterval = Math.max(refreshInterval, 5);
+ scheduledTaskRegistrar.addFixedRateTask(() -> refreshEndpoint.refresh(), refreshInterval * 1000);
+ }
+ }
+ }
+ ```
+
+2. Enable auto-refresh and set the appropriate refresh interval in your application.yml. In this example, the client will poll for config changes every 60 seconds, which is the minimum value you can set for refresh interval.
+
+ By default auto-refresh is set to false and the refresh-interval is set to 60 seconds.
+
+ ```yaml
+ spring:
+ cloud:
+ config:
+ auto-refresh: true
+ refresh-interval: 60
+ management:
+ endpoints:
+ web:
+ exposure:
+ include:
+ - refresh
+ ```
+
+3. Add @RefreshScope in your code. In this example, the variable connectTimeout will be automatically refreshed every 60 seconds.
+
+ ```java
+ @RestController
+ @RefreshScope
+ public class HelloController {
+ @Value("${timeout:4000}")
+ private String connectTimeout;
+ }
+ ```
+
+> [!TIP]
+> For more information, see this [sample project](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/config-client-polling) for more information.
+
+## Next steps
+
+In this article, you learned how to enable and configure your Spring Cloud Config Server instance. To learn more about managing your application, see [Scale an application in Azure Spring Apps](./how-to-scale-manual.md).
spring-apps How To Configure Health Probes Graceful Termination https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-configure-health-probes-graceful-termination.md
+
+ Title: How to configure health probes and graceful termination period for apps hosted in Azure Spring Apps
+description: Shows you how to customize apps running in Azure Spring Apps with health probes and graceful termination period.
+++ Last updated : 07/02/2022++++
+# How to configure health probes and graceful termination periods for apps hosted in Azure Spring Apps
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to customize apps running in Azure Spring Apps with health probes and graceful termination periods.
+
+A probe is a diagnostic performed periodically by Azure Spring Apps on an app instance. To perform a diagnostic, Azure Spring Apps either executes an arbitrary command of your choice within the app instance, establishes a TCP socket connection, or makes an HTTP request.
+
+Azure Spring Apps uses liveness probes to determine when to restart an application. For example, liveness probes could catch a deadlock, where an application is running but unable to make progress. Restarting the application in such a state can help to make the application more available despite bugs.
+
+Azure Spring Apps uses readiness probes to determine when an app instance is ready to start accepting traffic. One use of this signal is to control which app instances are used as backends for the application. When an app instance isn't ready, it's removed from Kubernetes Service Discovery. For more information, see [Discover and register your Spring Boot applications](how-to-service-registration.md).
+
+Azure Spring Apps uses startup probes to determine when an application has started. If such a probe is configured, it disables liveness and readiness checks until it succeeds, making sure those probes don't interfere with the application startup. You can use this behavior to adopt liveness checks on slow starting applications, preventing them from getting killed before they're up and running.
+
+Azure Spring Apps offers default health probe rules for every application. This article shows you how to customize your application with three kinds of health probes.
+
+## Prerequisites
+
+- The [Azure Spring Apps extension](/cli/azure/azure-cli-extensions-overview) for the Azure CLI.
+
+## Configure health probes and graceful termination for applications
+
+The following sections describe the properties available for configuration and how to set the properties using the Azure CLI.
+
+### Graceful termination
+
+The following table describes the property available for configuring graceful termination.
+
+| Property name | Description |
+|-||
+| terminationGracePeriodSeconds | The grace period is the duration in seconds after the processes running in the app instance are sent a termination signal and before the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. The value must be a non-negative integer. The value zero indicates to stop immediately via the kill signal (with no opportunity to shut down). If this value is nil, the default grace period will be used instead. The default value is 90 seconds. |
+
+### Health probe properties
+
+The following table describes the properties available for configuring health probes.
+
+| Property name | Description |
+||-|
+| initialDelaySeconds | The number of seconds after the app instance has started before probes are initiated. The default value is 0 seconds. The minimum value is 0. |
+| periodSeconds | How often (in seconds) to perform the probe. The default value is 10 seconds. The minimum value is 1 second. |
+| timeoutSeconds | The number of seconds after which the probe times out. The default value is 1 second. The minimum value is 1 second. |
+| failureThreshold | The minimum number of consecutive failures for the probe to be considered failed after having succeeded. The default value is 3. The minimum value is 1. |
+| successThreshold | The minimum number of consecutive successes for the probe to be considered successful after having failed. The default value is 1. The value must be 1 for liveness and startup. The minimum value is 1. |
+
+### Probe action properties
+
+There are three different ways to check an app instance using a probe. Each probe must define exactly one of these three probe actions:
+
+- `HTTPGetAction`
+
+ Performs an HTTP GET request against the app instance on a specified path. The diagnostic is considered successful if the response has a status code greater than or equal to 200 and less than 400.
+
+ | Property name | Description |
+ ||--|
+ | scheme | The scheme to use for connecting to the host. Defaults to HTTP. |
+ | path | The path to access on the HTTP server of the app instance, such as `/healthz`. |
+
+- `ExecAction`
+
+ Executes a specified command inside the app instance. The diagnostic is considered successful if the command exits with a status code of 0.
+
+ | Property name | Description |
+ ||-|
+ | command | The command line to execute inside the app instance. The working directory for the command is root ('/') in the app instance's filesystem. The command is run using `exec`, not inside a shell, so traditional shell instructions won't work. To use a shell, you need to explicitly call out to that shell. An exit status of 0 is treated as live/healthy and non-zero is unhealthy. |
+
+- `TCPSocketAction`
+
+ Performs a TCP check against the app instance.
+
+ There are no available properties to be customized for now.
+
+### Customize your application by using the Azure CLI
+
+The following steps show you how to customize your application.
+
+1. Use the following command to create an application with liveness probe and readiness probe:
+
+ ```azurecli
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Cloud-instance-name> \
+ --name <application-name> \
+ --enable-liveness-probe true \
+ --liveness-probe-config <path-to-liveness-probe-json-file> \
+ --enable-readiness-probe true \
+ --readiness-probe-config <path-to-readiness-probe-json-file>
+ ```
+
+ The following example shows the contents of a sample JSON file passed to the `--liveness-probe-config` parameter in the create command:
+
+ ```json
+ {
+ "probe": {
+ "initialDelaySeconds": 30,
+ "periodSeconds": 10,
+ "timeoutSeconds": 1,
+ "failureThreshold": 30,
+ "successThreshold": 1,
+ "probeAction": {
+ "type": "TCPSocketAction",
+ }
+ }
+ }
+ ```
+
+ > [!NOTE]
+ > Azure Spring Apps also support two more kinds of probe actions, as shown in the following JSON file examples:
+ >
+ > ```json
+ > "probeAction": {
+ > "type": "HTTPGetAction",
+ > "scheme": "HTTP",
+ > "path": "/anyPath"
+ > }
+ > ```
+ >
+ > and
+ >
+ > ```json
+ > "probeAction": {
+ > "type": "ExecAction",
+ > "command": ["cat", "/tmp/healthy"]
+ > }
+ > ```
+
+1. Optionally, protect slow starting containers with a startup probe by using the following command:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Cloud-instance-name> \
+ --name <application-name> \
+ --enable-startup-probe true \
+ --startup-probe-config <path-to-startup-probe-json-file>
+ ```
+
+1. Optionally, disable any specific health probe using the following command:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Cloud-instance-name> \
+ --name <application-name> \
+ --enable-liveness-probe false
+ ```
+
+1. Optionally, set the termination grace period seconds using the following command:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Cloud-instance-name> \
+ --name <application-name> \
+ --grace-period <termination-grace-period-seconds>
+ ```
+
+## Use best practices
+
+Use the following best practices when adding your own persistent storage to Azure Spring Apps.
+
+- Use liveness and readiness probe together. The reason for this recommendation is that Azure Spring Apps provides two approaches for service discovery at the same time. When the readiness probe fails, the app instance will be removed only from Kubernetes Service Discovery. A properly configured liveness probe can remove the issued app instance from Eureka Service Discovery to avoid unexpected cases. For more information about Service Discovery, see [Discover and register your Spring Boot applications](how-to-service-registration.md).
+- When an app instance starts, the first check is done after the delay specified by `initialDelaySeconds`, and subsequent checks happen periodically, with the period length specified by `periodSeconds`. If the app has failed to respond to the requests for a number of times defined by `failureThreshold`, the app instance will be restarted. Be sure your application can start fast enough, or update these parameters, so the total timeout `initialDelaySeconds + periodSeconds * failureThreshold` is longer than the start time of your application.
+- For Spring Boot applications, Spring Boot shipped with the [Health Groups](https://docs.spring.io/spring-boot/docs/2.2.x/reference/html/production-ready-features.html#health-groups) support, allowing developers to select a subset of health indicators and group them under a single, correlated, health status. For more information, see [Liveness and Readiness Probes with Spring Boot](https://spring.io/blog/2020/03/25/liveness-and-readiness-probes-with-spring-boot) on the Spring Blog.
+
+ The following examples show Liveness and Readiness probes with Spring Boot:
+
+ - Liveness probe:
+
+ ```json
+ "probe": {
+ "initialDelaySeconds": 30,
+ "periodSeconds": 10,
+ "timeoutSeconds": 1,
+ "failureThreshold": 30,
+ "successThreshold": 1,
+ "probeAction": {
+ "type": "HTTPGetAction",
+ "scheme": "HTTP",
+ "path": "/actuator/health/liveness"
+ }
+ }
+ ```
+
+ - Readiness probe:
+
+ ```json
+ "probe": {
+ "initialDelaySeconds": 0,
+ "periodSeconds": 10,
+ "timeoutSeconds": 1,
+ "failureThreshold": 3,
+ "successThreshold": 1,
+ "probeAction": {
+ "type": "HTTPGetAction",
+ "scheme": "HTTP",
+ "path": "/actuator/health/readiness"
+ }
+ }
+ ```
+
+## FAQs
+
+The following list shows frequently asked questions (FAQ) about using health probes with Azure Spring Apps.
+
+- I received 400 response when I created applications with customized health probes. What does this mean?
+
+ *The error message will point out which probe is responsible for the provision failure. Be sure the health probe rules are correct and the timeout is long enough for the application to be in the running state.*
+
+- What's the default probe settings for existing application?
+
+ *The following example shows the default settings:*
+
+ ```json
+ "startupProbe": null,
+ "livenessProbe": {
+ "disableProbe": false,
+ "failureThreshold": 24,
+ "initialDelaySeconds": 60,
+ "periodSeconds": 10,
+ "probeAction": {
+ "type": "TCPSocketAction"
+ },
+ "successThreshold": 1,
+ "timeoutSeconds": 1
+ },
+ "readinessProbe": {
+ "disableProbe": false,
+ "failureThreshold": 3,
+ "initialDelaySeconds": 0,
+ "periodSeconds": 10,
+ "probeAction": {
+ "type": "TCPSocketAction"
+ },
+ "successThreshold": 1,
+ "timeoutSeconds": 1
+ }
+ ```
+
+## Next steps
+
+- [Scale an application in Azure Spring Apps](how-to-scale-manual.md).
spring-apps How To Configure Ingress https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-configure-ingress.md
+
+ Title: How to configure ingress for Azure Spring Apps
+description: Describes how to configure ingress for Azure Spring Apps.
++++ Last updated : 05/27/2022+++
+# Customize the ingress configuration in Azure Spring Apps
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to set and update the ingress configuration in Azure Spring Apps by using the Azure portal and Azure CLI.
+
+The Azure Spring Apps service uses an underlying ingress controller to handle application traffic management. Currently, the following ingress setting is supported for customization.
+
+| Name | Ingress setting | Default value | Valid range | Description |
+|-|--||-|-|
+| ingress-read-timeout | proxy-read-timeout | 300 | \[1,1800\] | The timeout in seconds for reading a response from a proxied server. |
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- [The Azure CLI](/cli/azure/install-azure-cli).
+- The Azure Spring Apps extension. Use the following command to remove previous versions and install the latest extension. If you previously installed the spring-cloud extension, uninstall it to avoid configuration and version mismatches.
+
+ ```azurecli
+ az extension remove --name spring
+ az extension add --name spring
+ az extension remove --name spring-cloud
+ ```
+
+## Set the ingress configuration when creating a service
+
+You can set the ingress configuration when creating a service by using the following CLI command.
+
+```azurecli
+az spring create \
+ --resource-group <resource-group-name> \
+ --name <service-name> \
+ --ingress-read-timeout 300
+```
+
+This command will create a service with ingress read timeout set to 300 seconds.
+
+## Update the ingress configuration for an existing service
+
+### [Azure portal](#tab/azure-portal)
+
+To update the ingress configuration for an existing service, use the following steps:
+
+1. Sign in to the portal using an account associated with the Azure subscription that contains the Azure Spring Apps instance.
+2. Navigate to the **Networking** pane, then select the **Ingress configuration** tab.
+3. Update the ingress configuration, and then select **Save**.
+
+ :::image type="content" source="media/how-to-configure-ingress/config-ingress-read-timeout.png" lightbox="media/how-to-configure-ingress/config-ingress-read-timeout.png" alt-text="Screenshot of Azure portal example for config ingress read timeout.":::
+
+### [Azure CLI](#tab/azure-cli)
+
+To update the ingress configuration for an existing service, use the following command:
+
+```azurecli
+az spring update \
+ --resource-group <resource-group-name> \
+ --name <service-name> \
+ --ingress-read-timeout 600
+```
+
+This command will update the ingress read timeout to 600 seconds.
+
+## Next steps
+
+- [Learn more about ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers)
+- [Learn more about NGINX ingress controller](https://kubernetes.github.io/ingress-nginx)
spring-apps How To Configure Palo Alto https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-configure-palo-alto.md
+
+ Title: How to configure Palo Alto for Azure Spring Apps
+description: How to configure Palo Alto for Azure Spring Apps
++++ Last updated : 09/17/2021+++
+# How to configure Palo Alto for Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes how to use Azure Spring Apps with a Palo Alto firewall.
+
+For example, the [Azure Spring Apps reference architecture](./reference-architecture.md) includes an Azure Firewall to secure your applications. However, if your current deployments include a Palo Alto firewall, you can omit the Azure Firewall from the Azure Spring Apps deployment and use Palo Alto instead, as described in this article.
+
+You should keep configuration information, such as rules and address wildcards, in CSV files in a Git repository. This article shows you how to use automation to apply these files to Palo Alto. To understand the configuration to be applied to Palo Alto, see [Customer responsibilities for running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md).
+
+> [!Note]
+> In describing the use of REST APIs, this article uses the PowerShell variable syntax to indicate names and values that are left to your discretion. Be sure to use the same values in all the steps.
+>
+> After you've configured the TLS/SSL certificate in Palo Alto, remove the `-SkipCertificateCheck` argument from all Palo Alto REST API calls in the examples below.
+>
+> You should not use this article as a reference for Palo Alto REST APIs. All examples are for demonstration purposes only. For authoritative API details, see [PAN-OS REST API](https://docs.paloaltonetworks.com/pan-os/9-1/pan-os-panorama-api/get-started-with-the-pan-os-rest-api/pan-os-rest-api.html) in the Palo Alto documentation.
+
+## Prerequisites
+
+* An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* A Palo Alto deployment. If you don't have a deployment, you can provision [Palo Alto from Azure Marketplace](https://portal.azure.com/#create/paloaltonetworks.vmseries-ngfwbundle2).
+* [PowerShell](/powershell/scripting/install/installing-powershell)
+* [Azure CLI](/cli/azure/install-azure-cli)
+
+## Configure Palo Alto
+
+First, configure the Palo Alto VM-Series Firewall. For detailed instructions, see [Deploy the VM-Series Firewall from the Azure Marketplace (Solution Template)](https://docs.paloaltonetworks.com/vm-series/9-1/vm-series-deployment/set-up-the-vm-series-firewall-on-azure/deploy-the-vm-series-firewall-on-azure-solution-template.html). These instructions will help you provision a VM-Series Firewall and configure both the `Trust` and `UnTrust` subnets and the associated network interface cards. To stay consistent, you should create this firewall in the address space of the `Hub` virtual network in the reference architecture.
+
+The [Reference Architecture Guide for Azure](https://www.paloaltonetworks.com/resources/guides/azure-architecture-guide) explores several technical design models for deploying the Firewall on Azure.
+
+The rest of this article assumes you have the following two pre-configured network zones:
+
+* `Trust`, containing the interface connected to a virtual network peered with the Azure Spring Apps virtual network.
+* `UnTrust`, containing the interface to the public internet created earlier in the VM-Series deployment guide.
+
+## Prepare CSV files
+
+Next, create three CSV files.
+
+Name the first file *AzureSpringAppsServices.csv*. This file should contain ingress ports for Azure Spring Apps. The values in the following example are for demonstration purposes only. For all of the required values, see the [Azure Spring Apps network requirements](./vnet-customer-responsibilities.md#azure-spring-apps-network-requirements) section of [Customer responsibilities for running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md).
+
+```CSV
+name,protocol,port,tag
+ASC_1194,udp,1194,AzureSpringApps
+ASC_443,tcp,443,AzureSpringApps
+ASC_9000,tcp,9000,AzureSpringApps
+ASC_445,tcp,445,AzureSpringApps
+ASC_123,udp,123,AzureSpringApps
+```
+
+Name the second file *AzureSpringAppsUrlCategories.csv*. This file should contain the addresses (with wildcards) that should be available for egress from Azure Spring Apps. The values in the following example are for demonstration purposes only. For up-to-date values, see [Azure Spring Apps FQDN requirements/application rules](./vnet-customer-responsibilities.md#azure-spring-apps-fqdn-requirementsapplication-rules).
+
+```CSV
+name,description
+*.azmk8s.io,
+mcr.microsoft.com,
+*.cdn.mscr.io,
+*.data.mcr.microsoft.com,
+management.azure.com,
+*.microsoftonline.com,
+*.microsoft.com,
+packages.microsoft.com,
+acs-mirror.azureedge.net,
+mscrl.microsoft.com,
+crl.microsoft.com,
+crl3.digicert.com
+```
+
+Name the third file *AzureMonitorAddresses.csv*. This file should contain all addresses and IP ranges to be made available for metrics and monitoring via Azure Monitor, if you're using Azure monitor. The values in the following example are for demonstration purposes only. For up-to-date values, see [IP addresses used by Azure Monitor](../azure-monitor/app/ip-addresses.md).
+
+```CSV
+name,type,address,tag
+40.114.241.141,ip-netmask,40.114.241.141/32,AzureMonitor
+104.45.136.42,ip-netmask,104.45.136.42/32,AzureMonitor
+40.84.189.107,ip-netmask,40.84.189.107/32,AzureMonitor
+168.63.242.221,ip-netmask,168.63.242.221/32,AzureMonitor
+52.167.221.184,ip-netmask,52.167.221.184/32,AzureMonitor
+live.applicationinsights.azure.com,fqdn,live.applicationinsights.azure.com,AzureMonitor
+rt.applicationinsights.microsoft.com,fqdn,rt.applicationinsights.microsoft.com,AzureMonitor
+rt.services.visualstudio.com,fqdn,rt.services.visualstudio.com,AzureMonitor
+
+```
+
+## Authenticate into Palo Alto
+
+Next you'll need to authenticate into Palo Alto and obtain an API key. For more information, see [Get Your API Key](https://docs.paloaltonetworks.com/pan-os/9-1/pan-os-panorama-api/get-started-with-the-pan-os-xml-api/get-your-api-key.html) in the Palo Alto documentation.
+
+The following example uses PowerShell to authenticate and generate request headers that will be used later in this article:
+
+```powershell
+$username=<username for PaloAlto>
+$password=<password for PaloAlto>
+$authResponse = irm "https://${PaloAltoIpAddress}/api/?type=keygen&user=${username}&password=${password}" -SkipCertificateCheck
+$paloAltoHeaders = @{'X-PAN-KEY' = $authResponse.response.result.key; 'Content-Type' = 'application/json' }
+```
+
+## Delete existing service group
+
+If you've made prior configuration attempts, you should reset these configurations and delete any security rule and service group.
+
+Delete the security rule using the [Security Rule REST API](https://docs.paloaltonetworks.com/pan-os/9-1/pan-os-panorama-api/get-started-with-the-pan-os-rest-api/create-security-policy-rule-rest-api.html), as shown in the following example:
+
+```powershell
+$url = "https://${PaloAltoIpAddress}/restapi/v9.1/Policies/SecurityRules?location=vsys&vsys=vsys1&name=${paloAltoSecurityPolicyName}"
+Invoke-RestMethod -Method Delete -Uri $url -Headers $paloAltoHeaders -SkipCertificateCheck
+```
+
+Delete the service group as shown in the following example:
+
+```powershell
+$url = "https://${PaloAltoIpAddress}/restapi/v9.1/Objects/ServiceGroups?location=vsys&vsys=vsys1&name=${paloAltoServiceGroupName}"
+Invoke-RestMethod -Method Delete -Uri $url -Headers $paloAltoHeaders -SkipCertificateCheck
+```
+
+Delete each Palo Alto service (as defined in *AzureSpringAppsServices.csv*) as shown in the following example:
+
+```powershell
+Get-Content .\AzureSpringAppsServices.csv | ConvertFrom-Csv | select name | ForEach-Object {
+ $url = "https://${PaloAltoIpAddress}/restapi/v9.1/Objects/Services?location=vsys&vsys=vsys1&name=${_}"
+ Invoke-RestMethod -Method Delete -Uri $url -Headers $paloAltoHeaders -SkipCertificateCheck
+}
+```
+
+## Create a service and service group
+
+To automate the creation of services based on the *AzureSpringAppsServices.csv* file you created earlier, use the following example.
+
+```powershell
+# Define a function to create and submit a Palo Alto service creation request
+function New-PaloAltoService {
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
+ [PSCustomObject]
+ $ServiceObject
+ )
+ PROCESS {
+ $requestBody = @{
+ 'entry' = @{
+ '@name' = $ServiceObject.name
+ 'protocol' = @{
+ $ServiceObject.protocol = @{
+ 'port' = $ServiceObject.port
+ 'override' = @{
+ 'no' = @{}
+ }
+
+ }
+ }
+ 'tag' = @{
+ 'member' = @($ServiceObject.tag)
+ }
+ }
+ }
+
+ # Some rules in the CSV may need to conain source ports or descriptions. If these are present, populate them in the request
+ if ($ServiceObject.description) {
+ $requestBody.entry.description = $ServiceObject.description
+ }
+ if ($ServiceObject.'source-port') {
+ $requestBody.entry.protocol."$($ServiceObject.protocol)".'source-port' = $ServiceObject.'source-port'
+ }
+
+ # Send the request
+ $name = $requestBody.entry.'@name'
+ $url = "https://${PaloAltoIpAddress}/restapi/v9.1/Objects/Services?location=vsys&vsys=vsys1&name=${name}"
+ Invoke-RestMethod -Method Post -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders -Body (ConvertTo-Json -WarningAction Ignore $requestBody -Depth 9) -Verbose
+ }
+}
+
+# Now invoke that function for every row in AzureSpringAppsServices.csv
+Get-Content ./AzureSpringAppsServices.csv | ConvertFrom-Csv | New-PaloAltoService
+```
+
+Next, create a Service Group for these services, as shown in the following example:
+
+```powershell
+# Create a function to consume service definitions and submit a service group creation request
+function New-PaloAltoServiceGroup {
+ [CmdletBinding()]
+ param (
+ [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
+ [PSCustomObject[]]
+ $RuleData,
+
+ [Parameter(Mandatory = $true)]
+ [string]
+ $ServiceGroupName
+ )
+ begin {
+ [array] $names = @()
+ }
+
+ process {
+ $names += $RuleData.name
+ }
+
+ end {
+ $requestBody = @{ 'entry' = [ordered] @{
+ '@name' = $ServiceGroupName
+ 'members' = @{ 'member' = $names }
+ 'tag' = @{ 'member' = 'AzureSpringApps' }
+ }
+ }
+
+ $url = "https://${PaloAltoIpAddress}/restapi/v9.1/Objects/ServiceGroups?location=vsys&vsys=vsys1&name=${ServiceGroupName}"
+
+ Invoke-RestMethod -Method Post -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders -Body (ConvertTo-Json $requestBody) -Verbose
+ }
+}
+
+# Run that function for all services in AzureSpringAppsServices.csv.
+Get-Content ./AzureSpringAppsServices.csv | ConvertFrom-Csv | New-PaloAltoServiceGroup -ServiceGroupName 'AzureSpringApps_SG'
+```
+
+## Create custom URL categories
+
+Next, define custom URL categories for the service group to enable egress from Azure Spring Apps, as shown in the following example.
+
+```powershell
+# Read Service entries from CSV to enter into Palo Alto
+$csvImport = Get-Content ${PSScriptRoot}/AzureSpringAppsUrls.csv | ConvertFrom-Csv
+
+# Convert name column of CSV to add to the Custom URL Group in Palo Alto
+$requestBody = @{ 'entry' = [ordered] @{
+ '@name' = 'AzureSpringApps_SG'
+ 'list' = @{ 'member' = $csvImport.name }
+ 'type' = 'URL List'
+ }
+} | ConvertTo-Json -Depth 9
+
+$url = "https://${PaloAltoIpAddress}/restapi/v9.1/Objects/CustomURLCategories?location=vsys&vsys=vsys1&name=AzureSpringApps_SG"
+
+try {
+ $existingObject = Invoke-RestMethod -Method Get -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders
+ Invoke-RestMethod -Method Delete -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders
+}
+catch {
+}
+
+Invoke-RestMethod -Method Post -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders -Body $requestBody -Verbose
+```
+
+## Create a security rule
+
+Next, create a JSON file to contain a security rule. Name the file *SecurityRule.json* and add the following content. The names of the two zones `Trust` and `UnTrust` match the zone names described earlier in the [Configure Palo Alto](#configure-palo-alto) section. The `service/member` entry contains the name of the service group created in the previous steps.
+
+```json
+{
+ "entry": [
+ {
+ "@name": "AzureSpringAppsRule",
+ "@location": "vsys",
+ "@vsys": "vsys1",
+ "to": {
+ "member": [
+ "UnTrust"
+ ]
+ },
+ "from": {
+ "member": [
+ "Trust"
+ ]
+ },
+ "source-user": {
+ "member": [
+ "any"
+ ]
+ },
+ "application": {
+ "member": [
+ "any"
+ ]
+ },
+ "service": {
+ "member": [
+ "AzureSpringApps_SG"
+ ]
+ },
+ "hip-profiles": {
+ "member": [
+ "any"
+ ]
+ },
+ "action": "allow",
+ "category": {
+ "member": [
+ "any"
+ ]
+ },
+ "source": {
+ "member": [
+ "any"
+ ]
+ },
+ "destination": {
+ "member": [
+ "any"
+ ]
+ }
+ }
+ ]
+}
+```
+
+Now, apply this rule to Palo Alto, as shown in the following example.
+
+```powershell
+$url = "https://${PaloAltoIpAddress}/restapi/v9.1/Policies/SecurityRules?location=vsys&vsys=vsys1&name=AzureSpringAppsRule"
+
+# Delete the rule if it already exists
+try {
+ $getResult = Invoke-RestMethod -Headers $paloAltoHeaders -Method Get -SkipCertificateCheck -Uri $url -Verbose
+ if ($getResult.'@status' -eq 'success') {
+ Invoke-RestMethod -Method Delete -Headers $paloAltoHeaders -SkipCertificateCheck -Uri $url
+ }
+}
+catch {}
+
+# Create the rule from the JSON file
+Invoke-WebRequest -Uri $url -Method Post -Headers $paloAltoHeaders -Body (Get-Content SecurityRule.json) -SkipCertificateCheck
+```
+
+## Create Azure Monitor addresses
+
+Next, use the *AzureMonitorAddresses.csv* file to define Address objects in Palo Alto. The following example code shows you how to automate this task.
+
+```powershell
+Get-Content ./AzureMonitorAddresses.csv | ConvertFrom-Csv | ForEach-Object {
+ $requestBody = @{ 'entry' = [ordered]@{
+ '@name' = $_.name
+ $_.type = $_.address
+ 'tag' = @{ 'member' = @($_.tag) }
+ }
+ }
+
+ $name = $requestBody.entry.'@name'
+ $url = "https://${PaloAltoIpAddress}/restapi/v9.1/Objects/Addresses?location=vsys&vsys=vsys1&name=${name}"
+
+ # Delete the address if it already exists
+ try {
+ Invoke-RestMethod -Method Delete -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders
+ }
+ catch {
+ }
+
+ # Create the address
+ Invoke-RestMethod -Method Post -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders -Body (ConvertTo-Json -WarningAction Ignore $requestBody -Depth 3) -Verbose
+}
+```
+
+## Commit changes to Palo Alto
+
+You must commit some of the changes above so they'll become active. You can do this with the following REST API call.
+
+```powershell
+$url = "https://${PaloAltoIpAddress}/api/?type=commit&cmd=<commit></commit>"
+Invoke-RestMethod -Method Get -Uri $url -SkipCertificateCheck -Headers $paloAltoHeaders
+```
+
+## Configure the Security Rules for Azure Spring Apps subnets
+
+Next, add network security rules to enable traffic from Palo Alto to access Azure Spring Apps. The following examples reference the spoke Network Security Groups (NSGs) created by the Reference Architecture: `nsg-spokeapp` and `nsg-spokeruntime`.
+
+Run the following Azure CLI commands in a PowerShell window to create the necessary network security rule for each of these NSGs, where `$PaloAltoAddressPrefix` is the Classless Inter-Domain Routing (CIDR) address of Palo Alto's private IPs.
+
+```azurecli
+az network nsg rule create `
+ --resource-group $ResourceGroupName `
+ --name 'allow-palo-alto' `
+ --nsg-name 'nsg-spokeapp' `
+ --access Allow `
+ --source-address-prefixes $PaloAltoAddressPrefix `
+ --priority 1000
+az network nsg rule create `
+ --resource-group $ResourceGroupName `
+ --name 'allow-palo-alto' `
+ --nsg-name 'nsg-spokeruntime' `
+ --access Allow `
+ --source-address-prefixes $PaloAltoAddressPrefix `
+ --priority 1000
+```
+
+## Configure the next hop
+
+After you've configured Palo Alto, configure Azure Spring Apps to have Palo Alto as its next hop for outbound internet access. You can use the following Azure CLI commands in a PowerShell window for this configuration. Be sure to provide values for the following variables:
+
+* `$AppResourceGroupName`: The name of the resource group containing your Azure Spring Apps.
+* `$AzureSpringAppsServiceSubnetRouteTableName`: The name of the Azure Spring Apps service/runtime subnet route table. In the reference architecture, this is set to `rt-spokeruntime`.
+* `$AzureSpringAppsAppSubnetRouteTableName`: The name of the Azure Spring Apps app subnet route table. In the reference architecture, this is set to `rt-spokeapp`.
+
+```azurecli
+az network route-table route create `
+ --resource-group ${AppResourceGroupName} `
+ --name default `
+ --route-table-name ${AzureSpringAppsServiceSubnetRouteTableName} `
+ --address-prefix 0.0.0.0/0 `
+ --next-hop-type VirtualAppliance `
+ --next-hop-ip-address ${PaloAltoIpAddress} `
+ --verbose
+
+az network route-table route create `
+ --resource-group ${AppResourceGroupName} `
+ --name default `
+ --route-table-name ${AzureSpringAppsAppSubnetRouteTableName} `
+ --address-prefix 0.0.0.0/0 `
+ --next-hop-type VirtualAppliance `
+ --next-hop-ip-address ${PaloAltoIpAddress} `
+ --verbose
+```
+
+Your configuration is now complete.
+
+## Next steps
+
+* [Stream Azure Spring Apps app logs in real-time](./how-to-log-streaming.md)
+* [Application Insights Java In-Process Agent in Azure Spring Apps](./how-to-application-insights.md)
+* [Automate application deployments to Azure Spring Apps](./how-to-cicd.md)
spring-apps How To Custom Persistent Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-custom-persistent-storage.md
+
+ Title: How to enable your own persistent storage in Azure Spring Apps | Microsoft Docs
+description: How to bring your own storage as persistent storages in Azure Spring Apps
+++ Last updated : 2/18/2022++++
+# How to enable your own persistent storage in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to enable your own persistent storage in Azure Spring Apps.
+
+When you use the built-in persistent storage in Azure Spring Apps, artifacts generated by your application are uploaded into Azure Storage Accounts. Microsoft controls the encryption-at-rest and lifetime management policies for those artifacts.
+
+With Bring Your Own Storage, these artifacts are uploaded into a storage account that you control. That means you control the encryption-at-rest policy, the lifetime management policy and network access. You will, however, be responsible for the costs associated with that storage account.
+
+## Prerequisites
+
+* An existing Azure Storage Account and a pre-created Azure File Share. If you need to create a storage account and file share in Azure, see [Create an Azure file share](../storage/files/storage-how-to-create-file-share.md).
+* The [Azure Spring Apps extension](/cli/azure/azure-cli-extensions-overview) for the Azure CLI
+
+> [!IMPORTANT]
+> If you deployed your Azure Spring Apps in your own virtual network and you want the storage account to be accessed only from the virtual network, consult the following guidance:
+> - [Use private endpoints for Azure Storage](../storage/common/storage-private-endpoints.md)
+> - [Configure Azure Storage firewalls and virtual networks](../storage/common/storage-network-security.md), especially the [Grant access from a virtual network using service endpoint](../storage/common/storage-network-security.md#grant-access-from-a-virtual-network) section
+
+## Mount your own extra persistent storage to applications
+
+> [!NOTE]
+> Updating persistent storage will result in the restart of applications.
+
+### [Portal](#tab/Azure-portal)
+
+Use the following steps to bind an Azure Storage account as a storage resource in your Azure Spring Apps and create an app with your own persistent storage.
+
+1. Go to the service **Overview** page, then select **Storage** in the left-hand navigation pane.
+
+1. On the **Storage** page, select **Add storage**, add the values in the following table, and then select **Apply**.
+
+ | Setting | Value |
+ |--|--|
+ | Storage name | The name of the storage resource, which is a service-level resource in Azure Spring Apps. |
+ | Account name | The name of the storage account. |
+ | Account key | The storage account key. |
+
+ :::image type="content" source="media/how-to-custom-persistent-storage/add-storage-resource.png" alt-text="Screenshot of Azure portal showing the Storage page and the 'Add storage' pane." lightbox="media/how-to-custom-persistent-storage/add-storage-resource.png":::
+
+1. Go to the **Apps** page, then select an application to mount the persistent storage.
+
+ :::image type="content" source="media/how-to-custom-persistent-storage/select-app-mount-persistent-storage.png" alt-text="Screenshot of Azure portal Apps page." lightbox="media/how-to-custom-persistent-storage/select-app-mount-persistent-storage.png":::
+
+1. Select **Configuration**, then select **Persistent Storage**.
+
+1. Select **Add persistent storage**, add the values in the following table, and then select **Apply**.
+
+ | Setting | Value |
+ |-|-|
+ | Storage name | The name of the storage resource that you entered earlier. |
+ | Persistent storage type | **AzureFileVolume** |
+ | Share name | The name of the Azure File share in the Azure Storage account. |
+ | Mount path | A unique mount path. |
+ | Mount options | Optional |
+ | Read only | Optional |
+
+ :::image type="content" source="media/how-to-custom-persistent-storage/add-persistent-storage.png" alt-text="Screenshot of Azure portal 'Add persistent storage' form.":::
+
+1. Select **Save** to apply all the configuration changes.
+
+ :::image type="content" source="media/how-to-custom-persistent-storage/save-persistent-storage-changes.png" alt-text="Screenshot of Azure portal Persistent Storage section of the Configuration page." lightbox="media/how-to-custom-persistent-storage/save-persistent-storage-changes.png":::
+
+### [CLI](#tab/Azure-CLI)
+
+You can enable your own storage with the Azure CLI by using the following steps.
+
+1. Use the following command to bind your Azure Storage account as a storage resource in your Azure Spring Apps instance:
+
+ ```azurecli
+ az spring storage add \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --name <storage-resource-name> \
+ --storage-type StorageAccount \
+ --account-name <account-name> \
+ --account-key <account-key>
+ ```
+
+1. Use the following command to create an app with your own persistent storage.
+
+ ```azurecli
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --name <app-name> \
+ --persistent-storage <path-to-JSON-file>
+ ```
+
+ Here's a sample of the JSON file that is passed to the `--persistent-storage` parameter in the create command:
+
+ ```json
+ {
+ "customPersistentDisks": [
+ {
+ "storageName": "<storage-resource-name>",
+ "customPersistentDiskProperties": {
+ "type": "AzureFileVolume",
+ "shareName": "<Azure-file-share-name>",
+ "mountPath": "<unique-mount-path>",
+ "mountOptions": [
+ "uid=0",
+ "gid=0"
+ ],
+ "readOnly": false
+ }
+ },
+ {
+ "storageName": "<storage-resource-name>",
+ "customPersistentDiskProperties": {
+ "type": "AzureFileVolume",
+ "shareName": "<Azure-file-share-name>",
+ "mountPath": "<unique-mount-path>",
+ "readOnly": true
+ }
+ }
+ ]
+ }
+ ```
+
+1. Optionally, add extra persistent storage to an existing app using the following command:
+
+ ```azurecli
+ az spring app append-persistent-storage \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --name <app-name> \
+ --persistent-storage-type AzureFileVolume \
+ --share-name <Azure-file-share-name> \
+ --mount-path <unique-mount-path> \
+ --storage-name <storage-resource-name>
+ ```
+
+1. Optionally, list all existing persistent storage of a specific storage resource using the following command:
+
+ ```azurecli
+ az spring storage list-persistent-storage \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --name <storage-resource-name>
+ ```
+++
+## Use best practices
+
+Use the following best practices when adding your own persistent storage to Azure Spring Apps.
+
+* To avoid potential latency issues, place the Azure Spring Apps instance and the Azure Storage Account in the same Azure region.
+
+* In the Azure Storage Account, avoid regenerating the account key that's being used. The storage account contains two different keys. Use a step-by-step approach to ensure that the persistent storage remains available to the applications during key regeneration.
+
+ For example, assuming that you used key1 to bind a storage account to Azure Spring Apps, you would use the following steps:
+
+ 1. Regenerate key2.
+ 1. Update the account key of the storage resource to use the regenerated key2.
+ 1. Restart the applications that mount the persistent storage from this storage resource. (You can use `az spring storage list-persistent-storage` to list all related applications.)
+ 1. Regenerate key1.
+
+* If you delete an Azure Storage Account or Azure File Share, remove the corresponding storage resource or persistent storage in the applications to avoid possible errors.
+
+## FAQs
+
+The following are frequently asked questions (FAQ) about using your own persistent storage with Azure Spring Apps.
+
+* If I have built-in persistent storage enabled, and then I enabled my own storage as extra persistent storage, will my data be migrated into my Storage Account?
+
+ *No. But we're going to provide a document to help you do the migration yourself soon.*
+
+* What are the reserved mount paths?
+
+ *These mount paths are reserved by the Azure Spring Apps service:*
+
+ * */tmp*
+ * */persistent*
+ * */secrets*
+ * */app-insights/agents*
+ * */etc/azure-spring-cloud/certs*
+ * */app-insights/agents/settings*
+ * */app-lifecycle/settings*
+
+* What are the available mount options?
+
+ *We currently support the following mount options:*
+
+ * `uid`
+ * `gid`
+ * `file_mode`
+ * `dir_mode`
+
+ *The `mountOptions` property is optional. The default values for above mount options are: ["uid=0", "gid=0", "file_mode=0777", "dir_mode=0777"]*
+
+* I'm using the service endpoint to configure the storage account to allow access only from my own virtual network. Why did I receive *Permission Denied* while trying to mount custom persistent storage to my applications?
+
+ *A service endpoint provides network access on a subnet level only. Be sure you've added both subnets used by the Azure Spring Apps instance to the scope of the service endpoint.*
+
+## Next steps
+
+* [How to use Logback to write logs to custom persistent storage](how-to-write-log-to-custom-persistent-storage.md).
+* [Scale an application in Azure Spring Apps](how-to-scale-manual.md).
spring-apps How To Deploy In Azure Virtual Network https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-deploy-in-azure-virtual-network.md
+
+ Title: "Deploy Azure Spring Apps in a virtual network"
+description: Deploy Azure Spring Apps in a virtual network (VNet injection).
++++ Last updated : 07/21/2020+++
+# Deploy Azure Spring Apps in a virtual network
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This tutorial explains how to deploy an Azure Spring Apps instance in your virtual network. This deployment is sometimes called VNet injection.
+
+The deployment enables:
+
+* Isolation of Azure Spring Apps apps and service runtime from the internet on your corporate network.
+* Azure Spring Apps interaction with systems in on-premises data centers or Azure services in other virtual networks.
+* Empowerment of customers to control inbound and outbound network communications for Azure Spring Apps.
+
+The following video describes how to secure Spring Boot applications using managed virtual networks.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/LbHD0jd8DTQ?list=PLPeZXlCR7ew8LlhnSH63KcM0XhMKxT1k_]
+
+> [!Note]
+> You can select your Azure virtual network only when you create a new Azure Spring Apps service instance. You cannot change to use another virtual network after Azure Spring Apps has been created.
+
+## Prerequisites
+
+Register the Azure Spring Apps resource provider **Microsoft.AppPlatform** and **Microsoft.ContainerService** according to the instructions in [Register resource provider on Azure portal](../azure-resource-manager/management/resource-providers-and-types.md#azure-portal) or by running the following Azure CLI command:
+
+```azurecli
+az provider register --namespace Microsoft.AppPlatform
+az provider register --namespace Microsoft.ContainerService
+```
+
+## Virtual network requirements
+
+The virtual network to which you deploy your Azure Spring Apps instance must meet the following requirements:
+
+* **Location**: The virtual network must reside in the same location as the Azure Spring Apps instance.
+* **Subscription**: The virtual network must be in the same subscription as the Azure Spring Apps instance.
+* **Subnets**: The virtual network must include two subnets dedicated to an Azure Spring Apps instance:
+ * One for the service runtime.
+ * One for your Spring applications.
+ * There's a one-to-one relationship between these subnets and an Azure Spring Apps instance. Use a new subnet for each service instance you deploy. Each subnet can only include a single service instance.
+* **Address space**: CIDR blocks up to */28* for both the service runtime subnet and the Spring applications subnet.
+* **Route table**: By default the subnets do not need existing route tables associated. You can [bring your own route table](#bring-your-own-route-table).
+
+The following procedures describe setup of the virtual network to contain the instance of Azure Spring Apps.
+
+## Create a virtual network
+
+#### [Portal](#tab/azure-portal)
+
+If you already have a virtual network to host an Azure Spring Apps instance, skip steps 1, 2, and 3. You can start from step 4 to prepare subnets for the virtual network.
+
+1. On the Azure portal menu, select **Create a resource**. From Azure Marketplace, select **Networking** > **Virtual network**.
+
+1. In the **Create virtual network** dialog box, enter or select the following information:
+
+ | Setting | Value |
+ |--|--|
+ | Subscription | Select your subscription. |
+ | Resource group | Select your resource group, or create a new one. |
+ | Name | Enter **azure-spring-apps-vnet**. |
+ | Location | Select **East US**. |
+
+1. Select **Next: IP Addresses**.
+
+1. For the IPv4 address space, enter **10.1.0.0/16**.
+
+1. Select **Add subnet**. Then enter **service-runtime-subnet** for **Subnet name** and enter **10.1.0.0/24** for **Subnet address range**. Then select **Add**.
+
+1. Select **Add subnet** again, and then enter **Subnet name** and **Subnet address range**. For example, enter **apps-subnet** and **10.1.1.0/24**. Then select **Add**.
+
+1. Select **Review + create**. Leave the rest as defaults, and select **Create**.
+
+#### [CLI](#tab/azure-CLI)
+
+If you already have a virtual network to host an Azure Spring Apps instance, skip steps 1, 2, 3 and 4. You can start from step 5 to prepare subnets for the virtual network.
+
+1. Define variables for your subscription, resource group, and Azure Spring Apps instance. Customize the values based on your real environment.
+
+ ```azurecli
+ SUBSCRIPTION='subscription-id'
+ RESOURCE_GROUP='my-resource-group'
+ LOCATION='eastus'
+ SPRING_CLOUD_NAME='spring-cloud-name'
+ VIRTUAL_NETWORK_NAME='azure-spring-apps-vnet'
+ ```
+
+1. Sign in to the Azure CLI and choose your active subscription.
+
+ ```azurecli
+ az login
+ az account set --subscription ${SUBSCRIPTION}
+ ```
+
+1. Create a resource group for your resources.
+
+ ```azurecli
+ az group create --name $RESOURCE_GROUP --location $LOCATION
+ ```
+
+1. Create the virtual network.
+
+ ```azurecli
+ az network vnet create --resource-group $RESOURCE_GROUP \
+ --name $VIRTUAL_NETWORK_NAME \
+ --location $LOCATION \
+ --address-prefix 10.1.0.0/16
+ ```
+
+1. Create 2 subnets in this virtual network.
+
+ ```azurecli
+ az network vnet subnet create --resource-group $RESOURCE_GROUP \
+ --vnet-name $VIRTUAL_NETWORK_NAME \
+ --address-prefixes 10.1.0.0/24 \
+ --name service-runtime-subnet
+ az network vnet subnet create --resource-group $RESOURCE_GROUP \
+ --vnet-name $VIRTUAL_NETWORK_NAME \
+ --address-prefixes 10.1.1.0/24 \
+ --name apps-subnet
+ ```
+++
+## Grant service permission to the virtual network
+
+Azure Spring Apps requires **Owner** permission to your virtual network, in order to grant a dedicated and dynamic service principal on the virtual network for further deployment and maintenance.
+
+#### [Portal](#tab/azure-portal)
+
+Select the virtual network **azure-spring-apps-vnet** you previously created.
+
+1. Select **Access control (IAM)**, and then select **Add** > **Add role assignment**.
+
+ ![Screenshot that shows the Access control screen.](./media/spring-cloud-v-net-injection/access-control.png)
+
+1. Assign the *Owner* role to the **Azure Spring Apps Resource Provider**. For detailed steps, see [Assign Azure roles using the Azure portal](../role-based-access-control/role-assignments-portal.md#step-2-open-the-add-role-assignment-page).
+
+ ![Screenshot that shows owner assignment to resource provider.](./media/spring-cloud-v-net-injection/assign-owner-resource-provider.png)
+
+ You can also do this step by running the following Azure CLI command:
+
+ ```azurecli
+ VIRTUAL_NETWORK_RESOURCE_ID=`az network vnet show \
+ --name ${NAME_OF_VIRTUAL_NETWORK} \
+ --resource-group ${RESOURCE_GROUP_OF_VIRTUAL_NETWORK} \
+ --query "id" \
+ --output tsv`
+
+ az role assignment create \
+ --role "Owner" \
+ --scope ${VIRTUAL_NETWORK_RESOURCE_ID} \
+ --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2
+ ```
+
+#### [CLI](#tab/azure-CLI)
+
+```azurecli
+VIRTUAL_NETWORK_RESOURCE_ID=`az network vnet show \
+ --name $VIRTUAL_NETWORK_NAME \
+ --resource-group $RESOURCE_GROUP \
+ --query "id" \
+ --output tsv`
+
+az role assignment create \
+ --role "Owner" \
+ --scope ${VIRTUAL_NETWORK_RESOURCE_ID} \
+ --assignee e8de9221-a19c-4c81-b814-fd37c6caf9d2
+```
+++
+## Deploy an Azure Spring Apps instance
+
+#### [Portal](#tab/azure-portal)
+
+To deploy an Azure Spring Apps instance in the virtual network:
+
+1. Open the [Azure portal](https://portal.azure.com).
+
+1. In the top search box, search for **Azure Spring Apps**. Select **Azure Spring Apps** from the result.
+
+1. On the **Azure Spring Apps** page, select **Add**.
+
+1. Fill out the form on the Azure Spring Apps **Create** page.
+
+1. Select the same resource group and region as the virtual network.
+
+1. For **Name** under **Service Details**, select **azure-spring-apps-vnet**.
+
+1. Select the **Networking** tab, and select the following values:
+
+ | Setting | Value |
+ ||-|
+ | Deploy in your own virtual network | Select **Yes**. |
+ | Virtual network | Select **azure-spring-apps-vnet**. |
+ | Service runtime subnet | Select **service-runtime-subnet**. |
+ | Spring apps subnet | Select **apps-subnet**. |
+
+ ![Screenshot that shows the Networking tab on the Azure Spring Apps Create page.](./media/spring-cloud-v-net-injection/creation-blade-networking-tab.png)
+
+1. Select **Review and create**.
+
+1. Verify your specifications, and select **Create**.
+
+ ![Screenshot that shows verifying specifications.](./media/spring-cloud-v-net-injection/verify-specifications.png)
+
+#### [CLI](#tab/azure-CLI)
+
+To deploy an Azure Spring Apps instance in the virtual network:
+
+Create your Azure Spring Apps instance by specifying the virtual network and subnets you just created,
+
+ ```azurecli
+ az spring create \
+ --resource-group "$RESOURCE_GROUP" \
+ --name "$SPRING_CLOUD_NAME" \
+ --vnet $VIRTUAL_NETWORK_NAME \
+ --service-runtime-subnet service-runtime-subnet \
+ --app-subnet apps-subnet \
+ --enable-java-agent \
+ --sku standard \
+ --location $LOCATION
+ ```
+++
+After the deployment, two additional resource groups will be created in your subscription to host the network resources for the Azure Spring Apps instance. Go to **Home**, and then select **Resource groups** from the top menu items to find the following new resource groups.
+
+The resource group named as **ap-svc-rt_{service instance name}_{service instance region}** contains network resources for the service runtime of the service instance.
+
+ ![Screenshot that shows the service runtime.](./media/spring-cloud-v-net-injection/service-runtime-resource-group.png)
+
+The resource group named as **ap-app_{service instance name}_{service instance region}** contains network resources for your Spring applications of the service instance.
+
+ ![Screenshot that shows apps resource group.](./media/spring-cloud-v-net-injection/apps-resource-group.png)
+
+Those network resources are connected to your virtual network created in the preceding image.
+
+ ![Screenshot that shows the virtual network with connected devices.](./media/spring-cloud-v-net-injection/vnet-with-connected-device.png)
+
+ > [!Important]
+ > The resource groups are fully managed by the Azure Spring Apps service. Do *not* manually delete or modify any resource inside.
+
+## Using smaller subnet ranges
+
+This table shows the maximum number of app instances Azure Spring Apps supports using smaller subnet ranges.
+
+| App subnet CIDR | Total IPs | Available IPs | Maximum app instances |
+| | | - | |
+| /28 | 16 | 8 | <p>App with 0.5 core: 192 <br/> App with one core: 96 <br/> App with two cores: 48<br/> App with three cores: 32<br/> App with four cores: 24</p> |
+| /27 | 32 | 24 | <p>App with 0.5 core: 456 <br/> App with one core: 228<br/> App with two cores: 144<br/> App with three cores: 96<br/> App with four cores: 72</p> |
+| /26 | 64 | 56 | <p>App with 0.5 core: 500 <br/> App with one core: 500<br/> App with two cores: 336<br/> App with three cores: 224<br/> App with four cores: 168</p> |
+| /25 | 128 | 120 | <p>App with 0.5 core: 500 <br/> App with one core: 500<br/> App with two cores: 500<br/> App with three cores: 480<br> App with four cores: 360</p> |
+| /24 | 256 | 248 | <p>App with 0.5 core: 500 <br/> App with one core: 500<br/> App with two cores: 500<br/> App with three cores: 500<br/> App with four cores: 500</p> |
+
+For subnets, five IP addresses are reserved by Azure, and at least three IP addresses are required by Azure Spring Apps. At least eight IP addresses are required, so /29 and /30 are nonoperational.
+
+For a service runtime subnet, the minimum size is /28. This size has no bearing on the number of app instances.
+
+## Bring your own route table
+
+Azure Spring Apps supports using existing subnets and route tables.
+
+If your custom subnets do not contain route tables, Azure Spring Apps creates them for each of the subnets and adds rules to them throughout the instance lifecycle. If your custom subnets contain route tables, Azure Spring Apps acknowledges the existing route tables during instance operations and adds/updates and/or rules accordingly for operations.
+
+> [!Warning]
+> Custom rules can be added to the custom route tables and updated. However, rules are added by Azure Spring Apps and these must not be updated or removed. Rules such as 0.0.0.0/0 must always exist on a given route table and map to the target of your internet gateway, such as an NVA or other egress gateway. Use caution when updating rules when only your custom rules are being modified.
+
+### Route table requirements
+
+The route tables to which your custom vnet is associated must meet the following requirements:
+
+* You can associate your Azure route tables with your vnet only when you create a new Azure Spring Apps service instance. You cannot change to use another route table after Azure Spring Apps has been created.
+* Both the Spring application subnet and the service runtime subnet must associate with different route tables or neither of them.
+* Permissions must be assigned before instance creation. Be sure to grant **Azure Spring Apps Resource Provider** the *Owner* permission to your route tables.
+* The associated route table resource cannot be updated after cluster creation. While the route table resource cannot be updated, custom rules can be modified on the route table.
+* You cannot reuse a route table with multiple instances due to potential conflicting routing rules.
+
+## Next steps
+
+* [Troubleshooting Azure Spring Apps in VNET](troubleshooting-vnet.md)
+* [Customer Responsibilities for Running Azure Spring Apps in VNET](vnet-customer-responsibilities.md)
spring-apps How To Deploy Powershell https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-deploy-powershell.md
+
+ Title: Create and deploy applications in Azure Spring Apps by using PowerShell
+description: How to create and deploy applications in Azure Spring Apps by using PowerShell
++++
+ms.devlang: azurepowershell
Last updated : 2/15/2022+++
+# Create and deploy applications by using PowerShell
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes how you can create an instance of Azure Spring Apps by using the [Az.SpringCloud](/powershell/module/Az.SpringCloud) PowerShell module.
+
+## Requirements
+
+The requirements for completing the steps in this article depend on your Azure subscription:
+
+* If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/) before you begin.
++
+ > [!IMPORTANT]
+ > While the **Az.SpringCloud** PowerShell module is in preview, you must install it by using
+ > the `Install-Module` cmdlet. See the following command. After this PowerShell module becomes generally available, it will be part of future Az PowerShell releases and available by default from within Azure Cloud Shell.
+
+ ```azurepowershell-interactive
+ Install-Module -Name Az.SpringCloud
+ ```
+
+* If you have multiple Azure subscriptions, choose the appropriate subscription in which the
+ resources should be billed. Select a specific subscription by using the [Set-AzContext](/powershell/module/az.accounts/set-azcontext) cmdlet:
+
+ ```azurepowershell-interactive
+ Set-AzContext -SubscriptionId 00000000-0000-0000-0000-000000000000
+ ```
+
+## Create a resource group
+
+A resource group is a logical container in which Azure resources are deployed and managed as
+a group. Create an [Azure resource group](../azure-resource-manager/management/overview.md)
+by using the [New-AzResourceGroup](/powershell/module/az.resources/new-azresourcegroup)
+cmdlet. The following example creates a resource group with a specified name and location.
+
+```azurepowershell-interactive
+New-AzResourceGroup -Name <resource group name> -Location eastus
+```
+
+## Provision a new instance
+
+To create a new instance of Azure Spring Apps, you use the
+[New-AzSpringCloud](/powershell/module/az.springcloud/new-azspringcloud) cmdlet. The following
+example creates an Azure Spring Apps service, with the name that you specified in the resource group you created previously.
+
+```azurepowershell-interactive
+New-AzSpringCloud -ResourceGroupName <resource group name> -name <service instance name> -Location eastus
+```
+
+## Create a new application
+
+To create a new app, you use the
+[New-AzSpringCloudApp](/powershell/module/az.springcloud/new-azspringcloudapp) cmdlet. The following example creates an app in Azure Spring Apps named `gateway`.
+
+```azurepowershell-interactive
+New-AzSpringCloudApp -ResourceGroupName <resource group name> -ServiceName <service instance name> -AppName gateway
+```
+
+## Create a new app deployment
+
+To create a new app Deployment, you use the
+[New-AzSpringCloudAppDeployment](/powershell/module/az.springcloud/new-azspringcloudappdeployment)
+cmdlet. The following example creates an app deployment in Azure Spring Apps named `default`, for the `gateway` app.
+
+```azurepowershell-interactive
+New-AzSpringCloudAppDeployment -ResourceGroupName <resource group name> -Name <service instance name> -AppName gateway -DeploymentName default
+```
+
+## Get a service and its properties
+
+To get an Azure Spring Apps service and its properties, you use the
+[Get-AzSpringCloud](/powershell/module/az.springcloud/get-azspringcloud) cmdlet. The following
+example retrieves information about the specified Azure Spring Apps service.
+
+```azurepowershell-interactive
+Get-AzSpringCloud -ResourceGroupName <resource group name> -ServiceName <service instance name>
+```
+
+## Get an application
+
+To get an app and its properties in Azure Spring Apps, you use the
+[Get-AzSpringCloudApp](/powershell/module/az.springcloud/get-azspringcloudapp) cmdlet. The following example retrieves information about the app `gateway`.
+
+```azurepowershell-interactive
+Get-AzSpringCloudApp -ResourceGroupName <resource group name> -ServiceName <service instance name> -AppName gateway
+```
+
+## Get an app deployment
+
+To get an app deployment and its properties in Azure Spring Apps, you use the
+[Get-AzSpringCloudAppDeployment](/powershell/module/az.springcloud/get-azspringcloudappdeployment) cmdlet. The following example retrieves information about the `default` Azure Spring Apps deployment.
+
+```azurepowershell-interactive
+Get-AzSpringCloudAppDeployment -ResourceGroupName <resource group name> -ServiceName <service instance name> -AppName gateway -DeploymentName default
+```
+
+## Clean up resources
+
+If the resources created in this article aren't needed, you can delete them by running the examples shown in the following sections.
+
+### Delete an app deployment
+
+To remove an app deployment in Azure Spring Apps, you use the
+[Remove-AzSpringCloudAppDeployment](/powershell/module/az.springcloud/remove-azspringcloudappdeployment) cmdlet. The following example deletes an app deployed in Azure Spring Apps named `default`, for the specified service and app.
+
+```azurepowershell-interactive
+Remove-AzSpringCloudAppDeployment -ResourceGroupName <resource group name> -ServiceName <service instance name> -AppName gateway -DeploymentName default
+```
+
+### Delete an app
+
+To remove an app in Azure Spring Apps, you use the
+[Remove-AzSpringCloudApp](/powershell/module/Az.SpringCloud/remove-azspringcloudapp) cmdlet. The following example deletes the `gateway` app in the specified service and resource group.
+
+```azurepowershell
+Remove-AzSpringCloudApp -ResourceGroupName <resource group name> -ServiceName <service instance name> -AppName gateway
+```
+
+### Delete a service
+
+To remove an Azure Spring Apps service, you use the
+[Remove-AzSpringCloud](/powershell/module/Az.SpringCloud/remove-azspringcloud) cmdlet. The following example deletes the specified Azure Spring Apps service.
+
+```azurepowershell
+Remove-AzSpringCloud -ResourceGroupName <resource group name> -ServiceName <service instance name>
+```
+
+### Delete the resource group
+
+> [!CAUTION]
+> The following example deletes the specified resource group and all resources contained within it. If resources outside the scope of this article exist in the specified resource group, they will also be deleted.
+
+```azurepowershell-interactive
+Remove-AzResourceGroup -Name <resource group name>
+```
+
+## Next steps
+
+[Azure Spring Apps developer resources](./resources.md)
spring-apps How To Deploy With Custom Container Image https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-deploy-with-custom-container-image.md
+
+ Title: How to deploy applications in Azure Spring Apps with a custom container image (Preview)
+description: How to deploy applications in Azure Spring Apps with a custom container image
+++++ Last updated : 4/28/2022++
+# Deploy an application with a custom container image (Preview)
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Standard tier ✔️ Enterprise tier
+
+This article explains how to deploy Spring Boot applications in Azure Spring Apps using a custom container image. Deploying an application with a custom container supports most features as when deploying a JAR application. Other Java and non-Java applications can also be deployed with the container image.
+
+## Prerequisites
+
+* A container image containing the application.
+* The image is pushed to an image registry. For more information, see [Azure Container Registry](../container-instances/container-instances-tutorial-prepare-acr.md).
+
+> [!NOTE]
+> The web application must listen on port `1025` for Standard tier and on port `8080` for Enterprise tier. The way to change the port depends on the framework of the application. For example, specify `SERVER_PORT=1025` for Spring Boot applications or `ASPNETCORE_URLS=http://+:1025/` for ASP.Net Core applications. The probe can be disabled for applications that do not listen on any port.
+
+## Deploy your application
+
+To deploy an application to a custom container image, use the following steps:
+
+### [Azure CLI](#tab/azure-cli)
+
+To deploy a container image, use one of the following commands:
+
+* To deploy a container image to the public Docker Hub to an app, use the following command:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <your-resource-group> \
+ --name <your-app-name> \
+ --container-image <your-container-image> \
+ --service <your-service-name>
+ ```
+
+* To deploy a container image from ACR to an app, or from another private registry to an app, use the following command:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <your-resource-group> \
+ --name <your-app-name> \
+ --container-image <your-container-image> \
+ --service <your-service-name>
+ --container-registry <your-container-registry> \
+ --registry-password <your-password> |
+ --registry-username <your-username>
+ ```
+
+To overwrite the entry point of the image, add the following two arguments to any of the above commands:
+
+```azurecli
+ --container-command "java" \
+ --container-args "-jar /app.jar -Dkey=value"
+```
+
+To disable listening on a port for images that aren't web applications, add the following argument to the above commands:
+
+```azurecli
+ --disable-probe true
+```
+
+### [Portal](#tab/azure-portal)
+
+1. Open the [Azure portal](https://portal.azure.com).
+1. Open your existing Azure Spring Apps service instance.
+1. Select **Apps** from left the menu, then select **Create App**.
+1. Name your app, and in the **Runtime platform** pulldown list, select **Custom Container**.
+
+ :::image type="content" source="media/how-to-deploy-with-custom-container-image/create-app-custom-container.png" alt-text="Screenshot of Azure portal Create App page with Runtime platform dropdown showing and Custom Container selected." lightbox="media/how-to-deploy-with-custom-container-image/create-app-custom-container.png":::
+
+1. Select **Edit** under *Image*, then fill in the fields as shown in the following image:
+
+ :::image type="content" source="media/how-to-deploy-with-custom-container-image/custom-image-settings.png" alt-text="Screenshot of Azure portal showing the Custom Image Settings pane." lightbox="media/how-to-deploy-with-custom-container-image/custom-image-settings.png":::
+
+ > [!NOTE]
+ > The **Commands** and **Arguments** field are optional, which are used to overwrite the `cmd` and `entrypoint` of the image.
+ >
+ > You need to also specify the **Language Framework**, which is the web framework of the container image used. Currently, only **Spring Boot** is supported. For other Java applications or non-Java (polyglot) applications, select **Polyglot**.
+
+1. Select **Save**, then select **Create** to deploy your application.
+++
+## Feature Support matrix
+
+The following matrix shows what features are supported in each application type.
+
+| Feature | Spring Boot Apps - container deployment | Polyglot Apps - container deployment | Notes |
+|||||
+| App lifecycle management | ✔️ | ✔️ | |
+| Support for container registries | ✔️ | ✔️ | |
+| Assign endpoint | ✔️ | ✔️ | |
+| Azure Monitor | ✔️ | ✔️ | |
+| APM integration | ✔️ | ✔️ | Supported by [manual installation](#install-an-apm-into-the-image-manually) |
+| Blue/green deployment | ✔️ | ✔️ | |
+| Custom domain | ✔️ | ✔️ | |
+| Scaling - auto scaling | ✔️ | ✔️ | |
+| Scaling - manual scaling (in/out, up/down) | ✔️ | ✔️ | |
+| Managed Identity | ✔️ | ✔️ | |
+| Spring Cloud Eureka & Config Server | ✔️ | ❌ | |
+| API portal for VMware Tanzu® | ✔️ | ✔️ | Enterprise tier only |
+| Spring Cloud Gateway for VMware Tanzu® | ✔️ | ✔️ | Enterprise tier only |
+| Application Configuration Service for VMware Tanzu® | ✔️ | ❌ | Enterprise tier only |
+| VMware Tanzu® Service Registry | ✔️ | ❌ | Enterprise tier only |
+| VNET | ✔️ | ✔️ | Add registry to [allowlist in NSG or Azure Firewall](#avoid-not-being-able-to-connect-to-the-container-registry-in-a-vnet) |
+| Outgoing IP Address | ✔️ | ✔️ | |
+| E2E TLS | ✔️ | ✔️ | Trust a self-signed CA is supported by [manual installation](#trust-a-certificate-authority-in-the-image) |
+| Liveness and readiness settings | ✔️ | ✔️ | |
+| Advanced troubleshooting - thread/heap/JFR dump | ✔️ | ❌ | The image must include `bash` and JDK with `PATH` specified. |
+| Bring your own storage | ✔️ | ✔️ | |
+| Integrate service binding with Resource Connector | ✔️ | ❌ | |
+| Availability Zone | ✔️ | ✔️ | |
+| App Lifecycle events | ✔️ | ✔️ | |
+| Reduced app size - 0.5 vCPU and 512 MB | ✔️ | ✔️ | |
+| Automate app deployments with Terraform | ✔️ | ✔️ | |
+| Soft Deletion | ✔️ | ✔️ | |
+| Interactive diagnostic experience (AppLens-based) | ✔️ | ✔️ | |
+| SLA | ✔️ | ✔️ | |
+
+> [!NOTE]
+> Polyglot apps include non-Spring Boot Java, NodeJS, AngularJS, Python, and .NET apps.
+
+## Common points to be aware of when deploying with a custom container
+
+The following points will help you address common situations when deploying with a custom image.
+
+### Trust a Certificate Authority in the image
+
+To trust a CA in the image, set the following variables depending on your environment:
+
+* You must import Java applications into the trust store by adding the following lines into your *Dockerfile*:
+
+ ```dockerfile
+ ADD EnterpriseRootCA.crt /opt/
+ RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
+ ```
+
+* For Node.js applications, set the `NODE_EXTRA_CA_CERTS` environment variable:
+
+ ```dockerfile
+ ADD EnterpriseRootCA.crt /opt/
+ ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
+ ```
+
+* For Python, or other languages relying on the system CA store, on Debian or Ubuntu images, add the following environment variables:
+
+ ```dockerfile
+ ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/
+ RUN /usr/sbin/update-ca-certificates
+ ```
+
+* For Python, or other languages relying on the system CA store, on CentOS or Fedora based images, add the following environment variables:
+
+ ```dockerfile
+ ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/
+ RUN /usr/bin/update-ca-trust
+ ```
+
+### Avoid unexpected behavior when images change
+
+When your application is restarted or scaled out, the latest image will always be pulled. If the image has been changed, the newly started application instances will use the new image while the old instances will continue to use the old image. Avoid using the `latest` tag or overwrite the image without a tag change to avoid unexpected application behavior.
+
+### Avoid not being able to connect to the container registry in a VNet
+
+If you deployed the instance to a VNet, make sure you allow the network traffic to your container registry in the NSG or Azure Firewall (if used). For more information, see [Customer responsibilities for running in VNet](./vnet-customer-responsibilities.md) to add the needed security rules.
+
+### Install an APM into the image manually
+
+The installation steps vary on different APMs and languages. The following steps are for New Relic with Java applications. You must modify the *Dockerfile* using the following steps:
+
+1. Download and install the agent file into the image by adding the following to the *Dockerfile*:
+
+ ```dockerfile
+ ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
+ ```
+
+1. Add the environment variables required by the APM:
+
+ ```dockerfile
+ ENV NEW_RELIC_APP_NAME=appName
+ ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
+ ```
+
+1. Modify the image entry point by adding: `java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar`
+
+To install the agents for other languages, refer to the official documentation for the other agents:
+
+New Relic:
+
+* Python: [Standard Python agent install](https://docs.newrelic.com/docs/apm/agents/python-agent/installation/standard-python-agent-install/)
+* Node.js: [Install the Node.js agent](https://docs.newrelic.com/docs/apm/agents/nodejs-agent/installation-configuration/install-nodejs-agent/)
+
+Dynatrace:
+
+* Python: [Instrument Python applications with OpenTelemetry](https://www.dynatrace.com/support/help/extend-dynatrace/opentelemetry/opentelemetry-traces/opentelemetry-ingest/opent-python)
+* Node.js: [Instrument Node.js applications with OpenTelemetry](https://www.dynatrace.com/support/help/extend-dynatrace/opentelemetry/opentelemetry-traces/opentelemetry-ingest/opent-nodejs)
+
+AppDynamics:
+
+* Python: [Install the Python Agent](https://docs.appdynamics.com/appd/21.x/21.12/en/application-monitoring/install-app-server-agents/python-agent/install-the-python-agent)
+* Node.js: [Installing the Node.js Agent](https://docs.appdynamics.com/appd/21.x/21.12/en/application-monitoring/install-app-server-agents/node-js-agent/install-the-node-js-agent#InstalltheNode.jsAgent-install_nodejsInstallingtheNode.jsAgent)
+
+### View the container logs
+
+To view the console logs of your container application, the following CLI command can be used:
+
+```azurecli
+az spring app logs \
+ --resource-group <your-resource-group> \
+ --name <your-app-name> \
+ --service <your-service-name> \
+ --instance <your-instance-name>
+```
+
+To view the container events logs from the Azure Monitor, enter the query:
+
+```query
+AppPlatformContainerEventLogs
+| where App == "hw-20220317-1b"
+```
++
+### Scan your image for vulnerabilities
+
+We recommend that you use Microsoft Defender for Cloud with ACR to prevent your images from being vulnerable. For more information, see [Microsoft Defender for Cloud] (/azure/defender-for-cloud/defender-for-containers-introduction?tabs=defender-for-container-arch-aks#scanning-images-in-acr-registries)
+
+### Switch between JAR deployment and container deployment
+
+You can switch the deployment type directly by redeploying using the following command:
+
+```azurecli
+az spring app deploy \
+ --resource-group <your-resource-group> \
+ --name <your-app-name> \
+ --container-image <your-container-image> \
+ --service <your-service-name>
+```
+
+### Create another deployment with an existing JAR deployment
+
+You can create another deployment using an existing JAR deployment using the following command:
+
+```azurecli
+az spring app deployment create \
+ --resource-group <your-resource-group> \
+ --name <your-deployment-name> \
+ --app <your-app-name> \
+ --container-image <your-container-image> \
+ --service <your-service-name>
+```
+
+> [!NOTE]
+> Automating deployments using Azure Pipelines Tasks or GitHub Actions are not currently supported.
+
+## Next steps
+
+* [How to capture dumps](./how-to-capture-dumps.md)
spring-apps How To Distributed Tracing https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-distributed-tracing.md
+
+ Title: "Use Distributed Tracing with Azure Spring Apps"
+description: Learn how to use Azure Spring Apps distributed tracing through Azure Application Insights
+++ Last updated : 10/06/2019++
+zone_pivot_groups: programming-languages-spring-apps
++
+# Use distributed tracing with Azure Spring Apps (deprecated)
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+> [!NOTE]
+> Distributed Tracing is deprecated. For more information, see [Application Insights Java In-Process Agent in Azure Spring Apps](./how-to-application-insights.md).
+
+With the distributed tracing tools in Azure Spring Apps, you can easily debug and monitor complex issues. Azure Spring Apps integrates [Spring Cloud Sleuth](https://spring.io/projects/spring-cloud-sleuth) with Azure's [Application Insights](../azure-monitor/app/app-insights-overview.md). This integration provides powerful distributed tracing capability from the Azure portal.
+
+In this article, you learn how to enable a .NET Core Steeltoe app to use distributed tracing.
+
+## Prerequisites
+
+To follow these procedures, you need a Steeltoe app that is already [prepared for deployment to Azure Spring Apps](how-to-prepare-app-deployment.md).
+
+## Dependencies
+
+For Steeltoe 2.4.4, add the following NuGet packages:
+
+* [Steeltoe.Management.TracingCore](https://www.nuget.org/packages/Steeltoe.Management.TracingCore/)
+* [Steeltoe.Management.ExporterCore](https://www.nuget.org/packages/Microsoft.Azure.SpringCloud.Client/)
+
+For Steeltoe 3.0.0, add the following NuGet package:
+
+* [Steeltoe.Management.TracingCore](https://www.nuget.org/packages/Steeltoe.Management.TracingCore/)
+
+## Update Startup.cs
+
+1. For Steeltoe 2.4.4, call `AddDistributedTracing` and `AddZipkinExporter` in the `ConfigureServices` method.
+
+ ```csharp
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddDistributedTracing(Configuration);
+ services.AddZipkinExporter(Configuration);
+ }
+ ```
+
+ For Steeltoe 3.0.0, call `AddDistributedTracing` in the `ConfigureServices` method.
+
+ ```csharp
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddDistributedTracing(Configuration, builder => builder.UseZipkinWithTraceOptions(services));
+ }
+ ```
+
+1. For Steeltoe 2.4.4, call `UseTracingExporter` in the `Configure` method.
+
+ ```csharp
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+ {
+ app.UseEndpoints(endpoints =>
+ {
+ endpoints.MapControllers();
+ });
+ app.UseTracingExporter();
+ }
+ ```
+
+ For Steeltoe 3.0.0, no changes are required in the `Configure` method.
+
+## Update configuration
+
+Add the following settings to the configuration source that will be used when the app runs in Azure Spring Apps:
+
+1. Set `management.tracing.alwaysSample` to true.
+
+2. If you want to see tracing spans sent between the Eureka server, the Configuration server, and user apps: set `management.tracing.egressIgnorePattern` to "/api/v2/spans|/v2/apps/.*/permissions|/eureka/.*|/oauth/.*".
+
+For example, *appsettings.json* would include the following properties:
+
+```json
+"management": {
+ "tracing": {
+ "alwaysSample": true,
+ "egressIgnorePattern": "/api/v2/spans|/v2/apps/.*/permissions|/eureka/.*|/oauth/.*"
+ }
+ }
+```
+
+For more information about distributed tracing in .NET Core Steeltoe apps, see [Distributed tracing](https://docs.steeltoe.io/api/v3/tracing/) in the Steeltoe documentation.
+In this article, you learn how to:
+
+> [!div class="checklist"]
+> * Enable distributed tracing in the Azure portal.
+> * Add Spring Cloud Sleuth to your application.
+> * View dependency maps for your Spring applications.
+> * Search tracing data with different filters.
+
+## Prerequisites
+
+To follow these procedures, you need an Azure Spring Apps service that is already provisioned and running. Complete the [Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md) quickstart to provision and run an Azure Spring Apps service.
+
+## Add dependencies
+
+1. Add the following line to the application.properties file:
+
+ ```xml
+ spring.zipkin.sender.type = web
+ ```
+
+ After this change, the Zipkin sender can send to the web.
+
+1. Skip this step if you followed our [guide to preparing an application in Azure Spring Apps](how-to-prepare-app-deployment.md). Otherwise, go to your local development environment and edit your pom.xml file to include the following Spring Cloud Sleuth dependency:
+
+ * Spring boot version < 2.4.x.
+
+ ```xml
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-sleuth</artifactId>
+ <version>${spring-cloud-sleuth.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-sleuth</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-zipkin</artifactId>
+ </dependency>
+ </dependencies>
+ ```
+
+ * Spring boot version >= 2.4.x.
+
+ ```xml
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-sleuth</artifactId>
+ <version>${spring-cloud-sleuth.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-sleuth</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-sleuth-zipkin</artifactId>
+ </dependency>
+ </dependencies>
+ ```
+
+1. Build and deploy again for your Azure Spring Apps service to reflect these changes.
+
+## Modify the sample rate
+
+You can change the rate at which your telemetry is collected by modifying the sample rate. For example, if you want to sample half as often, open your application.properties file, and change the following line:
+
+```xml
+spring.sleuth.sampler.probability=0.5
+```
+
+If you have already built and deployed an application, you can modify the sample rate. Do so by adding the previous line as an environment variable in the Azure CLI or the Azure portal.
+
+## Enable Application Insights
+
+1. Go to your Azure Spring Apps service page in the Azure portal.
+1. On the **Monitoring** page, select **Distributed Tracing**.
+1. Select **Edit setting** to edit or add a new setting.
+1. Create a new Application Insights query, or select an existing one.
+1. Choose which logging category you want to monitor, and specify the retention time in days.
+1. Select **Apply** to apply the new tracing.
+
+## View the application map
+
+Return to the **Distributed Tracing** page and select **View application map**. Review the visual representation of your application and monitoring settings. To learn how to use the application map, see [Application Map: Triage distributed applications](../azure-monitor/app/app-map.md).
+
+## Use search
+
+Use the search function to query for other specific telemetry items. On the **Distributed Tracing** page, select **Search**. For more information on how to use the search function, see [Using Search in Application Insights](../azure-monitor/app/diagnostic-search.md).
+
+## Use Application Insights
+
+Application Insights provides monitoring capabilities in addition to the application map and search function. Search the Azure portal for your application's name, and then open an Application Insights page to find monitoring information. For more guidance on how to use these tools, check out [Azure Monitor log queries](/azure/data-explorer/kusto/query/).
+
+## Disable Application Insights
+
+1. Go to your Azure Spring Apps service page in the Azure portal.
+1. On **Monitoring**, select **Distributed Tracing**.
+1. Select **Disable** to disable Application Insights.
+
+## Next steps
+
+In this article, you learned how to enable and understand distributed tracing in Azure Spring Apps. To learn about binding services to an application, see [Bind an Azure Cosmos DB database to an application in Azure Spring Apps](./how-to-bind-cosmos.md).
spring-apps How To Dump Jvm Options https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-dump-jvm-options.md
+
+ Title: Use the diagnostic settings of JVM options for advanced troubleshooting in Azure Spring Apps
+description: Describes several best practices with JVM configuration to set heap dump, JFR, and GC logs.
++++ Last updated : 01/21/2022+++
+# Use the diagnostic settings of JVM options for advanced troubleshooting in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use diagnostic settings through JVM options to conduct advanced troubleshooting in Azure Spring Apps.
+
+There are several JVM-based application startup parameters related to heap dump, Java Flight Recorder (JFR), and garbage collection (GC) logs. In Azure Spring Apps, we support JVM configuration using JVM options.
+
+For more information on configuring JVM-based application startup parameters, see [az spring app deployment](/cli/azure/spring/app/deployment) in the Azure CLI reference documentation. The following sections provide several examples of useful values for the `--jvm-options` parameter.
+
+## Prerequisites
+
+* A deployed Azure Spring Apps service instance. Follow our [quickstart on deploying an app via the Azure CLI](./quickstart.md) to get started.
+* At least one application already created in your service instance.
+* Your own persistent storage as described in [How to enable your own persistent storage in Azure Spring Apps](how-to-custom-persistent-storage.md). This storage is used to save generated diagnostic files. The paths you provide in the parameter values below should be under the mount path of the persistent storage bound to your app. If you want to use a path under the mount path, be sure to create the subpath beforehand.
+
+## Generate a heap dump when out of memory
+
+Use the following `--jvm-options` parameter to generate a heap dump when you encounter an out-of-memory error.
+
+```azurecli
+--jvm-options="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path-to-heap-dump-folder>"
+```
+
+As alternative to specifying the path to the heap dump folder, you can provide a specific file name. However, we highly recommend that you provide a folder path instead. If you provide a file name, the command will generate a heap dump for the first out-of-memory error only, due to the limitations of the HPROF file format. If you provide a folder path, you'll get a heap dump in a file with an autogenerated name for each out-of-memory error.
+
+## Generate GC logs
+
+Use the following `--jvm-options` parameter to generate GC logs. For more information, see the official JVM documentation.
+
+```azurecli
+--jvm-options="-XX:+PrintGCDetails -Xloggc:<path-to-GC-log-file>"
+```
+
+## Generate a JFR file on exit
+
+Use the following `--jvm-options` parameter to generate a JFR file. For more information, see the official JVM documentation.
+
+```azurecli
+--jvm-options="-XX:StartFlightRecording=dumponexit=true,dumponexitpath=<path-to-JFR-file>"
+```
+
+## Configure the path for generated files
+
+To ensure that you can access your files, be sure that the target path of your generated file is in the persistent storage bound to your app. For example, you can use JSON similar to the following example when you create your persistent storage in Azure Spring Apps.
+
+```json
+ {
+ "customPersistentDisks": [
+ {
+ "storageName": "<storage-resource-name>",
+ "customPersistentDiskProperties": {
+ "type": "AzureFileVolume",
+ "shareName": "<azure-file-share-name>",
+ "mountPath": "<unique-mount-path>",
+ "mountOptions": [
+ "uid=0",
+ "gid=0"
+ ],
+ "readOnly": false
+ }
+ },
+ {
+ "storageName": "<storage-resource-name>",
+ "customPersistentDiskProperties": {
+ "type": "AzureFileVolume",
+ "shareName": "<azure-file-share-name>",
+ "mountPath": "<unique-mount-path>",
+ "readOnly": true
+ }
+ }
+ ]
+ }
+```
+
+Alternately, you can use the following command to append to persistent storage.
+
+```azurecli
+az spring app append-persistent-storage \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-instance-name> \
+ --name <app-name> \
+ --persistent-storage-type AzureFileVolume \
+ --storage-name <storage-resource-name> \
+ --share-name <azure-file-share-name> \
+ --mount-path <unique-mount-path>
+```
+
+## Next steps
+
+* [Capture heap dump and thread dump manually and use Java Flight Recorder in Azure Spring Apps](how-to-capture-dumps.md)
spring-apps How To Dynatrace One Agent Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-dynatrace-one-agent-monitor.md
+
+ Title: "How to monitor Spring Boot apps with Dynatrace Java OneAgent"
+description: How to use Dynatrace Java OneAgent to monitor Spring Boot applications in Azure Spring Apps
++++ Last updated : 06/07/2022+
+ms.devlang: azurecli
++
+# How to monitor Spring Boot apps with Dynatrace Java OneAgent
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use Dynatrace OneAgent to monitor Spring Boot applications in Azure Spring Apps.
+
+With the Dynatrace OneAgent, you can:
+
+* Monitor apps with the Dynatrace OneAgent.
+* Configure the Dynatrace OneAgent by using environment variables.
+* Check all monitoring data from Dynatrace dashboard.
+
+The following video introduces Dynatrace OneAgent.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/PF0_SxuiZ2w]
+
+## Prerequisites
+
+* [Azure CLI](/cli/azure/install-azure-cli)
+* [A Dynatrace account](https://www.dynatrace.com/)
+* [A Dynatrace PaaS token and tenant token](https://www.dynatrace.com/support/help/reference/dynatrace-concepts/access-tokens/)
+
+## Activate Dynatrace OneAgent
+
+The following sections describe how to activate Dynatrace OneAgent.
+
+### Prepare your Azure Spring Apps environment
+
+1. Create an instance of Azure Spring Apps.
+1. Create an application that you want to report to Dynatrace by running the following command. Replace the placeholders *\<...>* with your own values.
+ ```azurecli
+ az spring app create \
+ --resource-group <your-resource-group-name> \
+ --service <your-Azure-Spring-Apps-name> \
+ --name <your-application-name> \
+ --is-public true
+ ```
+
+### Determine the values for the required environment variables
+
+To activate Dynatrace OneAgent on your Azure Spring Apps instance, you need to configure four environment variables: `DT_TENANT`, `DT_TENANTTOKEN`, `DT_CONNECTION_POINT`, and `DT_CLUSTER_ID`. For more information, see [Integrate OneAgent with Azure Spring Apps](https://www.dynatrace.com/support/help/shortlink/azure-spring).
+
+For applications with multiple instances, Dynatrace has several ways to group them. `DT_CLUSTER_ID` is one of the ways. For more information, see [Process group detection](https://www.dynatrace.com/support/help/how-to-use-dynatrace/process-groups/configuration/pg-detection).
+
+### Add the environment variables to your application
+
+You can add the environment variable key/value pairs to your application using either the Azure portal or the Azure CLI.
+
+#### Option 1: Azure CLI
+
+To add the key/value pairs using the Azure CLI, run the following command, replacing the placeholders *\<...>* with the values determined in the previous steps.
+
+```azurecli
+az spring app deploy \
+ --resource-group <your-resource-group-name> \
+ --service <your-Azure-Spring-Apps-name> \
+ --name <your-application-name> \
+ --jar-path app.jar \
+ --env \
+ DT_TENANT=<your-environment-ID> \
+ DT_TENANTTOKEN=<your-tenant-token> \
+ DT_CONNECTION_POINT=<your-communication-endpoint>
+```
+
+#### Option 2: Portal
+
+To add the key/value pairs using the Azure portal, use the following steps:
+
+1. Navigate to the list of your existing applications.
+
+ :::image type="content" source="media/dynatrace-oneagent/existing-applications.png" alt-text="Screenshot of the Azure portal showing the Azure Spring Apps Apps section." lightbox="media/dynatrace-oneagent/existing-applications.png":::
+
+1. Select an application to navigate to the **Overview** page of the application.
+
+ :::image type="content" source="media/dynatrace-oneagent/overview-application.png" alt-text="Screenshot of the application's Overview section." lightbox="media/dynatrace-oneagent/overview-application.png":::
+
+1. Select **Configurations** to add, update, or delete values in the **Environment variables** section for the application.
+
+ :::image type="content" source="media/dynatrace-oneagent/configuration-application.png" alt-text="Screenshot of the 'Environment variables' tab of the application's Configuration section." lightbox="media/dynatrace-oneagent/configuration-application.png":::
+
+## Automate provisioning
+
+Using Terraform, Bicep, or Azure Resource Manager template (ARM template), you can also run a provisioning automation pipeline. This pipeline can provide a complete hands-off experience to instrument and monitor any new applications that you create and deploy.
+
+### Automate provisioning using Terraform
+
+To configure the environment variables in a Terraform template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Manages an Active Azure Spring Apps Deployment](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/spring_cloud_active_deployment).
+
+```terraform
+environment_variables = {
+ "DT_TENANT": "<your-environment-ID>",
+ "DT_TENANTTOKEN": "<your-tenant-token>",
+ "DT_CONNECTION_POINT": "<your-communication-endpoint>",
+ "DT_CLUSTER_ID": "<your-cluster-ID>"
+}
+```
+
+### Automate provisioning using an Bicep file
+
+To configure the environment variables in a Bicep file, add the following code to the file, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=bicep).
+
+```bicep
+environmentVariables: {
+ DT_TENANT: '<your-environment-ID>'
+ DT_TENANTTOKEN: '<your-tenant-token>'
+ DT_CONNECTION_POINT: '<your-communication-endpoint>'
+ DT_CLUSTER_ID: '<your-cluster-ID>'
+}
+```
+
+### Automate provisioning using an ARM template
+
+To configure the environment variables in an ARM template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=json).
+
+```json
+"environmentVariables": {
+ "DT_TENANT": "<your-environment-ID>",
+ "DT_TENANTTOKEN": "<your-tenant-token>",
+ "DT_CONNECTION_POINT": "<your-communication-endpoint>",
+ "DT_CLUSTER_ID": "<your-cluster-ID>"
+}
+```
+
+## View reports in Dynatrace
+
+This section describes how to find various reports in Dynatrace.
+
+> [!NOTE]
+> The Dynatrace menu and user interface will evolve gradually. For this reason, the dashboard may be moved to other sections in the Dynatrace website, and the following screenshots may not reflect the current version of the user interface.
+
+After you add the environment variables to your application, Dynatrace starts collecting data. To view reports, use the [Dynatrace menu](https://www.dynatrace.com/support/help/get-started/navigation/), go to **Services**, and then select your application.
+
+You can find the **Service flow** from **\<your-app-name>/Details/Service flow**:
++
+You can find the **Method hotspots** from **\<your-app-name>/Details/Method hotspots**:
++
+You can find the **Database statements** from **\<your-app-name>/Details/Response time analysis**:
++
+Next, go to the **Multidimensional analysis** section.
+
+You can find the **Top database statements** from **Multidimensional analysis/Top database statements**:
++
+You can find the **Exceptions overview** from **Multidimensional analysis/Exceptions overview**:
++
+Next, go to the **Profiling and optimization** section.
+
+You can find the **CPU analysis** from **Profiling and optimization/CPU analysis**:
++
+Next, go to the **Databases** section.
+
+You can find **Backtrace** from **Databases/Details/Backtrace**:
++
+## View Dynatrace OneAgent logs
+
+By default, Azure Spring Apps will print the *info* level logs of the Dynatrace OneAgent to `STDOUT`. The logs will be mixed with the application logs. You can find the explicit agent version from the application logs.
+
+You can also get the logs of the Dynatrace agent from the following locations:
+
+* Azure Spring Apps logs
+* Azure Spring Apps Application Insights
+* Azure Spring Apps LogStream
+
+You can apply some environment variables provided by Dynatrace to configure logging for the Dynatrace OneAgent. For example, `DT_LOGLEVELCON` controls the level of logs.
+
+> [!CAUTION]
+> We strongly recommend that you do not override the default logging behavior provided by Azure Spring Apps for Dynatrace. If you do, the logging scenarios above will be blocked, and the log file(s) may be lost. For example, you should not output the `DT_LOGLEVELFILE` environment variable to your applications.
+
+## Dynatrace OneAgent upgrade
+
+The Dynatrace OneAgent auto-upgrade is disabled and will be upgraded quarterly with the JDK. Agent upgrade may affect the following scenarios:
+
+* Existing applications using Dynatrace OneAgent before upgrade will be unchanged, but will require restart or redeploy to engage the new version of Dynatrace OneAgent.
+* Applications created after upgrade will use the new version of Dynatrace OneAgent.
+
+## VNet injection instance outbound traffic configuration
+
+For a VNet injection instance of Azure Spring Apps, you need to make sure the outbound traffic for Dynatrace communication endpoints is configured correctly for Dynatrace OneAgent. For information about how to get `communicationEndpoints`, see [Deployment API - GET connectivity information for OneAgent](https://www.dynatrace.com/support/help/dynatrace-api/environment-api/deployment/oneagent/get-connectivity-info/). For more information, see [Customer responsibilities for running Azure Spring Apps in VNET](vnet-customer-responsibilities.md).
+
+## Dynatrace support model
+
+For information about limitations when deploying Dynatrace OneAgent in application-only mode, see the [Cloud application platforms](https://www.dynatrace.com/support/help/technology-support/oneagent-platform-and-capability-support-matrix/#cloud-application-platforms) section of [OneAgent platform and capability support matrix](https://www.dynatrace.com/support/help/technology-support/oneagent-platform-and-capability-support-matrix).
+
+## Next steps
+
+* [Use distributed tracing with Azure Spring Apps](how-to-distributed-tracing.md)
spring-apps How To Elastic Apm Java Agent Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-elastic-apm-java-agent-monitor.md
+
+ Title: How to monitor Spring Boot apps with Elastic APM Java Agent
+description: How to use Elastic APM Java Agent to monitor Spring Boot applications running in Azure Spring Apps
++++ Last updated : 06/07/2022+++
+# How to monitor Spring Boot apps with Elastic APM Java Agent
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to use Elastic APM Agent to monitor Spring Boot applications running in Azure Spring Apps.
+
+With the Elastic Observability Solution, you can achieve unified observability to:
+
+* Monitor apps using the Elastic APM Java Agent and using persistent storage with Azure Spring Apps.
+* Use diagnostic settings to ship Azure Spring Apps logs to Elastic. For more information, see [Analyze logs with Elastic (ELK) using diagnostics settings](how-to-elastic-diagnostic-settings.md).
+
+The following video introduces unified observability for Spring Boot applications using Elastic.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/KjmQX1SxZdA]
+
+## Prerequisites
+
+* [Azure CLI](/cli/azure/install-azure-cli)
+* [Deploy Elastic on Azure](https://www.elastic.co/blog/getting-started-with-the-azure-integration-enhancement)
+* [Manage your APM & Fleet Server](https://www.elastic.co/guide/en/cloud-enterprise/current/ece-manage-apm-and-fleet.html)
+
+## Deploy the Spring Petclinic application
+
+This article uses the Spring Petclinic sample to walk through the required steps. Use the following steps to deploy the sample application:
+
+1. Follow the steps in [Deploy Spring Boot apps using Azure Spring Apps and MySQL](https://github.com/Azure-Samples/spring-petclinic-microservices#readme) until you reach the [Deploy Spring Boot applications and set environment variables](https://github.com/Azure-Samples/spring-petclinic-microservices#deploy-spring-boot-applications-and-set-environment-variables) section.
+
+1. Use the Azure Spring Apps extension for Azure CLI with the following command to create an application to run in Azure Spring Apps:
+
+ ```azurecli
+ az spring app create \
+ --resource-group <your-resource-group-name> \
+ --service <your-Azure-Spring-Apps-instance-name> \
+ --name <your-app-name> \
+ --is-public true
+ ```
+
+## Enable custom persistent storage for Azure Spring Apps
+
+Use the following steps to enable custom persistent storage:
+
+1. Follow the steps in [How to enable your own persistent storage in Azure Spring Apps](how-to-custom-persistent-storage.md).
+
+1. Use the following Azure CLI command to add persistent storage for your Azure Spring Apps apps.
+
+ ```azurecli
+ az spring app append-persistent-storage \
+ --resource-group <your-resource-group-name> \
+ --service <your-Azure-Spring-Apps-instance-name> \
+ --name <your-app-name> \
+ --persistent-storage-type AzureFileVolume \
+ --share-name <your-Azure-file-share-name> \
+ --mount-path <unique-mount-path> \
+ --storage-name <your-mounted-storage-name>
+ ```
+
+## Activate Elastic APM Java Agent
+
+Before proceeding, you'll need your Elastic APM server connectivity information handy, which assumes you've deployed Elastic on Azure. For more information, see [How to deploy and manage Elastic on Microsoft Azure](https://www.elastic.co/blog/getting-started-with-the-azure-integration-enhancement). To get this information, use the following steps:
+
+1. In the Azure portal, go to the **Overview** page of your Elastic deployment, then select **Manage Elastic Cloud Deployment**.
+
+ :::image type="content" source="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-get-link-from-microsoft-azure.png" alt-text="Screenshot of Azure portal 'Elasticsearch (Elastic Cloud)' page." lightbox="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-get-link-from-microsoft-azure.png":::
+
+1. Under your deployment on Elastic Cloud Console, select the **APM & Fleet** section to get Elastic APM Server endpoint and secret token.
+
+ :::image type="content" source="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-endpoint-secret.png" alt-text="Elastic screenshot 'A P M & Fleet' page." lightbox="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-endpoint-secret.png":::
+
+1. Download Elastic APM Java Agent from [Maven Central](https://search.maven.org/search?q=g:co.elastic.apm%20AND%20a:elastic-apm-agent).
+
+ :::image type="content" source="media/how-to-elastic-apm-java-agent-monitor/maven-central-repository-search.png" alt-text="Maven Central screenshot with jar download highlighted." lightbox="media/how-to-elastic-apm-java-agent-monitor/maven-central-repository-search.png":::
+
+1. Upload Elastic APM Agent to the custom persistent storage you enabled earlier. Go to Azure Fileshare and select **Upload** to add the agent JAR file.
+
+ :::image type="content" source="media/how-to-elastic-apm-java-agent-monitor/upload-files-microsoft-azure.png" alt-text="Screenshot of Azure portal showing 'Upload files' pane of 'File share' page." lightbox="media/how-to-elastic-apm-java-agent-monitor/upload-files-microsoft-azure.png":::
+
+1. After you have the Elastic APM endpoint and secret token, use the following command to activate Elastic APM Java agent when deploying applications. The placeholder *`<agent-location>`* refers to the mounted storage location of the Elastic APM Java Agent.
+
+ ```azurecli
+ az spring app deploy \
+ --name <your-app-name> \
+ --artifact-path <unique-path-to-your-app-jar-on-custom-storage> \
+ --jvm-options='-javaagent:<elastic-agent-location>' \
+ --env ELASTIC_APM_SERVICE_NAME=<your-app-name> \
+ ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package-name>' \
+ ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>' \
+ ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
+ ```
+
+## Automate provisioning
+
+You can also run a provisioning automation pipeline using Terraform, Bicep, or an Azure Resource Manager template (ARM template). This pipeline can provide a complete hands-off experience to instrument and monitor any new applications that you create and deploy.
+
+### Automate provisioning using Terraform
+
+To configure the environment variables in a Terraform template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Manages an Active Azure Spring Apps Deployment](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/spring_cloud_active_deployment).
+
+```terraform
+resource "azurerm_spring_cloud_java_deployment" "example" {
+ ...
+ jvm_options = "-javaagent:<elastic-agent-location>"
+ ...
+ environment_variables = {
+ "ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
+ "ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
+ "ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
+ "ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
+ }
+}
+```
+
+### Automate provisioning using a Bicep file
+
+To configure the environment variables in a Bicep file, add the following code to the file, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=bicep).
+
+```bicep
+deploymentSettings: {
+ environmentVariables: {
+ ELASTIC_APM_SERVICE_NAME='<your-app-name>',
+ ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package>',
+ ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>',
+ ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
+ },
+ jvmOptions: '-javaagent:<elastic-agent-location>',
+ ...
+}
+```
+
+### Automate provisioning using an ARM template
+
+To configure the environment variables in an ARM template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=json).
+
+```json
+"deploymentSettings": {
+ "environmentVariables": {
+ "ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
+ "ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
+ "ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
+ "ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
+ },
+ "jvmOptions": "-javaagent:<elastic-agent-location>",
+ ...
+}
+```
+
+## Upgrade Elastic APM Java Agent
+
+To plan your upgrade, see [Upgrade versions](https://www.elastic.co/guide/en/cloud/current/ec-upgrade-deployment.html) for Elastic Cloud on Azure, and [Breaking Changes](https://www.elastic.co/guide/en/apm/server/current/breaking-changes.html) for APM. After you've upgraded APM Server, upload the Elastic APM Java agent JAR file in the custom persistent storage and restart apps with updated JVM options pointing to the upgraded Elastic APM Java agent JAR.
+
+## Monitor applications and metrics with Elastic APM
+
+Use the following steps to monitor applications and metrics:
+
+1. In the Azure portal, go to the **Overview** page of your Elastic deployment, then select the Kibana link.
+
+ :::image type="content" source="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-get-kibana-link.png" alt-text="Screenshot of Azure portal showing Elasticsearch page with 'Deployment U R L / Kibana' highlighted." lightbox="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-get-kibana-link.png":::
+
+1. After Kibana is open, search for *APM* in the search bar, then select **APM**.
+
+ :::image type="content" source="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-kibana-search-apm.png" alt-text="Elastic / Kibana screenshot showing A P M search results." lightbox="media/how-to-elastic-apm-java-agent-monitor/elastic-apm-kibana-search-apm.png":::
+
+Kibana APM is the curated application to support Application Monitoring workflows. Here you can view high-level details such as request/response times, throughput, transactions in a service with most impact on the duration.
++
+You can drill down in a specific transaction to understand the transaction-specific details such as the distributed tracing.
++
+Elastic APM Java agent also captures the JVM metrics from the Azure Spring Apps apps that are available with Kibana App for users for troubleshooting.
++
+Using the inbuilt AI engine in the Elastic solution, you can also enable Anomaly Detection on the Azure Spring Apps Services and choose an appropriate action - such as Teams notification, creation of a JIRA issue, a webhook-based API call, and others.
++
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md)
+* [Deploy Elastic on Azure](https://www.elastic.co/blog/getting-started-with-the-azure-integration-enhancement)
spring-apps How To Elastic Diagnostic Settings https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-elastic-diagnostic-settings.md
+
+ Title: Analyze logs with Elastic Cloud from Azure Spring Apps
+description: Learn how to analyze diagnostics logs in Azure Spring Apps using Elastic
+++ Last updated : 12/07/2021++++
+# Analyze logs with Elastic (ELK) using diagnostics settings
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use the diagnostics functionality of Azure Spring Apps to analyze logs with Elastic (ELK).
+
+The following video introduces unified observability for Spring Boot applications using Elastic.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/KjmQX1SxZdA]
+
+## Configure diagnostics settings
+
+To configure diagnostics settings, use the following steps:
+
+1. In the Azure portal, go to your Azure Spring Apps instance.
+1. Select **diagnostics settings** option, then select **Add diagnostics setting**.
+1. Enter a name for the setting, choose **Send to partner solution**, then select **Elastic** and an Elastic deployment where you want to send the logs.
+1. Select **Save**.
++
+> [!NOTE]
+> There might be a gap of up to 15 minutes between when logs are emitted and when they appear in your Elastic deployment.
+> If the Azure Spring Apps instance is deleted or moved, the operation won't cascade to the diagnostics settings resources. You have to manually delete the diagnostics settings resources before you perform the operation against its parent, the Azure Spring Apps instance. Otherwise, if you provision a new Azure Spring Apps instance with the same resource ID as the deleted one, or if you move the Azure Spring Apps instance back, the previous diagnostics settings resources will continue to extend it.
+
+## Analyze the logs with Elastic
+
+To learn more about deploying Elastic on Azure, see [How to deploy and manage Elastic on Microsoft Azure](https://www.elastic.co/blog/getting-started-with-the-azure-integration-enhancement).
+
+Use the following steps to analyze the logs:
+
+1. From the Elastic deployment overview page in the Azure portal, open **Kibana**.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-on-azure-native-microsoft-azure.png" alt-text="Screenshot of Azure portal showing 'Elasticsearch (Elastic Cloud)' page with Deployment U R L / Kibana highlighted." lightbox="media/how-to-elastic-diagnostic-settings/elastic-on-azure-native-microsoft-azure.png":::
+
+1. In Kibana, in the **Search** bar at top, type *Spring Cloud type:dashboard*.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-kibana-spring-cloud-dashboard.png" alt-text="Elastic / Kibana screenshot showing 'Spring Cloud type:dashboard' search results." lightbox="media/how-to-elastic-diagnostic-settings/elastic-kibana-spring-cloud-dashboard.png":::
+
+1. Select **[Logs Azure] Azure Spring Apps logs Overview** from the results.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-kibana-asc-dashboard-full.png" alt-text="Elastic / Kibana screenshot showing Azure Spring Apps Application Console Logs." lightbox="media/how-to-elastic-diagnostic-settings/elastic-kibana-asc-dashboard-full.png":::
+
+1. Search on out-of-the-box Azure Spring Apps dashboards by using the queries such as the following:
+
+ ```query
+ azure.springcloudlogs.properties.app_name : "visits-service"
+ ```
+
+## Analyze the logs with Kibana Query Language in Discover
+
+Application logs provide critical information and verbose logs about your application's health, performance, and more. Use the following steps to analyze the logs:
+
+1. In Kibana, in the **Search** bar at top, type *Discover*, then select the result.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-kibana-go-discover.png" alt-text="Elastic / Kibana screenshot showing 'Discover' search results." lightbox="media/how-to-elastic-diagnostic-settings/elastic-kibana-go-discover.png":::
+
+1. In the **Discover** app, select the **logs-** index pattern if it's not already selected.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-kibana-index-pattern.png" alt-text="Elastic / Kibana screenshot showing logs in the Discover app." lightbox="media/how-to-elastic-diagnostic-settings/elastic-kibana-index-pattern.png":::
+
+1. Use queries such as the ones in the following sections to help you understand your application's current and past states.
+
+For more information about different queries, see [Guide to Kibana Query Language](https://www.elastic.co/guide/en/kibana/current/kuery-query.html).
+
+### Show all logs from Azure Spring Apps
+
+To review a list of application logs from Azure Spring Apps, sorted by time with the most recent logs shown first, run the following query in the **Search** box:
+
+```query
+azure_log_forwarder.resource_type : "Microsoft.AppPlatform/Spring"
+```
++
+### Show specific log types from Azure Spring Apps
+
+To review a list of application logs from Azure Spring Apps, sorted by time with the most recent logs shown first, run the following query in the **Search** box:
+
+```query
+azure.springcloudlogs.category : "ApplicationConsole"
+```
++
+### Show log entries containing errors or exceptions
+
+To review unsorted log entries that mention an error or exception, run the following query:
+
+```query
+azure_log_forwarder.resource_type : "Microsoft.AppPlatform/Spring" and (log.level : "ERROR" or log.level : "EXCEPTION")
+```
++
+The Kibana Query Language helps you form queries by providing autocomplete and suggestions to help you gain insights from the logs. Use your query to find errors, or modify the query terms to find specific error codes or exceptions.
+
+### Show log entries from a specific service
+
+To review log entries that are generated by a specific service, run the following query:
+
+```query
+azure.springcloudlogs.properties.service_name : "sa-petclinic-service"
+```
++
+### Show Config Server logs containing warnings or errors
+
+To review logs from Config Server, run the following query:
+
+```query
+azure.springcloudlogs.properties.type : "ConfigServer" and (log.level : "ERROR" or log.level : "WARN")
+```
++
+### Show Service Registry logs
+
+To review logs from Service Registry, run the following query:
+
+```query
+azure.springcloudlogs.properties.type : "ServiceRegistry"
+```
++
+## Visualizing logs from Azure Spring Apps with Elastic
+
+Kibana allows you to visualize data with Dashboards and a rich ecosystem of visualizations. For more information, see [Dashboard and Visualization](https://www.elastic.co/guide/en/kibana/current/dashboard.html).
+
+Use the following steps to show the various log levels in your logs so you can assess the overall health of the services.
+
+1. From the available fields list on left in **Discover**, search for *log.level* in the search box under the **logs-** index pattern.
+
+1. Select the **log.level** field. From the floating informational panel about **log.level**, select **Visualize**.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-kibana-asc-visualize.png" alt-text="Elastic / Kibana screenshot showing Discover app showing log levels." lightbox="media/how-to-elastic-diagnostic-settings/elastic-kibana-asc-visualize.png":::
+
+1. From here, you can choose to add more data from the left pane, or choose from multiple suggestions how you would like to visualize your data.
+
+ :::image type="content" source="media/how-to-elastic-diagnostic-settings/elastic-kibana-visualize-lens.png" alt-text="Elastic / Kibana screenshot showing Discover app showing visualization options." lightbox="media/how-to-elastic-diagnostic-settings/elastic-kibana-visualize-lens.png":::
+
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](quickstart.md)
+* [Deploy Elastic on Azure](https://www.elastic.co/blog/getting-started-with-the-azure-integration-enhancement)
spring-apps How To Enable Availability Zone https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enable-availability-zone.md
+
+ Title: Create an Azure Spring Apps instance with availability zone enabled
+
+description: How to create an Azure Spring Apps instance with availability zone enabled.
++++ Last updated : 04/14/2022++
+# Create Azure Spring Apps instance with availability zone enabled
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
++
+**This article applies to:** ✔️ Standard tier ✔️ Enterprise tier
+
+> [!NOTE]
+> This feature is not available in Basic tier.
+
+This article explains availability zones in Azure Spring Apps, and how to enable them.
+
+In Microsoft Azure, [Availability Zones (AZ)](../availability-zones/az-overview.md) are unique physical locations within an Azure region. Each zone is made up of one or more data centers that are equipped with independent power, cooling, and networking. Availability zones protect your applications and data from data center failures.
+
+When an Azure Spring Apps service instance is created with availability zone enabled, Azure Spring Apps will automatically distribute fundamental resources across logical sections of underlying Azure infrastructure. This distribution provides a higher level of availability to protect against a hardware failure or a planned maintenance event.
+
+## How to create an instance in Azure Spring Apps with availability zone enabled
+
+>[!NOTE]
+> You can only enable availability zone when creating your instance. You can't enable or disable availability zone after creation of the service instance.
+
+You can enable availability zone in Azure Spring Apps using the [Azure CLI](/cli/azure/install-azure-cli) or [Azure portal](https://portal.azure.com).
+
+### [Azure CLI](#tab/azure-cli)
+
+To create a service in Azure Spring Apps with availability zone enabled using the Azure CLI, include the `--zone-redundant` parameter when you create your service in Azure Spring Apps.
+
+```azurecli
+az spring create \
+ --resource-group <your-resource-group-name> \
+ --name <your-Azure-Spring-Apps-instance-name> \
+ --location <location> \
+ --zone-redundant true
+```
+
+### [Azure portal](#tab/portal)
+
+To create a service in Azure Spring Apps with availability zone enabled using the Azure portal, enable the Zone Redundant option when creating the instance.
+
+![Image of where to enable availability zone using the portal.](media/spring-cloud-availability-zone/availability-zone-portal.png)
+++
+## Region availability
+
+Azure Spring Apps currently supports availability zones in the following regions:
+
+- Australia East
+- Brazil South
+- Canada Central
+- Central US
+- East US
+- East US 2
+- France Central
+- Germany West Central
+- North Europe
+- Japan East
+- Korea Central
+- South Africa North
+- South Central US
+- Southeast Asia
+- UK South
+- West Europe
+- West US 2
+- West US 3
+
+> [!NOTE]
+> The following regions could only be created with availability zone enabled by using Azure CLI, and Azure Portal will coming soon.
+>
+> - Canada Central
+> - Germany West Central
+> - Japan East
+> - Korea Central
+> - South Africa North
+> - Southeast Asia
+> - West US 3
+
+## Pricing
+
+There's no extra cost for enabling the availability zone.
+
+## Next steps
+
+- [Plan for disaster recovery](disaster-recovery.md)
spring-apps How To Enable Ingress To App Tls https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enable-ingress-to-app-tls.md
+
+ Title: Enable ingress-to-app Transport Layer Security in Azure Spring Apps
+
+description: How to enable ingress-to-app Transport Layer Security for an application.
++++ Last updated : 04/12/2022++
+# Enable ingress-to-app TLS for an application
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Standard tier ✔️ Enterprise tier
+
+> [!NOTE]
+> This feature is not available in Basic tier.
+
+This article describes secure communications in Azure Spring Apps. The article also explains how to enable ingress-to-app SSL/TLS to secure traffic from an ingress controller to applications that support HTTPS.
+
+The following picture shows the overall secure communication support in Azure Spring Apps.
++
+## Secure communication model within Azure Spring Apps
+
+This section explains the secure communication model shown in the overview diagram above.
+
+1. The client request from the client to the application in Azure Spring Apps comes into the ingress controller. The request can be either HTTP or HTTPS. The TLS certificate returned by the ingress controller is issued by the Microsoft Azure TLS issuing CA.
+
+ If the app has been mapped to an existing custom domain and is configured as HTTPS only, the request to the ingress controller can only be HTTPS. The TLS certificate returned by the ingress controller is the SSL binding certificate for that custom domain. The server side SSL/TLS verification for the custom domain is done in the ingress controller.
+
+2. The secure communication between the ingress controller and the applications in Azure Spring Apps are controlled by the ingress-to-app TLS. You can also control the communication through the portal or CLI, which will be explained later in this article. If ingress-to-app TLS is disabled, the communication between the ingress controller and the apps in Azure Spring Apps is HTTP. If ingress-to-app TLS is enabled, the communication will be HTTPS and has no relation to the communication between the clients and the ingress controller. The ingress controller won't verify the certificate returned from the apps because the ingress-to-app TLS encrypts the communication.
+
+3. Communication between the apps and the Azure Spring Apps services is always HTTPS and handled by Azure Spring Apps. Such services include config server, service registry, and Eureka server.
+
+4. You manage the communication between the applications. You can also take advantage of Azure Spring Apps features to load certificates into the application's trust store. For more information, see [Use TLS/SSL certificates in an application](./how-to-use-tls-certificate.md).
+
+5. You manage the communication between applications and external services. To reduce your development effort, Azure Spring Apps helps you manage your public certificates and loads them into your application's trust store. For more information, see [Use TLS/SSL certificates in an application](./how-to-use-tls-certificate.md).
+
+## Enable ingress-to-app TLS for an application
+
+The following section shows you how to enable ingress-to-app SSL/TLS to secure traffic from an ingress controller to applications that support HTTPS.
+
+### Prerequisites
+
+- A deployed Azure Spring Apps instance. Follow our [quickstart on deploying via the Azure CLI](./quickstart.md) to get started.
+- If you're unfamiliar with ingress-to-app TLS, see the [end-to-end TLS sample](https://github.com/Azure-Samples/spring-boot-secure-communications-using-end-to-end-tls-ssl).
+- To securely load the required certificates into Spring Boot apps, you can use [spring-cloud-azure-starter-keyvault-certificates](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/spring-cloud-azure-starter-keyvault-certificates).
+
+### Enable ingress-to-app TLS on an existing app
+
+Use the command `az spring app update --enable-ingress-to-app-tls` to enable or disable ingress-to-app TLS for an app.
+
+```azurecli
+az spring app update --enable-ingress-to-app-tls -n app_name -s service_name -g resource_group_name
+az spring app update --enable-ingress-to-app-tls false -n app_name -s service_name -g resource_group_name
+```
+
+### Enable ingress-to-app TLS when you bind a custom domain
+
+Use the command `az spring app custom-domain update --enable-ingress-to-app-tls` or `az spring app custom-domain bind --enable-ingress-to-app-tls` to enable or disable ingress-to-app TLS for an app.
+
+```azurecli
+az spring app custom-domain update --enable-ingress-to-app-tls -n app_name -s service_name -g resource_group_name
+az spring app custom-domain bind --enable-ingress-to-app-tls -n app_name -s service_name -g resource_group_name
+```
+
+### Enable ingress-to-app TLS using the Azure portal
+
+To enable ingress-to-app TLS in the [Azure portal](https://portal.azure.com/), first create an app, and then enable the feature.
+
+1. Create an app in the portal as you normally would. Navigate to it in the portal.
+2. Scroll down to the **Settings** group in the left navigation pane.
+3. Select **Ingress-to-app TLS**.
+4. Switch **Ingress-to-app TLS** to *Yes*.
+
+![Screenshot showing where to enable Ingress-to-app TLS in portal.](./media/enable-end-to-end-tls/enable-i2a-tls.png)
+
+### Verify ingress-to-app TLS status
+
+Use the command `az spring app show` to check the value of `enableEndToEndTls`.
+
+```azurecli
+az spring app show -n app_name -s service_name -g resource_group_name
+```
+
+## Next steps
+
+* [Access Config Server and Service Registry](how-to-access-data-plane-azure-ad-rbac.md)
spring-apps How To Enable System Assigned Managed Identity https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enable-system-assigned-managed-identity.md
+
+ Title: Enable system-assigned managed identity for applications in Azure Spring Apps
+
+description: How to enable system-assigned managed identity for applications.
++++ Last updated : 04/15/2022+
+zone_pivot_groups: spring-apps-tier-selection
++
+# Enable system-assigned managed identity for an application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to enable and disable system-assigned managed identities for an application in Azure Spring Apps, using the Azure portal and CLI.
+
+Managed identities for Azure resources provide an automatically managed identity in Azure Active Directory to an Azure resource such as your application in Azure Spring Apps. You can use this identity to authenticate to any service that supports Azure AD authentication, without having credentials in your code.
+
+## Prerequisites
+
+If you're unfamiliar with managed identities for Azure resources, see the [Managed identities for Azure resources overview section](../active-directory/managed-identities-azure-resources/overview.md).
++
+- An already provisioned Azure Spring Apps Enterprise tier instance. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+- [Azure CLI version 2.30.0 or higher](/cli/azure/install-azure-cli).
+- [!INCLUDE [install-app-user-identity-extension](includes/install-app-user-identity-extension.md)]
+++
+- An already provisioned Azure Spring Apps instance. For more information, see [Quickstart: Deploy your first application to Azure Spring Apps](./quickstart.md).
+- [Azure CLI version 2.30.0 or higher](/cli/azure/install-azure-cli).
+- [!INCLUDE [install-app-user-identity-extension](includes/install-app-user-identity-extension.md)]
++
+## Add a system-assigned identity
+
+Creating an app with a system-assigned identity requires setting an additional property on the application.
+
+### [Portal](#tab/azure-portal)
+
+To set up a managed identity in the portal, first create an app, and then enable the feature.
+
+1. Create an app in the portal as you normally would. Navigate to it in the portal.
+2. Scroll down to the **Settings** group in the left navigation pane.
+3. Select **Identity**.
+4. Within the **System assigned** tab, switch **Status** to *On*. Select **Save**.
++
+### [Azure CLI](#tab/azure-cli)
+
+You can enable system-assigned managed identity during app creation or on an existing app.
+
+### Enable system-assigned managed identity during creation of an app
+
+The following example creates an app named *app_name* with a system-assigned managed identity, as requested by the `--assign-identity` parameter.
+
+```azurecli
+az spring app create \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <service-instance-name> \
+ --system-assigned
+```
+
+### Enable system-assigned managed identity on an existing app**
+
+Use `az spring app identity assign` command to enable the system-assigned identity on an existing app.
+
+```azurecli
+az spring app identity assign \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <service-instance-name> \
+ --system-assigned
+```
+++
+## Obtain tokens for Azure resources
+
+An app can use its managed identity to get tokens to access other resources protected by Azure Active Directory, such as Azure Key Vault. These tokens represent the application accessing the resource, not any specific user of the application.
+
+You may need to [configure the target resource to allow access from your application](../active-directory/managed-identities-azure-resources/howto-assign-access-portal.md). For example, if you request a token to access Key Vault, make sure you have added an access policy that includes your application's identity. Otherwise, your calls to Key Vault will be rejected, even if they include the token. To learn more about which resources support Azure Active Directory tokens, see [Azure services that support Azure AD authentication](../active-directory/managed-identities-azure-resources/services-support-managed-identities.md#azure-services-that-support-azure-ad-authentication).
+
+Azure Spring Apps shares the same endpoint for token acquisition with Azure Virtual Machine. We recommend using Java SDK or spring boot starters to acquire a token. See [How to use VM token](../active-directory/managed-identities-azure-resources/how-to-use-vm-token.md) for various code and script examples and guidance on important topics such as handling token expiration and HTTP errors.
+
+## Disable system-assigned identity from an app
+
+Removing a system-assigned identity will also delete it from Azure AD. Deleting the app resource automatically removes system-assigned identities from Azure AD.
+
+### [Portal](#tab/azure-portal)
+
+To remove system-assigned managed identity from an app that no longer needs it:
+
+1. Sign in to the portal using an account associated with the Azure subscription that contains the Azure Spring Apps instance.
+1. Navigate to the desired application and select **Identity**.
+1. Under **System assigned**/**Status**, select **Off** and then select **Save**:
++
+### [Azure CLI](#tab/azure-cli)
+
+To remove system-assigned managed identity from an app that no longer needs it, use the following command:
+
+```azurecli
+az spring app identity remove \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <service-instance-name> \
+ --system-assigned
+```
+
+## Get the client ID from the object ID (principal ID)
+
+Use the following command to get the client ID from the object/principle ID value:
+
+```azurecli
+az ad sp show --id <object-ID> --query appId
+```
+++
+## Next steps
+
+* [Learn more about managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md)
+* [How to use managed identities with Java SDK](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples)
spring-apps How To Enterprise Application Configuration Service https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enterprise-application-configuration-service.md
+
+ Title: Use Application Configuration Service for Tanzu with Azure Spring Apps Enterprise Tier
+
+description: How to use Application Configuration Service for Tanzu with Azure Spring Apps Enterprise Tier.
++++ Last updated : 02/09/2022+++
+# Use Application Configuration Service for Tanzu
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use Application Configuration Service for VMware Tanzu® with Azure Spring Apps Enterprise Tier.
+
+[Application Configuration Service for Tanzu](https://docs.pivotal.io/tcs-k8s/0-1/) is one of the commercial VMware Tanzu components. It enables the management of Kubernetes-native ConfigMap resources that are populated from properties defined in one or more Git repositories.
+
+With Application Configuration Service for Tanzu, you have a central place to manage external properties for applications across all environments.
+
+## Prerequisites
+
+- An already provisioned Azure Spring Apps Enterprise tier instance with Application Configuration Service for Tanzu enabled. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+ > [!NOTE]
+ > To use Application Configuration Service for Tanzu, you must enable it when you provision your Azure Spring Apps service instance. You cannot enable it after provisioning at this time.
+
+## Manage Application Configuration Service for Tanzu settings
+
+Application Configuration Service for Tanzu supports Azure DevOps, GitHub, GitLab, and Bitbucket for storing your configuration files.
+
+To manage the service settings, open the **Settings** section and add a new entry under the **Repositories** section.
++
+The properties for each entry are described in the following table.
+
+| Property | Required? | Description |
+|-|--|-|
+| Name | Yes | A unique name to label each Git repository. |
+| Patterns | Yes | Patterns to search in Git repositories. For each pattern, use a format like *{application}* or *{application}/{profile}* instead of *{application}-{profile}.yml*, and separate the patterns with commas. For more information, see the [Pattern](./how-to-enterprise-application-configuration-service.md#pattern) section. |
+| URI | Yes | A Git URI (for example, `https://github.com/Azure-Samples/piggymetrics-config` or `git@github.com:Azure-Samples/piggymetrics-config`) |
+| Label | Yes | The branch name to search in the Git repository. |
+| Search path | No | Optional search paths, separated by commas, for searching subdirectories of the Git repository. |
+
+### Pattern
+
+Configuration will be pulled from Git backends using what is defined in a pattern. A pattern is a combination of *{application}/{profile}* as described in the following list.
+
+- *{application}* - The name of an application for which the configuration is being retrieved. The value `application` is considered the default application and includes configuration shared across multiple applications. Any other value specifies a specific application and will include properties for both the specified application and shared properties for the default application.
+- *{profile}* - Optional. The name of a profile for which properties may be retrieved. An empty value, or the value `default`, includes properties that are shared across any and all profiles. Non-default values include properties for the specified profile and properties for the default profile.
+
+### Authentication
+
+The following image shows the three types of repository authentication supported by Application Configuration Service for Tanzu.
++
+- Public repository.
+
+ You don't need extra Authentication configuration when using a public repository. Just select **Public** in the **Authentication** form.
+
+- Private repository with basic authentication.
+
+ The following table shows all the configurable properties used to set up a private Git repository with basic authentication.
+
+ | Property | Required? | Description |
+ |-|--||
+ | username | Yes | The username used to access the repository. |
+ | password | Yes | The password used to access the repository. |
+
+- Private repository with SSH authentication.
+
+ The following table shows all configurable properties used to set up a private Git repository with SSH.
+
+ | Property | Required? | Description |
+ |--|--|-|
+ | Private key | Yes | The private key that identifies the Git user. Passphrase-encrypted private keys aren't supported. |
+ | Host key | No | The host key of the Git server. If you've connected to the server via Git on the command line, the host key is in your *.ssh/known_hosts* file. Don't include the algorithm prefix, because it's specified in `Host key algorithm`. |
+ | Host key algorithm | No | The algorithm for `hostKey`: one of `ssh-dss`, `ssh-rsa`, `ecdsa-sha2-nistp256`, `ecdsa-sha2-nistp384`, and `ecdsa-sha2-nistp521`. (Required if supplying `Host key`). |
+ | Strict host key checking | No | Optional value that indicates whether the backend should be ignored if it encounters an error when using the provided `Host key`. Valid values are `true` and `false`. The default value is `true`. |
+
+To validate access to the target URI, select **Validate**. After validation completes successfully, select **Apply** to update the configuration settings.
+
+## Refresh strategies
+
+Use the following steps to refresh your application configuration after you update the configuration file in the Git repository.
+
+1. Load the configuration to Application Configuration Service for Tanzu.
+
+ The refresh frequency is managed by Azure Spring Apps and fixed to 60 seconds.
+
+1. Load the configuration to your application.
+
+A Spring application holds the properties as the beans of the Spring Application Context via the Environment interface. The following list shows several ways to load the new configurations:
+
+- Restart the application. After restarting, the application will always load the new configuration.
+
+- Call the */actuator/refresh* endpoint exposed on the config client via the Spring Actuator.
+
+ To use this method, add the following dependency to your configuration clientΓÇÖs *pom.xml* file.
+
+ ``` xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ </dependency>
+ ```
+
+ You can also enable the actuator endpoint by adding the following configurations:
+
+ ```properties
+ management.endpoints.web.exposure.include=refresh, bus-refresh, beans, env
+ ```
+
+ After reloading the property sources by calling the */actuator/refresh* endpoint, the attributes bound with `@Value` in the beans having the annotation `@RefreshScope` are refreshed.
+
+ ``` java
+ @Service
+ @Getter @Setter
+ @RefreshScope
+ public class MyService {
+ @Value
+ private Boolean activated;
+ }
+ ```
+
+ Next, use curl with the application endpoint to refresh the new configuration.
+
+ ``` bash
+ curl -X POST http://{app-endpoint}/actuator/refresh
+ ```
+
+## Configure Application Configuration Service for Tanzu settings using the portal
+
+You can configure Application Configuration Service for Tanzu using the portal by following these steps:
+
+1. Select **Application Configuration Service**.
+1. Select **Overview** to view the running state and resources allocated to Application Configuration Service for Tanzu.
+
+ ![Application Configuration Service Overview screen](./media/enterprise/getting-started-enterprise/config-service-overview.png)
+
+1. Select **Settings** and add a new entry in the **Repositories** section with the Git backend information.
+
+1. Select **Validate** to validate access to the target URI. After validation completes successfully, select **Apply** to update the configuration settings.
+
+ ![Application Configuration Service Settings overview](./media/enterprise/getting-started-enterprise/config-service-settings.png)
+
+## Configure Application Configuration Service for Tanzu settings using the CLI
+
+You can configure Application Configuration Service for Tanzu using the CLI, by following these steps:
+
+```azurecli
+az spring application-configuration-service git repo add \
+ --name <entry-name> \
+ --patterns <patterns> \
+ --uri <git-backend-uri> \
+ --label <git-branch-name>
+```
+
+## Use Application Configuration Service for Tanzu with applications using the portal
+
+When you use Application Configuration Service for Tanzu with a Git back end, keep the following items in mind.
+
+To use the centralized configurations, you must bind the app to Application Configuration Service for Tanzu. After binding the app, you'll need to configure which pattern to be used by the app by following these steps:
+
+1. Open the **App binding** tab.
+
+1. Select **Bind app** and choose one app in the dropdown. Select **Apply** to bind.
+
+ :::image type="content" source="media/enterprise/how-to-enterprise-application-configuration-service/config-service-app-bind-dropdown.png" alt-text="Screenshot of where to select the application to bind.":::
+
+ > [!NOTE]
+ > When you change the bind/unbind status, you must restart or redeploy the app to for the binding to take effect.
+
+1. Select **Apps**, then select the [pattern(s)](./how-to-enterprise-application-configuration-service.md#pattern) to be used by the apps.
+
+ a. In the left navigation menu, select **Apps** to view the list all the apps.
+
+ b. Select the target app to configure patterns for from the `name` column.
+
+ c. In the left navigation pane, select **Configuration**, then select **General settings**.
+
+ d. In the **Config file patterns** dropdown, choose one or more patterns from the list.
+
+ :::image type="content" source="media/enterprise/how-to-enterprise-application-configuration-service/config-service-pattern.png" alt-text="Screenshot of the pattern selection screen.":::
+
+ e. Select **Save**
+
+## Use Application Configuration Service for Tanzu with applications using the CLI
+
+You can use Application Configuration Service for Tanzu with applications, by using this command:
+
+```azurecli
+az spring application-configuration-service bind --app <app-name>
+az spring app deploy \
+ --name <app-name> \
+ --artifact-path <path-to-your-JAR-file> \
+ --config-file-pattern <config-file-pattern>
+```
+
+## Next steps
+
+- [Azure Spring Apps](index.yml)
spring-apps How To Enterprise Build Service https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enterprise-build-service.md
+
+ Title: How to Use Tanzu Build Service in Azure Spring Apps Enterprise Tier
+
+description: How to Use Tanzu Build Service in Azure Spring Apps Enterprise Tier
++++ Last updated : 02/09/2022+++
+# Use Tanzu Build Service
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes the extra configuration and functionality included in VMware Tanzu® Build Service™ with Azure Spring Apps Enterprise Tier.
+
+In Azure Spring Apps, the existing Standard tier already supports compiling user source code into [OCI images](https://opencontainers.org/) through [Kpack](https://github.com/pivotal/kpack). Kpack is a Kubernetes (K8s) implementation of [Cloud Native Buildpacks (CNB)](https://buildpacks.io/) provided by VMware. This article provides details about the extra configurations and functionality exposed in the Azure Spring Apps Enterprise tier.
+
+## Build Agent Pool
+
+Tanzu Build Service in the Enterprise tier is the entry point to containerize user applications from both source code and artifacts. There's a dedicated build agent pool that reserves compute resources for a given number of concurrent build tasks. The build agent pool prevents resource contention with your running apps. You can configure the number of resources given to the build agent pool during or after creating a new service instance of Azure Spring Apps using the **VMware Tanzu settings**.
++
+The Build Agent Pool scale set sizes available are:
+
+| Scale Set | CPU/Gi |
+|--||
+| S1 | 2 vCPU, 4 Gi |
+| S2 | 3 vCPU, 6 Gi |
+| S3 | 4 vCPU, 8 Gi |
+| S4 | 5 vCPU, 10 Gi |
+| S5 | 6 vCPU, 12 Gi |
+
+The following image shows the resources given to the Tanzu Build Service Agent Pool after you've successfully provisioned the service instance. You can also update the configured agent pool size.
++
+## Default Builder and Tanzu Buildpacks
+
+In the Enterprise Tier, a default builder is provided within Tanzu Build Service with a list of commercial VMware Tanzu® Buildpacks.
+
+Tanzu Buildpacks make it easier to integrate with other software like New Relic. They're configured as optional and will only run with proper configuration. For more information, see the [Buildpack bindings](#buildpack-bindings) section.
+
+The following list shows the Tanzu Buildpacks available in Azure Spring Apps Enterprise edition:
+
+- tanzu-buildpacks/java-azure
+- tanzu-buildpacks/dotnet-core
+- tanzu-buildpacks/go
+- tanzu-buildpacks/nodejs
+- tanzu-buildpacks/python
+
+For details about Tanzu Buildpacks, see [Using the Tanzu Partner Buildpacks](https://docs.pivotal.io/tanzu-buildpacks/partner-integrations/partner-integration-buildpacks.html).
+
+## Build apps using a custom builder
+
+Besides the `default` builder, you can also create custom builders with the provided buildpacks.
+
+All the builders configured in a Spring Cloud Service instance are listed in the **Build Service** section under **VMware Tanzu components**.
++
+Select **Add** to create a new builder. The image below shows the resources you should use to create the custom builder.
++
+You can also edit a custom builder when the builder isn't used in a deployment. You can update the buildpacks or the [OS Stack](https://docs.pivotal.io/tanzu-buildpacks/stacks.html), but the builder name is read only.
++
+You can delete any custom builder when the builder isn't used in a deployment, but the `default` builder is read only.
+
+When you deploy an app, you can build the app by specifying a specific builder in the command:
+
+```azurecli
+az spring app deploy \
+ --name <app-name> \
+ --builder <builder-name> \
+ --artifact-path <path-to-your-JAR-file>
+```
+
+If the builder isn't specified, the `default` builder will be used. The builder is a resource that continuously contributes to your deployments. The builder provides the latest runtime images and latest buildpacks, including the latest APM agents and so on. When you use a builder to deploy the app, the builder and the bindings under the builder aren't allowed to edit and delete. To apply changes to a builder, save the configuration as a new builder. To delete a builder, remove the deployments that use the builder first.
+
+You can also configure the build environment and build resources by using the following command:
+
+```azurecli
+az spring-cloud app deploy \
+ --name <app-name> \
+ --build-env <key1=value1>, <key2=value2> \
+ --build-cpu <build-cpu-size> \
+ --build-memory <build-memory-size> \
+ --builder <builder-name> \
+ --artifact-path <path-to-your-JAR-file>
+```
+
+If you're using the `tanzu-buildpacks/java-azure` buildpack, we recommend that you set the `BP_JVM_VERSION` environment variable in the `build-env` argument.
+
+When you use a custom builder in an app deployment, the builder can't make edits and deletions. If you want to change the configuration, create a new builder and use the new builder to deploy the app. After you deploy the app with the new builder, the deployment is linked to the new builder. You can then migrate the deployments under the previous builder to the new builder, and make edits and deletions.
+
+## Real-time build logs
+
+A build task will be triggered when an app is deployed from an Azure CLI command. Build logs are streamed in real time as part of the CLI command output. For information on using build logs to diagnose problems, see [Analyze logs and metrics with diagnostics settings](./diagnostic-services.md) .
+
+## Buildpack bindings
+
+You can configure Kpack Images with Service Bindings as described in the [Cloud Native Buildpacks Bindings specification](https://github.com/buildpacks/spec/blob/adbc70f5672e474e984b77921c708e1475e163c1/extensions/bindings.md). Azure Spring Apps Enterprise tier uses Service Bindings to integrate with [Tanzu Partner Buildpacks](https://docs.pivotal.io/tanzu-buildpacks/partner-integrations/partner-integration-buildpacks.html). For example, we use Binding to integrate [Azure Application Insights](../azure-monitor/app/app-insights-overview.md) using the [Paketo Azure Application Insights Buildpack](https://github.com/paketo-buildpacks/azure-application-insights).
+
+Currently, buildpack binding only supports binding the buildpacks listed below. Follow the documentation links listed under each type to configure the properties and secrets for buildpack binding.
+
+- ApplicationInsights
+
+ - [Monitor Apps with Application Insights](./how-to-application-insights.md).
+
+- NewRelic
+
+ - [New Relic Partner Buildpack](https://docs.pivotal.io/tanzu-buildpacks/partner-integrations/partner-integration-buildpacks.html#new-relic).
+ - [New Relic Environment Variables](https://docs.newrelic.com/docs/apm/agents/java-agent/configuration/java-agent-configuration-config-file/#Environment_Variables).
+
+- Dynatrace
+
+ - [Dynatrace Partner Buildpack](https://docs.pivotal.io/tanzu-buildpacks/partner-integrations/partner-integration-buildpacks.html#dynatrace).
+ - [Determine the values for the required environment variables](https://www.dynatrace.com/support/help/shortlink/azure-spring#envvar).
+
+- AppDynamics
+
+ - [AppDynamic Partner Buildpack](https://docs.pivotal.io/tanzu-buildpacks/partner-integrations/partner-integration-buildpacks.html#appdynamics).
+ - [Configure Using the Environment Variables](https://docs.appdynamics.com/21.11/en/application-monitoring/install-app-server-agents/java-agent/monitor-azure-spring-cloud-with-java-agent#MonitorAzureSpringCloudwithJavaAgent-ConfigureUsingtheEnvironmentVariablesorSystemProperties).
+
+- ElasticAPM
+
+ - [ElasticAPM Partner Buildpack](https://docs.pivotal.io/tanzu-buildpacks/partner-integrations/partner-integration-buildpacks.html#elastic-apm).
+ - [Elastic Configuration](https://www.elastic.co/guide/en/apm/agent/java/master/configuration.html).
+
+## Manage buildpack bindings
+
+You can manage buildpack bindings with the Azure portal or the Azure CLI.
+
+> [!NOTE]
+> You can only manage buildpack bindings when the parent builder isn't used by any app deployments. To create, update, or delete buildpack bindings of an existing builder, create a new builder and configure new buildpack bindings there.
+
+### [Portal](#tab/azure-portal)
+
+### View buildpack bindings using the Azure portal
+
+Follow these steps to view the current buildpack bindings:
+
+1. Open the [Azure portal](https://portal.azure.com/?AppPlatformExtension=entdf#home).
+1. Select **Build Service**.
+1. Select **Edit** under the **Bindings** column to view the bindings configured under a builder.
+
+### Unbind a buildpack binding
+
+There are two ways to unbind a buildpack binding. You can either select the **Bound** hyperlink and then select **Unbind binding**, or select **Edit Binding** and then select **Unbind**.
+
+If you unbind a binding, the bind status will change from **Bound** to **Unbound**.
+
+### [Azure CLI](#tab/azure-cli)
+
+### View buildpack bindings using the Azure CLI
+
+View the current buildpack bindings using the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding list \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --builder-name <your-builder-name>
+```
+
+### Create a binding
+
+Use this command to change the binding from **Unbound** to **Bound** status:
+
+```azurecli
+az spring build-service builder buildpack-binding create \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-buildpack-binding-name> \
+ --builder-name <your-builder-name> \
+ --type <your-binding-type> \
+ --properties a=b c=d \
+ --secrets e=f g=h
+```
+
+For information on the `properties` and `secrets` parameters for your buildpack, see the [Buildpack bindings](#buildpack-bindings) section.
+
+### Show the details for a specific binding
+
+You can view the details of a specific binding using the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding show \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-buildpack-binding-name> \
+ --builder-name <your-builder-name>
+```
+
+### Edit the properties of a binding
+
+You can change a binding's properties using the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding set \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-buildpack-binding-name> \
+ --builder-name <your-builder-name> \
+ --type <your-binding-type> \
+ --properties a=b c=d \
+ --secrets e=f2 g=h
+```
+
+For more information on the `properties` and `secrets` parameters for your buildpack, see the [Buildpack bindings](#buildpack-bindings) section.
+
+### Delete a binding
+
+Use the following command to change the binding status from **Bound** to **Unbound**.
+
+```azurecli
+az spring build-service builder buildpack-binding delete \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-buildpack-binding-name> \
+ --builder-name <your-builder-name>
+```
+++
+## Next steps
+
+- [Azure Spring Apps](index.yml)
spring-apps How To Enterprise Deploy Non Java Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enterprise-deploy-non-java-apps.md
+
+ Title: How to Deploy Non-Java Applications in Azure Spring Apps Enterprise Tier
+
+description: How to Deploy Non-Java Applications in Azure Spring Apps Enterprise Tier
++++ Last updated : 02/09/2022+++
+# How to deploy non-Java applications in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to deploy your non-java application to Azure Spring Apps Enterprise tier.
+
+## Prerequisites
+
+- An already provisioned Azure Spring Apps Enterprise tier instance. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+- One or more applications running in Azure Spring Apps. For more information on creating apps, see [How to Deploy Spring Boot applications from Azure CLI](./how-to-launch-from-source.md).
+- [Azure CLI](/cli/azure/install-azure-cli), version 2.0.67 or higher.
+- Your application source code.
+
+## Deploy your application
+
+To deploy from a source code folder your local machine, see [Non-Java application restrictions](#application-restriction).
+
+To deploy the source code folder to an active deployment, use the following command:
+
+```azurecli
+az spring app deploy
+ --resource-group <your-resource-group-name> \
+ --service <your-Azure-Spring-Apps-name> \
+ --name <your-app-name> \
+ --source-path <path-to-source-code>
+```
+
+## Application restriction
+
+Your application must conform to the following restrictions:
+
+- Your application must listen on port 8080. The service checks the port on TCP for readiness and liveness.
+- If your source code contains a package management folder, such as *node_modules*, ensure the folder contains all the dependencies. Otherwise, remove it and let Azure Spring Apps install it.
+- To see whether your source code language is supported and the feature is provided, see the [Support Matrix](#support-matrix) section.
+
+## Support matrix
+
+The following table indicates the features supported for each language.
+
+| Feature | Java | Python | Node | .NET Core | Go |
+|--||--||--|-|
+| App lifecycle management | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Assign endpoint | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Azure Monitor | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Out of box APM integration | ✔️ | ❌ | ❌ | ❌ | ❌ |
+| Blue/green deployment | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Custom domain | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Scaling - auto scaling | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Scaling - manual scaling (in/out, up/down) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Managed Identity | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| API portal for VMware Tanzu® | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Spring Cloud Gateway for VMware Tanzu® | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Application Configuration Service for VMware Tanzu® | ✔️ | ❌ | ❌ | ❌ | ❌ |
+| VMware Tanzu® Service Registry | ✔️ | ❌ | ❌ | ❌ | ❌ |
+| VNET | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Outgoing IP Address | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| E2E TLS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Advanced troubleshooting - thread/heap/JFR dump | ✔️ | ❌ | ❌ | ❌ | ❌ |
+| Bring your own storage | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Integrate service binding with Resource Connector | ✔️ | ❌ | ❌ | ❌ | ❌ |
+| Availability Zone | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| App Lifecycle events | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Reduced app size - 0.5 vCPU and 512 MB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Automate app deployments with Terraform and Azure Pipeline Task | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Soft Deletion | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| Interactive diagnostic experience (AppLens-based) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+| SLA | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
+
+## Next steps
+
+- [Azure Spring Apps](index.yml)
spring-apps How To Enterprise Marketplace Offer https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enterprise-marketplace-offer.md
+
+ Title: How to view the Azure Spring Apps Enterprise Tier offering from Azure Marketplace
+description: How to view the Azure Spring Apps Enterprise Tier offering from Azure Marketplace.
++++ Last updated : 02/09/2022+++
+# View Azure Spring Apps Enterprise Tier offering in Azure Marketplace
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to view the Azure Spring Apps Enterprise Tier with VMware Tanzu offering through Azure Marketplace and how to redirect to the Azure Spring Apps Enterprise tier creation page from Azure Marketplace.
+
+Azure Spring Apps Enterprise Tier is optimized for the needs of enterprise Spring developers through advanced configurability, flexibility, portability, and enterprise-ready VMware Spring Runtime 24x7 support. Developers also benefit from commercial Tanzu components, such as VMware Tanzu® Build Service™, Application Configuration Service for VMware Tanzu®, and VMware Tanzu® Service Registry, and access to Spring experts.
+
+You can obtain and pay for a license to Tanzu components through an [Azure Marketplace offering](https://aka.ms/ascmpoffer). Azure Spring Apps manages the license acquisition so you won't have to do it yourself.
+
+## Prerequisites
+
+To purchase in the Azure Marketplace, you must meet the following prerequisites:
+
+- Your Azure subscription is registered to the `Microsoft.SaaS` resource provider. See how to [register a resource provider](../azure-resource-manager/management/resource-providers-and-types.md#register-resource-provider).
+- Your Azure subscription has an [associated payment method](/marketplace/azure-marketplace-overview#purchasing-requirements). Azure credits or free MSDN subscriptions aren't supported.
+- Your Azure subscription belongs to a billing account in a [Marketplace supported geographic location](../marketplace/marketplace-geo-availability-currencies.md#supported-geographic-locations).
+- Your organization allows [Azure Marketplace purchases](../cost-management-billing/manage/ea-azure-marketplace.md#enabling-azure-marketplace-purchases).
+- Your organization allows acquiring any Azure Marketplace software application listed in [Purchase policy management](/marketplace/azure-purchasing-invoicing#purchase-policy-management).
+
+## View Azure Spring Apps Enterprise Tier offering from Azure Marketplace
+
+To see the offering and read a detailed description, see [Azure Spring Apps Enterprise Tier](https://aka.ms/ascmpoffer).
+
+To see the supported plans in your market, select **Plans + Pricing**.
++
+> [!NOTE]
+> If you see "No plans are available for market '\<Location>'", that means none of your Azure subscriptions can purchase the SaaS offering. For more information, see [No plans are available for market '\<Location>'](./troubleshoot.md#no-plans-are-available-for-market-location) in [Troubleshooting](./troubleshoot.md).
+
+To see the Enterprise Tier creation page, select **Subscribe**
++
+## Next steps
+
+- [Azure Spring Apps](index.yml)
spring-apps How To Enterprise Service Registry https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-enterprise-service-registry.md
+
+ Title: How to Use Tanzu Service Registry with Azure Spring Apps Enterprise tier
+description: How to use Tanzu Service Registry with Azure Spring Apps Enterprise tier.
++++ Last updated : 06/17/2022+++
+# Use Tanzu Service Registry
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use VMware Tanzu® Service Registry with Azure Spring Apps Enterprise tier.
+
+The [Tanzu Service Registry](https://docs.vmware.com/en/Spring-Cloud-Services-for-VMware-Tanzu/2.1/spring-cloud-services/GUID-service-registry-https://docsupdatetracker.net/index.html) is one of the commercial VMware Tanzu components. This component helps you apply the *service discovery* design pattern to your applications.
+
+Service discovery is one of the main ideas of the microservices architecture. Without service discovery, you'd have to hand-configure each client of a service or adopt some form of access convention. This process can be difficult, and the configurations and conventions can be brittle in production. Instead, you can use the Tanzu Service Registry to dynamically discover and invoke registered services in your application.
+
+With Azure Spring Apps Enterprise tier, you don't have to create or start the Service Registry yourself. You can use the Tanzu Service Registry by selecting it when you create your Azure Spring Apps Enterprise tier instance.
+
+## Prerequisites
+
+- An already provisioned Azure Spring Apps Enterprise tier instance with Tanzu Service Registry enabled. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+ > [!NOTE]
+ > To use Tanzu Service Registry, you must enable it when you provision your Azure Spring Apps service instance. You cannot enable it after provisioning at this time.
+
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+
+## Create applications that use Service Registry
+
+In this article, you'll create two services and register them with Azure Spring Apps Service Registry. After registration, one service will be able to use Service Registry to discover and invoke the other service. The following diagram summarizes the required steps:
++
+These steps are described in more detail in the following sections.
+
+1. Create Service A.
+2. Deploy Service A to Azure Spring Apps and register it with Service Registry.
+3. Create Service B and implement it to call Service A.
+4. Deploy Service B and register it with Service Registry.
+5. Invoke Service A through Service B.
+
+## Create environment variables
+
+This article uses the following environment variables. Set these variables to the values you used when you created your Azure Spring Apps Enterprise tier instance.
+
+| Variable | Description |
+|--|--|
+| $RESOURCE_GROUP | Resource group name. |
+| $AZURE_SPRING_APPS_NAME | Azure Spring Apps instance name. |
+
+## Create Service A with Spring Boot
+
+Navigate to [Spring Initializr](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.6.4&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=Sample%20Service%20A&name=Sample%20Service%20A&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.Sample%20Service%20A&dependencies=web,cloud-eureka) to create sample Service A. This link uses the following URL to initialize the settings.
+
+```URL
+https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.6.4&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=Sample%20Service%20A&name=Sample%20Service%20A&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.Sample%20Service%20A&dependencies=web,cloud-eureka
+```
+
+The following screenshot shows Spring Initializr with the required settings.
++
+Next, select **GENERATE** to get a sample project for Spring Boot with the following directory structure.
+
+```text
+Γö£ΓöÇΓöÇ HELP.md
+Γö£ΓöÇΓöÇ mvnw
+Γö£ΓöÇΓöÇ mvnw.cmd
+Γö£ΓöÇΓöÇ pom.xml
+ΓööΓöÇΓöÇ src
+ Γö£ΓöÇΓöÇ main
+ │   ├── java
+ │   │   └── com
+ │   │   └── example
+ │   │   └── Sample
+ │   │   └── Service
+ │   │   └── A
+ │   │   └── SampleServiceAApplication.java
+ │   └── resources
+ │   ├── application.properties
+ │   ├── static
+ │   └── templates
+ ΓööΓöÇΓöÇ test
+ ΓööΓöÇΓöÇ java
+ ΓööΓöÇΓöÇ com
+ ΓööΓöÇΓöÇ example
+ ΓööΓöÇΓöÇ Sample
+ ΓööΓöÇΓöÇ Service
+ ΓööΓöÇΓöÇ A
+ ΓööΓöÇΓöÇ SampleServiceAApplicationTests.java
+```
+
+### Confirm the configuration of dependent libraries for the Service Registry client (Eureka client)
+
+Next, confirm that the *pom.xml* file for the project contains the following dependency. Add the dependency if it's missing.
+
+```xml
+<dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+</dependency>
+```
+
+### Implement the Service Registry client
+
+Add an `@EnableEurekaClient` annotation to the *SampleServiceAApplication.java* file to configure it as a Eureka Client.
+
+```java
+package com.example.Sample.Service.A;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+@SpringBootApplication
+@EnableEurekaClient
+public class SampleServiceAApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SampleServiceAApplication.class, args);
+ }
+}
+```
+
+### Create a REST endpoint for testing
+
+You can now register the service to Service Registry, but you can't verify it until you implement a service endpoint. To create RESTful endpoints that external services can call, add a *ServiceAEndpoint.java* file to your project with the following code.
+
+```java
+package com.example.Sample.Service.A;
+import java.util.Map;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class ServiceAEndpoint {
+
+ @GetMapping("/serviceA")
+ public String getServiceA(){
+ return "This is a result of Service A";
+ }
+
+ @GetMapping("/env")
+ public Map<String, String> getEnv(){
+ Map<String, String> env = System.getenv();
+ return env;
+ }
+}
+```
+
+### Build a Spring Boot application
+
+Now that you have a simple service, compile and build the source code by running the following command:
+
+```bash
+mvn clean package
+```
+
+## Deploy Service A and register with Service Registry
+
+This section explains how to deploy Service A to Azure Spring Apps Enterprise tier and register it with Service Registry.
+
+### Create an Azure Spring Apps application
+
+First, create an application in Azure Spring Apps by using the following command:
+
+```azurecli
+az spring app create \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --name serviceA \
+ --instance-count 1 \
+ --memory 2Gi \
+ --assign-endpoint
+```
+
+The `--assign-endpoint` argument grants a public IP for validation and enables access from the external network.
+
+### Connect to the Service Registry from the app
+
+You've now created a service with Spring Boot and created an application in Azure Spring Apps. The next task is to deploy the application and confirm the operation. Before that, however, you must bind your application to the Service Registry so that it can get connection information from the registry.
+
+Typically, a Eureka client needs to write the following connection information settings in the *application.properties* configuration file of a Spring Boot application so that you can connect to the server:
+
+```properties
+eureka.client.service-url.defaultZone=http://eureka:8761/eureka/
+```
+
+However, if you write these settings directly in your application, you'll need to re-edit and rebuild the project again each time the Service Registry server changes. To avoid this effort, Azure Spring Apps enables your applications to get connection information from the service registry by binding to it. Specifically, after binding the application to the Service Registry, you can get the service registry connection information (`eureka.client.service-url.defaultZone`) from the Java environment variable. In this way, you can connect to the Service Registry by loading the contents of the environment variables when the application starts.
+
+In practice, the following environment variables are added to the `JAVA_TOOL_OPTIONS` variable:
+
+```options
+-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
+```
+
+### Bind a service to the Service Registry
+
+Use the following command to bind the service to Azure Service Registry, enabling it to connect to the server.
+
+```azurecli
+az spring service-registry bind \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --app serviceA
+```
+
+You can also set up the application bindings from the Azure portal, as shown in the following screenshot.
++
+> [!NOTE]
+> These changes will take a few minutes to propagate to all applications when the service registry status changes.
+>
+> If you change the binding/unbinding status, you'll need to restart or redeploy the application.
+
+### Deploy an application to Azure Spring Apps
+
+Now that you've bound your application, you'll deploy the Spring Boot artifact file *Sample-Service-A-A-0.0.1-SNAPSHOT.jar* to Azure Spring Apps. To deploy, use the following command:
+
+```azurecli
+az spring app deploy \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --name serviceA \
+ --artifact-path ./target/Sample-Service-A-0.0.1-SNAPSHOT.jar \
+ --jvm-options="-Xms1024m -Xmx1024m"
+```
+
+Use the following command to see if your deployment is successful.
+
+```azurecli
+az spring app list \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --output table
+```
+
+This command produces output similar to the following example.
+
+```output
+Name Location ResourceGroup Public Url Production Deployment Provisioning State CPU Memory Running Instance Registered Instance Persistent Storage Bind Service Registry Bind Application Configuration Service
+ - - - -- -- -- -- -- -- -
+servicea southeastasia $RESOURCE_GROUP https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io default Succeeded 1 2Gi 1/1 N/A - default -
+```
+
+### Confirm that the Service A application is running
+
+The output of the previous command includes the public URL for the service. To access the RESTful endpoint, append `/serviceA` to the URL, as shown in the following command:
+
+```bash
+curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/serviceA
+```
+
+This command produces the following output.
+
+```output
+This is a result of Service A
+```
+
+Service A includes a RESTful endpoint that displays a list of environment variables. Access the endpoint with `/env` to see the environment variables, as shown in the following command:
+
+```bash
+curl https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io/env
+```
+
+This command produces the following output.
+
+```output
+"JAVA_TOOL_OPTIONS":"-Deureka.client.service-url.defaultZone=https://$AZURE_SPRING_APPS_NAME.svc.azuremicroservices.io/eureka/default/eureka
+```
+
+As you can see, `eureka.client.service-url.defaultZone` has been added to `JAVA_TOOL_OPTIONS`. In this way, the application can register the service to the Service Registry and make it available from other services.
+
+You can now register the service to the Service Registry (Eureka Server) in Azure Spring Apps. Other services can now access the service by using service registry.
+
+## Implement a new Service B that accesses Service A through Service Registry
+
+### Implement Service B with Spring Boot
+
+Navigate to [Spring Initializr](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.6.4&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=Sample%20Service%20B&name=Sample%20Service%20B&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.Sample%20Service%20B&dependencies=web,cloud-eureka) to create a new project for Service B. This link uses the following URL to initialize the settings:
+
+```URL
+https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.6.4&packaging=jar&jvmVersion=11&groupId=com.example&artifactId=Sample%20Service%20B&name=Sample%20Service%20B&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.Sample%20Service%20B&dependencies=web,cloud-eureka
+```
+
+Then, select **GENERATE** to get the new project.
+
+### Implement Service B as a Service Registry client (Eureka client)
+
+Like Service A, add the `@EnableEurekaClient` annotation to Service B to configure it as a Eureka client.
+
+```java
+package com.example.Sample.Service.B;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+@SpringBootApplication
+@EnableEurekaClient
+public class SampleServiceBApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SampleServiceBApplication.class, args);
+ }
+}
+```
+
+### Implement service endpoints in Service B
+
+Next, implement a new service endpoint (`/invoke-serviceA`) that invokes Service A. Add a *ServiceBEndpoint.java* file to your project with the following code.
+
+```java
+package com.example.Sample.Service.B;
+import java.util.List;
+import java.util.stream.Collectors;
+import com.netflix.discovery.EurekaClient;
+import com.netflix.discovery.shared.Application;
+import com.netflix.discovery.shared.Applications;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+@RestController
+public class ServiceBEndpoint {
+ @Autowired
+ private EurekaClient discoveryClient;
+
+ @GetMapping(value = "/invoke-serviceA")
+ public String invokeServiceA()
+ {
+ RestTemplate restTemplate = new RestTemplate();
+ String response = restTemplate.getForObject("http://servicea/serviceA",String.class);
+ return "INVOKE SERVICE A FROM SERVICE B: " + response;
+ }
+
+ @GetMapping(value = "/list-all")
+ public List<String> listsAllServices() {
+ Applications applications = discoveryClient.getApplications();
+ List<Application> registeredApplications = applications.getRegisteredApplications();
+ List<String> appNames = registeredApplications.stream().map(app -> app.getName()).collect(Collectors.toList());
+ return appNames;
+ }
+}
+```
+
+This example uses `RestTemplate` for simplicity. The endpoint returns the response string with another string (`INVOKE SERVICE A FROM SERVICE B: "`) to indicate that it was called by Service B.
+
+This example also implements another endpoint (`/list-all`) for validation. This implementation ensures that the service is communicating correctly with the Service Registry. You can call this endpoint to get the list of applications registered in the Service Registry.
+
+This example invokes Service A as `http://servicea`. The service name is the name that you specified during the creation of the Azure Spring Apps application. (For example: `az spring app create --name ServiceA`.) The application name matches the service name you registered with the service registry, making it easier to manage the service name.
+
+### Build Service B
+
+Use the following command to build your project.
+
+```bash
+mvn clean package
+```
+
+## Deploy Service B to Azure Spring Apps
+
+Use the following command to create an application in Azure Spring Apps to deploy Service B.
+
+```azurecli
+az spring app create \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --name serviceB \
+ --instance-count 1 \
+ --memory 2Gi \
+ --assign-endpoint
+```
+
+Next, use the following command to bind the application to the Service Registry.
+
+```azurecli
+az spring service-registry bind \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --app serviceB
+```
+
+Next, use the following command to deploy the service.
+
+```azurecli
+az spring app deploy \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --name serviceB \
+ --artifact-path ./target/Sample-Service-B-0.0.1-SNAPSHOT.jar \
+ --jvm-options="-Xms1024m -Xmx1024m"
+```
+
+Next, use the following command to check the status of the application.
+
+```azurecli
+az spring app list \
+ --resource-group $RESOURCE_GROUP \
+ --service $AZURE_SPRING_APPS_NAME \
+ --output table
+```
+
+If Service A and Service B are deployed correctly, this command will produce output similar to the following example.
+
+```output
+Name Location ResourceGroup Public Url Production Deployment Provisioning State CPU Memory Running Instance Registered Instance Persistent Storage Bind Service Registry Bind Application Configuration Service
+-- - - -- -- -- -- -- -- -
+servicea southeastasia SpringCloud-Enterprise https://$AZURE_SPRING_APPS_NAME-servicea.azuremicroservices.io default Succeeded 1 2Gi 1/1 1/1 - default -
+serviceb southeastasia SpringCloud-Enterprise https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io default Succeeded 1 2Gi 1/1 1/1 - default -
+```
+
+## Invoke Service A from Service B
+
+The output of the previous command includes the public URL for the service. To access the RESTful endpoint, append `/invoke-serviceA` to the URL, as shown in the following command:
+
+```bash
+curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/invoke-serviceA
+```
+
+This command produces the following output:
+
+```output
+INVOKE SERVICE A FROM SERVICE B: This is a result of Service A
+```
+
+### Get some information from Service Registry
+
+Finally, access the `/list-all` endpoint and retrieve some information from the Service Registry. The following command retrieves a list of services registered in the Service Registry.
+
+```bash
+curl https://$AZURE_SPRING_APPS_NAME-serviceb.azuremicroservices.io/list-all
+```
+
+This command produces the following output.
+
+```output
+["SERVICEA","EUREKA-SERVER","SERVICEB"]
+```
+
+In this way, you can obtain detailed information from the program as needed.
+
+## Next steps
+
+- [Create Roles and Permissions](./how-to-permissions.md)
spring-apps How To Github Actions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-github-actions.md
+
+ Title: Use Azure Spring Apps CI/CD with GitHub Actions
+description: How to build up a CI/CD workflow for Azure Spring Apps with GitHub Actions
++++ Last updated : 09/08/2020+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Use Azure Spring Apps CI/CD with GitHub Actions
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to build up a CI/CD workflow for Azure Spring Apps with GitHub Actions.
+
+GitHub Actions support an automated software development lifecycle workflow. With GitHub Actions for Azure Spring Apps you can create workflows in your repository to build, test, package, release, and deploy to Azure.
+
+## Prerequisites
+
+This example requires the [Azure CLI](/cli/azure/install-azure-cli).
+
+## Set up GitHub repository and authenticate
+
+You need an Azure service principal credential to authorize Azure login action. To get an Azure credential, execute the following commands on your local machine:
+
+```azurecli
+az login
+az ad sp create-for-rbac \
+ --role contributor \
+ --scopes /subscriptions/<SUBSCRIPTION_ID> \
+ --sdk-auth
+```
+
+To access to a specific resource group, you can reduce the scope:
+
+```azurecli
+az ad sp create-for-rbac \
+ --role contributor \
+ --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
+ --sdk-auth
+```
+
+The command should output a JSON object:
+
+```json
+{
+ "clientId": "<GUID>",
+ "clientSecret": "<GUID>",
+ "subscriptionId": "<GUID>",
+ "tenantId": "<GUID>",
+ ...
+}
+```
+
+This example uses the [steeltoe sample on GitHub](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/steeltoe-sample). Fork the repository, open the GitHub repository page for the fork, and select the **Settings** tab. Open the **Secrets** menu, and select **New secret**:
+
+![Add new secret](./media/github-actions/actions1.png)
+
+Set the secret name to `AZURE_CREDENTIALS` and its value to the JSON string that you found under the heading *Set up your GitHub repository and authenticate*.
+
+![Set secret data](./media/github-actions/actions2.png)
+
+You can also get the Azure login credential from Key Vault in GitHub Actions as explained in [Authenticate Azure Spring with Key Vault in GitHub Actions](./github-actions-key-vault.md).
+
+## Provision service instance
+
+To provision your Azure Spring Apps service instance, run the following commands using the Azure CLI.
+
+```azurecli
+az extension add --name spring
+az group create \
+ --name <resource-group-name> \
+ --location eastus
+az spring create \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name>
+az spring config-server git set \
+ --name <service-instance-name> \
+ --uri https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples \
+ --label main \
+ --search-paths steeltoe-sample/config
+```
+
+## Build the workflow
+
+The workflow is defined using the following options.
+
+### Prepare for deployment with Azure CLI
+
+The command `az spring app create` is currently not idempotent. After you run it once, you'll get an error if you run the same command again. We recommend this workflow on existing Azure Spring Apps apps and instances.
+
+Use the following Azure CLI commands for preparation:
+
+```azurecli
+az config set defaults.group=<service-group-name>
+az config set defaults.spring-cloud=<service-instance-name>
+az spring app create --name planet-weather-provider
+az spring app create --name solar-system-weather
+```
+
+### Deploy with Azure CLI directly
+
+Create the *.github/workflows/main.yml* file in the repository with the following content. Replace *\<your resource group name>* and *\<your service name>* with the correct values.
+
+```yaml
+name: Steeltoe-CD
+
+# Controls when the action will run. Triggers the workflow on push or pull request
+# events but only for the main branch
+on:
+ push:
+ branches: [ main]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "build"
+ build:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+ env:
+ working-directory: ./steeltoe-sample
+ resource-group-name: <your resource group name>
+ service-name: <your service name>
+
+ # Supported .NET Core version matrix.
+ strategy:
+ matrix:
+ dotnet: [ '3.1.x' ]
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v2
+
+ # Set up .NET Core 3.1 SDK
+ - uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: ${{ matrix.dotnet }}
+
+ # Set credential for az login
+ - uses: azure/login@v1.1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+ - name: install Azure CLI extension
+ run: |
+ az extension add --name spring --yes
+
+ - name: Build and package planet-weather-provider app
+ working-directory: ${{env.working-directory}}/src/planet-weather-provider
+ run: |
+ dotnet publish
+ az spring app deploy -n planet-weather-provider --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll --artifact-path ./publish-deploy-planet.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
+ - name: Build solar-system-weather app
+ working-directory: ${{env.working-directory}}/src/solar-system-weather
+ run: |
+ dotnet publish
+ az spring app deploy -n solar-system-weather --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll --artifact-path ./publish-deploy-solar.zip -s ${{ env.service-name }} -g ${{ env.resource-group-name }}
+```
+++
+## Set up GitHub repository and authenticate
+
+You need an Azure service principal credential to authorize Azure login action. To get an Azure credential, execute the following commands on your local machine:
+
+```azurecli
+az login
+az ad sp create-for-rbac \
+ --role contributor \
+ --scopes /subscriptions/<SUBSCRIPTION_ID> \
+ --sdk-auth
+```
+
+To access to a specific resource group, you can reduce the scope:
+
+```azurecli
+az ad sp create-for-rbac \
+ --role contributor \
+ --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
+ --sdk-auth
+```
+
+The command should output a JSON object:
+
+```JSON
+{
+ "clientId": "<GUID>",
+ "clientSecret": "<GUID>",
+ "subscriptionId": "<GUID>",
+ "tenantId": "<GUID>",
+ ...
+}
+```
+
+This example uses the [PiggyMetrics](https://github.com/Azure-Samples/piggymetrics) sample on GitHub. Fork the sample, open GitHub repository page, and select the **Settings** tab. Open **Secrets** menu, and select **Add a new secret**:
+
+![Add new secret](./media/github-actions/actions1.png)
+
+Set the secret name to `AZURE_CREDENTIALS` and its value to the JSON string that you found under the heading *Set up your GitHub repository and authenticate*.
+
+![Set secret data](./media/github-actions/actions2.png)
+
+You can also get the Azure login credential from Key Vault in GitHub Actions as explained in [Authenticate Azure Spring with Key Vault in GitHub Actions](./github-actions-key-vault.md).
+
+## Provision service instance
+
+To provision your Azure Spring Apps service instance, run the following commands using the Azure CLI.
+
+```azurecli
+az extension add --name spring
+az group create --location eastus --name <resource group name>
+az spring create -n <service instance name> -g <resource group name>
+az spring config-server git set -n <service instance name> --uri https://github.com/xxx/piggymetrics --label config
+```
+
+## End-to-end sample workflows
+
+The following examples demonstrate common usage scenarios.
+
+### Deploying
+
+The following sections show you various options for deploying your app.
+
+#### To production
+
+Azure Spring Apps supports deploying to deployments with built artifacts (e.g., JAR or .NET Core ZIP) or source code archive.
+The following example deploys to the default production deployment in Azure Spring Apps using JAR file built by Maven. This is the only possible deployment scenario when using the Basic SKU:
+
+> [!NOTE]
+> The package search pattern should only return exactly one package. If the build task produces multiple JAR packages such as *sources.jar* and *javadoc.jar*, you need to refine the search pattern so that it only matches the application binary artifact.
+
+```yml
+name: AzureSpringCloud
+on: push
+env:
+ ASC_PACKAGE_PATH: ${{ github.workspace }}
+ AZURE_SUBSCRIPTION: <azure subscription name>
+
+jobs:
+ deploy_to_production:
+ runs-on: ubuntu-latest
+ name: deploy to production with artifact
+ steps:
+ - name: Checkout GitHub Action
+ uses: actions/checkout@v2
+
+ - name: Set up JDK 1.8
+ uses: actions/setup-java@v1
+ with:
+ java-version: 1.8
+
+ - name: maven build, clean
+ run: |
+ mvn clean package
+
+ - name: Login via Azure CLI
+ uses: azure/login@v1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+ - name: deploy to production with artifact
+ uses: azure/spring-cloud-deploy@v1
+ with:
+ azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
+ action: Deploy
+ service-name: <service instance name>
+ app-name: <app name>
+ use-staging-deployment: false
+ package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
+```
+
+The following example deploys to the default production deployment in Azure Spring Apps using source code.
+
+```yml
+name: AzureSpringCloud
+on: push
+env:
+ ASC_PACKAGE_PATH: ${{ github.workspace }}
+ AZURE_SUBSCRIPTION: <azure subscription name>
+
+jobs:
+ deploy_to_production:
+ runs-on: ubuntu-latest
+ name: deploy to production with soruce code
+ steps:
+ - name: Checkout GitHub Action
+ uses: actions/checkout@v2
+
+ - name: Login via Azure CLI
+ uses: azure/login@v1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+ - name: deploy to production step with soruce code
+ uses: azure/spring-cloud-deploy@v1
+ with:
+ azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
+ action: deploy
+ service-name: <service instance name>
+ app-name: <app name>
+ use-staging-deployment: false
+ package: ${{ env.ASC_PACKAGE_PATH }}
+```
+
+#### Blue-green
+
+The following examples deploy to an existing staging deployment. This deployment won't receive production traffic until it is set as a production deployment. You can set use-staging-deployment true to find the staging deployment automatically or just allocate specific deployment-name. We will only focus on the spring-cloud-deploy action and leave out the preparatory jobs in the rest of the article.
+
+```yml
+# environment preparation configurations omitted
+ steps:
+ - name: blue green deploy step use-staging-deployment
+ uses: azure/spring-cloud-deploy@v1
+ with:
+ azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
+ action: deploy
+ service-name: <service instance name>
+ app-name: <app name>
+ use-staging-deployment: true
+ package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
+```
+
+```yml
+# environment preparation configurations omitted
+ steps:
+ - name: blue green deploy step with deployment-name
+ uses: azure/spring-cloud-deploy@v1
+ with:
+ azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
+ action: deploy
+ service-name: <service instance name>
+ app-name: <app name>
+ deployment-name: staging
+ package: ${{ env.ASC_PACKAGE_PATH }}/**/*.jar
+```
+
+For more information on blue-green deployments, including an alternative approach, see [Blue-green deployment strategies](./concepts-blue-green-deployment-strategies.md).
+
+### Setting production deployment
+
+The following example will set the current staging deployment as production, effectively swapping which deployment will receive production traffic.
+
+```yml
+# environment preparation configurations omitted
+ steps:
+ - name: set production deployment step
+ uses: azure/spring-cloud-deploy@v1
+ with:
+ azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
+ action: set-production
+ service-name: <service instance name>
+ app-name: <app name>
+ use-staging-deployment: true
+```
+### Deleting a staging deployment
+
+The "Delete Staging Deployment" action allows you to delete the deployment not receiving production traffic. This frees up resources used by that deployment and makes room for a new staging deployment:
+
+```yml
+# environment preparation configurations omitted
+ steps:
+ - name: Delete staging deployment step
+ uses: azure/spring-cloud-deploy@v1
+ with:
+ azure-subscription: ${{ env.AZURE_SUBSCRIPTION }}
+ action: delete-staging-deployment
+ service-name: <service instance name>
+ app-name: <app name>
+```
+
+## Deploy with Maven Plugin
+
+Another option is to use the [Maven Plugin](./quickstart.md) for deploying the Jar and updating App settings. The command `mvn azure-spring-apps:deploy` is idempotent and will automatically create Apps if needed. You don't need to create corresponding apps in advance.
+
+```yaml
+name: AzureSpringCloud
+on: push
+
+jobs:
+ build-and-deploy:
+ runs-on: ubuntu-latest
+ steps:
+
+ - uses: actions/checkout@main
+
+ - name: Set up JDK 1.8
+ uses: actions/setup-java@v1
+ with:
+ java-version: 1.8
+
+ - name: maven build, clean
+ run: |
+ mvn clean package -DskipTests
+
+ # Maven plugin can cosume this authentication method automatically
+ - name: Azure Login
+ uses: azure/login@v1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+ # Maven deploy, make sure you have correct configurations in your pom.xml
+ - name: deploy to Azure Spring Apps using Maven
+ run: |
+ mvn azure-spring-apps:deploy
+```
++
+## Run the workflow
+
+GitHub **Actions** should be enabled automatically after you push *.github/workflow/main.yml* to GitHub. The action will be triggered when you push a new commit. If you create this file in the browser, your action should have already run.
+
+To verify that the action has been enabled, select the **Actions** tab on the GitHub repository page:
+
+![Verify action enabled](./media/github-actions/actions3.png)
+
+If your action runs in error, for example, if you haven't set the Azure credential, you can rerun checks after fixing the error. On the GitHub repository page, select **Actions**, select the specific workflow task, and then select the **Rerun checks** button to rerun checks:
+
+![Rerun checks](./media/github-actions/actions4.png)
+
+## Next steps
+
+* [Authenticate Azure Spring Apps with Azure Key Vault in GitHub Actions](./github-actions-key-vault.md)
+* [Azure Active Directory service principals](/cli/azure/ad/sp#az-ad-sp-create-for-rbac)
+* [GitHub Actions for Azure](https://github.com/Azure/actions/)
spring-apps How To Integrate Azure Load Balancers https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-integrate-azure-load-balancers.md
+
+ Title: Tutorial - Integrate Azure Spring Apps with Azure Load Balance Solutions
+description: How to integrate Azure Spring Apps with Azure Load Balance Solutions
++++ Last updated : 04/20/2020+++
+# Integrate Azure Spring Apps with Azure Load Balance Solutions
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Azure Spring Apps supports Spring applications on Azure. Increasing business can require multiple data centers with management of multiple instances of Azure Spring Apps.
+
+Azure already provides different load-balance solutions. There are three options to integrate Azure Spring Apps with Azure load-balance solutions:
+
+1. Integrate Azure Spring Apps with Azure Traffic Manager
+2. Integrate Azure Spring Apps with Azure App Gateway
+3. Integrate Azure Spring Apps with Azure Front Door
+
+## Prerequisites
+
+* Azure Spring Apps: [How to create an Azure Spring Apps service](./quickstart.md)
+* Azure Traffic
+* Azure App Gateway: [How to create an application gateway](../application-gateway/quick-create-portal.md)
+* Azure Front Door: [How to create a front door](../frontdoor/quickstart-create-front-door.md)
+
+## Integrate Azure Spring Apps with Azure Traffic Manager
+
+To integrate Azure Spring Apps with Traffic Manager, add its public endpoints as traffic managerΓÇÖs endpoints and then configure custom domain for both traffic manager and Azure Spring Apps.
+
+### Add Endpoint in Traffic Manager
+
+Add endpoints in traffic
+
+1. Specify **Type** to be *External endpoint*.
+1. Input fully qualified domain name (FQDN) of each Azure Spring Apps public endpoint.
+1. Select **OK**.
+
+ ![Traffic Manager 1](media/spring-cloud-load-balancers/traffic-manager-1.png)
+ ![Traffic Manager 2](media/spring-cloud-load-balancers/traffic-manager-2.png)
+
+### Configure Custom Domain
+
+To finish the configuration:
+
+1. Sign in to the website of your domain provider, and create a CNAME record mapping from your custom domain to traffic managerΓÇÖs Azure default domain name.
+1. Follow instructions [How to add custom domain to Azure Spring Apps](./tutorial-custom-domain.md).
+1. Add above custom domain binding to traffic manager to Azure Spring Apps corresponding app service and upload SSL certificate there.
+
+ ![Traffic Manager 3](media/spring-cloud-load-balancers/traffic-manager-3.png)
+
+## Integrate Azure Spring Apps with Azure App Gateway
+
+To integrate with Azure Spring Apps service, complete the following configurations:
+
+### Configure Backend Pool
+
+1. Specify **Target type** as *IP address* or *FQDN*.
+1. Enter your Azure Spring Apps public endpoints.
+
+ ![App Gateway 1](media/spring-cloud-load-balancers/app-gateway-1.png)
+
+### Add Custom Probe
+
+1. Select **Health Probes** then **Add** to open custom **Probe** dialog.
+1. The key point is to select *Yes* for **Pick host name from backend HTTP settings** option.
+
+ ![App Gateway 2](media/spring-cloud-load-balancers/app-gateway-2.png)
+
+### Configure Http Setting
+
+1. Select **Http Settings** then **Add** to add an HTTP setting.
+1. **Override with new host name:** select *Yes*.
+1. **Host name override**: select **Pick host name from backend target**.
+1. **Use custom probe**: select *Yes* and pick the custom probe created above.
+
+ ![App Gateway 3](media/spring-cloud-load-balancers/app-gateway-3.png)
+
+### Configure Rewrite Set
+
+1. Select **Rewrites** then **Rewrite set** to add a rewrite set.
+1. Select the routing rules that route requests to Azure Spring Apps public endpoints.
+1. On **Rewrite rule configuration** tab, select **Add rewrite rule**.
+1. **Rewrite type**: select **Request Header**
+1. **Action type**: select **Delete**
+1. **Header name**: select **Common header**
+1. **Common Header**: select **X-Forwarded-Proto**
+
+ ![App Gateway 4](media/spring-cloud-load-balancers/app-gateway-4.png)
+
+## Integrate Azure Spring Apps with Azure Front Door
+
+To integrate with Azure Spring Apps service and configure backend pool, use the following steps:
+
+1. **Add backend pool**.
+1. Specify the backend endpoint by adding host.
+
+ ![Front Door 1](media/spring-cloud-load-balancers/front-door-1.png)
+
+1. Specify **backend host type** as *custom host*.
+1. Input FQDN of your Azure Spring Apps public endpoints in **backend host name**.
+1. Accept the **backend host header** default, which is the same as **backend host name**.
+
+ ![Front Door 2](media/spring-cloud-load-balancers/front-door-2.png)
+
+## Next steps
+
+* [How to create a traffic manager](../traffic-manager/quickstart-create-traffic-manager-profile.md)
+* [How to create an application gateway](../application-gateway/quick-create-portal.md)
+* [How to create a front door](../frontdoor/quickstart-create-front-door.md)
spring-apps How To Intellij Deploy Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-intellij-deploy-apps.md
+
+ Title: "Tutorial: Deploy Spring Boot applications using IntelliJ"
+
+description: Use IntelliJ to deploy applications to Azure Spring Apps.
++++ Last updated : 06/24/2022+++
+# Deploy Spring Boot applications using IntelliJ
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+The IntelliJ plug-in for Azure Spring Apps supports application deployment from IntelliJ IDEA.
+
+Before running this example, you can try the [basic quickstart](./quickstart.md).
+
+## Prerequisites
+
+* [IntelliJ IDEA, Community/Ultimate Edition, version 2020.1/2020.2](https://www.jetbrains.com/idea/download/#section=windows)
+
+## Install the plug-in
+
+You can add the Azure Toolkit for IntelliJ IDEA 3.51.0 from the IntelliJ **Plugins** UI.
+
+1. Start IntelliJ. If you have opened a project previously, close the project to show the welcome dialog. Select **Configure** from link lower right, and then select **Plugins** to open the plug-in configuration dialog, and select **Install Plugins from disk**.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/configure-plugin.png" alt-text="Screenshot of IntelliJ IDEA Welcome dialog box with Configure element highlighted.":::
+
+1. Search for Azure Toolkit for IntelliJ. Select **Install**.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/install-plugin.png" alt-text="Screenshot of IntelliJ IDEA Plugins dialog box with Install button highlighted.":::
+
+1. Select **Restart IDE**.
+
+## Tutorial procedures
+
+The following procedures deploy a Hello World application using IntelliJ IDEA.
+
+* Open the gs-spring-boot project
+* Deploy to Azure Spring Apps
+* Show streaming logs
+
+## Open gs-spring-boot project
+
+1. Download and unzip the source repository for this tutorial, or clone it using the following Git command: `git clone https://github.com/spring-guides/gs-spring-boot.git`
+1. Navigate to the *gs-spring-boot\complete* folder.
+1. Open IntelliJ **Welcome** dialog, select **Import Project** to open the import wizard.
+1. Select the *gs-spring-boot\complete* folder.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/import-project.png" alt-text="Screenshot of IntelliJ IDEA Open File or Project dialog box with complete folder highlighted." lightbox="media/how-to-intellij-deploy-apps/import-project.png":::
+
+## Deploy to Azure Spring Apps
+
+In order to deploy to Azure you must sign-in with your Azure account, and choose your subscription. For sign-in details, see [Installation and sign-in](/azure/developer/java/toolkit-for-intellij/create-hello-world-web-app#installation-and-sign-in).
+
+1. Right-click your project in IntelliJ project explorer, and select **Azure** -> **Deploy to Azure Spring Apps**.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/deploy-to-azure-menu-option.png" alt-text="Screenshot of IntelliJ IDEA context menu with Deploy to Azure Spring Apps option highlighted." lightbox="media/how-to-intellij-deploy-apps/deploy-to-azure-menu-option.png":::
+
+1. Accept the name for app in the **Name** field. **Name** refers to the configuration, not app name. Users don't usually need to change it.
+1. Accept the identifier from the project for the **Artifact**.
+1. Select **App:** then click **+** to create an Azure Spring Apps instance.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/deploy-to-azure-dialog-box.png" alt-text="Screenshot of IntelliJ IDEA Deploy Azure Spring app dialog box with plus button highlighted." lightbox="media/how-to-intellij-deploy-apps/deploy-to-azure-dialog-box.png":::
+
+1. Enter **App name**, then select **OK**.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/create-azure-spring-app-dialog-box.png" alt-text="Screenshot of IntelliJ IDEA Create Azure Spring App dialog box with App name field in focus.":::
+
+1. Start the deployment by selecting the **Run** button.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/run-button.png" alt-text="Screenshot of IntelliJ IDEA showing Run button." lightbox="media/how-to-intellij-deploy-apps/run-button.png":::
+
+1. The plug-in will run the command `mvn package` on the project and then create the new app and deploy the jar generated by the `package` command.
+
+1. If the app URL is not shown in the output window, get it from the Azure portal. Navigate from your resource group to the instance of Azure Spring Apps. Then select **Apps**. The running app will be listed. Select the app, then copy the **URL** or **Test Endpoint**.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/get-test-url.png" alt-text="Screenshot of Azure portal showing the app overview page with the URL and Test Endpoint fields highlighted." lightbox="media/how-to-intellij-deploy-apps/get-test-url.png":::
+
+1. Navigate to the URL or Test Endpoint in the browser.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/navigate-in-browser.png" alt-text="Screenshot of the app running in a browser displaying the message Greetings from Spring Boot.":::
+
+## Show streaming logs
+
+To get the logs:
+
+1. Select **Azure Explorer**, then **Spring Apps**.
+1. Right-click the running app.
+1. Select **Streaming Log** from the drop-down list.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/streaming-logs.png" alt-text="Screenshot of IntelliJ IDEA context menu with the Streaming Log option highlighted.":::
+
+1. Select instance.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/select-instance.png" alt-text="Screenshot of the IntelliJ IDEA Select Instance dialog box.":::
+
+1. The streaming log will be visible in the output window.
+
+ :::image type="content" source="media/how-to-intellij-deploy-apps/streaming-log-output.png" alt-text="Screenshot of the IntelliJ IDEA showing the streaming log in the output window." lightbox="media/how-to-intellij-deploy-apps/streaming-log-output.png":::
+
+## Next steps
+
+* [Prepare Spring application for Azure Spring Apps](how-to-prepare-app-deployment.md)
+* [Learn more about Azure Toolkit for IntelliJ](/azure/developer/java/toolkit-for-intellij/)
spring-apps How To Launch From Source https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-launch-from-source.md
+
+ Title: How to Deploy Spring Boot applications from Azure CLI
+description: In this quickstart, learn how to launch your application in Azure Spring Apps directly from your source code
+++ Last updated : 11/12/2021++++
+# How to Deploy Spring Boot applications from Azure CLI
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Azure Spring Apps enables Spring Boot applications on Azure.
+
+You can launch applications directly from Java source code or from a pre-built JAR. This article explains the deployment procedures.
+
+This quickstart explains how to:
+
+> [!div class="checklist"]
+> * Provision a service instance
+> * Set a configuration server for an instance
+> * Build an application locally
+> * Deploy each application
+> * Assign a public endpoint for your application
+
+## Prerequisites
+
+Before you begin, ensure that your Azure subscription has the required dependencies:
+
+1. [Install Git](https://git-scm.com/)
+2. [Install JDK 8](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
+3. [Install Maven 3.0 or above](https://maven.apache.org/download.cgi)
+4. [Install the Azure CLI](/cli/azure/install-azure-cli)
+5. [Sign up for an Azure subscription](https://azure.microsoft.com/free/)
+
+> [!TIP]
+> The Azure Cloud Shell is a free interactive shell that you can use to run the steps in this article. It has common Azure tools preinstalled, including the latest versions of Git, JDK, Maven, and the Azure CLI. If you are logged in to your Azure subscription, launch your [Azure Cloud Shell](https://shell.azure.com) from shell.azure.com. You can learn more about Azure Cloud Shell by [reading our documentation](../cloud-shell/overview.md)
+
+## Install the Azure CLI extension
+
+Install the Azure Spring Apps extension for the Azure CLI with the following command
+
+```azurecli
+az extension add --name spring
+```
+
+## Provision a service instance using the Azure CLI
+
+Sign in to the Azure CLI and choose your active subscription.
+
+```azurecli
+az login
+az account list -o table
+az account set --subscription
+```
+
+Create a resource group to contain your service in Azure Spring Apps. You can learn more about [Azure Resource Groups](../azure-resource-manager/management/overview.md).
+
+```azurecli
+az group create --location eastus --name <resource-group-name>
+```
+
+Run the following commands to provision an instance of Azure Spring Apps. Prepare a name for your service in Azure Spring Apps. The name must be between 4 and 32 characters and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+
+```azurecli
+az spring create --resource-group <resource-group-name> --name <resource-name>
+```
+
+The service instance will take about five minutes to deploy.
+
+Set your default resource group name and Azure Spring Apps instance name using the following commands:
+
+```azurecli
+az config set defaults.group=<service-group-name>
+az config set defaults.spring-cloud=<service-instance-name>
+```
+
+## Create the application in Azure Spring Apps
+
+The following command creates an application in Azure Spring Apps in your subscription. This creates an empty service to which you can upload your application.
+
+```azurecli
+az spring app create --name <app-name>
+```
+
+## Deploy your Spring Boot application
+
+You can deploy your application from a pre-built JAR or from a Gradle or Maven repository. Find instructions for each case below.
+
+### Deploy a pre-built JAR
+
+To deploy from a JAR built on your local machine, ensure that your build produces a [fat-JAR](https://docs.spring.io/spring-boot/docs/current/reference/html/howto-build.html#howto-create-an-executable-jar-with-maven).
+
+To deploy the fat-JAR to an active deployment
+
+```azurecli
+az spring app deploy --name <app-name> --jar-path <path-to-fat-JAR>
+```
+
+To deploy the fat-JAR to a specific deployment
+
+```azurecli
+az spring app deployment create --app <app-name> \
+ --name <deployment-name> \
+ --jar-path <path-to-fat-JAR>
+```
+
+### Deploy from source code
+
+Azure Spring Apps uses [kpack](https://github.com/pivotal/kpack) to build your project. You can use Azure CLI to upload your source code, build your project using kpack, and deploy it to the target application.
+
+> [!WARNING]
+> The project must produce only one JAR file with a `main-class` entry in the `MANIFEST.MF` in `target` (for Maven deployments) or `build/libs` (for Gradle deployments). Multiple JAR files with `main-class` entries will cause the deployment to fail.
+
+For single module Maven / Gradle projects:
+
+```azurecli
+cd <path-to-maven-or-gradle-source-root>
+az spring app deploy --name <app-name>
+```
+
+For Maven / Gradle projects with multiple modules, repeat for each module:
+
+```azurecli
+cd <path-to-maven-or-gradle-source-root>
+az spring app deploy --name <app-name> \
+ --target-module <relative-path-to-module>
+```
+
+### Show deployment logs
+
+Review the kpack build logs using the following command:
+
+```azurecli
+az spring app show-deploy-log --name <app-name>
+```
+
+> [!NOTE]
+> The kpack logs will only show the latest deployment if that deployment was built from source using kpack.
+
+## Assign a public endpoint to gateway
+
+1. Open the **Application Dashboard** page.
+2. Select the `gateway` application to show the **Application Details** page.
+3. Select **Assign endpoint** to assign a public endpoint to gateway. This can take a few minutes.
+4. Enter the assigned public IP into your browser to view your running application.
+
+> [!div class="nextstepaction"]
+> [I ran into an issue](https://www.research.net/r/javae2e?tutorial=asc-source-quickstart&step=public-endpoint)
+
+## Next steps
+
+In this quickstart, you learned how to:
+
+> [!div class="checklist"]
+> * Provision a service instance
+> * Set a configuration server for an instance
+> * Build an application locally
+> * Deploy each application
+> * Edit environment variables for applications
+> * Assign public IP for your application gateway
+
+> [!div class="nextstepaction"]
+> [Quickstart: Monitoring Azure Spring Apps with logs, metrics, and tracing](./quickstart-logs-metrics-tracing.md)
+
+More samples are available on GitHub: [Azure Spring Apps Samples](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/service-binding-cosmosdb-sql).
spring-apps How To Log Streaming https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-log-streaming.md
+
+ Title: Stream Azure Spring Apps app logs in real-time
+description: How to use log streaming to view application logs instantly
++++ Last updated : 01/14/2019+++
+# Stream Azure Spring Apps app logs in real-time
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Azure Spring Apps enables log streaming in Azure CLI to get real-time application console logs for troubleshooting. You can also [Analyze logs and metrics with diagnostics settings](./diagnostic-services.md).
+
+## Prerequisites
+
+* [Azure CLI](/cli/azure/install-azure-cli) with the Azure Spring Apps extension, minimum version 1.0.0. You can install the extension by using the following command: `az extension add --name spring`
+* An instance of **Azure Spring Apps** with a running application. For more information, see [Quickstart: Deploy your first application to Azure Spring Apps](./quickstart.md).
+
+## Use CLI to tail logs
+
+To avoid repeatedly specifying your resource group and service instance name, set your default resource group name and cluster name.
+
+```azurecli
+az config set defaults.group=<service group name>
+az config set defaults.spring-cloud=<service instance name>
+```
+
+In following examples, the resource group and service name will be omitted in the commands.
+
+### Tail log for app with single instance
+
+If an app named auth-service has only one instance, you can view the log of the app instance with the following command:
+
+```azurecli
+az spring app logs --name <application name>
+```
+
+This will return logs similar to the following examples, where `auth-service` is the application name.
+
+```output
+...
+2020-01-15 01:54:40.481 INFO [auth-service,,,] 1 [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+2020-01-15 01:54:40.482 INFO [auth-service,,,] 1 [main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.22]
+2020-01-15 01:54:40.760 INFO [auth-service,,,] 1 [main] o.a.c.c.C.[Tomcat].[localhost].[/uaa] : Initializing Spring embedded WebApplicationContext
+2020-01-15 01:54:40.760 INFO [auth-service,,,] 1 [main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 7203 ms
+
+...
+```
+
+### Tail log for app with multiple instances
+
+If multiple instances exist for the app named `auth-service`, you can view the instance log by using the `-i/--instance` option.
+
+First, you can get the app instance names with following command.
+
+```azurecli
+az spring app show --name auth-service --query properties.activeDeployment.properties.instances --output table
+```
+
+This command produces results similar to the following output:
+
+```output
+Name Status DiscoveryStatus
+- -- --
+auth-service-default-12-75cc4577fc-pw7hb Running UP
+auth-service-default-12-75cc4577fc-8nt4m Running UP
+auth-service-default-12-75cc4577fc-n25mh Running UP
+```
+
+Then, you can stream logs of an app instance with the option `-i/--instance` option:
+
+```azurecli
+az spring app logs --name auth-service --instance auth-service-default-12-75cc4577fc-pw7hb
+```
+
+You can also get details of app instances from the Azure portal. After selecting **Apps** in the left navigation pane of your Azure Spring Apps service, select **App Instances**.
+
+### Continuously stream new logs
+
+By default, `az spring app logs` prints only existing logs streamed to the app console and then exits. If you want to stream new logs, add `-f/--follow`:
+
+```azurecli
+az spring app logs --name auth-service --follow
+```
+
+When you use `--follow` to tail instant logs, the Azure Spring Apps log streaming service will send heartbeat logs to the client every minute unless your application is writing logs constantly. These heartbeat log messages look like `2020-01-15 04:27:13.473: No log from server`.
+
+To check all the logging options supported:
+
+```azurecli
+az spring app logs --help
+```
+
+### Format JSON structured logs
+
+> [!NOTE]
+> Requires spring extension version 2.4.0 or later.
+
+When the [Structured application log](./structured-app-log.md) is enabled for the app, the logs are printed in JSON format. This makes it difficult to read. The `--format-json` argument can be used to format the JSON logs into human readable format.
+
+```azurecli
+# Raw JSON log
+$ az spring app logs --name auth-service
+{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Disable delta property : false"}
+{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Single vip registry refresh property : null"}
+
+# Formatted JSON log
+$ az spring app logs --name auth-service --format-json
+2021-05-26T03:35:27.533Z INFO [ main] com.netflix.discovery.DiscoveryClient : Disable delta property : false
+2021-05-26T03:35:27.533Z INFO [ main] com.netflix.discovery.DiscoveryClient : Single vip registry refresh property : null
+```
+
+The `--format-json` argument also takes optional customized format, using the keyword argument [format string syntax](https://docs.python.org/3/library/string.html#format-string-syntax).
+
+```azurecli
+# Custom format
+$ az spring app logs --name auth-service --format-json="{message}{n}"
+Disable delta property : false
+Single vip registry refresh property : null
+```
+
+> The default format being used is:
+>
+> ```format
+> {timestamp} {level:>5} [{thread:>15.15}] {logger{39}:<40.40}: {message}{n}{stackTrace}
+> ```
+
+## Next steps
+
+* [Quickstart: Monitoring Azure Spring Apps apps with logs, metrics, and tracing](./quickstart-logs-metrics-tracing.md)
+* [Analyze logs and metrics with diagnostics settings](./diagnostic-services.md)
spring-apps How To Manage User Assigned Managed Identities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-manage-user-assigned-managed-identities.md
+
+ Title: Manage user-assigned managed identities for an application in Azure Spring Apps (preview)
+description: How to manage user-assigned managed identities for applications.
++++ Last updated : 03/31/2022+
+zone_pivot_groups: spring-apps-tier-selection
++
+# Manage user-assigned managed identities for an application in Azure Spring Apps (preview)
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to assign or remove user-assigned managed identities for an application in Azure Spring Apps, using the Azure portal and Azure CLI.
+
+Managed identities for Azure resources provide an automatically managed identity in Azure Active Directory (Azure AD) to an Azure resource such as your application in Azure Spring Apps. You can use this identity to authenticate to any service that supports Azure AD authentication, without having credentials in your code.
+
+## Prerequisites
+
+- If you're unfamiliar with managed identities for Azure resources, see the [Managed identities for Azure resources overview section](../active-directory/managed-identities-azure-resources/overview.md).
++
+- An already provisioned Azure Spring Apps Enterprise tier instance. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+- [Azure CLI version 2.30.0 or higher](/cli/azure/install-azure-cli).
+- [!INCLUDE [install-app-user-identity-extension](includes/install-app-user-identity-extension.md)]
+- At least one already provisioned user-assigned managed identity. For more information, see [Manage user-assigned managed identities](../active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md).
+++
+- An already provisioned Azure Spring Apps instance. For more information, see [Quickstart: Deploy your first application to Azure Spring Apps](./quickstart.md).
+- [Azure CLI version 2.30.0 or higher](/cli/azure/install-azure-cli).
+- [!INCLUDE [install-app-user-identity-extension](includes/install-app-user-identity-extension.md)]
+- At least one already provisioned user-assigned managed identity. For more information, see [Manage user-assigned managed identities](../active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities.md).
++
+## Assign user-assigned managed identities when creating an application
+
+Create an application and assign user-assigned managed identity at the same time by using the following command:
+
+```azurecli
+az spring app create \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <service-instance-name> \
+ --user-assigned <space-separated user identity resource IDs to assign>
+```
+
+## Assign user-assigned managed identities to an existing application
+
+Assigning user-assigned managed identity requires setting an additional property on the application.
+
+### [Azure portal](#tab/azure-portal)
+
+To assign user-assigned managed identity to an existing application in the Azure portal, follow these steps:
+
+1. Navigate to an application in the Azure portal as you normally would.
+2. Scroll down to the **Settings** group in the left navigation pane.
+3. Select **Identity**.
+4. Within the **User assigned** tab, select **Add**.
+5. Choose one or more user-assigned managed identities from right panel and then select **Add** from this panel.
+
+### [Azure CLI](#tab/azure-cli)
+
+Use the following command to assign one or more user-assigned managed identities on an existing app:
+
+```azurecli
+az spring app identity assign \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <service-instance-name> \
+ --user-assigned <space-separated user identity resource IDs to assign>
+```
+++
+## Obtain tokens for Azure resources
+
+An application can use its managed identity to get tokens to access other resources protected by Azure AD, such as Azure Key Vault. These tokens represent the application accessing the resource, not any specific user of the application.
+
+You may need to configure the target resource to allow access from your application. For more information, see [Assign a managed identity access to a resource by using the Azure portal](../active-directory/managed-identities-azure-resources/howto-assign-access-portal.md). For example, if you request a token to access Key Vault, be sure you have added an access policy that includes your application's identity. Otherwise, your calls to Key Vault will be rejected, even if they include the token. To learn more about which resources support Azure Active Directory tokens, see [Azure services that support Azure AD authentication](../active-directory/managed-identities-azure-resources/services-azure-active-directory-support.md)
+
+Azure Spring Apps shares the same endpoint for token acquisition with Azure Virtual Machines. We recommend using Java SDK or Spring Boot starters to acquire a token. For various code and script examples and guidance on important topics such as handling token expiration and HTTP errors, see [How to use managed identities for Azure resources on an Azure VM to acquire an access token](../active-directory/managed-identities-azure-resources/how-to-use-vm-token.md).
+
+## Remove user-assigned managed identities from an existing app
+
+Removing user-assigned managed identities will remove the assignment between the identities and the application, and will not delete the identities themselves.
+
+### [Azure portal](#tab/azure-portal)
+
+To remove user-assigned managed identities from an application that no longer needs it, follow these steps:
+
+1. Sign in to the Azure portal using an account associated with the Azure subscription that contains the Azure Spring Apps instance.
+1. Navigate to the desired application and select **Identity**.
+1. Under **User assigned**, select target identities and then select **Remove**.
+
+### [Azure CLI](#tab/azure-cli)
+
+To remove user-assigned managed identities from an application that no longer needs it, use the following command:
+
+```azurecli
+az spring app identity remove \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <service-instance-name> \
+ --user-assigned <space-separated user identity resource IDs to remove>
+```
+++
+## Limitations
+
+For user-assigned managed identity limitations, see [Quotas and service plans for Azure Spring Apps](./quotas.md).
+
+## Next steps
+
+- [Learn more about managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md)
+- [How to use managed identities with Java SDK](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples)
spring-apps How To Maven Deploy Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-maven-deploy-apps.md
+
+ Title: "Tutorial: Deploy Spring Boot applications using Maven"
+
+description: Use Maven to deploy applications to Azure Spring Apps.
++++ Last updated : 04/07/2022+++
+# Deploy Spring Boot applications using Maven
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use the Azure Spring Apps Maven plugin to configure and deploy applications to Azure Spring Apps.
+
+## Prerequisites
+
+* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+* An already provisioned Azure Spring Apps instance.
+* [JDK 8 or JDK 11](/azure/developer/java/fundamentals/java-jdk-install)
+* [Apache Maven](https://maven.apache.org/download.cgi)
+* [Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli) with the Azure Spring Apps extension. You can install the extension by using the following command: `az extension add --name spring`
+
+## Generate a Spring project
+
+To create a Spring project for use in this article, use the following steps:
+
+1. Navigate to [Spring Initializr](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.7&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-config-client) to generate a sample project with the recommended dependencies for Azure Spring Apps. This link uses the following URL to provide default settings for you.
+
+ ```url
+ https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.7&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-config-client
+ ```
+
+ The following image shows the recommended Spring Initializr setup for this sample project.
+
+ :::image type="content" source="media/how-to-maven-deploy-apps/initializr-page.png" alt-text="Screenshot of Spring Initializr.":::
+
+ This example uses Java version 8. If you want to use Java version 11, change the option under **Project Metadata**.
+
+1. Select **Generate** when all the dependencies are set.
+1. Download and unpack the package, then create a web controller for a web application. Add the file *src/main/java/com/example/hellospring/HelloController.java* with the following contents:
+
+ ```java
+ package com.example.hellospring;
+
+ import org.springframework.web.bind.annotation.RestController;
+ import org.springframework.web.bind.annotation.RequestMapping;
+
+ @RestController
+ public class HelloController {
+
+ @RequestMapping("/")
+ public String index() {
+ return "Greetings from Azure Spring Apps!";
+ }
+
+ }
+ ```
+
+## Build the Spring applications locally
+
+To build the project by using Maven, run the following commands:
+
+```azurecli
+cd hellospring
+mvn clean package -DskipTests -Denv=cloud
+```
+
+Compiling the project takes several minutes. After it's completed, you should have individual JAR files for each service in their respective folders.
+
+## Provision an instance of Azure Spring Apps
+
+The following procedure creates an instance of Azure Spring Apps using the Azure portal.
+
+1. In a new tab, open the [Azure portal](https://portal.azure.com/).
+
+1. From the top search box, search for **Azure Spring Apps**.
+
+1. Select **Azure Spring Apps** from the results.
+
+ :::image type="content" source="media/how-to-maven-deploy-apps/spring-apps-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps service in search results." lightbox="media/how-to-maven-deploy-apps/spring-apps-start.png":::
+
+1. On the Azure Spring Apps page, select **Create**.
+
+ :::image type="content" source="media/how-to-maven-deploy-apps/spring-apps-create.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps resource with Create button highlighted." lightbox="media/how-to-maven-deploy-apps/spring-apps-start.png":::
+
+1. Fill out the form on the Azure Spring Apps **Create** page. Consider the following guidelines:
+
+ - **Subscription**: Select the subscription you want to be billed for this resource.
+ - **Resource group**: Creating new resource groups for new resources is a best practice. You will use this resource group in later steps as **\<resource group name\>**.
+ - **Service Details/Name**: Specify the **\<service instance name\>**. The name must be between 4 and 32 characters long and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+ - **Location**: Select the region for your service instance.
+
+ :::image type="content" source="media/how-to-maven-deploy-apps/portal-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps Create page." lightbox="media/how-to-maven-deploy-apps/portal-start.png":::
+
+1. Select **Review and create**.
++
+## Generate configurations and deploy to the Azure Spring Apps
+
+To generate configurations and deploy the app, follow these steps:
+
+1. Run the following command from the *hellospring* root folder, which contains the POM file. If you've already signed-in with Azure CLI, the command will automatically pick up the credentials. Otherwise, the command will prompt you with sign-in instructions. For more information, see [Authentication](https://github.com/microsoft/azure-maven-plugins/wiki/Authentication) in the [azure-maven-plugins](https://github.com/microsoft/azure-maven-plugins) repository on GitHub.
+
+ ```azurecli
+ mvn com.microsoft.azure:azure-spring-apps-maven-plugin:1.10.0:config
+ ```
+
+ You'll be asked to select:
+
+ * **Subscription ID** - the subscription you used to create an Azure Spring Apps instance.
+ * **Service instance** - the name of your Azure Spring Apps instance.
+ * **App name** - an app name of your choice, or use the default value `artifactId`.
+ * **Public endpoint** - *true* to expose the app to public access; otherwise, *false*.
+
+1. Verify that the `appName` element in the POM file has the correct value. The relevant portion of the POM file should look similar to the following example.
+
+ ```xml
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.microsoft.azure</groupId>
+ <artifactId>azure-spring-apps-maven-plugin</artifactId>
+ <version>1.10.0</version>
+ <configuration>
+ <subscriptionId>xxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx</subscriptionId>
+ <clusterName>v-spr-cld</clusterName>
+ <appName>customers-service</appName>
+ ```
+
+ The POM file now contains the plugin dependencies and configurations.
+
+1. Deploy the app using the following command.
+
+ ```azurecli
+ mvn azure-spring-apps:deploy
+ ```
+
+## Verify the services
+
+After deployment has completed, you can access the app at `https://<service instance name>-hellospring.azuremicroservices.io/`.
++
+## Clean up resources
+
+If you plan to continue working with the example application, you might want to leave the resources in place. When no longer needed, delete the resource group containing your Azure Spring Apps instance. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+* [Prepare Spring application for Azure Spring Apps](how-to-prepare-app-deployment.md)
+* [Learn more about Azure Spring Apps Maven Plugin](https://github.com/microsoft/azure-maven-plugins/wiki/Azure-Spring-Cloud)
spring-apps How To Migrate Standard Tier To Enterprise Tier https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-migrate-standard-tier-to-enterprise-tier.md
+
+ Title: How to migrate an Azure Spring Apps Basic or Standard tier instance to Enterprise tier
+
+description: How to migrate an Azure Spring Apps Basic or Standard tier instance to Enterprise tier
++++ Last updated : 05/09/2022+++
+# Migrate an Azure Spring Apps Basic or Standard tier instance to Enterprise tier
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to migrate an existing application in Basic or Standard tier to Enterprise tier. When you migrate from Basic or Standard tier to Enterprise tier, VMware Tanzu components will replace the OSS Spring Cloud components to provide more feature support.
+
+This article will use the Pet Clinic sample apps as examples of how to migrate.
+
+## Prerequisites
+
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+
+## Provision a service instance
+
+In Enterprise Tier, VMware Tanzu components will replace the OSS Spring Cloud components to provide more feature support. Tanzu components are enabled on demand according to your needs. You can select the components you need before creating the service instance.
+
+> [!NOTE]
+> To use Tanzu Components, you must enable them when you provision your Azure Spring Apps service instance. You can't enable them after provisioning at this time.
+
+Use the following steps to provision an Azure Spring Apps service instance:
+
+### [Portal](#tab/azure-portal)
+
+1. Open the [Azure portal](https://portal.azure.com/).
+
+1. In the top search box, search for *Azure Spring Apps*.
+
+1. Select **Azure Spring Apps** from the results, then select **Create**.
+
+1. Select **Change** next to the **Pricing** option, then select **Enterprise**.
+
+ :::image type="content" source="media/enterprise/getting-started-enterprise/choose-enterprise-tier.png" alt-text="Screenshot of Azure portal Azure Spring Apps creation page with Basics section and 'Choose your pricing tier' pane showing." lightbox="media/enterprise/getting-started-enterprise/choose-enterprise-tier.png":::
+
+ Select the **Terms** checkbox to agree to the legal terms and privacy statements of the Enterprise tier offering in the Azure Marketplace.
+
+1. To configure VMware Tanzu components, select **Next: VMware Tanzu settings**.
+
+ > [!NOTE]
+ > All Tanzu components are enabled by default. Carefully consider which Tanzu components you want to use or enable during the provisioning phase. After provisioning the Azure Spring Apps instance, you can't enable or disable Tanzu components.
+
+ :::image type="content" source="media/enterprise/getting-started-enterprise/create-instance-tanzu-settings-public-preview.png" alt-text="Screenshot of Azure portal Azure Spring Apps creation page with V M ware Tanzu Settings section showing." lightbox="media/enterprise/getting-started-enterprise/create-instance-tanzu-settings-public-preview.png":::
+
+1. Select the **Application Insights** section, then select **Enable Application Insights**. You can also enable Application Insights after you provision the Azure Spring Apps instance.
+
+ - Choose an existing Application Insights instance or create a new Application Insights instance.
+ - Enter a **Sampling Rate** in the range of 0-100, or use the default value 10.
+
+ > [!NOTE]
+ > You'll pay for the usage of Application Insights when integrated with Azure Spring Apps. For more information about Application Insights pricing, see [Application Insights billing](../azure-monitor/logs/cost-logs.md#application-insights-billing).
+
+1. Select **Review and create** and wait for validation to complete, then select **Create** to start provisioning the service instance.
+
+It takes about 5 minutes to finish the resource provisioning.
+
+### [Azure CLI](#tab/azure-cli)
+
+1. Update Azure CLI with the Azure Spring Apps extension by using the following command:
+
+ ```azurecli
+ az extension update --name spring-cloud
+ ```
+
+1. Sign in to the Azure CLI and choose your active subscription by using the following command:
+
+ ```azurecli
+ az login
+ az account list --output table
+ az account set --subscription <subscription-ID>
+ ```
+
+1. Use the following command to accept the legal terms and privacy statements for the Enterprise tier. This step is only necessary if your subscription has never been used to create an Enterprise tier instance of Azure Spring Apps before.
+
+ ```azurecli
+ az provider register --namespace Microsoft.SaaS
+ az term accept --publisher vmware-inc --product azure-spring-cloud-vmware-tanzu-2 --plan tanzu-asc-ent-mtr
+ ```
+
+1. Enter a name for your Azure Spring Apps service instance. The name must be between 4 and 32 characters long and can only contain lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+
+1. Create a resource group and an Azure Spring Apps service instance using the following the command:
+
+ ```azurecli
+ az group create --name <resource-group-name>
+ az spring-cloud create \
+ --resource-group <resource-group-name> \
+ --name <service-instance-name> \
+ --sku enterprise
+ ```
+
+ For more information about resource groups, see [What is Azure Resource Manager?](../azure-resource-manager/management/overview.md).
+
+1. Set your default resource group name and Spring Cloud service name using the following command:
+
+ ```azurecli
+ az config set defaults.group=<resource-group-name> defaults.spring-cloud=<service-instance-name>
+ ```
+++
+## Create and configure apps
+
+The app creation steps are the same as Standard Tier.
+
+1. To set the CLI defaults, use the following commands. Be sure to replace the placeholders with your own values.
+
+ ```azurecli
+ az account set --subscription=<your-subscription-id>
+ az configure --defaults group=<your-resource-group-name> spring-cloud=<your-service-name>
+ ```
+
+1. To create the two core applications for PetClinic, `api-gateway` and `customers-service`, use the following commands:
+
+ ```azurecli
+ az spring-cloud app create --name api-gateway --instance-count 1 --memory 2Gi --assign-endpoint
+ az spring-cloud app create --name customers-service --instance-count 1 --memory 2Gi
+ ```
+
+## Use Application Configuration Service for external configuration
+
+In Enterprise tier, Application Configuration Service provides external configuration support for your apps. Managed Spring Cloud Config Server is only available in Basic and Standard tiers and isn't available in Enterprise tier.
+
+| Component | Standard Tier | Enterprise Tier |
+||--||
+| Config Server | OSS config server <br> Auto bound (always injection) <br>Always provisioned | Application Configuration Service for Tanzu <br> Need manual binding to app <br> Enable on demand |
+
+## Configure Application Configuration Service for Tanzu settings
+
+Follow these steps to use Application Configuration Service for Tanzu as a centralized configuration service.
+
+### [Portal](#tab/azure-portal)
+
+1. Select **Application Configuration Service**.
+1. Select **Overview** to view the running state and resources allocated to Application Configuration Service for Tanzu.
+
+ :::image type="content" source="./media/enterprise/getting-started-enterprise/config-service-overview.png" alt-text="Screenshot of Azure portal Azure Spring Apps with Application Configuration Service page and Overview section showing." lightbox="./media/enterprise/getting-started-enterprise/config-service-overview.png":::
+
+1. Select **Settings**, then add a new entry in the **Repositories** section with the following information:
+
+ - Name: `default`
+ - Patterns: `api-gateway,customers-service`
+ - URI: `https://github.com/Azure-Samples/spring-petclinic-microservices-config`
+ - Label: `master`
+
+1. Select **Validate** to validate access to the target URI.
+
+1. After validation completes successfully, select **Apply** to update the configuration settings.
+
+ :::image type="content" source="./media/enterprise/getting-started-enterprise/config-service-settings.png" alt-text="Screenshot of Azure portal Azure Spring Apps with Application Configuration Service page and Settings section showing." lightbox="./media/enterprise/getting-started-enterprise/config-service-settings.png":::
+
+### [Azure CLI](#tab/azure-cli)
+
+To set the default repository, use the following command:
+
+```azurecli
+az spring-cloud application-configuration-service git repo add \
+ --name default \
+ --patterns api-gateway,customers-service \
+ --uri https://github.com/Azure-Samples/spring-petclinic-microservices-config.git \
+ --label master
+```
+++
+## Bind application to Application Configuration Service for Tanzu
+
+When you use Application Configuration Service for Tanzu with a Git backend, you must bind the app to Application Configuration Service for Tanzu. After binding the app, you'll need to configure which pattern will be used by the app. Follow these steps to bind and configure the pattern for the app.
+
+### [Portal](#tab/azure-portal)
+
+To bind apps to Application Configuration Service for VMware Tanzu®, follow these steps.
+
+1. Select **Application Configuration Service**.
+
+1. Select **App binding**, then select **Bind app**.
+
+1. Choose one app in the dropdown, then select **Apply** to bind the application to Application Configuration Service for Tanzu.
+
+The list under **App name** will show the apps bound with Application Configuration Service for Tanzu.
+
+### [Azure CLI](#tab/azure-cli)
+
+To bind apps to Application Configuration Service for VMware Tanzu® and VMware Tanzu® Service Registry, use the following commands:
+
+```azurecli
+az spring-cloud application-configuration-service bind --app api-gateway
+az spring-cloud application-configuration-service bind --app customers-service
+```
+++
+For more information, see [Use Application Configuration Service for Tanzu](./how-to-enterprise-application-configuration-service.md).
+
+## Using Service Registry for Tanzu
+
+[Service Registry](https://docs.pivotal.io/spring-cloud-services/2-1/common/service-registry/https://docsupdatetracker.net/index.html) is one of the proprietary VMware Tanzu components. It provides your apps with an implementation of the Service Discovery pattern, one of the key concepts of a microservice-based architecture. In Enterprise tier, Service Registry for Tanzu provides service registry and discover support for your apps. Managed Spring Cloud Eureka is only available in Basic and Standard tiers and isn't available in Enterprise tier.
+
+| Component | Standard Tier | Enterprise Tier |
+||-|--|
+| Service Registry | OSS eureka <br> Auto bound (always injection) <br>Always provisioned | Service Registry for Tanzu <br> Needs manual binding to app <br> Enable on demand |
+
+## Bind an application to Tanzu Service Registry
+
+### [Portal](#tab/azure-portal)
+
+To bind apps to Application Configuration Service for VMware Tanzu®, follow these steps.
+
+1. In the Azure portal, Select **Service Registry**.
+
+1. Select **App binding**, then select **Bind app**.
+
+1. Choose one app in the dropdown, and then select **Apply** to bind the application to Tanzu Service Registry.
+
+ :::image type="content" source="media/enterprise/getting-started-enterprise/service-reg-app-bind-dropdown.png" alt-text="Screenshot of Azure portal Azure Spring Apps with Service Registry page and 'Bind app' dialog showing." lightbox="media/enterprise/getting-started-enterprise/service-reg-app-bind-dropdown.png":::
+
+The list under **App name** shows the apps bound with Tanzu Service Registry.
+
+### [Azure CLI](#tab/azure-cli)
+
+To bind apps to Application Configuration Service for VMware Tanzu® and VMware Tanzu® Service Registry, use the following commands:
+
+```azurecli
+az spring-cloud service-registry bind --app api-gateway
+az spring-cloud service-registry bind --app customers-service
+```
+++
+ > [!NOTE]
+ > When you change the bind/unbind status, you must restart or redeploy the app to make the change take effect.
+
+For more information, see [Use Tanzu Service Registry](./how-to-enterprise-service-registry.md).
+
+## Build and deploy applications
+
+In Enterprise tier, Tanzu Build Service is used to build apps. It provides more features like polyglot apps to deploy from artifacts such as source code and zip files.
+
+To use Tanzu Build Service, you need to specify a resource for build task and builder to use. You can also specify the `--build-env` parameter to set build environments.
+
+If the app binds with ACS, you need specify an extra argument `ΓÇöconfig-file-pattern`.
+
+The following sections show how to build and deploy applications.
+
+## Build the applications locally
+
+To build locally, use the following steps:
+
+1. Clone the sample app repository in your Azure account, change the directory, and build the project using the following commands:
+
+ ```bash
+ git clone -b enterprise https://github.com/azure-samples/spring-petclinic-microservices
+ cd spring-petclinic-microservices
+ mvn clean package -DskipTests
+ ```
+
+ Compiling the project can take several minutes. Once complete, you'll have individual JAR files for each service in its respective folder.
+
+1. Deploy the JAR files built in the previous step using the following commands:
+
+ ```azurecli
+ az spring-cloud app deploy \
+ --name api-gateway \
+ --artifact-path spring-petclinic-api-gateway/target/spring-petclinic-api-gateway-2.3.6.jar \
+ --config-file-patterns api-gateway
+ az spring-cloud app deploy \
+ --name customers-service \
+ --artifact-path spring-petclinic-customers-service/target/spring-petclinic-customers-service-2.3.6.jar \
+ --config-file-patterns customers-service
+ ```
+
+1. Query the application status after deployment by using the following command:
+
+ ```azurecli
+ az spring-cloud app list --output table
+ ```
+
+ This command produces output similar to the following example:
+
+ ```output
+ Name Location ResourceGroup Public Url Production Deployment Provisioning State CPU Memory Running Instance Registered Instance Persistent Storage Bind Service Registry Bind Application Configuration Service
+ -- - -- -- -- -- -- -- -
+ api-gateway eastus <resource group> https://<service_name>-api-gateway.asc-test.net default Succeeded 1 2Gi 1/1 1/1 - True True
+ customers-service eastus <resource group> default Succeeded 1 2Gi 1/1 1/1 - True True
+ ```
+
+## Use Application Insight
+
+Azure Enterprise tier uses the build service feature [Buildpack Bindings](./how-to-enterprise-build-service.md#buildpack-bindings) to integrate [Application Insights](../azure-monitor/app/app-insights-overview.md) with the type `ApplicationInsights` instead of In-Process Agent.
+
+| Standard Tier | Enterprise Tier |
+|--||
+| Application insight <br> New Relic <br> Dynatrace <br> AppDynamics | Application insight <br> New Relic <br> Dynatrace <br> AppDynamics <br> ElasticAPM |
+
+To check or update the current settings in Application Insights, use the following steps:
+
+### [Portal](#tab/azure-portal)
+
+1. Select **Application Insights**.
+1. Enable Application Insights by selecting **Edit binding**, or the **Unbound** hyperlink.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-binding-enable.png" alt-text="Screenshot of Azure portal Azure Spring Apps instance with Application Insights page showing and drop-down menu visible with 'Edit binding' option.":::
+
+1. Edit the binding settings, then select **Save**.
+
+ :::image type="content" source="media/enterprise/how-to-application-insights/application-insights-edit-binding.png" alt-text="Screenshot of Azure portal 'Edit binding' pane." lightbox="media/enterprise/how-to-application-insights/application-insights-edit-binding.png":::
+
+### [Azure CLI](#tab/azure-cli)
+
+To create an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring-cloud build-service builder buildpack-binding create \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+ --type ApplicationInsights \
+ --properties sampling-percentage=<your-sampling-percentage> \
+ connection-string=<your-connection-string>
+```
+
+To list all buildpack bindings, and find Application Insights bindings for the type `ApplicationInsights`, use the following command:
+
+```azurecli
+az spring-cloud build-service builder buildpack-binding list \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-resource-name> \
+ --builder-name <your-builder-name>
+```
+
+To replace an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring-cloud build-service builder buildpack-binding set \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+ --type ApplicationInsights \
+ --properties sampling-percentage=<your-sampling-percentage> \
+ connection-string=<your-connection-string>
+```
+
+To get an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring-cloud build-service builder buildpack-binding show \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+```
+
+To delete an Application Insights buildpack binding, use the following command:
+
+```azurecli
+az spring-cloud build-service builder buildpack-binding delete \
+ --resource-group <your-resource-group-name> \
+ --service <your-service-instance-name> \
+ --name <your-binding-name> \
+ --builder-name <your-builder-name> \
+```
+
+For more information, see [Use Application Insights Java In-Process Agent in Azure Spring Apps](./how-to-application-insights.md).
+++
+## Next steps
+
+- [Azure Spring Apps](index.yml)
+- [Use API portal for VMware Tanzu](./how-to-use-enterprise-api-portal.md)
+- [Use Spring Cloud Gateway for Tanzu](./how-to-use-enterprise-spring-cloud-gateway.md)
spring-apps How To Move Across Regions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-move-across-regions.md
+
+ Title: How to move an Azure Spring Apps service instance to another region
+description: Describes how to move an Azure Spring Apps service instance to another region
++++ Last updated : 01/27/2022+++
+# Move an Azure Spring Apps service instance to another region
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to move your Azure Spring Apps service instance to another region. Moving your instance is useful, for example, as part of a disaster recovery plan or to create a duplicate testing environment.
+
+You can't move an Azure Spring Apps instance from one region to another directly, but you can use an Azure Resource Manager template (ARM template) to deploy to a new region. For more information about using Azure Resource Manager and templates, see [Quickstart: Create and deploy Azure Resource Manager templates by using the Azure portal](../azure-resource-manager/templates/quickstart-create-templates-use-the-portal.md).
+
+Before you move your service instance, you should be aware of the following limitations:
+
+- Different feature sets are supported by different pricing tiers (SKUs). If you change the SKU, you may need to change the template to include only features supported by the target SKU.
+- You might not be able to move all sub-resources in Azure Spring Apps using the template. Your move may require extra setup after the template is deployed. For more information, see the [Configure the new Azure Spring Apps service instance](#configure-the-new-azure-spring-apps-service-instance) section.
+- When you move a virtual network (VNet) instance (see [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md)), you'll need to create new network resources.
+
+## Prerequisites
+
+- A running Azure Spring Apps instance.
+- A target region that supports Azure Spring Apps and its related features.
+- [Azure CLI](/cli/azure/install-azure-cli) if you aren't using the Azure portal.
+
+## Export the template
+
+### [Portal](#tab/azure-portal)
+
+First, use the following steps to export the template:
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+1. Select **All resources** in the left menu, then select your Azure Spring Apps instance.
+1. Under **Automation**, select **Export template**.
+1. Select **Download** on the **Export template** pane.
+1. Locate the *.zip* file, unzip it, and get the *template.json* file. This file contains the resource template.
+
+### [Azure CLI](#tab/azure-cli)
+
+First, use the following command to export the template:
+
+```azurecli
+az login
+az account set --subscription <resource-subscription-id>
+az group export --resource-group <resource-group> --resource-ids <resource-id>
+```
+++
+## Modify the template
+
+Next, use the following steps to modify the *template.json* file. In the examples shown here, the new Azure Spring Apps instance name is *new-service-name*, and the previous instance name is *old-service-name*.
+
+1. Change all `name` instances in the template from *old-service-name* to *new-service-name*, as shown in the following example:
+
+ ```json
+ {
+ "type": "Microsoft.AppPlatform/Spring",
+ "apiVersion": "{api-version}",
+ "_comment": "the following line was changed from 'old-service-name'",
+ "name": "[parameters('new-service-name')]",
+ ….
+ }
+ ```
+
+1. Change the `location` instances in the template to the new target location, as shown in the following example:
+
+ ```json
+ {
+ "type": "Microsoft.AppPlatform/Spring",
+ "apiVersion": "{api-version}",
+ "name": "[parameters('new_service_name')]",
+ "_comment": "the following line was changed from 'old-region'",
+ "location": "{new-region}",
+ …..
+ }
+ ```
+
+1. If the instance you're moving is a VNet instance, you'll need to update the target VNet resource `parameters` instances in the template, as shown in the following example:
+
+ ```json
+ "parameters": {
+ …
+ "virtualNetworks_service_vnet_externalid": {
+ "_comment": "the following line was changed from 'old-vnet-resource-id'",
+ "defaultValue": "{new-vnet-resource-id}",
+ "type": "String"
+ }
+ },
+ ```
+
+ Be sure the subnets `serviceRuntimeSubnetId` and `appSubnetId` (defined in the service `networkProfile`) exist.
+
+ ```json
+ {
+ "type": "Microsoft.AppPlatform/Spring",
+ "apiVersion": "{api-version}",
+ "name": "[parameters('Spring_new_service_name')]",
+ …
+ "properties": {
+ "networkProfile": {
+ "serviceRuntimeSubnetId": "[concat(parameters('virtualNetworks_service_vnet_externalid'), '/subnets/apps-subnet')]",
+ "appSubnetId": "[concat(parameters('virtualNetworks_service_vnet_externalid'), '/subnets/service-runtime-subnet')]",
+ }
+ }
+ }
+ ```
+
+1. If any custom domain resources are configured, you need to create the CNAME records as described in [Tutorial: Map an existing custom domain to Azure Spring Apps](tutorial-custom-domain.md). Be sure the record name is expected for the new service name.
+
+1. Change all `relativePath` instances in the template `properties` for all app resources to `<default>`, as shown in the following example:
+
+ ```json
+ {
+ "type": "Microsoft.AppPlatform/Spring/apps/deployments",
+ "apiVersion": "{api-version}",
+ "name": "[concat(parameters('Spring_new_service_name'), '/api-gateway/default')]",
+ …
+ "properties": {
+ "active": true,
+ "source": {
+ "type": "Jar",
+ "_comment": "the following line was changed to 'default'",
+ "relativePath": "<default>"
+ },
+ …
+ }
+ }
+ ```
+
+ After the app is created, it uses a default banner application. You'LL need to deploy the JAR files again using the Azure CLI. For more information, see the [Configure the new Azure Spring Apps service instance](#configure-the-new-azure-spring-apps-service-instance) section below.
+
+1. If service binding was used and you want to import it to the new service instance, add the `key` property for the target bound resource. In the following example, a bound MySQL database would be included:
+
+ ```json
+ {
+ "type": "Microsoft.AppPlatform/Spring/apps/bindings",
+ "apiVersion": "{api-version}",
+ "name": "[concat(parameters('Spring_new_service_name'), '/api-gateway/mysql')]",
+ …
+ "_comment": "the following line imports a mysql binding",
+ "properties": {
+ "resourceId": "[parameters('servers_test_mysql_name_externalid')]",
+ "key": "{mysql-password}",
+ "bindingParameters": {
+ "databaseName": "mysql",
+ "username": "{mysql-user-name}"
+ }
+ }
+ }
+ ```
+
+## Deploy the template
+
+### [Portal](#tab/azure-portal)
+
+After you modify the template, use the following steps to deploy the template and create the new resource.
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+1. In the top search box, search for *Deploy a custom template*.
+
+ :::image type="content" source="media/how-to-move-across-regions/search-deploy-template.png" alt-text="Screenshot of Azure portal showing search results." lightbox="media/how-to-move-across-regions/search-deploy-template.png" border="true":::
+
+1. Under **Services**, select **Deploy a custom template**.
+1. Go to the **Select a template** tab, then select **Build your own template in the editor**.
+1. In the template editor, paste in the *template.json* file you modified earlier, then select **Save**.
+1. In the **Basics** tab, fill in the following information:
+
+ - The target subscription.
+ - The target resource group.
+ - The target region.
+ - Any other parameters required for the template.
+
+ :::image type="content" source="media/how-to-move-across-regions/deploy-template.png" alt-text="Screenshot of Azure portal showing 'Custom deployment' pane.":::
+
+1. Select **Review + create** to create the target service instance.
+1. Wait until the template has deployed successfully. If the deployment fails, select **Deployment details** to view the failure reason, then update the template or configurations accordingly.
+
+### [Azure CLI](#tab/azure-cli)
+
+After you modify the template, use the following command to deploy the custom template and create the new resource.
+
+```azurecli
+az login
+az account set --subscription <resource-subscription-id>
+az deployment group create \
+ --name <custom-deployment-name> \
+ --resource-group <resource-group> \
+ --template-file <path-to-template> \
+ --parameters <param-name-1>=<param-value-1>
+```
+
+Wait until the template has deployed successfully. If the deployment fails, view the deployment details with the command `az deployment group list`, then update the template or configurations accordingly.
+++
+## Configure the new Azure Spring Apps service instance
+
+Some features aren't exported to the template, or can't be imported with a template. You must manually set up some Azure Spring Apps items on the new instance after the template deployment completes successfully. The following guidelines describe these requirements:
+
+- The JAR files for the previous service aren't deployed directly to the new service instance. To deploy all apps, follow the instructions in [Quickstart: Build and deploy apps to Azure Spring Apps](quickstart-deploy-apps.md). If there's no active deployment configured automatically, you must configure a production deployment. For more information, see [Set up a staging environment in Azure Spring Apps](how-to-staging-environment.md).
+- Config Server won't be imported automatically. To set up Config Server on your new instance, see [Set up a Spring Cloud Config Server instance for your service](how-to-config-server.md).
+- Managed identity will be created automatically for the new service instance, but the object ID will be different from the previous instance. For managed identity to work in the new service instance, follow the instructions in [How to enable system-assigned managed identity for applications in Azure Spring Apps](how-to-enable-system-assigned-managed-identity.md).
+- For Monitoring -> Metrics, see [Metrics for Azure Spring Apps](concept-metrics.md). To avoid mixing the data, we recommend that you create a new Log Analytics instance to collect the new data. You should also create a new instance for other monitoring configurations.
+- For Monitoring -> Diagnostic settings and logs, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md).
+- For Monitoring -> Application Insights, see [Application Insights Java In-Process Agent in Azure Spring Apps](how-to-application-insights.md).
+
+## Next steps
+
+- [Quickstart: Build and deploy apps to Azure Spring Apps](quickstart-deploy-apps.md)
+- [Quickstart: Set up Azure Spring Apps Config Server](quickstart-setup-config-server.md)
+- [Quickstart: Set up a Log Analytics workspace](quickstart-setup-log-analytics.md)
spring-apps How To New Relic Monitor https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-new-relic-monitor.md
+
+ Title: "How to monitor Spring Boot apps using New Relic Java agent"
+
+description: Learn how to monitor Spring Boot applications using the New Relic Java agent.
++++ Last updated : 06/08/2021+
+ms.devlang: azurecli
++
+# How to monitor Spring Boot apps using New Relic Java agent (Preview)
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to monitor of Spring Boot applications in Azure Spring Apps with the New Relic Java agent.
+
+With the New Relic Java agent, you can:
+
+* Consume the New Relic Java agent.
+* Configure the New Relic Java agent using environment variables.
+* Check all monitoring data from the New Relic dashboard.
+
+The following video describes how to activate and monitor Spring Boot applications in Azure Spring Apps using New Relic One.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/4GQPwJSP3ys?list=PLPeZXlCR7ew8LlhnSH63KcM0XhMKxT1k_]
+
+## Prerequisites
+
+* A [New Relic](https://newrelic.com/) account.
+* [Azure CLI version 2.0.67 or later](/cli/azure/install-azure-cli).
+
+## Activate the New Relic Java in process agent
+
+Use the following procedure to access the agent:
+
+1. Create an instance of Azure Spring Apps.
+
+2. Create an application.
+
+ ```azurecli
+ az spring app create --name "appName" --is-public true \
+ -s "resourceName" -g "resourceGroupName"
+ ```
+
+3. Create a deployment with the New Relic agent and environment variables.
+
+ ```azurecli
+ az spring app deploy --name "appName" --jar-path app.jar \
+ -s "resourceName" -g "resourceGroupName" \
+ --jvm-options="-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar" \
+ --env NEW_RELIC_APP_NAME=appName NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
+ ```
+
+Azure Spring Apps pre-installs the New Relic Java agent to */opt/agents/newrelic/java/newrelic-agent.jar*. Customers can activate the agent from applications' **JVM options**, as well as configure the agent using the [New Relic Java agent environment variables](https://docs.newrelic.com/docs/agents/java-agent/configuration/java-agent-configuration-config-file/#Environment_Variables).
+
+## Portal
+
+You can also activate this agent from portal with the following procedure.
+
+1. Find the app from **Settings**/**Apps** in the navigation pane.
+
+ [![Find app to monitor](media/new-relic-monitoring/find-app.png)](media/new-relic-monitoring/find-app.png)
+
+2. Select the application to jump to the **Overview** page.
+
+ [![Overview page](media/new-relic-monitoring/overview-page.png)](media/new-relic-monitoring/overview-page.png)
+
+3. Select **Configuration** in the left navigation pane to add/update/delete the **Environment Variables** of the application.
+
+ [![Update environment](media/new-relic-monitoring/configurations-update-environment.png)](media/new-relic-monitoring/configurations-update-environment.png)
+
+4. Select **General settings** to add/update/delete the **JVM options** of the application.
+
+ [![Update JVM Option](media/new-relic-monitoring/update-jvm-option.png)](media/new-relic-monitoring/update-jvm-option.png)
+
+5. View the application api/gateway **Summary** page from the New Relic dashboard.
+
+ [![App summary page](media/new-relic-monitoring/app-summary-page.png)](media/new-relic-monitoring/app-summary-page.png)
+
+6. View the application customers-service **Summary** page from the New Relic dashboard.
+
+ [![Customers-service page](media/new-relic-monitoring/customers-service.png)](media/new-relic-monitoring/customers-service.png)
+
+7. View the **Service Map** page from the New Relic dashboard.
+
+ [![Service map page](media/new-relic-monitoring/service-map.png)](media/new-relic-monitoring/service-map.png)
+
+8. View the **JVMs** page of the application from the New Relic dashboard.
+
+ [![JVM page](media/new-relic-monitoring/jvm-page.png)](media/new-relic-monitoring/jvm-page.png)
+
+9. View the application profile from the New Relic dashboard.
+
+ [![Application profile](media/new-relic-monitoring/profile-app.png)](media/new-relic-monitoring/profile-app.png)
+
+## Automate provisioning
+
+You can also run a provisioning automation pipeline using Terraform, Bicep, or an Azure Resource Manager template (ARM template). This pipeline can provide a complete hands-off experience to instrument and monitor any new applications that you create and deploy.
+
+### Automate provisioning using Terraform
+
+To configure the environment variables in a Terraform template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Manages an Active Azure Spring Apps Deployment](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/spring_cloud_active_deployment).
+
+```terraform
+resource "azurerm_spring_cloud_java_deployment" "example" {
+ ...
+ jvm_options = "-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar"
+ ...
+ environment_variables = {
+ "NEW_RELIC_APP_NAME": "<app-name>",
+ "NEW_RELIC_LICENSE_KEY": "<new-relic-license-key>"
+ }
+}
+```
+
+### Automate provisioning using a Bicep file
+
+To configure the environment variables in a Bicep file, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=bicep).
+
+```bicep
+deploymentSettings: {
+ environmentVariables: {
+ NEW_RELIC_APP_NAME : '<app-name>',
+ NEW_RELIC_LICENSE_KEY : '<new-relic-license-key>'
+ },
+ jvmOptions: '-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar',
+ ...
+}
+```
+
+### Automate provisioning using an ARM template
+
+To configure the environment variables in an ARM template, add the following code to the template, replacing the *\<...>* placeholders with your own values. For more information, see [Microsoft.AppPlatform Spring/apps/deployments](/azure/templates/microsoft.appplatform/spring/apps/deployments?tabs=json).
+
+```json
+"deploymentSettings": {
+ "environmentVariables": {
+ "NEW_RELIC_APP_NAME" : "<app-name>",
+ "NEW_RELIC_LICENSE_KEY" : "<new-relic-license-key>"
+ },
+ "jvmOptions": "-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar",
+ ...
+}
+```
+
+## View New Relic Java Agent logs
+
+By default, Azure Spring Apps will print the logs of the New Relic Java agent to `STDOUT`. The logs will be mixed with the application logs. You can find the explicit agent version from the application logs.
+
+You can also get the logs of the New Relic agent from the following locations:
+
+* Azure Spring Apps logs
+* Azure Spring Apps Application Insights
+* Azure Spring Apps LogStream
+
+You can leverage some environment variables provided by New Relic to configure the logging of the New Agent, such as, `NEW_RELIC_LOG_LEVEL` to control the level of logs. For more information, see [New Relic Environment Variables](https://docs.newrelic.com/docs/agents/java-agent/configuration/java-agent-configuration-config-file/#Environment_Variables).
+
+> [!CAUTION]
+> We strongly recommend that you *do not* override the logging default behavior provided by Azure Spring Apps for New Relic. If you do, the logging scenarios in above scenarios will be blocked, and the log file(s) may be lost. For example, you should not pass the following environment variables to your applications. Log file(s) may be lost after restart or redeployment of application(s).
+>
+> * NEW_RELIC_LOG
+> * NEW_RELIC_LOG_FILE_PATH
+
+## New Relic Java Agent update/upgrade
+
+The New Relic Java agent will update/upgrade the JDK regularly. The agent update/upgrade may impact following scenarios.
+
+* Existing applications that use the New Relic Java agent before update/upgrade will be unchanged.
+* Existing applications that use the New Relic Java agent before update/upgrade require restart or redeploy to engage the new version of the New Relic Java agent.
+* New applications created after update/upgrade will use the new version of the New Relic Java agent.
+
+## Vnet Injection Instance Outbound Traffic Configuration
+
+For a vnet injection instance of Azure Spring Apps, you need to make sure the outbound traffic is configured correctly for the New Relic Java agent. For more information, see [Networks of New Relic](https://docs.newrelic.com/docs/using-new-relic/cross-product-functions/install-configure/networks/#agents).
+
+## Next steps
+
+* [Distributed tracing and App Insights](how-to-distributed-tracing.md)
spring-apps How To Outbound Public Ip https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-outbound-public-ip.md
+
+ Title: How - to identify outbound public IP addresses in Azure Spring Apps
+description: How to view the static outbound public IP addresses to communicate with external resources, such as Database, Storage, Key Vault, etc.
++++ Last updated : 09/17/2020+++
+# How to identify outbound public IP addresses in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to view static outbound public IP addresses of applications in Azure Spring Apps. Public IPs are used to communicate with external resources, such as databases, storage, and key vaults.
+
+> [!IMPORTANT]
+> If the Azure Spring Apps instance is deployed in your own virtual network, you can leverage either Network Security Group or Azure Firewall to fully control the egress traffic.
+
+## How IP addresses work in Azure Spring Apps
+
+An Azure Spring Apps service has one or more outbound public IP addresses. The number of outbound public IP addresses may vary according to the tiers and other factors.
+
+The outbound public IP addresses are usually constant and remain the same, but there are exceptions.
+
+## When outbound IPs change
+
+Each Azure Spring Apps instance has a set number of outbound public IP addresses at any given time. Any outbound connection from the applications, such as to a back-end database, uses one of the outbound public IP addresses as the origin IP address. The IP address is selected randomly at runtime, so your back-end service must open its firewall to all the outbound IP addresses.
+
+The number of outbound public IPs changes when you perform one of the following actions:
+
+- Upgrade your Azure Spring Apps instance between tiers.
+- Raise a support ticket for more outbound public IPs for business needs.
+
+## Find outbound IPs
+
+To find the outbound public IP addresses currently used by your service instance in the Azure portal, select **Networking** in your instance's left-hand navigation pane. They are listed in the **Outbound IP addresses** field.
+
+You can find the same information by running the following command in the Cloud Shell
+
+```azurecli
+az spring show --resource-group <group_name> --name <service_name> --query properties.networkProfile.outboundIps.publicIps --output tsv
+```
+
+## Next steps
+
+* [Learn more about managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md)
+* [Learn more about key vault in Azure Spring Apps](./tutorial-managed-identities-key-vault.md)
spring-apps How To Permissions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-permissions.md
+
+ Title: "Use permissions in Azure Spring Apps"
+description: This article shows you how to create custom roles that delegate permissions to Azure Spring Apps resources.
++++ Last updated : 09/04/2020+++
+# How to use permissions in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to create custom roles that delegate permissions to Azure Spring Apps resources. Custom roles extend [Azure built-in roles](../role-based-access-control/built-in-roles.md) with various stock permissions.
+
+We'll implement the following custom roles.
+
+* **Developer role**:
+
+ * Deploy
+ * Test
+ * Restart apps
+ * Apply and make changes to app configurations in the Git repository
+ * Get log streams
+
+* **DevOps Engineer role**:
+
+ * Create, read, update, and delete everything in Azure Spring Apps
+
+* **Ops - Site Reliability Engineering role**:
+
+ * Restart apps
+ * Get log streams
+ * Can't make changes to apps or configurations
+
+* **Azure Pipelines / Jenkins / GitHub Actions role**:
+
+ * Perform create, read, update, and delete operations
+ * Use Terraform or ARM templates to create and configure everything in Azure Spring Apps and apps within a service instance: Azure Pipelines, Jenkins, and GitHub Actions
+
+## Define the Developer role
+
+The Developer role includes permissions to restart apps and see their log streams. This role can't make changes to apps or configurations.
+
+### [Portal](#tab/Azure-portal)
+
+1. In the Azure portal, open the subscription where you want to assign the custom role.
+2. Open **Access control (IAM)**.
+3. Select **Add**.
+4. Select **Add custom role**.
+5. Select **Next**:
+
+ ![Screenshot that shows the Basics tab of the Create a custom role window.](media/spring-cloud-permissions/create-custom-role.png)
+
+6. Select **Add permissions**:
+
+ ![Screenshot that shows the Add permissions button.](media/spring-cloud-permissions/add-permissions.png)
+
+7. In the search box, search for **Microsoft.app**. Select **Microsoft Azure Spring Apps**:
+
+ ![Screenshot that shows the results of searching for Microsoft.app.](media/spring-cloud-permissions/spring-cloud-permissions.png)
+
+8. Select the permissions for the Developer role.
+
+ Under **Microsoft.AppPlatform/Spring**, select:
+
+ * **Write : Create or Update Azure Spring Apps service instance**
+ * **Read : Get Azure Spring Apps service instance**
+ * **Other : List Azure Spring Apps service instance test keys**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Build Services**
+ * **Other : Get an Upload URL in Azure Spring Apps**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builds**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builds**
+ * **Write : Write Microsoft Azure Spring Apps Builds**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builds/results**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Build Results**
+ * **Other : Get an Log File URL in Azure Spring Apps**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builders**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builders**
+ * **Write : Write Microsoft Azure Spring Apps Builders**
+ * **Delete : Delete Microsoft Azure Spring Apps Builders**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builder BuildpackBinding**
+ * **Write : Write Microsoft Azure Spring Apps Builder BuildpackBinding**
+ * **Delete : Delete Microsoft Azure Spring Apps Builder BuildpackBinding**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/supportedBuildpacks**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Supported Buildpacks**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/supportedStacks**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Supported Stacks**
+
+ Under **Microsoft.AppPlatform/Spring/apps**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps application**
+ * **Other : Get Microsoft Azure Spring Apps application resource upload URL**
+
+ Under **Microsoft.AppPlatform/Spring/apps/bindings**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps application binding**
+
+ Under **Microsoft.AppPlatform/Spring/apps/deployments**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application deployment**
+ * **Read : Read Microsoft Azure Spring Apps application deployment**
+ * **Other : Start Microsoft Azure Spring Apps application deployment**
+ * **Other : Stop Microsoft Azure Spring Apps application deployment**
+ * **Other : Restart Microsoft Azure Spring Apps application deployment**
+ * **Other : Get Microsoft Azure Spring Apps application deployment log file URL**
+
+ Under **Microsoft.AppPlatform/Spring/apps/domains**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps application custom domain**
+
+ Under **Microsoft.AppPlatform/Spring/certificates**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps certificate**
+
+ Under **Microsoft.AppPlatform/locations/operationResults/Spring**, select:
+
+ * **Read : Read operation result**
+
+ Under **Microsoft.AppPlatform/locations/operationStatus/operationId**, select:
+
+ * **Read : Read operation status**
+
+ [![Screenshot of Azure portal that shows the selections for Developer permissions.](media/spring-cloud-permissions/developer-permissions-box.png)](media/spring-cloud-permissions/developer-permissions-box.png#lightbox)
+
+9. Select **Add**.
+
+10. Review the permissions.
+
+11. Select **Review and create**.
+
+### [JSON](#tab/JSON)
+
+1. In the Azure portal, open the subscription where you want to assign the custom role.
+2. Open **Access control (IAM)**.
+3. Select **Add**.
+4. Select **Add custom role**.
+5. Select **Next**.
+
+6. Select the **JSON** tab.
+
+7. Select **Edit**, and then delete the default text:
+
+ ![Screenshot that shows the default JSON text.](media/spring-cloud-permissions/create-custom-role-edit-json.png)
+
+8. Paste in the following JSON to define the Developer role:
+
+ * Basic/Standard tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "Developer",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/write",
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/bindings/read",
+ "Microsoft.AppPlatform/Spring/apps/domains/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/write",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/certificates/read",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+ * Enterprise tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "Developer",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/write",
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/buildServices/read",
+ "Microsoft.AppPlatform/Spring/buildServices/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/results/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/results/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/delete",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/delete",
+ "Microsoft.AppPlatform/Spring/buildServices/supportedBuildpacks/read",
+ "Microsoft.AppPlatform/Spring/buildServices/supportedStacks/read",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/bindings/read",
+ "Microsoft.AppPlatform/Spring/apps/domains/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/write",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/certificates/read",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+ ![Screenshot that shows the JSON for the Developer role.](media/spring-cloud-permissions/create-custom-role-json.png)
+
+9. Select **Save**.
+
+10. Review the permissions.
+
+11. Select **Review and create**.
+++
+## Define the DevOps Engineer role
+
+This procedure defines a role that has permissions to deploy, test, and restart Azure Spring Apps apps.
+
+### [Portal](#tab/Azure-portal)
+
+1. Repeat steps 1 through 4 in the procedure for adding the Developer role.
+
+2. Select the permissions for the DevOps Engineer role:
+
+ Under **Microsoft.AppPlatform/Spring**, select:
+
+ * **Write : Create or Update Azure Spring Apps service instance**
+ * **Delete : Delete Azure Spring Apps service instance**
+ * **Read : Get Azure Spring Apps service instance**
+ * **Other : Enable Azure Spring Apps service instance test endpoint**
+ * **Other : Disable Azure Spring Apps service instance test endpoint**
+ * **Other : List Azure Spring Apps service instance test keys**
+ * **Other : Regenerate Azure Spring Apps service instance test key**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Build Services**
+ * **Other : Get an Upload URL in Azure Spring Apps**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/agentPools**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Agent Pools**
+ * **Write : Write Microsoft Azure Spring Apps Agent Pools**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builds**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builds**
+ * **Write : Write Microsoft Azure Spring Apps Builds**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builds/results**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Build Results**
+ * **Other : Get an Log File URL in Azure Spring Apps**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builders**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builders**
+ * **Write : Write Microsoft Azure Spring Apps Builders**
+ * **Delete : Delete Microsoft Azure Spring Apps Builders**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builder BuildpackBinding**
+ * **Write : Write Microsoft Azure Spring Apps Builder BuildpackBinding**
+ * **Delete : Delete Microsoft Azure Spring Apps Builder BuildpackBinding**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/supportedBuildpacks**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Supported Buildpacks**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/supportedStacks**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Supported Stacks**
+
+ Under **Microsoft.AppPlatform/Spring/apps**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application**
+ * **Delete : Delete Microsoft Azure Spring Apps application**
+ * **Read : Read Microsoft Azure Spring Apps application**
+ * **Other : Get Microsoft Azure Spring Apps application resource upload URL**
+ * **Other : Validate Microsoft Azure Spring Apps application custom domain**
+
+ Under **Microsoft.AppPlatform/Spring/apps/bindings**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application binding**
+ * **Delete : Delete Microsoft Azure Spring Apps application binding**
+ * **Read : Read Microsoft Azure Spring Apps application binding**
+
+ Under **Microsoft.AppPlatform/Spring/apps/deployments**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application deployment**
+ * **Delete : Delete Azure Spring Apps application deployment**
+ * **Read : Read Microsoft Azure Spring Apps application deployment**
+ * **Other : Start Microsoft Azure Spring Apps application deployment**
+ * **Other : Stop Microsoft Azure Spring Apps application deployment**
+ * **Other : Restart Microsoft Azure Spring Apps application deployment**
+ * **Other : Get Microsoft Azure Spring Apps application deployment log file URL**
+
+ Under **Microsoft.AppPlatform/Spring/apps/deployments/skus**, select:
+
+ * **Read : List application deployment available skus**
+
+ Under **Microsoft.AppPlatform/locations**, select:
+
+ * **Other : Check name availability**
+
+ Under **Microsoft.AppPlatform/locations/operationResults/Spring** select:
+
+ * **Read : Read operation result**
+
+ Under **Microsoft.AppPlatform/locations/operationStatus/operationId**, select:
+
+ * **Read : Read operation status**
+
+ Under **Microsoft.AppPlatform/skus**, select:
+
+ * **Read : List available skus**
+
+ [![Screenshot of Azure portal that shows the selections for DevOps permissions.](media/spring-cloud-permissions/dev-ops-permissions.png)](media/spring-cloud-permissions/dev-ops-permissions.png#lightbox)
+
+3. Select **Add**.
+
+4. Review the permissions.
+
+5. Select **Review and create**.
+
+### [JSON](#tab/JSON)
+
+1. Repeat steps 1 through 4 from the procedure for adding the Developer role.
+2. Select **Next**.
+
+3. Select the **JSON** tab.
+
+4. Select **Edit**, and then delete the default text:
+
+ ![Screenshot that shows the default JSON text.](media/spring-cloud-permissions/create-custom-role-edit-json.png)
+
+5. Paste in the following JSON to define the DevOps Engineer role:
+
+ * Basic/Standard tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "DevOps engineer",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/write",
+ "Microsoft.AppPlatform/Spring/delete",
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/enableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/disableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/regenerateTestKey/action",
+ "Microsoft.AppPlatform/Spring/apps/write",
+ "Microsoft.AppPlatform/Spring/apps/delete",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/validateDomain/action",
+ "Microsoft.AppPlatform/Spring/apps/bindings/write",
+ "Microsoft.AppPlatform/Spring/apps/bindings/delete",
+ "Microsoft.AppPlatform/Spring/apps/bindings/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/write",
+ "Microsoft.AppPlatform/Spring/apps/deployments/delete",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/skus/read",
+ "Microsoft.AppPlatform/locations/checkNameAvailability/action",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read",
+ "Microsoft.AppPlatform/skus/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+ * Enterprise tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "DevOps engineer",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/write",
+ "Microsoft.AppPlatform/Spring/delete",
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/enableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/disableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/regenerateTestKey/action",
+ "Microsoft.AppPlatform/Spring/buildServices/read",
+ "Microsoft.AppPlatform/Spring/buildServices/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/buildServices/agentPools/read",
+ "Microsoft.AppPlatform/Spring/buildServices/agentPools/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/results/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/results/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/delete",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/delete",
+ "Microsoft.AppPlatform/Spring/buildServices/supportedBuildpacks/read",
+ "Microsoft.AppPlatform/Spring/buildServices/supportedStacks/read",
+ "Microsoft.AppPlatform/Spring/apps/write",
+ "Microsoft.AppPlatform/Spring/apps/delete",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/validateDomain/action",
+ "Microsoft.AppPlatform/Spring/apps/bindings/write",
+ "Microsoft.AppPlatform/Spring/apps/bindings/delete",
+ "Microsoft.AppPlatform/Spring/apps/bindings/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/write",
+ "Microsoft.AppPlatform/Spring/apps/deployments/delete",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/skus/read",
+ "Microsoft.AppPlatform/locations/checkNameAvailability/action",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read",
+ "Microsoft.AppPlatform/skus/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+6. Review the permissions.
+
+7. Select **Review and create**.
+++
+## Define the Ops - Site Reliability Engineering role
+
+This procedure defines a role that has permissions to deploy, test, and restart Azure Spring Apps apps.
+
+### [Portal](#tab/Azure-portal)
+
+1. Repeat steps 1 through 4 from the procedure for adding the Developer role.
+2. Select the permissions for the Ops - Site Reliability Engineering role:
+
+ Under **Microsoft.AppPlatform/Spring**, select:
+
+ * **Read : Get Azure Spring Apps service instance**
+ * **Other : List Azure Spring Apps service instance test keys**
+
+ Under **Microsoft.AppPlatform/Spring/apps**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps application**
+
+ Under **Microsoft.AppPlatform/apps/deployments**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps application deployment**
+ * **Other : Start Microsoft Azure Spring Apps application deployment**
+ * **Other : Stop Microsoft Azure Spring Apps application deployment**
+ * **Other : Restart Microsoft Azure Spring Apps application deployment**
+
+ Under **Microsoft.AppPlatform/locations/operationResults/Spring**, select:
+
+ * **Read : Read operation result**
+
+ Under **Microsoft.AppPlatform/locations/operationStatus/operationId**, select:
+
+ * **Read : Read operation status**
+
+ [![Screenshot of Azure portal that shows the selections for Ops - Site Reliability Engineering permissions.](media/spring-cloud-permissions/ops-sre-permissions.png)](media/spring-cloud-permissions/ops-sre-permissions.png#lightbox)
+
+3. Select **Add**.
+
+4. Review the permissions.
+
+5. Select **Review and create**.
+
+### [JSON](#tab/JSON)
+
+1. Repeat steps 1 through 4 from the procedure for adding the Developer role.
+2. Select **Next**.
+
+3. Select the **JSON** tab.
+
+4. Select **Edit**, and then delete the default text:
+
+ ![Screenshot that shows the default JSON text.](media/spring-cloud-permissions/create-custom-role-edit-json.png)
+
+5. Paste in the following JSON to define the Ops - Site Reliability Engineering role:
+
+ * Enterprise/Basic/Standard tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "Ops - Site Reliability Engineering",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+6. Review the permissions.
+
+7. Select **Review and create**.
+++
+## Define the Azure Pipelines / Jenkins / GitHub Actions role
+
+This role can create and configure everything in Azure Spring Apps and apps with a service instance. This role is for releasing or deploying code.
+
+### [Portal](#tab/Azure-portal)
+
+1. Repeat steps 1 through 4 from the procedure for adding the Developer role.
+2. Open the **Permissions** options.
+
+3. Select the permissions for the Azure Pipelines / Jenkins / GitHub Actions role:
+
+ Under **Microsoft.AppPlatform/Spring**, select:
+
+ * **Write : Create or Update Azure Spring Apps service instance**
+ * **Delete : Delete Azure Spring Apps service instance**
+ * **Read : Get Azure Spring Apps service instance**
+ * **Other : Enable Azure Spring Apps service instance test endpoint**
+ * **Other : Disable Azure Spring Apps service instance test endpoint**
+ * **Other : List Azure Spring Apps service instance test keys**
+ * **Other : Regenerate Azure Spring Apps service instance test key**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Build Services**
+ * **Other : Get an Upload URL in Azure Spring Apps**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builds**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builds**
+ * **Write : Write Microsoft Azure Spring Apps Builds**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builds/results**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Build Results**
+ * **Other : Get an Log File URL in Azure Spring Apps**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builders**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builders**
+ * **Write : Write Microsoft Azure Spring Apps Builders**
+ * **Delete : Delete Microsoft Azure Spring Apps Builders**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Builder BuildpackBinding**
+ * **Write : Write Microsoft Azure Spring Apps Builder BuildpackBinding**
+ * **Delete : Delete Microsoft Azure Spring Apps Builder BuildpackBinding**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/supportedBuildpacks**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Supported Buildpacks**
+
+ (For Enterprise tier only) Under **Microsoft.AppPlatform/Spring/buildServices/supportedStacks**, select:
+
+ * **Read : Read Microsoft Azure Spring Apps Supported Stacks**
+
+ Under **Microsoft.AppPlatform/Spring/apps**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application**
+ * **Delete : Delete Microsoft Azure Spring Apps application**
+ * **Read : Read Microsoft Azure Spring Apps application**
+ * **Other : Get Microsoft Azure Spring Apps application resource upload URL**
+ * **Other : Validate Microsoft Azure Spring Apps application custom domain**
+
+ Under **Microsoft.AppPlatform/Spring/apps/bindings**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application binding**
+ * **Delete : Delete Microsoft Azure Spring Apps application binding**
+ * **Read : Read Microsoft Azure Spring Apps application binding**
+
+ Under **Microsoft.AppPlatform/Spring/apps/deployments**, select:
+
+ * **Write : Write Microsoft Azure Spring Apps application deployment**
+ * **Delete : Delete Azure Spring Apps application deployment**
+ * **Read : Read Microsoft Azure Spring Apps application deployment**
+ * **Other : Start Microsoft Azure Spring Apps application deployment**
+ * **Other : Stop Microsoft Azure Spring Apps application deployment**
+ * **Other : Restart Microsoft Azure Spring Apps application deployment**
+ * **Other : Get Microsoft Azure Spring Apps application deployment log file URL**
+
+ Under **Microsoft.AppPlatform/Spring/apps/deployments/skus**, select:
+
+ * **Read : List application deployment available skus**
+
+ Under **Microsoft.AppPlatform/locations**, select:
+
+ * **Other : Check name availability**
+
+ Under **Microsoft.AppPlatform/locations/operationResults/Spring**, select:
+
+ * **Read : Read operation result**
+
+ Under **Microsoft.AppPlatform/locations/operationStatus/operationId**, select:
+
+ * **Read : Read operation status**
+
+ Under **Microsoft.AppPlatform/skus**, select:
+
+ * **Read : List available skus**
+
+ [![Screenshot of Azure portal that shows the selections for Azure Pipelines / Jenkins / GitHub Actions permissions.](media/spring-cloud-permissions/pipelines-permissions-box.png)](media/spring-cloud-permissions/pipelines-permissions-box.png#lightbox)
+
+4. Select **Add**.
+
+5. Review the permissions.
+
+6. Select **Review and create**.
+
+### [JSON](#tab/JSON)
+
+1. Repeat steps 1 through 4 from the procedure for adding the Developer role.
+
+2. Select **Next**.
+
+3. Select the **JSON** tab.
+
+4. Select **Edit**, and then delete the default text:
+
+ ![Screenshot that shows the default JSON text.](media/spring-cloud-permissions/create-custom-role-edit-json.png)
+
+5. Paste in the following JSON to define the Azure Pipelines / Jenkins / GitHub Actions role:
+
+ * Basic/Standard tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "Azure Pipelines/Provisioning",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/write",
+ "Microsoft.AppPlatform/Spring/delete",
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/enableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/disableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/regenerateTestKey/action",
+ "Microsoft.AppPlatform/Spring/apps/write",
+ "Microsoft.AppPlatform/Spring/apps/delete",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/validateDomain/action",
+ "Microsoft.AppPlatform/Spring/apps/bindings/write",
+ "Microsoft.AppPlatform/Spring/apps/bindings/delete",
+ "Microsoft.AppPlatform/Spring/apps/bindings/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/write",
+ "Microsoft.AppPlatform/Spring/apps/deployments/delete",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/skus/read",
+ "Microsoft.AppPlatform/locations/checkNameAvailability/action",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+ * Enterprise tier
+
+ ```json
+ {
+ "properties": {
+ "roleName": "Azure Pipelines/Provisioning",
+ "description": "",
+ "assignableScopes": [
+ "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
+ ],
+ "permissions": [
+ {
+ "actions": [
+ "Microsoft.AppPlatform/Spring/write",
+ "Microsoft.AppPlatform/Spring/delete",
+ "Microsoft.AppPlatform/Spring/read",
+ "Microsoft.AppPlatform/Spring/enableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/disableTestEndpoint/action",
+ "Microsoft.AppPlatform/Spring/listTestKeys/action",
+ "Microsoft.AppPlatform/Spring/regenerateTestKey/action",
+ "Microsoft.AppPlatform/Spring/buildServices/read",
+ "Microsoft.AppPlatform/Spring/buildServices/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/results/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builds/results/getLogFileUrl/action",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/delete",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/read",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/write",
+ "Microsoft.AppPlatform/Spring/buildServices/builders/buildpackBindings/delete",
+ "Microsoft.AppPlatform/Spring/buildServices/supportedBuildpacks/read",
+ "Microsoft.AppPlatform/Spring/buildServices/supportedStacks/read",
+ "Microsoft.AppPlatform/Spring/apps/write",
+ "Microsoft.AppPlatform/Spring/apps/delete",
+ "Microsoft.AppPlatform/Spring/apps/read",
+ "Microsoft.AppPlatform/Spring/apps/getResourceUploadUrl/action",
+ "Microsoft.AppPlatform/Spring/apps/validateDomain/action",
+ "Microsoft.AppPlatform/Spring/apps/bindings/write",
+ "Microsoft.AppPlatform/Spring/apps/bindings/delete",
+ "Microsoft.AppPlatform/Spring/apps/bindings/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/write",
+ "Microsoft.AppPlatform/Spring/apps/deployments/delete",
+ "Microsoft.AppPlatform/Spring/apps/deployments/read",
+ "Microsoft.AppPlatform/Spring/apps/deployments/start/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/stop/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/restart/action",
+ "Microsoft.AppPlatform/Spring/apps/deployments/getLogFileUrl/action",
+ "Microsoft.AppPlatform/skus/read",
+ "Microsoft.AppPlatform/locations/checkNameAvailability/action",
+ "Microsoft.AppPlatform/locations/operationResults/Spring/read",
+ "Microsoft.AppPlatform/locations/operationStatus/operationId/read"
+ ],
+ "notActions": [],
+ "dataActions": [],
+ "notDataActions": []
+ }
+ ]
+ }
+ }
+ ```
+
+6. Select **Add**.
+
+7. Review the permissions.
+++
+## Next steps
+
+* [Create or update Azure custom roles using the Azure portal](../role-based-access-control/custom-roles-portal.md)
+
+For more information about three methods that define custom permissions, see:
+
+* [Clone a role](../role-based-access-control/custom-roles-portal.md#clone-a-role)
+* [Start from scratch](../role-based-access-control/custom-roles-portal.md#start-from-scratch)
+* [Start from JSON](../role-based-access-control/custom-roles-portal.md#start-from-json)
spring-apps How To Prepare App Deployment https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-prepare-app-deployment.md
+
+ Title: How to prepare an application for deployment in Azure Spring Apps
+description: Learn how to prepare an application for deployment to Azure Spring Apps.
+++ Last updated : 07/06/2021++
+zone_pivot_groups: programming-languages-spring-apps
++
+# Prepare an application for deployment in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows how to prepare an existing Steeltoe application for deployment to Azure Spring Apps. Azure Spring Apps provides robust services to host, monitor, scale, and update a Steeltoe app.
+
+This article explains the dependencies, configuration, and code that are required to run a .NET Core Steeltoe app in Azure Spring Apps. For information about how to deploy an application to Azure Spring Apps, see [Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md).
+
+>[!Note]
+> Steeltoe support for Azure Spring Apps is currently offered as a public preview. Public preview offerings allow customers to experiment with new features prior to their official release. Public preview features and services are not meant for production use. For more information about support during previews, see the [FAQ](https://azure.microsoft.com/support/faq/) or file a [Support request](../azure-portal/supportability/how-to-create-azure-support-request.md).
+
+## Supported versions
+
+Azure Spring Apps supports:
+
+* .NET Core 3.1
+* Steeltoe 2.4 and 3.0
+
+## Dependencies
+
+For Steeltoe 2.4, add the latest [Microsoft.Azure.SpringCloud.Client 1.x.x](https://www.nuget.org/packages/Microsoft.Azure.SpringCloud.Client/) package to the project file:
+
+```xml
+<ItemGroup>
+ <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="1.0.0-preview.1" />
+ <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="2.4.4" />
+ <PackageReference Include="Steeltoe.Extensions.Configuration.ConfigServerCore" Version="2.4.4" />
+ <PackageReference Include="Steeltoe.Management.TracingCore" Version="2.4.4" />
+ <PackageReference Include="Steeltoe.Management.ExporterCore" Version="2.4.4" />
+</ItemGroup>
+```
+
+For Steeltoe 3.0, add the latest [Microsoft.Azure.SpringCloud.Client 2.x.x](https://www.nuget.org/packages/Microsoft.Azure.SpringCloud.Client/) package to the project file:
+
+```xml
+<ItemGroup>
+ <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="2.0.0-preview.1" />
+ <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="3.0.0" />
+ <PackageReference Include="Steeltoe.Extensions.Configuration.ConfigServerCore" Version="3.0.0" />
+ <PackageReference Include="Steeltoe.Management.TracingCore" Version="3.0.0" />
+</ItemGroup>
+```
+
+## Update Program.cs
+
+In the `Program.Main` method, call the `UseAzureSpringCloudService` method.
+
+For Steeltoe 2.4.4, call `UseAzureSpringCloudService` after `ConfigureWebHostDefaults` and after `AddConfigServer` if it's called:
+
+```csharp
+public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseStartup<Startup>();
+ })
+ .AddConfigServer()
+ .UseAzureSpringCloudService();
+```
+
+For Steeltoe 3.0.0, call `UseAzureSpringCloudService` before `ConfigureWebHostDefaults` and before any Steeltoe configuration code:
+
+```csharp
+public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .UseAzureSpringCloudService()
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseStartup<Startup>();
+ })
+ .AddConfigServer();
+```
+
+## Enable Eureka Server service discovery
+
+> [!NOTE]
+> Eureka is not applicable to enterprise tier. If you're using enterprise tier, see [Use Service Registry](how-to-enterprise-service-registry.md).
+
+In the configuration source that will be used when the app runs in Azure Spring Apps, set `spring.application.name` to the same name as the Azure Spring Apps app to which the project will be deployed.
+
+For example, if you deploy a .NET project named `EurekaDataProvider` to an Azure Spring Apps app named `planet-weather-provider` the *appSettings.json* file should include the following JSON:
+
+```json
+"spring": {
+ "application": {
+ "name": "planet-weather-provider"
+ }
+}
+```
+
+## Use service discovery
+
+To call a service by using the Eureka Server service discovery, make HTTP requests to `http://<app_name>` where `app_name` is the value of `spring.application.name` of the target app. For example, the following code calls the `planet-weather-provider` service:
+
+```csharp
+using (var client = new HttpClient(discoveryHandler, false))
+{
+ var responses = await Task.WhenAll(
+ client.GetAsync("http://planet-weather-provider/weatherforecast/mercury"),
+ client.GetAsync("http://planet-weather-provider/weatherforecast/saturn"));
+ var weathers = await Task.WhenAll(from res in responses select res.Content.ReadAsStringAsync());
+ return new[]
+ {
+ new KeyValuePair<string, string>("Mercury", weathers[0]),
+ new KeyValuePair<string, string>("Saturn", weathers[1]),
+ };
+}
+```
++
+This article shows how to prepare an existing Java Spring application for deployment to Azure Spring Apps. If configured properly, Azure Spring Apps provides robust services to monitor, scale, and update your Java Spring application.
+
+Before running this example, you can try the [basic quickstart](./quickstart.md).
+
+Other examples explain how to deploy an application to Azure Spring Apps when the POM file is configured.
+
+* [Launch your first App](./quickstart.md)
+* [Introduction to the sample app](./quickstart-sample-app-introduction.md)
+
+This article explains the required dependencies and how to add them to the POM file.
+
+## Java Runtime version
+
+For details, see the [Java runtime and OS versions](./faq.md?pivots=programming-language-java#java-runtime-and-os-versions) section of the [Azure Spring Apps FAQ](./faq.md).
+
+## Spring Boot and Spring Cloud versions
+
+To prepare an existing Spring Boot application for deployment to Azure Spring Apps, include the Spring Boot and Spring Cloud dependencies in the application POM file as shown in the following sections.
+
+Azure Spring Apps will support the latest Spring Boot or Spring Cloud major version starting from 30 days after its release. The latest minor version will be supported as soon as it's released. You can get supported Spring Boot versions from [Spring Boot Releases](https://github.com/spring-projects/spring-boot/wiki/Supported-Versions#releases) and Spring Cloud versions from [Spring Cloud Releases](https://github.com/spring-cloud/spring-cloud-release/wiki).
+
+The following table lists the supported Spring Boot and Spring Cloud combinations:
+
+### [Basic/Standard tier](#tab/basic-standard-tier)
+
+| Spring Boot version | Spring Cloud version |
+||-|
+| 2.7.x | 2021.0.3+ aka Jubilee|
+| 2.6.x | 2021.0.0+ aka Jubilee|
+
+### [Enterprise tier](#tab/enterprise-tier)
+
+| Spring Boot version | Spring Cloud version |
+||-|
+| 2.7.x | 2021.0.3+ aka Jubilee |
+| 2.6.x | 2021.0.0+ aka Jubilee |
+| 2.5.x | 2020.3+ aka Ilford+ |
+| 2.4.x | 2020.0+ aka Ilford+ |
+| 2.3.x | Hoxton (starting with SR5) |
+++
+For more information, see the following pages:
+
+* [Spring Boot support](https://spring.io/projects/spring-boot#support)
+* [Spring Cloud Config support](https://spring.io/projects/spring-cloud-config#support)
+* [Spring Cloud Netflix support](https://spring.io/projects/spring-cloud-netflix#support)
+* [Spring Cloud 2020.0.0 (aka Ilford) Is Available](https://spring.io/blog/2020/12/22/spring-cloud-2020-0-0-aka-ilford-is-available)
+* [Adding Spring Cloud To An Existing Spring Boot Application](https://spring.io/projects/spring-cloud#adding-spring-cloud-to-an-existing-spring-boot-application)
+
+> [!NOTE]
+> - Upgrade Spring Boot to 2.5.2 or 2.4.8 to address the following CVE report [CVE-2021-22119: Denial-of-Service attack with spring-security-oauth2-client](https://tanzu.vmware.com/security/cve-2021-22119). If you're using Spring Security, upgrade it to 5.5.1, 5.4.7, 5.3.10 or 5.2.11.
+> - An issue was identified with Spring Boot 2.4.0 on TLS authentication between apps and Spring Cloud Service Registry. Use version 2.4.1 or above. If you must use version 2.4.0, see the [FAQ](./faq.md?pivots=programming-language-java#development) for a workaround.
+
+### Dependencies for Spring Boot version 2.4/2.5/2.6/2.7
+
+For Spring Boot version 2.4/2.5, add the following dependencies to the application POM file.
+
+```xml
+<!-- Spring Boot dependencies -->
+<parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>2.4.8</version>
+</parent>
+
+<!-- Spring Cloud dependencies -->
+<dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-dependencies</artifactId>
+ <version>2020.0.2</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+</dependencyManagement>
+```
+
+For Spring Boot version 2.6/2.7, add the following dependencies to the application POM file.
+
+```xml
+<!-- Spring Boot dependencies -->
+<parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>2.7.2</version>
+</parent>
+
+<!-- Spring Cloud dependencies -->
+<dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-dependencies</artifactId>
+ <version>2021.0.3</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+</dependencyManagement>
+```
+
+> [!WARNING]
+> Don't specify `server.port` in your configuration. Azure Spring Apps will override this setting to a fixed port number. You must also respect this setting and not specify a server port in your code.
+
+## Other recommended dependencies to enable Azure Spring Apps features
+
+To enable the built-in features of Azure Spring Apps from service registry to distributed tracing, you need to also include the following dependencies in your application. You can drop some of these dependencies if you don't need corresponding features for the specific apps.
+
+### Service Registry
+
+To use the managed Azure Service Registry service, include the `spring-cloud-starter-netflix-eureka-client` dependency in the *pom.xml* file as shown here:
+
+```xml
+<dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+</dependency>
+```
+
+The endpoint of the Service Registry server is automatically injected as environment variables with your app. Applications can register themselves with the Service Registry server and discover other dependent applications.
+
+#### EnableDiscoveryClient annotation
+
+Add the following annotation to the application source code.
+
+```java
+@EnableDiscoveryClient
+```
+
+For example, see the piggymetrics application from earlier examples:
+
+```java
+package com.piggymetrics.gateway;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@EnableZuulProxy
+
+public class GatewayApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(GatewayApplication.class, args);
+ }
+}
+```
+
+### Distributed configuration
+
+#### [Basic/Standard tier](#tab/basic-standard-tier)
+
+To enable distributed configuration, include the following `spring-cloud-config-client` dependency in the dependencies section of your *pom.xml* file:
+
+```xml
+<dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-config-client</artifactId>
+</dependency>
+<dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-bootstrap</artifactId>
+</dependency>
+```
+
+> [!WARNING]
+> Don't specify `spring.cloud.config.enabled=false` in your bootstrap configuration. Otherwise, your application stops working with Config Server.
+
+#### [Enterprise tier](#tab/enterprise-tier)
+
+To enable distributed configuration in Enterprise tier, use [Application Configuration Service for VMware Tanzu®](https://docs.pivotal.io/tcs-k8s/0-1/), which is one of the proprietary VMware Tanzu components. Application Configuration Service for Tanzu is Kubernetes-native, and totally different from Spring Cloud Config Server. Application Configuration Service for Tanzu enables the management of Kubernetes-native ConfigMap resources that are populated from properties defined in one or more Git repositories.
+
+In Enterprise tier, there's no Spring Cloud Config Server, but you can use Application Configuration Service for Tanzu to manage centralized configurations. For more information, see [Use Application Configuration Service for Tanzu](how-to-enterprise-application-configuration-service.md)
+
+To use Application Configuration Service for Tanzu, do the following steps for each of your apps:
+
+1. Add an explicit app binding to declare that your app needs to use Application Configuration Service for Tanzu.
+
+ > [!NOTE]
+ > When you change the bind/unbind status, you must restart or redeploy the app to make the change take effect.
+
+1. Set config file patterns. Config file patterns enable you to choose which application and profile the app will use. For more information, see the [Pattern](how-to-enterprise-application-configuration-service.md#pattern) section of [Use Application Configuration Service for Tanzu](how-to-enterprise-application-configuration-service.md).
+
+ Another option is to set the config file patterns at the same time as your app deployment, as shown in the following example:
+
+ ```azurecli
+ az spring app deploy \
+ --name <app-name> \
+ --artifact-path <path-to-your-JAR-file> \
+ --config-file-pattern <config-file-pattern>
+ ```
+++
+### Metrics
+
+Include the `spring-boot-starter-actuator` dependency in the dependencies section of your *pom.xml* file as shown here:
+
+```xml
+<dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+</dependency>
+```
+
+ Metrics are periodically pulled from the JMX endpoints. You can visualize the metrics by using the Azure portal.
+
+ > [!WARNING]
+ > You must specify `spring.jmx.enabled=true` in your configuration property. Otherwise, metrics can't be visualized in the Azure portal.
+
+## See also
+
+* [Analyze application logs and metrics](./diagnostic-services.md)
+* [Set up your Config Server](./how-to-config-server.md)
+* [Spring Quickstart Guide](https://spring.io/quickstart)
+* [Spring Boot documentation](https://spring.io/projects/spring-boot)
+
+## Next steps
+
+In this article, you learned how to configure your Java Spring application for deployment to Azure Spring Apps. To learn how to set up a Config Server instance, see [Set up a Config Server instance](./how-to-config-server.md).
+
+More samples are available on GitHub: [Azure Spring Apps Samples](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples).
spring-apps How To Scale Manual https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-scale-manual.md
+
+ Title: "Scale an application in Azure Spring Apps | Microsoft Docs"
+description: Learn how to scale an application with Azure Spring Apps in the Azure portal
++++ Last updated : 10/06/2019+++
+# Scale an application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article demonstrates how to scale any Spring application using the Azure Spring Apps dashboard in the Azure portal.
+
+Scale your application up and down by modifying its number of virtual CPUs (vCPUs) and amount of memory. Scale your application in and out by modifying the number of application instances.
+
+After you finish, you'll know how to make quick manual changes to each application in your service. Scaling takes effect in seconds and doesn't require any code changes or redeployment.
+
+## Prerequisites
+
+To follow these procedures, you need:
+
+* An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* A deployed Azure Spring Apps service instance. Follow the [quickstart on deploying an app via the Azure CLI](./quickstart.md) to get started.
+* At least one application already created in your service instance.
+
+## Navigate to the Scale page in the Azure portal
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+
+1. Go to your Azure Spring Apps **Overview** page.
+
+1. Select the resource group that contains your service.
+
+1. Select the **Apps** tab under **Settings** in the menu on the left side of the page.
+
+1. Select the application you want to scale. In this example, select the application named **account-service**. You should then see the application's **Overview** page.
+
+1. Go to the **Scale** tab under **Settings** in the menu on the left side of the page. You should see options for the scaling the attributes shown in the following section.
+
+## Scale your application
+
+If you modify the scaling attributes, keep the following notes in mind:
+
+* **CPUs**: The maximum number of CPUs per application instance is four. The total number of CPUs for an application is the value set here multiplied by the number of application instances.
+
+* **Memory/GB**: The maximum amount of memory per application instance is 8 GB. The total amount of memory for an application is the value set here multiplied by the number of application instances.
+
+* **App instance count**: In the Standard tier, you can scale out to a maximum of 20 instances. This value changes the number of separate running instances of the Spring application.
+
+Be sure to select **Save** to apply your scaling settings.
+
+![The Scale service in the Azure portal](media/spring-cloud-tutorial-scale-manual/scale-up-out.png)
+
+After a few seconds, the changes you made are displayed on the **Overview** page, with more details available in the **Application instances** tab. Scaling doesn't require any code changes or redeployment.
+
+## Upgrade to the Standard tier
+
+If you are on the Basic tier and constrained by one or more of these [limits](./quotas.md), you can upgrade to the Standard tier. To do this go to the Pricing tier menu by first selecting the **Standard tier** column and then selecting the **Upgrade** button.
+
+## Next steps
+
+This example explained how to manually scale an application in Azure Spring Apps. To learn how to monitor an application by setting up alerts, see [Set-up autoscale](./how-to-setup-autoscale.md).
+
+> [!div class="nextstepaction"]
+> [Learn how to set up alerts](./tutorial-alerts-action-groups.md)
spring-apps How To Self Diagnose Running In Vnet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-self-diagnose-running-in-vnet.md
+
+ Title: "How to self-diagnose Azure Spring Apps VNET"
+description: Learn how to self-diagnose and solve problems in Azure Spring Apps running in VNET.
++++ Last updated : 01/25/2021+++
+# Self-diagnose running Azure Spring Apps in VNET
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use Azure Spring Apps diagnostics to diagnose and solve problems in Azure Spring Apps running in VNET.
+
+Azure Spring Apps diagnostics supports interactive troubleshooting apps running in virtual networks without configuration. Azure Spring Apps diagnostics identifies problems and guides you to information that helps troubleshoot and resolve them.
+
+## Navigate to the diagnostics page
+
+The following procedure starts diagnostics for networked applications.
+
+1. Sign in to the Azure portal.
+1. Go to your Azure Spring Apps Overview page.
+1. Select **Diagnose and solve problems** in the menu on the left navigation pane.
+1. Select the third category, **Networking**.
+
+ ![Self diagnostic title](media/spring-cloud-self-diagnose-vnet/self-diagostic-title.png)
+
+## View a diagnostic report
+
+After you select the **Networking** category, you can view two issues related to Networking specific to your VNet injected Azure Spring Apps: **DNS Resolution** and **Required Outbound Traffic**.
+
+ ![Self diagnostic options](media/spring-cloud-self-diagnose-vnet/self-diagostic-dns-req-outbound-options.png)
+
+Select your target issue to view the diagnostic report. A summary of diagnostics will be displayed, such as:
+
+* *Resource has been removed.*
+* *Resource is not deployed in your own virtual network*.
+
+Some results contain related documentation. Different subnets will display the results separately.
+
+## DNS resolution
+
+If you select **DNS Resolution**, results will indicate whether there are DNS issues with applications. Healthy apps are listed as follows:
+
+* *DNS issues resolved with no issues in subnet 'subnet01'*.
+* *DNS issues resolved with no issues in subnet 'subnet02'*.
+
+The following diagnostic report example indicates that the health of the application is unknown. The reporting time frame does not include the time when the health status was reported. Assume that the context end time is *2021-03-03T04:20:00Z*. The latest TIMESTAMP in the **DNS Resolution Table Renderings** is *2021-03-03T03:39:00Z*, the previous day. The health check log may not have been sent out because of a blocked network.
+
+The unknown health status results contain related documentation. You can select the left angle bracket to see the drop-down display.
+
+![DNS unknown](media/spring-cloud-self-diagnose-vnet/self-diagostic-dns-unknown.png)
+
+If you misconfigured your Private DNS Zone record set, you will get a critical result such as: `Failed to resolve the Private DNS in subnet xxx`.
+
+In the drop-down **DNS Resolution Table Renderings** you will find the detail message info from which you can check your config.
+
+## Required Outbound Traffic
+
+If you select **Required Outbound Traffic**, results will indicate whether there are outbound traffic issues with applications. Healthy apps are listed as follows:
+
+* *Required outbound traffic resolved with no issues in subnet 'subnet01'.
+* *Required outbound traffic resolved with no issues in subnet 'subnet02'.
+
+If any subnet is blocked by NSG or firewall rules, and if you have not blocked the log, you will find the following failures. You can check whether you overlooked any [Customer Responsibilities](./vnet-customer-responsibilities.md).
+
+![Endpoint failed](media/spring-cloud-self-diagnose-vnet/self-diagostic-endpoint-failed.png)
+
+If there is no data in the `Required Outbound Traffic Table Renderings` within 30 minutes, the result will be `health status unknown`.
+Maybe your network is blocked or the log service is down.
+
+![Diagnostic endpoint unknown](media/spring-cloud-self-diagnose-vnet/self-diagostic-endpoint-unknown.png)
+
+## Next steps
+
+* [How to self diagnose Azure Spring Apps](./how-to-self-diagnose-solve.md)
spring-apps How To Self Diagnose Solve https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-self-diagnose-solve.md
+
+ Title: "How to self-diagnose and solve problems in Azure Spring Apps"
+description: Learn how to self-diagnose and solve problems in Azure Spring Apps.
++++ Last updated : 05/29/2020+++
+# Self-diagnose and solve problems in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use Azure Spring Apps diagnostics.
+
+Azure Spring Apps diagnostics is an interactive experience to troubleshoot your app without configuration. Azure Spring Apps diagnostics identifies problems and guides you to information that helps troubleshoot and resolve issues.
+
+## Prerequisites
+
+To complete this exercise, you need:
+
+* An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* A deployed Azure Spring Apps service instance. Follow our [quickstart on deploying an app via the Azure CLI](./quickstart.md) to get started.
+* At least one application already created in your service instance.
+
+## Navigate to the diagnostics page
+
+1. Sign in to the Azure portal.
+2. Go to your Azure Spring Apps **Overview** page.
+3. Select **Diagnose and solve problems** in the left navigation pane.
+
+![Diagnose, solve dialog](media/spring-cloud-diagnose/diagnose-solve-dialog.png)
+
+## Search logged issues
+
+To find an issue, you can either search by typing a keyword or select the solution group to explore all in that category.
+
+![Search issues](media/spring-cloud-diagnose/search-detectors.png)
+
+Selection of **Config Server Health Check**, **Config Server Health Status**, or **Config Server Update History** will display various results.
+
+> [!NOTE]
+> Spring Cloud Config Server is not applicable to enterprise tier.
+
+![Issues options](media/spring-cloud-diagnose/detectors-options.png)
+
+Find your target detector, and select it to execute. A summary of diagnostics will be shown after you execute the detector. You can select **View Full Report** to check diagnostic details or select **Show Tile Menu** button to go back to detector list.
+
+![Summary diagnostics](media/spring-cloud-diagnose/summary-diagnostics.png)
+
+In diagnostic details page, you can change the diagnostic time range with the controller at top-right corner. To see more metrics or logs, toggle each diagnostic. There can be a 15-minute delay for metrics and logs.
+
+![Diagnostics details](media/spring-cloud-diagnose/diagnostics-details.png)
+
+Some results contain related documentation.
+
+![Related details](media/spring-cloud-diagnose/related-details.png)
+
+## Next steps
+
+* [Monitor Spring app resources using alerts and action groups](./tutorial-alerts-action-groups.md)
+* [Security controls for Azure Spring Apps Service](./concept-security-controls.md)
spring-apps How To Service Registration https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-service-registration.md
+
+ Title: Discover and register your Spring Boot applications in Azure Spring Apps
+description: Discover and register your Spring Boot applications with managed Spring Cloud Service Registry (OSS) in Azure Spring Apps
++++ Last updated : 05/09/2022+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Discover and register your Spring Boot applications
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+This article shows you how to register your application using Spring Cloud Service Registry.
+
+Service registration and discovery are key requirements for maintaining a list of live app instances to call, and routing and load balancing inbound requests. Configuring each client manually takes time and introduces the possibility of human error. Azure Spring Apps provides two options for you to solve this problem:
+
+* Use Kubernetes Service Discovery approach to invoke calls among your apps.
+
+ Azure Spring Apps creates a corresponding kubernetes service for every app running in it using app name as the kubernetes service name. So you can invoke calls in one app to another app by using app name in a http/https request like http(s)://{app name}/path. And this approach is also suitable for Enterprise tier.
+
+* Use Managed Spring Cloud Service Registry (OSS) in Azure Spring Apps.
+
+ After configuration, a Service Registry server will control service registration and discovery for your applications. The Service Registry server maintains a registry of live app instances, enables client-side load-balancing, and decouples service providers from clients without relying on DNS.
++
+For information about how to set up service registration for a Steeltoe app, see [Prepare a Java Spring application for deployment in Azure Spring Apps](how-to-prepare-app-deployment.md).
+++
+## Register your application using Spring Cloud Service Registry
+
+Before your application can manage service registration and discovery using Spring Cloud Service Registry, you must include the following dependency for *spring-cloud-starter-netflix-eureka-client* to your *pom.xml*:
+
+```xml
+<dependency>
+ <groupId>org.springframework.cloud</groupId>
+ <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+</dependency>
+```
+
+## Update the top level class
+
+Finally, add an annotation to the top level class of your application as shown in the following example:
+
+```java
+package foo.bar;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+
+@SpringBootApplication
+@EnableEurekaClient
+public class DemoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+}
+```
+
+The Spring Cloud Service Registry server endpoint will be injected as an environment variable in your application. Applications will now be able to register themselves with the Service Registry server and discover other dependent applications.
+
+> [!NOTE]
+> It can take a few minutes for the changes to propagate from the server to all applications.
spring-apps How To Set Up Sso With Azure Ad https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-set-up-sso-with-azure-ad.md
+
+ Title: How to set up single sign-on with Azure AD for Spring Cloud Gateway and API Portal for Tanzu
+
+description: How to set up single sign-on with Azure Active Directory for Spring Cloud Gateway and API Portal for Tanzu with Azure Spring Apps Enterprise Tier.
++++ Last updated : 05/20/2022+++
+# Set up single sign-on using Azure Active Directory for Spring Cloud Gateway and API Portal
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to configure single sign-on (SSO) for Spring Cloud Gateway or API Portal using the Azure Active Directory (Azure AD) as an OpenID identify provider.
+
+## Prerequisites
+
+- An Enterprise tier instance with Spring Cloud Gateway or API portal enabled. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+- Sufficient permissions to manage Azure AD applications.
+
+To enable SSO for Spring Cloud Gateway or API Portal, you need the following four properties configured:
+
+| SSO Property | Azure AD Configuration |
+| - | - |
+| clientId | See [Register App](#create-an-azure-ad-application-registration) |
+| clientSecret | See [Create Client Secret](#add-a-client-secret) |
+| scope | See [Configure Scope](#configure-scope) |
+| issuerUri | See [Generate Issuer URI](#configure-issuer-uri) |
+
+You'll configure the properties in Azure AD in the following steps.
+
+## Assign an endpoint for Spring Cloud Gateway or API Portal
+
+First, you must get the assigned public endpoint for Spring Cloud Gateway and API portal by following these steps:
+
+1. Open your Enterprise tier service instance in [Azure portal](https://portal.azure.com).
+1. Select **Spring Cloud Gateway** or **API portal** under *VMware Tanzu components* in the left menu.
+1. Select **Yes** next to *Assign endpoint*.
+1. Copy the URL for use in the next section of this article.
+
+## Create an Azure AD application registration
+
+Register your application to establish a trust relationship between your app and the Microsoft identity platform using the following steps:
+
+1. From the *Home* screen, select **Azure Active Directory** from the left menu.
+1. Select **App Registrations** under *Manage*, then select **New registration**.
+1. Enter a display name for your application under *Name*, then select an account type to register under *Supported account types*.
+1. In *Redirect URI (optional)* select **Web**, then enter the URL from the above section in the text box. The redirect URI is the location where Azure AD redirects your client and sends security tokens after authentication.
+1. Select **Register** to finish registering the application.
++
+When registration finishes, you'll see the *Application (client) ID* on the **Overview** screen of the *App registrations** page.
+
+## Add a redirect URI after app registration
+
+You can also add redirect URIs after app registration by following these steps:
+
+1. From your application overview, under *Manage* in the left menu, select **Authentication**.
+1. Select **Web**, then select **Add URI** under *Redirect URIs*.
+1. Add a new redirect URI, then select **Save**.
++
+For more information on Application Registration, see [Quickstart: Register an app in the Microsoft identity platform ](../active-directory/develop/quickstart-register-app.md#quickstart-register-an-application-with-the-microsoft-identity-platform).
+
+## Add a client secret
+
+The application uses a client secret to authenticate itself in SSO workflow. You can add a client secret using the following steps:
+
+1. From your application overview, under *Manage* in the left menu, select **Certificates & secrets**.
+1. Select **Client secrets**, then select **New client secret**.
+1. Enter a description for the client secret, then set an expiration date.
+1. Select **Add**.
+
+> [!WARNING]
+> Remember to save the client secret in a secure place. You can't retrieve it after you leave this page. The client secret should be provided with the client ID when you sign in as the application.
+
+## Configure scope
+
+The `scope` property of SSO is a list of scopes to be included in JWT identity tokens. They're often referred to permissions. Identity platform supports several [OpenID Connect scopes](../active-directory/develop/v2-permissions-and-consent.md#openid-connect-scopes), such as `openid`, `email` and `profile`.
+
+## Configure issuer URI
+
+The issuer URI is the URI that is asserted as its Issuer Identifier. For example, if the issuer-uri provided is `https://example.com`, then an OpenID Provider Configuration Request will be made to `https://example.com/.well-known/openid-configuration`.
+
+The issuer URI of Azure AD is like `<authentication-endpoint>/<Your-TenantID>/v2.0`. Replace `<authentication-endpoint>` with the authentication endpoint for your cloud environment (for example, `https://login.microsoftonline.com` for global Azure), and replace `<Your-TenantID>` with the Directory (tenant) ID where the application was registered.
+
+## Configure SSO
+
+After configuring your Azure AD application, you can set up the SSO properties of Spring Cloud Gateway or API Portal following these steps:
+
+1. Select **Spring Cloud Gateway** or **API portal** under *VMware Tanzu components* in the left menu, then select **Configuration**.
+1. Enter the `Scope`, `Client Id`, `Client Secret`, and `Issuer URI` in the appropriate fields. Separate multiple scopes with a comma.
+1. Select **Save** to enable the SSO configuration.
+
+> [!NOTE]
+> After configuring SSO properties, remember to enable SSO for the Spring Cloud Gateway routes by setting `ssoEnabled=true`. For more information, see [route configuration](./how-to-use-enterprise-spring-cloud-gateway.md#configure-routes).
+
+## Next steps
+- [Configure routes](./how-to-use-enterprise-spring-cloud-gateway.md#configure-routes)
spring-apps How To Setup Autoscale https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-setup-autoscale.md
+
+ Title: "Set up autoscale for applications"
+description: This article describes how to set up Autoscale settings for your applications using the Microsoft Azure portal or the Azure CLI.
++++ Last updated : 11/03/2021+++
+# Set up autoscale for applications
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article describes how to set up Autoscale settings for your applications using the Microsoft Azure portal or the Azure CLI.
+
+Autoscale is a built-in feature of Azure Spring Apps that helps applications perform their best when demand changes. Azure Spring Apps supports scale-out and scale-in, which includes modifying the number of app instances and load balancing.
+
+## Prerequisites
+
+To follow these procedures, you need:
+
+* An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* A deployed Azure Spring Apps service instance. Follow the [quickstart on deploying an app via the Azure CLI](./quickstart.md) to get started.
+* At least one application already created in your service instance.
+
+## Navigate to the Autoscale page in the Azure portal
+
+1. Sign in to the [Azure portal](https://portal.azure.com/).
+2. Go to the Azure Spring Apps **Overview** page.
+3. Select the resource group that contains your service.
+4. Select the **Apps** tab under **Settings** in the menu on the left navigation pane.
+5. Select the application for which you want to set up Autoscale. In this example, select the application named **demo**. You should then see the application's **Overview** page.
+6. Go to the **Scale out** tab under **Settings** in the menu on the left navigation pane.
+7. Select the deployment you want to set up Autoscale. The options for Autoscale are described in the following section.
+
+![Screenshot of Azure portal **Scale out** page with `demo/default` deployment indicated.](./media/spring-cloud-autoscale/autoscale-menu.png)
+
+## Set up Autoscale settings for your application in the Azure portal
+
+There are two options for Autoscale demand management:
+
+* Manual scale: Maintains a fixed instance count. In the Standard tier, you can scale out to a maximum of 500 instances. This value changes the number of separate running instances of the application.
+* Custom autoscale: Scales on any schedule, based on any metrics.
+
+In the Azure portal, choose how you want to scale. The following figure shows the **Custom autoscale** option and mode settings.
++
+## Set up Autoscale settings for your application in Azure CLI
+
+You can also set Autoscale modes using the Azure CLI. The following commands create an Autoscale setting and an Autoscale rule.
+
+* Create Autoscale setting:
+
+ ```azurecli
+ az monitor autoscale create \
+ --resource-group demo-rg \
+ --name demo-setting \
+ --resource /subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourcegroups/demo-rg/providers/Microsoft.AppPlatform/Spring/autoscale/apps/demo/deployments/default \
+ --min-count 1 \
+ --max-count 5 \
+ --count 1
+ ```
+
+* Create Autoscale rule:
+
+ ```azurecli
+ az monitor autoscale rule create \
+ --resource-group demo-rg \
+ --autoscale-name demo-setting \
+ --scale out 1 \
+ --cooldown 1 \
+ --condition "tomcat.global.request.total.count > 100 avg 1m where AppName == demo and Deployment == default"
+ ```
+
+For information on the available metrics, see the [User metrics options](./concept-metrics.md#user-metrics-options) section of [Metrics for Azure Spring Apps](./concept-metrics.md).
+
+## Upgrade to the Standard tier
+
+If you're on the Basic tier and constrained by one or more of these limits, you can upgrade to the Standard tier. To upgrade, go to the **Pricing** tier menu by first selecting the **Standard tier** column and then selecting the **Upgrade** button.
+
+## Next steps
+
+* [Overview of autoscale in Microsoft Azure](../azure-monitor/autoscale/autoscale-overview.md)
+* [Azure CLI Monitoring autoscale](/cli/azure/monitor/autoscale)
spring-apps How To Staging Environment https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-staging-environment.md
+
+ Title: Set up a staging environment in Azure Spring Apps | Microsoft Docs
+description: Learn how to use blue-green deployment with Azure Spring Apps
+++ Last updated : 01/14/2021++++
+# Set up a staging environment in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to set up a staging deployment by using the blue-green deployment pattern in Azure Spring Apps. Blue-green deployment is an Azure DevOps continuous delivery pattern that relies on keeping an existing (blue) version live while a new (green) one is deployed. This article shows you how to put that staging deployment into production without changing the production deployment.
+
+## Prerequisites
+
+* Azure Spring Apps instance on a Standard pricing tier
+* [Azure Spring Apps extension](/cli/azure/azure-cli-extensions-overview) for the Azure CLI
+
+This article uses an application built from Spring Initializr. If you want to use a different application for this example, you'll need to make a simple change in a public-facing portion of the application to differentiate your staging deployment from production.
+
+> [!TIP]
+> [Azure Cloud Shell](https://shell.azure.com) is a free interactive shell that you can use to run the instructions in this article. It has common, preinstalled Azure tools, including the latest versions of Git, JDK, Maven, and the Azure CLI. If you're signed in to your Azure subscription, start your Cloud Shell instance. To learn more, see [Overview of Azure Cloud Shell](../cloud-shell/overview.md).
+
+To set up blue-green deployment in Azure Spring Apps, follow the instructions in the next sections.
+
+## Install the Azure CLI extension
+
+Install the Azure Spring Apps extension for the Azure CLI by using the following command:
+
+```azurecli
+az extension add --name spring
+```
+
+## Prepare the app and deployments
+
+To build the application, follow these steps:
+
+1. Generate the code for the sample app by using Spring Initializr with [this configuration](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.3.4.RELEASE&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-starter-sleuth,cloud-starter-zipkin,cloud-config-client).
+
+2. Download the code.
+3. Add the following *HelloController.java* source file to the folder *\src\main\java\com\example\hellospring\*:
+
+ ```java
+ package com.example.hellospring;
+ import org.springframework.web.bind.annotation.RestController;
+ import org.springframework.web.bind.annotation.RequestMapping;
+
+ @RestController
+
+ public class HelloController {
+
+ @RequestMapping("/")
+
+ public String index() {
+ return "Greetings from Azure Spring Apps!";
+ }
+
+ }
+ ```
+
+4. Build the *.jar* file:
+
+ ```azurecli
+ mvn clean package -DskipTests
+ ```
+
+5. Create the app in your Azure Spring Apps instance:
+
+ ```azurecli
+ az spring app create -n demo -g <resourceGroup> -s <Azure Spring Apps instance> --assign-endpoint
+ ```
+
+6. Deploy the app to Azure Spring Apps:
+
+ ```azurecli
+ az spring app deploy -n demo -g <resourceGroup> -s <Azure Spring Apps instance> --jar-path target\hellospring-0.0.1-SNAPSHOT.jar
+ ```
+
+7. Modify the code for your staging deployment:
+
+ ```java
+ package com.example.hellospring;
+ import org.springframework.web.bind.annotation.RestController;
+ import org.springframework.web.bind.annotation.RequestMapping;
+
+ @RestController
+
+ public class HelloController {
+
+ @RequestMapping("/")
+
+ public String index() {
+ return "Greetings from Azure Spring Apps! THIS IS THE GREEN DEPLOYMENT";
+ }
+
+ }
+ ```
+
+8. Rebuild the *.jar* file:
+
+ ```azurecli
+ mvn clean package -DskipTests
+ ```
+
+9. Create the green deployment:
+
+ ```azurecli
+ az spring app deployment create -n green --app demo -g <resourceGroup> -s <Azure Spring Apps instance> --jar-path target\hellospring-0.0.1-SNAPSHOT.jar
+ ```
+
+## View apps and deployments
+
+View deployed apps by using the following procedure:
+
+1. Go to your Azure Spring Apps instance in the Azure portal.
+
+1. From the left pane, open the **Apps** pane to view apps for your service instance.
+
+ ![Screenshot of the open Apps pane.](media/spring-cloud-blue-green-staging/app-dashboard.png)
+
+1. You can select an app and view details.
+
+ ![Screenshot of details for an app.](media/spring-cloud-blue-green-staging/app-overview.png)
+
+1. Open **Deployments** to see all deployments of the app. The grid shows both production and staging deployments.
+
+ ![Screenshot that shows listed app deployments.](media/spring-cloud-blue-green-staging/deployments-dashboard.png)
+
+1. Select the URL to open the currently deployed application.
+
+ ![Screenshot that shows the U R L for the deployed application.](media/spring-cloud-blue-green-staging/running-blue-app.png)
+
+1. Select **Production** in the **State** column to see the default app.
+
+ ![Screenshot that shows the U R L for the default app.](media/spring-cloud-blue-green-staging/running-default-app.png)
+
+1. Select **Staging** in the **State** column to see the staging app.
+
+ ![Screenshot that shows the U R L for the staging app.](media/spring-cloud-blue-green-staging/running-staging-app.png)
+
+>[!TIP]
+> * Confirm that your test endpoint ends with a slash (/) to ensure that the CSS file is loaded correctly.
+> * If your browser requires you to enter login credentials to view the page, use [URL decode](https://www.urldecoder.org/) to decode your test endpoint. URL decode returns a URL in the format *https://\<username>:\<password>@\<cluster-name>.test.azureapps.io/gateway/green*. Use this format to access your endpoint.
+
+>[!NOTE]
+> Configuration server settings apply to both your staging environment and your production environment. For example, if you set the context path (*server.servlet.context-path*) for your app gateway in the configuration server as *somepath*, the path to your green deployment changes to *https://\<username>:\<password>@\<cluster-name>.test.azureapps.io/gateway/green/somepath/...*.
+
+If you visit your public-facing app gateway at this point, you should see the old page without your new change.
+
+## Set the green deployment as the production environment
+
+1. After you've verified your change in your staging environment, you can push it to production. On the **Apps** > **Deployments** page, select the application currently in **Production**.
+
+1. Select the ellipsis after **Registration status** of the green deployment, and then select **Set as production**.
+
+ ![Screenshot that shows selections for setting the staging build to production.](media/spring-cloud-blue-green-staging/set-staging-deployment.png)
+
+1. Confirm that the URL of the app displays your changes.
+
+ ![Screenshot that shows the U R L of the app now in production.](media/spring-cloud-blue-green-staging/new-production-deployment.png)
+
+>[!NOTE]
+> After you've set the green deployment as the production environment, the previous deployment becomes the staging deployment.
+
+## Modify the staging deployment
+
+If you're not satisfied with your change, you can modify your application code, build a new .jar package, and upload it to your green deployment by using the Azure CLI:
+
+```azurecli
+az spring app deploy -g <resource-group-name> -s <service-instance-name> -n gateway -d green --jar-path gateway.jar
+```
+
+## Delete the staging deployment
+
+To delete your staging deployment from the Azure portal, go to the page for your staging deployment and select the **Delete** button.
+
+Alternatively, delete your staging deployment from the Azure CLI by running the following command:
+
+```azurecli
+az spring app deployment delete -n <staging-deployment-name> -g <resource-group-name> -s <service-instance-name> --app gateway
+```
+
+## Next steps
+
+* [CI/CD for Azure Spring Apps](./how-to-cicd.md?pivots=programming-language-java)
spring-apps How To Start Stop Delete https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-start-stop-delete.md
+
+ Title: Start, stop, and delete an application in Azure Spring Apps | Microsoft Docs
+description: How to start, stop, and delete an application in Azure Spring Apps
+++ Last updated : 10/31/2019++++
+# Start, stop, and delete an application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This guide explains how to change an application's state in Azure Spring Apps by using either the Azure portal or the Azure CLI.
+
+## Using the Azure portal
+
+After you deploy an application, you can start, stop, and delete it by using the Azure portal.
+
+1. Go to your Azure Spring Apps service instance in the Azure portal.
+1. Select the **Application Dashboard** tab.
+1. Select the application whose state you want to change.
+1. On the **Overview** page for that application, select **Start/Stop**, **Restart**, or **Delete**.
+
+## Using the Azure CLI
+
+> [!NOTE]
+> You can use optional parameters and configure defaults with the Azure CLI. Learn more about the Azure CLI by reading [our reference documentation](/cli/azure/spring).
+
+First, install the Azure Spring Apps extension for the Azure CLI as follows:
+
+```azurecli
+az extension add --name spring
+```
+
+Next, select any of these Azure CLI operations:
+
+* To start your application:
+
+ ```azurecli
+ az spring app start -n <application name> -g <resource group> -s <Azure Spring Apps name>
+ ```
+
+* To stop your application:
+
+ ```azurecli
+ az spring app stop -n <application name> -g <resource group> -s <Azure Spring Apps name>
+ ```
+
+* To restart your application:
+
+ ```azurecli
+ az spring app restart -n <application name> -g <resource group> -s <Azure Spring Apps name>
+ ```
+
+* To delete your application:
+
+ ```azurecli
+ az spring app delete -n <application name> -g <resource group> -s <Azure Spring Apps name>
+ ```
spring-apps How To Start Stop Service https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-start-stop-service.md
+
+ Title: How to start or stop an Azure Spring Apps service instance
+description: Describes how to start or stop an Azure Spring Apps service instance
++++ Last updated : 11/04/2021+++
+# Start or stop your Azure Spring Apps service instance
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to start or stop your Azure Spring Apps service instance.
+
+> [!NOTE]
+> Stop and start is currently under preview and we do not recommend this feature for production.
+
+Your applications running in Azure Spring Apps may not need to run continuously - for example, if you have a service instance that's used only during business hours. At these times, Azure Spring Apps may be idle, and running only the system components.
+
+You can reduce the active footprint of Azure Spring Apps by reducing the running instances and ensuring costs for compute resources are reduced.
+
+To reduce your costs further, you can completely stop your Azure Spring Apps service instance. All user apps and system components will be stopped. However, all your objects and network settings will be saved so you can restart your service instance and pick up right where you left off.
+
+> [!NOTE]
+> The state of a stopped Azure Spring Apps service instance is preserved for up to 90 days during preview. If your cluster is stopped for more than 90 days, the cluster state cannot be recovered.
+> The maximum stop time may change after preview.
+
+You can only start, view, or delete a stopped Azure Spring Apps service instance. You must start your service instance before performing any update operation, such as creating or scaling an app.
+
+## Prerequisites
+
+- An existing service instance in Azure Spring Apps. To create a new service instance, see [Quickstart: Deploy your first application in Azure Spring Apps](./quickstart.md).
+- (Optional) [Azure CLI](/cli/azure/install-azure-cli) version 2.11.2 or later.
+
+## [Portal](#tab/azure-portal)
+
+## Stop a running instance
+
+In the Azure portal, use the following steps to stop a running Azure Spring Apps instance:
+
+1. Go to the Azure Spring Apps service overview page.
+2. Select **Stop** to stop a running instance.
+
+ :::image type="content" source="media/stop-start-service/spring-cloud-stop-service.png" alt-text="Screenshot of Azure portal showing the Azure Spring Apps Overview page with the Stop button and Status value highlighted.":::
+
+3. After the instance stops, the status will show **Succeeded (Stopped)**.
+
+## Start a stopped instance
+
+In the Azure portal, use the following steps to start a stopped Azure Spring Apps instance:
+
+1. Go to Azure Spring Apps service overview page.
+2. Select **Start** to start a stopped instance.
+
+ :::image type="content" source="media/stop-start-service/spring-cloud-start-service.png" alt-text="Screenshot of Azure portal showing the Azure Spring Apps Overview page with the Start button and Status value highlighted.":::
+
+3. After the instance starts, the status will show **Succeeded (Running)**.
+
+## [Azure CLI](#tab/azure-cli)
+
+## Stop a running instance
+
+With the Azure CLI, use the following command to stop a running Azure Spring Apps instance:
+
+```azurecli
+az spring stop \
+ --name <service-instance-name> \
+ --resource-group <resource-group-name>
+```
+
+## Start a stopped instance
+
+With the Azure CLI, use the following command to start a stopped Azure Spring Apps instance:
+
+```azurecli
+az spring start \
+ --name <service-instance-name> \
+ --resource-group <resource-group-name>
+```
+
+## Check the power state
+
+After the instance stops or starts, use the following command to check the power state:
+
+```azurecli
+az spring show \
+ --name <service-instance-name> \
+ --resource-group <resource-group-name>
+```
+++
+## Next steps
+
+- [Monitor app lifecycle events using Azure Activity log and Azure Service Health](./monitor-app-lifecycle-events.md)
+- [Monitor usage and estimated costs in Azure Monitor](../azure-monitor/usage-estimated-costs.md)
spring-apps How To Use Enterprise Api Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-enterprise-api-portal.md
+
+ Title: How to use API portal for VMware Tanzu with Azure Spring Apps Enterprise Tier
+
+description: How to use API portal for VMware Tanzu with Azure Spring Apps Enterprise Tier.
++++ Last updated : 02/09/2022+++
+# Use API portal for VMware Tanzu
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use API portal for VMware Tanzu® with Azure Spring Apps Enterprise Tier.
+
+[API portal](https://docs.vmware.com/en/API-portal-for-VMware-Tanzu/1.0/api-portal/GUID-https://docsupdatetracker.net/index.html) is one of the commercial VMware Tanzu components. API portal supports viewing API definitions from [Spring Cloud Gateway for VMware Tanzu®](./how-to-use-enterprise-spring-cloud-gateway.md) and testing of specific API routes from the browser. It also supports enabling single sign-on (SSO) authentication via configuration.
+
+## Prerequisites
+
+- An already provisioned Azure Spring Apps Enterprise tier instance with API portal enabled. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+ > [!NOTE]
+ > To use API portal, you must enable it when you provision your Azure Spring Apps service instance. You cannot enable it after provisioning at this time.
+
+- [Spring Cloud Gateway for Tanzu](./how-to-use-enterprise-spring-cloud-gateway.md) is enabled during provisioning and the corresponding API metadata is configured.
+
+## Configure API portal
+
+The following sections describe configuration in API portal.
+
+### Configure single sign-on (SSO)
+
+API portal supports authentication and authorization using single sign-on (SSO) with an OpenID identity provider (IdP) that supports the OpenID Connect Discovery protocol.
+
+> [!NOTE]
+> Only authorization servers supporting the OpenID Connect Discovery protocol are supported. Be sure to configure the external authorization server to allow redirects back to the gateway. Refer to your authorization server's documentation and add `https://<gateway-external-url>/login/oauth2/code/sso` to the list of allowed redirect URIs.
+
+| Property | Required? | Description |
+| - | - | - |
+| issuerUri | Yes | The URI that the app asserts as its Issuer Identifier. For example, if the issuer-uri provided is "https://example.com", then an OpenID Provider Configuration Request will be made to "https://example.com/.well-known/openid-configuration". The result is expected to be an OpenID Provider Configuration Response. |
+| clientId | Yes | The OpenID Connect client ID provided by your IdP |
+| clientSecret | Yes | The OpenID Connect client secret provided by your IdP |
+| scope | Yes | A list of scopes to include in JWT identity tokens. This list should be based on the scopes allowed by your identity provider |
+
+To set up SSO with Azure AD, see [How to set up single sign-on with Azure AD for Spring Cloud Gateway and API Portal for Tanzu](./how-to-set-up-sso-with-azure-ad.md).
+
+> [!NOTE]
+> If you configure the wrong SSO property, such as the wrong password, you should remove the entire SSO property and re-add the correct configuration.
+
+> [!IMPORTANT]
+> If you're using the SSO feature, only one instance count is supported.
+
+### Configure the instance count
+
+Configuration of the instance count for API portal is supported, unless you're using SSO. If you're using the SSO feature, only one instance count is supported.
+
+## Assign a public endpoint for API portal
+
+To access API portal, use the following steps to assign a public endpoint:
+
+1. Select **API portal**.
+1. Select **Overview** to view the running state and resources allocated to API portal.
+1. Select **Yes** next to *Assign endpoint* to assign a public endpoint. A URL will be generated within a few minutes.
+1. Save the URL for use later.
+
+You can also use the Azure CLI to assign a public endpoint with the following command:
+
+```azurecli
+az spring api-portal update --assign-endpoint
+```
+
+## Configure API routing with OpenAPI Spec on Spring Cloud Gateway for Tanzu
+
+This section describes how to view and try out APIs with schema definitions in API portal. Use the following steps to configure API routing with an OpenAPI spec URL on Spring Cloud Gateway for Tanzu.
+
+1. Create an app in Azure Spring Apps that the gateway will route traffic to.
+
+1. Generate the OpenAPI definition and get the URI to access it. The following two URI options are accepted:
+
+ - The first option is to use a publicly accessible endpoint like the URI `https://petstore3.swagger.io/api/v3/openapi.json`, which includes the OpenAPI specification.
+ - The second option is to put the OpenAPI definition in the relative path of the app in Azure Spring Apps, and construct the URI in the format `http://<app-name>/<relative-path-to-OpenAPI-spec>`. You can choose tools like `SpringDocs` to generate the OpenAPI specification automatically, so the URI can be like `http://<app-name>/v3/api-docs`.
+
+1. Use the following command to assign a public endpoint to the gateway to access it.
+
+ ```azurecli
+ az spring gateway update --assign-endpoint
+ ```
+
+1. Use the following command to configure Spring Cloud Gateway for Tanzu properties:
+
+ ```azurecli
+ az spring gateway update \
+ --api-description "<api-description>" \
+ --api-title "<api-title>" \
+ --api-version "v0.1" \
+ --server-url "<endpoint-in-the-previous-step>" \
+ --allowed-origins "*"
+ ```
+
+1. Configure routing rules to apps.
+
+ To create rules to access the app in Spring Cloud Gateway for Tanzu route configuration, save the following contents to the *sample.json* file.
+
+ ```json
+ {
+ "open_api": {
+ "uri": "https://petstore3.swagger.io/api/v3/openapi.json"
+ },
+ "routes": [
+ {
+ "title": "Petstore",
+ "description": "Route to application",
+ "predicates": [
+ "Path=/pet",
+ "Method=PUT"
+ ],
+ "filters": [
+ "StripPrefix=0",
+ ]
+ }
+ ]
+ }
+ ```
+
+ The `open_api.uri` value is the public endpoint or URI constructed in the second step above. You can add predicates and filters for paths defined in your OpenAPI specification.
+
+ Use the following command to apply the rule to the app created in the first step:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --name sample \
+ --app-name <app-name> \
+ --routes-file sample.json
+ ```
+
+1. Check the response of the created routes. You can also view the routes in the portal.
+
+## View exposed APIs in API portal
+
+> [!NOTE]
+> It takes several minutes to sync between Spring Cloud Gateway for Tanzu and API portal.
+
+Select the `endpoint URL` to go to API portal. You'll see all the routes configured in Spring Cloud Gateway for Tanzu.
++
+## Try out APIs in API portal
+
+Use the following steps to try out APIs:
+
+1. Select the API you would like to try.
+1. Select **EXECUTE**, and the response will be shown.
+
+ :::image type="content" source="media/enterprise/how-to-use-enterprise-api-portal/api-portal-tryout.png" alt-text="Screenshot of A P I portal.":::
+
+## Next steps
+
+- [Azure Spring Apps](index.yml)
spring-apps How To Use Enterprise Spring Cloud Gateway https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-enterprise-spring-cloud-gateway.md
+
+ Title: How to use Spring Cloud Gateway for Tanzu with Azure Spring Apps Enterprise Tier
+
+description: How to use Spring Cloud Gateway for Tanzu with Azure Spring Apps Enterprise Tier.
++++ Last updated : 02/09/2022+++
+# Use Spring Cloud Gateway for Tanzu
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use Spring Cloud Gateway for VMware Tanzu® with Azure Spring Apps Enterprise Tier.
+
+[Spring Cloud Gateway for Tanzu](https://docs.vmware.com/en/VMware-Spring-Cloud-Gateway-for-Kubernetes/https://docsupdatetracker.net/index.html) is one of the commercial VMware Tanzu components. It's based on the open-source Spring Cloud Gateway project. Spring Cloud Gateway for Tanzu handles cross-cutting concerns for API development teams, such as single sign-on (SSO), access control, rate-limiting, resiliency, security, and more. You can accelerate API delivery using modern cloud native patterns, and any programming language you choose for API development.
+
+Spring Cloud Gateway for Tanzu also has the following features:
+
+- Other commercial API route filters for transporting authorized JSON Web Token (JWT) claims to application services.
+- Client certificate authorization.
+- Rate-limiting approaches.
+- Circuit breaker configuration.
+- Support for accessing application services via HTTP Basic Authentication credentials.
+
+To integrate with [API portal for VMware Tanzu®](./how-to-use-enterprise-api-portal.md), Spring Cloud Gateway for Tanzu automatically generates OpenAPI version 3 documentation after the route configuration gets changed.
+
+## Prerequisites
+
+- An already provisioned Azure Spring Apps Enterprise tier service instance with Spring Cloud Gateway for Tanzu enabled. For more information, see [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+ > [!NOTE]
+ > To use Spring Cloud Gateway for Tanzu, you must enable it when you provision your Azure Spring Apps service instance. You cannot enable it after provisioning at this time.
+
+- [Azure CLI version 2.0.67 or later](/cli/azure/install-azure-cli).
+
+## How Spring Cloud Gateway for Tanzu works
+
+Spring Cloud Gateway for Tanzu has two components: Spring Cloud Gateway for Tanzu operator and Spring Cloud Gateway for Tanzu instance. The operator is responsible for the lifecycle of Spring Cloud Gateway for Tanzu instances and routing rules. It's transparent to the developer and Azure Spring Apps will manage it.
+
+Spring Cloud Gateway for Tanzu instance routes traffic according to rules. It supports rich features, and you can customize it using the sections below. Both scale in/out and up/down are supported to meet dynamic traffic load.
+
+Default resource usage:
+
+| Component name | Instance count | vCPU per instance | Memory per instance |
+|--|-|-||
+| Spring Cloud Gateway for Tanzu | 2 | 1 core | 2Gi |
+| Spring Cloud Gateway for Tanzu operator | 2 | 1 core | 2Gi |
+
+## Configure Spring Cloud Gateway for Tanzu
+
+Spring Cloud Gateway for Tanzu is configured using the following sections and steps.
+
+### Configure Spring Cloud Gateway for Tanzu metadata
+
+Spring Cloud Gateway for Tanzu metadata is used to automatically generate OpenAPI version 3 documentation so that the [API portal](./how-to-use-enterprise-api-portal.md) can gather information to show the route groups.
+
+| Property | Description |
+||-|
+| title | A title describing the context of the APIs available on the Gateway instance. The default value is *Spring Cloud Gateway for K8S*. |
+| description | A detailed description of the APIs available on the Gateway instance. The default value is *Generated OpenAPI 3 document that describes the API routes configured for '[Gateway instance name]' Spring Cloud Gateway instance deployed under '[namespace]' namespace.`* |
+| documentation | The location of more documentation for the APIs available on the Gateway instance. |
+| version | The version of the APIs available on this Gateway instance. The default value is *unspecified*. |
+| serverUrl | The base URL that API consumers will use to access APIs on the Gateway instance. |
+
+> [!NOTE]
+> `serverUrl` is mandatory if you want to integrate with [API portal](./how-to-use-enterprise-api-portal.md).
+
+### Configure cross-origin resource sharing (CORS)
+
+Cross-origin resource sharing (CORS) allows restricted resources on a web page to be requested from another domain outside the domain from which the first resource was served.
+
+| Property | Description |
+||-|
+| allowedOrigins | Allowed origins to make cross-site requests. |
+| allowedMethods | Allowed HTTP methods on cross-site requests. |
+| allowedHeaders | Allowed headers in cross-site request. |
+| maxAge | How long, in seconds, the response from a pre-flight request can be cached by clients. |
+| allowCredentials | A value that indicates whether user credentials are supported on cross-site requests. |
+| exposedHeaders | HTTP response headers to expose for cross-site requests. |
+
+> [!NOTE]
+> Be sure you have the correct CORS configuration if you want to integrate with the [API portal](./how-to-use-enterprise-api-portal.md). For an example, see the [Create an example application](#create-an-example-application) section.
+
+### Configure single sign-on (SSO)
+
+Spring Cloud Gateway for Tanzu supports authentication and authorization using single sign-on (SSO) with an OpenID identity provider (IdP) that supports OpenID Connect Discovery protocol.
+
+| Property | Required? | Description |
+|--|--|--|
+| issuerUri | Yes | The URI that is asserted as its Issuer Identifier. For example, if the issuer-uri provided is "https://example.com", then an OpenID Provider Configuration Request will be made to "https://example.com/.well-known/openid-configuration". The result is expected to be an OpenID Provider Configuration Response. |
+| clientId | Yes | The OpenID Connect client ID provided by your IdP. |
+| clientSecret | Yes | The OpenID Connect client secret provided by your IdP. |
+| scope | Yes | A list of scopes to include in JWT identity tokens. This list should be based on the scopes allowed by your identity provider. |
+
+To set up SSO with Azure AD, see [How to set up single sign-on with Azure AD for Spring Cloud Gateway and API Portal for Tanzu](./how-to-set-up-sso-with-azure-ad.md).
+
+> [!NOTE]
+> Only authorization servers supporting OpenID Connect Discovery protocol are supported. Also, be sure to configure the external authorization server to allow redirects back to the gateway. Refer to your authorization server's documentation and add `https://<gateway-external-url>/login/oauth2/code/sso` to the list of allowed redirect URIs.
+>
+> If you configure the wrong SSO property, such as the wrong password, you should remove the entire SSO property and re-add the correct configuration.
+>
+> After configuring SSO, remember to set `ssoEnabled=true` for the Spring Cloud Gateway routes.
+
+### Requested resource
+
+Customization of the resource usage for Spring Cloud Gateway for Tanzu instances is supported, including vCpu, memory, and instance count.
+
+> [!NOTE]
+> For high available consideration, single replica is not recommended.
+
+## Configure routes
+
+This section describes how to add, update, and manage API routes for apps that use Spring Cloud Gateway for Tanzu.
+
+### Define route config
+
+The route config definition includes the following parts:
+
+- OpenAPI URI: The URI points to an OpenAPI specification. Both OpenAPI 2.0 and OpenAPI 3.0 specs are supported. The specification can be shown in API portal to try out. Two types of URI are accepted. The first type of URI is a public endpoint like `https://petstore3.swagger.io/api/v3/openapi.json`. The second type of URI is a constructed URL `http://<app-name>/{relative-path-to-OpenAPI-spec}`, where `app-name` is the name of an application in Azure Spring Apps that includes the API definition.
+- routes: A list of route rules about how the traffic goes to one app.
+
+Use the following command to create a route config. The `--app-name` value should be the name of an app hosted in Azure Spring Apps that the requests will route to.
+
+```azurecli
+az spring gateway route-config create \
+ --name <route-config-name> \
+ --app-name <app-name> \
+ --routes-file <routes-file.json>
+```
+
+Here's a sample of the JSON file that is passed to the `--routes-file` parameter in the create command:
+
+```json
+{
+ "open_api": {
+ "uri": "<OpenAPI-URI>"
+ },
+ "routes": [
+ {
+ "title": "<title-of-route>",
+ "description": "<description-of-route>",
+ "predicates": [
+ "<predicate-of-route>",
+ ],
+ "ssoEnabled": true,
+ "filters": [
+ "<filter-of-route>",
+ ],
+ "tags": [
+ "<tag-of-route>"
+ ],
+ "order": 0
+ }
+ ]
+}
+```
+
+The following tables list the route definitions. All the properties are optional.
+
+| Property | Description |
+|-|-|
+| title | A title to apply to methods in the generated OpenAPI documentation. |
+| description | A description to apply to methods in the generated OpenAPI documentation. |
+| uri | The full URI, which will override the name of app that requests route to. |
+| ssoEnabled | A value that indicates whether to enable SSO validation. See the [Configure single sign-on (SSO)](#configure-single-sign-on-sso) section. |
+| tokenRelay | Passes the currently authenticated user's identity token to the application service. |
+| predicates | A list of predicates. See [Available Predicates](https://docs.vmware.com/en/VMware-Spring-Cloud-Gateway-for-Kubernetes/1.0/scg-k8s/GUID-configuring-routes.html#available-predicates) and [Commercial Route Filters](https://docs.vmware.com/en/VMware-Spring-Cloud-Gateway-for-Kubernetes/1.0/scg-k8s/GUID-route-predicates.html). |
+| filters | A list of filters. See [Available Filters](https://docs.vmware.com/en/VMware-Spring-Cloud-Gateway-for-Kubernetes/1.0/scg-k8s/GUID-configuring-routes.html#available-filters) and [Commercial Route Filters](https://docs.vmware.com/en/VMware-Spring-Cloud-Gateway-for-Kubernetes/1.0/scg-k8s/GUID-route-filters.html). |
+| order | The route processing order, which is the same as in Spring Cloud Gateway for Tanzu. |
+| tags | Classification tags, which will be applied to methods in the generated OpenAPI documentation. |
+
+Not all the filters/predicates are supported in Azure Spring Apps because of security/compatible reasons. The following aren't supported:
+
+- BasicAuth
+- JWTKey
+
+## Create an example application
+
+Use the following steps to create an example application using Spring Cloud Gateway for Tanzu.
+
+1. To create an app in Azure Spring Apps that the Spring Cloud Gateway for Tanzu would route traffic to, follow the instructions in [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md). Select `customers-service` for this example.
+
+1. Assign a public endpoint to the gateway to access it.
+
+ Select the **Spring Cloud Gateway** section, then select **Overview** to view the running state and resources given to Spring Cloud Gateway and its operator.
+
+ Select **Yes** next to *Assign endpoint* to assign a public endpoint. You'll get a URL in a few minutes. Save the URL to use later.
+
+ :::image type="content" source="media/enterprise/getting-started-enterprise/gateway-overview.png" alt-text="Screenshot of Azure portal Azure Spring Apps overview page with 'Assign endpoint' highlighted.":::
+
+ You can also use CLI to do it, as shown in the following command:
+
+ ```azurecli
+ az spring gateway update --assign-endpoint
+ ```
+
+1. Use the following command to configure Spring Cloud Gateway for Tanzu properties:
+
+ ```azurecli
+ az spring gateway update \
+ --api-description "<api-description>" \
+ --api-title "<api-title>" \
+ --api-version "v0.1" \
+ --server-url "<endpoint-in-the-previous-step>" \
+ --allowed-origins "*"
+ ```
+
+ You can also view those properties in the portal.
+
+ :::image type="content" source="media/enterprise/how-to-use-enterprise-spring-cloud-gateway/gateway-configuration.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps Spring Cloud Gateway page with Configuration pane showing.":::
+
+1. Configure routing rules to apps.
+
+ Create rules to access apps deployed in the above step through Spring Cloud Gateway for Tanzu.
+
+ Save the following content to the *customers-service.json* file.
+
+ ```json
+ {
+ "routes": [
+ {
+ "title": "Customers service",
+ "description": "Route to customer service",
+ "predicates": [
+ "Path=/api/customers-service/owners",
+ "Method=GET"
+ ],
+ "filters": [
+ "StripPrefix=2",
+ ],
+ "tags": [
+ "pet clinic"
+ ]
+ }
+ ]
+ }
+ ```
+
+ Use the following command to apply the rule to the app `customers-service`:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --name customers-service-rule \
+ --app-name customers-service \
+ --routes-file customers-service.json
+ ```
+
+ You can also view the routes in the portal.
+
+ :::image type="content" source="media/enterprise/how-to-use-enterprise-spring-cloud-gateway/gateway-route.png" alt-text="Screenshot of Azure portal Azure Spring Apps Spring Cloud Gateway page showing 'Routing rules' pane.":::
+
+1. Use the following command to access the `customers service` and `owners` APIs through the gateway endpoint:
+
+ ```bash
+ curl https://<endpoint-url>/api/customers-service/owners
+ ```
+
+1. Use the following command to query the routing rules:
+
+ ```azurecli
+ az configure --defaults group=<resource group name> spring-cloud=<service name>
+ az spring gateway route-config show \
+ --name customers-service-rule \
+ --query '{appResourceId:properties.appResourceId, routes:properties.routes}'
+ az spring gateway route-config list \
+ --query '[].{name:name, appResourceId:properties.appResourceId, routes:properties.routes}'
+ ```
+
+## Next steps
+
+- [Azure Spring Apps](index.yml)
spring-apps How To Use Managed Identities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-managed-identities.md
+
+ Title: Managed identities for applications in Azure Spring Apps
+
+description: Home page for managed identities for applications.
++++ Last updated : 04/15/2022+
+zone_pivot_groups: spring-apps-tier-selection
++
+# Use managed identities for applications in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use system-assigned and user-assigned managed identities for applications in Azure Spring Apps.
+
+Managed identities for Azure resources provide an automatically managed identity in Azure Active Directory (Azure AD) to an Azure resource such as your application in Azure Spring Apps. You can use this identity to authenticate to any service that supports Azure AD authentication, without having credentials in your code.
+
+## Feature status
+
+| System-assigned | User-assigned |
+| - | - |
+| GA | Preview |
+
+## Manage managed identity for an application
+
+For system-assigned managed identities, see [How to enable and disable system-assigned managed identity](./how-to-enable-system-assigned-managed-identity.md).
+
+For user-assigned managed identities, see [How to assign and remove user-assigned managed identities](./how-to-manage-user-assigned-managed-identities.md).
+
+## Obtain tokens for Azure resources
+
+An application can use its managed identity to get tokens to access other resources protected by Azure AD, such as Azure Key Vault. These tokens represent the application accessing the resource, not any specific user of the application.
+
+You may need to configure the target resource to allow access from your application. For more information, see [Assign a managed identity access to a resource by using the Azure portal](../active-directory/managed-identities-azure-resources/howto-assign-access-portal.md). For example, if you request a token to access Key Vault, be sure you have added an access policy that includes your application's identity. Otherwise, your calls to Key Vault will be rejected, even if they include the token. To learn more about which resources support Azure Active Directory tokens, see [Azure services that support Azure AD authentication](../active-directory/managed-identities-azure-resources/services-azure-active-directory-support.md).
+
+Azure Spring Apps shares the same endpoint for token acquisition with Azure Virtual Machines. We recommend using Java SDK or Spring Boot starters to acquire a token. For various code and script examples and guidance on important topics such as handling token expiration and HTTP errors, see [How to use managed identities for Azure resources on an Azure VM to acquire an access token](../active-directory/managed-identities-azure-resources/how-to-use-vm-token.md).
+
+## Examples of connecting Azure services in application code
+
+The following table provides links to articles that contain examples:
+
+| Azure service | tutorial |
+|--||
+| Key Vault | [Tutorial: Use a managed identity to connect Key Vault to an Azure Spring Apps app](tutorial-managed-identities-key-vault.md) |
+| Azure Functions | [Tutorial: Use a managed identity to invoke Azure Functions from an Azure Spring Apps app](tutorial-managed-identities-functions.md) |
+| Azure SQL | [Use a managed identity to connect Azure SQL Database to an Azure Spring Apps app](connect-managed-identity-to-azure-sql.md) |
+
+## Best practices when using managed identities
+
+We highly recommend that you use system-assigned and user-assigned managed identities separately unless you have a valid use case. If you use both kinds of managed identity together, failure might happen if an application is using system-assigned managed identity and the application gets the token without specifying the client ID of that identity. This scenario may work fine until one or more user-assigned managed identities are assigned to that application, then the application may fail to get the correct token.
+
+## Limitations
+
+### Maximum number of user-assigned managed identities per application
+
+For the maximum number of user-assigned managed identities per application, see [Quotas and Service Plans for Azure Spring Apps](./quotas.md).
+
+### Azure services that aren't supported
+
+The following services do not currently support managed identity-based access:
+
+- Azure Redis Cache
+- Azure Flexible MySQL
+- Azure Flexible PostgreSQL
+- Azure Database for MariaDB
+- Azure Cosmos DB - Mongo DB
+- Azure Cosmos DB - Cassandra
+- Azure Databricks
+++
+## Concept mapping
+
+The following table shows the mappings between concepts in Managed Identity scope and Azure AD scope:
+
+| Managed Identity scope | Azure AD scope |
+||-|
+| Principal ID | Object ID |
+| Client ID | Application ID |
+
+## Next steps
+
+- [Learn more about managed identities for Azure resources](https://github.com/MicrosoftDocs/azure-docs/blob/master/articles/active-directory/managed-identities-azure-resources/overview.md)
+- [How to use managed identities with Java SDK](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples)
spring-apps How To Use Tls Certificate https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-use-tls-certificate.md
+
+ Title: Use TLS/SSL certificates in your application in Azure Spring Apps
+
+description: Use TLS/SSL certificates in an application.
++++ Last updated : 10/08/2021+++
+# Use TLS/SSL certificates in your application in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to use public certificates in Azure Spring Apps for your application. Your app may act as a client and access an external service that requires certificate authentication, or it may need to perform cryptographic tasks.
+
+When you let Azure Spring Apps manage your TLS/SSL certificates, you can maintain the certificates and your application code separately to safeguard your sensitive data. Your app code can access the public certificates you add to your Azure Spring Apps instance.
+
+> [!NOTE]
+> Azure CLI and Terraform support and samples will be coming soon to this article.
+
+## Prerequisites
+
+- An application deployed to Azure Spring Apps. See [Quickstart: Deploy your first application in Azure Spring Apps](./quickstart.md), or use an existing app.
+- Either a certificate file with *.crt*, *.cer*, *.pem*, or *.der* extension, or a deployed instance of Azure Key Vault with a private certificate.
+
+## Import a certificate
+
+You can choose to import your certificate into your Azure Spring Apps instance from either Key Vault or use a local certificate file.
+
+### Import a certificate from Key Vault
+
+You need to grant Azure Spring Apps access to your key vault before you import your certificate using these steps:
+
+1. Sign in to the [Azure portal](https://portal.azure.com).
+1. Select **Key vaults**, then select the Key Vault you'll import your certificate from.
+1. In the left navigation pane, select **Access policies**, then select **Create**.
+1. Select **Certificate permissions**, then select **Get** and **List**.
+
+ :::image type="content" source="media/use-tls-certificates/grant-key-vault-permission.png" alt-text="Screenshot of Azure portal 'Create an access policy' page with Permission pane showing and Get and List permissions highlighted." lightbox="media/use-tls-certificates/grant-key-vault-permission.png":::
+
+1. Under **Principal**, select your **Azure Spring Apps Resource Provider**.
+
+ :::image type="content" source="media/use-tls-certificates/select-service-principal.png" alt-text="Screenshot of Azure portal 'Create an access policy' page with Principal pane showing and Azure Spring Apps Resource Provider highlighted." lightbox="media/use-tls-certificates/select-service-principal.png":::
+
+1. Select **Review + Create**, then select **Create**.
+
+After you grant access to your key vault, you can import your certificate using these steps:
+
+1. Go to your service instance.
+1. From the left navigation pane of your instance, select **TLS/SSL settings**.
+1. Select **Import Key Vault Certificate** in the **Public Key Certificates** section.
+1. Select your Key Vault in **Key vault** and the certificate in **Certificate**, then **Select** and **Apply**.
+1. When you have successfully imported your certificate, you'll see it in the list of Public Key Certificates.
+
+### Import a local certificate file
+
+You can import a certificate file stored locally using these steps:
+
+1. Go to your service instance.
+1. From the left navigation pane of your instance, select **TLS/SSL settings**.
+1. Select **Upload public certificate** in the **Public Key Certificates** section.
+1. When you've successfully imported your certificate, you'll see it in the list of Public Key Certificates.
+
+## Load a certificate
+
+To load a certificate into your application in Azure Spring Apps, start with these steps:
+
+1. Go to your application instance.
+1. From the left navigation pane of your app, select **Certificate management**.
+1. Select **Add certificate** to choose certificates accessible for the app.
++
+### Load a certificate from code
+
+Your loaded certificates are available in the */etc/azure-spring-cloud/certs/public* folder. Use the following Java code to load a public certificate in an application in Azure Spring Apps.
+
+```java
+CertificateFactory factory = CertificateFactory.getInstance("X509");
+FileInputStream is = new FileInputStream("/etc/azure-spring-cloud/certs/public/<certificate name>");
+X509Certificate cert = (X509Certificate) factory.generateCertificate(is);
+
+// use the loaded certificate
+```
+
+### Load a certificate into the trust store
+
+For a Java application, you can choose **Load into trust store** for the selected certificate. The certificate will be automatically added to the Java default TrustStores to authenticate a server in SSL authentication.
+
+The following log from your app shows that the certificate is successfully loaded.
+
+```output
+Load certificate from specific path. alias = <certificate alias>, thumbprint = <certificate thumbprint>, file = <certificate name>
+```
+
+## Next steps
+
+- [Enable ingress-to-app Transport Layer Security](./how-to-enable-ingress-to-app-tls.md)
+- [Access Config Server and Service Registry](./how-to-access-data-plane-azure-ad-rbac.md)
spring-apps How To Write Log To Custom Persistent Storage https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/how-to-write-log-to-custom-persistent-storage.md
+
+ Title: How to use Logback to write logs to custom persistent storage in Azure Spring Apps | Microsoft Docs
+description: How to use Logback to write logs to custom persistent storage in Azure Spring Apps.
++++ Last updated : 11/17/2021+++
+# How to use Logback to write logs to custom persistent storage
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to load Logback and write logs to custom persistent storage in Azure Spring Apps.
+
+> [!NOTE]
+> When a file in the application's classpath has one of the following names, Spring Boot will automatically load it over the default configuration for Logback:
+> - *logback-spring.xml*
+> - *logback.xml*
+> - *logback-spring.groovy*
+> - *logback.groovy*
+
+## Prerequisites
+
+* An existing storage resource bound to an Azure Spring Apps instance. If you need to bind a storage resource, see [How to enable your own persistent storage in Azure Spring Apps](./how-to-custom-persistent-storage.md).
+* The Logback dependency included in your application. For more information on Logback, see [A Guide To Logback](https://www.baeldung.com/logback).
+* The [Azure Spring Apps extension](/cli/azure/azure-cli-extensions-overview) for the Azure CLI
+
+## Edit the Logback configuration to write logs into a specific path
+
+You can set the path to where logs will be written by using the logback-spring.xml example file.
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+ <appender name="Console"
+ class="ch.qos.logback.core.ConsoleAppender">
+ <!-- please feel free to customize the log layout -->
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>
+ %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
+ </Pattern>
+ </layout>
+ </appender>
+
+ <appender name="RollingFile"
+ class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <!-- 'LOGS' here is a value to be read from the application's environment variable -->
+ <file>${LOGS}/spring-boot-logger.log</file>
+ <!-- please feel free to customize the log layout pattern -->
+ <encoder
+ class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
+ </encoder>
+
+ <rollingPolicy
+ class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <!-- rollover daily and when the file reaches 10 MegaBytes -->
+ <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
+ </fileNamePattern>
+ <timeBasedFileNamingAndTriggeringPolicy
+ class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <maxFileSize>10MB</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
+ </rollingPolicy>
+ </appender>
+
+ <!-- LOG everything at the INFO level -->
+ <root level="info">
+ <appender-ref ref="RollingFile" />
+ <appender-ref ref="Console" />
+ </root>
+
+ <!-- LOG "com.baeldung*" at the TRACE level -->
+ <logger name="com.baeldung" level="trace" additivity="false">
+ <appender-ref ref="RollingFile" />
+ <appender-ref ref="Console" />
+ </logger>
+
+</configuration>
+```
+
+In the preceding example, there are two placeholders named `{LOGS}` in the path for writing the application's logs to. A value needs to be assigned to the environment variable `LOGS` to have the log write to both the console and your persistent storage.
+
+## Use the Azure CLI to create and deploy a new app with Logback on persistent storage
+
+1. Use the following command to create an application in Azure Spring Apps with persistent storage enabled and the environment variable set:
+
+ ```azurecli
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <spring-instance-name> \
+ --persistent-storage <path-to-json-file> \
+ --env LOGS=/byos/logs
+ ```
+ > [!NOTE]
+ > The value of the `LOGS` environment variable can be the same as, or a subdirectory of the `mountPath`.
+
+ Here's an example of the JSON file that is passed to the `--persistent-storage` parameter in the create command. In this example, the same value is passed for the environment variable in the CLI command above and in the `mountPath` property below:
+
+ ```json
+ {
+ "customPersistentDisks": [
+ {
+ "storageName": "<Storage-Resource-Name>",
+ "customPersistentDiskProperties": {
+ "type": "AzureFileVolume",
+ "shareName": "<Azure-File-Share-Name>",
+ "mountPath": "/byos/logs",
+ "readOnly": false
+ }
+ }
+ ]
+ }
+ ```
+
+1. Use the following command to deploy your application:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <spring-instance-name> \
+ --jar-path <path-to-jar-file>
+ ```
+
+1. Use the following command to check your application's console log:
+
+ ```azurecli
+ az spring app logs \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <spring-instance-name>
+ ```
+
+ Go to the Azure Storage Account resource you bound and find the Azure file share that was attached as persistent storage. In this example, the logs will be written to the *spring-boot-logger.log* file at the root of your Azure file share. All of the rotated log files will be stored in the */archived* folder in your Azure file share.
+
+1. Optionally, use the following command to update the path or persistent storage of an existing app:
+
+ The path or persistent storage where the logs are saved can be changed at any time. The application will restart when changes are made to either environment variables or persistent storage.
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name <app-name> \
+ --service <spring-instance-name> \
+ --persistent-storage <path-to-new-json-file> \
+ --env LOGS=<new-path>
+ ```
+
+## Next steps
+
+* [Structured application log for Azure Spring Apps](./structured-app-log.md)
+* [Analyzing logs and metrics with diagnostic settings](./diagnostic-services.md)
spring-apps Monitor App Lifecycle Events https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/monitor-app-lifecycle-events.md
+
+ Title: Monitor app lifecycle events using Azure Activity log and Azure Service Health
+description: Monitor app lifecycle events and set up alerts with Azure Activity log and Azure Service Health.
++++ Last updated : 08/19/2021+++
+# Monitor app lifecycle events using Azure Activity log and Azure Service Health
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to monitor app lifecycle events and set up alerts with Azure Activity log and Azure Service Health.
+
+Azure Spring Apps provides built-in tools to monitor the status and health of your applications. App lifecycle events help you understand any changes that were made to your applications so you can take action as necessary.
+
+## Prerequisites
+
+- An Azure subscription. If you don't have an Azure subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+- A deployed Azure Spring Apps service instance and at least one application already created in your service instance. For more information, see [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](quickstart.md).
+
+## Monitor app lifecycle events triggered by users in Azure Activity logs
+
+[Azure Activity logs](../azure-monitor/essentials/activity-log.md) contain resource events emitted by operations taken on the resources in your subscription. The following details for application lifecycle events (start, stop, restart) are added into Azure Activity Logs:
+
+- When the operation occurred
+- The status of the operation
+- Which instance(s) are created when you start your app
+- Which instance(s) are deleted when you stop your app
+- Which instance(s) are deleted and created when you restart your app
+
+For example, when you restart your app, you can find the affected instances from the **Activity log** detail page in the Azure portal.
++
+## Monitor app lifecycle events in Azure Service Health
+
+[Azure Resource Health](../service-health/resource-health-overview.md) helps you diagnose and get support for issues that may affect the availability of your service. These issues include service incidents, planned maintenance periods, and regional outages. Application restarting events are added into Azure Service Health. They include both unexpected incidents (for example, an unplanned app crash) and scheduled actions (for example, planned maintenance).
+
+### Monitor unplanned app lifecycle events
+
+When your app is restarted because of unplanned events, your Azure Spring Apps instance will show a status of **degraded** in the **Resource health** section of the Azure portal. Degraded means that your resource detected a potential loss in performance, although it's still available for use. Examples of unplanned events include app crash, health check failure, and system outage.
++
+You can find the latest status, the root cause, and affected instances in the health history page.
++
+### Monitor planned app lifecycle events
+
+Your app may be restarted during platform maintenance. You can receive a maintenance notification in advance from the **Planned maintenance** page of Azure Service Health.
++
+When platform maintenance happens, your Azure Spring Apps instance will also show a status of **degraded**. If restarting is needed during platform maintenance, Azure Spring Apps will perform a rolling update to incrementally update your applications. Rolling updates are designed to update your workloads without downtime. You can find the latest status in the health history page.
++
+>[!NOTE]
+> Currently, Azure Spring Apps performs one regular planned maintenance to upgrade the underlying Kubernetes version every 2-4 months. For a detailed maintenance timeline, check the notifications on the Azure Service Health page.
+
+## Set up alerts
+
+You can set up alerts for app lifecycle events. Service health notifications are also stored in the Azure activity log. The activity log stores a large volume of information, so there's a separate user interface to make it easier to view and set up alerts on service health notifications.
+
+The following list describes the key steps needed to set up an alert:
+
+1. Set up an action group with the actions to take when an alert is triggered. Example action types include sending a voice call, SMS, email; or triggering various types of automated actions. Various alerts may use the same action group or different action groups depending on the user's requirements.
+2. Set up alert rules. The alerts use action groups to notify users that an alert for some specific app lifecycle event has been triggered.
+
+### Set up alerts on Activity log
+
+The following steps show you how to create an activity log alert rule in the Azure portal:
+
+1. Navigate to **Activity log**, open the detail page for any activity log, then select **New alert rule**.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/activity-log-alert.png" lightbox="media/monitor-app-lifecycle-events/activity-log-alert.png" alt-text="Screenshot of Azure portal activity log alert.":::
+
+2. Select the **Scope** for the alert.
+
+3. Specify the alert **Condition**.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/activity-log-alert-condition.png" lightbox="media/monitor-app-lifecycle-events/activity-log-alert-condition.png" alt-text="Screenshot of Azure portal activity log alert condition.":::
+
+4. Select **Actions** and add **Alert rule details**.
+
+5. Select **Create alert rule**.
+
+### Set up alerts to monitor app lifecycle events in Azure Service Health
+
+The following steps show you how to create an alert rule for service health notifications in the Azure portal:
+
+1. Navigate to **Resource health** under **Service Health**, then select **Add resource health alert**.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/add-resource-health-alert.png" alt-text="Screenshot of Azure portal resource health pane with the 'Add resource health alert' button highlighted.":::
+
+2. Select the **Resource** for the alert.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/resource-health-alert-target.png" alt-text="Screenshot of Azure portal resource health alert target.":::
+
+3. Specify the **Alert condition**.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/resource-health-alert-condition.png" alt-text="Screenshot of Azure portal resource health alert condition.":::
+
+4. Select the **Actions** and add **Alert rule details**.
+
+5. Select **Create alert rule**.
+
+### Set up alerts to monitor the planned maintenance notification
+
+The following steps show you how to create an alert rule for planned maintenance notifications in the Azure portal:
+
+1. Navigate to **Health alerts** under **Service Health**, then select **Add service health alert**.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/add-service-health-alert.png" alt-text="Screenshot of Azure portal health alerts pane with the 'Add service health alert' button highlighted.":::
+
+2. Provide values for **Subscription**, **Service(s)**, **Region(s)**, **Event type**, **Actions**, and **Alert rule details**.
+
+ :::image type="content" source="media/monitor-app-lifecycle-events/add-service-health-alert-details.png" lightbox="media/monitor-app-lifecycle-events/add-service-health-alert-details.png" alt-text="Screenshot of Azure portal 'Create rule alert' pane for Service Health.":::
+
+3. Select **Create alert rule**.
+
+## Next steps
+
+[Self-diagnose and solve problems in Azure Spring Apps](how-to-self-diagnose-solve.md)
spring-apps Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/overview.md
+
+ Title: Introduction to Azure Spring Apps
+description: Learn the features and benefits of Azure Spring Apps to deploy and manage Java Spring applications in Azure.
+++ Last updated : 03/09/2021++
+#Customer intent: As an Azure Cloud user, I want to deploy, run, and monitor Spring applications.
++
+# What is Azure Spring Apps?
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Azure Spring Apps makes it easy to deploy Spring Boot applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more.
+
+The following video shows an app composed of Spring Boot applications running on Azure using Azure Spring Apps.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/1jOXMFc1oRg]
+
+## Why use Azure Spring Apps?
+
+Deployment of applications to Azure Spring Apps has many benefits. You can:
+
+* Efficiently migrate existing Spring apps and manage cloud scaling and costs.
+* Modernize apps with Spring Cloud patterns to improve agility and speed of delivery.
+* Run Java at cloud scale and drive higher usage without complicated infrastructure.
+* Develop and deploy rapidly without containerization dependencies.
+* Monitor production workloads efficiently and effortlessly.
+
+Azure Spring Apps supports both Java [Spring Boot](https://spring.io/projects/spring-boot) and ASP.NET Core [Steeltoe](https://steeltoe.io/) apps. Steeltoe support is currently offered as a public preview. Public preview offerings let you experiment with new features prior to their official release.
+
+## Service overview
+
+As part of the Azure ecosystem, Azure Spring Apps allows easy binding to other Azure services including storage, databases, monitoring, and more.
+
+![Azure Spring Apps overview](media/spring-cloud-principles/azure-spring-cloud-overview.png)
+
+* Azure Spring Apps is a fully managed service for Spring Boot apps that lets you focus on building and running apps without the hassle of managing infrastructure.
+
+* Simply deploy your JARs or code for your Spring Boot app or Zip for your Steeltoe app, and Azure Spring Apps will automatically wire your apps with Spring service runtime and built-in app lifecycle.
+
+* Monitoring is simple. After deployment you can monitor app performance, fix errors, and rapidly improve applications.
+
+* Full integration to Azure's ecosystems and services.
+
+* Azure Spring Apps is enterprise ready with fully managed infrastructure, built-in lifecycle management, and ease of monitoring.
+
+### Get started with Azure Spring Apps
+
+The following quickstarts will help you get started:
+
+* [Launch your first app](quickstart.md)
+* [Introduction to the sample app](quickstart-sample-app-introduction.md)
+
+The following quickstarts apply to Basic/Standard tier only. For Enterprise tier quickstarts, see the next section.
+
+* [Provision an Azure Spring Apps service instance](quickstart-provision-service-instance.md)
+* [Set up the configuration server](quickstart-setup-config-server.md)
+* [Build and deploy apps](quickstart-deploy-apps.md)
+
+## Enterprise Tier overview
+
+Based on our learnings from customer engagements, we built Azure Spring Apps Enterprise tier with commercially supported Spring runtime components to help enterprise customers to ship faster and unlock SpringΓÇÖs full potential, including feature parity and region parity with Standard tier.
+
+The following video introduces Azure Spring Apps Enterprise tier.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/CLvtz8SkrMA]
+
+### Deploy and manage Spring and polyglot applications
+
+The fully managed VMware Tanzu® Build Service™ in Azure Spring Apps Enterprise tier automates container creation, management and governance at enterprise scale using open-source [Cloud Native Buildpacks](https://buildpacks.io/) and commercial [VMware Tanzu® Buildpacks](https://docs.pivotal.io/tanzu-buildpacks/). Tanzu Build Service offers a higher-level abstraction for building apps and provides a balance of control that reduces the operational burden on developers and supports enterprise IT operators who manage applications at scale. You can configure what Buildpacks to apply and build Spring applications and polyglot applications that run alongside Spring applications on Azure Spring Apps.
+
+Tanzu Buildpacks makes it easier to build Spring, Java, NodeJS, Python, Go and .NET Core applications and configure application performance monitoring agents such as Application Insights, New Relic, Dynatrace, AppDynamics, and Elastic.
+
+### Route client requests to applications
+
+You can manage and discover request routes and APIs exposed by applications using the fully managed Spring Cloud Gateway for VMware Tanzu® and API portal for VMware Tanzu®.
+
+Spring Cloud Gateway for Tanzu effectively routes diverse client requests to applications in Azure Spring Apps, Azure, and on-premises, and addresses cross-cutting considerations for applications behind the Gateway such as securing, routing, rate limiting, caching, monitoring, resiliency and hiding applications. You can configure:
+
+* Single sign-on integration with your preferred identity provider without any additional code or dependencies.
+* Dynamic routing rules to applications without any application redeployment.
+* Request throttling without any backing services.
+
+API Portal for VMware Tanzu provides API consumers with the ability to find and view API route details exposed by Spring Cloud Gateway for Tanzu and test API requests.
+
+### Use flexible and configurable VMware Tanzu components
+
+With Azure Spring Apps Enterprise tier, you can use fully managed VMware Tanzu components on Azure. You can select which VMware Tanzu components you want to use in your environment during Enterprise instance creation. Tanzu Build Service, Spring Cloud Gateway for Tanzu, API Portal for VMware Tanzu, Application Configuration Service for VMware Tanzu®, and VMware Tanzu® Service Registry are available during public preview.
+
+VMware Tanzu components deliver increased value so you can:
+
+* Grow your enterprise grade application portfolio from a few applications to thousands with end-to-end observability while delegating operational complexity to Microsoft and VMware.
+* Lift and shift Spring applications across Azure Spring Apps and any other compute environment.
+* Control your build dependencies, deploy polyglot applications, and deploy Spring Cloud middleware components as needed.
+
+Microsoft and VMware will continue to add more enterprise-grade features, including Tanzu components such as Application Live View for VMware Tanzu®, Application Accelerator for VMware Tanzu®, and Spring Cloud Data Flow for VMware Tanzu®, although the Azure Spring Apps Enterprise tier roadmap is not confirmed and is subject to change.
+
+### Unlock SpringΓÇÖs full potential with Long-Term Support (LTS)
+
+Azure Spring Apps Enterprise tier includes VMware Spring Runtime Support for application development and deployments. This support gives you access to Spring experts, enabling you to unlock the full potential of the Spring ecosystem to develop and deploy applications faster.
+
+Typically, open-source Spring project minor releases are supported for a minimum of 12 months from the date of initial release. In Azure Spring Apps Enterprise, Spring project minor releases will receive commercial support for a minimum of 24 months from the date of initial release through the VMware Spring Runtime Support entitlement. This extended support ensures the security and stability of your Spring application portfolio even after the open source end of life dates. For more information, see [Spring Boot support](https://spring.io/projects/spring-boot#support).
+
+### Fully integrate into the Azure and Java ecosystems
+
+Azure Spring Apps, including Enterprise tier, runs on Azure in a fully managed environment. You get all the benefits of Azure and the Java ecosystem, and the experience is familiar and intuitive, as shown in the following table:
+
+| Best practice | Ecosystem |
+|--|-|
+| Create service instances using a provisioning tool. | Azure portal, CLI, ARM Template, Bicep, or Terraform |
+| Automate environments and application deployments. | GitHub, Azure DevOps, GitLab, and Jenkins |
+| Monitor end-to-end using any tool and platform. | Application Insights, Azure Log Analytics, Splunk, Elastic, New Relic, Dynatrace, or AppDynamics |
+| Connect Spring applications and interact with your cloud services. | Spring integration with Azure services for data, messaging, eventing, cache, storage, and directories |
+| Securely load app secrets and certificates. | Azure Key Vault |
+| Use familiar development tools. | IntelliJ, VS Code, Eclipse, Spring Tool Suite, Maven, or Gradle |
+
+After you create your Enterprise tier service instance and deploy your applications, you can monitor with Application Insights or any other application performance management tools of your choice.
+
+### Get started with Enterprise tier
+
+The following quickstarts will help you get started using the Enterprise tier:
+
+* [View Enterprise Tier offering](how-to-enterprise-marketplace-offer.md)
+* [Introduction to Fitness Store sample](quickstart-sample-app-acme-fitness-store-introduction.md)
+* [Build and deploy apps](quickstart-deploy-apps-enterprise.md)
+* [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+* [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+* [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+* [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+* [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
+* [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
+
+Most of the Azure Spring Apps documentation applies to all tiers. Some articles apply only to Enterprise tier or only to Basic/Standard tier, as indicated at the beginning of each article.
+
+As a quick reference, the articles listed above and the articles in the following list apply to Enterprise tier only, or contain significant content that applies only to Enterprise tier:
+
+* [Use Application Configuration Service for Tanzu](how-to-enterprise-application-configuration-service.md)
+* [Use Tanzu Build Service](how-to-enterprise-build-service.md)
+* [Use Tanzu Service Registry](how-to-enterprise-service-registry.md)
+* [Use API portal for VMware Tanzu](how-to-use-enterprise-api-portal.md)
+* [Use Spring Cloud Gateway for Tanzu](how-to-use-enterprise-spring-cloud-gateway.md)
+* [Deploy non-Java enterprise applications](how-to-enterprise-deploy-non-java-apps.md)
+* [Enable system-assigned managed identity](how-to-enable-system-assigned-managed-identity.md?pivots=sc-enterprise-tier)
+* [Application Insights using Java In-Process Agent](how-to-application-insights.md?pivots=sc-enterprise-tier)
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Quickstart: Deploy your first application to Azure Spring Apps](quickstart.md)
+
+Samples are available on GitHub. See [Azure Spring Apps Samples](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/).
spring-apps Policy Reference https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/policy-reference.md
+
+ Title: Built-in policy definitions for Azure Spring Apps
+description: Lists Azure Policy built-in policy definitions for Azure Spring Apps. These built-in policy definitions provide common approaches to managing your Azure resources.
Last updated : 07/26/2022+++++++
+# Azure Policy built-in definitions for Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This page is an index of [Azure Policy](../governance/policy/overview.md) built-in policy
+definitions for Azure Spring Apps. For additional Azure Policy built-ins for other services, see
+[Azure Policy built-in definitions](../governance/policy/samples/built-in-policies.md).
+
+The name of each built-in policy definition links to the policy definition in the Azure portal. Use
+the link in the **Version** column to view the source on the
+[Azure Policy GitHub repo](https://github.com/Azure/azure-policy).
+
+## Azure Spring Apps
++
+## Next steps
+
+- See the built-ins on the [Azure Policy GitHub repo](https://github.com/Azure/azure-policy).
+- Review the [Azure Policy definition structure](../governance/policy/concepts/definition-structure.md).
+- Review [Understanding policy effects](../governance/policy/concepts/effects.md).
spring-apps Principles Microservice Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/principles-microservice-apps.md
+
+ Title: Java and base OS for Azure Spring Apps apps
+description: Principles for maintaining healthy Java and base operating system for Azure Spring Apps apps
++++ Last updated : 10/12/2021+++
+# Java and Base OS for Azure Spring Apps apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java
+
+The following are principles for maintaining healthy Java and base operating system for Azure Spring Apps apps.
+
+## Principles for healthy Java and Base OS
+
+* Shall be the same base operating system across tiers - Basic | Standard | Premium.
+
+ * Currently, apps on Azure Spring Apps use a mix of Debian 10 and Ubuntu 18.04.
+ * VMware Tanzu® Build Service™ uses Ubuntu 18.04.
+
+* Shall be the same base operating system regardless of deployment starting points - source | JAR
+
+ * Currently, apps on Azure Spring Apps use a mix of Debian 10 and Ubuntu 18.04.
+
+* Base operating system shall be free of security vulnerabilities.
+
+ * Debian 10 base operating system has 147 open CVEs.
+ * Ubuntu 18.04 base operating system has 132 open CVEs.
+
+* Shall use JRE-headless.
+
+ * Currently, apps on Azure Spring Apps use JDK. JRE-headless is a smaller image.
+
+* Shall use the most recent builds of Java.
+
+ * Currently, apps on Azure Spring Apps use Java 8 build 242. This is an outdated build.
+
+Azul Systems will continuously scan for changes to base operating systems and keep the last built images up to date. Azure Spring Apps looks for changes to images and continuously updates them across deployments.
+
+## FAQ for Azure Spring Apps
+
+* Which versions of Java are supported? Major version and build number.
+
+ * Support LTS versions - Java 8 and 11.
+ * Uses the most recent build - for example, right now, Java 8 build 252 and Java 11 build 7.
+
+* Who built these Java runtimes?
+
+ * Azul Systems.
+
+* What is the base operating system for images?
+
+ * Ubuntu 20.04 LTS (Focal Fossa). Apps will continue to stay on the most recent LTS version of Ubuntu.
+ * See [Ubuntu 20.04 LTS (Focal Fossa)](http://releases.ubuntu.com/focal/)
+
+* How can I download a supported Java runtime for local dev?
+
+ * See [Install the JDK for Azure and Azure Stack](/azure/developer/java/fundamentals/java-jdk-install)
+
+* How can I get support for issues at the Java runtime level?
+
+ * Open a support ticket with Azure Support.
+
+## Default deployment on Azure Spring Apps
+
+> ![Default deployment](media/spring-cloud-principles/spring-cloud-default-deployment.png)
+
+## Next steps
+
+* [Quickstart: Deploy your first Spring Boot app in Azure Spring Apps](./quickstart.md)
+* [Java long-term support for Azure and Azure Stack](/azure/developer/java/fundamentals/java-support-on-azure)
spring-apps Quickstart Automate Deployments Github Actions Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-automate-deployments-github-actions-enterprise.md
+
+ Title: "Quickstart - Automate deployments"
+
+description: Explains how to automate deployments to Azure Spring Apps Enterprise tier by using GitHub Actions and Terraform.
++++ Last updated : 05/31/2022+++
+# Quickstart: Automate deployments
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how to automate deployments to Azure Spring Apps Enterprise tier by using GitHub Actions and Terraform.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+
+## Set up a GitHub repository and authenticate
+
+The automation associated with the sample application requires a Storage account for maintaining Terraform state. The following steps show you how to create a Storage Account for use with GitHub Actions and Terraform.
+
+1. Use the following command to create a new resource group to contain the Storage Account:
+
+ ```azurecli
+ az group create \
+ --name <storage-resource-group> \
+ --location <location>
+ ```
+
+1. Use the following command to create a Storage Account:
+
+ ```azurecli
+ az storage account create \
+ --resource-group <storage-resource-group> \
+ --name <storage-account-name> \
+ --location <location> \
+ --sku Standard_RAGRS \
+ --kind StorageV2
+ ```
+
+1. Use the following command to create a Storage Container within the Storage Account:
+
+ ```azurecli
+ az storage container create \
+ --resource-group <storage-resource-group> \
+ --name terraform-state-container \
+ --account-name <storage-account-name> \
+ --auth-mode login
+ ```
+
+1. Use the following commands to get an Azure credential. You need an Azure service principal credential to authorize Azure login action.
+
+ ```azurecli
+ az login
+ az ad sp create-for-rbac \
+ --role contributor \
+ --scopes /subscriptions/<SUBSCRIPTION_ID> \
+ --sdk-auth
+ ```
+
+ The command should output a JSON object:
+
+ ```json
+ {
+ "clientId": "<GUID>",
+ "clientSecret": "<GUID>",
+ "subscriptionId": "<GUID>",
+ "tenantId": "<GUID>",
+ ...
+ }
+ ```
+
+1. This example uses the [fitness store](https://github.com/Azure-Samples/acme-fitness-store) sample on GitHub. Fork the sample, open the GitHub repository page, and then select the **Settings** tab. Open the **Secrets** menu, then select **Add a new secret**, as shown in the following screenshot.
+
+ :::image type="content" source="media/github-actions/actions1.png" alt-text="Screenshot showing GitHub Settings Add new secret." lightbox="media/github-actions/actions1.png"
+
+1. Set the secret name to `AZURE_CREDENTIALS` and set its value to the JSON string that you found under the heading **Set up your GitHub repository and authenticate**.
+
+ :::image type="content" source="media/github-actions/actions2.png" alt-text="Screenshot showing GitHub Settings Set secret data." lightbox="media/github-actions/actions2.png"
+
+1. Add the following secrets to GitHub Actions:
+
+ - `TF_PROJECT_NAME`: Use a value of your choosing. This value will be the name of your Terraform Project.
+ - `AZURE_LOCATION`: The Azure Region your resources will be created in.
+ - `OIDC_JWK_SET_URI`: Use the `JWK_SET_URI` defined in [Quickstart: Configure single sign-on for applications using Azure Spring Apps Enterprise tier](quickstart-configure-single-sign-on-enterprise.md).
+ - `OIDC_CLIENT_ID`: Use the `CLIENT_ID` defined in [Quickstart: Configure single sign-on for applications using Azure Spring Apps Enterprise tier](quickstart-configure-single-sign-on-enterprise.md).
+ - `OIDC_CLIENT_SECRET`: Use the `CLIENT_SECRET` defined in [Quickstart: Configure single sign-on for applications using Azure Spring Apps Enterprise tier](quickstart-configure-single-sign-on-enterprise.md).
+ - `OIDC_ISSUER_URI`: Use the `ISSUER_URI` defined in [Quickstart: Configure single sign-on for applications using Azure Spring Apps Enterprise tier](quickstart-configure-single-sign-on-enterprise.md).
+
+1. Add the secret `TF_BACKEND_CONFIG` to GitHub Actions with the following value:
+
+ ```text
+ resource_group_name = "<storage-resource-group>"
+ storage_account_name = "<storage-account-name>"
+ container_name = "terraform-state-container"
+ key = "dev.terraform.tfstate"
+ ```
+
+## Automate with GitHub Actions
+
+Now you can run GitHub Actions in your repository. The [provision workflow](https://github.com/Azure-Samples/acme-fitness-store/blob/Azure/.github/workflows/provision.yml) provisions all resources necessary to run the example application. The following screenshot shows an example run:
++
+Each application has a [deploy workflow](https://github.com/Azure-Samples/acme-fitness-store/blob/Azure/.github/workflows/catalog.yml) that will redeploy the application when changes are made to that application. The following screenshot shows some example output from the catalog service:
++
+The [cleanup workflow](https://github.com/Azure-Samples/acme-fitness-store/blob/Azure/.github/workflows/cleanup.yml) can be manually run to delete all resources created by the `provision` workflow. The following screenshot shows the output:
++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Continue on to any of the following optional quickstarts:
+
+- [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+- [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+- [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+- [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+- [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
spring-apps Quickstart Configure Single Sign On Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-configure-single-sign-on-enterprise.md
+
+ Title: "Quickstart - Configure single sign-on for applications using Azure Spring Apps Enterprise tier"
+description: Describes single sign-on configuration for Azure Spring Apps Enterprise tier.
++++ Last updated : 05/31/2022+++
+# Quickstart: Configure single sign-on for applications using Azure Spring Apps Enterprise tier
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how to configure single sign-on for applications running on Azure Spring Apps Enterprise tier.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+- Complete the steps in [Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+## Prepare single sign-on credentials
+
+To configure single sign-on for the application, you'll need to prepare credentials. The following sections describe steps for an existing provider or provisioning an application registration with Azure Active Directory.
+
+### Use an existing provider
+
+Follow these steps to configure single sign-on using an existing Identity Provider. If you're provisioning an Azure Active Directory App Registration, skip ahead to the following section, [Create and configure an application registration with Azure Active Directory](#create-and-configure-an-application-registration-with-azure-active-directory).
+
+1. Configure your existing identity provider to allow redirects back to Spring Cloud Gateway and API Portal. Spring Cloud Gateway has a single URI to allow re-entry to the gateway. API Portal has two URIs for supporting the user interface and underlying API. Retrieve these URIs by using the following commands, then add them to your single sign-on provider's configuration.
+
+ ```azurecli
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ PORTAL_URL=$(az spring api-portal show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ echo "https://${GATEWAY_URL}/login/oauth2/code/sso"
+ echo "https://${PORTAL_URL}/oauth2-redirect.html"
+ echo "https://${PORTAL_URL}/login/oauth2/code/sso"
+ ```
+
+1. Obtain the `Client ID` and `Client Secret` for your identity provider.
+
+1. Obtain the `Issuer URI` for your identity provider. You must configure the provider with an issuer URI, which is the URI that it asserts as its Issuer Identifier. For example, if the `issuer-uri` provided is "https://example.com", then an OpenID Provider Configuration Request will be made to "https://example.com/.well-known/openid-configuration". The result is expected to be an OpenID Provider Configuration Response.
+
+ > [!NOTE]
+ > You can only use authorization servers supporting OpenID Connect Discovery protocol.
+
+1. Obtain the `JWK URI` for your identity provider for use later. The `JWK URI` typically takes the form `${ISSUER_URI}/keys` or `${ISSUER_URI}/<version>/keys`. The Identity Service application will use the public JSON Web Keys (JWK) to verify JSON Web Tokens (JWT) issued by your single sign-on identity provider's authorization server.
+
+### Create and configure an application registration with Azure Active Directory
+
+To register the application with Azure Active Directory, follow these steps. If you're using an existing provider's credentials, skip ahead to the following section, [Deploy the Identity Service application](#deploy-the-identity-service-application).
+
+1. Use the following command to create an application registration with Azure Active Directory and save the output:
+
+ ```azurecli
+ az ad app create --display-name <app-registration-name> > ad.json
+ ```
+
+1. Use the following command to retrieve the application ID and collect the client secret:
+
+ ```azurecli
+ APPLICATION_ID=$(cat ad.json | jq -r '.appId')
+ az ad app credential reset --id ${APPLICATION_ID} --append > sso.json
+ ```
+
+1. Use the following command to assign a Service Principal to the application registration:
+
+ ```azurecli
+ az ad sp create --id ${APPLICATION_ID}
+ ```
+
+1. Use the following commands to retrieve the URLs for Spring Cloud Gateway and API Portal and add the necessary Reply URLs to the Active Directory App Registration:
+
+ ```azurecli
+ APPLICATION_ID=$(cat ad.json | jq -r '.appId')
+
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ PORTAL_URL=$(az spring api-portal show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ az ad app update \
+ --id ${APPLICATION_ID} \
+ --reply-urls "https://${GATEWAY_URL}/login/oauth2/code/sso" "https://${PORTAL_URL}/oauth2-redirect.html" "https://${PORTAL_URL}/login/oauth2/code/sso"
+ ```
+
+1. Use the following command to retrieve the application's `Client ID`. Save the output to use later in this quickstart.
+
+ ```bash
+ cat sso.json | jq -r '.appId'
+ ```
+
+1. Use the following command to retrieve the application's `Client Secret`. Save the output to use later in this quickstart.
+
+ ```bash
+ cat sso.json | jq -r '.password'
+ ```
+
+1. Use the following command to retrieve the `Issuer URI`. Save the output to use later in this quickstart.
+
+ ```bash
+ TENANT_ID=$(cat sso.json | jq -r '.tenant')
+ echo "https://login.microsoftonline.com/${TENANT_ID}/v2.0"
+ ```
+
+1. Retrieve the `JWK URI` from the output of the following command. The Identity Service application will use the public JSON Web Keys (JWK) to verify JSON Web Tokens (JWT) issued by Active Directory.
+
+ ```bash
+ TENANT_ID=$(cat sso.json | jq -r '.tenant')
+ echo "https://login.microsoftonline.com/${TENANT_ID}/discovery/v2.0/keys"
+ ```
+
+## Deploy the Identity Service application
+
+To complete the single sign-on experience, use the following steps to deploy the Identity Service application. The Identity Service application provides a single route to aid in identifying the user. For these steps, be sure to navigate to the project folder before running any commands.
+
+1. Use the following command to create the `identity-service` application:
+
+ ```azurecli
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name identity-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following command to enable externalized configuration for the identity service by binding to Application Configuration Service:
+
+ ```azurecli
+ az spring application-configuration-service bind \
+ --resource-group <resource-group-name> \
+ --app identity-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following command to enable service discovery and registration for the identity service by binding to Service Registry:
+
+ ```azurecli
+ az spring service-registry bind \
+ --resource-group <resource-group-name> \
+ --app identity-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following command to deploy the identity service:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name identity-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --config-file-pattern identity/default \
+ --source-path apps/acme-identity \
+ --env "JWK_URI=<jwk-uri>"
+ ```
+
+1. Use the following command to route requests to the identity service:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --resource-group <resource-group-name> \
+ --name identity-routes \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app-name identity-service \
+ --routes-file azure/routes/identity-service.json
+ ```
+
+## Configure single sign-on for Spring Cloud Gateway
+
+You can configure Spring Cloud Gateway to authenticate requests via single sign-on. To configure Spring Cloud Gateway to use single sign-on, follow these steps:
+
+1. Use the following commands to configure Spring Cloud Gateway to use single sign-on:
+
+ ```azurecli
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ az spring gateway update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --api-description "Fitness Store API" \
+ --api-title "Fitness Store" \
+ --api-version "v1.0" \
+ --server-url "https://${GATEWAY_URL}" \
+ --allowed-origins "*" \
+ --client-id <client-id> \
+ --client-secret <client-secret> \
+ --scope "openid,profile" \
+ --issuer-uri <issuer-uri>
+ ```
+
+1. Instruct the cart service application to use Spring Cloud Gateway for authentication. Use the following command to provide the necessary environment variables:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --env "AUTH_URL=https://${GATEWAY_URL}" "CART_PORT=8080"
+ ```
+
+1. Instruct the order service application to use Spring Cloud Gateway for authentication. Use the following command to provide the necessary environment variables:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --env "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}"
+ ```
+
+1. Use the following command to retrieve the URL for Spring Cloud Gateway:
+
+ ```bash
+ echo "https://${GATEWAY_URL}"
+ ```
+
+ You can open the output URL in a browser to explore the updated application. The Log In function will now work, allowing you to add items to the cart and place orders. After you sign in, the customer information button will display the signed-in username.
+
+## Configure single sign-on for API Portal
+
+You can configure API Portal to use single sign-on to require authentication before exploring APIs. Use the following commands to configure single sign-on for API Portal:
+
+```azurecli
+PORTAL_URL=$(az spring api-portal show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+az spring api-portal update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --client-id <client-id> \
+ --client-secret <client-secret> \
+ --scope "openid,profile,email" \
+ --issuer-uri <issuer-uri>
+```
+
+Use the following commands to retrieve the URL for API Portal:
+
+```azurecli
+PORTAL_URL=$(az spring api-portal show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+echo "https://${PORTAL_URL}"
+```
+
+You can open the output URL in a browser to explore the application APIs. This time, you'll be directed to sign on before exploring APIs.
+++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Continue on to any of the following optional quickstarts:
+
+- [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+- [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+- [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+- [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
+- [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
spring-apps Quickstart Deploy Apps Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-apps-enterprise.md
+
+ Title: "Quickstart - Build and deploy apps to Azure Spring Apps Enterprise tier"
+description: Describes app deployment to Azure Spring Apps Enterprise tier.
++++ Last updated : 05/31/2022+++
+# Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how to build and deploy applications to Azure Spring Apps using the Enterprise tier.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+
+## Download the sample app
+
+Use the following commands to download the sample:
+
+```bash
+git clone https://github.com/Azure-Samples/acme-fitness-store
+cd acme-fitness-store
+```
+
+## Provision a service instance
+
+Use the following steps to provision an Azure Spring Apps service instance.
+
+1. Use the following command to sign in to the Azure CLI and choose your active subscription:
+
+ ```azurecli
+ az login
+ az account list --output table
+ az account set --subscription <subscription-ID>
+ ```
+
+1. Use the following command to accept the legal terms and privacy statements for the Enterprise tier. This step is necessary only if your subscription has never been used to create an Enterprise tier instance of Azure Spring Apps.
+
+ ```azurecli
+ az provider register --namespace Microsoft.SaaS
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan asa-ent-hr-mtr
+ ```
+
+1. Select a location. This location must be a location supporting Azure Spring Apps Enterprise tier. For more information, see the [Azure Spring Apps FAQ](faq.md).
+
+1. Use the following command to create a resource group:
+
+ ```azurecli
+ az group create \
+ --name <resource-group-name> \
+ --location <location>
+ ```
+
+ For more information about resource groups, see [What is Azure Resource Manager?](../azure-resource-manager/management/overview.md).
+
+1. Prepare a name for your Azure Spring Apps service instance. The name must be between 4 and 32 characters long and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+
+1. Use the following command to create an Azure Spring Apps service instance:
+
+ ```azurecli
+ az spring create \
+ --resource-group <resource-group-name> \
+ --name <Azure-Spring-Apps-service-instance-name> \
+ --sku enterprise \
+ --enable-application-configuration-service \
+ --enable-service-registry \
+ --enable-gateway \
+ --enable-api-portal
+ ```
+
+1. Use the following command to create a Log Analytics Workspace to be used for your Azure Spring Apps service:
+
+ ```azurecli
+ az monitor log-analytics workspace create \
+ --resource-group <resource-group-name> \
+ --workspace-name <workspace-name> \
+ --location <location>
+ ```
+
+1. Use the following commands to retrieve the Resource ID for your Log Analytics Workspace and Azure Spring Apps service instance:
+
+ ```bash
+ LOG_ANALYTICS_RESOURCE_ID=$(az monitor log-analytics workspace show \
+ --resource-group <resource-group-name> \
+ --workspace-name <workspace-name> | jq -r '.id')
+
+ SPRING_CLOUD_RESOURCE_ID=$(az spring show \
+ --resource-group <resource-group-name> \
+ --name <Azure-Spring-Apps-service-instance-name> | jq -r '.id')
+ ```
+
+1. Use the following command to configure diagnostic settings for the Azure Spring Apps Service:
+
+ ```azurecli
+ az monitor diagnostic-settings create \
+ --name "send-logs-and-metrics-to-log-analytics" \
+ --resource ${SPRING_CLOUD_RESOURCE_ID} \
+ --workspace ${LOG_ANALYTICS_RESOURCE_ID} \
+ --logs '[
+ {
+ "category": "ApplicationConsole",
+ "enabled": true,
+ "retentionPolicy": {
+ "enabled": false,
+ "days": 0
+ }
+ },
+ {
+ "category": "SystemLogs",
+ "enabled": true,
+ "retentionPolicy": {
+ "enabled": false,
+ "days": 0
+ }
+ },
+ {
+ "category": "IngressLogs",
+ "enabled": true,
+ "retentionPolicy": {
+ "enabled": false,
+ "days": 0
+ }
+ }
+ ]' \
+ --metrics '[
+ {
+ "category": "AllMetrics",
+ "enabled": true,
+ "retentionPolicy": {
+ "enabled": false,
+ "days": 0
+ }
+ }
+ ]'
+ ```
+
+1. Use the following commands to create applications for `cart-service`, `order-service`, `payment-service`, `catalog-service`, and `frontend`:
+
+ ```azurecli
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name payment-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+
+ az spring app create \
+ --resource-group <resource-group-name> \
+ --name frontend \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+## Externalize configuration with Application Configuration Service
+
+Use the following steps to configure Application Configuration Service.
+
+1. Use the following command to create a configuration repository for Application Configuration Service:
+
+ ```azurecli
+ az spring application-configuration-service git repo add \
+ --resource-group <resource-group-name> \
+ --name acme-fitness-store-config \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --label main \
+ --patterns "catalog/default,catalog/key-vault,identity/default,identity/key-vault,payment/default" \
+ --uri "https://github.com/Azure-Samples/acme-fitness-store-config"
+ ```
+
+1. Use the following commands to bind applications to Application Configuration Service:
+
+ ```azurecli
+ az spring application-configuration-service bind \
+ --resource-group <resource-group-name> \
+ --app payment-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+
+ az spring application-configuration-service bind \
+ --resource-group <resource-group-name> \
+ --app catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+## Activate service registration and discovery
+
+To active service registration and discovery, use the following commands to bind applications to Service Registry:
+
+```azurecli
+az spring service-registry bind \
+ --resource-group <resource-group-name> \
+ --app payment-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+
+az spring service-registry bind \
+ --resource-group <resource-group-name> \
+ --app catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+```
+
+## Deploy polyglot applications with Tanzu Build Service
+
+Use the following steps to deploy and build applications. For these steps, make sure that the terminal is in the project folder before running any commands.
+
+1. Use the following command to create a custom builder in Tanzu Build Service:
+
+ ```azurecli
+ az spring build-service builder create \
+ --resource-group <resource-group-name> \
+ --name quickstart-builder \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --builder-file azure/builder.json
+ ```
+
+1. Use the following command to build and deploy the payment service:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name payment-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --config-file-pattern payment/default \
+ --source-path apps/acme-payment
+ ```
+
+1. Use the following command to build and deploy the catalog service:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --config-file-pattern catalog/default \
+ --source-path apps/acme-catalog
+ ```
+
+1. Use the following command to build and deploy the order service:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --builder quickstart-builder \
+ --source-path apps/acme-order
+ ```
+
+1. Use the following command to build and deploy the cart service:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --builder quickstart-builder \
+ --env "CART_PORT=8080" \
+ --source-path apps/acme-cart
+ ```
+
+1. Use the following command to build and deploy the frontend application:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <resource-group-name> \
+ --name frontend \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --source-path apps/acme-shopping
+ ```
+
+> [!TIP]
+> To troubleshot deployments, you can use the following command to get logs streaming in real time whenever the app is running: `az spring app logs --name <app name> --follow`.
+
+## Route requests to apps with Spring Cloud Gateway
+
+Use the following steps to configure Spring Cloud Gateway and configure routes to applications.
+
+1. Use the following command to assign an endpoint to Spring Cloud Gateway:
+
+ ```azurecli
+ az spring gateway update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --assign-endpoint true
+ ```
+
+1. Use the following commands to configure Spring Cloud Gateway API information:
+
+ ```azurecli
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ az spring gateway update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --api-description "Fitness Store API" \
+ --api-title "Fitness Store" \
+ --api-version "v1.0" \
+ --server-url "https://${GATEWAY_URL}" \
+ --allowed-origins "*"
+ ```
+
+1. Use the following command to create routes for the cart service:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --resource-group <resource-group-name> \
+ --name cart-routes \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app-name cart-service \
+ --routes-file azure/routes/cart-service.json
+ ```
+
+1. Use the following command to create routes for the order service:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --resource-group <resource-group-name> \
+ --name order-routes \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app-name order-service \
+ --routes-file azure/routes/order-service.json
+ ```
+
+1. Use the following command to create routes for the catalog service:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --resource-group <resource-group-name> \
+ --name catalog-routes \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app-name catalog-service \
+ --routes-file azure/routes/catalog-service.json
+ ```
+
+1. Use the following command to create routes for the frontend:
+
+ ```azurecli
+ az spring gateway route-config create \
+ --resource-group <resource-group-name> \
+ --name frontend-routes \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app-name frontend \
+ --routes-file azure/routes/frontend.json
+ ```
+
+1. Use the following commands to retrieve the URL for Spring Cloud Gateway:
+
+ ```azurecli
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ echo "https://${GATEWAY_URL}"
+ ```
+
+ You can open the output URL in a browser to explore the deployed application.
+
+## Browse and try APIs with API Portal
+
+Use the following steps to configure API Portal.
+
+1. Use the following command to assign an endpoint to API Portal:
+
+ ```azurecli
+ az spring api-portal update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --assign-endpoint true
+ ```
+
+1. Use the following commands to retrieve the URL for API Portal:
+
+ ```azurecli
+ PORTAL_URL=$(az spring api-portal show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ echo "https://${PORTAL_URL}"
+ ```
+
+ You can open the output URL in a browser to explore the application APIs.
+++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Now that you've successfully built and deployed your app, continue on to any of the following optional quickstarts:
+
+- [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+- [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+- [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+- [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+- [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
+- [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
spring-apps Quickstart Deploy Apps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-apps.md
+
+ Title: "Quickstart - Build and deploy apps to Azure Spring Apps"
+description: Describes app deployment to Azure Spring Apps.
++++ Last updated : 11/15/2021+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Quickstart: Build and deploy apps to Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+In this quickstart, you build and deploy Spring applications to Azure Spring Apps using the Azure CLI.
+
+## Prerequisites
+
+* Complete the previous quickstarts in this series:
+
+ * [Provision Azure Spring Apps service](./quickstart-provision-service-instance.md).
+ * [Set up Azure Spring Apps configuration server](./quickstart-setup-config-server.md).
+
+## Download the sample app
+
+If you've been using the Azure Cloud Shell up to this point, switch to a local command prompt for the following steps.
+
+1. Create a new folder and clone the sample app repository.
+
+ ```console
+ mkdir source-code
+ ```
+
+ ```console
+ cd source-code
+ ```
+
+ ```console
+ git clone https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples
+ ```
+
+1. Navigate into the repository directory.
+
+ ```console
+ cd Azure-Spring-Cloud-Samples
+ ```
+
+## Deploy PlanetWeatherProvider
+
+1. Create an app for the PlanetWeatherProvider project in your Azure Spring Apps instance.
+
+ ```azurecli
+ az spring app create --name planet-weather-provider --runtime-version NetCore_31
+ ```
+
+ To enable automatic service registration, you have given the app the same name as the value of `spring.application.name` in the project's *appsettings.json* file:
+
+ ```json
+ "spring": {
+ "application": {
+ "name": "planet-weather-provider"
+ }
+ }
+ ```
+
+ This command may take several minutes to run.
+
+1. Change directory to the `PlanetWeatherProvider` project folder.
+
+ ```console
+ cd steeltoe-sample/src/planet-weather-provider
+ ```
+
+1. Create the binaries and the *.zip* file to be deployed.
+
+ ```console
+ dotnet publish -c release -o ./publish
+ ```
+
+ > [!TIP]
+ > The project file contains the following XML to package the binaries in a *.zip* file after writing them to the *./publish* folder:
+ >
+ > ```xml
+ > <Target Name="Publish-Zip" AfterTargets="Publish">
+ > <ZipDirectory SourceDirectory="$(PublishDir)" DestinationFile="$(MSBuildProjectDirectory)/publish-deploy-planet.zip" Overwrite="true" />
+ > </Target>
+ > ```
+
+1. Deploy to Azure.
+
+ Make sure that the command prompt is in the project folder before running the following command.
+
+ ```azurecli
+ az spring app deploy -n planet-weather-provider --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.PlanetWeatherProvider.dll --artifact-path ./publish-deploy-planet.zip
+ ```
+
+ The `--main-entry` option specifies the relative path from the *.zip* file's root folder to the *.dll* file that contains the application's entry point. After the service uploads the *.zip* file, it extracts all the files and folders and tries to execute the entry point in the specified *.dll* file.
+
+ This command may take several minutes to run.
+
+## Deploy SolarSystemWeather
+
+1. Create another app in your Azure Spring Apps instance, this time for the SolarSystemWeather project:
+
+ ```azurecli
+ az spring app create --name solar-system-weather --runtime-version NetCore_31
+ ```
+
+ `solar-system-weather` is the name that is specified in the `SolarSystemWeather` project's *appsettings.json* file.
+
+ This command may take several minutes to run.
+
+1. Change directory to the `SolarSystemWeather` project.
+
+ ```console
+ cd ../solar-system-weather
+ ```
+
+1. Create the binaries and *.zip* file to be deployed.
+
+ ```console
+ dotnet publish -c release -o ./publish
+ ```
+
+1. Deploy to Azure.
+
+ ```azurecli
+ az spring app deploy -n solar-system-weather --runtime-version NetCore_31 --main-entry Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.dll --artifact-path ./publish-deploy-solar.zip
+ ```
+
+ This command may take several minutes to run.
+
+## Assign public endpoint
+
+To test the application, send an HTTP GET request to the `solar-system-weather` application from a browser. To do that, you need a public endpoint for the request.
+
+1. To assign the endpoint, run the following command.
+
+ ```azurecli
+ az spring app update -n solar-system-weather --assign-endpoint true
+ ```
+
+1. To get the URL of the endpoint, run the following command.
+
+ Windows:
+
+ ```azurecli
+ az spring app show -n solar-system-weather -o table
+ ```
+
+ Linux:
+
+ ```azurecli
+ az spring app show --name solar-system-weather | grep url
+ ```
+
+## Test the application
+
+Send a GET request to the `solar-system-weather` app. In a browser, navigate to the public URL with `/weatherforecast` appended to the end of it. For example: `https://servicename-solar-system-weather.azuremicroservices.io/weatherforecast`
+
+The output is JSON:
+
+```json
+[{"Key":"Mercury","Value":"very warm"},{"Key":"Venus","Value":"quite unpleasant"},{"Key":"Mars","Value":"very cool"},{"Key":"Saturn","Value":"a little bit sandy"}]
+```
+
+This response shows that both Spring apps are working. The `SolarSystemWeather` app returns data that it retrieved from the `PlanetWeatherProvider` app.
+
+This document explains how to build and deploy Spring applications to Azure Spring Apps using:
+* Azure CLI
+* Maven Plugin
+* Intellij
+
+Before deployment using Azure CLI or Maven, complete the examples that [provision an instance of Azure Spring Apps](./quickstart-provision-service-instance.md) and [set up the config server](./quickstart-setup-config-server.md). For enterprise tier, please follow [set up Application Configuration Service](./how-to-enterprise-application-configuration-service.md).
+
+## Prerequisites
+
+* [Install JDK 8 or JDK 11](/azure/developer/java/fundamentals/java-jdk-install)
+* [Sign up for an Azure subscription](https://azure.microsoft.com/free/)
+* (Optional) [Install the Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli) and install the Azure Spring Apps extension with command: `az extension add --name spring`
+* (Optional) [Install the Azure Toolkit for IntelliJ](https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij/) and [sign in](/azure/developer/java/toolkit-for-intellij/create-hello-world-web-app#installation-and-sign-in)
+
+## Deployment procedures
+
+#### [CLI](#tab/Azure-CLI)
+
+## Build the Spring applications locally
+
+1. Clone the sample app repository to your Azure Cloud account. Change the directory, and build the project.
+
+ ```azurecli
+ git clone https://github.com/azure-samples/spring-petclinic-microservices
+ cd spring-petclinic-microservices
+ mvn clean package -DskipTests -Denv=cloud
+ ```
+
+Compiling the project takes 5-10 minutes. Once completed, you should have individual JAR files for each service in their respective folders.
+
+## Create and deploy apps on Azure Spring Apps
+
+1. If you didn't run the following commands in the previous quickstarts, set the CLI defaults.
+
+ ```azurecli
+ az configure --defaults group=<resource-group-name> spring=<service-name>
+ ```
+
+1. Create the 2 core Spring applications for PetClinic: API gateway and customers-service.
+
+ ```azurecli
+ az spring app create --name api-gateway --instance-count 1 --memory 2Gi --assign-endpoint
+ az spring app create --name customers-service --instance-count 1 --memory 2Gi
+ ```
+
+1. Deploy the JAR files built in the previous step.
+
+ ```azurecli
+ az spring app deploy \
+ --name api-gateway \
+ --jar-path spring-petclinic-api-gateway/target/spring-petclinic-api-gateway-2.5.1.jar \
+ --jvm-options="-Xms2048m -Xmx2048m"
+ az spring app deploy \
+ --name customers-service \
+ --jar-path spring-petclinic-customers-service/target/spring-petclinic-customers-service-2.5.1.jar \
+ --jvm-options="-Xms2048m -Xmx2048m"
+ ```
+
+1. Query app status after deployments with the following command.
+
+ ```azurecli
+ az spring app list --output table
+ ```
+
+ This command produces output similar to the following example:
+
+ ```output
+ Name Location ResourceGroup Production Deployment Public Url Provisioning Status CPU Memory Running Instance Registered Instance Persistent Storage
+ -- - -- -- -- --
+ api-gateway eastus xxxxxx-sp default https://<service name>-api-gateway.azuremicroservices.io Succeeded 1 2 1/1 1/1 -
+ customers-service eastus <service name> default Succeeded 1 2 1/1 1/1 -
+ ```
+
+## Verify the services
+
+Access the app gateway and customers service from browser with the **Public Url** shown above, in the format of `https://<service name>-api-gateway.azuremicroservices.io`.
+
+![Access petclinic customers service](media/quickstart-deploy-apps/access-customers-service.png)
+
+> [!TIP]
+> To troubleshot deployments, you can use the following command to get logs streaming in real time whenever the app is running `az spring app logs --name <app name> -f`.
+
+## Deploy extra apps
+
+To get the PetClinic app functioning with all features like Admin Server, Visits and Veterinarians, you can deploy the other apps with following commands:
+
+```azurecli
+az spring app create --name admin-server --instance-count 1 --memory 2Gi --assign-endpoint
+az spring app create --name vets-service --instance-count 1 --memory 2Gi
+az spring app create --name visits-service --instance-count 1 --memory 2Gi
+az spring app deploy --name admin-server --jar-path spring-petclinic-admin-server/target/spring-petclinic-admin-server-2.5.1.jar --jvm-options="-Xms2048m -Xmx2048m"
+az spring app deploy --name vets-service --jar-path spring-petclinic-vets-service/target/spring-petclinic-vets-service-2.5.1.jar --jvm-options="-Xms2048m -Xmx2048m"
+az spring app deploy --name visits-service --jar-path spring-petclinic-visits-service/target/spring-petclinic-visits-service-2.5.1.jar --jvm-options="-Xms2048m -Xmx2048m"
+```
+
+#### [Maven](#tab/Maven)
+
+## Build the Spring applications locally
+
+1. Clone the sample app repository to your Azure Cloud account. Change the directory, and build the project.
+
+ ```azurecli
+ git clone https://github.com/azure-samples/spring-petclinic-microservices
+ cd spring-petclinic-microservices
+ mvn clean package -DskipTests -Denv=cloud
+ ```
+
+Compiling the project takes 5 -10 minutes. Once completed, you should have individual JAR files for each service in their respective folders.
+
+## Generate configurations and deploy to the Azure Spring Apps
+
+1. Generate configurations by running the following command in the root folder of Pet Clinic containing the parent POM. If you have already signed-in with Azure CLI, the command will automatically pick up the credentials. Otherwise, it will sign you in with prompt instructions. For more information, see our [wiki page](https://github.com/microsoft/azure-maven-plugins/wiki/Authentication).
+
+ ```azurecli
+ mvn com.microsoft.azure:azure-spring-apps-maven-plugin:1.10.0:config
+ ```
+
+ You will be asked to select:
+
+ * **Modules:** Select `api-gateway` and `customers-service`.
+ * **Subscription:** This is your subscription used to create an Azure Spring Apps instance.
+ * **Service Instance:** This is the name of your Azure Spring Apps instance.
+ * **Public endpoint:** In the list of provided projects, enter the number that corresponds with `api-gateway`. This gives it public access.
+
+1. Verify the `appName` elements in the POM files are correct:
+
+ ```xml
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.microsoft.azure</groupId>
+ <artifactId>azure-spring-apps-maven-plugin</artifactId>
+ <version>1.10.0</version>
+ <configuration>
+ <subscriptionId>xxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx</subscriptionId>
+ <clusterName>v-spr-cld</clusterName>
+ <appName>customers-service</appName>
+ ```
+
+ Please make sure `appName` texts match the following, remove any prefix if needed and save the file:
+ * api-gateway
+ * customers-service
+
+1. The POM now contains the plugin dependencies and configurations. Deploy the apps using the following command.
+
+ ```azurecli
+ mvn azure-spring-apps:deploy
+ ```
+
+## Verify the services
+
+A successful deployment command will return a URL in the form: `https://<service name>-spring-petclinic-api-gateway.azuremicroservices.io`. Use it to navigate to the running service.
+
+![Access Pet Clinic](media/quickstart-deploy-apps/access-customers-service.png)
+
+You can also navigate the Azure portal to find the URL.
+
+1. Navigate to the service.
+2. Select **Apps**.
+3. Select **api-gateway**.
+4. Find the URL on the **api-gateway | Overview** page.
+
+## Deploy extra apps
+
+To get the PetClinic app functioning with all features like Admin Server, Visits and Veterinarians, you can deploy the other Spring applications. Rerun the configuration command and select the following applications.
+
+* admin-server
+* vets-service
+* visits-service
+
+Correct app names in each `pom.xml` for above modules and then run the `deploy` command again.
+
+#### [IntelliJ](#tab/IntelliJ)
+
+## Import sample project in IntelliJ
+
+1. Download and unzip the source repository for this tutorial, or clone it using Git: `git clone https://github.com/azure-samples/spring-petclinic-microservices`
+
+1. Open IntelliJ **Welcome** dialog, select **Import Project** to open the import wizard.
+
+1. Select `spring-petclinic-microservices` folder.
+
+ ![Import Project](media/quickstart-deploy-apps/import-project-1-pet-clinic.png)
+
+### Deploy api-gateway app to Azure Spring Apps
+
+In order to deploy to Azure you must sign in with your Azure account with Azure Toolkit for IntelliJ, and choose your subscription. For sign-in details, see [Installation and sign-in](/azure/developer/java/toolkit-for-intellij/create-hello-world-web-app#installation-and-sign-in).
+
+1. Right-click your project in IntelliJ project explorer, and select **Azure** -> **Deploy to Azure Spring Apps**.
+
+ ![Deploy to Azure 1](media/quickstart-deploy-apps/deploy-to-azure-1-pet-clinic.png)
+
+1. In the **Name** field, append *:api-gateway* to the existing **Name**.
+1. In the **Artifact** textbox, select *spring-petclinic-api-gateway-2.5.1*.
+1. In the **Subscription** textbox, verify your subscription.
+1. In the **Spring Cloud** textbox, select the instance of Azure Spring Apps that you created in [Provision Azure Spring Apps instance](./quickstart-provision-service-instance.md).
+1. Set **Public Endpoint** to *Enable*.
+1. In the **App:** textbox, select **Create app...**.
+1. Enter *api-gateway*, then select **OK**.
+1. Specify the memory to 2 GB and JVM options: `-Xms2048m -Xmx2048m`.
+
+ ![Memory JVM options](media/quickstart-deploy-apps/memory-jvm-options.png)
+
+1. In the **Before launch** section of the dialog, double-click *Run Maven Goal*.
+1. In the **Working directory** textbox, navigate to the *spring-petclinic-microservices/gateway* folder.
+1. In the **Command line** textbox, enter *package -DskipTests*. Select **OK**.
+
+ ![Deploy to Azure OK](media/quickstart-deploy-apps/deploy-to-azure-spring-cloud-2-pet-clinic.png)
+
+1. Start the deployment by selecting the **Run** button at the bottom of the **Deploy Azure Spring Apps app** dialog. The plug-in will run the command `mvn package` on the `api-gateway` app and deploy the jar generated by the `package` command.
+
+### Deploy customers-service and other apps to Azure Spring Apps
+
+Repeat the steps above to deploy `customers-service` and other Pet Clinic apps to Azure Spring Apps:
+
+1. Modify the **Name** and **Artifact** to identify the `customers-service` app.
+1. In the **App:** textbox, select **Create app...** to create `customers-service` app.
+1. Verify that the **Public Endpoint** option is set to *Disabled*.
+1. In the **Before launch** section of the dialog, switch the **Working directory** to the *petclinic/customers-service* folder.
+1. Start the deployment by selecting the **Run** button at the bottom of the **Deploy Azure Spring Apps app** dialog.
+
+## Verify the services
+
+Navigate to the URL of the form: `https://<service name>-spring-petclinic-api-gateway.azuremicroservices.io`
+
+![Access Pet Clinic](media/quickstart-deploy-apps/access-customers-service.png)
+
+You can also navigate the Azure portal to find the URL.
+
+1. Navigate to the service
+2. Select **Apps**
+3. Select **api-gateway**
+4. Find the URL on the **api-gateway | Overview** page
+
+## Deploy extra apps
+
+Other Spring applications included in this sample can be deployed similarly.
+
+* admin-server
+* vets-service
+* visits-service
++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Quickstart: Set up a Log Analytics workspace](quickstart-setup-log-analytics.md)
spring-apps Quickstart Deploy Infrastructure Vnet Azure Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet-azure-cli.md
+
+ Title: Quickstart - Provision Azure Spring Apps using Azure CLI
+description: This quickstart shows you how to use Azure CLI to deploy an Azure Spring Apps cluster into an existing virtual network.
++++++ Last updated : 05/31/2022++
+# Quickstart: Provision Azure Spring Apps using Azure CLI
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic tier ✔️ Standard tier ✔️ Enterprise tier
+
+This quickstart describes how to use Azure CLI to deploy an Azure Spring Apps cluster into an existing virtual network.
+
+Azure Spring Apps makes it easy to deploy Spring applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more.
+
+The Enterprise tier deployment plan includes the following Tanzu components:
+
+* Build Service
+* Application Configuration Service
+* Service Registry
+* Spring Cloud Gateway
+* API Portal
+
+## Prerequisites
+
+* An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* Two dedicated subnets for the Azure Spring Apps cluster, one for the service runtime and another for the Spring applications. For subnet and virtual network requirements, see the [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* An existing Log Analytics workspace for Azure Spring Apps diagnostics settings and a workspace-based Application Insights resource. For more information, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md) and [Application Insights Java In-Process Agent in Azure Spring Apps](how-to-application-insights.md).
+* Three internal Classless Inter-Domain Routing (CIDR) ranges (at least */16* each) that you've identified for use by the Azure Spring Apps cluster. These CIDR ranges won't be directly routable and will be used only internally by the Azure Spring Apps cluster. Clusters may not use *169.254.0.0/16*, *172.30.0.0/16*, *172.31.0.0/16*, or *192.0.2.0/24* for the internal Spring app CIDR ranges, or any IP ranges included within the cluster virtual network address range.
+* Service permission granted to the virtual network. The Azure Spring Apps Resource Provider requires Owner permission to your virtual network in order to grant a dedicated and dynamic service principal on the virtual network for further deployment and maintenance. For instructions and more information, see the [Grant service permission to the virtual network](how-to-deploy-in-azure-virtual-network.md#grant-service-permission-to-the-virtual-network) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* If you're using Azure Firewall or a Network Virtual Appliance (NVA), you'll also need to satisfy the following prerequisites:
+ * Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements).
+ * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* [Azure CLI](/cli/azure/install-azure-cli)
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, use the following commands to register the provider and accept the legal terms and privacy statements for the Enterprise tier.
+
+ ```azurecli
+ az provider register --namespace Microsoft.SaaS
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan tanzu-asc-ent-mtr
+ ```
+
+## Review the Azure CLI deployment script
+
+The deployment script used in this quickstart is from the [Azure Spring Apps reference architecture](reference-architecture.md).
+
+### [Standard tier](#tab/azure-spring-apps-standard)
++
+### [Enterprise tier](#tab/azure-spring-apps-enterprise)
++++
+## Deploy the cluster
+
+To deploy the Azure Spring Apps cluster using the Azure CLI script, follow these steps:
+
+1. Sign in to Azure by using the following command:
+
+ ```azurecli
+ az login
+ ```
+
+ After you sign in, this command will output information about all the subscriptions you have access to. Take note of the name and ID of the subscription you want to use.
+
+1. Set the target subscription.
+
+ ```azurecli
+ az account set --subscription "<your subscription name>"
+ ```
+
+1. Register the Azure Spring Apps Resource Provider.
+
+ ```azurecli
+ az provider register --namespace 'Microsoft.AppPlatform'
+ ```
+
+1. Add the required extensions to Azure CLI.
+
+ ```azurecli
+ az extension add --name spring
+ ```
+
+1. Choose a deployment location from the regions where Azure Spring Apps is available, as shown in [Products available by region](https://azure.microsoft.com/global-infrastructure/services/?products=spring-cloud&regions=all).
+
+1. Use the following command to generate a list of Azure locations. Take note of the short **Name** value for the region you selected in the previous step.
+
+ ```azurecli
+ az account list-locations --output table
+ ```
+
+1. Create a resource group to deploy the resource to.
+
+ ```azurecli
+ az group create --name <your-resource-group-name> --location <location-name>
+ ```
+
+1. Save the script for Azure Spring Apps [Standard tier](https://raw.githubusercontent.com/Azure/azure-spring-apps-reference-architecture/main/CLI/brownfield-deployment/azuredeploySpringStandard.sh) or [Enterprise tier](https://raw.githubusercontent.com/Azure/azure-spring-apps-reference-architecture/main/CLI/brownfield-deployment/azuredeploySpringEnterprise.sh) locally, then run it from the Bash prompt.
+
+ **Standard tier:**
+
+ ```azurecli
+ ./azuredeploySpringStandard.sh
+ ```
+
+ **Enterprise tier:**
+
+ ```azurecli
+ ./azuredeploySpringEnterprise.sh
+ ```
+
+1. Enter the following values when prompted by the script:
+
+ * The Azure subscription ID that you saved earlier.
+ * The Azure location name that you saved earlier.
+ * The name of the resource group that you created earlier.
+ * The name of the virtual network resource group where you'll deploy your resources.
+ * The name of the spoke virtual network (for example, *vnet-spoke*).
+ * The name of the subnet to be used by the Azure Spring Apps Application Service (for example, *snet-app*).
+ * The name of the subnet to be used by the Azure Spring Apps Runtime Service (for example, *snet-runtime*).
+ * The name of the resource group for the Azure Log Analytics workspace to be used for storing diagnostic logs.
+ * The name of the Azure Log Analytics workspace (for example, *la-cb5sqq6574o2a*).
+ * The CIDR ranges from your virtual network to be used by Azure Spring Apps (for example, *XX.X.X.X/16,XX.X.X.X/16,XX.X.X.X/16*).
+ * The key/value pairs to be applied as tags on all resources that support tags. For more information, see [Use tags to organize your Azure resources and management hierarchy](../azure-resource-manager/management/tag-resources.md). Use a space-separated list to apply multiple tags (for example, *environment=Dev BusinessUnit=finance*).
+
+After you provide this information, the script will create and deploy the Azure resources.
+
+## Review deployed resources
+
+You can either use the Azure portal to check the deployed resources, or use Azure CLI to list the deployed resources.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+In this quickstart, you deployed an Azure Spring Apps instance into an existing virtual network using Azure CLI, and then validated the deployment. To learn more about Azure Spring Apps, continue on to the resources below.
+
+* Deploy one of the following sample applications from the locations below:
+ * [Pet Clinic App with MySQL Integration](https://github.com/azure-samples/spring-petclinic-microservices)
+ * [Simple Hello World](./quickstart.md?pivots=programming-language-java&tabs=Azure-CLI).
+* Use [custom domains](tutorial-custom-domain.md) with Azure Spring Apps.
+* Expose applications in Azure Spring Apps to the internet using Azure Application Gateway. For more information, see [Expose applications with end-to-end TLS in a virtual network](expose-apps-gateway-end-to-end-tls.md).
+* View the secure end-to-end [Azure Spring Apps reference architecture](reference-architecture.md), which is based on the [Microsoft Azure Well-Architected Framework](/azure/architecture/framework/).
spring-apps Quickstart Deploy Infrastructure Vnet Bicep https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet-bicep.md
+
+ Title: Quickstart - Provision Azure Spring Apps using Bicep
+description: This quickstart shows you how to use Bicep to deploy an Azure Spring Apps cluster into an existing virtual network.
+++++ Last updated : 05/31/2022++
+# Quickstart: Provision Azure Spring Apps using Bicep
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic tier ✔️ Standard tier ✔️ Enterprise tier
+
+This quickstart describes how to use a Bicep template to deploy an Azure Spring Apps cluster into an existing virtual network.
+
+Azure Spring Apps makes it easy to deploy Spring applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more.
+
+The Enterprise tier deployment plan includes the following Tanzu components:
+
+* Build Service
+* Application Configuration Service
+* Service Registry
+* Spring Cloud Gateway
+* API Portal
+
+## Prerequisites
+
+* An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* Two dedicated subnets for the Azure Spring Apps cluster, one for the service runtime and another for the Spring applications. For subnet and virtual network requirements, see the [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* An existing Log Analytics workspace for Azure Spring Apps diagnostics settings. For more information, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md).
+* Three internal Classless Inter-Domain Routing (CIDR) ranges (at least */16* each) that you've identified for use by the Azure Spring Apps cluster. These CIDR ranges won't be directly routable and will be used only internally by the Azure Spring Apps cluster. Clusters may not use *169.254.0.0/16*, *172.30.0.0/16*, *172.31.0.0/16*, or *192.0.2.0/24* for the internal Spring app CIDR ranges, or any IP ranges included within the cluster virtual network address range.
+* Service permission granted to the virtual network. The Azure Spring Apps Resource Provider requires Owner permission to your virtual network in order to grant a dedicated and dynamic service principal on the virtual network for further deployment and maintenance. For instructions and more information, see the [Grant service permission to the virtual network](how-to-deploy-in-azure-virtual-network.md#grant-service-permission-to-the-virtual-network) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* If you're using Azure Firewall or a Network Virtual Appliance (NVA), you'll also need to satisfy the following prerequisites:
+ * Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements).
+ * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* [Azure CLI](/cli/azure/install-azure-cli)
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, use the following commands to register the provider and accept the legal terms and privacy statements for the Enterprise tier.
+
+ ```azurecli
+ az provider register --namespace Microsoft.SaaS
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan tanzu-asc-ent-mtr
+ ```
+
+## Deploy using Bicep
+
+To deploy the cluster, use the following steps.
+
+First, create an *azuredeploy.bicep* file with the following contents:
+
+### [Standard tier](#tab/azure-spring-apps-standard)
++
+### [Enterprise tier](#tab/azure-spring-apps-enterprise)
++++
+Next, open a Bash window and run the following Azure CLI command, replacing the *\<value>* placeholders with the following values:
+
+* **resource-group:** The resource group name for deploying the Azure Spring Apps instance.
+* **springCloudInstanceName:** The name of the Azure Spring Apps resource.
+* **appInsightsName:** The name of the Application Insights instance for Azure Spring Apps.
+* **laWorkspaceResourceId:** The resource ID of the existing Log Analytics workspace (for example, */subscriptions/\<your subscription>/resourcegroups/\<your Log Analytics resource group>/providers/Microsoft.OperationalInsights/workspaces/\<your Log Analytics workspace name>*.)
+* **springCloudAppSubnetID:** The resource ID of the Azure Spring Apps Application Subnet.
+* **springCloudRuntimeSubnetID:** The resource ID of the Azure Spring Apps Runtime Subnet.
+* **springCloudServiceCidrs:** A comma-separated list of IP address ranges (three in total) in CIDR format. The IP ranges are reserved to host underlying Azure Spring Apps infrastructure. These three ranges should be at least */16* unused IP ranges, and must not overlap with any routable subnet IP ranges used within the network.
+
+ ```azurecli
+ az deployment group create \
+ --resource-group <value> \
+ --name initial \
+ --template-file azuredeploy.bicep \
+ --parameters \
+ springCloudInstanceName=<value> \
+ appInsightsName=<value> \
+ laWorkspaceResourceId=<value> \
+ springCloudAppSubnetID=<value> \
+ springCloudRuntimeSubnetID=<value> \
+ springCloudServiceCidrs=<value>
+ ```
+
+ This command uses the Bicep template to create an Azure Spring Apps instance in an existing virtual network. The command also creates a workspace-based Application Insights instance in an existing Azure Monitor Log Analytics Workspace.
+
+## Review deployed resources
+
+You can either use the Azure portal to check the deployed resources, or use Azure CLI or Azure PowerShell script to list the deployed resources.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+In this quickstart, you deployed an Azure Spring Apps instance into an existing virtual network using Bicep, and then validated the deployment. To learn more about Azure Spring Apps, continue on to the resources below.
+
+* Deploy one of the following sample applications from the locations below:
+ * [Pet Clinic App with MySQL Integration](https://github.com/azure-samples/spring-petclinic-microservices)
+ * [Simple Hello World](./quickstart.md?pivots=programming-language-java&tabs=Azure-CLI).
+* Use [custom domains](tutorial-custom-domain.md) with Azure Spring Apps.
+* Expose applications in Azure Spring Apps to the internet using Azure Application Gateway. For more information, see [Expose applications with end-to-end TLS in a virtual network](expose-apps-gateway-end-to-end-tls.md).
+* View the secure end-to-end [Azure Spring Apps reference architecture](reference-architecture.md), which is based on the [Microsoft Azure Well-Architected Framework](/azure/architecture/framework/).
spring-apps Quickstart Deploy Infrastructure Vnet Terraform https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet-terraform.md
+
+ Title: Quickstart - Provision Azure Spring Apps using Terraform
+description: This quickstart shows you how to use Terraform to deploy an Azure Spring Apps cluster into an existing virtual network.
+++++ Last updated : 05/31/2022++
+# Quickstart: Provision Azure Spring Apps using Terraform
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic tier ✔️ Standard tier ✔️ Enterprise tier
+
+This quickstart describes how to use Terraform to deploy an Azure Spring Apps cluster into an existing virtual network.
+
+Azure Spring Apps makes it easy to deploy Spring applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more.
+
+The Enterprise tier deployment plan includes the following Tanzu components:
+
+* Build Service
+* Application Configuration Service
+* Service Registry
+* Spring Cloud Gateway
+* API Portal
+
+The API Portal component will be included when it becomes available through the AzureRM Terraform provider.
+
+For more customization including custom domain support, see the [Azure Spring Apps Terraform provider](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/spring_cloud_service) documentation.
+
+## Prerequisites
+
+* An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* [Hashicorp Terraform](https://www.terraform.io/downloads.html)
+* Two dedicated subnets for the Azure Spring Apps cluster, one for the service runtime and another for the Spring applications. For subnet and virtual network requirements, see the [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* An existing Log Analytics workspace for Azure Spring Apps diagnostics settings and a workspace-based Application Insights resource. For more information, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md) and [Application Insights Java In-Process Agent in Azure Spring Apps](how-to-application-insights.md).
+* Three internal Classless Inter-Domain Routing (CIDR) ranges (at least */16* each) that you've identified for use by the Azure Spring Apps cluster. These CIDR ranges won't be directly routable and will be used only internally by the Azure Spring Apps cluster. Clusters may not use *169.254.0.0/16*, *172.30.0.0/16*, *172.31.0.0/16*, or *192.0.2.0/24* for the internal Azure Spring Apps CIDR ranges, or any IP ranges included within the cluster virtual network address range.
+* Service permission granted to the virtual network. The Azure Spring Apps Resource Provider requires Owner permission to your virtual network in order to grant a dedicated and dynamic service principal on the virtual network for further deployment and maintenance. For instructions and more information, see the [Grant service permission to the virtual network](how-to-deploy-in-azure-virtual-network.md#grant-service-permission-to-the-virtual-network) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* If you're using Azure Firewall or a Network Virtual Appliance (NVA), you'll also need to satisfy the following prerequisites:
+ * Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements).
+ * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, use the following commands to register the provider and accept the legal terms and privacy statements for the Enterprise tier.
+
+ ```azurecli
+ az provider register --namespace Microsoft.SaaS
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan tanzu-asc-ent-mtr
+ ```
+
+## Review the Terraform plan
+
+The configuration file used in this quickstart is from the [Azure Spring Apps reference architecture](reference-architecture.md).
+
+### [Standard tier](#tab/azure-spring-apps-standard)
++
+### [Enterprise tier](#tab/azure-spring-apps-enterprise)
++++
+## Apply the Terraform plan
+
+To apply the Terraform plan, follow these steps:
+
+1. Save the *variables.tf* file for [Standard tier](https://raw.githubusercontent.com/Azure/azure-spring-apps-reference-architecture/main/terraform/brownfield-deployment/Standard/variable.tf) or [Enterprise tier](https://raw.githubusercontent.com/Azure/azure-spring-apps-reference-architecture/main/terraform/brownfield-deployment/Enterprise/variable.tf) locally, then open it in an editor.
+
+1. Edit the file to add the following values:
+
+ * The subscription ID of the Azure account you'll be deploying to.
+
+ * A deployment location from the regions where Azure Spring Apps is available, as shown in [Products available by region](https://azure.microsoft.com/global-infrastructure/services/?products=spring-cloud&regions=all). You'll need the short form of the location name. To get this value, use the following command to generate a list of Azure locations, then look up the **Name** value for the region you selected.
+
+ ```azurecli
+ az account list-locations --output table
+ ```
+
+1. Edit the file to add the following new deployment information:
+
+ * The name of the resource group you'll deploy to.
+ * A name of your choice for the Azure Spring Apps Deployment.
+ * A name of your choice for the Application Insights resource.
+ * Three CIDR ranges (at least /16) which are used to host the Azure Spring Apps backend infrastructure. The CIDR ranges must not overlap with any existing CIDR ranges in the target Subnet
+ * The key/value pairs to be applied as tags on all resources that support tags. For more information, see [Use tags to organize your Azure resources and management hierarchy](../azure-resource-manager/management/tag-resources.md)
+
+1. Edit the file to add the following existing infrastructure information:
+
+ * The name of the resource group where the existing virtual network resides.
+ * The name of the existing scope virtual network.
+ * The name of the existing subnet to be used by the Azure Spring Apps Application Service.
+ * The name of the existing subnet to be used by the Azure Spring Apps Runtime Service.
+ * The name of the Azure Log Analytics workspace.
+
+1. Run the following command to initialize the Terraform modules:
+
+ ```bash
+ terraform init
+ ```
+
+1. Run the following command to create the Terraform deployment plan:
+
+ ```bash
+ terraform plan -out=springcloud.plan
+ ```
+
+1. Run the following command to apply the Terraform deployment plan:
+
+ ```bash
+ terraform apply springcloud.plan
+ ```
+
+## Review deployed resources
+
+You can either use the Azure portal to check the deployed resources, or use Azure CLI or Azure PowerShell script to list the deployed resources.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resources created in this article by using the following command.
+
+```bash
+terraform destroy -auto-approve
+```
+
+## Next steps
+
+In this quickstart, you deployed an Azure Spring Apps instance into an existing virtual network using Terraform, and then validated the deployment. To learn more about Azure Spring Apps, continue on to the resources below.
+
+* Deploy one of the following sample applications from the locations below:
+ * [Pet Clinic App with MySQL Integration](https://github.com/azure-samples/spring-petclinic-microservices)
+ * [Simple Hello World](./quickstart.md?pivots=programming-language-java&tabs=Azure-CLI)
+* Use [custom domains](tutorial-custom-domain.md) with Azure Spring Apps.
+* Expose applications in Azure Spring Apps to the internet using Azure Application Gateway. For more information, see [Expose applications with end-to-end TLS in a virtual network](expose-apps-gateway-end-to-end-tls.md).
+* View the secure end-to-end [Azure Spring Apps reference architecture](reference-architecture.md), which is based on the [Microsoft Azure Well-Architected Framework](/azure/architecture/framework/).
spring-apps Quickstart Deploy Infrastructure Vnet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-deploy-infrastructure-vnet.md
+
+ Title: Quickstart - Provision Azure Spring Apps using an Azure Resource Manager template (ARM template)
+description: This quickstart shows you how to use an ARM template to deploy an Azure Spring Apps cluster into an existing virtual network.
++++++ Last updated : 05/31/2022++
+# Quickstart: Provision Azure Spring Apps using an ARM template
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic tier ✔️ Standard tier ✔️ Enterprise tier
+
+This quickstart describes how to use an Azure Resource Manager template (ARM template) to deploy an Azure Spring Apps cluster into an existing virtual network.
+
+Azure Spring Apps makes it easy to deploy Spring applications to Azure without any code changes. The service manages the infrastructure of Spring applications so developers can focus on their code. Azure Spring Apps provides lifecycle management using comprehensive monitoring and diagnostics, configuration management, service discovery, CI/CD integration, blue-green deployments, and more.
+
+The Enterprise tier deployment plan includes the following Tanzu components:
+
+* Build Service
+* Application Configuration Service
+* Service Registry
+* Spring Cloud Gateway
+* API Portal
++
+## Prerequisites
+
+* An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+* Two dedicated subnets for the Azure Spring Apps cluster, one for the service runtime and another for the Spring applications. For subnet and virtual network requirements, see the [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* An existing Log Analytics workspace for Azure Spring Apps diagnostics settings and a workspace-based Application Insights resource. For more information, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md) and [Application Insights Java In-Process Agent in Azure Spring Apps](how-to-application-insights.md).
+* Three internal Classless Inter-Domain Routing (CIDR) ranges (at least */16* each) that you've identified for use by the Azure Spring Apps cluster. These CIDR ranges won't be directly routable and will be used only internally by the Azure Spring Apps cluster. Clusters may not use *169.254.0.0/16*, *172.30.0.0/16*, *172.31.0.0/16*, or *192.0.2.0/24* for the internal Azure Spring Apps CIDR ranges, or any IP ranges included within the cluster virtual network address range.
+* Service permission granted to the virtual network. The Azure Spring Apps Resource Provider requires Owner permission to your virtual network in order to grant a dedicated and dynamic service principal on the virtual network for further deployment and maintenance. For instructions and more information, see the [Grant service permission to the virtual network](how-to-deploy-in-azure-virtual-network.md#grant-service-permission-to-the-virtual-network) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* If you're using Azure Firewall or a Network Virtual Appliance (NVA), you'll also need to satisfy the following prerequisites:
+
+ * Network and fully qualified domain name (FQDN) rules. For more information, see [Virtual network requirements](how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements).
+ * A unique User Defined Route (UDR) applied to each of the service runtime and Spring application subnets. For more information about UDRs, see [Virtual network traffic routing](../virtual-network/virtual-networks-udr-overview.md). The UDR should be configured with a route for *0.0.0.0/0* with a destination of your NVA before deploying the Azure Spring Apps cluster. For more information, see the [Bring your own route table](how-to-deploy-in-azure-virtual-network.md#bring-your-own-route-table) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+* If you're deploying Azure Spring Apps Enterprise tier for the first time in the target subscription, use the following commands to register the provider and accept the legal terms and privacy statements for the Enterprise tier.
+
+ ```azurecli
+ az provider register --namespace Microsoft.SaaS
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan tanzu-asc-ent-mtr
+ ```
+
+## Review the template
+
+The templates used in this quickstart are from the [Azure Spring Apps Reference Architecture](reference-architecture.md).
+
+### [Standard tier](#tab/azure-spring-apps-standard)
++
+### [Enterprise tier](#tab/azure-spring-apps-enterprise)
++++
+Two Azure resources are defined in the template:
+
+* [Microsoft.AppPlatform/Spring](/azure/templates/microsoft.appplatform/spring) creates an Azure Spring Apps instance.
+* [Microsoft.Insights/components](/azure/templates/microsoft.insights/components) creates an Application Insights workspace.
+
+## Deploy the template
+
+To deploy the template, use the following steps.
+
+First, select the following image to sign in to Azure and open a template. The template creates an Azure Spring Apps instance in an existing Virtual Network and a workspace-based Application Insights instance in an existing Azure Monitor Log Analytics Workspace.
+
+### [Standard tier](#tab/azure-spring-apps-standard)
++
+### [Enterprise tier](#tab/azure-spring-apps-enterprise)
++++
+Next, enter values for the following fields:
+
+* **Resource Group:** Select **Create new**, enter a unique name for the **resource group**, and then select **OK**.
+* **springCloudInstanceName:** Enter the name of the Azure Spring Apps resource.
+* **appInsightsName:** Enter the name of the Application Insights instance for Azure Spring Apps.
+* **laWorkspaceResourceId:** Enter the resource ID of the existing Log Analytics workspace (for example, */subscriptions/\<your subscription>/resourcegroups/\<your Log Analytics resource group>/providers/Microsoft.OperationalInsights/workspaces/\<your Log Analytics workspace name>*.)
+* **springCloudAppSubnetID:** Enter the resource ID of the Azure Spring Apps Application Subnet.
+* **springCloudRuntimeSubnetID:** Enter the resource ID of the Azure Spring Apps Runtime Subnet.
+* **springCloudServiceCidrs:** Enter a comma-separated list of IP address ranges (three in total) in CIDR format. The IP ranges are reserved to host underlying Azure Spring Apps infrastructure. These three ranges should be at least */16* unused IP ranges, and must not overlap with any routable subnet IP ranges used within the network.
+* **tags:** Enter any custom tags.
+
+Finally, select **Review + Create** and then **Create**.
+
+## Review deployed resources
+
+You can either use the Azure portal to check the deployed resources, or use Azure CLI or Azure PowerShell script to list the deployed resources.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI or Azure PowerShell, use the following commands:
+
+### [Azure CLI](#tab/azure-cli)
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+### [PowerShell](#tab/azure-powershell)
+
+```azurepowershell-interactive
+$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
+Remove-AzResourceGroup -Name $resourceGroupName
+Write-Host "Press [ENTER] to continue..."
+```
+++
+## Next steps
+
+In this quickstart, you deployed an Azure Spring Apps instance into an existing virtual network using an ARM template, and then validated the deployment. To learn more about Azure Spring Apps and Azure Resource Manager, continue on to the resources below.
+
+* Deploy one of the following sample applications from the locations below:
+ * [Pet Clinic App with MySQL Integration](https://github.com/azure-samples/spring-petclinic-microservices)
+ * [Simple Hello World](./quickstart.md?pivots=programming-language-java&tabs=Azure-CLI)
+* Use [custom domains](tutorial-custom-domain.md) with Azure Spring Apps.
+* Expose applications in Azure Spring Apps to the internet using Azure Application Gateway. For more information, see [Expose applications with end-to-end TLS in a virtual network](expose-apps-gateway-end-to-end-tls.md).
+* View the secure end-to-end [Azure Spring Apps reference architecture](reference-architecture.md), which is based on the [Microsoft Azure Well-Architected Framework](/azure/architecture/framework/).
+* Learn more about [Azure Resource Manager](../azure-resource-manager/management/overview.md).
spring-apps Quickstart Integrate Azure Database And Redis Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-integrate-azure-database-and-redis-enterprise.md
+
+ Title: "Quickstart - Integrate with Azure Database for PostgreSQL and Azure Cache for Redis"
+
+description: Explains how to provision and prepare an Azure Database for PostgreSQL and an Azure Cache for Redis to be used with apps running Azure Spring Apps Enterprise tier.
++++ Last updated : 05/31/2022+++
+# Quickstart: Integrate with Azure Database for PostgreSQL and Azure Cache for Redis
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how to provision and prepare an Azure Database for PostgreSQL and an Azure Cache for Redis to be used with apps running in Azure Spring Apps Enterprise tier.
+
+This article uses these services for demonstration purposes. You can connect your application to any backing service of your choice by using instructions similar to the ones in the [Create Service Connectors](#create-service-connectors) section later in this article.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+- Complete the steps in [Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+## Provision services
+
+To add persistence to the application, create an Azure Cache for Redis and an Azure Database for PostgreSQL Flexible Server.
+
+### [Azure CLI](#tab/azure-cli)
+
+The following steps describe how to provision an Azure Cache for Redis instance and an Azure Database for PostgreSQL Flexible Server by using the Azure CLI.
+
+1. Use the following command to create an instance of Azure Cache for Redis:
+
+ ```azurecli
+ az redis create \
+ --resource-group <resource-group-name> \
+ --name <redis-cache-name> \
+ --location ${REGION} \
+ --sku Basic \
+ --vm-size c0
+ ```
+
+ > [!NOTE]
+ > Redis Cache creation takes approximately 20 minutes.
+
+1. Use the following command to create an Azure Database for PostgreSQL Flexible Server instance:
+
+ ```azurecli
+ az postgres flexible-server create \
+ --resource-group <resource-group-name> \
+ --name <postgres-server-name> \
+ --location <location> \
+ --admin-user <postgres-username> \
+ --admin-password <postgres-password> \
+ --yes
+ ```
+
+1. Use the following command to allow connections from other Azure Services to the newly created Flexible Server:
+
+ ```azurecli
+ az postgres flexible-server firewall-rule create \
+ --rule-name allAzureIPs \
+ --name <postgres-server-name> \
+ --resource-group <resource-group-name> \
+ --start-ip-address 0.0.0.0 \
+ --end-ip-address 0.0.0.0
+ ```
+
+1. Use the following command to enable the `uuid-ossp` extension for the newly created Flexible Server:
+
+ ```azurecli
+ az postgres flexible-server parameter set \
+ --resource-group <resource-group-name> \
+ --name azure.extensions \
+ --value uuid-ossp \
+ --server-name <postgres-server-name> \
+ ```
+
+1. Use the following command to create a database for the Order Service application:
+
+ ```azurecli
+ az postgres flexible-server db create \
+ --resource-group <resource-group-name> \
+ --server-name <postgres-server-name> \
+ --database-name acmefit_order
+ ```
+
+1. Use the following command to create a database for the Catalog Service application:
+
+ ```azurecli
+ az postgres flexible-server db create \
+ --resource-group <resource-group-name> \
+ --server-name <postgres-server-name> \
+ --database-name acmefit_catalog
+ ```
+
+### [ARM template](#tab/arm-template)
+
+The following instructions describe how to provision an Azure Cache for Redis and an Azure Database for PostgreSQL Flexible Server by using an Azure Resource Manager template (ARM template).
++
+You can find the template used in this quickstart in the [fitness store sample GitHub repository](https://github.com/Azure-Samples/acme-fitness-store/blob/Azure/azure/templates/azuredeploy.json).
+
+To deploy this template, follow these steps:
+
+1. Select the following image to sign in to Azure and open a template. The template creates an Azure Cache for Redis and an Azure Database for PostgreSQL Flexible Server.
+
+ :::image type="content" source="../media/template-deployments/deploy-to-azure.svg" alt-text="Button to deploy the ARM template to Azure." border="false" link="https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure-Samples%2Facme-fitness-store%2FAzure%2Fazure%2Ftemplates%2Fazuredeploy.json":::
+
+1. Enter values for the following fields:
+
+ - **Resource Group:** Select **Create new**, enter a unique name for the **resource group**, and then select **OK**.
+ - **cacheName:** Enter the name for the Azure Cache for Redis Server.
+ - **dbServerName:** Enter the name for the Azure Database for PostgreSQL Flexible Server.
+ - **administratorLogin:** Enter the admin username for the Azure Database for PostgreSQL Flexible Server.
+ - **administratorLoginPassword:** Enter the admin password for the Azure Database for PostgreSQL Flexible Server.
+ - **tags:** Enter any custom tags.
+
+1. Select **Review + Create** and then **Create**.
+++
+## Create Service Connectors
+
+The following steps show how to bind applications running in Azure Spring Apps Enterprise tier to other Azure services by using Service Connectors.
+
+1. Use the following command to create a service connector to Azure Database for PostgreSQL for the Order Service application:
+
+ ```azurecli
+ az spring connection create postgres-flexible \
+ --resource-group <resource-group-name> \
+ --target-resource-group <target-resource-group> \
+ --connection order_service_db \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app order-service \
+ --deployment default \
+ --server <postgres-server-name> \
+ --database acmefit_order \
+ --secret name=<postgres-username> secret=<postgres-password> \
+ --client-type dotnet
+ ```
+
+1. Use the following command to create a service connector to Azure Database for PostgreSQL for the Catalog Service application:
+
+ ```azurecli
+ az spring connection create postgres-flexible \
+ --resource-group <resource-group-name> \
+ --target-resource-group <target-resource-group> \
+ --connection catalog_service_db \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app catalog-service \
+ --deployment default \
+ --server <postgres-server-name> \
+ --database acmefit_catalog \
+ --secret name=<postgres-username> secret=<postgres-password> \
+ --client-type springboot
+ ```
+
+1. Use the following command to create a service connector to Azure Cache for Redis for the Cart Service application:
+
+ ```azurecli
+ az spring connection create redis \
+ --resource-group <resource-group-name> \
+ --target-resource-group <target-resource-group> \
+ --connection cart_service_cache \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --app cart-service \
+ --deployment default \
+ --server <redis-cache-name> \
+ --database 0 \
+ --client-type java
+ ```
+
+1. Use the following command to reload the Catalog Service application to load the new connection properties:
+
+ ```azurecli
+ az spring app restart
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following commands to retrieve the database connection information and update the Order Service application:
+
+ ```azurecli
+ POSTGRES_CONNECTION_STR=$(az spring connection show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --deployment default \
+ --connection order_service_db \
+ --app order-service | jq '.configurations[0].value' -r)
+
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --env "DatabaseProvider=Postgres" "ConnectionStrings__OrderContext=${POSTGRES_CONNECTION_STR}"
+ ```
+
+1. Use the following commands to retrieve Redis connection information and update the Cart Service application:
+
+ ```azurecli
+ REDIS_CONN_STR=$(az spring connection show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --deployment default \
+ --app cart-service \
+ --connection cart_service_cache | jq -r '.configurations[0].value')
+
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --env "CART_PORT=8080" "REDIS_CONNECTIONSTRING=${REDIS_CONN_STR}"
+ ```
+
+## Access the application
+
+Retrieve the URL for Spring Cloud Gateway and explore the updated application. You can use the output from the following command to explore the application:
+
+```azurecli
+GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+echo "https://${GATEWAY_URL}"
+```
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Continue on to any of the following optional quickstarts:
+
+- [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+- [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+- [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+- [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
+- [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
spring-apps Quickstart Integrate Azure Database Mysql https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-integrate-azure-database-mysql.md
+
+ Title: "Quickstart - Integrate with Azure Database for MySQL"
+description: Explains how to provision and prepare an Azure Database for MySQL instance, and then configure Pet Clinic on Azure Spring Apps to use it as a persistent database with only one command.
++++ Last updated : 10/15/2021+++
+# Quickstart: Integrate Azure Spring Apps with Azure Database for MySQL
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+Pet Clinic, as deployed in the default configuration [Quickstart: Build and deploy apps to Azure Spring Apps](quickstart-deploy-apps.md), uses an in-memory database (HSQLDB) that is populated with data at startup. This quickstart explains how to provision and prepare an Azure Database for MySQL instance and then configure Pet Clinic on Azure Spring Apps to use it as a persistent database with only one command.
+
+## Prerequisites
+
+* [MySQL CLI is installed](http://dev.mysql.com/downloads/mysql/)
+
+## Variables preparation
+
+We will use the following values. Save them in a text file or environment variables to avoid errors. The password should be at least 8 characters long and contain at least one English uppercase letter, one English lowercase letter, one number, and one non-alphanumeric character (!, $, #, %, and so on.).
+
+```bash
+export RESOURCE_GROUP=<resource-group-name> # customize this
+export MYSQL_SERVER_NAME=<mysql-server-name> # customize this
+export MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_NAME}.mysql.database.azure.com
+export MYSQL_SERVER_ADMIN_NAME=<admin-name> # customize this
+export MYSQL_SERVER_ADMIN_LOGIN_NAME=${MYSQL_SERVER_ADMIN_NAME}\@${MYSQL_SERVER_NAME}
+export MYSQL_SERVER_ADMIN_PASSWORD=<password> # customize this
+export MYSQL_DATABASE_NAME=petclinic
+```
+
+## Prepare an Azure Database for MySQL instance
+
+1. If you didn't run the following commands in the previous quickstarts, set the CLI defaults.
+
+ ```azcli
+ az configure --defaults group=<resource group name> spring-cloud=<service name>
+ ```
+
+1. Create an Azure Database for MySQL server.
+
+ ```azcli
+ az mysql server create --resource-group ${RESOURCE_GROUP} \
+ --name ${MYSQL_SERVER_NAME} \
+ --admin-user ${MYSQL_SERVER_ADMIN_NAME} \
+ --admin-password ${MYSQL_SERVER_ADMIN_PASSWORD} \
+ --sku-name GP_Gen5_2 \
+ --ssl-enforcement Disabled \
+ --version 5.7
+ ```
+
+1. Allow access from Azure resources.
+
+ ```azcli
+ az mysql server firewall-rule create --name allAzureIPs \
+ --server ${MYSQL_SERVER_NAME} \
+ --resource-group ${RESOURCE_GROUP} \
+ --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0
+ ```
+
+1. Allow access from your dev machine for testing.
+
+ ```azcli
+ az mysql server firewall-rule create --name devMachine \
+ --server ${MYSQL_SERVER_NAME} \
+ --resource-group ${RESOURCE_GROUP} \
+ --start-ip-address <ip-address-of-your-dev-machine> \
+ --end-ip-address <ip-address-of-your-dev-machine>
+ ```
+
+1. Increase connection timeout.
+
+ ```azcli
+ az mysql server configuration set --name wait_timeout \
+ --resource-group ${RESOURCE_GROUP} \
+ --server ${MYSQL_SERVER_NAME} --value 2147483
+ ```
+
+1. Create database in the MySQL server and set corresponding settings.
+
+ ```sql
+ // SUBSTITUTE values
+ mysql -u ${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
+ -h ${MYSQL_SERVER_FULL_NAME} -P 3306 -p
+
+ Enter password:
+ Welcome to the MySQL monitor. Commands end with ; or \g.
+ Your MySQL connection id is 64379
+ Server version: 5.6.39.0 MySQL Community Server (GPL)
+
+ Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
+
+ Oracle is a registered trademark of Oracle Corporation and/or its
+ affiliates. Other names may be trademarks of their respective
+ owners.
+
+ Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
+
+ mysql> CREATE DATABASE petclinic;
+ Query OK, 1 row affected (0.10 sec)
+
+ mysql> CREATE USER 'root' IDENTIFIED BY 'petclinic';
+ Query OK, 0 rows affected (0.11 sec)
+
+ mysql> GRANT ALL PRIVILEGES ON petclinic.* TO 'root';
+ Query OK, 0 rows affected (1.29 sec)
+
+ mysql> CALL mysql.az_load_timezone();
+ Query OK, 3179 rows affected, 1 warning (6.34 sec)
+
+ mysql> SELECT name FROM mysql.time_zone_name;
+ ...
+
+ mysql> quit
+ Bye
+ ```
+
+1. Set timezone.
+
+ ```azcli
+ az mysql server configuration set \
+ --resource-group ${RESOURCE_GROUP} \
+ --name time_zone \
+ --server ${MYSQL_SERVER_NAME} \
+ --value "US/Pacific"
+ ```
+
+## Update Apps to use MySQL database
+
+To enable MySQL as database for the sample app, simply update the *customer-service* app with active profile MySQL and database credentials as environment variables.
+
+```azcli
+az spring app update \
+ --name customers-service \
+ --jvm-options="-Xms2048m -Xmx2048m -Dspring.profiles.active=mysql" \
+ --env \
+ MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_FULL_NAME} \
+ MYSQL_DATABASE_NAME=${MYSQL_DATABASE_NAME} \
+ MYSQL_SERVER_ADMIN_LOGIN_NAME=${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
+ MYSQL_SERVER_ADMIN_PASSWORD=${MYSQL_SERVER_ADMIN_PASSWORD}
+```
+
+## Update extra apps
+
+```azcli
+az spring app update --name api-gateway \
+ --jvm-options="-Xms2048m -Xmx2048m -Dspring.profiles.active=mysql"
+az spring app update --name admin-server \
+ --jvm-options="-Xms2048m -Xmx2048m -Dspring.profiles.active=mysql"
+az spring app update --name customers-service \
+ --jvm-options="-Xms2048m -Xmx2048m -Dspring.profiles.active=mysql" \
+ --env \
+ MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_FULL_NAME} \
+ MYSQL_DATABASE_NAME=${MYSQL_DATABASE_NAME} \
+ MYSQL_SERVER_ADMIN_LOGIN_NAME=${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
+ MYSQL_SERVER_ADMIN_PASSWORD=${MYSQL_SERVER_ADMIN_PASSWORD}
+az spring app update --name vets-service \
+ --jvm-options="-Xms2048m -Xmx2048m -Dspring.profiles.active=mysql" \
+ --env \
+ MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_FULL_NAME} \
+ MYSQL_DATABASE_NAME=${MYSQL_DATABASE_NAME} \
+ MYSQL_SERVER_ADMIN_LOGIN_NAME=${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
+ MYSQL_SERVER_ADMIN_PASSWORD=${MYSQL_SERVER_ADMIN_PASSWORD}
+az spring app update --name visits-service \
+ --jvm-options="-Xms2048m -Xmx2048m -Dspring.profiles.active=mysql" \
+ --env \
+ MYSQL_SERVER_FULL_NAME=${MYSQL_SERVER_FULL_NAME} \
+ MYSQL_DATABASE_NAME=${MYSQL_DATABASE_NAME} \
+ MYSQL_SERVER_ADMIN_LOGIN_NAME=${MYSQL_SERVER_ADMIN_LOGIN_NAME} \
+ MYSQL_SERVER_ADMIN_PASSWORD=${MYSQL_SERVER_ADMIN_PASSWORD}
+```
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+* [Bind an Azure Database for MySQL instance to your application in Azure Spring Apps](how-to-bind-mysql.md)
+* [Use a managed identity to connect Azure SQL Database to an app in Azure Spring Apps](./connect-managed-identity-to-azure-sql.md)
spring-apps Quickstart Key Vault Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-key-vault-enterprise.md
+
+ Title: "Quickstart - Load application secrets using Key Vault"
+
+description: Explains how to use Azure Key Vault to securely load secrets for apps running Azure Spring Apps Enterprise tier.
++++ Last updated : 05/31/2022+++
+# Quickstart: Load application secrets using Key Vault
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how to securely load secrets using Azure Key Vault for apps running Azure Spring Apps Enterprise tier.
+
+Every application has properties that connect it to its environment and supporting services. These services include resources like databases, logging and monitoring tools, messaging platforms, and so on. Each resource requires a way to locate and access it, often in the form of URLs and credentials. This information is often protected by law, and must be kept secret in order to protect customer data. In Azure Spring Apps, you can configure applications to directly load these secrets into memory from Key Vault by using managed identities and Azure role-based access control.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+- Complete the steps in the following quickstarts:
+ - [Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+ - [Integrate with Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+
+## Provision Key Vault and store secrets
+
+The following instructions describe how to create a Key Vault and securely save application secrets.
+
+1. Use the following command to create a Key Vault to store application secrets:
+
+ ```azurecli
+ az keyvault create \
+ --resource-group <resource-group-name> \
+ --name <key-vault-name>
+ ```
+
+1. Use the following command to store the full database server name in Key Vault:
+
+ ```azurecli
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "POSTGRES-SERVER-NAME" \
+ --value "<postgres-server-name>.postgres.database.azure.com"
+ ```
+
+1. Use the following command to store the database name in Key Vault for the Catalog Service application:
+
+ ```azurecli
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "CATALOG-DATABASE-NAME" \
+ --value "acmefit_catalog"
+ ```
+
+1. Use the following commands to store the database login credentials in Key Vault:
+
+ ```azurecli
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "POSTGRES-LOGIN-NAME" \
+ --value "<postgres-username>"
+
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "POSTGRES-LOGIN-PASSWORD" \
+ --value "<postgres-password>"
+ ```
+
+1. Use the following command to store the database connection string in Key Vault for the Order Service application:
+
+ ```azurecli
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "ConnectionStrings--OrderContext" \
+ --value "Server=<postgres-server-name>;Database=acmefit_order;Port=5432;Ssl Mode=Require;User Id=<postgres-user>;Password=<postgres-password>;"
+ ```
+
+1. Use the following commands to retrieve Redis connection properties and store them in Key Vault:
+
+ ```azurecli
+ REDIS_HOST=$(az redis show \
+ --resource-group <resource-group-name> \
+ --name <redis-cache-name> | jq -r '.hostName')
+
+ REDIS_PORT=$(az redis show \
+ --resource-group <resource-group-name> \
+ --name <redis-cache-name> | jq -r '.sslPort')
+
+ REDIS_PRIMARY_KEY=$(az redis list-keys \
+ --resource-group <resource-group-name> \
+ --name <redis-cache-name> | jq -r '.primaryKey')
+
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "CART-REDIS-CONNECTION-STRING" \
+ --value "rediss://:${REDIS_PRIMARY_KEY}@${REDIS_HOST}:${REDIS_PORT}/0"
+ ```
+
+1. If you've configured [single sign-on](quickstart-configure-single-sign-on-enterprise.md), use the following command to store the JSON Web Key (JWK) URI in Key Vault:
+
+ ```azurecli
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "SSO-PROVIDER-JWK-URI" \
+ --value <jwk-uri>
+ ```
+
+## Grant applications access to secrets in Key Vault
+
+The following instructions describe how to grant access to Key Vault secrets to applications deployed to Azure Spring Apps Enterprise tier.
+
+1. Use the following command to enable a System Assigned Identity for the Cart Service application:
+
+ ```azurecli
+ az spring app identity assign \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following commands to set an access policy of `get list` on Key Vault for the Cart Service application:
+
+ ```azurecli
+ CART_SERVICE_APP_IDENTITY=$(az spring app show \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.identity.principalId')
+
+ az keyvault set-policy \
+ --name <key-vault-name> \
+ --object-id ${CART_SERVICE_APP_IDENTITY} \
+ --secret-permissions get list
+ ```
+
+1. Use the following command to enable a System Assigned Identity for the Order Service application:
+
+ ```azurecli
+ az spring app identity assign \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following commands to set an access policy of `get list` on Key Vault for the Order Service application:
+
+ ```azurecli
+ ORDER_SERVICE_APP_IDENTITY=$(az spring app show \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.identity.principalId')
+
+ az keyvault set-policy \
+ --name <key-vault-name> \
+ --object-id ${ORDER_SERVICE_APP_IDENTITY} \
+ --secret-permissions get list
+ ```
+
+1. Use the following command to enable a System Assigned Identity for the Catalog Service application:
+
+ ```azurecli
+ az spring app identity assign \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following commands to set an access policy of `get list` on Key Vault for the Catalog Service application:
+
+ ```azurecli
+ CATALOG_SERVICE_APP_IDENTITY=$(az spring app show \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.identity.principalId')
+
+ az keyvault set-policy \
+ --name <key-vault-name> \
+ --object-id ${CATALOG_SERVICE_APP_IDENTITY} \
+ --secret-permissions get list
+ ```
+
+1. If you've configured [single sign-on](quickstart-configure-single-sign-on-enterprise.md), use the following command to enable a System Assigned Identity for the Identity Service application:
+
+ ```azurecli
+ az spring app identity assign \
+ --resource-group <resource-group-name> \
+ --name identity-service \
+ --service <Azure-Spring-Apps-service-instance-name>
+ ```
+
+1. Use the following commands to set an access policy of `get list` on Key Vault for the Identity Service application:
+
+ ```azurecli
+ IDENTITY_SERVICE_APP_IDENTITY=$(az spring app show \
+ --resource-group <resource-group-name> \
+ --name identity-service \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.identity.principalId')
+
+ az keyvault set-policy \
+ --name <key-vault-name> \
+ --object-id ${IDENTITY_SERVICE_APP_IDENTITY} \
+ --secret-permissions get list
+ ```
+
+## Update applications to load Key Vault secrets
+
+After granting access to read secrets from Key Vault, use the following steps to update the applications to use the new secret values in their configurations.
+
+1. Use the following command to retrieve the URI for Key Vault to be used in updating applications:
+
+ ```azurecli
+ KEYVAULT_URI=$(az keyvault show --name <key-vault-name> | jq -r '.properties.vaultUri')
+ ```
+
+1. Use the following command to retrieve the URL for Spring Cloud Gateway to be used in updating applications:
+
+ ```azurecli
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+ ```
+
+1. Use the following command to remove the Service Connector binding the Order Service application and the Azure Database for PostgreSQL Flexible Server:
+
+ ```azurecli
+ az spring connection delete \
+ --resource-group <resource-group-name> \
+ --app order-service \
+ --connection order_service_db \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --deployment default \
+ --yes
+ ```
+
+1. Use the following command to update the Order Service environment with the URI to access Key Vault:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name order-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --env "ConnectionStrings__KeyVaultUri=${KEYVAULT_URI}" "AcmeServiceSettings__AuthUrl=https://${GATEWAY_URL}" "DatabaseProvider=Postgres"
+ ```
+
+1. Use the following command to remove the Service Connector binding the Catalog Service application and the Azure Database for PostgreSQL Flexible Server:
+
+ ```azurecli
+ az spring connection delete \
+ --resource-group <resource-group-name> \
+ --app catalog-service \
+ --connection catalog_service_db \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --deployment default \
+ --yes
+ ```
+
+1. Use the following command to update the Catalog Service environment and configuration pattern to access Key Vault:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --config-file-pattern catalog/default,catalog/key-vault \
+ --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
+ ```
+
+1. Use the following command to remove the Service Connector binding the Cart Service application and the Azure Cache for Redis:
+
+ ```azurecli
+ az spring connection delete \
+ --resource-group <resource-group-name> \
+ --app cart-service \
+ --connection cart_service_cache \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --deployment default \
+ --yes
+ ```
+
+1. Use the following command to update the Cart Service environment to access Key Vault:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name cart-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --env "CART_PORT=8080" "KEYVAULT_URI=${KEYVAULT_URI}" "AUTH_URL=https://${GATEWAY_URL}"
+ ```
+
+1. Use the following command to update the Identity Service environment and configuration pattern to access Key Vault:
+
+ ```azurecli
+ az spring app update \
+ --resource-group <resource-group-name> \
+ --name identity-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --config-file-pattern identity/default,identity /key-vault \
+ --env "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_ENDPOINT=${KEYVAULT_URI}" "SPRING_CLOUD_AZURE_KEYVAULT_SECRET_PROPERTY_SOURCES_0_NAME='acme-fitness-store-vault'" "SPRING_PROFILES_ACTIVE=default,key-vault"
+ ```
+
+1. Use the following commands to retrieve the URL for Spring Cloud Gateway:
+
+ ```azurecli
+ GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+ echo "https://${GATEWAY_URL}"
+ ```
+
+ You can open the output URL in a browser to explore the updated application.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Continue on to any of the following optional quickstarts:
+
+- [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+- [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+- [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+- [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
+- [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
spring-apps Quickstart Logs Metrics Tracing https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-logs-metrics-tracing.md
+
+ Title: "Quickstart - Monitoring Azure Spring Apps apps with logs, metrics, and tracing"
+description: Use log streaming, log analytics, metrics, and tracing to monitor PetClinic sample apps on Azure Spring Apps.
++++ Last updated : 10/12/2021+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Quickstart: Monitoring Azure Spring Apps apps with logs, metrics, and tracing
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+With the built-in monitoring capability in Azure Spring Apps, you can debug and monitor complex issues. Azure Spring Apps integrates Steeltoe [distributed tracing](https://docs.steeltoe.io/api/v3/tracing/) with Azure's [Application Insights](../azure-monitor/app/app-insights-overview.md). This integration provides powerful logs, metrics, and distributed tracing capability from the Azure portal.
+
+The following procedures explain how to use Log Streaming, Log Analytics, Metrics, and Distributed Tracing with the sample app that you deployed in the preceding quickstarts.
+
+## Prerequisites
+
+* Complete the previous quickstarts in this series:
+
+ * [Provision Azure Spring Apps service](./quickstart-provision-service-instance.md).
+ * [Set up Azure Spring Apps configuration server](./quickstart-setup-config-server.md).
+ * [Build and deploy apps](./quickstart-deploy-apps.md).
+ * [Set up Log Analytics workspace](./quickstart-setup-log-analytics.md).
+
+## Logs
+
+There are two ways to see logs on Azure Spring Apps: **Log Streaming** of real-time logs per app instance or **Log Analytics** for aggregated logs with advanced query capability.
+
+### Log streaming
+
+You can use log streaming in the Azure CLI with the following command.
+
+```azurecli
+az spring app logs -n solar-system-weather -f
+```
+
+You will see output similar to the following example:
+
+```output
+=> ConnectionId:0HM2HOMHT82UK => RequestPath:/weatherforecast RequestId:0HM2HOMHT82UK:00000003, SpanId:|e8c1682e-46518cc0202c5fd9., TraceId:e8c1682e-46518cc0202c5fd9, ParentId: => Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.Controllers.WeatherForecastController.Get (Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather)
+Executing action method Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.Controllers.WeatherForecastController.Get (Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather) - Validation state: Valid
+←[40m←[32minfo←[39m←[22m←[49m: Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.Controllers.WeatherForecastController[0]
+
+=> ConnectionId:0HM2HOMHT82UK => RequestPath:/weatherforecast RequestId:0HM2HOMHT82UK:00000003, SpanId:|e8c1682e-46518cc0202c5fd9., TraceId:e8c1682e-46518cc0202c5fd9, ParentId: => Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.Controllers.WeatherForecastController.Get (Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather)
+Retrieved weather data from 4 planets
+←[40m←[32minfo←[39m←[22m←[49m: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
+
+=> ConnectionId:0HM2HOMHT82UK => RequestPath:/weatherforecast RequestId:0HM2HOMHT82UK:00000003, SpanId:|e8c1682e-46518cc0202c5fd9., TraceId:e8c1682e-46518cc0202c5fd9, ParentId: => Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather.Controllers.WeatherForecastController.Get (Microsoft.Azure.SpringCloud.Sample.SolarSystemWeather)
+Executing ObjectResult, writing value of type 'System.Collections.Generic.KeyValuePair`2[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]][]'.
+←[40m←[32minfo←[39m←[22m←[49m: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
+```
+
+> [!TIP]
+> Use `az spring app logs -h` to explore more parameters and log stream functionality.
+
+### Log Analytics
+
+1. In the Azure portal, go to the **service | Overview** page and select **Logs** in the **Monitoring** section. Select **Run** on one of the sample queries for Azure Spring Apps.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/logs-entry.png" alt-text="Screenshot of the Logs opening page." lightbox="media/quickstart-logs-metrics-tracing/logs-entry.png":::
+
+1. Edit the query to remove the Where clauses that limit the display to warning and error logs.
+
+1. Then select `Run`, and you will see logs. See [Azure Log Analytics docs](../azure-monitor/logs/get-started-queries.md) for more guidance on writing queries.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/logs-query-steeltoe.png" alt-text="Screenshot of a Logs Analytics query." lightbox="media/quickstart-logs-metrics-tracing/logs-query-steeltoe.png":::
+
+1. To learn more about the query language that's used in Log Analytics, see [Azure Monitor log queries](/azure/data-explorer/kusto/query/). To query all your Log Analytics logs from a centralized client, check out [Azure Data Explorer](/azure/data-explorer/query-monitor-data).
+
+## Metrics
+
+1. In the Azure portal, go to the **service | Overview** page and select **Metrics** in the **Monitoring** section. Add your first metric by selecting one of the .NET metrics under **Performance (.NET)** or **Request (.NET)** in the **Metric** drop-down, and `Avg` for **Aggregation** to see the timeline for that metric.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/metrics-basic-cpu-steeltoe.png" alt-text="Screenshot of the Metrics page." lightbox="media/quickstart-logs-metrics-tracing/metrics-basic-cpu-steeltoe.png":::
+
+1. Select **Add filter** in the toolbar, select `App=solar-system-weather` to see CPU usage only for the **solar-system-weather** app.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/metrics-filter-steeltoe.png" alt-text="Screenshot of adding a filter." lightbox="media/quickstart-logs-metrics-tracing/metrics-filter-steeltoe.png":::
+
+1. Dismiss the filter created in the preceding step, select **Apply Splitting**, and select `App` for **Values** to see CPU usage by different apps.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/metrics-split-steeltoe.png" alt-text="Screenshot of applying splitting." lightbox="media/quickstart-logs-metrics-tracing/metrics-split-steeltoe.png":::
+
+## Distributed tracing
+
+1. In the Azure portal, go to the **service | Overview** page and select **Distributed tracing** in the **Monitoring** section. Then select the **View application map** tab on the right.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/tracing-entry.png" alt-text="Screenshot of the Distributed tracing page." lightbox="media/quickstart-logs-metrics-tracing/tracing-entry.png":::
+
+1. You can now see the status of calls between apps.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/tracing-overview-steeltoe.png" alt-text="Screenshot of the Application map page." lightbox="media/quickstart-logs-metrics-tracing/tracing-overview-steeltoe.png":::
+
+1. Select the link between **solar-system-weather** and **planet-weather-provider** to see more details like slowest calls by HTTP methods.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/tracing-call-steeltoe.png" alt-text="Screenshot of Application map details." lightbox="media/quickstart-logs-metrics-tracing/tracing-call-steeltoe.png":::
+
+1. Finally, select **Investigate Performance** to explore more powerful built-in performance analysis.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/tracing-performance-steeltoe.png" alt-text="Screenshot of Performance page." lightbox="media/quickstart-logs-metrics-tracing/tracing-performance-steeltoe.png":::
+
+With the built-in monitoring capability in Azure Spring Apps, you can debug and monitor complex issues. Azure Spring Apps integrates [Spring Cloud Sleuth](https://spring.io/projects/spring-cloud-sleuth) with Azure's [Application Insights](../azure-monitor/app/app-insights-overview.md). This integration provides powerful logs, metrics, and distributed tracing capability from the Azure portal. The following procedures explain how to use Log Streaming, Log Analytics, Metrics, and Distributed tracing with deployed PetClinic apps.
+
+## Prerequisites
+
+Complete previous steps:
+
+* [Provision an instance of Azure Spring Apps](./quickstart-provision-service-instance.md)
+* [Set up the config server](./quickstart-setup-config-server.md). For enterprise tier, please follow [set up Application Configuration Service](./how-to-enterprise-application-configuration-service.md).
+* [Build and deploy apps](./quickstart-deploy-apps.md).
+* [Set up Log Analytics workspace](./quickstart-setup-log-analytics.md).
+
+## Logs
+
+There are two ways to see logs on Azure Spring Apps: **Log Streaming** of real-time logs per app instance or **Log Analytics** for aggregated logs with advanced query capability.
+
+### Log streaming
+
+#### [CLI](#tab/Azure-CLI)
+
+You can use log streaming in the Azure CLI with the following command.
+
+```azurecli
+az spring app logs -s <service instance name> -g <resource group name> -n gateway -f
+```
+
+You will see logs like this:
++
+> [!TIP]
+> Use `az spring app logs -h` to explore more parameters and log stream functionalities.
+
+To learn more about the query language that's used in Log Analytics, see [Azure Monitor log queries](/azure/data-explorer/kusto/query/). To query all your Log Analytics logs from a centralized client, check out [Azure Data Explorer](/azure/data-explorer/query-monitor-data).
+
+#### [IntelliJ](#tab/IntelliJ)
+
+To get the logs using Azure Toolkit for IntelliJ:
+
+1. Select **Azure Explorer**, then **Spring Cloud**.
+
+1. Right-click the running app.
+
+1. Select **Streaming Logs** from the drop-down list.
+
+ ![Select streaming logs](media/quickstart-logs-metrics-tracing/streaming-logs.png)
+
+1. Select **Instance**.
+
+ ![Select instance](media/quickstart-logs-metrics-tracing/select-instance.png)
+
+1. The streaming log will be visible in the output window.
+
+ ![Streaming log output](media/quickstart-logs-metrics-tracing/streaming-log-output.png)
+
+ To learn more about the query language that's used in Log Analytics, see [Azure Monitor log queries](/azure/data-explorer/kusto/query/). To query all your Log Analytics logs from a centralized client, check out [Azure Data Explorer](/azure/data-explorer/query-monitor-data).
+++
+### Log Analytics
+
+1. Go to the **service | Overview** page and select **Logs** in the **Monitoring** section. Select **Run** on one of the sample queries for Azure Spring Apps.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/logs-entry.png" alt-text="Screenshot of the Logs opening page." lightbox="media/quickstart-logs-metrics-tracing/logs-entry.png":::
+
+1. Then you will see filtered logs. See [Azure Log Analytics docs](../azure-monitor/logs/get-started-queries.md) for more guidance on writing queries.
+
+ :::image type="content" source="media/quickstart-logs-metrics-tracing/logs-query.png" alt-text="Screenshot of filtered logs." lightbox="media/quickstart-logs-metrics-tracing/logs-query.png":::
+
+## Metrics
+
+Navigate to the `Application insights` blade. Then, navigate to the `Metrics` blade - you can see metrics contributed by Spring Boot apps, Spring modules, and dependencies.
+
+The following chart shows `gateway-requests` (Spring Cloud Gateway), `hikaricp_connections`
+ (JDBC Connections) and `http_client_requests`.
++
+Spring Boot registers a lot number of core metrics: JVM, CPU, Tomcat, Logback...
+The Spring Boot auto-configuration enables the instrumentation of requests handled by Spring MVC.
+All those three REST controllers `OwnerResource`, `PetResource` and `VisitResource` have been instrumented by the `@Timed` Micrometer annotation at class level.
+
+* `customers-service` application has the following custom metrics enabled:
+ * @Timed: `petclinic.owner`
+ * @Timed: `petclinic.pet`
+* `visits-service` application has the following custom metrics enabled:
+ * @Timed: `petclinic.visit`
+
+You can see these custom metrics in the `Metrics` blade:
++
+You can use the Availability Test feature in Application Insights and monitor
+the availability of applications:
++
+Navigate to the `Live Metrics` blade to can see live metrics with low latencies (less than one second):
++
+## Tracing
+
+Open the Application Insights created by Azure Spring Apps and start monitoring Spring applications.
+
+Navigate to the `Application Map` blade:
++
+Navigate to the `Performance` blade:
++
+Navigate to the `Performance/Dependenices` blade - you can see the performance number for dependencies, particularly SQL calls:
++
+Select a SQL call to see the end-to-end transaction in context:
++
+Navigate to the `Failures/Exceptions` blade - you can see a collection of exceptions:
++
+Select an exception to see the end-to-end transaction and stacktrace in context:
+++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+In an earlier quickstart, you also set the default resource group name. If you don't intend to continue to the next quickstart, clear out that default by running the following CLI command:
+
+```azurecli
+az config set defaults.group=
+```
+
+## Next steps
+
+To explore more monitoring capabilities of Azure Spring Apps, see:
+
+> [!div class="nextstepaction"]
+> [Analyze logs and metrics with diagnostics settings](diagnostic-services.md)>
+> [Stream Azure Spring Apps app logs in real-time](./how-to-log-streaming.md)
spring-apps Quickstart Monitor End To End Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-monitor-end-to-end-enterprise.md
+
+ Title: "Quickstart - Monitor applications end-to-end"
+
+description: Explains how to monitor apps running Azure Spring Apps Enterprise tier by using Application Insights and Log Analytics.
++++ Last updated : 05/31/2022+++
+# Quickstart: Monitor application end-to-end
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how monitor apps running Azure Spring Apps Enterprise tier by using Application Insights and Log Analytics.
+
+> [!NOTE]
+> You can monitor your Spring workloads end-to-end by using any tool and platform of your choice, including App Insights, Log Analytics, New Relic, Dynatrace, AppDynamics, Elastic, or Splunk. For more information, see [Working with other monitoring tools](#working-with-other-monitoring-tools) later in this article.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+- Resources to monitor, such as the ones created in the following quickstarts:
+ - [Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md)
+ - [Integrate with Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+ - [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+
+## Update applications
+
+You must manually provide the Application Insights connection string to the Order Service (ASP.NET core) and Cart Service (python) applications. The following instructions describe how to provide this connection string and increase the sampling rate to Application Insights.
+
+> [!NOTE]
+> Currently only the buildpacks for Java and NodeJS applications support Application Insights instrumentation.
+
+1. Use the following commands to retrieve the Application Insights connection string and set it in Key Vault:
+
+ ```azurecli
+ INSTRUMENTATION_KEY=$(az monitor app-insights component show \
+ --resource-group=<resource-group-name>
+ --app <app-insights-name> | jq -r '.connectionString')
+
+ az keyvault secret set \
+ --vault-name <key-vault-name> \
+ --name "ApplicationInsights--ConnectionString" \
+ --value ${INSTRUMENTATION_KEY}
+ ```
+
+ > [!NOTE]
+ > By default, the Application Insights service instance has the same name as the Azure Spring Apps service instance.
+
+1. Use the following command to update the sampling rate for the Application Insights binding to increase the amount of data available:
+
+ ```azurecli
+ az spring build-service builder buildpack-binding set \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --builder-name default \
+ --name default \
+ --type ApplicationInsights \
+ --properties sampling-rate=100 connection_string=${INSTRUMENTATION_KEY}
+ ```
+
+1. Use the following commands to restart applications to reload configuration:
+
+ ```azurecli
+ az spring app restart \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --name cart-service
+
+ az spring app restart \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --name order-service
+
+ az spring app restart \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --name catalog-service
+
+ az spring app restart \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --name frontend
+
+ az spring app restart \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --name identity-service
+ ```
+
+ For the Java and NodeJS applications, restarting will allow the new sampling rate to take effect. For the non-Java applications, restarting will allow them to access the newly added Instrumentation Key from the Key Vault.
+
+## View logs
+
+There are two ways to see logs on Azure Spring Apps: log streaming of real-time logs per app instance or **Log Analytics** for aggregated logs with advanced query capability
+
+### Use log streaming
+
+Generate traffic in the application by moving through the application, viewing the catalog, and placing orders. Use the following commands to generate traffic continuously, until canceled:
+
+```azurecli
+GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+cd traffic-generator
+GATEWAY_URL=https://${GATEWAY_URL} ./gradlew gatlingRun-com.vmware.acme.simulation.GuestSimulation
+```
+
+Use the following command to get the latest 100 lines of application console logs from the Catalog Service application:
+
+```azurecli
+az spring app logs \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --lines 100
+```
+
+By adding the `--follow` option, you can get real-time log streaming from an app. Use the following command to try log streaming for the Catalog Service application:
+
+```azurecli
+az spring app logs \
+ --resource-group <resource-group-name> \
+ --name catalog-service \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --follow
+```
+
+> [!TIP]
+> You can use az spring app logs `--help` to explore more parameters and log stream functionalities.
+
+### Use Log Analytics
+
+Navigate to the Azure portal and open the Log Analytics instance that you created. You can find the Log Analytics instance in the same resource group where you created the Azure Spring Apps service instance.
+
+On the Log Analytics page, select the **Logs** pane and run any of the following sample queries for Azure Spring Apps.
+
+Type and run the following Kusto query to see application logs:
+
+```kusto
+AppPlatformLogsforSpring
+| where TimeGenerated > ago(24h)
+| limit 500
+| sort by TimeGenerated
+| project TimeGenerated, AppName, Log
+```
+
+This query produces results similar to the ones shown in the following screenshot:
++
+Type and run the following Kusto query to see `catalog-service` application logs:
+
+```kusto
+AppPlatformLogsforSpring
+| where AppName has "catalog-service"
+| limit 500
+| sort by TimeGenerated
+| project TimeGenerated, AppName, Log
+```
+
+This query produces results similar to the ones shown in the following screenshot:
++
+Type and run the following Kusto query to see errors and exceptions thrown by each app:
+
+```kusto
+AppPlatformLogsforSpring
+| where Log contains "error" or Log contains "exception"
+| extend FullAppName = strcat(ServiceName, "/", AppName)
+| summarize count_per_app = count() by FullAppName, ServiceName, AppName, _ResourceId
+| sort by count_per_app desc
+| render piechart
+```
+
+This query produces results similar to the ones shown in the following screenshot:
++
+Type and run the following Kusto query to see all in the inbound calls into Azure Spring Apps:
+
+```kusto
+AppPlatformIngressLogs
+| project TimeGenerated, RemoteAddr, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
+| sort by TimeGenerated
+```
+
+Type and run the following Kusto query to see all the logs from the managed Spring Cloud
+Config Gateway managed by Azure Spring Apps:
+
+```kusto
+AppPlatformSystemLogs
+| where LogType contains "SpringCloudGateway"
+| project TimeGenerated,Log
+```
+
+This query produces results similar to the ones shown in the following screenshot:
++
+Type and run the following Kusto query to see all the logs from the managed Spring Cloud
+Service Registry managed by Azure Spring Apps:
+
+```kusto
+AppPlatformSystemLogs
+| where LogType contains "ServiceRegistry"
+| project TimeGenerated, Log
+```
+
+This query produces results similar to the ones shown in the following screenshot:
++
+## Use tracing
+
+In the Azure portal, open the Application Insights instance created by Azure Spring Apps and start monitoring Spring Boot applications. You can find the Application Insights instance in the same resource group where you created an Azure Spring Apps service instance.
+
+Navigate to the **Application map** pane, which will be similar to the following screenshot:
++
+Navigate to the **Performance** pane, which will be similar to the following screenshot:
++
+Navigate to the **Performance/Dependencies** pane. Here you can see the performance number for dependencies, particularly SQL calls, similar to what's shown in the following screenshot:
++
+Navigate to the **Performance/Roles** pane. Here you can see the performance metrics for individual instances or roles, similar to what's shown in the following screenshot:
++
+Select a SQL call to see the end-to-end transaction in context, similar to what's shown in the following screenshot:
++
+Navigate to the **Failures/Exceptions** pane. Here you can see a collection of exceptions, similar to what's shown in the following screenshot:
++
+## View metrics
+
+Navigate to the **Metrics** pane. Here you can see metrics contributed by Spring Boot apps, Spring Cloud modules, and dependencies. The chart in the following screenshot shows **http_server_requests** and **Heap Memory Used**:
++
+Spring Boot registers a large number of core metrics: JVM, CPU, Tomcat, Logback, and so on.
+The Spring Boot auto-configuration enables the instrumentation of requests handled by Spring MVC.
+The REST controllers `ProductController` and `PaymentController` have been instrumented by the `@Timed` Micrometer annotation at the class level.
+
+The `acme-catalog` application has the following custom metric enabled: @Timed: `store.products`
+
+The `acem-payment` application has the following custom metric enabled: @Timed: `store.payment`
+
+You can see these custom metrics in the **Metrics** pane, as shown in the following screenshot.
++
+Navigate to the **Live Metrics** pane. Here you can see live metrics on screen with low latencies < 1 second, as shown in the following screenshot:
++
+## Working with other monitoring tools
+
+Azure Spring Apps enterprise tier also supports exporting metrics to other tools, including the following tools:
+
+- AppDynamics
+- ApacheSkyWalking
+- Dynatrace
+- ElasticAPM
+- NewRelic
+
+You can add more bindings to a builder in Tanzu Build Service by using the following command:
+
+```azurecli
+az spring build-service builder buildpack-binding create \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --builder-name <builder-name> \
+ --name <binding-name> \
+ --type <ApplicationInsights|AppDynamics|ApacheSkyWalking|Dynatrace|ElasticAPM|NewRelic> \
+ --properties <connection-properties>
+ --secrets <secret-properties>
+```
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Continue on to any of the following optional quickstarts:
+
+- [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+- [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+- [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+- [Set request rate limits](quickstart-set-request-rate-limits-enterprise.md)
+- [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
spring-apps Quickstart Provision Service Instance https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-provision-service-instance.md
+
+ Title: "Quickstart - Provision an Azure Spring Apps service"
+description: Describes creation of an Azure Spring Apps service instance for app deployment.
++++ Last updated : 7/28/2022+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Quickstart: Provision an Azure Spring Apps service instance
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
++
+In this quickstart, you use the Azure CLI to provision an instance of the Azure Spring Apps service.
+
+## Prerequisites
+
+- An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+- [.NET Core 3.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/3.1). The Azure Spring Apps service supports .NET Core 3.1 and later versions.
+- [Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+
+## Install Azure CLI extension
+
+Verify that your Azure CLI version is 2.0.67 or later:
+
+```azurecli
+az --version
+```
+
+Install the Azure Spring Apps extension for the Azure CLI using the following command:
+
+```azurecli
+az extension add --name spring
+```
+
+## Sign in to Azure
+
+1. Sign in to the Azure CLI.
+
+ ```azurecli
+ az login
+ ```
+
+1. If you have more than one subscription, choose the one you want to use for this quickstart.
+
+ ```azurecli
+ az account list -o table
+ ```
+
+ ```azurecli
+ az account set --subscription <Name or ID of a subscription from the last step>
+ ```
+
+## Provision an instance of Azure Spring Apps
+
+1. Create a [resource group](../azure-resource-manager/management/overview.md) to contain your Azure Spring Apps service. The resource group name can include alphanumeric, underscore, parentheses, hyphen, period (except at end), and Unicode characters.
+
+ ```azurecli
+ az group create --location eastus --name <resource group name>
+ ```
+
+1. Provision an instance of Azure Spring Apps service. The service instance name must be unique, between 4 and 32 characters long, and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+
+ ```azurecli
+ az spring create -n <service instance name> -g <resource group name>
+ ```
+
+ This command might take several minutes to complete.
+
+1. Set your default resource group name and service instance name so you don't have to repeatedly specify these values in subsequent commands.
+
+ ```azurecli
+ az config set defaults.group=<resource group name>
+ ```
+
+ ```azurecli
+ az config set defaults.spring-cloud=<service instance name>
+ ```
+++
+You can provision an instance of the Azure Spring Apps service using the Azure portal or the Azure CLI. Both methods are explained in the following procedures.
+
+## Prerequisites
+
+- [JDK 8 or JDK 11](/azure/developer/java/fundamentals/java-jdk-install)
+- An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+- Optionally, [Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). Install the Azure Spring Apps extension with the following command: `az extension add --name spring`
+- Optionally, [the Azure Toolkit for IntelliJ](https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij/).
+
+## Provision an instance of Azure Spring Apps
+
+#### [Portal](#tab/Azure-portal)
+
+The following procedure creates an instance of Azure Spring Apps using the Azure portal.
+
+1. In a new tab, open the [Azure portal](https://portal.azure.com/).
+
+1. From the top search box, search for **Azure Spring Apps**.
+
+1. Select **Azure Spring Apps** from the results.
+
+ :::image type="content" source="media/quickstart-provision-service-instance/spring-apps-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps service in search results." lightbox="media/quickstart-provision-service-instance/spring-apps-start.png":::
+
+1. On the Azure Spring Apps page, select **Create**.
+
+ :::image type="content" source="media/quickstart-provision-service-instance/spring-apps-create.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps resource with Create button highlighted.":::
+
+1. Fill out the form on the Azure Spring Apps **Create** page. Consider the following guidelines:
+
+ - **Subscription**: Select the subscription you want to be billed for this resource.
+ - **Resource group**: Creating new resource groups for new resources is a best practice. You will use this value in later steps as **\<resource group name\>**.
+ - **Service Details/Name**: Specify the **\<service instance name\>**. The name must be between 4 and 32 characters long and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+ - **Location**: Select the location for your service instance.
+ - Select **Standard** for the **Pricing tier** option.
+
+ :::image type="content" source="media/quickstart-provision-service-instance/portal-start.png" alt-text="Screenshot of Azure portal showing the Azure Spring Apps Create page." lightbox="media/quickstart-provision-service-instance/portal-start.png":::
+
+1. Select **Review and create**.
+
+> [!div class="nextstepaction"]
+> [I ran into an issue](https://www.research.net/r/javae2e?tutorial=asc-cli-quickstart&step=public-endpoint)
+
+#### [CLI](#tab/Azure-CLI)
+
+The following procedure uses the Azure CLI extension to provision an instance of Azure Spring Apps.
+
+1. Update the Azure CLI with the Azure Spring Apps extension.
+
+ ```azurecli
+ az extension update --name spring
+ ```
+
+1. Sign in to the Azure CLI and choose your active subscription.
+
+ ```azurecli
+ az login
+ az account list -o table
+ az account set --subscription <Name or ID of subscription, skip if you only have 1 subscription>
+ ```
+
+1. Prepare a name for your Azure Spring Apps service. The name must be between 4 and 32 characters long and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+
+1. Create a resource group to contain your Azure Spring Apps service. Create in instance of the Azure Spring Apps service.
+
+ ```azurecli
+ az group create --name <resource group name>
+ az spring create -n <service instance name> -g <resource group name>
+ ```
+
+ Learn more about [Azure Resource Groups](../azure-resource-manager/management/overview.md).
+
+1. Set your default resource group name and Spring Cloud service name using the following command:
+
+ ```azurecli
+ az config set defaults.group=<resource group name> defaults.spring-cloud=<service name>
+ ```
+++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Quickstart: Set up Azure Spring Apps Config Server](./quickstart-setup-config-server.md)
spring-apps Quickstart Sample App Acme Fitness Store Introduction https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-sample-app-acme-fitness-store-introduction.md
+
+ Title: Introduction to the Fitness Store sample app
+
+description: Describes the sample app used in this series of quickstarts for deployment to Azure Spring Apps Enterprise tier.
++++ Last updated : 05/31/2022+++
+# Introduction to the Fitness Store sample app
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart describes the [fitness store](https://github.com/Azure-Samples/acme-fitness-store) sample application, which will show you how to deploy polyglot applications to Azure Spring Apps Enterprise tier. You'll see how polyglot applications are built and deployed using Azure Spring Apps Enterprise tier capabilities. These capabilities include Tanzu Build Service, Service Discovery, externalized configuration with Application Configuration Service, application routing with Spring Cloud Gateway, logs, metrics, and distributed tracing.
+
+The following diagram shows a common application architecture:
++
+This architecture shows an application composed of smaller applications with a gateway, multiple databases, security services, monitoring, and automation.
+
+This quickstart applies this architecture to a Fitness Store application. This application is composed of the following services split up by domain:
+
+- Three Java Spring Boot applications:
+ - **Catalog Service** contains an API for fetching available products.
+ - **Payment Service** validates and processes payments for users' orders.
+ - **Identity Service** provides reference to the authenticated user.
+
+- One Python application:
+ - **Cart Service** manages users' items that have been selected for purchase.
+
+- One ASP.NET Core application:
+ - **Order Service** places orders to buy products that are in the users' carts.
+
+- One NodeJS and static HTML application:
+ - **Frontend** is the shopping application that depends on the other services.
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Quickstart: Build and deploy apps to Azure Spring Apps Enterprise tier](quickstart-deploy-apps-enterprise.md)
spring-apps Quickstart Sample App Introduction https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-sample-app-introduction.md
+
+ Title: "Quickstart - Introduction to the sample app - Azure Spring Apps"
+description: Describes the sample app used in this series of quickstarts for deployment to Azure Spring Apps.
++++ Last updated : 10/12/2021+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Introduction to the sample app
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
++
+This series of quickstarts uses a sample app composed of two Spring apps to show how to deploy a .NET Core Steeltoe app to the Azure Spring Apps service. You'll use Azure Spring Apps capabilities such as service discovery, config server, logs, metrics, and distributed tracing.
+
+## Functional services
+
+The sample app is composed of two Spring apps:
+
+* The `planet-weather-provider` service returns weather text in response to an HTTP request that specifies the planet name. For example, it may return "very warm" for planet Mercury. It gets the weather data from the Config server. The Config server gets the weather data from a YAML file in a Git repository, for example:
+
+ ```yaml
+ MercuryWeather: very warm
+ VenusWeather: quite unpleasant
+ MarsWeather: very cool
+ SaturnWeather: a little bit sandy
+ ```
+
+* The `solar-system-weather` service returns data for four planets in response to an HTTP request. It gets the data by making four HTTP requests to `planet-weather-provider`. It uses the Eureka server discovery service to call `planet-weather-provider`. It returns JSON, for example:
+
+ ```json
+ [{
+ "Key": "Mercury",
+ "Value": "very warm"
+ }, {
+ "Key": "Venus",
+ "Value": "quite unpleasant"
+ }, {
+ "Key": "Mars",
+ "Value": "very cool"
+ }, {
+ "Key": "Saturn",
+ "Value": "a little bit sandy"
+ }]
+ ```
+
+The following diagram illustrates the sample app architecture:
++
+> [!NOTE]
+> When the application is hosted in Azure Spring Apps Enterprise tier, the managed Application Configuration Service for VMware Tanzu® assumes the role of Spring Cloud Config Server and the managed VMware Tanzu® Service Registry assumes the role of Eureka Service Discovery without any code changes to the application. For more information, see [Use Application Configuration Service for Tanzu](how-to-enterprise-application-configuration-service.md) and [Use Tanzu Service Registry](how-to-enterprise-service-registry.md).
+
+## Code repository
+
+The sample app is located in the [steeltoe-sample](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/steeltoe-sample) folder of the Azure-Samples/Azure-Spring-Cloud-Samples repository on GitHub.
+
+The instructions in the following quickstarts refer to the source code as needed.
+++
+In this quickstart, we use the well-known sample app [PetClinic](https://github.com/spring-petclinic/spring-petclinic-microservices) that will show you how to deploy apps to the Azure Spring Apps service. The **Pet Clinic** sample demonstrates the microservice architecture pattern and highlights the services breakdown. You will see how services are deployed to Azure with Azure Spring Apps capabilities, including service discovery, config server, logs, metrics, distributed tracing, and developer-friendly tooling support.
+
+To follow the Azure Spring Apps deployment examples, you only need the location of the source code, which is provided as needed.
+
+The following diagram shows the architecture of the PetClinic application.
+
+![Architecture of PetClinic](media/build-and-deploy/microservices-architecture-diagram.jpg)
+
+> [!NOTE]
+> When the application is hosted in Azure Spring Apps Enterprise tier, the managed Application Configuration Service for VMware Tanzu® assumes the role of Spring Cloud Config Server and the managed VMware Tanzu® Service Registry assumes the role of Eureka Service Discovery without any code changes to the application. For more information, see the [Infrastructure services hosted by Azure Spring Apps](#infrastructure-services-hosted-by-azure-spring-apps) section later in this article.
+
+## Functional services to be deployed
+
+PetClinic is decomposed into 4 core Spring apps. All of them are independently deployable applications organized by business domains.
+
+* **Customers service**: Contains general user input logic and validation including pets and owners information (Name, Address, City, Telephone).
+* **Visits service**: Stores and shows visits information for each pets' comments.
+* **Vets service**: Stores and shows Veterinarians' information, including names and specialties.
+* **API Gateway**: The API Gateway is a single entry point into the system, used to handle requests and route them to an appropriate service or to invoke multiple services, and aggregate the results. The three core services expose an external API to client. In real-world systems, the number of functions can grow very quickly with system complexity. Hundreds of services might be involved in rendering one complex webpage.
+
+## Infrastructure services hosted by Azure Spring Apps
+
+There are several common patterns in distributed systems that support core services. Azure Spring Apps provides tools that enhance Spring Boot applications to implement the following patterns:
+
+### [Basic/Standard tier](#tab/basic-standard-tier)
+
+* **Config service**: Azure Spring Apps Config is a horizontally scalable centralized configuration service for distributed systems. It uses a pluggable repository that currently supports local storage, Git, and Subversion.
+* **Service discovery**: It allows automatic detection of network locations for service instances, which could have dynamically assigned addresses because of autoscaling, failures, and upgrades.
+
+### [Enterprise tier](#tab/enterprise-tier)
+
+* **Application Configuration Service for Tanzu**: Application Configuration Service for Tanzu is one of the commercial VMware Tanzu components. It enables the management of Kubernetes-native ConfigMap resources that are populated from properties defined in one or more Git repositories.
+* **Tanzu Service Registry**: Tanzu Service Registry is one of the commercial VMware Tanzu components. It provides your apps with an implementation of the Service Discovery pattern, one of the key tenets of a Spring-based architecture. Your apps can use the Service Registry to dynamically discover and call registered services.
+++
+## Database configuration
+
+In its default configuration, **Pet Clinic** uses an in-memory database (HSQLDB) which is populated at startup with data. A similar setup is provided for MySQL if a persistent database configuration is needed. A dependency for Connector/J, the MySQL JDBC driver, is already included in the pom.xml files.
+
+## Sample usage of PetClinic
+
+For full implementation details, see our fork of [PetClinic](https://github.com/Azure-Samples/spring-petclinic-microservices). The samples reference the source code as needed.
++
+## Next steps
+
+### [Basic/Standard tier](#tab/basic-standard-tier)
+
+> [!div class="nextstepaction"]
+> [Quickstart: Provision an Azure Spring Apps service instance](./quickstart-provision-service-instance.md)
+
+### [Enterprise tier](#tab/enterprise-tier)
+
+> [!div class="nextstepaction"]
+> [Quickstart: Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md)
++
spring-apps Quickstart Set Request Rate Limits Enterprise https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-set-request-rate-limits-enterprise.md
+
+ Title: "Quickstart - Set request rate limits"
+
+description: Explains how to set request rate limits by using Spring Cloud Gateway on Azure Spring Apps Enterprise tier.
++++ Last updated : 05/31/2022+++
+# Quickstart: Set request rate limits
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ❌ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart shows you how to set request rate limits by using Spring Cloud Gateway on Azure Spring Apps Enterprise tier.
+
+Rate limiting enables you to avoid problems that arise with spikes in traffic. When you set request rate limits, your application can reject excessive requests. This configuration helps you minimize throttling errors and more accurately predict throughput.
+
+## Prerequisites
+
+- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+- A license for Azure Spring Apps Enterprise tier. For more information, see [View Azure Spring Apps Enterprise tier Offer in Azure Marketplace](how-to-enterprise-marketplace-offer.md).
+- [The Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli).
+- [Git](https://git-scm.com/).
+- [jq](https://stedolan.github.io/jq/download/)
+- [!INCLUDE [install-enterprise-extension](includes/install-enterprise-extension.md)]
+- Complete the steps in [Build and deploy apps to Azure Spring Apps using the Enterprise tier](quickstart-deploy-apps-enterprise.md).
+
+## Set request rate limits
+
+Spring Cloud Gateway includes route filters from the Open Source version and several more route filters. One of these filters is the [RateLimit: Limiting user requests filter](https://docs.vmware.com/en/VMware-Spring-Cloud-Gateway-for-Kubernetes/1.1/scg-k8s/GUID-route-filters.html#ratelimit-limiting-user-requests-filter). The RateLimit filter limits the number of requests allowed per route during a time window.
+
+When defining a route, you can add the RateLimit filter by including it in the list of filters for the route. The filter accepts four options:
+
+- The number of requests accepted during the window.
+- The duration of the window. This value is in milliseconds by default, but you can specify a suffix of *s*, *m*, or *h* to indicate that the value is in seconds, minutes, or hours.
+- (Optional) A user partition key. You can also apply rate limiting per user. That is, different users can have their own throughput allowed based on an identifier found in the request. Indicate whether the key is in a JWT claim or HTTP header with `claim` or `header` syntax.
+- (Optional) You can rate limit by IP addresses, but not in combination with rate limiting per user.
+
+The following example would limit all users to two requests every five seconds to the `/products` route:
+
+```json
+{
+ "predicates": [
+ "Path=/products",
+ "Method=GET"
+ ],
+ "filters": [
+ "StripPrefix=0",
+ "RateLimit=2,5s"
+ ]
+}
+```
+
+If you want to expose a route for different sets of users, each one identified by its own `client_id` HTTP header, use the following route definition:
+
+```json
+{
+ "predicates": [
+ "Path=/products",
+ "Method=GET"
+ ],
+ "filters": [
+ "StripPrefix=0",
+ "RateLimit=2,5s,{header:client_id}"
+ ]
+}
+```
+
+When the limit is exceeded, responses will fail with `429 Too Many Requests` status.
+
+Use the following command to apply the `RateLimit` filter to the `/products` route:
+
+```azurecli
+az spring gateway route-config update \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> \
+ --name catalog-routes \
+ --app-name catalog-service \
+ --routes-file azure/routes/catalog-service_rate-limit.json
+```
+
+Use the following commands to retrieve the URL for the `/products` route in Spring Cloud Gateway:
+
+```azurecli
+GATEWAY_URL=$(az spring gateway show \
+ --resource-group <resource-group-name> \
+ --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')
+
+echo "https://${GATEWAY_URL}/products"
+```
+
+Make several requests to the URL for `/products` within a five-second period to see requests fail with a status `429 Too Many Requests`.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+Continue on to any of the following optional quickstarts:
+
+- [Configure single sign-on](quickstart-configure-single-sign-on-enterprise.md)
+- [Integrate Azure Database for PostgreSQL and Azure Cache for Redis](quickstart-integrate-azure-database-and-redis-enterprise.md)
+- [Load application secrets using Key Vault](quickstart-key-vault-enterprise.md)
+- [Monitor applications end-to-end](quickstart-monitor-end-to-end-enterprise.md)
+- [Automate deployments](quickstart-automate-deployments-github-actions-enterprise.md)
spring-apps Quickstart Setup Config Server https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-setup-config-server.md
+
+ Title: "Quickstart - Set up Azure Spring Apps Config Server"
+description: Describes the setup of Azure Spring Apps Config Server for app deployment.
++++ Last updated : 7/19/2022+
+zone_pivot_groups: programming-languages-spring-apps
++
+# Quickstart: Set up Azure Spring Apps Config Server
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+Azure Spring Apps Config Server is a centralized configuration service for distributed systems. It uses a pluggable repository layer that currently supports local storage, Git, and Subversion. In this quickstart, you set up the Config Server to get data from a Git repository.
++
+## Prerequisites
+
+* Complete the previous quickstart in this series: [Provision Azure Spring Apps service](./quickstart-provision-service-instance.md).
+* Azure Spring Apps Config server is only applicable to basic or standard tier.
+
+## Azure Spring Apps Config Server procedures
+
+Set up your Config Server with the location of the git repository for the project by running the following command. Replace *\<service instance name>* with the name of the service you created earlier. The default value for service instance name that you set in the preceding quickstart doesn't work with this command.
+
+```azurecli
+az spring config-server git set -n <service instance name> --uri https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples --search-paths steeltoe-sample/config
+```
+
+This command tells Config Server to find the configuration data in the [steeltoe-sample/config](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/steeltoe-sample/config) folder of the sample app repository. Since the name of the app that will get the configuration data is `planet-weather-provider`, the file that will be used is [planet-weather-provider.yml](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/blob/master/steeltoe-sample/config/planet-weather-provider.yml).
+++
+## Prerequisites
+
+- [JDK 8 or JDK 11](/azure/developer/java/fundamentals/java-jdk-install)
+- An Azure subscription. If you don't have a subscription, create a [free account](https://azure.microsoft.com/free/?WT.mc_id=A261C142F) before you begin.
+- Optionally, [Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli). Install the Azure Spring Apps extension with the following command: `az extension add --name spring`
+- Optionally, [the Azure Toolkit for IntelliJ](https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij/).
+
+## Azure Spring Apps Config Server procedures
+
+#### [Portal](#tab/Azure-portal)
+
+The following procedure sets up the Config Server using the Azure portal to deploy the [PetClinic sample](https://github.com/azure-samples/spring-petclinic-microservices).
+
+1. Go to the service **Overview** page and select **Config Server**.
+
+1. In the **Default repository** section, set **URI** to `https://github.com/azure-samples/spring-petclinic-microservices-config`.
+
+1. Select **Validate**.
+
+ :::image type="content" source="media/quickstart-setup-config-server/portal-config.png" alt-text="Screenshot of Azure portal showing Config Server page." lightbox="media/quickstart-setup-config-server/portal-config.png":::
+
+1. When validation is complete, select **Apply** to save your changes.
+
+ :::image type="content" source="media/quickstart-setup-config-server/validate-complete.png" alt-text="Screenshot of Azure portal showing Config Server page with Apply button highlighted." lightbox="media/quickstart-setup-config-server/validate-complete.png":::
+
+Updating the configuration can take a few minutes. You should get a notification when the configuration is complete.
+
+#### [CLI](#tab/Azure-CLI)
+
+The following procedure uses the Azure CLI to set up Config Server to deploy the [Pet Clinic sample](https://github.com/azure-samples/spring-petclinic-microservices).
+
+Run the following command to set the Default repository.
+
+```azurecli
+az spring config-server git set -n <service instance name> --uri https://github.com/azure-samples/spring-petclinic-microservices-config
+```
++
+> [!TIP]
+> For information on using a private repository for Config Server, see [Configure a managed Spring Cloud Config Server in Azure Spring Apps](./how-to-config-server.md).
+
+## Troubleshooting of Azure Spring Apps Config Server
+
+The following procedure explains how to troubleshoot Config Server settings.
+
+1. In the Azure portal, go to the service **Overview** page and select **Logs**.
+
+1. In the **Queries** pane under **Show the application logs that contain the "error" or "exception" terms**,
+ select **Run**.
+
+ :::image type="content" source="media/quickstart-setup-config-server/setup-config-server-query.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps query." lightbox="media/quickstart-setup-config-server/setup-config-server-query.png":::
+
+ The following error in the logs indicates that the Spring Apps service can't locate properties from Config Server: `java.lang.illegalStateException`
+
+1. Go to the service **Overview** page.
+
+1. Select **Diagnose and solve problems**.
+
+1. Under **Availability and Performance**, select **Troubleshoot**.
+
+ :::image type="content" source="media/quickstart-setup-config-server/setup-config-server-diagnose.png" alt-text="Screenshot of Azure portal showing Diagnose and solve problems page." lightbox="media/quickstart-setup-config-server/setup-config-server-diagnose.png":::
+
+ Azure portal displays the **Availability and Performance** page, which provides various information about Config Server health status.
+
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When you no longer need it, delete the resource group, which deletes the resources in the resource group. To delete the resource group, enter the following commands in the Azure CLI:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Quickstart: Build and deploy apps to Azure Spring Apps](quickstart-deploy-apps.md)
spring-apps Quickstart Setup Log Analytics https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart-setup-log-analytics.md
+
+ Title: "Quickstart - Set up a Log Analytics workspace in Azure Spring Apps"
+description: This article describes the setup of a Log Analytics workspace for app deployment.
++++ Last updated : 12/09/2021+
+ms.devlang: azurecli
++
+# Quickstart: Set up a Log Analytics workspace
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ❌ Enterprise tier
+
+This quickstart explains how to set up a Log Analytics workspace in Azure Spring Apps for application development.
+
+Log Analytics is a tool in the Azure portal that's used to edit and run log queries with data in Azure Monitor Logs. You can write a query that returns a set of records and then use features of Log Analytics to sort, filter, and analyze those records. You can also write a more advanced query to do statistical analysis and visualize the results in a chart to identify particular trends. Whether you work with the results of your queries interactively or use them with other Azure Monitor features, Log Analytics is the tool that you use to write and test queries.
+
+You can set up Azure Monitor Logs for your application in Azure Spring Apps to collect logs and run log queries via Log Analytics.
+
+## Prerequisites
+
+Complete the previous quickstart in this series: [Provision an Azure Spring Apps service](./quickstart-provision-service-instance.md).
+
+#### [Portal](#tab/Azure-Portal)
+
+## Create a Log Analytics workspace
+
+To create a workspace, follow the steps in [Create a Log Analytics workspace in the Azure portal](../azure-monitor/logs/quick-create-workspace.md).
+
+## Set up Log Analytics for a new service
+
+In the wizard for creating an Azure Spring Apps service instance, you can configure the **Log Analytics workspace** field with an existing workspace or create one.
++
+## Set up Log Analytics for an existing service
+
+1. In the Azure portal, go to the **Diagnostic settings** section under **Monitoring**.
+
+ :::image type="content" source="media/quickstart-setup-log-analytics/diagnostic-settings-entry.png" alt-text="Screenshot that shows the location of diagnostic settings." lightbox="media/quickstart-setup-log-analytics/diagnostic-settings-entry.png":::
+
+1. If no settings exist, select **Add diagnostic setting**. You can also select **Edit setting** to update existing settings.
+
+1. Fill out the form on the **Diagnostic setting** page:
+
+ - **Diagnostic setting name**: Set a unique name for the configuration.
+ - **Logs** > **Categories**: Select **ApplicationConsole** and **SystemLogs**. For more information on log categories and contents, see [Create diagnostic settings to send Azure Monitor platform logs and metrics to different destinations](../azure-monitor/essentials/diagnostic-settings.md).
+ - **Destination details**: Select **Send to Log Analytics workspace** and specify the Log Analytics workspace that you created previously.
+
+ :::image type="content" source="media/quickstart-setup-log-analytics/diagnostic-settings-edit-form.png" alt-text="Screenshot that shows an example of set-up diagnostic settings." lightbox="media/quickstart-setup-log-analytics/diagnostic-settings-edit-form.png":::
+
+1. Select **Save**.
+
+#### [CLI](#tab/Azure-CLI)
+
+## Create a Log Analytics workspace
+
+Use the following commands to create a Log Analytics workspace and get the workspace ID:
+
+```azurecli
+az monitor log-analytics workspace create \
+ --workspace-name <new-workspace-name> \
+ --resource-group <your-resource-group> \
+ --location <your-service-region> \
+ --query id --output tsv
+```
+
+If you have an existing workspace, you can get the workspace ID by using the following commands:
+
+```azurecli
+az monitor log-analytics workspace show \
+ --resource-group <your-resource-group> \
+ --workspace-name <workspace-name> \
+ --query id --output tsv
+```
+
+## Set up Log Analytics for a new service
+
+Setting up for a new service isn't applicable when you're using the Azure CLI.
+
+## Set up Log Analytics for an existing service
+
+1. Get the instance ID for the Azure Spring Apps service:
+
+ ```azurecli
+ az spring show \
+ --name <spring-cloud-service-name> \
+ --resource-group <your-resource-group> \
+ --query id --output tsv
+ ```
+
+1. Configure the diagnostic settings. For more information on log categories and contents, see [Create diagnostic settings to send Azure Monitor platform logs and metrics to different destinations](../azure-monitor/essentials/diagnostic-settings.md).
+
+ ```azurecli
+ az monitor diagnostic-settings create \
+ --name "<new-name-for-settings>" \
+ --resource "<service-instance-id>" \
+ --workspace "<workspace-id>" \
+ --logs '[
+ {
+ "category": "ApplicationConsole",
+ "enabled": true,
+ "retentionPolicy": {
+ "enabled": false,
+ "days": 0
+ }
+ },
+ {
+ "category": "SystemLogs",
+ "enabled": true,
+ "retentionPolicy": {
+ "enabled": false,
+ "days": 0
+ }
+ }
+ ]'
+ ```
+++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+> [!div class="nextstepaction"]
+> [Quickstart: Monitoring Azure Spring Apps apps with logs, metrics, and tracing](./quickstart-logs-metrics-tracing.md)
spring-apps Quickstart https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quickstart.md
+
+ Title: "Quickstart - Deploy your first application to Azure Spring Apps"
+description: In this quickstart, we deploy an application to Azure Spring Apps.
+++ Last updated : 10/18/2021++
+zone_pivot_groups: programming-languages-spring-apps
++
+# Quickstart: Deploy your first application to Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This quickstart explains how to deploy a small application to run on Azure Spring Apps.
+
+>[!NOTE]
+> Steeltoe support for Azure Spring Apps is currently offered as a public preview. Public preview offerings allow customers to experiment with new features prior to their official release. Public preview features and services aren't meant for production use. For more information about support during previews, see the [FAQ](https://azure.microsoft.com/support/faq/) or file a [Support request](../azure-portal/supportability/how-to-create-azure-support-request.md).
+
+By following this quickstart, you'll learn how to:
+> [!div class="checklist"]
+> * Generate a basic Steeltoe .NET Core project
+> * Provision an Azure Spring Apps service instance
+> * Build and deploy the app with a public endpoint
+> * Stream logs in real time
+
+The application code used in this quickstart is a simple app built with a .NET Core Web API project template. When you've completed this example, the application will be accessible online and can be managed via the Azure portal and the Azure CLI.
+
+## Prerequisites
+
+* An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F).
+* [.NET Core 3.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/3.1). The Azure Spring Apps service supports .NET Core 3.1 and later versions.
+* [Azure CLI version 2.0.67 or later](/cli/azure/install-azure-cli).
+* [Git](https://git-scm.com/).
+
+## Install Azure CLI extension
+
+Verify that your Azure CLI version is 2.0.67 or later:
+
+```azurecli
+az --version
+```
+
+Install the Azure Spring Apps extension for the Azure CLI using the following command:
+
+```azurecli
+az extension add --name spring
+```
+
+## Sign in to Azure
+
+1. Sign in to the Azure CLI:
+
+ ```azurecli
+ az login
+ ```
+
+1. If you have more than one subscription, choose the one you want to use for this quickstart.
+
+ ```azurecli
+ az account list -o table
+ ```
+
+ ```azurecli
+ az account set --subscription <Name or ID of a subscription from the last step>
+ ```
+
+## Generate a Steeltoe .NET Core project
+
+In Visual Studio, create an ASP.NET Core Web application named as "hello-world" with API project template. Please notice there will be an auto-generated WeatherForecastController that will be our test endpoint later on.
+
+1. Create a folder for the project source code and generate the project.
+
+ ```console
+ mkdir source-code
+ ```
+
+ ```console
+ cd source-code
+ ```
+
+ ```dotnetcli
+ dotnet new webapi -n hello-world --framework netcoreapp3.1
+ ```
+
+1. Navigate into the project directory.
+
+ ```console
+ cd hello-world
+ ```
+
+1. Edit the *appSettings.json* file to add the following settings:
+
+ ```json
+ "spring": {
+ "application": {
+ "name": "hello-world"
+ }
+ },
+ "eureka": {
+ "client": {
+ "shouldFetchRegistry": true,
+ "shouldRegisterWithEureka": true
+ }
+ }
+ ```
+
+1. Also in *appsettings.json*, change the log level for the `Microsoft` category from `Warning` to `Information`. This change ensures that logs will be produced when you view streaming logs in a later step.
+
+ The *appsettings.json* file now looks similar to the following example:
+
+ ```json
+ {
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft": "Information",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ },
+ "AllowedHosts": "*",
+ "spring": {
+ "application": {
+ "name": "hello-world"
+ }
+ },
+ "eureka": {
+ "client": {
+ "shouldFetchRegistry": true,
+ "shouldRegisterWithEureka": true
+ }
+ }
+ }
+ ```
+
+1. Add dependencies and a `Zip` task to the *.csproj* file:
+
+ ```xml
+ <ItemGroup>
+ <PackageReference Include="Steeltoe.Discovery.ClientCore" Version="3.1.0" />
+ <PackageReference Include="Microsoft.Azure.SpringCloud.Client" Version="2.0.0-preview.1" />
+ </ItemGroup>
+ <Target Name="Publish-Zip" AfterTargets="Publish">
+ <ZipDirectory SourceDirectory="$(PublishDir)" DestinationFile="$(MSBuildProjectDirectory)/deploy.zip" Overwrite="true" />
+ </Target>
+ ```
+
+ The packages are for Steeltoe Service Discovery and the Azure Spring Apps client library. The `Zip` task is for deployment to Azure. When you run the `dotnet publish` command, it generates the binaries in the *publish* folder, and this task zips the *publish* folder into a *.zip* file that you upload to Azure.
+
+1. In the *Program.cs* file, add a `using` directive and code that uses the Azure Spring Apps client library:
+
+ ```csharp
+ using Microsoft.Azure.SpringCloud.Client;
+ ```
+
+ ```csharp
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .UseAzureSpringCloudService()
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseStartup<Startup>();
+ });
+ ```
+
+1. In the *Startup.cs* file, add a `using` directive and code that uses the Steeltoe Service Discovery at the end of the `ConfigureServices` method:
+
+ ```csharp
+ using Steeltoe.Discovery.Client;
+ ```
+
+ ```csharp
+ public void ConfigureServices(IServiceCollection services)
+ {
+ // Template code not shown.
+
+ services.AddDiscoveryClient(Configuration);
+ }
+ ```
+
+1. Build the project to make sure there are no compile errors.
+
+ ```dotnetcli
+ dotnet build
+ ```
+
+## Provision a service instance
+
+The following procedure creates an instance of Azure Spring Apps using the Azure portal.
+
+1. Open the [Azure portal](https://portal.azure.com/).
+
+1. From the top search box, search for **Azure Spring Apps**.
+
+1. Select **Azure Spring Apps** from the results.
+
+ :::image type="content" source="media/quickstart/spring-apps-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps service in search results." lightbox="media/quickstart/spring-apps-start.png":::
+
+1. On the Azure Spring Apps page, select **Create**.
+
+ :::image type="content" source="media/quickstart/spring-apps-create.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps resource with Create button highlighted." lightbox="media/quickstart/spring-apps-create.png":::
+
+1. Fill out the form on the Azure Spring Apps **Create** page. Consider the following guidelines:
+
+ * **Subscription**: Select the subscription you want to be billed for this resource.
+ * **Resource group**: Create a new resource group. The name you enter here will be used in later steps as **\<resource group name\>**.
+ * **Service Details/Name**: Specify the **\<service instance name\>**. The name must be between 4 and 32 characters long and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+ * **Region**: Select the region for your service instance.
+
+ :::image type="content" source="media/quickstart/portal-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps Create page." lightbox="media/quickstart/portal-start.png":::
+
+1. Select **Review and create**.
+
+1. Select **Create**.
+
+## Build and deploy the app
+
+The following procedure builds and deploys the project that you created earlier.
+
+1. Make sure the command prompt is still in the project folder.
+
+1. Run the following command to build the project, publish the binaries, and store the binaries in a *.zip* file in the project folder.
+
+ ```dotnetcorecli
+ dotnet publish -c release -o ./publish
+ ```
+
+1. Create an app in your Azure Spring Apps instance with a public endpoint assigned. Use the same application name "hello-world" that you specified in *appsettings.json*.
+
+ ```azurecli
+ az spring app create -n hello-world -s <service instance name> -g <resource group name> --assign-endpoint --runtime-version NetCore_31
+ ```
+
+1. Deploy the *.zip* file to the app.
+
+ ```azurecli
+ az spring app deploy -n hello-world -s <service instance name> -g <resource group name> --runtime-version NetCore_31 --main-entry hello-world.dll --artifact-path ./deploy.zip
+ ```
+
+ The `--main-entry` option identifies the *.dll* file that contains the application's entry point. After the service uploads the *.zip* file, it extracts all the files and folders and tries to execute the entry point in the *.dll* file specified by `--main-entry`.
+
+ It takes a few minutes to finish deploying the application. To confirm that it has deployed, go to the **Apps** section in the Azure portal.
+
+## Test the app
+
+Once deployment has completed, access the app at the following URL:
+
+```url
+https://<service instance name>-hello-world.azuremicroservices.io/weatherforecast
+```
+
+The app returns JSON data similar to the following example:
+
+```json
+[{"date":"2020-09-08T21:01:50.0198835+00:00","temperatureC":14,"temperatureF":57,"summary":"Bracing"},{"date":"2020-09-09T21:01:50.0200697+00:00","temperatureC":-14,"temperatureF":7,"summary":"Bracing"},{"date":"2020-09-10T21:01:50.0200715+00:00","temperatureC":27,"temperatureF":80,"summary":"Freezing"},{"date":"2020-09-11T21:01:50.0200717+00:00","temperatureC":18,"temperatureF":64,"summary":"Chilly"},{"date":"2020-09-12T21:01:50.0200719+00:00","temperatureC":16,"temperatureF":60,"summary":"Chilly"}]
+```
+
+## Stream logs in real time
+
+Use the following command to get real-time logs from the App.
+
+```azurecli
+az spring app logs -n hello-world -s <service instance name> -g <resource group name> --lines 100 -f
+```
+
+Logs appear in the output:
+
+```output
+[Azure Spring Apps] The following environment variables are loaded:
+2020-09-08 20:58:42,432 INFO supervisord started with pid 1
+2020-09-08 20:58:43,435 INFO spawned: 'event-gather_00' with pid 9
+2020-09-08 20:58:43,436 INFO spawned: 'dotnet-app_00' with pid 10
+2020-09-08 20:58:43 [Warning] No managed processes are running. Wait for 30 seconds...
+2020-09-08 20:58:44,843 INFO success: event-gather_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
+2020-09-08 20:58:44,843 INFO success: dotnet-app_00 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
+←[40m←[32minfo←[39m←[22m←[49m: Steeltoe.Discovery.Eureka.DiscoveryClient[0]
+ Starting HeartBeat
+info: Microsoft.Hosting.Lifetime[0]
+ Now listening on: http://[::]:1025
+info: Microsoft.Hosting.Lifetime[0]
+ Application started. Press Ctrl+C to shut down.
+info: Microsoft.Hosting.Lifetime[0]
+ Hosting environment: Production
+info: Microsoft.Hosting.Lifetime[0]
+ Content root path: /netcorepublish/6e4db42a-b160-4b83-a771-c91adec18c60
+2020-09-08 21:00:13 [Information] [10] Start listening...
+info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
+ Request starting HTTP/1.1 GET http://asa-svc-hello-world.azuremicroservices.io/weatherforecast
+info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
+ Executing endpoint 'hello_world.Controllers.WeatherForecastController.Get (hello-world)'
+info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[3]
+ Route matched with {action = "Get", controller = "WeatherForecast"}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[hello_world.WeatherForecast] Get() on controller hello_world.Controllers.WeatherForecastController (hello-world).
+info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
+ Executing ObjectResult, writing value of type 'hello_world.WeatherForecast[]'.
+info: Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker[2]
+ Executed action hello_world.Controllers.WeatherForecastController.Get (hello-world) in 1.8902ms
+info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
+ Executed endpoint 'hello_world.Controllers.WeatherForecastController.Get (hello-world)'
+info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
+ Request finished in 4.2591ms 200 application/json; charset=utf-8
+```
+
+> [!TIP]
+> Use `az spring app logs -h` to explore more parameters and log stream functionalities.
+
+For advanced log analytics features, visit **Logs** tab in the menu on the [Azure portal](https://portal.azure.com/). Logs here have a latency of a few minutes.
++++
+This quickstart explains how to deploy a small application to Azure Spring Apps.
+
+The application code used in this tutorial is a simple app built with Spring Initializr. When you've completed this example, the application will be accessible online and can be managed via the Azure portal.
+
+This quickstart explains how to:
+
+> [!div class="checklist"]
+> * Generate a basic Spring project
+> * Provision a service instance
+> * Build and deploy the app with a public endpoint
+> * Stream logs in real time
+
+## Prerequisites
+
+To complete this quickstart:
+
+* [Install JDK 8 or JDK 11](/java/azure/jdk/)
+* [Sign up for an Azure subscription](https://azure.microsoft.com/free/)
+* (Optional) [Install the Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli) and the Azure Spring Apps extension with the command: `az extension add --name spring`
+* (Optional) [Install IntelliJ IDEA](https://www.jetbrains.com/idea/)
+* (Optional) [Install the Azure Toolkit for IntelliJ](https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij/) and [sign-in](/azure/developer/java/toolkit-for-intellij/create-hello-world-web-app#installation-and-sign-in)
+* (Optional) [Install Maven](https://maven.apache.org/guides/getting-started/maven-in-five-minutes.html). If you use the Azure Cloud Shell, this installation isn't needed.
+
+## Generate a Spring project
+
+Start with [Spring Initializr](https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.7&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-config-client) to generate a sample project with recommended dependencies for Azure Spring Apps. This link uses the following URL to provide default settings for you.
+
+```url
+https://start.spring.io/#!type=maven-project&language=java&platformVersion=2.5.7&packaging=jar&jvmVersion=1.8&groupId=com.example&artifactId=hellospring&name=hellospring&description=Demo%20project%20for%20Spring%20Boot&packageName=com.example.hellospring&dependencies=web,cloud-eureka,actuator,cloud-config-client
+```
+The following image shows the recommended Initializr set up for this sample project.
+
+This example uses Java version 8. If you want to use Java version 11, change the option under **Project Metadata**.
++
+1. Select **Generate** when all the dependencies are set.
+1. Download and unpack the package, then create a web controller for a simple web application by adding the file *src/main/java/com/example/hellospring/HelloController.java* with the following contents:
+
+ ```java
+ package com.example.hellospring;
+
+ import org.springframework.web.bind.annotation.RestController;
+ import org.springframework.web.bind.annotation.RequestMapping;
+
+ @RestController
+ public class HelloController {
+
+ @RequestMapping("/")
+ public String index() {
+ return "Greetings from Azure Spring Apps!";
+ }
+
+ }
+ ```
+
+## Provision an instance of Azure Spring Apps
+
+The following procedure creates an instance of Azure Spring Apps using the Azure portal.
+
+1. In a new tab, open the [Azure portal](https://portal.azure.com/).
+
+1. From the top search box, search for **Azure Spring Apps**.
+
+1. Select **Azure Spring Apps** from the results.
+
+ :::image type="content" source="media/quickstart/spring-apps-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps service in search results." lightbox="media/quickstart/spring-apps-start.png":::
+
+1. On the Azure Spring Apps page, select **Create**.
+
+ :::image type="content" source="media/quickstart/spring-apps-create.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps resource with Create button highlighted." lightbox="media/quickstart/spring-apps-create.png":::
+
+1. Fill out the form on the Azure Spring Apps **Create** page. Consider the following guidelines:
+
+ - **Subscription**: Select the subscription you want to be billed for this resource.
+ - **Resource group**: Creating new resource groups for new resources is a best practice. You will use this resource group in later steps as **\<resource group name\>**.
+ - **Service Details/Name**: Specify the **\<service instance name\>**. The name must be between 4 and 32 characters long and can contain only lowercase letters, numbers, and hyphens. The first character of the service name must be a letter and the last character must be either a letter or a number.
+ - **Location**: Select the region for your service instance.
+
+ :::image type="content" source="media/quickstart/portal-start.png" alt-text="Screenshot of Azure portal showing Azure Spring Apps Create page." lightbox="media/quickstart/portal-start.png":::
+
+1. Select **Review and create**.
+
+## Build and deploy the app
+
+#### [CLI](#tab/Azure-CLI)
+The following procedure builds and deploys the application using the Azure CLI. Execute the following command at the root of the project.
+
+1. Sign in to Azure and choose your subscription.
+
+ ```azurecli
+ az login
+ ```
+
+ If you have more than one subscription, use the following command to list the subscriptions you have access to, then choose the one you want to use for this quickstart.
+
+ ```azurecli
+ az account list -o table
+ ```
+
+ Use the following command to set the default subscription to use with the Azure CLI commands in this quickstart.
+
+ ```azurecli
+ az account set --subscription <Name or ID of a subscription from the last step>
+ ```
+
+1. Build the project using Maven:
+
+ ```console
+ mvn clean package -DskipTests
+ ```
+
+1. Create the app with a public endpoint assigned. If you selected Java version 11 when generating the Spring project, include the `--runtime-version=Java_11` switch.
+
+ ```azurecli
+ az spring app create -n hellospring -s <service instance name> -g <resource group name> --assign-endpoint true
+ ```
+
+1. Deploy the Jar file for the app (`target\hellospring-0.0.1-SNAPSHOT.jar` on Windows):
+
+ ```azurecli
+ az spring app deploy -n hellospring -s <service instance name> -g <resource group name> --artifact-path <jar file path>/hellospring-0.0.1-SNAPSHOT.jar
+ ```
+
+1. It takes a few minutes to finish deploying the application. To confirm that it has deployed, go to the **Apps** section in the Azure portal. You should see the status of the application.
+
+#### [IntelliJ](#tab/IntelliJ)
+
+The following procedure uses the IntelliJ plug-in for Azure Spring Apps to deploy the sample app in IntelliJ IDEA.
+
+### Import project
+
+1. Open the IntelliJ **Welcome** dialog, then select **Open** to open the import wizard.
+1. Select the **hellospring** folder.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-new-project.png" alt-text="Screenshot of IntelliJ IDEA showing Open File or Project dialog box.":::
+
+### Deploy the app
+
+In order to deploy to Azure, you must sign in with your Azure account, then choose your subscription. For sign-in details, see [Installation and sign-in](/azure/developer/java/toolkit-for-intellij/create-hello-world-web-app#installation-and-sign-in).
+
+1. Right-click your project in IntelliJ project explorer, then select **Azure** -> **Deploy to Azure Spring Apps**.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-deploy-azure-1.png" alt-text="Screenshot of IntelliJ IDEA menu showing Deploy to Azure Spring Apps option." lightbox="media/spring-cloud-quickstart-java/intellij-deploy-azure-1.png":::
+
+1. Accept the name for the app in the **Name** field. **Name** refers to the configuration, not the app name. Users don't usually need to change it.
+1. In the **Artifact** textbox, select **Maven:com.example:hellospring-0.0.1-SNAPSHOT**.
+1. In the **Subscription** textbox, verify your subscription is correct.
+1. In the **Service** textbox, select the instance of Azure Spring Apps that you created in [Provision an instance of Azure Spring Apps](./quickstart-provision-service-instance.md).
+1. In the **App** textbox, select **+** to create a new app.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-create-new-app.png" alt-text="Screenshot of IntelliJ IDEA showing Deploy Azure Spring Apps dialog box.":::
+
+1. In the **App name:** textbox, enter *hellospring*, then check the **More settings** check box.
+1. Select the **Enable** button next to **Public endpoint**. The button will change to *Disable \<to be enabled\>*.
+1. If you used Java 11, select **Java 11** in **Runtime**.
+1. Select **OK**.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-create-new-app-2.png" alt-text="Screenshot of IntelliJ IDEA Create Azure Spring Apps dialog box with public endpoint Disable button highlighted.":::
+
+1. Under **Before launch**, select the **Run Maven Goal 'hellospring:package'** line, then select the pencil to edit the command line.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-edit-maven-goal.png" alt-text="Screenshot of IntelliJ IDEA Create Azure Spring Apps dialog box with Maven Goal edit button highlighted.":::
+
+1. In the **Command line** textbox, enter *-DskipTests* after *package*, then select **OK**.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-maven-goal-command-line.png" alt-text="Screenshot of IntelliJ IDEA Select Maven Goal dialog box with Command Line value highlighted.":::
+
+1. Start the deployment by selecting the **Run** button at the bottom of the **Deploy Azure Spring Apps app** dialog. The plug-in will run the command `mvn package -DskipTests` on the `hellospring` app and deploy the jar generated by the `package` command.
+
+#### [Visual Studio Code](#tab/VS-Code)
+
+To deploy a simple Spring Boot web app to Azure Spring Apps, follow the steps in [Build and Deploy Java Spring Boot Apps to Azure Spring Apps with Visual Studio Code](https://code.visualstudio.com/docs/java/java-spring-cloud#_download-and-test-the-spring-boot-app).
+++
+Once deployment has completed, you can access the app at `https://<service instance name>-hellospring.azuremicroservices.io/`.
++
+## Streaming logs in real time
+
+#### [CLI](#tab/Azure-CLI)
+
+Use the following command to get real-time logs from the App.
+
+```azurecli
+az spring app logs -n hellospring -s <service instance name> -g <resource group name> --lines 100 -f
+```
+
+Logs appear in the results:
++
+>[!TIP]
+> Use `az spring app logs -h` to explore more parameters and log stream functionalities.
+
+#### [IntelliJ](#tab/IntelliJ)
+
+1. Select **Azure Explorer**, then **Spring Cloud**.
+1. Right-click the running app.
+1. Select **Streaming Logs** from the drop-down list.
+1. Select instance.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-get-streaming-logs.png" alt-text="Screenshot of IntelliJ IDEA showing Select instance dialog box." lightbox="media/spring-cloud-quickstart-java/intellij-get-streaming-logs.png":::
+
+1. The streaming log will be visible in the output window.
+
+ :::image type="content" source="media/spring-cloud-quickstart-java/intellij-streaming-logs-output.png" alt-text="Screenshot of IntelliJ IDEA showing streaming log output." lightbox="media/spring-cloud-quickstart-java/intellij-streaming-logs-output.png":::
+
+#### [Visual Studio Code](#tab/VS-Code)
+
+To get real-time application logs with Visual Studio Code, follow the steps in [Stream your application logs](https://code.visualstudio.com/docs/java/java-spring-cloud#_stream-your-application-logs).
+++
+For advanced logs analytics features, visit the **Logs** tab in the menu on the [Azure portal](https://portal.azure.com/). Logs here have a latency of a few minutes.
+++
+## Clean up resources
+
+If you plan to continue working with subsequent quickstarts and tutorials, you might want to leave these resources in place. When no longer needed, delete the resource group, which deletes the resources in the resource group. To delete the resource group by using Azure CLI, use the following commands:
+
+```azurecli
+echo "Enter the Resource Group name:" &&
+read resourceGroupName &&
+az group delete --name $resourceGroupName &&
+echo "Press [ENTER] to continue ..."
+```
+
+## Next steps
+
+In this quickstart, you learned how to:
+
+> [!div class="checklist"]
+> * Generate a basic Spring project
+> * Provision a service instance
+> * Build and deploy the app with a public endpoint
+> * Stream logs in real time
+
+To learn how to use more Azure Spring capabilities, advance to the quickstart series that deploys a sample application to Azure Spring Apps:
+
+> [!div class="nextstepaction"]
+> [Introduction to the sample app](./quickstart-sample-app-introduction.md)
+
+More samples are available on GitHub: [Azure Spring Apps Samples](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples).
spring-apps Quotas https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/quotas.md
+
+ Title: Service plans and quotas for Azure Spring Apps
+description: Learn about service quotas and service plans for Azure Spring Apps
+++ Last updated : 11/04/2019++++
+# Quotas and service plans for Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+All Azure services set default limits and quotas for resources and features. Azure Spring Apps offers two pricing tiers: Basic and Standard. We will detail limits for both tiers in this article.
+
+## Azure Spring Apps service tiers and limits
+
+| Resource | Scope | Basic | Standard/Enterprise |
+|--|--|--|-|
+| vCPU | per app instance | 1 | 4 |
+| Memory | per app instance | 2 GB | 8 GB |
+| Azure Spring Apps service instances | per region per subscription | 10 | 10 |
+| Total app instances | per Azure Spring Apps service instance | 25 | 500 |
+| Custom Domains | per Azure Spring Apps service instance | 0 | 25 |
+| Persistent volumes | per Azure Spring Apps service instance | 1 GB/app x 10 apps | 50 GB/app x 10 apps |
+| Inbound Public Endpoints | per Azure Spring Apps service instance | 10 <sup>1</sup> | 10 <sup>1</sup> |
+| Outbound Public IPs | per Azure Spring Apps service instance | 1 <sup>2</sup> | 2 <sup>2</sup> <br> 1 if using VNet<sup>2</sup> |
+| User-assigned managed identities | per app instance | 20 | 20 |
+
+<sup>1</sup> You can increase this limit via support request to a maximum of 1 per app.
+
+<sup>2</sup> You can increase this limit via support request to a maximum of 10.
+
+> [!TIP]
+> Limits listed for Total app instances per service instance apply for apps and deployments in any state, including stopped state. Be sure to delete apps or deployments that aren't in use.
+
+## Next steps
+
+Some default limits can be increased. If your setup requires an increase, [create a support request](../azure-portal/supportability/how-to-create-azure-support-request.md).
spring-apps Reference Architecture https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/reference-architecture.md
+ Last updated : 05/31/2022++
+ Title: Azure Spring Apps reference architecture
+++
+description: This reference architecture is a foundation using a typical enterprise hub and spoke design for the use of Azure Spring Apps.
++
+# Azure Spring Apps reference architecture
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Standard tier ✔️ Enterprise tier
+
+This reference architecture is a foundation using a typical enterprise hub and spoke design for the use of Azure Spring Apps. In the design, Azure Spring Apps is deployed in a single spoke that's dependent on shared services hosted in the hub. The architecture is built with components to achieve the tenets in the [Microsoft Azure Well-Architected Framework][16].
+
+There are two flavors of Azure Spring Apps: Standard tier and Enterprise tier.
+
+Azure Spring Apps Standard tier is composed of the Spring Cloud Config Server, the Spring Cloud Service Registry, and the kpack build service.
+
+Azure Spring Apps Enterprise tier is composed of the VMware Tanzu® Build Service™, Application Configuration Service for VMware Tanzu®, VMware Tanzu® Service Registry, Spring Cloud Gateway for VMware Tanzu®, and API portal for VMware Tanzu®.
+
+For an implementation of this architecture, see the [Azure Spring Apps Reference Architecture][10] repository on GitHub.
+
+Deployment options for this architecture include Azure Resource Manager (ARM), Terraform, Azure CLI, and Bicep. The artifacts in this repository provide a foundation that you can customize for your environment. You can group resources such as Azure Firewall or Application Gateway into different resource groups or subscriptions. This grouping helps keep different functions separate, such as IT infrastructure, security, business application teams, and so on.
+
+## Planning the address space
+
+Azure Spring Apps requires two dedicated subnets:
+
+* Service runtime
+* Spring Boot applications
+
+Each of these subnets requires a dedicated Azure Spring Apps cluster. Multiple clusters can't share the same subnets. The minimum size of each subnet is /28. The number of application instances that Azure Spring Apps can support varies based on the size of the subnet. You can find the detailed Virtual Network (VNET) requirements in the [Virtual network requirements][11] section of [Deploy Azure Spring Apps in a virtual network][17].
+
+> [!WARNING]
+> The selected subnet size can't overlap with the existing VNET address space, and shouldn't overlap with any peered or on-premises subnet address ranges.
+
+## Use cases
+
+Typical uses for this architecture include:
+
+* Private applications: Internal applications deployed in hybrid cloud environments
+* Public applications: Externally facing applications
+
+These use cases are similar except for their security and network traffic rules. This architecture is designed to support the nuances of each.
+
+## Private applications
+
+The following list describes the infrastructure requirements for private applications. These requirements are typical in highly regulated environments.
+
+* A subnet must only have one instance of Azure Spring Apps.
+* Adherence to at least one Security Benchmark should be enforced.
+* Application host Domain Name Service (DNS) records should be stored in Azure Private DNS.
+* Azure service dependencies should communicate through Service Endpoints or Private Link.
+* Data at rest should be encrypted.
+* Data in transit should be encrypted.
+* DevOps deployment pipelines can be used (for example, Azure DevOps) and require network connectivity to Azure Spring Apps.
+* Egress traffic should travel through a central Network Virtual Appliance (NVA) (for example, Azure Firewall).
+* If [Azure Spring Apps Config Server][8] is used to load config properties from a repository, the repository must be private.
+* Microsoft's Zero Trust security approach requires secrets, certificates, and credentials to be stored in a secure vault. The recommended service is Azure Key Vault.
+* Name resolution of hosts on-premises and in the Cloud should be bidirectional.
+* No direct egress to the public Internet except for control plane traffic.
+* Resource Groups managed by the Azure Spring Apps deployment must not be modified.
+* Subnets managed by the Azure Spring Apps deployment must not be modified.
+
+The following list shows the components that make up the design:
+
+* On-premises network
+ * Domain Name Service (DNS)
+ * Gateway
+* Hub subscription
+ * Application Gateway Subnet
+ * Azure Firewall Subnet
+ * Shared Services Subnet
+* Connected subscription
+ * Azure Bastion Subnet
+ * Virtual Network Peer
+
+The following list describes the Azure services in this reference architecture:
+
+* [Azure Key Vault][2]: a hardware-backed credential management service that has tight integration with Microsoft identity services and compute resources.
+
+* [Azure Monitor][3]: an all-encompassing suite of monitoring services for applications that deploy both in Azure and on-premises.
+
+* [Azure Pipelines][5]: a fully featured Continuous Integration / Continuous Development (CI/CD) service that can automatically deploy updated Spring Boot apps to Azure Spring Apps.
+
+* [Microsoft Defender for Cloud][4]: a unified security management and threat protection system for workloads across on-premises, multiple clouds, and Azure.
+
+* [Azure Spring Apps][1]: a managed service that's designed and optimized specifically for Java-based Spring Boot applications and .NET-based [Steeltoe][9] applications.
+
+The following diagrams represent a well-architected hub and spoke design that addresses the above requirements:
+
+### [Standard tier](#tab/azure-spring-standard)
++
+### [Enterprise tier](#tab/azure-spring-enterprise)
++++
+## Public applications
+
+The following list describes the infrastructure requirements for public applications. These requirements are typical in highly regulated environments.
+
+* A subnet must only have one instance of Azure Spring Apps.
+* Adherence to at least one Security Benchmark should be enforced.
+* Application host Domain Name Service (DNS) records should be stored in Azure Private DNS.
+* Azure DDoS Protection standard should be enabled.
+* Azure service dependencies should communicate through Service Endpoints or Private Link.
+* Data at rest should be encrypted.
+* Data in transit should be encrypted.
+* DevOps deployment pipelines can be used (for example, Azure DevOps) and require network connectivity to Azure Spring Apps.
+* Egress traffic should travel through a central Network Virtual Appliance (NVA) (for example, Azure Firewall).
+* Ingress traffic should be managed by at least Application Gateway or Azure Front Door.
+* Internet routable addresses should be stored in Azure Public DNS.
+* Microsoft's Zero Trust security approach requires secrets, certificates, and credentials to be stored in a secure vault. The recommended service is Azure Key Vault.
+* Name resolution of hosts on-premises and in the Cloud should be bidirectional.
+* No direct egress to the public Internet except for control plane traffic.
+* Resource Groups managed by the Azure Spring Apps deployment must not be modified.
+* Subnets managed by the Azure Spring Apps deployment must not be modified.
+
+The following list shows the components that make up the design:
+
+* On-premises network
+ * Domain Name Service (DNS)
+ * Gateway
+* Hub subscription
+ * Application Gateway Subnet
+ * Azure Firewall Subnet
+ * Shared Services Subnet
+* Connected subscription
+ * Azure Bastion Subnet
+ * Virtual Network Peer
+
+The following list describes the Azure services in this reference architecture:
+
+* [Azure Application Firewall][7]: a feature of Azure Application Gateway that provides centralized protection of applications from common exploits and vulnerabilities.
+
+* [Azure Application Gateway][6]: a load balancer responsible for application traffic with Transport Layer Security (TLS) offload operating at layer 7.
+
+* [Azure Key Vault][2]: a hardware-backed credential management service that has tight integration with Microsoft identity services and compute resources.
+
+* [Azure Monitor][3]: an all-encompassing suite of monitoring services for applications that deploy both in Azure and on-premises.
+
+* [Azure Pipelines][5]: a fully featured Continuous Integration / Continuous Development (CI/CD) service that can automatically deploy updated Spring Boot apps to Azure Spring Apps.
+
+* [Microsoft Defender for Cloud][4]: a unified security management and threat protection system for workloads across on-premises, multiple clouds, and Azure.
+
+* [Azure Spring Apps][1]: a managed service that's designed and optimized specifically for Java-based Spring Boot applications and .NET-based [Steeltoe][9] applications.
+
+The following diagrams represent a well-architected hub and spoke design that addresses the above requirements. Only the hub-virtual-network communicates with the internet:
+
+### [Standard tier](#tab/azure-spring-standard)
++
+### [Enterprise tier](#tab/azure-spring-enterprise)
++++
+## Azure Spring Apps on-premises connectivity
+
+Applications in Azure Spring Apps can communicate to various Azure, on-premises, and external resources. By using the hub and spoke design, applications can route traffic externally or to the on-premises network using Express Route or Site-to-Site Virtual Private Network (VPN).
+
+## Azure Well-Architected Framework considerations
+
+The [Azure Well-Architected Framework][16] is a set of guiding tenets to follow in establishing a strong infrastructure foundation. The framework contains the following categories: cost optimization, operational excellence, performance efficiency, reliability, and security.
+
+### Cost optimization
+
+Because of the nature of distributed system design, infrastructure sprawl is a reality. This reality results in unexpected and uncontrollable costs. Azure Spring Apps is built using components that scale so that it can meet demand and optimize cost. The core of this architecture is the Azure Kubernetes Service (AKS). The service is designed to reduce the complexity and operational overhead of managing Kubernetes, which includes efficiencies in the operational cost of the cluster.
+
+You can deploy different applications and application types to a single instance of Azure Spring Apps. The service supports autoscaling of applications triggered by metrics or schedules that can improve utilization and cost efficiency.
+
+You can also use Application Insights and Azure Monitor to lower operational cost. With the visibility provided by the comprehensive logging solution, you can implement automation to scale the components of the system in real time. You can also analyze log data to reveal inefficiencies in the application code that you can address to improve the overall cost and performance of the system.
+
+### Operational excellence
+
+Azure Spring Apps addresses multiple aspects of operational excellence. You can combine these aspects to ensure that the service runs efficiently in production environments, as described in the following list:
+
+* You can use Azure Pipelines to ensure that deployments are reliable and consistent while helping you avoid human error.
+* You can use Azure Monitor and Application Insights to store log and telemetry data.
+ You can assess collected log and metric data to ensure the health and performance of your applications. Application Performance Monitoring (APM) is fully integrated into the service through a Java agent. This agent provides visibility into all the deployed applications and dependencies without requiring extra code. For more information, see the blog post [Effortlessly monitor applications and dependencies in Azure Spring Apps][15].
+* You can use Microsoft Defender for Cloud to ensure that applications maintain security by providing a platform to analyze and assess the data provided.
+* The service supports various deployment patterns. For more information, see [Set up a staging environment in Azure Spring Apps][14].
+
+### Reliability
+
+Azure Spring Apps is built on AKS. While AKS provides a level of resiliency through clustering, this reference architecture goes even further by incorporating services and architectural considerations to increase availability of the application if there's component failure.
+
+By building on top of a well-defined hub and spoke design, the foundation of this architecture ensures that you can deploy it to multiple regions. For the private application use case, the architecture uses Azure Private DNS to ensure continued availability during a geographic failure. For the public application use case, Azure Front Door and Azure Application Gateway ensure availability.
+
+### Security
+
+The security of this architecture is addressed by its adherence to industry-defined controls and benchmarks. In this context, "control" means a concise and well-defined best practice, such as "Employ the least privilege principle when implementing information system access. IAM-05" The controls in this architecture are from the [Cloud Control Matrix][19] (CCM) by the [Cloud Security Alliance][18] (CSA) and the [Microsoft Azure Foundations Benchmark][20] (MAFB) by the [Center for Internet Security][21] (CIS). In the applied controls, the focus is on the primary security design principles of governance, networking, and application security. It is your responsibility to handle the design principles of Identity, Access Management, and Storage as they relate to your target infrastructure.
+
+#### Governance
+
+The primary aspect of governance that this architecture addresses is segregation through the isolation of network resources. In the CCM, DCS-08 recommends ingress and egress control for the datacenter. To satisfy the control, the architecture uses a hub and spoke design using Network Security Groups (NSGs) to filter east-west traffic between resources. The architecture also filters traffic between central services in the hub and resources in the spoke. The architecture uses an instance of Azure Firewall to manage traffic between the internet and the resources within the architecture.
+
+The following list shows the control that addresses datacenter security in this reference:
+
+| CSA CCM Control ID | CSA CCM Control Domain |
+|:-|:--|
+| DCS-08 | Datacenter Security Unauthorized Persons Entry |
+
+#### Network
+
+The network design supporting this architecture is derived from the traditional hub and spoke model. This decision ensures that network isolation is a foundational construct. CCM control IVS-06 recommends that traffic between networks and virtual machines are restricted and monitored between trusted and untrusted environments. This architecture adopts the control by implementation of the NSGs for east-west traffic (within the "data center"), and the Azure Firewall for north-south traffic (outside of the "data center"). CCM control IPY-04 recommends that the infrastructure should use secure network protocols for the exchange of data between services. The Azure services supporting this architecture all use standard secure protocols such as TLS for HTTP and SQL.
+
+The following list shows the CCM controls that address network security in this reference:
+
+| CSA CCM Control ID | CSA CCM Control Domain |
+| :-- | :-|
+| IPY-04 | Network Protocols |
+| IVS-06 | Network Security |
+
+The network implementation is further secured by defining controls from the MAFB. The controls ensure that traffic into the environment is restricted from the public Internet.
+
+The following list shows the CIS controls that address network security in this reference:
+
+| CIS Control ID | CIS Control Description |
+|:|:|
+| 6.2 | Ensure that SSH access is restricted from the internet. |
+| 6.3 | Ensure no SQL Databases allow ingress 0.0.0.0/0 (ANY IP). |
+| 6.5 | Ensure that Network Watcher is 'Enabled'. |
+| 6.6 | Ensure that ingress using UDP is restricted from the internet. |
+
+Azure Spring Apps requires management traffic to egress from Azure when deployed in a secured environment. You must allow the network and application rules listed in [Customer responsibilities for running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md).
+
+#### Application security
+
+This design principle covers the fundamental components of identity, data protection, key management, and application configuration. By design, an application deployed in Azure Spring Apps runs with least privilege required to function. The set of authorization controls is directly related to data protection when using the service. Key management strengthens this layered application security approach.
+
+The following list shows the CCM controls that address key management in this reference:
+
+| CSA CCM Control ID | CSA CCM Control Domain |
+|:-|:--|
+| EKM-01 | Encryption and Key Management Entitlement |
+| EKM-02 | Encryption and Key Management Key Generation |
+| EKM-03 | Encryption and Key Management Sensitive Data Protection |
+| EKM-04 | Encryption and Key Management Storage and Access |
+
+From the CCM, EKM-02, and EKM-03 recommend policies and procedures to manage keys and to use encryption protocols to protect sensitive data. EKM-01 recommends that all cryptographic keys have identifiable owners so that they can be managed. EKM-04 recommends the use of standard algorithms.
+
+The following list shows the CIS controls that address key management in this reference:
+
+| CIS Control ID | CIS Control Description |
+|:|:-|
+| 8.1 | Ensure that the expiration date is set on all keys. |
+| 8.2 | Ensure that the expiration date is set on all secrets. |
+| 8.4 | Ensure the key vault is recoverable. |
+
+The CIS controls 8.1 and 8.2 recommend that expiration dates are set for credentials to ensure that rotation is enforced. CIS control 8.4 ensures that the contents of the key vault can be restored to maintain business continuity.
+
+The aspects of application security set a foundation for the use of this reference architecture to support a Spring workload in Azure.
+
+## Next steps
+
+Explore this reference architecture through the ARM, Terraform, and Azure CLI deployments available in the [Azure Spring Apps Reference Architecture][10] repository.
+
+<!-- Reference links in article -->
+[1]: ./index.yml
+[2]: ../key-vault/index.yml
+[3]: ../azure-monitor/index.yml
+[4]: ../security-center/index.yml
+[5]: /azure/devops/pipelines/
+[6]: ../application-gateway/index.yml
+[7]: ../web-application-firewall/index.yml
+[8]: ./how-to-config-server.md
+[9]: https://steeltoe.io/
+[10]: https://github.com/Azure/azure-spring-apps-reference-architecture
+[11]: ./how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements
+[12]: ./vnet-customer-responsibilities.md#azure-spring-apps-network-requirements
+[13]: ./vnet-customer-responsibilities.md#azure-spring-apps-fqdn-requirements--application-rules
+[14]: ./how-to-staging-environment.md
+[15]: https://devblogs.microsoft.com/java/monitor-applications-and-dependencies-in-azure-spring-cloud/
+[16]: /azure/architecture/framework/
+[17]: ./how-to-deploy-in-azure-virtual-network.md#virtual-network-requirements
+[18]: https://cloudsecurityalliance.org/
+[19]: https://cloudsecurityalliance.org/research/working-groups/cloud-controls-matrix
+[20]: /azure/security/benchmarks/v2-cis-benchmark
+[21]: https://www.cisecurity.org/
spring-apps Resources https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/resources.md
+
+ Title: Resources for Azure Spring Apps | Microsoft Docs
+description: Azure Spring Apps resource list
+++ Last updated : 09/08/2020++++
+# Azure Spring Apps developer resources
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+As a developer, you might find the following Azure Spring Apps resources useful:
+
+* [Azure roadmap](https://azure.microsoft.com/updates)
+* [Frequently asked questions](./faq.md)
+* [Troubleshooting guide](./troubleshoot.md)
+* [Microsoft Q&A question page](/answers/topics/azure-spring-cloud.html)
+* [Spring Cloud Services for VMware Tanzu Documentation](https://docs.pivotal.io/spring-cloud-services/1-5/common/https://docsupdatetracker.net/index.html)
+* [Steeltoe](https://steeltoe.io/)
+* [Spring](https://spring.io/)
+* [Spring framework](https://spring.io/projects/spring-cloud-azure)
+* [Spring on Azure](/azure/developer/java/spring-framework/)
spring-apps Security Controls Policy https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/security-controls-policy.md
+
+ Title: Azure Policy Regulatory Compliance controls for Azure Spring Apps
+description: Lists Azure Policy Regulatory Compliance controls available for Azure Spring Apps. These built-in policy definitions provide common approaches to managing the compliance of your Azure resources.
Last updated : 07/26/2022++++++
+# Azure Policy Regulatory Compliance controls for Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+[Regulatory Compliance in Azure Policy](../governance/policy/concepts/regulatory-compliance.md)
+provides Microsoft created and managed initiative definitions, known as _built-ins_, for the
+**compliance domains** and **security controls** related to different compliance standards. This
+page lists the **compliance domains** and **security controls** for Azure Spring Apps. You can
+assign the built-ins for a **security control** individually to help make your Azure resources
+compliant with the specific standard.
+++
+## Next steps
+
+- Learn more about [Azure Policy Regulatory Compliance](../governance/policy/concepts/regulatory-compliance.md).
+- See the built-ins on the [Azure Policy GitHub repo](https://github.com/Azure/azure-policy).
spring-apps Structured App Log https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/structured-app-log.md
+
+ Title: Structured application log for Azure Spring Apps | Microsoft Docs
+description: This article explains how to generate and collect structured application log data in Azure Spring Apps.
+++ Last updated : 02/05/2021++++
+# Structured application log for Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article explains how to generate and collect structured application log data in Azure Spring Apps. With proper configuration, Azure Spring Apps provides useful application log query and analysis through Log Analytics.
+
+## Log schema requirements
+
+To improve log query experience, an application log is required to be in JSON format and conform to a schema. Azure Spring Apps uses this schema to parse your application and stream to Log Analytics.
+
+> [!NOTE]
+> Enabling the JSON log format makes it difficult to read the log streaming output from console. To get human readable output, append the `--format-json` argument to the `az spring app logs` CLI command. See [Format JSON structured logs](./how-to-log-streaming.md#format-json-structured-logs).
+
+**JSON schema requirements:**
+
+| Json Key | Json value Type| Required | Column in Log Analytics| Description |
+| --| |--|--|--|
+| timestamp | string | Yes | AppTimestamp | timestamp in UTC format |
+| logger | string | No | Logger | logger |
+| level | string | No | CustomLevel | log level |
+| thread | string | No | Thread | thread |
+| message | string | No | Message | log message |
+| stackTrace | string | No | StackTrace | exception stack trace |
+| exceptionClass| string | No | ExceptionClass | exception class name |
+| mdc | nested JSON | No | | mapped diagnostic context|
+| mdc.traceId | string | No | TraceId |trace ID for distributed tracing|
+| mdc.spanId | string | No | SpanId |span ID for distributed tracing |
+| | | | | |
+
+* The "timestamp" field is required, and should be in UTC format, all other fields are optional.
+* "traceId" and "spanId" in "mdc" field are used for tracing purpose.
+* Log each JSON record in one line.
+
+**Log record sample**
+
+```log
+{"timestamp":"2021-01-08T09:23:51.280Z","logger":"com.example.demo.HelloController","level":"ERROR","thread":"http-nio-1456-exec-4","mdc":{"traceId":"c84f8a897041f634","spanId":"c84f8a897041f634"},"stackTrace":"java.lang.RuntimeException: get an exception\r\n\tat com.example.demo.HelloController.throwEx(HelloController.java:54)\r\n\","message":"Got an exception","exceptionClass":"RuntimeException"}
+```
+
+## Limitations
+
+Each line of JSON logs may have at most **16K bytes**. If the JSON output of a single log record exceeds this limit, it will be forcibly broken into multiple lines, and each raw line will be collected into the `Log` column, without being parsed structurally.
+
+Generally, this happens on exception logging with deep stacktrace, especially when the [AppInsights In-Process Agent](./how-to-application-insights.md) is enabled. Apply limit settings to the stacktrace output (see the below configuration samples) to ensure the final output gets parsed properly.
+
+## Generate schema-compliant JSON log
+
+For Spring applications, you can generate expected JSON log format using common [logging frameworks](https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/boot-features-logging.html#boot-features-custom-log-configuration), such as [logback](http://logback.qos.ch/) and [log4j2](https://logging.apache.org/log4j/2.x/).
+
+### Log with logback
+
+When using Spring Boot starters, logback is used by default. For logback apps, use [logstash-encoder](https://github.com/logstash/logstash-logback-encoder) to generate JSON formatted log. This method is supported in Spring Boot version 2.1+.
+
+The procedure:
+
+1. Add logstash dependency in your `pom.xml` file.
+
+ ```xml
+ <dependency>
+ <groupId>net.logstash.logback</groupId>
+ <artifactId>logstash-logback-encoder</artifactId>
+ <version>6.5</version>
+ </dependency>
+ ```
+
+1. Update your `logback-spring.xml` config file to set the JSON format.
+
+ ```xml
+ <configuration>
+ <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+ <providers>
+ <timestamp>
+ <fieldName>timestamp</fieldName>
+ <timeZone>UTC</timeZone>
+ </timestamp>
+ <loggerName>
+ <fieldName>logger</fieldName>
+ </loggerName>
+ <logLevel>
+ <fieldName>level</fieldName>
+ </logLevel>
+ <threadName>
+ <fieldName>thread</fieldName>
+ </threadName>
+ <nestedField>
+ <fieldName>mdc</fieldName>
+ <providers>
+ <mdc />
+ </providers>
+ </nestedField>
+ <stackTrace>
+ <fieldName>stackTrace</fieldName>
+ <!-- maxLength - limit the length of the stack trace -->
+ <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
+ <maxDepthPerThrowable>200</maxDepthPerThrowable>
+ <maxLength>14000</maxLength>
+ <rootCauseFirst>true</rootCauseFirst>
+ </throwableConverter>
+ </stackTrace>
+ <message />
+ <throwableClassName>
+ <fieldName>exceptionClass</fieldName>
+ </throwableClassName>
+ </providers>
+ </encoder>
+ </appender>
+ <root level="info">
+ <appender-ref ref="stdout" />
+ </root>
+ </configuration>
+ ```
+
+1. When using the logging configuration file with `-spring` suffix like `logback-spring.xml`, you can set the logging configuration based on the Spring active profile.
+
+ ```xml
+ <configuration>
+ <springProfile name="dev">
+ <!-- JSON appender definitions for local development, in human readable format -->
+ <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+ <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
+ <root level="info">
+ <appender-ref ref="CONSOLE" />
+ </root>
+ </springProfile>
+
+ <springProfile name="!dev">
+ <!-- JSON appender configuration from previous step, used for staging / production -->
+ ...
+ </springProfile>
+ </configuration>
+ ```
+
+ For local development, run the Spring application with JVM argument `-Dspring.profiles.active=dev`, then you can see human readable logs instead of JSON formatted lines.
+
+### Log with log4j2
+
+For log4j2 apps, use [json-template-layout](https://logging.apache.org/log4j/2.x/manual/json-template-layout.html) to generate JSON formatted log. This method is supported in Spring Boot version 2.1+.
+
+The procedure:
+
+1. Exclude `spring-boot-starter-logging` from `spring-boot-starter`, add dependencies `spring-boot-starter-log4j2`, `log4j-layout-template-json` in your `pom.xml` file.
+
+ ```xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-log4j2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-layout-template-json</artifactId>
+ <version>2.14.0</version>
+ </dependency>
+ ```
+
+2. Prepare a JSON layout template file `jsonTemplate.json` in your class path.
+
+ ```json
+ {
+ "mdc": {
+ "$resolver": "mdc"
+ },
+ "exceptionClass": {
+ "$resolver": "exception",
+ "field": "className"
+ },
+ "stackTrace": {
+ "$resolver": "exception",
+ "field": "stackTrace",
+ "stringified": true
+ },
+ "message": {
+ "$resolver": "message",
+ "stringified": true
+ },
+ "thread": {
+ "$resolver": "thread",
+ "field": "name"
+ },
+ "timestamp": {
+ "$resolver": "timestamp",
+ "pattern": {
+ "format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
+ "timeZone": "UTC"
+ }
+ },
+ "level": {
+ "$resolver": "level",
+ "field": "name"
+ },
+ "logger": {
+ "$resolver": "logger",
+ "field": "name"
+ }
+ }
+ ```
+
+3. Use this JSON layout template in your `log4j2-spring.xml` config file.
+
+ ```xml
+ <configuration>
+ <appenders>
+ <console name="Console" target="SYSTEM_OUT">
+ <!-- maxStringLength - limit the length of the stack trace -->
+ <JsonTemplateLayout eventTemplateUri="classpath:jsonTemplate.json" maxStringLength="14000" />
+ </console>
+ </appenders>
+ <loggers>
+ <root level="info">
+ <appender-ref ref="Console" />
+ </root>
+ </loggers>
+ </configuration>
+ ```
+
+## Analyze the logs in Log Analytics
+
+After your application is properly set up, your application console log will be streamed to Log Analytics. The structure enables efficient query in Log Analytics.
+
+### Check log structure in Log Analytics
+
+Use the following procedure:
+
+1. Go to service overview page of your service instance.
+2. Select the **Logs** entry in the **Monitoring** section.
+3. Run this query.
+
+ ```query
+ AppPlatformLogsforSpring
+ | where TimeGenerated > ago(1h)
+ | project AppTimestamp, Logger, CustomLevel, Thread, Message, ExceptionClass, StackTrace, TraceId, SpanId
+ ```
+
+4. Application logs return as shown in the following image:
+
+ ![Json Log show](media/spring-cloud-structured-app-log/json-log-query.png)
+
+### Show log entries containing errors
+
+To review log entries that have an error, run the following query:
+
+```query
+AppPlatformLogsforSpring
+| where TimeGenerated > ago(1h) and CustomLevel == "ERROR"
+| project AppTimestamp, Logger, ExceptionClass, StackTrace, Message, AppName
+| sort by AppTimestamp
+```
+
+Use this query to find errors, or modify the query terms to find specific exception class or error code.
+
+### Show log entries for a specific traceId
+
+To review log entries for a specific tracing ID "trace_id", run the following query:
+
+```query
+AppPlatformLogsforSpring
+| where TimeGenerated > ago(1h)
+| where TraceId == "trace_id"
+| project AppTimestamp, Logger, TraceId, SpanId, StackTrace, Message, AppName
+| sort by AppTimestamp
+```
+
+## Next steps
+
+* To learn more about the Log Query, see [Get started with log queries in Azure Monitor](../azure-monitor/logs/get-started-queries.md)
spring-apps Troubleshoot https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/troubleshoot.md
+
+ Title: Troubleshooting guide for Azure Spring Apps | Microsoft Docs
+description: Troubleshooting guide for Azure Spring Apps
+++ Last updated : 09/08/2020++++
+# Troubleshoot common Azure Spring Apps issues
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article provides instructions for troubleshooting Azure Spring Apps development issues. For additional information, see [Azure Spring Apps FAQ](./faq.md).
+
+## Availability, performance, and application issues
+
+### My application can't start (for example, the endpoint can't be connected, or it returns a 502 after a few retries)
+
+Export the logs to Azure Log Analytics. The table for Spring application logs is named *AppPlatformLogsforSpring*. To learn more, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md).
+
+The following error message might appear in your logs: `org.springframework.context.ApplicationContextException: Unable to start web server`
+
+The message indicates one of two likely problems:
+
+* One of the beans or one of its dependencies is missing.
+* One of the bean properties is missing or invalid. In this case, "java.lang.IllegalArgumentException" will likely be displayed.
+
+Service bindings might also cause application start failures. To query the logs, use keywords that are related to the bound services. For instance, let's assume that your application has a binding to a MySQL instance that's set to local system time. If the application fails to start, the following error message might appear in the log:
+
+> "java.sql.SQLException: The server time zone value 'Coordinated Universal Time' is unrecognized or represents more than one time zone."
+
+To fix this error, go to the `server parameters` of your MySQL instance, and change the `time_zone` value from *SYSTEM* to *+0:00*.
+
+### My application crashes or throws an unexpected error
+
+When you're debugging application crashes, start by checking the running status and discovery status of the application. To do so, go to *App management* in the Azure portal to ensure that the statuses of all the applications are *Running* and *UP*.
+
+* If the status is *Running* but the discovery status is not *UP*, go to the ["My application can't be registered"](#my-application-cant-be-registered) section.
+
+* If the discovery status is *UP*, go to Metrics to check the application's health. Inspect the following metrics:
+
+ * `TomcatErrorCount` (*tomcat.global.error*):
+
+ All Spring application exceptions are counted here. If this number is large, go to Azure Log Analytics to inspect your application logs.
+
+ * `AppMemoryMax` (*jvm.memory.max*):
+
+ The maximum amount of memory available to the application. The amount might be undefined, or it might change over time if it is defined. If it's defined, the amount of used and committed memory is always less than or equal to max. However, a memory allocation might fail with an `OutOfMemoryError` message if the allocation attempts to increase the used memory such that *used > committed*, even if *used <= max* is still true. In such a situation, try to increase the maximum heap size by using the `-Xmx` parameter.
+
+ * `AppMemoryUsed` (*jvm.memory.used*):
+
+ The amount of memory in bytes that's currently used by the application. For a normal load Java application, this metric series forms a *sawtooth* pattern, where the memory usage steadily increases and decreases in small increments and suddenly drops a lot, and then the pattern recurs. This metric series occurs because of garbage collection inside Java virtual machine, where collection actions represent drops on the sawtooth pattern.
+
+ This metric is important to help identify memory issues, such as:
+
+ * A memory explosion at the very beginning.
+ * The surge memory allocation for a specific logic path.
+ * Gradual memory leaks.
+
+ For more information, see [Metrics](./concept-metrics.md).
+
+* If the application fails to start, verify that the application has valid jvm parameters. If jvm memory is set too high, the following error message might appear in your logs:
+
+ > "required memory 2728741K is greater than 2000M available for allocation"
+
+To learn more about Azure Log Analytics, see [Get started with Log Analytics in Azure Monitor](../azure-monitor/logs/log-analytics-tutorial.md).
+
+### My application experiences high CPU usage or high memory usage
+
+If your application experiences high CPU or memory usage, one of two things is true:
+
+* All the app instances experience high CPU or memory usage.
+* Some of the app instances experience high CPU or memory usage.
+
+To ascertain which situation applies, do the following:
+
+1. Go to **Metrics**, and then select either **Service CPU Usage Percentage** or **Service Memory Used**.
+2. Add an **App=** filter to specify which application you want to monitor.
+3. Split the metrics by **Instance**.
+
+If *all instances* are experiencing high CPU or memory usage, you need to either scale out the application or scale up the CPU or memory usage. For more information, see [Tutorial: Scale an application in Azure Spring Apps](./how-to-scale-manual.md).
+
+If *some instances* are experiencing high CPU or memory usage, check the instance status and its discovery status.
+
+For more information, see [Metrics for Azure Spring Apps](./concept-metrics.md).
+
+If all instances are up and running, go to Azure Log Analytics to query your application logs and review your code logic. This will help you see whether any of them might affect scale partitioning. For more information, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md).
+
+To learn more about Azure Log Analytics, see [Get started with Log Analytics in Azure Monitor](../azure-monitor/logs/log-analytics-tutorial.md). Query the logs by using the [Kusto query language](/azure/kusto/query/).
+
+### Checklist for deploying your Spring application to Azure Spring Apps
+
+Before you onboard your application, ensure that it meets the following criteria:
+
+* The application can run locally with the specified Java runtime version.
+* The environment config (CPU/RAM/Instances) meets the minimum requirement set by the application provider.
+* The configuration items have their expected values. For more information, see [Set up a Spring Cloud Config Server instance for your service](./how-to-config-server.md). For enterprise tier, see [Use Application Configuration Service](./how-to-enterprise-application-configuration-service.md).
+* The environment variables have their expected values.
+* The JVM parameters have their expected values.
+* We recommended that you disable or remove the embedded *Config Server* and *Spring Service Registry* services from the application package.
+* If any Azure resources are to be bound via *Service Binding*, make sure the target resources are up and running.
+
+## Configuration and management
+
+### I encountered a problem with creating an Azure Spring Apps service instance
+
+When you set up an Azure Spring Apps service instance by using the Azure portal, Azure Spring Apps performs the validation for you.
+
+But if you try to set up the Azure Spring Apps service instance by using the [Azure CLI](/cli/azure/get-started-with-azure-cli) or the [Azure Resource Manager template](../azure-resource-manager/index.yml), verify that:
+
+* The subscription is active.
+* The location is [supported](./faq.md) by Azure Spring Apps.
+* The resource group for the instance is already created.
+* The resource name conforms to the naming rule. It must contain only lowercase letters, numbers, and hyphens. The first character must be a letter. The last character must be a letter or number. The value must contain from 2 to 32 characters.
+
+If you want to set up the Azure Spring Apps service instance by using the Resource Manager template, first refer to [Understand the structure and syntax of Azure Resource Manager templates](../azure-resource-manager/templates/syntax.md).
+
+The name of the Azure Spring Apps service instance will be used for requesting a subdomain name under `azureapps.io`, so the setup will fail if the name conflicts with an existing one. You might find more details in the activity logs.
+
+### I can't deploy a .NET Core app
+
+You can't upload a *.zip* file for a .NET Core Steeltoe app by using the Azure portal or the Resource Manager template.
+
+When you deploy your application package by using the [Azure CLI](/cli/azure/get-started-with-azure-cli), the Azure CLI periodically polls the deployment progress and, in the end, it displays the deployment result.
+
+Ensure that your application is packaged in the correct *.zip* file format. If it isn't packaged correctly, the process will stop responding or you will receive an error message.
+
+### I can't deploy a JAR package
+
+You can't upload Java Archive file (JAR)/source package by using the Azure portal or the Resource Manager template.
+
+When you deploy your application package by using the [Azure CLI](/cli/azure/get-started-with-azure-cli), the Azure CLI periodically polls the deployment progress and, in the end, it displays the deployment result.
+
+If the polling is interrupted, you can still use the following command to fetch the deployment logs:
+
+```azurecli
+az spring app show-deploy-log --name <app-name>
+```
+
+Ensure that your application is packaged in the correct [executable JAR format](https://docs.spring.io/spring-boot/docs/current/reference/html/executable-jar.html). If it isn't packaged correctly, you will receive an error message similar to the following: `Error: Invalid or corrupt jarfile /jar/38bc8ea1-a6bb-4736-8e93-e8f3b52c8714`
+
+### I can't deploy a source package
+
+You can't upload JAR/source package by using the Azure portal or the Resource Manager template.
+
+When you deploy your application package by using the [Azure CLI](/cli/azure/get-started-with-azure-cli), the Azure CLI periodically polls the deployment progress and, in the end, it displays the deployment result.
+
+If the polling is interrupted, you can still use the following command to fetch the build and deployment logs:
+
+```azurecli
+az spring app show-deploy-log --name <app-name>
+```
+
+However, note that one Azure Spring Apps service instance can trigger only one build job for one source package at one time. For more information, see [Deploy an application](./quickstart.md) and [Set up a staging environment in Azure Spring Apps](./how-to-staging-environment.md).
+
+### My application can't be registered
+
+In most cases, this situation occurs when *Required Dependencies* and *Service Discovery* aren't properly configured in your Project Object Model (POM) file. Once it's configured, the built-in Service Registry server endpoint is injected as an environment variable with your application. Applications then register themselves with the Service Registry server and discover other dependent applications.
+
+Wait at least two minutes before a newly registered instance starts receiving traffic.
+
+If you're migrating an existing Spring Cloud-based solution to Azure, ensure that your ad-hoc *Service Registry* and *Config Server* instances are removed (or disabled) to avoid conflicting with the managed instances provided by Azure Spring Apps.
+
+You can also check the *Service Registry* client logs in Azure Log Analytics. For more information, see [Analyze logs and metrics with diagnostics settings](diagnostic-services.md)
+
+To learn more about Azure Log Analytics, see [Get started with Log Analytics in Azure Monitor](../azure-monitor/logs/log-analytics-tutorial.md). Query the logs by using the [Kusto query language](/azure/kusto/query/).
+
+### I want to inspect my application's environment variables
+
+Environment variables inform the Azure Spring Apps framework, ensuring that Azure understands where and how to configure the services that make up your application. Ensuring that your environment variables are correct is a necessary first step in troubleshooting potential problems. You can use the Spring Boot Actuator endpoint to review your environment variables.
+
+> [!WARNING]
+> This procedure exposes your environment variables by using your test endpoint. Do not proceed if your test endpoint is publicly accessible or if you've assigned a domain name to your application.
+
+1. Go to `https://<your application test endpoint>/actuator/health`.
+
+ * A response similar to `{"status":"UP"}` indicates that the endpoint has been enabled.
+ * If the response is negative, include the following dependency in your *POM.xml* file:
+
+ ```xml
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ </dependency>
+ ```
+
+1. With the Spring Boot Actuator endpoint enabled, go to the Azure portal and look for the configuration page of your application. Add an environment variable with the name `MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE` and the value `*`.
+
+1. Restart your application.
+
+1. Go to `https://<your application test endpoint>/actuator/env` and inspect the response. It should look like this:
+
+ ```json
+ {
+ "activeProfiles": [],
+ "propertySources": {,
+ "name": "server.ports",
+ "properties": {
+ "local.server.port": {
+ "value": 1025
+ }
+ }
+ }
+ }
+ ```
+
+Look for the child node named `systemEnvironment`. This node contains your application's environment variables.
+
+> [!IMPORTANT]
+> Remember to reverse the exposure of your environment variables before making your application accessible to the public. Go to the Azure portal, look for the configuration page of your application, and delete this environment variable: `MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE`.
+
+### I can't find metrics or logs for my application
+
+Go to **App management** to ensure that the application statuses are *Running* and *UP*.
+
+Check to see whether *JMX* is enabled in your application package. This feature can be enabled with the configuration property `spring.jmx.enabled=true`.
+
+Check to see whether the `spring-boot-actuator` dependency is enabled in your application package and that it successfully boots up.
+
+```xml
+<dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+</dependency>
+```
+
+If your application logs can be archived to a storage account but not sent to Azure Log Analytics, check to see whether you [set up your workspace correctly](../azure-monitor/logs/quick-create-workspace.md). If you're using a free tier of Azure Log Analytics, note that [the free tier does not provide a service-level agreement (SLA)](https://azure.microsoft.com/support/legal/sla/log-analytics/v1_3/).
+
+## Enterprise tier
+
+### Error 112039: Failed to purchase on Azure Marketplace
+
+Creating an Azure Spring Apps Enterprise tier instance fails with error code "112039". Check the detailed error message for below for more information:
+
+* **"Failed to purchase on Azure Marketplace because the Microsoft.SaaS RP is not registered on the Azure subscription."** : Azure Spring Apps Enterprise tier purchase a SaaS offer from VMware.
+
+ You must register the Microsoft.SaaS resource provider before creating Azure Spring Apps Enterprise instance. See how to [register a resource provider](../azure-resource-manager/management/resource-providers-and-types.md#register-resource-provider).
+
+* **"Failed to load catalog product vmware-inc.azure-spring-cloud-vmware-tanzu-2 in the Azure subscription market."**: Your Azure subscription's billing account address is not in the supported location.
+
+ For more information, see the section [No plans are available for market '\<Location>'](#no-plans-are-available-for-market-location).
+
+* **"Failed to purchase on Azure Marketplace due to signature verification on Marketplace legal agreement. Check the Azure subscription has agree terms vmware-inc.azure-spring-cloud-vmware-tanzu-2.tanzu-asc-ent-mtr"**: Your Azure subscription has not signed the terms for the offer and plan to be purchased.
+
+ Go to your Azure subscription and run the following Azure CLI command to agree to the terms:
+
+ ```azurecli
+ az term accept \
+ --publisher vmware-inc \
+ --product azure-spring-cloud-vmware-tanzu-2 \
+ --plan tanzu-asc-ent-mtr
+ ```
+
+ If that doesn't help, you can contact the support team with the following info.
+
+ * `AZURE_TENANT_ID`: the Azure tenant ID that hosts the Azure subscription
+ * `AZURE_SUBSCRIPTION_ID`: the Azure subscription ID used to create the Azure Spring Apps instance
+ * `SPRING_CLOUD_NAME`: the failed instance name
+ * `ERROR_MESSAGE`: the observed error message
+
+### No plans are available for market '\<Location>'
+
+When you visit the SaaS offer [Azure Spring Apps Enterprise Tier](https://aka.ms/ascmpoffer) in the Azure Marketplace, it may say "No plans are available for market '\<Location>'" as in the following image.
+
+![No plans available error image](./media/enterprise/how-to-enterprise-marketplace-offer/no-enterprise-plans-available.png)
+
+Azure Spring Apps Enterprise tier needs customers to pay for a license to Tanzu components through an Azure Marketplace offer. To purchase in the Azure Marketplace, the billing account's country or region for your Azure subscription should be in the SaaS offer's supported geographic locations.
+
+[Azure Spring Apps Enterprise Tier](https://aka.ms/ascmpoffer) now supports all geographic locations that Azure Marketplace supports. See [Marketplace supported geographic location](../marketplace/marketplace-geo-availability-currencies.md#supported-geographic-locations).
+
+You can view the billing account for your subscription if you have admin access. See [view billing accounts](../cost-management-billing/manage/view-all-accounts.md#check-the-type-of-your-account).
+
+### I need VMware Spring Runtime Support (Enterprise tier only)
+
+Enterprise tier has built-in VMware Spring Runtime Support, so you can open support tickets to [VMware](https://aka.ms/ascevsrsupport) if you think your issue is in the scope of VMware Spring Runtime Support. To better understand VMware Spring Runtime Support itself, see the [VMware Spring Runtime](https://tanzu.vmware.com/spring-runtime). For more information on registering and using this support service, see the Support section in the [Enterprise tier FAQ from VMware](https://aka.ms/EnterpriseTierFAQ). For any other issues, open a support ticket with Microsoft.
+
+## Next steps
+
+* [How to self-diagnose and solve problems in Azure Spring Apps](./how-to-self-diagnose-solve.md)
spring-apps Troubleshooting Vnet https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/troubleshooting-vnet.md
+
+ Title: Troubleshooting Azure Spring Apps in virtual network
+description: Troubleshooting guide for Azure Spring Apps virtual network.
+++ Last updated : 09/19/2020++++
+# Troubleshooting Azure Spring Apps in virtual networks
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article will help you solve various problems that can arise when using Azure Spring Apps in virtual networks.
+
+## I encountered a problem with creating an Azure Spring Apps service instance
+
+To create an instance of Azure Spring Apps, you must have sufficient permission to deploy the instance to the virtual network. The Azure Spring Apps service instance must itself grant Azure Spring Apps service permission to the virtual network. For more information, see the [Grant service permission to the virtual network](./how-to-deploy-in-azure-virtual-network.md#grant-service-permission-to-the-virtual-network) section of [Deploy Azure Spring Apps in a virtual network](how-to-deploy-in-azure-virtual-network.md).
+
+If you use the Azure portal to set up the Azure Spring Apps service instance, the Azure portal will validate the permissions.
+
+To set up the Azure Spring Apps service instance by using the [Azure CLI](/cli/azure/get-started-with-azure-cli), verify that:
+
+- The subscription is active.
+- The location is supported by Azure Spring Apps.
+- The resource group for the instance is already created.
+- The resource name conforms to the naming rule. It must contain only lowercase letters, numbers, and hyphens. The first character must be a letter. The last character must be a letter or number. The value must contain from 2 to 32 characters.
+
+To set up the Azure Spring Apps service instance by using the Resource Manager template, refer to [Understand the structure and syntax of Azure Resource Manager templates](../azure-resource-manager/templates/syntax.md).
+
+### Common creation issues
+
+| Error Message | How to fix |
+|||
+| Resources created by Azure Spring Apps were disallowed by policy. | Network resources will be created when deploy Azure Spring Apps in your own virtual network. Please check whether you have [Azure Policy](../governance/policy/overview.md) defined to block those creation. Resources failed to be created can be found in error message. |
+| Required traffic is not allowlisted. | Please refer to [Customer Responsibilities for Running Azure Spring Apps in VNET](./vnet-customer-responsibilities.md) to ensure required traffic is allowlisted. |
+
+## My application can't be registered
+
+This problem occurs if your virtual network is configured with custom DNS settings. In this case, the private DNS zone used by Azure Spring Apps is ineffective. Add the Azure DNS IP 168.63.129.16 as the upstream DNS server in the custom DNS server.
+
+## Other issues
+
+[Troubleshoot common Azure Spring Apps issues](./troubleshoot.md)
spring-apps Tutorial Alerts Action Groups https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/tutorial-alerts-action-groups.md
+
+ Title: "Tutorial: Monitor Azure Spring Apps resources using alerts and action groups | Microsoft Docs"
+description: Learn how to use Spring app alerts.
++++ Last updated : 12/29/2019+++
+# Tutorial: Monitor Spring app resources using alerts and action groups
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Azure Spring Apps alerts support monitoring resources based on conditions such as available storage, rate of requests, or data usage. An alert sends notification when rates or conditions meet the defined specifications.
+
+There are two steps to set up an alert pipeline:
+
+1. Set up an Action Group with the actions to be taken when an alert is triggered, such as email, SMS, Runbook, or Webhook. Action Groups can be re-used among different alerts.
+2. Set up Alert rules. The rules bind metric patterns with the action groups based on target resource, metric, condition, time aggregation, etc.
+
+## Prerequisites
+
+In addition to the Azure Spring Apps requirements, the procedures in this tutorial work with a deployed Azure Spring Apps instance. Follow a [quickstart](./quickstart.md) to get started.
+
+The following procedures initialize both **Action Group** and **Alert** starting from the **Alerts** option in the left navigation pane of an Azure Spring Apps instance. (The procedure can also start from the **Monitor Overview** page of the Azure portal.)
+
+Navigate from a resource group to your Azure Spring Apps instance. Select **Alerts** in the left pane, then select **Manage actions**:
+
+![Screenshot portal resource group page](media/alerts-action-groups/action-1-a.png)
+
+## Set up Action Group
+
+To begin the procedure to initialize a new **Action Group**, select **Add action group**.
+
+![Screenshot portal Add action group](media/alerts-action-groups/action-1.png)
+
+On the **Add action group** page:
+
+1. Specify an **Action group name** and **Short name**.
+
+1. Specify **Subscription** and **Resource group**.
+
+1. Specify **Action Name**.
+
+1. Select **Action Type**. This will open another pane on the right to define the action that will be taken on activation.
+
+1. Define the action using the options in the right pane. This case uses email notification.
+
+1. Select **OK** in the right action pane.
+
+1. Select **OK** in the **Add action group** dialog.
+
+ ![Screenshot Portal define action](media/alerts-action-groups/action-2.png)
+
+## Set up Alert
+
+The previous steps created an **Action Group** that uses email. You could also use phone notification, webhooks, Azure functions, and so forth. The following steps configure an **Alert**.
+
+1. Navigate back to the **Alerts** page and then select **Manage Alert Rules**.
+
+ ![Screenshot Portal define alert](media/alerts-action-groups/alerts-2.png)
+
+1. Select the **Resource** for the alert.
+
+1. Select **New alert rule**.
+
+ ![Screenshot Portal new alert rule](media/alerts-action-groups/alerts-3.png)
+
+1. On the **Create rule** page, specify the **RESOURCE**.
+
+1. The **CONDITION** setting provides many options for monitoring your **Spring Cloud** resources. Select **Add** to open the **Configure signal logic** pane.
+
+1. Select a condition. This example uses **System CPU Usage Percentage**.
+
+ ![Screenshot Portal new alert rule 2](media/alerts-action-groups/alerts-3-1.png)
+
+1. Scroll down the **Configure signal logic** pane to set the **Threshold value** to monitor.
+
+ ![Screenshot Portal new alert rule 3](media/alerts-action-groups/alerts-3-2.png)
+
+1. Select **Done**.
+
+ For details of the conditions available to monitor, see [User portal metrics options](./concept-metrics.md#user-metrics-options).
+
+1. Under **ACTIONS**, select **Select action group**. From the **ACTIONS** pane select the previously defined **Action Group**.
+
+ ![Screenshot Portal new alert rule 4](media/alerts-action-groups/alerts-3-3.png)
+
+1. Scroll down, and under **ALERT DETAILS**, name the alert rule.
+
+1. Set the **Severity**.
+
+1. Select **Create alert rule**.
+
+ ![Screenshot Portal new alert rule 5](media/alerts-action-groups/alerts-3-4.png)
+
+1. Verify that the new alert rule is enabled.
+
+ ![Screenshot Portal new alert rule 6](media/alerts-action-groups/alerts-4.png)
+
+A rule can also be created using the **Metrics** page:
+
+![Screenshot Portal new alert rule 7](media/alerts-action-groups/alerts-5.png)
+
+## Next steps
+
+In this tutorial you learned how to set up alerts and action groups for an application in Azure Spring Apps. To learn more about action groups, see:
+
+> [!div class="nextstepaction"]
+> [Create and manage action groups in the Azure portal](../azure-monitor/alerts/action-groups.md)
+
+> [!div class="nextstepaction"]
+> [SMS Alert Behavior in Action Groups](../azure-monitor/alerts/alerts-sms-behavior.md)
spring-apps Tutorial Circuit Breaker https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/tutorial-circuit-breaker.md
+
+ Title: "Tutorial - Use Circuit Breaker Dashboard with Azure Spring Apps"
+description: Learn how to use circuit Breaker Dashboard with Azure Spring Apps.
++++ Last updated : 04/06/2020+++
+# Tutorial: Use Circuit Breaker Dashboard with Azure Spring Apps
+
+> [!WARNING]
+> Hystrix is no longer in active development and is currently in maintenance mode.
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Spring [Cloud Netflix Turbine](https://github.com/Netflix/Turbine) is widely used to aggregate multiple [Hystrix](https://github.com/Netflix/Hystrix) metrics streams so that streams can be monitored in a single view using Hystrix dashboard. This tutorial demonstrates how to use them on Azure Spring Apps.
+
+> [!NOTE]
+> Netflix Hystrix is widely used in many existing Spring apps but it is no longer in active development. If you are developing new project, use instead Spring Cloud Circuit Breaker implementations like [resilience4j](https://github.com/resilience4j/resilience4j). Different from Turbine shown in this tutorial, the new Spring Cloud Circuit Breaker framework unifies all implementations of its metrics data pipeline into Micrometer, which is also supported by Azure Spring Apps. [Learn More](./how-to-circuit-breaker-metrics.md).
+
+## Prepare your sample applications
+
+The sample is forked from this [repository](https://github.com/StackAbuse/spring-cloud/tree/master/spring-turbine).
+
+Clone the sample repository to your develop environment:
+
+```bash
+git clone https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples.git
+cd Azure-Spring-Cloud-Samples/hystrix-turbine-sample
+```
+
+Build the 3 applications that will be used in this tutorial:
+
+* user-service: A simple REST service that has a single endpoint of /personalized/{id}
+* recommendation-service: A simple REST service that has a single endpoint of /recommendations, which will be called by user-service.
+* hystrix-turbine: A Hystrix dashboard service to display Hystrix streams and a Turbine service aggregating Hystrix metrics stream from other services.
+
+```bash
+mvn clean package -D skipTests -f user-service/pom.xml
+mvn clean package -D skipTests -f recommendation-service/pom.xml
+mvn clean package -D skipTests -f hystrix-turbine/pom.xml
+```
+
+## Provision your Azure Spring Apps instance
+
+Follow the procedure, [Provision a service instance on the Azure CLI](./quickstart.md#provision-an-instance-of-azure-spring-apps).
+
+## Deploy your applications to Azure Spring Apps
+
+These apps do not use **Config Server**, so there is no need to set up **Config Server** for Azure Spring Apps. Create and deploy as follows:
+
+```azurecli
+az spring app create -n user-service --assign-endpoint
+az spring app create -n recommendation-service
+az spring app create -n hystrix-turbine --assign-endpoint
+
+az spring app deploy -n user-service --jar-path user-service/target/user-service.jar
+az spring app deploy -n recommendation-service --jar-path recommendation-service/target/recommendation-service.jar
+az spring app deploy -n hystrix-turbine --jar-path hystrix-turbine/target/hystrix-turbine.jar
+```
+
+## Verify your apps
+
+After all the apps are running and discoverable, access `user-service` with the path `https://<username>-user-service.azuremicroservices.io/personalized/1` from your browser. If the user-service can access `recommendation-service`, you should get the following output. Refresh the web page a few times if it doesn't work.
+
+```json
+[{"name":"Product1","description":"Description1","detailsLink":"link1"},{"name":"Product2","description":"Description2","detailsLink":"link3"},{"name":"Product3","description":"Description3","detailsLink":"link3"}]
+```
+
+## Access your Hystrix dashboard and metrics stream
+
+Verify using public endpoints or private test endpoints.
+
+### Using public endpoints
+
+Access hystrix-turbine with the path `https://<SERVICE-NAME>-hystrix-turbine.azuremicroservices.io/hystrix` from your browser. The following figure shows the Hystrix dashboard running in this app.
+
+![Hystrix dashboard](media/spring-cloud-circuit-breaker/hystrix-dashboard.png)
+
+Copy the Turbine stream url `https://<SERVICE-NAME>-hystrix-turbine.azuremicroservices.io/turbine.stream?cluster=default` into the text box, and select **Monitor Stream**. This will display the dashboard. If nothing shows in the viewer, hit the `user-service` endpoints to generate streams.
+
+![Hystrix stream](media/spring-cloud-circuit-breaker/hystrix-stream.png)
+Now you can experiment with the Circuit Breaker Dashboard.
+
+> [!NOTE]
+> In production, the Hystrix dashboard and metrics stream should not be exposed to the Internet.
+
+### Using private test endpoints
+
+Hystrix metrics streams are also accessible from `test-endpoint`. As a backend service, we didn't assign a public end-point for `recommendation-service`, but we can show its metrics with test-endpoint at `https://primary:<KEY>@<SERVICE-NAME>.test.azuremicroservices.io/recommendation-service/default/actuator/hystrix.stream`
+
+![Hystrix test-endpoint stream](media/spring-cloud-circuit-breaker/hystrix-test-endpoint-stream.png)
+
+As a web app, Hystrix dashboard should be working on `test-endpoint`. If it is not working properly, there may be two reasons: first, using `test-endpoint` changed the base URL from `/` to `/<APP-NAME>/<DEPLOYMENT-NAME>`, or, second, the web app is using absolute path for static resource. To get it working on `test-endpoint`, you might need to manually edit the `<base>` in the front-end files.
+
+## Next steps
+
+* [Provision a service instance on the Azure CLI](./quickstart.md#provision-an-instance-of-azure-spring-apps)
+* [Prepare a Java Spring application for deployment in Azure Spring Apps](how-to-prepare-app-deployment.md)
spring-apps Tutorial Custom Domain https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/tutorial-custom-domain.md
+
+ Title: "Tutorial: Map an existing custom domain to Azure Spring Apps"
+description: How to map an existing custom Distributed Name Service (DNS) name to Azure Spring Apps
+++ Last updated : 03/19/2020++++
+# Tutorial: Map an existing custom domain to Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ✔️ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+Domain Name Service (DNS) is a technique for storing network node names throughout a network. This tutorial maps a domain, such as www.contoso.com, using a CNAME record. It secures the custom domain with a certificate and shows how to enforce Transport Layer Security (TLS), also known as Secure Sockets Layer (SSL).
+
+Certificates encrypt web traffic. These TLS/SSL certificates can be stored in Azure Key Vault.
+
+## Prerequisites
+
+* An application deployed to Azure Spring Apps (see [Quickstart: Launch an existing application in Azure Spring Apps using the Azure portal](./quickstart.md), or use an existing app).
+* A domain name with access to the DNS registry for domain provider such as GoDaddy.
+* A private certificate (that is, your self-signed certificate) from a third-party provider. The certificate must match the domain.
+* A deployed instance of [Azure Key Vault](../key-vault/general/overview.md)
+
+## Keyvault Private Link Considerations
+
+The Azure Spring Apps management IPs are not yet part of the Azure Trusted Microsoft services. Therefore, to allow Azure Spring Apps to load certificates from a Key Vault protected with Private endpoint connections, you must add the following IPs to Azure Key Vault Firewall: `20.53.123.160 52.143.241.210 40.65.234.114 52.142.20.14 20.54.40.121 40.80.210.49 52.253.84.152 20.49.137.168 40.74.8.134 51.143.48.243`
+
+## Import certificate
+
+### Prepare your certificate file in PFX (optional)
+
+Azure Key Vault support importing private certificate in PEM and PFX format. If the PEM file you obtained from your certificate provider doesn't work in section below: [Save certificate in Key Vault](#save-certificate-in-key-vault), follow the steps here to generate a PFX for Azure Key Vault.
+
+#### Merge intermediate certificates
+
+If your certificate authority gives you multiple certificates in the certificate chain, you need to merge the certificates in order.
+
+To do this, open each certificate you received in a text editor.
+
+Create a file for the merged certificate, called _mergedcertificate.crt_. In a text editor, copy the content of each certificate into this file. The order of your certificates should follow the order in the certificate chain, beginning with your certificate and ending with the root certificate. It looks like the following example:
+
+```crt
+--BEGIN CERTIFICATE--
+<your entire Base64 encoded SSL certificate>
+--END CERTIFICATE--
+
+--BEGIN CERTIFICATE--
+<The entire Base64 encoded intermediate certificate 1>
+--END CERTIFICATE--
+
+--BEGIN CERTIFICATE--
+<The entire Base64 encoded intermediate certificate 2>
+--END CERTIFICATE--
+
+--BEGIN CERTIFICATE--
+<The entire Base64 encoded root certificate>
+--END CERTIFICATE--
+```
+
+#### Export certificate to PFX
+
+Export your merged TLS/SSL certificate with the private key that your certificate request was generated with.
+
+If you generated your certificate request using OpenSSL, then you have created a private key file. To export your certificate to PFX, run the following command. Replace the placeholders _&lt;private-key-file>_ and _&lt;merged-certificate-file>_ with the paths to your private key and your merged certificate file.
+
+```bash
+openssl pkcs12 -export -out myserver.pfx -inkey <private-key-file> -in <merged-certificate-file>
+```
+
+When prompted, define an export password. You'll use this password when uploading your TLS/SSL certificate to Azure Key Vault later.
+
+If you used IIS or _Certreq.exe_ to generate your certificate request, install the certificate to your local machine, and then [export the certificate to PFX](/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc754329(v=ws.11)).
+
+### Save certificate in Key Vault
+
+The procedure to import a certificate requires the PEM or PFX encoded file to be on disk and you must have the private key.
+
+#### [Portal](#tab/Azure-portal)
+To upload your certificate to key vault:
+1. Go to your key vault instance.
+1. In the left navigation pane, select **Certificates**.
+1. On the upper menu, select **Generate/import**.
+1. In the **Create a certificate** dialog under **Method of certificate creation**, select `Import`.
+1. Under **Upload Certificate File**, navigate to certificate location and select it.
+1. Under **Password**, if you are uploading a password protected certificate file, provide that password here. Otherwise, leave it blank. Once the certificate file is successfully imported, key vault will remove that password.
+1. Select **Create**.
+
+ ![Import certificate 1](./media/custom-dns-tutorial/import-certificate-a.png)
+
+#### [CLI](#tab/Azure-CLI)
+
+```azurecli
+az keyvault certificate import --file <path to .pfx file> --name <certificate name> --vault-name <key vault name> --password <export password>
+```
+++
+### Grant Azure Spring Apps access to your key vault
+
+You need to grant Azure Spring Apps access to your key vault before you import certificate:
+
+#### [Portal](#tab/Azure-portal)
+1. Go to your key vault instance.
+1. In the left navigation pane, select **Access Police**.
+1. On the upper menu, select **Add Access Policy**.
+1. Fill in the info, and select **Add** button, then **Save** access police.
+
+| Secret permission | Certificate permission | Select principal |
+|--|--|--|
+| Get, List | Get, List | Azure Spring Apps Domain-Management |
+
+![Import certificate 2](./media/custom-dns-tutorial/import-certificate-b.png)
+
+#### [CLI](#tab/Azure-CLI)
+
+Grant Azure Spring Apps read access to key vault, replace the *\<key vault resource group>* and *\<key vault name>* in the following command.
+
+```azurecli
+az keyvault set-policy -g <key vault resource group> -n <key vault name> --object-id 938df8e2-2b9d-40b1-940c-c75c33494239 --certificate-permissions get list --secret-permissions get list
+```
+++
+### Import certificate to Azure Spring Apps
+
+#### [Portal](#tab/Azure-portal)
+1. Go to your service instance.
+1. From the left navigation pane of your app, select **TLS/SSL settings**.
+1. Then select **Import Key Vault Certificate**.
+
+ ![Import certificate](./media/custom-dns-tutorial/import-certificate.png)
+
+1. When you have successfully imported your certificate, you'll see it in the list of **Private Key Certificates**.
+
+ ![Private key certificate](./media/custom-dns-tutorial/key-certificates.png)
+
+#### [CLI](#tab/Azure-CLI)
+
+```azurecli
+az spring certificate add --name <cert name> --vault-uri <key vault uri> --vault-certificate-name <key vault cert name>
+```
+
+To show a list of certificates imported:
+
+```azurecli
+az spring certificate list --resource-group <resource group name> --service <service name>
+```
+++
+> [!IMPORTANT]
+> To secure a custom domain with this certificate, you still need to bind the certificate to a specific domain. Follow the steps in this section: [Add SSL Binding](#add-ssl-binding).
+
+## Add Custom Domain
+You can use a CNAME record to map a custom DNS name to Azure Spring Apps.
+
+> [!NOTE]
+> The A record is not supported.
+
+### Create the CNAME record
+
+Go to your DNS provider and add a CNAME record to map your domain to the <service_name>.azuremicroservices.io. Here <service_name> is the name of your Azure Spring Apps instance. We support wildcard domain and sub domain.
+After you add the CNAME, the DNS records page will resemble the following example:
+
+![DNS records page](./media/custom-dns-tutorial/dns-records.png)
+
+## Map your custom domain to Azure Spring Apps app
+If you don't have an application in Azure Spring Apps, follow the instructions in [Quickstart: Launch an existing application in Azure Spring Apps using the Azure portal](./quickstart.md).
+
+#### [Portal](#tab/Azure-portal)
+Go to application page.
+
+1. Select **Custom Domain**.
+2. Then **Add Custom Domain**.
+
+ ![Custom domain](./media/custom-dns-tutorial/custom-domain.png)
+
+3. Type the fully qualified domain name for which you added a CNAME record, such as www.contoso.com. Make sure that Hostname record type is set to CNAME (<service_name>.azuremicroservices.io)
+4. Select **Validate** to enable the **Add** button.
+5. Select **Add**.
+
+ ![Add custom domain](./media/custom-dns-tutorial/add-custom-domain.png)
+
+One app can have multiple domains, but one domain can only map to one app. When you've successfully mapped your custom domain to the app, you'll see it on the custom domain table.
+
+![Custom domain table](./media/custom-dns-tutorial/custom-domain-table.png)
+
+#### [CLI](#tab/Azure-CLI)
+```azurecli
+az spring app custom-domain bind --domain-name <domain name> --app <app name> --resource-group <resource group name> --service <service name>
+```
+
+To show the list of custom domains:
+
+```azurecli
+az spring app custom-domain list --app <app name> --resource-group <resource group name> --service <service name>
+```
+++
+> [!NOTE]
+> A **Not Secure** label for your custom domain means that it's not yet bound to an SSL certificate. Any HTTPS request from a browser to your custom domain will receive an error or warning.
+
+## Add SSL binding
+
+#### [Portal](#tab/Azure-portal)
+In the custom domain table, select **Add ssl binding** as shown in the previous figure.
+1. Select your **Certificate** or import it.
+1. Select **Save**.
+
+ ![Add SSL binding 1](./media/custom-dns-tutorial/add-ssl-binding.png)
+
+#### [CLI](#tab/Azure-CLI)
+```azurecli
+az spring app custom-domain update --domain-name <domain name> --certificate <cert name> --app <app name> --resource-group <resource group name> --service <service name>
+```
+++
+After you successfully add SSL binding, the domain state will be secure: **Healthy**.
+
+![Add SSL binding 2](./media/custom-dns-tutorial/secured-domain-state.png)
+
+## Enforce HTTPS
+
+By default, anyone can still access your app using HTTP, but you can redirect all HTTP requests to the HTTPS port.
+#### [Portal](#tab/Azure-portal)
+In your app page, in the left navigation, select **Custom Domain**. Then, set **HTTPS Only**, to *True*.
+
+![Add SSL binding 3](./media/custom-dns-tutorial/enforce-http.png)
+
+#### [CLI](#tab/Azure-CLI)
+```azurecli
+az spring app update -n <app name> --resource-group <resource group name> --service <service name> --https-only
+```
+++
+When the operation is complete, navigate to any of the HTTPS URLs that point to your app. Note that HTTP URLs don't work.
+
+## Next steps
+
+* [What is Azure Key Vault?](../key-vault/general/overview.md)
+* [Import a certificate](../key-vault/certificates/certificate-scenarios.md#import-a-certificate)
+* [Launch your Spring Cloud App by using the Azure CLI](./quickstart.md)
spring-apps Tutorial Managed Identities Functions https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/tutorial-managed-identities-functions.md
+
+ Title: "Tutorial: Managed identity to invoke Azure Functions"
+description: Use managed identity to invoke Azure Functions from an Azure Spring Apps app
+++++ Last updated : 07/10/2020++
+# Tutorial: Use a managed identity to invoke Azure Functions from an Azure Spring Apps app
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to create a managed identity for an Azure Spring Apps app and use it to invoke Http triggered Functions.
+
+Both Azure Functions and App Services have built in support for Azure Active Directory (Azure AD) authentication. By leveraging this built-in authentication capability along with Managed Identities for Azure Spring Apps, we can invoke RESTful services using modern OAuth semantics. This method doesn't require storing secrets in code and provides more granular controls for controlling access to external resources.
+
+## Prerequisites
+
+* [Sign up for an Azure subscription](https://azure.microsoft.com/free/)
+* [Install the Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli)
+* [Install Maven 3.0 or above](https://maven.apache.org/download.cgi)
+* [Install the Azure Functions Core Tools version 3.0.2009 or higher](../azure-functions/functions-run-local.md#install-the-azure-functions-core-tools)
+
+## Create a resource group
+
+A resource group is a logical container into which Azure resources are deployed and managed. Create a resource group to contain both the Function app and Spring Cloud using the command [az group create](/cli/azure/group#az-group-create):
+
+```azurecli
+az group create --name myResourceGroup --location eastus
+```
+
+## Create a Function App
+
+To create a Function app you must first create a backing storage account, use the command [az storage account create](/cli/azure/storage/account#az-storage-account-create):
+
+> [!Important]
+> Each Function app and Storage Account must have a unique name. Replace *\<your-functionapp-name>* with the name of your Function app and *\<your-storageaccount-name>* with the name of your Storage Account in the following examples.
+
+```azurecli
+az storage account create --name <your-storageaccount-name> --resource-group myResourceGroup --location eastus --sku Standard_LRS
+```
+
+Once the Storage Account has been created, you can create the Function app.
+
+```azurecli
+az functionapp create --name <your-functionapp-name> --resource-group myResourceGroup --consumption-plan-location eastus --os-type windows --runtime node --storage-account <your-storageaccount-name> --functions-version 3
+```
+
+Make a note of the returned **hostNames**, which will be in the format *https://\<your-functionapp-name>.azurewebsites.net*. It will be used in a following step.
+
+## Enable Azure Active Directory Authentication
+
+Access the newly created Function app from the [Azure portal](https://portal.azure.com) and select "Authentication / Authorization" from the settings menu. Enable App Service Authentication and set the "Action to take when request is not authenticated" to "Log in with Azure Active Directory". This setting will ensure that all unauthenticated requests are denied (401 response).
+
+![Authentication settings showing Azure Active Directory as the default provider](media/spring-cloud-tutorial-managed-identities-functions/function-auth-config-1.jpg)
+
+Under Authentication Providers, select Azure Active Directory to configure the application registration. Selecting Express Management Mode will automatically create an application registration in your Azure AD tenant with the correct configuration.
+
+![Azure Active Directory provider set to Express Management Mode](media/spring-cloud-tutorial-managed-identities-functions/function-auth-config-2.jpg)
+
+Once you save the settings, the function app will restart and all subsequent requests will be prompted to log in via Azure AD. You can test that unauthenticated requests are now being rejected by navigating to the function apps root URL (returned in the **hostNames** output in the step above). You should be redirected to your organizations Azure AD login screen.
+
+## Create an Http Triggered Function
+
+In an empty local directory, create a new function app and add an Http triggered function.
+
+```console
+func init --worker-runtime node
+func new --template HttpTrigger --name HttpTrigger
+```
+
+By default Functions use key-based authentication to secure Http endpoints. Since we'll be enabling Azure AD authentication to secure access to the Functions, we want to [set the function auth level to anonymous](../azure-functions/functions-bindings-http-webhook-trigger.md#secure-an-http-endpoint-in-production) in the *function.json* file.
+
+```json
+{
+ "bindings": [
+ {
+ "authLevel": "anonymous",
+ "type": "httpTrigger",
+ ...
+ }
+ ]
+}
+```
+
+The app can now be published to the [Function app](#create-a-function-app) instance created in the previous step.
+
+```console
+func azure functionapp publish <your-functionapp-name>
+```
+
+The output from the publish command should list the URL to your newly created function.
+
+```output
+Deployment completed successfully.
+Syncing triggers...
+Functions in <your-functionapp-name>:
+ HttpTrigger - [httpTrigger]
+ Invoke url: https://<your-functionapp-name>.azurewebsites.net/api/httptrigger
+```
+
+## Create Azure Spring Apps service and app
+
+After installing the spring extension, create an Azure Spring Apps instance with the Azure CLI command `az spring create`.
+
+```azurecli
+az extension add --name spring
+az spring create --name mymsispringcloud --resource-group myResourceGroup --location eastus
+```
+
+The following example creates an app named `msiapp` with a system-assigned managed identity, as requested by the `--assign-identity` parameter.
+
+```azurecli
+az spring app create --name "msiapp" --service "mymsispringcloud" --resource-group "myResourceGroup" --assign-endpoint true --assign-identity
+```
+
+## Build sample Spring Boot app to invoke the Function
+
+This sample will invoke the Http triggered function by first requesting an access token from the [MSI endpoint](../active-directory/managed-identities-azure-resources/how-to-use-vm-token.md#get-a-token-using-http) and using that token to authenticate the Function http request.
+
+1. Clone the sample project.
+
+ ```bash
+ git clone https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples.git
+ ```
+
+2. Specify your function URI and the trigger name in your app properties.
+
+ ```bash
+ cd Azure-Spring-Cloud-Samples/managed-identity-function
+ vim src/main/resources/application.properties
+ ```
+
+ To use managed identity for Azure Spring Apps apps, add properties with the following content to *src/main/resources/application.properties*.
+
+ ```properties
+ azure.function.uri=https://<your-functionapp-name>.azurewebsites.net
+ azure.function.triggerPath=httptrigger
+ ```
+
+3. Package your sample app.
+
+ ```bash
+ mvn clean package
+ ```
+
+4. Now deploy the app to Azure with the Azure CLI command `az spring app deploy`.
+
+ ```azurecli
+ az spring app deploy --name "msiapp" --service "mymsispringcloud" --resource-group "myResourceGroup" --jar-path target/sc-managed-identity-function-sample-0.1.0.jar
+ ```
+
+5. Access the public endpoint or test endpoint to test your app.
+
+ ```bash
+ curl https://mymsispringcloud-msiapp.azuremicroservices.io/func/springcloud
+ ```
+
+ You'll see the following message returned in the response body.
+
+ ```output
+ Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
+ ```
+
+ You can try passing different values to the function by changing the path parameter.
+
+## Next steps
+
+* [How to enable system-assigned managed identity for applications in Azure Spring Apps](./how-to-enable-system-assigned-managed-identity.md)
+* [Learn more about managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md)
+* [Configure client apps to access your App Service](../app-service/configure-authentication-provider-aad.md#configure-client-apps-to-access-your-app-service)
spring-apps Tutorial Managed Identities Key Vault https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/tutorial-managed-identities-key-vault.md
+
+ Title: "Tutorial: Managed identity to connect Key Vault"
+description: Set up managed identity to connect Key Vault to an Azure Spring Apps app
++++ Last updated : 04/15/2022+++
+# Tutorial: Use a managed identity to connect Key Vault to an Azure Spring Apps app
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java ❌ C#
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article shows you how to create a managed identity for an Azure Spring Apps app and use it to access Azure Key Vault.
+
+Azure Key Vault can be used to securely store and tightly control access to tokens, passwords, certificates, API keys, and other secrets for your app. You can create a managed identity in Azure Active Directory (Azure AD), and authenticate to any service that supports Azure AD authentication, including Key Vault, without having to display credentials in your code.
+
+The following video describes how to manage secrets using Azure Key Vault.
+
+<br>
+
+> [!VIDEO https://www.youtube.com/embed/A8YQOoZncu8?list=PLPeZXlCR7ew8LlhnSH63KcM0XhMKxT1k_]
+
+## Prerequisites
+
+* [Sign up for an Azure subscription](https://azure.microsoft.com/free/)
+* [Install the Azure CLI version 2.0.67 or higher](/cli/azure/install-azure-cli)
+* [Install Maven 3.0 or above](https://maven.apache.org/download.cgi)
+
+## Create a resource group
+
+A resource group is a logical container into which Azure resources are deployed and managed. Create a resource group to contain both the Key Vault and Spring Cloud using the command [az group create](/cli/azure/group#az-group-create):
+
+```azurecli
+az group create --name "myResourceGroup" -l "EastUS"
+```
+
+## Set up your Key Vault
+
+To create a Key Vault, use the command [az keyvault create](/cli/azure/keyvault#az-keyvault-create):
+
+> [!Important]
+> Each Key Vault must have a unique name. Replace *\<your-keyvault-name>* with the name of your Key Vault in the following examples.
+
+```azurecli
+az keyvault create \
+ --resource-group <your-resource-group-name> \
+ --name "<your-keyvault-name>"
+```
+
+Make a note of the returned `vaultUri`, which will be in the format `https://<your-keyvault-name>.vault.azure.net`. It will be used in the following step.
+
+You can now place a secret in your Key Vault with the command [az keyvault secret set](/cli/azure/keyvault/secret#az-keyvault-secret-set):
+
+```azurecli
+az keyvault secret set \
+ --vault-name "<your-keyvault-name>" \
+ --name "connectionString" \
+ --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"
+```
+
+## Create Azure Spring Apps service and app
+
+After installing corresponding extension, create an Azure Spring Apps instance with the Azure CLI command `az spring create`.
+
+```azurecli
+az extension add --name spring
+az spring create \
+ --resource-group <your-resource-group-name> \
+ --name <your-Azure-Spring-Apps-instance-name>
+```
+
+### [System-assigned managed identity](#tab/system-assigned-managed-identity)
+
+The following example creates an app named `springapp` with a system-assigned managed identity, as requested by the `--system-assigned` parameter.
+
+```azurecli
+az spring app create \
+ --resource-group <your-resource-group-name> \
+ --name "springapp" \
+ --service <your-Azure-Spring-Apps-instance-name> \
+ --assign-endpoint true \
+ --system-assigned
+export SERVICE_IDENTITY=$(az spring app show --name "springapp" -s "myspringcloud" -g "myResourceGroup" | jq -r '.identity.principalId')
+```
+
+### [User-assigned managed identity](#tab/user-assigned-managed-identity)
+
+First, create a user-assigned managed identity in advance with its resource ID set to `$USER_IDENTITY_RESOURCE_ID`.
++
+```azurecli
+export SERVICE_IDENTITY={principal ID of user-assigned managed identity}
+export USER_IDENTITY_RESOURCE_ID={resource ID of user-assigned managed identity}
+export USER_IDENTITY_CLIENT_ID={client ID of user-assigned managed identity}
+```
+
+The following example creates an app named `springapp` with a user-assigned managed identity, as requested by the `--user-assigned` parameter.
+
+```azurecli
+az spring app create \
+ --resource-group <your-resource-group-name> \
+ --name "springapp" \
+ --service <your-Azure-Spring-Apps-instance-name> \
+ --assign-endpoint true \
+ --user-assigned $USER_IDENTITY_RESOURCE_ID
+az spring app show \
+ --resource-group <your-resource-group-name> \
+ --name "springapp" \
+ --service <your-Azure-Spring-Apps-instance-name>
+```
+++
+Make a note of the returned URL, which will be in the format `https://<your-app-name>.azuremicroservices.io`. This URL will be used in the following step.
+
+## Grant your app access to Key Vault
+
+Use the following command to grant proper access in Key Vault for your app:
+
+```azurecli
+az keyvault set-policy \
+ --name "<your-keyvault-name>" \
+ --object-id ${SERVICE_IDENTITY} \
+ --secret-permissions set get list
+```
+
+> [!NOTE]
+> For system-assigned managed identity case, use `az keyvault delete-policy --name "<your-keyvault-name>" --object-id ${SERVICE_IDENTITY}` to remove the access for your app after system-assigned managed identity is disabled.
+
+## Build a sample Spring Boot app with Spring Boot starter
+
+This app will have access to get secrets from Azure Key Vault. Use the Azure Key Vault Secrets Spring boot starter. Azure Key Vault is added as an instance of Spring **PropertySource**. Secrets stored in Azure Key Vault can be conveniently accessed and used like any externalized configuration property, such as properties in files.
+
+1. Use the following command to generate a sample project from `start.spring.io` with Azure Key Vault Spring Starter.
+
+ ```azurecli
+ curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault-secrets -d baseDir=springapp -d bootVersion=2.3.1.RELEASE -d javaVersion=1.8 | tar -xzvf -
+ ```
+
+1. Specify your Key Vault in your app.
+
+ ```azurecli
+ cd springapp
+ vim src/main/resources/application.properties
+ ```
+
+1. To use managed identity for Azure Spring Apps apps, add properties with the following content to the *src/main/resources/application.properties* file.
+
+### [System-assigned managed identity](#tab/system-assigned-managed-identity)
+
+```properties
+azure.keyvault.enabled=true
+azure.keyvault.uri=https://<your-keyvault-name>.vault.azure.net
+```
+
+### [User-assigned managed identity](#tab/user-assigned-managed-identity)
+
+```properties
+azure.keyvault.enabled=true
+azure.keyvault.uri=https://<your-keyvault-name>.vault.azure.net
+azure.keyvault.client-id={Client ID of user-assigned managed identity}
+```
+++
+ > [!NOTE]
+ > You must add the key vault URL in the *application.properties* file as shown above. Otherwise, the key vault URL may not be captured during runtime.
+
+1. Add the following code example to *src/main/java/com/example/demo/DemoApplication.java*. This code retrieves the connection string from the key vault.
+
+ ```Java
+ package com.example.demo;
+
+ import org.springframework.boot.SpringApplication;
+ import org.springframework.boot.autoconfigure.SpringBootApplication;
+ import org.springframework.beans.factory.annotation.Value;
+ import org.springframework.boot.CommandLineRunner;
+ import org.springframework.web.bind.annotation.GetMapping;
+ import org.springframework.web.bind.annotation.RestController;
+
+ @SpringBootApplication
+ @RestController
+ public class DemoApplication implements CommandLineRunner {
+
+ @Value("${connectionString}")
+ private String connectionString;
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoApplication.class, args);
+ }
+
+ @GetMapping("get")
+ public String get() {
+ return connectionString;
+ }
+
+ public void run(String... varl) throws Exception {
+ System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString));
+ }
+ }
+ ```
+
+ If you open the *pom.xml* file, you'll see the dependency of `azure-keyvault-secrets-spring-boot-starter`. Add this dependency to your project in your *pom.xml* file.
+
+ ```xml
+ <dependency>
+ <groupId>com.microsoft.azure</groupId>
+ <artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
+ </dependency>
+ ```
+
+1. Use the following command to package your sample app.
+
+ ```azurecli
+ mvn clean package
+ ```
+
+1. Now you can deploy your app to Azure with the following command:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <your-resource-group-name> \
+ --name "springapp" \
+ --service <your-Azure-Spring-Apps-instance-name> \
+ --jar-path target/demo-0.0.1-SNAPSHOT.jar
+ ```
+
+1. To test your app, access the public endpoint or test endpoint by using the following command:
+
+ ```azurecli
+ curl https://myspringcloud-springapp.azuremicroservices.io/get
+ ```
+
+ You'll see the message `Successfully got the value of secret connectionString from Key Vault https://<your-keyvault-name>.vault.azure.net/: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;`.
+
+## Build the sample Spring Boot app with Java SDK
+
+This sample can set and get secrets from Azure Key Vault. The [Azure Key Vault Secret client library for Java](/java/api/overview/azure/security-keyvault-secrets-readme) provides Azure Active Directory token authentication support across the Azure SDK. The library provides a set of `TokenCredential` implementations that you can use to construct Azure SDK clients to support Azure AD token authentication.
+
+The Azure Key Vault Secret client library enables you to securely store and control the access to tokens, passwords, API keys, and other secrets. The library offers operations to create, retrieve, update, delete, purge, back up, restore, and list the secrets and its versions.
+
+To build the sample, use the following steps:
+
+1. Clone the sample project.
+
+ ```azurecli
+ git clone https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples.git
+ ```
+
+1. Specify your key vault in your app.
+
+ ```azurecli
+ cd Azure-Spring-Cloud-Samples/managed-identity-keyvault
+ vim src/main/resources/application.properties
+ ```
+
+ To use managed identity for Azure Spring Apps apps, add properties with the following content to *src/main/resources/application.properties*.
+
+ ```properties
+ azure.keyvault.enabled=true
+ azure.keyvault.uri=https://<your-keyvault-name>.vault.azure.net
+ ```
+
+1. Include [ManagedIdentityCredentialBuilder](/java/api/com.azure.identity.managedidentitycredentialbuilder) to get a token from Azure Active Directory and [SecretClientBuilder](/java/api/com.azure.security.keyvault.secrets.secretclientbuilder) to set or get secrets from Key Vault in your code.
+
+ Get the example from the [MainController.java](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/blob/master/managed-identity-keyvault/src/main/java/com/microsoft/azure/MainController.java#L28) file of the cloned sample project.
+
+ Include `azure-identity` and `azure-security-keyvault-secrets` as a dependency in your *pom.xml* file. Get the example from the [pom.xml](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/blob/master/managed-identity-keyvault/pom.xml#L21) file of the cloned sample project.
+
+1. Use the following command to package your sample app.
+
+ ```azurecli
+ mvn clean package
+ ```
+
+1. Now deploy the app to Azure with the following command:
+
+ ```azurecli
+ az spring app deploy \
+ --resource-group <your-resource-group-name> \
+ --name "springapp" \
+ --service <your-Azure-Spring-Apps-instance-name> \
+ --jar-path target/asc-managed-identity-keyvault-sample-0.1.0.jar
+ ```
+
+1. Access the public endpoint or test endpoint to test your app.
+
+ First, get the value of your secret that you set in Azure Key Vault.
+
+ ```azurecli
+ curl https://myspringcloud-springapp.azuremicroservices.io/secrets/connectionString
+ ```
+
+ You'll see the message `Successfully got the value of secret connectionString from Key Vault https://<your-keyvault-name>.vault.azure.net/: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;`.
+
+ Now create a secret and then retrieve it using the Java SDK.
+
+ ```azurecli
+ curl -X PUT https://myspringcloud-springapp.azuremicroservices.io/secrets/test?value=success
+
+ curl https://myspringcloud-springapp.azuremicroservices.io/secrets/test
+ ```
+
+ You'll see the message `Successfully got the value of secret test from Key Vault https://<your-keyvault-name>.vault.azure.net: success`.
+
+## Next steps
+
+* [How to access Storage blob with managed identity in Azure Spring Apps](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/managed-identity-storage-blob)
+* [How to enable system-assigned managed identity for applications in Azure Spring Apps](./how-to-enable-system-assigned-managed-identity.md)
+* [Learn more about managed identities for Azure resources](../active-directory/managed-identities-azure-resources/overview.md)
+* [Authenticate Azure Spring Apps with Key Vault in GitHub Actions](./github-actions-key-vault.md)
spring-apps Tutorial Managed Identities Mysql https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/tutorial-managed-identities-mysql.md
+
+ Title: "Tutorial: Managed identity to connect an Azure Database for MySQL to apps in Azure Spring Apps"
+description: Set up managed identity to connect an Azure Database for MySQL to apps in Azure Spring Apps
++++ Last updated : 03/30/2022+++
+# Tutorial: Use a managed identity to connect an Azure Database for MySQL to an app in Azure Spring Apps
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Java
+
+This article shows you how to create a managed identity for an app in Azure Spring Apps. This article also shows you how to use the managed identity to access an Azure Database for MySQL with the MySQL password stored in Key Vault.
+
+The following video describes how to manage secrets using Azure Key Vault.
++
+> [!VIDEO https://www.youtube.com/embed/A8YQOoZncu8?list=PLPeZXlCR7ew8LlhnSH63KcM0XhMKxT1k_]
+
+## Prerequisites
+
+* [JDK 8](/azure/java/jdk/java-jdk-install)
+* [Maven 3.0 or above](http://maven.apache.org/install.html)
+* [Azure CLI](/cli/azure/install-azure-cli) or [Azure Cloud Shell](../cloud-shell/overview.md)
+* An existing Key Vault. If you need to create a Key Vault, you can use the [Azure portal](../key-vault/secrets/quick-create-portal.md) or [Azure CLI](/cli/azure/keyvault#az-keyvault-create)
+* An existing Azure Database for MySQL instance with a database named `demo`. If you need to create an Azure Database for MySQL, you can use the [Azure portal](../mysql/quickstart-create-mysql-server-database-using-azure-portal.md) or [Azure CLI](../mysql/quickstart-create-mysql-server-database-using-azure-cli.md)
+
+## Create a resource group
+
+A resource group is a logical container where Azure resources are deployed and managed. Create a resource group to contain both the Key Vault and Spring Cloud using the command [az group create](/cli/azure/group#az-group-create):
+
+```azurecli
+az group create --location <myLocation> --name <myResourceGroup>
+```
+
+## Set up your Key Vault
+
+To create a Key Vault, use the command [az keyvault create](/cli/azure/keyvault#az-keyvault-create):
+
+> [!IMPORTANT]
+> Each Key Vault must have a unique name. Replace *\<myKeyVaultName>* with the name of your Key Vault in the following examples.
+
+```azurecli
+az keyvault create --name <myKeyVaultName> -g <myResourceGroup>
+```
+
+Make a note of the returned `vaultUri`, which will be in the format `https://<your-keyvault-name>.vault.azure.net`. It will be used in the following step.
+
+You can now place a secret in your Key Vault with the command [az keyvault secret set](/cli/azure/keyvault/secret#az-keyvault-secret-set):
+
+```azurecli
+az keyvault secret set \
+ --vault-name <your-keyvault-name> \
+ --name <MYSQL-PASSWORD> \
+ --value <MySQL-PASSWORD>
+```
+
+## Set up your Azure Database for MySQL
+
+To create an Azure Database for MySQL, use the [Azure portal](../mysql/quickstart-create-mysql-server-database-using-azure-portal.md) or [Azure CLI](../mysql/quickstart-create-mysql-server-database-using-azure-cli.md)
+
+Create a database named *demo* for later use.
+
+```azurecli
+az mysql db create \
+ --resource-group <myResourceGroup> \
+ --name demo \
+ --server-name <mysqlName>
+```
+
+## Create an app and service in Azure Spring Apps
+
+After installing the corresponding extension, create an Azure Spring Apps instance with the Azure CLI command [az spring create](/cli/azure/spring#az-spring-cloud-create).
+
+```azurecli
+az extension add --name spring
+az spring create --name <myService> --group <myResourceGroup>
+```
+
+The following example creates an app named `springapp` with a system-assigned managed identity, as requested by the `--assign-identity` parameter.
+
+```azurecli
+az spring app create \
+ --name springapp
+ --service <myService>
+ --group <myResourceGroup> \
+ --assign-endpoint true \
+ --assign-identity
+export SERVICE_IDENTITY=$(az spring app show --name springapp -s <myService> -g <myResourceGroup> | jq -r '.identity.principalId')
+```
+
+Make a note of the returned `url`, which will be in the format `https://<your-app-name>.azuremicroservices.io`. It will be used in the following step.
+
+## Grant your app access to Key Vault
+
+Use [az keyvault set-policy](/cli/azure/keyvault#az-keyvault-set-policy) to grant proper access in Key Vault for your app.
+
+```azurecli
+az keyvault set-policy
+ --name <myKeyVaultName> \
+ --object-id ${SERVICE_IDENTITY} \
+ --secret-permissions set get list
+```
+
+> [!NOTE]
+> Use `az keyvault delete-policy --name <myKeyVaultName> --object-id ${SERVICE_IDENTITY}` to remove the access for your app after system-assigned managed identity is disabled.
+
+## Build a sample Spring Boot app with Spring Boot starter
+
+This [sample](https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples/tree/master/managed-identity-mysql) will create an entry and list entires from MySQL.
+
+1. Clone a sample project.
+
+ ```azurecli
+ git clone https://github.com/Azure-Samples/Azure-Spring-Cloud-Samples.git
+ ```
+
+2. Specify your Key Vault and Azure Database for MySQL information in your app's `application.properties`.
+
+ ```
+ spring.datasource.url=jdbc:mysql://<mysql-instance-name>.mysql.database.azure.com:3306/demo?serverTimezone=UTC
+ spring.datasource.username=<mysql-username>@<mysql-instance-name>
+ spring.cloud.azure.keyvault.secret.endpoint=https://<keyvault-instance-name>.vault.azure.net/
+ ```
+
+3. Package your sample app.
+
+ ```azurecli
+ mvn clean package
+ ```
+
+4. Now deploy the app to Azure with the Azure CLI command [az spring app deploy](/cli/azure/spring/app#az-spring-cloud-app-deploy).
+
+ ```azurecli
+ az spring app deploy \
+ --name springapp \
+ --service <myService> \
+ --group <myResourceGroup> \
+ --jar-path target/asc-managed-identity-mysql-sample-0.1.0.jar
+ ```
+
+5. Access the public endpoint or test endpoint to test your app.
+
+ ```
+ # Create an entry in table
+ curl --header "Content-Type: application/json" \
+ --request POST \
+ --data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
+ https://myspringcloud-springapp.azuremicroservices.io
+
+ # List entires in table
+ curl https://myspringcloud-springapp.azuremicroservices.io
+ ```
+
+## Next Steps
+
+* [Managed identity to connect Key Vault](tutorial-managed-identities-key-vault.md)
+* [Managed identity to invoke Azure functions](tutorial-managed-identities-functions.md)
spring-apps Vnet Customer Responsibilities https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/spring-apps/vnet-customer-responsibilities.md
+
+ Title: "Customer responsibilities running Azure Spring Apps in vnet"
+description: This article describes customer responsibilities running Azure Spring Apps in vnet.
++++ Last updated : 11/02/2021+++
+# Customer responsibilities for running Azure Spring Apps in VNET
+
+> [!NOTE]
+> Azure Spring Apps is the new name for the Azure Spring Cloud service. Although the service has a new name, you'll see the old name in some places for a while as we work to update assets such as screenshots, videos, and diagrams.
+
+**This article applies to:** ✔️ Basic/Standard tier ✔️ Enterprise tier
+
+This article includes specifications for the use of Azure Spring Apps in a virtual network.
+
+When Azure Spring Apps is deployed in your virtual network, it has outbound dependencies on services outside of the virtual network. For management and operational purposes, Azure Spring Apps must access certain ports and fully qualified domain names (FQDNs). Azure Spring Apps requires these endpoints to communicate with the management plane and to download and install core Kubernetes cluster components and security updates.
+
+By default, Azure Spring Apps has unrestricted outbound (egress) internet access. This level of network access allows applications you run to access external resources as needed. If you wish to restrict egress traffic, a limited number of ports and addresses must be accessible for maintenance tasks. The simplest solution to secure outbound addresses is use of a firewall device that can control outbound traffic based on domain names. Azure Firewall, for example, can restrict outbound HTTP and HTTPS traffic based on the FQDN of the destination. You can also configure your preferred firewall and security rules to allow these required ports and addresses.
+
+## Azure Spring Apps resource requirements
+
+The following list shows the resource requirements for Azure Spring Apps services. As a general requirement, you shouldn't modify resource groups created by Azure Spring Apps and the underlying network resources.
+
+- Don't modify resource groups created and owned by Azure Spring Apps.
+ - By default, these resource groups are named as `ap-svc-rt_[SERVICE-INSTANCE-NAME]_[REGION]*` and `ap_[SERVICE-INSTANCE-NAME]_[REGION]*`.
+ - Don't block Azure Spring Apps from updating resources in these resource groups.
+- Don't modify subnets used by Azure Spring Apps.
+- Don't create more than one Azure Spring Apps service instance in the same subnet.
+- When using a firewall to control traffic, don't block the following egress traffic to Azure Spring Apps components that operate, maintain, and support the service instance.
+
+## Azure Spring Apps network requirements
+
+| Destination Endpoint | Port | Use | Note |
+| | - | -- | |
+| \*:1194 *or* [ServiceTag](../virtual-network/service-tags-overview.md#available-service-tags) - AzureCloud:1194 | UDP:1194 | Underlying Kubernetes Cluster management. | |
+| \*:443 *or* [ServiceTag](../virtual-network/service-tags-overview.md#available-service-tags) - AzureCloud:443 | TCP:443 | Azure Spring Apps Service Management. | Information of service instance "requiredTraffics" could be known in resource payload, under "networkProfile" section. |
+| \*:9000 *or* [ServiceTag](../virtual-network/service-tags-overview.md#available-service-tags) - AzureCloud:9000 | TCP:9000 | Underlying Kubernetes Cluster management. | |
+| \*:123 *or* ntp.ubuntu.com:123 | UDP:123 | NTP time synchronization on Linux nodes. | |
+| \*.azure.io:443 *or* [ServiceTag](../virtual-network/service-tags-overview.md#available-service-tags) - AzureContainerRegistry:443 | TCP:443 | Azure Container Registry. | Can be replaced by enabling *Azure Container Registry* [service endpoint in virtual network](../virtual-network/virtual-network-service-endpoints-overview.md). |
+| \*.core.windows.net:443 and \*.core.windows.net:445 *or* [ServiceTag](../virtual-network/service-tags-overview.md#available-service-tags) - Storage:443 and Storage:445 | TCP:443, TCP:445 | Azure Files | Can be replaced by enabling *Azure Storage* [service endpoint in virtual network](../virtual-network/virtual-network-service-endpoints-overview.md). |
+| \*.servicebus.windows.net:443 *or* [ServiceTag](../virtual-network/service-tags-overview.md#available-service-tags) - EventHub:443 | TCP:443 | Azure Event Hubs. | Can be replaced by enabling *Azure Event Hubs* [service endpoint in virtual network](../virtual-network/virtual-network-service-endpoints-overview.md). |
+
+## Azure Spring Apps FQDN requirements/application rules
+
+Azure Firewall provides the FQDN tag **AzureKubernetesService** to simplify the following configurations:
+
+| Destination FQDN | Port | Use |
+| | | |
+| <i>*.azmk8s.io</i> | HTTPS:443 | Underlying Kubernetes Cluster management. |
+| <i>mcr.microsoft.com</i> | HTTPS:443 | Microsoft Container Registry (MCR). |
+| <i>*.cdn.mscr.io</i> | HTTPS:443 | MCR storage backed by the Azure CDN. |
+| <i>*.data.mcr.microsoft.com</i> | HTTPS:443 | MCR storage backed by the Azure CDN. |
+| <i>management.azure.com</i> | HTTPS:443 | Underlying Kubernetes Cluster management. |
+| <i>*login.microsoftonline.com</i> | HTTPS:443 | Azure Active Directory authentication. |
+| <i>*login.microsoft.com</i> | HTTPS:443 | Azure Active Directory authentication. |
+| <i>packages.microsoft.com</i> | HTTPS:443 | Microsoft packages repository. |
+| <i>acs-mirror.azureedge.net</i> | HTTPS:443 | Repository required to install required binaries like kubenet and Azure CNI. |
+| *mscrl.microsoft.com*<sup>1</sup> | HTTPS:80 | Required Microsoft Certificate Chain Paths. |
+| *crl.microsoft.com*<sup>1</sup> | HTTPS:80 | Required Microsoft Certificate Chain Paths. |
+| *crl3.digicert.com*<sup>1</sup> | HTTPS:80 | Third-Party TLS/SSL Certificate Chain Paths. |
+
+<sup>1</sup> Please note that these FQDNs aren't included in the FQDN tag.
+
+## Azure Spring Apps optional FQDN for third-party application performance management
+
+| Destination FQDN | Port | Use |
+| - | - | |
+| <i>collector*.newrelic.com</i> | TCP:443/80 | Required networks of New Relic APM agents from US region, also see [APM Agents Networks](https://docs.newrelic.com/docs/using-new-relic/cross-product-functions/install-configure/networks/#agents). |
+| <i>collector*.eu01.nr-data.net</i> | TCP:443/80 | Required networks of New Relic APM agents from EU region, also see [APM Agents Networks](https://docs.newrelic.com/docs/using-new-relic/cross-product-functions/install-configure/networks/#agents). |
+| <i>*.live.dynatrace.com</i> | TCP:443 | Required network of Dynatrace APM agents. |
+| <i>*.live.ruxit.com</i> | TCP:443 | Required network of Dynatrace APM agents. |
+| <i>*.saas.appdynamics.com</i> | TCP:443/80 | Required network of AppDynamics APM agents, also see [SaaS Domains and IP Ranges](https://docs.appdynamics.com/display/PAA/SaaS+Domains+and+IP+Ranges). |
+
+## Next steps
+
+- [Access your application in a private network](access-app-virtual-network.md)
+- [Expose applications with end-to-end TLS in a virtual network](expose-apps-gateway-end-to-end-tls.md)
storage Archive Rehydrate Overview https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/blobs/archive-rehydrate-overview.md
The following table shows the behavior of a blob copy operation, depending on th
### Rehydrate from a secondary region
-If you've configured your storage account to use read-access geo-redundant storage (RA-GRS) or read-access geo-zone-redundant storage (RA-GZRS), then you can use the [Copy Blob](/rest/api/storageservices/copy-blob) operation to rehydrate blobs in the secondary region to another storage account that is located in that same secondary region. See [Rehydrate from a secondary region](archive-rehydrate-to-online-tier.md#rehydrate-from-a-secondary-region).
+If you've configured your storage account to use read-access geo-redundant storage (RA-GRS), then you can use the [Copy Blob](/rest/api/storageservices/copy-blob) operation to rehydrate blobs in the secondary region to another storage account that is located in that same secondary region. See [Rehydrate from a secondary region](archive-rehydrate-to-online-tier.md#rehydrate-from-a-secondary-region).
To learn more about obtaining read access to secondary regions, see [Read access to data in the secondary region](../common/storage-redundancy.md?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json#read-access-to-data-in-the-secondary-region).
storage Archive Rehydrate To Online Tier https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/blobs/archive-rehydrate-to-online-tier.md
The copy operation is synchronous so when the command returns, it indicates that
#### Rehydrate from a secondary region
-If you've configured your storage account to use read-access geo-redundant storage (RA-GRS) or read-access geo-zone-redundant storage (RA-GZRS), then you can copy an archived blob that is located in a secondary region to an online tier in a different storage account that is located in that same secondary region.
+If you've configured your storage account to use read-access geo-redundant storage (RA-GRS), then you can copy an archived blob that is located in a secondary region to an online tier in a different storage account that is located in that same secondary region.
To rehydrate from a secondary region, use the same guidance that is presented in the previous section ([Rehydrate a blob to a different storage account in the same region](#rehydrate-a-blob-to-a-different-storage-account-in-the-same-region). Append the suffix `ΓÇôsecondary` to the account name of the source endpoint. For example, if your primary endpoint for Blob storage is `myaccount.blob.core.windows.net`, then the secondary endpoint is `myaccount-secondary.blob.core.windows.net`. The account access keys for your storage account are the same for both the primary and secondary endpoints.
storage Blob Containers Cli https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/blobs/blob-containers-cli.md
Use the `az storage container list` command to retrieve a list of storage contai
The `--num-results` parameter can be used to limit the number of containers returned by the request. Azure Storage limits the number of containers returned by a single listing operation to 5000. This limit ensures that manageable amounts of data are retrieved. If the number of containers returned exceeds either the `--num-results` value or the service limit, a continuation token is returned. This token allows you to use multiple requests to retrieve any number of containers.
-You can also use the `--query` parameter to execute a [JMESPath query](https://jmespath.org/) on the results of commands. JMESPath is a query language for JSON that allows you to select and modify data returned from CLI output. Queries are executed on the JSON output before it can be formatted. For more information, see [How to query Azure CLI command output using a JMESPath query](/cli/azure/query-azure-cli).
+You can also use the `--query` parameter to execute a [JMESPath query](/cli/azure/query-azure-cli) on the results of commands. JMESPath is a query language for JSON that allows you to select and modify data returned from CLI output. Queries are executed on the JSON output before it can be formatted. For more information, see [How to query Azure CLI command output using a JMESPath query](/cli/azure/query-azure-cli).
The following example first lists the maximum number of containers (subject to the service limit). Next, it lists three containers whose names begin with the prefix *container-* by supplying values for the `--num-results` and `--prefix` parameters. Finally, a single container is listed by supplying a known container name to the `--prefix` parameter.
storage Storage Auth Abac Examples https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/common/storage-auth-abac-examples.md
description: Example Azure role assignment conditions for Azure attribute-based access control (Azure ABAC). + Previously updated : 05/24/2022 Last updated : 07/28/2022 #Customer intent: As a dev, devops, or it admin, I want to learn about the conditions so that I write more complex conditions.
You must add this condition to any role assignments that include the following a
> | Action | Notes | > | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
![Diagram of condition showing read access to blobs with a blob index tag.](./media/storage-auth-abac-examples/blob-index-tags-read.png)
There are two actions that allow you to create new blobs, so you must target bot
> | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
![Diagram of condition showing new blobs must include a blob index tag.](./media/storage-auth-abac-examples/blob-index-tags-new-blobs.png)
There are two actions that allow you to update tags on existing blobs, so you mu
> | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
![Diagram of condition showing existing blobs must have blob index tag keys.](./media/storage-auth-abac-examples/blob-index-tags-keys.png)
There are two actions that allow you to update tags on existing blobs, so you mu
> | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
![Diagram of condition showing existing blobs must have a blob index tag key and values.](./media/storage-auth-abac-examples/blob-index-tags-key-values.png)
You must add this condition to any role assignments that include the following a
> | Action | Notes | > | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
![Diagram of condition showing read access to blobs with a blob index tag and a path.](./media/storage-auth-abac-examples/blob-index-tags-path-read.png)
You must add this condition to any role assignments that include the following a
> | Action | Notes | > | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
![Diagram of condition showing read access to blobs with encryption scope validScope1 or validScope2.](./media/storage-auth-abac-examples/encryption-scope-read-blobs.png)
You must add this condition to any role assignments that include the following a
> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
> [!NOTE] > Since encryption scopes for different storage accounts could be different, it's recommended to use the `storageAccounts:name` attribute with the `encryptionScopes:name` attribute to restrict the specific encryption scope to be allowed.
You must add this condition to any role assignments that include the following a
> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write` | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
For more information, see [Allow read access to blobs based on tags and custom security attributes](../../role-based-access-control/conditions-custom-security-attributes.md).
You must add this condition to any role assignments that include the following a
> | Action | Notes | > | | | > | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read` | |
+> | `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action` | Add if role definition includes this action, such as Storage Blob Data Owner. |
For more information, see [Allow read access to blobs based on tags and custom security attributes](../../role-based-access-control/conditions-custom-security-attributes.md).
storage Storage Auth Abac Security https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/common/storage-auth-abac-security.md
Previously updated : 05/06/2021 Last updated : 07/29/2022
For the [Copy Blob](/rest/api/storageservices/Copy-Blob) and [Copy Blob From URL
For conditions on the source blob, `@Resource` conditions on the `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read` action are evaluated.
-### Behavior for Get Page Ranges
-
-For the [Get Page Ranges](/rest/api/storageservices/get-page-ranges) operation, `@Resource` conditions using `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags` as an attribute on the `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read` action and its suboperations are evaluated only for the destination blob.
-
-Conditions don't apply for access to the blob specified by the `prevsnapshot` URI parameter in the API.
- ## See also - [Authorize access to blobs using Azure role assignment conditions (preview)](storage-auth-abac.md)
storage Storage Files Identity Ad Ds Enable https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/storage/files/storage-files-identity-ad-ds-enable.md
Previously updated : 07/14/2022 Last updated : 07/29/2022
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
# Import AzFilesHybrid module Import-Module -Name AzFilesHybrid
-# Login with an Azure AD credential that has either storage account owner or contributor Azure role assignment
-# If you are logging into an Azure environment other than Public (ex. AzureUSGovernment) you will need to specify that.
+# Login with an Azure AD credential that has either storage account owner or contributor Azure role
+# assignment. If you are logging into an Azure environment other than Public (ex. AzureUSGovernment)
+# you will need to specify that.
# See https://docs.microsoft.com/azure/azure-government/documentation-government-get-started-connect-with-ps # for more information. Connect-AzAccount # Define parameters # $StorageAccountName is the name of an existing storage account that you want to join to AD
-# $SamAccountName is the name of the to-be-created AD object, which is used by AD as the logon name for the object. See https://docs.microsoft.com/en-us/windows/win32/adschema/a-samaccountname
-# for more information.
+# $SamAccountName is the name of the to-be-created AD object, which is used by AD as the logon name
+# for the object.
+# See https://docs.microsoft.com/en-us/windows/win32/adschema/a-samaccountname for more information.
$SubscriptionId = "<your-subscription-id-here>" $ResourceGroupName = "<resource-group-name-here>" $StorageAccountName = "<storage-account-name-here>" $SamAccountName = "<sam-account-name-here>" $DomainAccountType = "<ComputerAccount|ServiceLogonAccount>" # Default is set as ComputerAccount
-# If you don't provide the OU name as an input parameter, the AD identity that represents the storage account is created under the root directory.
+# ServiceLogonAccount does not support AES256 encryption.
+# If you don't provide the OU name as an input parameter, the AD identity that represents the
+# storage account is created under the root directory.
$OuDistinguishedName = "<ou-distinguishedname-here>" # Specify the encryption algorithm used for Kerberos authentication. Using AES256 is recommended. $EncryptionType = "<AES256|RC4|AES256,RC4>"
$EncryptionType = "<AES256|RC4|AES256,RC4>"
# Select the target subscription for the current session Select-AzSubscription -SubscriptionId $SubscriptionId
-# Register the target storage account with your active directory environment under the target OU (for example: specify the OU with Name as "UserAccounts" or DistinguishedName as "OU=UserAccounts,DC=CONTOSO,DC=COM").
-# You can use to this PowerShell cmdlet: Get-ADOrganizationalUnit to find the Name and DistinguishedName of your target OU. If you are using the OU Name, specify it with -OrganizationalUnitName as shown below. If you are using the OU DistinguishedName, you can set it with -OrganizationalUnitDistinguishedName. You can choose to provide one of the two names to specify the target OU.
-# You can choose to create the identity that represents the storage account as either a Service Logon Account or Computer Account (default parameter value), depends on the AD permission you have and preference.
-# Run Get-Help Join-AzStorageAccountForAuth for more details on this cmdlet.
+# Register the target storage account with your active directory environment under the target OU
+# (for example: specify the OU with Name as "UserAccounts" or DistinguishedName as
+# "OU=UserAccounts,DC=CONTOSO,DC=COM"). You can use this PowerShell cmdlet: Get-ADOrganizationalUnit
+# to find the Name and DistinguishedName of your target OU. If you are using the OU Name, specify it
+# with -OrganizationalUnitName as shown below. If you are using the OU DistinguishedName, you can set it
+# with -OrganizationalUnitDistinguishedName. You can choose to provide one of the two names to specify
+# the target OU. You can choose to create the identity that represents the storage account as either a
+# Service Logon Account or Computer Account (default parameter value), depending on your AD permissions
+# and preference. Run Get-Help Join-AzStorageAccountForAuth for more details on this cmdlet. Note that
+# Service Logon Accounts do not support AES256 encryption.
Join-AzStorageAccount ` -ResourceGroupName $ResourceGroupName `
Join-AzStorageAccount `
-OrganizationalUnitDistinguishedName $OuDistinguishedName ` -EncryptionType $EncryptionType
-#Run the command below to enable AES256 encryption. If you plan to use RC4, you can skip this step.
+# Run the command below to enable AES256 encryption. If you plan to use RC4, you can skip this step.
+# Note that if you set $DomainAccountType to ServiceLogonAccount, running this command will change
+# the account type to ComputerAccount because ServiceLogonAccount doesn't support AES256.
Update-AzStorageAccountAuthForAES256 -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName
-#You can run the Debug-AzStorageAccountAuth cmdlet to conduct a set of basic checks on your AD configuration with the logged on AD user. This cmdlet is supported on AzFilesHybrid v0.1.2+ version. For more details on the checks performed in this cmdlet, see Azure Files Windows troubleshooting guide.
+# You can run the Debug-AzStorageAccountAuth cmdlet to conduct a set of basic checks on your AD configuration
+# with the logged on AD user. This cmdlet is supported on AzFilesHybrid v0.1.2+ version. For more details on
+# the checks performed in this cmdlet, see Azure Files Windows troubleshooting guide.
Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose ```
First, you must check the state of your environment. Specifically, you must chec
To create this account manually, first create a new Kerberos key for your storage account and get the access key using the PowerShell cmdlets below. This key is only used during setup. It can't be used for any control or data plane operations against the storage account. ```PowerShell
-# Create the Kerberos key on the storage account and get the Kerb1 key as the password for the AD identity to represent the storage account
+# Create the Kerberos key on the storage account and get the Kerb1 key as the password for the AD identity
+# to represent the storage account
$ResourceGroupName = "<resource-group-name-here>" $StorageAccountName = "<storage-account-name-here>"
synapse-analytics Apache Spark Troubleshoot Library Errors https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/synapse-analytics/spark/apache-spark-troubleshoot-library-errors.md
To view these logs:
4. Within the results, you'll see the logs related to the installation of your packages. ![Screenshot that highlights system reserved library job results.](./media/apache-spark-azure-portal-add-libraries/system-reserved-library-job-results.png "View system library job progress")
+## Track installation failures
+In certain cases, users can also inspect the full installation logs available in the Spark History Server to identify complicated dependency conflicts. The logs available through the Spark UI could be truncated and accessing the full installation logs through the Spark History Server would be useful in complex library installation scenarios.
+
+To view the full installation logs:
+1. Navigate to the Spark applications list in the **Monitor** tab.
+2. Select the system Spark application job that corresponds to the failed pool update. These system jobs run under the *SystemReservedJob-LibraryManagement* title.
+ ![Screenshot that highlights the failed system reserved library job.](./media/apache-spark-azure-portal-add-libraries/system-reserved-library-job-failure.png "View failed system library job")
+3. Select the highlighted **Spark history server** option which would open the Spark history server details page in a new tab.
+ ![Screenshot that highlights the details of the failed system reserved library job.](./media/apache-spark-azure-portal-add-libraries/system-reserved-library-job-failure-details.png "View details of failed system library job")
+4. In this page, you will see 2 attempts, select **Attempt 1** as shown below.
+ ![Screenshot that highlights the executor details in the spark history server page for the failed system reserved library job.](./media/apache-spark-azure-portal-add-libraries/spark-history-server-executors.png "View executor detaols in spark history server page")
+5. On the top navigation bar in the Spark history server page, switch to the **Executors** tab.
+ ![Screenshot that highlights the job details in the spark history server page for the failed system reserved library job.](./media/apache-spark-azure-portal-add-libraries/spark-history-server-page.png "View the job details in the spark history server page")
+6. Download the **stdout** and **stderr** log files to access the full library management output and error logs.
+ ![Screenshot that highlights the spark history server page for the failed system reserved library job.](./media/apache-spark-azure-portal-add-libraries/spark-history-server-executors-details.png "View stdout and stderr logs in the spark history server page")
+ ## Validate your permissions To install and update libraries, you must have the **Storage Blob Data Contributor** or **Storage Blob Data Owner** permissions on the primary Azure Data Lake Storage Gen2 Storage account that is linked to the Azure Synapse Analytics workspace.
To recreate the environment and validate your updates:
conda activate myenv ```
- 3. Use ``pip install -r <provide your req.txt file>`` to update the virtual environment with your specified packages. If the installation results in an error, then there may be a a conflict between what is pre-installed in the Synapse base runtime and what is specified in the provided requirements file. These dependency conflicts must be resolved in order to get the updated libraries on your serverless Apache Spark pool.
+ 3. Use ``pip install -r <provide your req.txt file>`` to update the virtual environment with your specified packages. If the installation results in an error, then there may be a conflict between what is pre-installed in the Synapse base runtime and what is specified in the provided requirements file. These dependency conflicts must be resolved in order to get the updated libraries on your serverless Apache Spark pool.
>[!IMPORTANT] >Issues may arrise when using pip and conda together. When combining pip and conda, it's best to follow these [recommended best practices](https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#activating-an-environment). ## Next steps-- View the default libraries: [Apache Spark version support](apache-spark-version-support.md)
+- View the default libraries: [Apache Spark version support](apache-spark-version-support.md)
synapse-analytics Sql Data Warehouse How To Troubleshoot Missed Classification https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/synapse-analytics/sql-data-warehouse/sql-data-warehouse-how-to-troubleshoot-missed-classification.md
Azure Synapse Analytics provides workload management capabilities like [classify
However, in some scenarios, a combination of these capabilities can lead to workload classification that doesn't reflect user intent. This article lists such common scenarios and how to troubleshoot them. First, you should query basic information for troubleshooting misclassified workload scenarios. > [!NOTE]
-> Classifying managed identities (MI) behavior differs between the dedicated SQL pool in Azure Synapse workspaces and the standalone dedicated SQL pool (formerly SQL DW). While the standalone dedicated SQL pool MI maintains the assigned identity, Azure Synapse workspaces adds MI to the **dbo** role. This cannot be changed. The dbo role, by default, is classified to smallrc. Creating a classifier for the dbo role allows for assigning requests to a workload group other than smallrc. If dbo alone is too generic for classification and has broader impacts, consider using label, session or time-based classification in conjunction with the dbo role classification.
+> Classifying managed identities (MI) behavior differs between the dedicated SQL pool in Azure Synapse workspaces and the standalone dedicated SQL pool (formerly SQL DW). While the standalone dedicated SQL pool MI maintains the assigned identity, for Azure Synapse workspaces the MI runs as **dbo**. This cannot be changed. The dbo role, by default, is classified to smallrc. Creating a classifier for the dbo role allows for assigning requests to a workload group other than smallrc. If dbo alone is too generic for classification and has broader impacts, consider using label, session or time-based classification in conjunction with the dbo role classification.
## Basic troubleshooting information
synapse-analytics Sql Data Warehouse Workload Classification https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/synapse-analytics/sql-data-warehouse/sql-data-warehouse-workload-classification.md
The `membername` parameter is mandatory. However, if the membername specified i
If a user is a member of multiple roles with different resource classes assigned or matched in multiple classifiers, the user is given the highest resource class assignment. This behavior is consistent with existing resource class assignment behavior. > [!NOTE]
-> Classifying managed identities (MI) behavior differs between the dedicated SQL pool in Azure Synapse workspaces and the standalone dedicated SQL pool (formerly SQL DW). While the standalone dedicated SQL pool MI maintains the assigned identity, Azure Synapse workspaces adds MI to the **dbo** role. This cannot be changed. The dbo role, by default, is classified to smallrc. Creating a classifier for the dbo role allows for assigning requests to a workload group other than smallrc. If dbo alone is too generic for classification and has broader impacts, consider using label, session or time-based classification in conjunction with the dbo role classification.
+> Classifying managed identities (MI) behavior differs between the dedicated SQL pool in Azure Synapse workspaces and the standalone dedicated SQL pool (formerly SQL DW). While the standalone dedicated SQL pool MI maintains the assigned identity, for Azure Synapse workspaces the MI runs as **dbo**. This cannot be changed. The dbo role, by default, is classified to smallrc. Creating a classifier for the dbo role allows for assigning requests to a workload group other than smallrc. If dbo alone is too generic for classification and has broader impacts, consider using label, session or time-based classification in conjunction with the dbo role classification.
## System classifiers
virtual-desktop Move Resources https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/move-resources.md
In this article, we'll tell you how to move Azure Virtual Desktop resources between Azure regions.
-**_NOTE:_** This process does not perform an actual resource move. Rather it does a delete and recreate in the new region which is different. Hence we recommend you test this process before using on production workloads to understand the impact of doing this.
+>[!NOTE]
+>This process doesn't perform an actual resource move. Instead, you delete the old resources and recreate them in the region you want to move the resources to. We recommend you test this process before using it on production workloads to understand how it will impact your deployment.
+>
+> The information in this article applies to all Azure Virtual Desktop resources, including host pools, application groups, scaling plans, and workspaces.
## Important information
When you move Azure Virtual Desktop resources between regions, these are some th
- Workspaces and their associated app groups also need to be in the same region.
+- Scaling plans and the host pools they are assigned to also need to be in the same region.
+ - All resources to be moved have to be in the same resource group. Template exports require having resources in the same group, so if you want them to be in a different location, you'll need to modify the exported template to change the location of its resources. -- Once you're done moving your resources to a new region, you must delete the original resources. The resource ID of our resources won't change during the moving process, so there will be a name conflict with your old resources if you don't delete them.
+- Once you're done moving your resources to a new region, you must delete the original resources. The resource ID of your resources won't change during the moving process, so there will be a name conflict with your old resources if you don't delete them.
- Existing session hosts attached to a host pool that you move will stop working. You'll need to recreate the session hosts in the new region.
To modify the template you exported:
2. In each resource inside the template file, find the "location" property and modify it to the location you want to move them to. For example, if your deployment's currently in the East US region but you want to move it to the West US region, you'd change the "eastus" location to "westus." Learn more about which Azure regions you can use at [Azure geographies](https://azure.microsoft.com/global-infrastructure/geographies/#geographies).
-3. For each host pool, remove the "publicNetworkAccess" parameter, if present.
+3. If you are moving a host pool, remove the "publicNetworkAccess" parameter, if present.
## Delete original resources
virtual-desktop Sandbox https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/sandbox.md
+
+ Title: Azure Virtual Desktop Sandbox - Azure
+description: How to set up Windows Sandbox for Azure Virtual Desktop.
++ Last updated : 07/29/2022++++
+# Set up Windows Sandbox in Azure Virtual Desktop
+
+This topic will walk you through how to publish Windows Sandbox for your users in an Azure Virtual Desktop environment.
+
+## Prerequisites
+
+Before you get started, here's what you need to configureWindows Sandbox in Azure Virtual Desktop:
+
+- A working Azure profile that can access the Azure portal.
+- A functioning Azure Virtual Desktop deployment. To learn how to deploy Azure Virtual Desktop (classic), see [Create a tenant in Azure Virtual Desktop](./virtual-desktop-fall-2019/tenant-setup-azure-active-directory.md). To learn how to deploy Azure Virtual Desktop with Azure Resource Manager integration, see [Create a host pool with the Azure portal](create-host-pools-azure-marketplace.md).
+
+## Prepare the VHD image for Azure
+
+First, you'll need to create a master VHD image. If you haven't created your master VHD image yet, go to [Prepare and customize a master VHD image](set-up-customize-master-image.md) and follow the instructions there. When you're given the option to select an operating system (OS) for your master image, select either Windows 10 or Windows 11.
+
+When customizing your master image, you'll need to enable the **Containers-DisposableClientVM** feature by running the following command:
+
+```powershell
+Enable-WindowsOptionalFeature -FeatureName "Containers-DisposableClientVM" -All -Online
+```
+
+>[!NOTE]
+>This change will require that you restart the virtual machine.
+
+Once you've uploaded the VHD to Azure, create a host pool that's based on this new image by following the instructions in the [Create a host pool by using the Azure Marketplace](create-host-pools-azure-marketplace.md) tutorial.
+
+## Publish Windows Sandbox on your host pool
+
+### [Azure portal](#tab/azure)
+
+To publish Windows Sandbox to your host pool:
+
+1. Sign in to the Azure portal.
+
+2. In the search bar, enter **Azure Virtual Desktop** and select the matching service entry.
+
+3. Select **Application groups**, then select the name of the application group in the host pool you want to publish Windows Sandbox to.
+
+4. Once you're in the application group, select the **Applications** tab. The Applications grid will display all existing apps within the app group.
+
+5. Select **+ Add** to open the **Add application** tab.
+
+6. For **Application source**, select **File Path**.
+
+7. For **Application path**, enter **C:\windows\system32\WindowsSandbox.exe**.
+
+8. Enter **Windows Sandbox** into the **Application Name** field.
+
+9. When you're done, select **Save**.
+
+### [PowerShell](#tab/powershell)
+
+To publish Windows Sandbox to your host pool using PowerShell:
+
+1. Connect to Azure using one of the following methods:
+
+ - Open a PowerShell prompt on your local device. Run the `Connect-AzAccount` cmdlet to sign in to your Azure account. For more information, see [Sign in with Azure PowerShell](https://github.com/powershell/azure/authenticate-azureps).
+ - Sign in to [the Azure portal](https://portal.azure.com/) and open [Azure Cloud Shell](https://github.com/MicrosoftDocs/azure-docs-pr/pull/cloud-shell/overview.md) with PowerShell as the shell type.
+
+2. Run the following cmdlet to get a list of all the Azure tenants your account has access to:
+
+ ```powershell
+ Get-AzTenant
+ ```
+
+ When you see the tenant you want to sign in to, make a note of its name.
+
+3. Run the following command to store the ID of the Azure tenant you want to connect to, replacing `"Fabrikam"` with your tenant name:
+
+ ```powershell
+ $tenantId = (Get-AzTenant | ? Name -eq "Fabrikam").Id
+ ```
+
+4. Run the following command to list all subscriptions containing a host pool that are currently available to you:
+
+ ```powershell
+ Get-AzSubscription -TenantId $tenantId
+ ```
+
+ Find the name of the subscription that contains a host pool you want to assign a managed identity to in that list. Once you do, make a note of its name and ID.
+
+5. Change your current Azure session to use the subscription you identified in the previous step, replacing the placeholder value `"<subscription name or id>"` with the name or ID of the subscription you want to use:
+
+ ```powershell
+ Set-AzContext -Tenant $tenantId -Subscription "<subscription name or id>"
+ ```
+
+6. Run the following command to create a Sandbox remote app:
+
+ ```powershell
+ New-AzWvdApplication -ResourceGroupName <Resource Group Name> -GroupName <Application Group Name> -FilePath 'C:\windows\system32\WindowsSandbox.exe' -IconIndex 0 -IconPath 'C:\windows\system32\WindowsSandbox.exe' -CommandLineSetting 'Allow' -ShowInPortal:$true -SubscriptionId <Workspace Subscription ID>
+ ```
+
+ >[!NOTE]
+ >After running this command, you'll be given a prompt to name the app. Fill out the prompt to continue.
+++
+That's it! Leave the rest of the options default. You should now have Windows Sandbox Remote App published for your users.
+
+## Next steps
+
+Learn more about sandboxes and how to use them to test Windows environments at [Windows Sandbox](/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview).
virtual-desktop Store Fslogix Profile https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/store-fslogix-profile.md
Once you've chosen your storage method, check out [Azure Virtual Desktop pricing
Azure Files offers two different tiers of storage: premium and standard. These tiers let you tailor the performance and cost of your file shares to meet your scenario's requirements. -- Premium file shares are backed by solid-state drives (SSDs) and are deployed in the FileStorage storage account type. Premium file shares provide consistent high performance and low latency for input and output (IO) intensive workloads.
+- Premium file shares are backed by solid-state drives (SSDs) and are deployed in the FileStorage storage account type. Premium file shares provide consistent high performance and low latency for input and output (IO) intensive workloads. Premium file shares use a provisioned billing model, where you pay for the amount of storage you would like your file share to have, regardless of how much you use.
-- Standard file shares are backed by hard disk drives (HDDs) and are deployed in the general purpose version 2 (GPv2) storage account type. Standard file shares provide reliable performance for IO workloads that are less sensitive to performance variability, such as general-purpose file shares and dev/test environments. Standard file shares are only available in a pay-as-you-go billing model.
+- Standard file shares are backed by hard disk drives (HDDs) and are deployed in the general purpose version 2 (GPv2) storage account type. Standard file shares provide reliable performance for IO workloads that are less sensitive to performance variability, such as general-purpose file shares and dev/test environments. Standard file shares use a pay-as-you-go billing model, where you pay based on storage usage, including data stored and transactions.
+
+To learn more about how billing works in Azure Files, see [Understand Azure Files billing](../storage/files/understanding-billing.md).
The following table lists our recommendations for which performance tier to use based on your workload. These recommendations will help you select the performance tier that meets your performance targets, budget, and regional considerations. We've based these recommendations on the example scenarios from [Remote Desktop workload types](/windows-server/remote/remote-desktop-services/remote-desktop-workloads).
virtual-desktop Teams On Avd https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-desktop/teams-on-avd.md
# Use Microsoft Teams on Azure Virtual Desktop
->[!IMPORTANT]
->Media optimization for Teams is supported for Microsoft 365 Government (GCC) and GCC-High environments. Media optimization for Teams isn't supported for Microsoft 365 DoD.
- >[!NOTE] >Media optimization for Microsoft Teams is only available for the following two clients: >
To enable media optimization for Teams, set the following registry key on the ho
### Install the Teams WebSocket Service
-Install the latest version of the [Remote Desktop WebRTC Redirector Service](https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4YM8L) on your VM image. If you encounter an installation error, install the [latest Microsoft Visual C++ Redistributable](https://support.microsoft.com/help/2977003/the-latest-supported-visual-c-downloads) and try again.
+Install the latest version of the [Remote Desktop WebRTC Redirector Service](https://aka.ms/msrdcwebrtcsvc/msi) on your VM image. If you encounter an installation error, install the [latest Microsoft Visual C++ Redistributable](https://support.microsoft.com/help/2977003/the-latest-supported-visual-c-downloads) and try again.
#### Latest WebSocket Service versions
virtual-machines Custom Script Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/extensions/custom-script-linux.md
The output looks like the following text:
] ```
+#### Azure CLI syntax issues
++ ## Next steps To see the code, current issues, and versions, go to the [custom-script-extension-linux repo on GitHub](https://github.com/Azure/custom-script-extension-linux).
virtual-machines Key Vault Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/extensions/key-vault-linux.md
# Key Vault virtual machine extension for Linux
-The Key Vault VM extension provides automatic refresh of certificates stored in an Azure key vault. Specifically, the extension monitors a list of observed certificates stored in key vaults. Upon detecting a change, the extension retrieves, and installs the corresponding certificates. The Key Vault VM extension is published and supported by Microsoft, currently on Linux VMs. This document details the supported platforms, configurations, and deployment options for the Key Vault VM extension for Linux.
+The Key Vault VM extension provides automatic refresh of certificates stored in an Azure key vault. Specifically, the extension monitors a list of observed certificates stored in key vaults. The extension retrieves and installs the corresponding certificates after detecting a change. The Key Vault VM extension is published and supported by Microsoft, currently on Linux VMs. This document details the supported platforms, configurations, and deployment options for the Key Vault VM extension for Linux.
### Operating system
The Key Vault VM extension supports these Linux distributions:
- PEM
-## Prerequisities
+## Prerequisites
- Key Vault instance with certificate. See [Create a Key Vault](../../key-vault/general/quick-create-portal.md) - VM/VMSS must have assigned [managed identity](../../active-directory/managed-identities-azure-resources/overview.md) - The Key Vault Access Policy must be set with secrets `get` and `list` permission for VM/VMSS managed identity to retrieve a secret's portion of certificate. See [How to Authenticate to Key Vault](../../key-vault/general/authentication.md) and [Assign a Key Vault access policy](../../key-vault/general/assign-access-policy-cli.md).
The following JSON shows the schema for the Key Vault VM extension. The extensio
Azure VM extensions can be deployed with Azure Resource Manager templates. Templates are ideal when deploying one or more virtual machines that require post deployment refresh of certificates. The extension can be deployed to individual VMs or virtual machine scale sets. The schema and configuration are common to both template types.
-The JSON configuration for a virtual machine extension must be nested inside the virtual machine resource fragment of the template, specifically `"resources": []` object for the virtual machine template and in case of virtual machine scale set under `"virtualMachineProfile":"extensionProfile":{"extensions" :[]` object.
+The JSON configuration for a virtual machine extension must be nested inside the virtual machine resource fragment of the template, specifically `"resources": []` object for the virtual machine template and for a virtual machine scale set under `"virtualMachineProfile":"extensionProfile":{"extensions" :[]` object.
> [!NOTE] > The VM extension would require system or user managed identity to be assigned to authenticate to Key vault. See [How to authenticate to Key Vault and assign a Key Vault access policy.](../../active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm.md)
The JSON configuration for a virtual machine extension must be nested inside the
``` ### Extension Dependency Ordering
-The Key Vault VM extension supports extension ordering if configured. By default the extension reports that it has successfully started as soon as it has started polling. However, it can be configured to wait until it has successfully downloaded the complete list of certificates before reporting a successful start. If other extensions depend on having the full set of certificates install before they start, then enabling this setting will allow those extension to declare a dependency on the Key Vault extension. This will prevent those extensions from starting until all certificates they depend on have been installed. The extension will retry the initial download indefinitely and remain in a `Transitioning` state.
+The Key Vault VM extension supports extension ordering if configured. By default the extension reports that it has successfully started as soon as it has started polling. However, it can be configured to wait until it has successfully downloaded the complete list of certificates before reporting a successful start. If other extensions depend on having the full set of certificates installed before they start, then enabling this setting will allow those extensions to declare a dependency on the Key Vault extension. This will prevent those extensions from starting until all certificates they depend on have been installed. The extension will retry the initial download indefinitely and remain in a `Transitioning` state.
-To turn this on set the following:
+To turn on extension dependency, set the following:
``` "secretsManagementSettings": { "requireInitialSync": true,
Get-AzVMExtension -VMName <vmName> -ResourceGroupname <resource group name>
```azurecli az vm get-instance-view --resource-group <resource group name> --name <vmName> --query "instanceView.extensions" ```++ ### Logs and configuration The Key Vault VM extension logs only exist locally on the VM and are most informative when it comes to troubleshooting.
The Key Vault VM extension logs only exist locally on the VM and are most inform
|Location|Description| |--|--| | /var/log/waagent.log | Shows when an update to the extension occurred. |
-| /var/log/azure/Microsoft.Azure.KeyVault.KeyVaultForLinux/* | Examine the Key Vault VM Extension service logs to determine the status of the akvvm_service service and certificate download. The download location of PEM files are also found in these files with an entry called certificate file name. If certificateStoreLocation is not specified it will default to /var/lib/waagent/Microsoft.Azure.KeyVault.Store/ |
+| /var/log/azure/Microsoft.Azure.KeyVault.KeyVaultForLinux/* | Examine the Key Vault VM Extension service logs to determine the status of the akvvm_service service and certificate download. The download location of PEM files are also found in these files with an entry called certificate file name. If certificateStoreLocation is not specified, it will default to /var/lib/waagent/Microsoft.Azure.KeyVault.Store/ |
| /var/lib/waagent/Microsoft.Azure.KeyVault.KeyVaultForLinux-\<most recent version\>/config/* | The configuration and binaries for Key Vault VM Extension service. | |||
-
+ ### Using Symlink
-Symbolic links or Symlinks are basically advanced shortcuts. To avoid monitoring the folder and to get the latest certificate automatically, you can use this symlink `([VaultName].[CertificateName])` to get the latest version of certificate on Linux.
+Symbolic links or Symlinks are advanced shortcuts. To avoid monitoring the folder and to get the latest certificate automatically, you can use this symlink `([VaultName].[CertificateName])` to get the latest version of certificate on Linux.
### Frequently Asked Questions
virtual-machines Expand Disks https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/linux/expand-disks.md
Previously updated : 07/27/2022 Last updated : 07/29/2022
ms.devlang: azurecli
This article describes how to expand managed disks for a Linux virtual machine (VM) with the Azure CLI. You can [add data disks](add-disk.md) to provide for additional storage space, and you can also expand an existing data disk. The default virtual hard disk size for the operating system (OS) is typically 30 GB on a Linux VM in Azure. > [!WARNING]
-> Always make sure that your filesystem is in a healthy state, your disk partition table type will support the new size, and ensure your data is backed up before you perform disk resize operations. For more information, see the [Azure Backup quickstart](../../backup/quick-backup-vm-portal.md).
+> Always make sure that your filesystem is in a healthy state, your disk partition table type will support the new size, and ensure your data is backed up before you perform disk expansion operations. For more information, see the [Azure Backup quickstart](../../backup/quick-backup-vm-portal.md).
## Expand an Azure Managed Disk
-### Resize without downtime (preview)
+### Expand without downtime (preview)
-You can now resize your managed disks without deallocating your VM.
+You can now expand your managed disks without deallocating your VM.
The preview for this has the following limitations:
This article requires an existing VM in Azure with at least one data disk attach
In the following samples, replace example parameter names such as *myResourceGroup* and *myVM* with your own values. > [!IMPORTANT]
-> If you've enabled **LiveResize** and your disk meets the requirements in [Resize without downtime (preview)](#resize-without-downtime-preview), you can skip step 1 and 3.
+> If you've enabled **LiveResize** and your disk meets the requirements in [Expand without downtime (preview)](#expand-without-downtime-preview), you can skip step 1 and 3.
1. Operations on virtual hard disks can't be performed with the VM running. Deallocate your VM with [az vm deallocate](/cli/azure/vm#az-vm-deallocate). The following example deallocates the VM named *myVM* in the resource group named *myResourceGroup*:
virtual-machines Image Builder Json https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/linux/image-builder-json.md
The location is the region where the custom image will be created. The following
Use the following command to register the feature for Azure Image Builder in Azure Government regions (USGov Arizona and USGov Virginia).
+### [Azure PowerShell](#tab/azure-powershell)
+
+```powershell
+Register-AzProviderPreviewFeature -ProviderNamespace Microsoft.VirtualMachineImages -Name FairfaxPublicPreview
+```
+
+### [Azure CLI](#tab/azure-cli)
+ ```azurecli-interactive az feature register --namespace Microsoft.VirtualMachineImages --name FairfaxPublicPreview ``` ++ ```json "location": "<region>", ```
virtual-machines Run Command Managed https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/linux/run-command-managed.md
description: This topic describes how to run scripts within an Azure Linux virtu
-- Previously updated : 10/27/2021++ Last updated : 07/28/2022
virtual-machines Expand Os Disk https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/windows/expand-os-disk.md
Previously updated : 07/27/2022 Last updated : 07/29/2022
When you create a new virtual machine (VM) in a resource group by deploying an i
- To migrate a physical PC or VM from on-premises with a larger OS drive. > [!IMPORTANT]
-> Unless you use [Resize without downtime (preview)](#resize-without-downtime-preview), resizing a data disk requires the VM to be deallocated.
+> Unless you use [Expand without downtime (preview)](#expand-without-downtime-preview), resizing a data disk requires the VM to be deallocated.
> > Shrinking an existing disk isnΓÇÖt supported, and can potentially result in data loss. > > After expanding the disks, you need to [Expand the volume in the operating system](#expand-the-volume-in-the-operating-system) to take advantage of the larger disk.
-## Resize without downtime (preview)
+## Expand without downtime (preview)
-You can now resize your managed disks without deallocating your VM.
+You can now expand your managed disks without deallocating your VM.
The preview for this has the following limitations:
Get-AzProviderFeature -FeatureName "LiveResize" -ProviderNamespace "Microsoft.Co
## Resize a managed disk in the Azure portal > [!IMPORTANT]
-> If you've enabled **LiveResize** and your disk meets the requirements in [Resize without downtime (preview)](#resize-without-downtime-preview), you can skip step 1. To resize a disk without downtime in the Azure portal, you must use the following link: [https://aka.ms/iaasexp/DiskLiveResize](https://aka.ms/iaasexp/DiskLiveResize)
+> If you've enabled **LiveResize** and your disk meets the requirements in [Expand without downtime (preview)](#expand-without-downtime-preview), you can skip step 1. To expand a disk without downtime in the Azure portal, you must use the following link: [https://aka.ms/iaasexp/DiskLiveResize](https://aka.ms/iaasexp/DiskLiveResize)
1. In the [Azure portal](https://aka.ms/iaasexp/DiskLiveResize), go to the virtual machine in which you want to expand the disk. Select **Stop** to deallocate the VM. 1. In the left menu under **Settings**, select **Disks**.
Get-AzProviderFeature -FeatureName "LiveResize" -ProviderNamespace "Microsoft.Co
:::image type="content" source="./media/expand-os-disk/select-disks.png" alt-text="Screenshot that shows the Disks option selected in the Settings section of the menu.":::
-1. Under **Disk name**, select the disk you want to resize.
+1. Under **Disk name**, select the disk you want to expand.
:::image type="content" source="./media/expand-os-disk/disk-name.png" alt-text="Screenshot that shows the Disks pane with a disk name selected.":::
$vm = Get-AzVM -ResourceGroupName $rgName -Name $vmName
``` > [!IMPORTANT]
-> If you've enabled **LiveResize** and your disk meets the requirements in [Resize without downtime (preview)](#resize-without-downtime-preview), you can skip step 4 and 6.
+> If you've enabled **LiveResize** and your disk meets the requirements in [expand without downtime (preview)](#expand-without-downtime-preview), you can skip step 4 and 6.
Stop the VM before resizing the disk:
virtual-machines Hana Installation https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-machines/workloads/sap/hana-installation.md
For more information about Ethernet details for your architecture, see [HLI supp
## Storage
-The storage layout for SAP HANA (Large Instances) is configured by SAP HANA on Azure Service Management using SAP recommended guidelines. These guidelines are documented in [SAP HANA storage requirements](https://archive.sap.com/kmuuid2/70c8e423-c8aa-3210-3fae-e043f5c1ca92/SAP%20HANA%20TDI%20-%20Storage%20Requirements.pdf).
+The storage layout for SAP HANA (Large Instances) is configured by SAP HANA on Azure Service Management using SAP recommended guidelines.
The rough sizes of the different volumes with the different HANA Large Instances SKUs is documented in [SAP HANA (Large Instances) overview and architecture on Azure](hana-overview-architecture.md).
virtual-network Default Outbound Access https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/ip-services/default-outbound-access.md
There are multiple ways to turn off default outbound access:
* Associate a standard load balancer with outbound rules configured.
- * Associate a public IP to any of the virtual machine's network interfaces (if there are multiple network interfaces, having a single one with a public IP will prevent default outbound access for the virtual machine).
+ * Associate a Basic public IP to the virtual machine's network interface (if there is only one network interface).
+
+ * Associate a Standard public IP to any of the virtual machine's network interfaces (if there are multiple network interfaces, having a single one with a Standard public IP will prevent default outbound access for the virtual machine).
2. Use Flexible orchestration mode for virtual machine scale sets.
virtual-network Virtual Network For Azure Services https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/virtual-network-for-azure-services.md
Deploying services within a virtual network provides the following capabilities:
| Containers | [Azure Kubernetes Service (AKS)](../aks/concepts-network.md?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>[Azure Container Instance (ACI)](https://www.aka.ms/acivnet)<br/>[Azure Container Service Engine](https://github.com/Azure/acs-engine) with Azure Virtual Network CNI [plug-in](https://github.com/Azure/acs-engine/tree/master/examples/vnet)<br/>[Azure Functions](../azure-functions/functions-networking-options.md#virtual-network-integration) |No<sup>2</sup><br/> Yes <br/> No <br/> Yes | Web | [API Management](../api-management/api-management-using-with-vnet.md?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>[Web Apps](../app-service/overview-vnet-integration.md?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>[App Service Environment](../app-service/overview-vnet-integration.md?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>[Azure Logic Apps](../logic-apps/connect-virtual-network-vnet-isolated-environment-overview.md?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>|Yes <br/> Yes <br/> Yes <br/> Yes | Hosted | [Azure Dedicated HSM](../dedicated-hsm/index.yml?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>[Azure NetApp Files](../azure-netapp-files/azure-netapp-files-introduction.md?toc=%2fazure%2fvirtual-network%2ftoc.json)<br/>|Yes <br/> Yes <br/>
-| Azure Spring Cloud | [Deploy in Azure virtual network (VNet injection)](../spring-cloud/how-to-deploy-in-azure-virtual-network.md)<br/>| Yes <br/>
+| Azure Spring Apps | [Deploy in Azure virtual network (VNet injection)](../spring-apps/how-to-deploy-in-azure-virtual-network.md)<br/>| Yes <br/>
| | | <sup>1</sup> 'Dedicated' implies that only service specific resources can be deployed in this subnet and cannot be combined with customer VM/VMSSs <br/>
virtual-network Virtual Networks Faq https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-network/virtual-networks-faq.md
No. Multicast and broadcast are not supported.
### What protocols can I use within VNets? You can use TCP, UDP, and ICMP TCP/IP protocols within VNets. Unicast is supported within VNets, with the exception of Dynamic Host Configuration Protocol (DHCP) via Unicast (source port UDP/68 / destination port UDP/67) and UDP source port 65330 which is reserved for the host. Multicast, broadcast, IP-in-IP encapsulated packets, and Generic Routing Encapsulation (GRE) packets are blocked within VNets.
-### Can I ping my default routers within a VNet?
-No.
+### Can I ping default gateway within a VNet?
+No. Azure provided default gateway does not respond ping. But you can use ping in your VNets to check connectivity and troubleshooting between VMs.
### Can I use tracert to diagnose connectivity?
-No.
+Yes.
### Can I add subnets after the VNet is created? Yes. Subnets can be added to VNets at any time as long as the subnet address range is not part of another subnet and there is available space left in the virtual network's address range.
virtual-wan Azure Vpn Client Optional Configurations Windows https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/virtual-wan/azure-vpn-client-optional-configurations-windows.md
Title: 'Azure VPN Client optional configuration steps: OpenVPN protocol - Windows'
+ Title: 'Azure VPN Client optional configuration steps: OpenVPN protocol'
description: Learn how to configure the Azure VPN Client optional configuration parameters for P2S OpenVPN connections.
Last updated 07/12/2022
-# Configure Azure VPN Client optional settings - OpenVPN protocol - Windows
+# Configure Azure VPN Client optional settings - OpenVPN protocol
-This article helps you configure optional settings for an Azure VPN Client installed on a Windows computer.
+This article helps you configure optional settings for the Azure VPN Client.
* For information about installing the Azure VPN Client, see [Configure the Azure VPN client - Windows](openvpn-azure-ad-client.md).
vpn-gateway Point To Site How To Radius Ps https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-how-to-radius-ps.md
description: Learn how to connect VPN clients securely to a virtual network usin
Previously updated : 06/10/2022 Last updated : 07/27/2022
New-AzVirtualNetworkGateway -Name $GWName -ResourceGroupName $RG `
Set-AzVirtualNetworkGateway -VirtualNetworkGateway $actual -VpnClientAddressPool 201.169.0.0/16 -VpnClientProtocol "IkeV2" -RadiusServerList $radiusServers ```
-## 6. <a name="vpnclient"></a>Configure the VPN client
+## 6. <a name="vpnclient"></a>Configure the VPN client and connect
The VPN client profile configuration packages contain the settings that help you configure VPN client profiles for a connection to the Azure VNet.
To generate a VPN client configuration package and configure a VPN client, see o
* [RADIUS - password authentication for VPN clients](point-to-site-vpn-client-configuration-radius-password.md) * [RADIUS - other authentication methods for VPN clients](point-to-site-vpn-client-configuration-radius-other.md)
-## <a name="connect"></a>7. Connect to Azure
-
-Use the steps in one of the following articles to connect to Azure.
-
-* [Windows native VPN client](point-to-site-vpn-client-configuration-radius-certificate.md#windows-vpn-client)
-* [macOS VPN client](point-to-site-vpn-client-configuration-radius-certificate.md#mac-macos-vpn-client)
+After you configure the VPN client, connect to Azure.
## <a name="verify"></a>To verify your connection
For FAQ information, see the [Point-to-site - RADIUS authentication](vpn-gateway
## Next steps
-Once your connection is complete, you can add virtual machines to your virtual networks. For more information, see [Virtual Machines](../index.yml). To understand more about networking and virtual machines, see [Azure and Linux VM network overview](../virtual-network/network-overview.md).
+Once your connection is complete, you can add virtual machines to your virtual networks. For more information, see [Virtual Machines](../index.yml). To understand more about networking and virtual machines, see [Azure and Linux VM network overview](../virtual-network/network-overview.md).
vpn-gateway Point To Site Vpn Client Cert Linux https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-vpn-client-cert-linux.md
Title: 'Configure P2S VPN clients -certificate authentication - Linux (strongSwan)'
+ Title: 'Configure P2S VPN clients -certificate authentication - Linux'
-description: Learn how to configure the Linux (strongSwan) VPN client solution for VPN Gateway P2S configurations that use certificate authentication. This article applies to Linux (strongSwan).
+description: Learn how to configure a Linux VPN client solution for VPN Gateway P2S configurations that use certificate authentication.
Previously updated : 05/18/2022 Last updated : 07/29/2022
-# Configure point-to-site VPN clients - certificate authentication - Linux (strongSwan)
+# Configure point-to-site VPN clients - certificate authentication - Linux
-When you connect to an Azure virtual network (VNet) using point-to-site (P2S) and certificate authentication from a Linux computer, you can use strongSwan. All of the necessary configuration settings for the VPN clients are contained in a VPN client configuration zip file. The settings in the zip file help you easily configure the VPN clients Linux.
+When you connect to an Azure virtual network (VNet) using point-to-site (P2S) and certificate authentication from a Linux computer, you can use strongSwan (IKEv2 tunnels) or an OpenVPN client. All of the necessary configuration settings for the VPN clients are contained in a VPN client configuration zip file. The settings in the zip file help you easily configure the VPN clients Linux.
The VPN client configuration files that you generate are specific to the P2S VPN gateway configuration for the virtual network. If there are any changes to the P2S VPN configuration after you generate the files, such as changes to the VPN protocol type or authentication type, you need to generate new VPN client configuration files and apply the new configuration to all of the VPN clients that you want to connect. For more information about P2S connections, see [About point-to-site VPN](point-to-site-about.md).
-## <a name="generate"></a>Before you begin
+## Before you begin
Before beginning, verify that you are on the correct article. The following table shows the configuration articles available for Azure VPN Gateway P2S VPN clients. Steps differ, depending on the authentication type, tunnel type, and the client OS. [!INCLUDE [All client articles](../../includes/vpn-gateway-vpn-client-install-articles.md)]
->[!IMPORTANT]
->[!INCLUDE [TLS](../../includes/vpn-gateway-tls-change.md)]
-
-## <a name="strongswan"></a>1. Install strongSwan
-
-The steps in this article use strongSwan.
--
-## <a name="certificates"></a>2. Install certificates
-
-A client certificate is required for authentication when using the Azure certificate authentication type. A client certificate must be installed on each client computer. The exported client certificate must be exported with the private key, and must contain all certificates in the certification path. Make sure that the client computer has the appropriate client certificate installed before proceeding to the next section.
-
-For information about client certificates, see [Generate certificates - Linux](vpn-gateway-certificates-point-to-site-linux.md).
-
-## <a name="generate"></a>3. Generate VPN client configuration files
+## Generate VPN client configuration files
You can generate client configuration files using PowerShell, or by using the Azure portal. Either method returns the same zip file.
-### <a name="portal"></a>Generate profile config files using the Azure portal
+### Generate files using the Azure portal
1. In the Azure portal, navigate to the virtual network gateway for the virtual network that you want to connect to. 1. On the virtual network gateway page, select **Point-to-site configuration** to open the Point-to-site configuration page. 1. At the top of the Point-to-site configuration page, select **Download VPN client**. This doesn't download VPN client software, it generates the configuration package used to configure VPN clients. It takes a few minutes for the client configuration package to generate. During this time, you may not see any indications until the packet has generated.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-linux/download-configuration.png" alt-text="Download the VPN client configuration." lightbox="./media/point-to-site-vpn-client-cert-linux/download-configuration.png":::
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/download-configuration.png" alt-text="Download the VPN client configuration." lightbox="./media/point-to-site-vpn-client-cert-mac/download-configuration.png":::
1. Once the configuration package has been generated, your browser indicates that a client configuration zip file is available. It's named the same name as your gateway.
-### <a name="powershell"></a>Generate profile config files using PowerShell
+### Generate files using PowerShell
1. When generating VPN client configuration files, the value for '-AuthenticationMethod' is 'EapTls'. Generate the VPN client configuration files using the following command:
You can generate client configuration files using PowerShell, or by using the Az
1. Copy the URL to your browser to download the zip file.
-## 4. View the folder and files
+### View the folder and files
Unzip the file to view the following folders: * **WindowsAmd64** and **WindowsX86**, which contain the Windows 32-bit and 64-bit installer packages, respectively. The **WindowsAmd64** installer package is for all supported 64-bit Windows clients, not just Amd. * **Generic**, which contains general information used to create your own VPN client configuration. The Generic folder is provided if IKEv2 or SSTP+IKEv2 was configured on the gateway. If only SSTP is configured, then the Generic folder isnΓÇÖt present.
-## 5. Select the configuration instructions
+## Select the configuration instructions
The sections below contain instructions to help you configure your VPN client. Select the tunnel type that your P2S configuration uses, then select the method that you want to use to configure.
-* [IKEv2 tunnel type steps](#ike)
-* [OpenVPN tunnel type steps](#openvpn)
+* [IKEv2 tunnel type steps](#ike) for strongSwan
+* [OpenVPN tunnel type steps](#openvpn) for OpenVPN client
-## <a name="ike"></a>IKEv2 tunnel type steps
+## <a name="ike"></a>IKEv2 - strongSwan steps
-This section helps you configure Linux clients for certificate authentication that uses the IKEv2 tunnel type. To connect to Azure, you manually configure an IKEv2 VPN client.
+### Install strongSwan
++
+### Install certificates
+
+A client certificate is required for authentication when using the Azure certificate authentication type. A client certificate must be installed on each client computer. The exported client certificate must be exported with the private key, and must contain all certificates in the certification path. Make sure that the client computer has the appropriate client certificate installed before proceeding to the next section.
+
+For information about client certificates, see [Generate certificates - Linux](vpn-gateway-certificates-point-to-site-linux.md).
+
+### View VPN client profile files
Go to the downloaded VPN client profile configuration files. You can find all of the information that you need for configuration in the **Generic** folder. Azure doesnΓÇÖt provide a *mobileconfig* file for this configuration.
The Generic folder contains the following files:
* **VpnSettings.xml**, which contains important settings like server address and tunnel type. * **VpnServerRoot.cer**, which contains the root certificate required to validate the Azure VPN gateway during P2S connection setup.
-### <a name="gui"></a>GUI instructions
+After viewing the files, continue with the steps that you want to use:
+
+* [GUI steps](#gui)
+* [CLI steps](#cli)
+
+#### <a name="gui"></a>strongSwan GUI instructions
-This section walks you through the configuration using the strongSwan GUI. The following instructions were created on Ubuntu 18.0.4. Ubuntu 16.0.10 doesnΓÇÖt support strongSwan GUI. If you want to use Ubuntu 16.0.10, youΓÇÖll have to use the [command line](#linuxinstallcli). The following examples may not match screens that you see, depending on your version of Linux and strongSwan.
+This section walks you through the configuration using the strongSwan GUI. The following instructions were created on Ubuntu 18.0.4. Ubuntu 16.0.10 doesnΓÇÖt support strongSwan GUI. If you want to use Ubuntu 16.0.10, youΓÇÖll have to use the [command line](#cli). The following examples may not match screens that you see, depending on your version of Linux and strongSwan.
1. Open the **Terminal** to install **strongSwan** and its Network Manager by running the command in the example.
This section walks you through the configuration using the strongSwan GUI. The f
:::image type="content" source="./media/point-to-site-vpn-client-cert-linux/turn-on.png" alt-text="Screenshot shows copy." lightbox="./media/point-to-site-vpn-client-cert-linux/expanded/turn-on.png":::
-### <a name="linuxinstallcli"></a>CLI instructions
+#### <a name="cli"></a>strongSwan CLI instructions
This section walks you through the configuration using the strongSwan CLI.
This section walks you through the configuration using the strongSwan CLI.
## <a name="openvpn"></a>OpenVPN tunnel type steps
-This section helps you configure Linux clients for certificate authentication that uses the OpenVPN tunnel type. To connect to Azure, you download the OpenVPN client and configure the connection profile.
+This section helps you configure Linux clients for certificate authentication that uses the OpenVPN tunnel type. To connect to Azure, download the OpenVPN client and configure the connection profile.
[!INCLUDE [Configuration steps for OpenVPN Linux](../../includes/vpn-gateway-config-openvpn-linux.md)]
This section helps you configure Linux clients for certificate authentication th
For additional steps, return to the original point-to-site article that you were working from.
-* [PowerShell configuration steps](vpn-gateway-howto-point-to-site-rm-ps.md).
-* [Azure portal configuration steps](vpn-gateway-howto-point-to-site-resource-manager-portal.md).
+* [P2S Azure portal steps](vpn-gateway-howto-point-to-site-resource-manager-portal.md).
+* [P2S PowerShell steps](vpn-gateway-howto-point-to-site-rm-ps.md).
vpn-gateway Point To Site Vpn Client Cert Mac https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-vpn-client-cert-mac.md
description: Learn how to configure the VPN client for VPN Gateway P2S configura
Previously updated : 05/18/2022 Last updated : 07/28/2022
When you connect to an Azure virtual network (VNet) using VPN Gateway point-to-s
The VPN client configuration files that you generate are specific to the P2S VPN gateway configuration for the virtual network. If there are any changes to the P2S VPN configuration after you generate the files, such as changes to the VPN protocol type or authentication type, you need to generate new VPN client configuration files and apply the new configuration to all of the VPN clients that you want to connect. For more information about P2S connections, see [About point-to-site VPN](point-to-site-about.md).
-## <a name="generate"></a>Before you begin
+## Before you begin
Before beginning, verify that you are on the correct article. The following table shows the configuration articles available for Azure VPN Gateway P2S VPN clients. Steps differ, depending on the authentication type, tunnel type, and the client OS.
Before beginning, verify that you are on the correct article. The following tabl
>[!IMPORTANT] >[!INCLUDE [TLS](../../includes/vpn-gateway-tls-change.md)]
-## <a name="generate"></a>Generate VPN client configuration files
+## Generate VPN client configuration files
You can generate client configuration files using PowerShell, or by using the Azure portal. Either method returns the same zip file.
-### <a name="zipportal"></a>Generate files using the Azure portal
+### Generate files using the Azure portal
1. In the Azure portal, navigate to the virtual network gateway for the virtual network that you want to connect to. 1. On the virtual network gateway page, select **Point-to-site configuration** to open the Point-to-site configuration page.
You can generate client configuration files using PowerShell, or by using the Az
:::image type="content" source="./media/point-to-site-vpn-client-cert-mac/download-configuration.png" alt-text="Download the VPN client configuration." lightbox="./media/point-to-site-vpn-client-cert-mac/download-configuration.png"::: 1. Once the configuration package has been generated, your browser indicates that a client configuration zip file is available. It's named the same name as your gateway. Unzip the file to view the folders.
-### <a name="zipps"></a>Generate files using PowerShell
+### Generate files using PowerShell
1. When generating VPN client configuration files, the value for '-AuthenticationMethod' is 'EapTls'. Generate the VPN client configuration files using the following command:
You can generate client configuration files using PowerShell, or by using the Az
1. Copy the URL to your browser to download the zip file, then unzip the file to view the folders.
-## <a name="ikev2-macOS"></a>IKEv2 - macOS steps
+## IKEv2 - native client - macOS steps
-### <a name="view"></a>View files
+### View files
Unzip the file to view the folders. When you configure macOS native clients, you use the files in the **Generic** folder. The Generic folder is present if IKEv2 was configured on the gateway. You can find all of the information that you need to configure the native VPN client in the **Generic** folder. If you don't see the Generic folder, check the following items, then generate the zip file again.
The **Generic** folder contains the following files.
Use the following steps to configure the native VPN client on Mac for certificate authentication. These steps must be completed on every Mac that you want to connect to Azure.
-### <a name="certificate"></a>Install certificates
+### Install certificates
-1. Copy to the root certificate file - **VpnServerRoot.cer** - to your Mac. Double-click the certificate. The certificate will either automatically install, or youΓÇÖll see the **Add Certificates** page.
-1. On the **Add Certificates** page, select **login** from the dropdown.
+#### Root certificate
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/login.png" alt-text="Screenshot shows Add Certificates page with login selected.":::
+1. Copy to the root certificate file - **VpnServerRoot.cer** - to your Mac. Double-click the certificate. Depending on your operating system, the certificate will either automatically install, or you'll see the **Add Certificates** page.
+1. If you see the **Add Certificates** page, for **Keychain:** click the arrows and select **login** from the dropdown.
1. Click **Add** to import the file.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/add.png" alt-text="Screenshot shows Add Certificates page with Add selected.":::
+#### Client certificate
-### Verify certificate install
+The client certificate is used for authentication and is required. Typically, you can just click the client certificate to install. For more information about how to install a client certificate, see [Install a client certificate](point-to-site-how-to-vpn-client-install-azure-cert.md).
-Verify that both the client and the root certificate are installed. The client certificate is used for authentication and is required. For information about how to install a client certificate, see [Install a client certificate](point-to-site-how-to-vpn-client-install-azure-cert.md).
+#### Verify certificate install
-1. Open the **Keychain Access** application.
-1. Navigate to the **Certificates** tab.
-1. Verify that both the client and the root certificate are installed.
+Verify that both the client and the root certificate are installed.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/keychain.png" alt-text="Screenshot shows Keychain Access with certificates installed." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/keychain.png":::
+1. Open **Keychain Access**.
+1. Go to the **Certificates** tab.
+1. Verify that both the client and the root certificate are installed.
-### <a name="create"></a>Configure VPN client profile
+### Configure VPN client profile
+
+1. Go to **System Preferences -> Network**. On the Network page, click **'+'** to create a new VPN client connection profile for a P2S connection to the Azure virtual network.
-1. Navigate to **System Preferences -> Network**. On the Network page, select **'+'** to create a new VPN client connection profile for a P2S connection to the Azure virtual network.
-1. For **Interface**, from the dropdown, select **VPN**.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/new.png" alt-text="Screenshot shows the Network window to click on +." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/new.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/select-vpn.png" alt-text="Screenshot shows the Network window with the option to select an interface, VPN is selected." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/select-vpn.png":::
+1. On the **Select the interface** page, click the arrows next to **Interface:**. From the dropdown, click **VPN**.
-1. For **VPN Type**, from the dropdown, select **IKEv2**. In the **Service Name** field,specify a friendly name for the profile.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/vpn.png" alt-text="Screenshot shows the Network window with the option to select an interface, VPN is selected." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/vpn.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/vpn-type.png" alt-text="Screenshot shows the Network window with the option to select an interface, select VPN type, and enter a service name." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/vpn-type.png":::
+1. For **VPN Type**, from the dropdown, click **IKEv2**. In the **Service Name** field, specify a friendly name for the profile, then click **Create**.
-1. Select **Create** to create the VPN client connection profile.
-1. In the **Generic** folder, open the **VpnSettings.xml** file using a text editor, and copy the **VpnServer** tag value.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/service-name.png" alt-text="Screenshot shows the Network window with the option to select an interface, select VPN type, and enter a service name." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/service-name.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/server-tag.png" alt-text="Screenshot shows the VpnSettings.xml file open with the VpnServer tag highlighted." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/server-tag.png":::
+1. Go to the VPN client profile that you downloaded. In the **Generic** folder, open the **VpnSettings.xml** file using a text editor. In the example, you can see information about the tunnel type and the server address. Even though there are two VPN types listed, this VPN client will connect over IKEv2. Copy the **VpnServer** tag value.
-1. Paste the **VpnServer** tag value in both the **Server Address** and **Remote ID** fields of the profile.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/vpn-server.png" alt-text="Screenshot shows the VpnSettings.xml file open with the VpnServer tag highlighted." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/vpn-server.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/paste-value.png" alt-text="Screenshot shows the Network window with the value pasted." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/paste-value.png":::
+1. Paste the **VpnServer** tag value in both the **Server Address** and **Remote ID** fields of the profile. Leave **Local ID** blank. Then, click **Authentication Settings...**.
-### <a name="auth"></a>Configure authentication settings
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/server-address.png" alt-text="Screenshot shows server info pasted to fields." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/server-address.png":::
+
+### Configure authentication settings
Configure authentication settings. There are two sets of instructions. Choose the instructions that correspond to your OS version.
-#### Catalina
+#### Big Sur and later
-* For **Authentication Settings** select **None**.
-* Select **Certificate**, select **Select** and select the correct client certificate that you installed earlier. Then, select **OK**.
+1. On the **Authentication Settings** page, for the Authentication settings field, click the arrows to select **Certificate**.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/catalina.png" alt-text="Screenshot shows the Network window with None selected for Authentication Settings and Certificate selected.":::
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/monterey/certificate.png" alt-text="Screenshot shows authentication settings with certificate selected." lightbox="./media/point-to-site-vpn-client-cert-mac/monterey/certificate.png":::
-#### Big Sur
+1. Click **Select** to open the **Choose An Identity** page.
-* Select **Authentication Settings**, then select **Certificate**.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/monterey/select.png" alt-text="Screenshot to click Select." lightbox="./media/point-to-site-vpn-client-cert-mac/monterey/select.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/authentication-certificate.png" alt-text="Screenshot shows authentication settings with certificate selected." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/authentication-certificate.png":::
+1. The **Choose An Identity** page displays a list of certificates for you to choose from. If youΓÇÖre unsure which certificate to use, you can select **Show Certificate** to see more information about each certificate. Click the proper certificate, then click **Continue**.
-* Select **Select** to open the **Choose An Identity** page. The **Choose An Identity** page displays a list of certificates for you to choose from. If youΓÇÖre unsure which certificate to use, you can select **Show Certificate** to see more information about each certificate.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/monterey/choose-identity.png" alt-text="Screenshot shows certificate properties." lightbox="./media/point-to-site-vpn-client-cert-mac/monterey/choose-identity.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/show-certificate.png" alt-text="Screenshot shows certificate properties." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/show-certificate.png":::
+1. On the **Authentication Settings** page, verify that the correct certificate is shown, then click **OK**.
-* Select the proper certificate, then select **Continue**.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/monterey/verify.png" alt-text="Screenshot shows the Choose An Identity dialog box where you can select the proper certificate." lightbox="./media/point-to-site-vpn-client-cert-mac/monterey/verify.png":::
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/choose-identity.png" alt-text="Screenshot shows Choose an Identity, where you can select a certificate." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/choose-identity.png":::
+#### Catalina
+
+If you're using Catalina, use these authentication settings steps:
-* On the **Authentication Settings** page, verify that the correct certificate is shown, then select **OK**.
+1. For **Authentication Settings** choose **None**.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/certificate.png" alt-text="Screenshot shows the Choose An Identity dialog box where you can select the proper certificate." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/certificate.png":::
+1. Click **Certificate**, click **Select** and click the correct client certificate that you installed earlier. Then, click **OK**.
-### <a name="certificate"></a>Specify certificate
+### Specify certificate
-1. For both Catalina and Big Sur, in the **Local ID** field, specify the name of the certificate. In this example, itΓÇÖs `P2SChildCert`.
+1. In the **Local ID** field, specify the name of the certificate. In this example, itΓÇÖs **P2SChildCertMac**.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/local-id.png" alt-text="Screenshot shows local ID value." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/local-id.png":::
-1. Select **Apply** to save all changes.
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/monterey/local-id.png" alt-text="Screenshot shows local ID value." lightbox="./media/point-to-site-vpn-client-cert-mac/monterey/local-id.png":::
-### <a name="connect"></a>Connect
+1. Click **Apply** to save all changes.
-1. Select **Connect** to start the P2S connection to the Azure virtual network.
+### Connect
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/select-connect.png" alt-text="Screenshot shows connect button." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/select-connect.png":::
+1. Click **Connect** to start the P2S connection to the Azure virtual network. You may need to enter your "login" keychain password.
+
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/select-connect.png" alt-text="Screenshot shows connect button." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/select-connect.png":::
1. Once the connection has been established, the status shows as **Connected** and you can view the IP address that was pulled from the VPN client address pool.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/connected.png" alt-text="Screenshot shows Connected." lightbox="./media/point-to-site-vpn-client-cert-mac/expanded/connected.png":::
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/connected.png" alt-text="Screenshot shows Connected." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/connected.png":::
+
+## OpenVPN Client - macOS steps
-## <a name="openvpn-macOS"></a>OpenVPN Client - macOS steps
+The following example uses **TunnelBlick**.
>[!INCLUDE [OpenVPN Mac](../../includes/vpn-gateway-vwan-config-openvpn-mac.md)]
-## <a name="OpenVPN-iOS"></a>OpenVPN Client - iOS steps
+## OpenVPN Client - iOS steps
-The following steps use **OpenVPN Connect** from the App store.
+The following example uses **OpenVPN Connect** from the App store.
>[!INCLUDE [OpenVPN iOS](../../includes/vpn-gateway-vwan-config-openvpn-ios.md)]
vpn-gateway Point To Site Vpn Client Configuration Radius Certificate https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/point-to-site-vpn-client-configuration-radius-certificate.md
To retrieve previously generated client configuration files, use the following c
Get-AzVpnClientConfiguration -ResourceGroupName "TestRG" -Name "VNet1GW" | fl ```
-## Windows VPN client
+## Windows native VPN client
+
+You can use the native VPN client if you configured IKEv2 or SSTP.
1. Select a configuration package and install it on the client device. For a 64-bit processor architecture, choose the **VpnClientSetupAmd64** installer package. For a 32-bit processor architecture, choose the **VpnClientSetupX86** installer package. If you see a SmartScreen pop-up, select **More info** > **Run anyway**. You can also save the package to install on other client computers.
Get-AzVpnClientConfiguration -ResourceGroupName "TestRG" -Name "VNet1GW" | fl
1. On the client computer, browse to **Network Settings** and select **VPN**. The VPN connection shows the name of the virtual network that it connects to.
-## Mac (macOS) VPN client
+## Mac (macOS) native VPN client
-You must create a separate profile for every Mac device that connects to the Azure virtual network. This is because these devices require the user certificate for authentication to be specified in the profile. The **Generic** folder has all the information that's required to create a profile:
+You must create a separate profile for every Mac device that connects to the Azure virtual network. This is because these devices require the user certificate for authentication to be specified in the profile. Additionally, you can only use the macOS native VPN client if you included the IKEv2 tunnel type in your configuration. The **Generic** folder has all the information that's required to create a profile:
* **VpnSettings.xml** contains important settings such as server address and tunnel type. * **VpnServerRoot.cer** contains the root certificate that's required to validate the VPN gateway during P2S connection setup.
vpn-gateway Vpn Gateway Howto Point To Site Resource Manager Portal https://github.com/MicrosoftDocs/azure-docs/commits/main/articles/vpn-gateway/vpn-gateway-howto-point-to-site-resource-manager-portal.md
From the Network dialog box, locate the client profile that you want to use, spe
If you're having trouble connecting, verify that the virtual network gateway isn't using a Basic SKU. The Basic SKU isn't supported for Mac clients.
- :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/select-connect.png" alt-text="Screenshot shows connect button." lightbox="./media/point-to-site-vpn-client-cert-mac/select-connect.png":::
+ :::image type="content" source="./media/point-to-site-vpn-client-cert-mac/mac/select-connect.png" alt-text="Screenshot shows connect button." lightbox="./media/point-to-site-vpn-client-cert-mac/mac/select-connect.png":::
## <a name="verify"></a>To verify your connection
For frequently asked questions, see the [FAQ](vpn-gateway-vpn-faq.md#P2S).
## Next steps Once your connection is complete, you can add virtual machines to your virtual networks. For more information, see [Virtual Machines](../index.yml). To understand more about networking and virtual machines, see [Azure and Linux VM network overview](../virtual-network/network-overview.md).
-For P2S troubleshooting information, [Troubleshooting Azure point-to-site connections](vpn-gateway-troubleshoot-vpn-point-to-site-connection-problems.md).
+For P2S troubleshooting information, [Troubleshooting Azure point-to-site connections](vpn-gateway-troubleshoot-vpn-point-to-site-connection-problems.md).