Updates from: 11/02/2024 02:08:56
Category Microsoft Docs article Related commit history on GitHub Change details
microsoft-365-copilot-privacy Microsoft 365 Copilot Privacy https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/copilot/microsoft-365-copilot-privacy.md
- m365copilot - magic-ai-copilot hideEdit: true Previously updated : 10/18/2024 Last updated : 11/01/2024
While abuse monitoring, which includes human review of content, is available in
## Data stored about user interactions with Microsoft 365 Copilot
-When a user interacts with Microsoft 365 Copilot (using apps such as Word, PowerPoint, Excel, OneNote, Loop, or Whiteboard), we store data about these interactions. The stored data includes the user's prompt and Copilot's response, including citations to any information used to ground Copilot's response. We refer to the userΓÇÖs prompt and CopilotΓÇÖs response to that prompt as the "content of interactions" and the record of those interactions is the userΓÇÖs Copilot interaction history. For example, this stored data provides users with Copilot interaction history in [Business Chat](https://support.microsoft.com/topic/5b00a52d-7296-48ee-b938-b95b7209f737) and [meetings in Microsoft Teams](https://support.microsoft.com/office/0bf9dd3c-96f7-44e2-8bb8-790bedf066b1). This data is processed and stored in alignment with contractual commitments with your organizationΓÇÖs other content in Microsoft 365. The data is encrypted while it's stored and isn't used to train foundation LLMs, including those used by Microsoft 365 Copilot.
+When a user interacts with Microsoft 365 Copilot (using apps such as Word, PowerPoint, Excel, OneNote, Loop, or Whiteboard), we store data about these interactions. The stored data includes the user's prompt and Copilot's response, including citations to any information used to ground Copilot's response. We refer to the userΓÇÖs prompt and CopilotΓÇÖs response to that prompt as the "content of interactions" and the record of those interactions is the userΓÇÖs Copilot activity history. For example, this stored data provides users with Copilot activity history in [Business Chat](https://support.microsoft.com/topic/5b00a52d-7296-48ee-b938-b95b7209f737) and [meetings in Microsoft Teams](https://support.microsoft.com/office/0bf9dd3c-96f7-44e2-8bb8-790bedf066b1). This data is processed and stored in alignment with contractual commitments with your organizationΓÇÖs other content in Microsoft 365. The data is encrypted while it's stored and isn't used to train foundation LLMs, including those used by Microsoft 365 Copilot.
To view and manage this stored data, admins can use Content search or Microsoft Purview. Admins can also use Microsoft Purview to set retention policies for the data related to chat interactions with Copilot. For more information, see the following articles:
For Microsoft Teams chats with Copilot, admins can also use [Microsoft Teams Exp
### Deleting the history of user interactions with Microsoft 365 Copilot
-Your users can delete their Copilot interaction history, which includes their prompts and the responses Copilot returns, by going to the [My Account portal](https://myaccount.microsoft.com/). For more information, see [Delete your Microsoft 365 Copilot interaction history](https://support.microsoft.com/office/76de8afa-5eaf-43b0-bda8-0076d6e0390f).
+Your users can delete their Copilot activity history, which includes their prompts and the responses Copilot returns, by going to the [My Account portal](https://myaccount.microsoft.com/). For more information, see [Delete your Microsoft 365 Copilot activity history](https://support.microsoft.com/office/76de8afa-5eaf-43b0-bda8-0076d6e0390f).
## Microsoft 365 Copilot and the EU Data Boundary
Microsoft [Advanced Data Residency (ADR)](/microsoft-365/enterprise/advanced-dat
While Microsoft 365 Copilot is already able to use the apps and data within the Microsoft 365 ecosystem, many organizations still depend on various external tools and services for work management and collaboration. Microsoft 365 Copilot experiences can reference third-party tools and services when responding to a userΓÇÖs request by using [Microsoft Graph connectors](/graph/connecting-external-content-connectors-overview) or plugins. Data from Graph connectors can be returned in Microsoft 365 Copilot responses if the user has permission to access that information.
-When plugins are enabled, Microsoft 365 Copilot determines whether it needs to use a specific plugin to help provide a relevant response to the user. If a plugin is needed, Microsoft 365 Copilot generates a search query to send to the plugin on the userΓÇÖs behalf. The query is based on the userΓÇÖs prompt, Copilot interaction history, and data the user has access to in Microsoft 365.
+When plugins are enabled, Microsoft 365 Copilot determines whether it needs to use a specific plugin to help provide a relevant response to the user. If a plugin is needed, Microsoft 365 Copilot generates a search query to send to the plugin on the userΓÇÖs behalf. The query is based on the userΓÇÖs prompt, Copilot activity history, and data the user has access to in Microsoft 365.
In the **Integrated apps** section of the [Microsoft 365 admin center](/microsoft-365/admin/admin-overview/admin-center-overview), admins can view the permissions and data access required by a plugin as well as the pluginΓÇÖs terms of use and privacy statement. Admins have full control to select which plugins are allowed in their organization. A user can only access the plugins that their admin allows and that the user installed or is assigned. Microsoft 365 Copilot only uses plugins that are turned on by the user.
Some privacy controls for connected experiences in Microsoft 365 Apps can affect
#### Privacy control for connected experiences that analyze your content
-If you turn off connected experiences that analyze your content on Windows or Mac devices in your organization, Microsoft 365 Copilot features wonΓÇÖt be available to your users in the following apps:
+If you turn off connected experiences that analyze your content on devices in your organization, Microsoft 365 Copilot features wonΓÇÖt be available to your users in the following apps:
- Excel-- PowerPoint - OneNote
+- Outlook
+- PowerPoint
- Word
-There's also a privacy control that turns off all connected experiences, including connected experiences that analyze your content. If you use that privacy control, Microsoft 365 Copilot features wonΓÇÖt be available for certain apps on certain devices as described above.
+This applies to when youΓÇÖre running the most current version of these apps on Windows, Mac, iOS, or Android devices.
+
+There's also a privacy control that turns off all connected experiences, including connected experiences that analyze your content. If you use that privacy control, Microsoft 365 Copilot features wonΓÇÖt be available in the apps and on the devices described above.
#### Privacy control for optional connected experiences
provide-feedback Provide Feedback https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/copilot/provide-feedback.md
Title: "Provide user feedback for Microsoft 365 Copilot"
+ Title: "Submit admin-initiated Copilot feedback from the Microsoft 365 admin center"
f1.keywords: - NOCSH Previously updated : 12/12/2023 Last updated : 11/01/2024 audience: Admin
- scotvorg - m365copilot - magic-ai-copilot
-description: "Learn how to provide Microsoft 365 Copilot feedback to Microsoft on behalf of their users who encounter issues"
+description: "Learn how to provide Microsoft 365 Copilot feedback to Microsoft on behalf of your users who encounter issues"
-# Provide user feedback for Microsoft 365 Copilot
+# Submit admin-initiated Copilot feedback from the Microsoft 365 admin center
-Microsoft 365 Copilot is a product that helps users boost their productivity with large-language models (LLM). While Copilot is designed to provide accurate and informative responses based on the knowledge and data available in the Microsoft Graph, it's important to note that answers may not always be completely accurate. This is because Copilot generates responses based on patterns and probabilities in language data. Providing feedback is essential to improve the product and make it more dependable for users.
+Microsoft 365 Copilot is a product that helps users boost their productivity with large-language models (LLM). While Copilot is designed to provide accurate and informative responses based on the knowledge and data available in the Microsoft Graph, it's important to note that answers may not always be accurate. This is because Copilot generates responses based on patterns and probabilities in language data. Providing feedback is essential to improve the product and make it more dependable for users.
Microsoft 365 Copilot currently allows user-initiated feedback. As an admin, you can give feedback to supplement the user-initiated process. This helps Microsoft receive comprehensive diagnostic data to aid in debugging, especially in cases where users may not be able to provide feedback themselves. By providing feedback on behalf of your users, you can help enhance the overall experience of Copilot for your organization by improving the quality and relevance of its responses.
This article explains how you can initiate feedback on behalf of your users.
Before you begin, you must have the following: -- A Microsoft 365 subscription with Microsoft 365 Copilot5 license
+- A Microsoft 365 subscription with a Microsoft 365 Copilot license
-- Global Admin role to complete the task in this article. For more information, see [About admin roles in the Microsoft 365 admin center](/microsoft-365/admin/add-users/about-admin-roles).
+- Global admin role to complete the task in this article. For more information, see [About admin roles in the Microsoft 365 admin center](/microsoft-365/admin/add-users/about-admin-roles).
- An email address of the user who experienced an issue with Microsoft 365 Copilot.
To provide feedback to Microsoft on behalf of a user who encountered a problem w
> [!NOTE] > The maximum number of conversations you can share is 30.
-4. After a short wait, youΓÇÖll receive a JSON file containing the user's conversations with Copilot for the past X interactions (utterance/response pairs) that you select, along with their feedback logs. The file will be redacted to protect Microsoft IP, if any. You can use any JSON viewer tool to inspect the data and include additional comments for the feedback. The file will be available for download once it's generated.
+4. After a short wait, youΓÇÖll receive a JSON file containing the user's conversations with Copilot for the past X interactions (utterance/response pairs) that you select, along with their feedback logs. The file is redacted to protect Microsoft IP, if any. You can use any JSON viewer tool to inspect the data and include additional comments for the feedback. The file will be available for download once it's generated.
5. Decide whether or not to move forward with the feedback submission to Microsoft. If you choose to share the data, select **Submit**. If you donΓÇÖt want to share the data, select **Cancel**.
enterprise Microsoft 365 Vpn Stream And Live Events https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/enterprise/microsoft-365-vpn-stream-and-live-events.md
Title: "Special considerations for Stream and Teams events in VPN environments"
+ Title: "Special considerations for Teams events in VPN environments"
Previously updated : 09/12/2024 Last updated : 10/31/2024 audience: Admin
- must-keep f1.keywords: - NOCSH
-description: "Special considerations for Stream and Teams events in VPN environments"
+description: "Special considerations for Teams events in VPN environments"
-# Special considerations for Stream and Teams events in VPN environments
+# Special considerations for Teams events in VPN environments
> [!NOTE]
->This article is part of a set of articles that address Microsoft 365 optimization for remote users. The following endpoints are specific to Worldwide Commercial and Government Community Cloud (GCC) environments; the endpoints listed here are not applicable to U.S. Government GCC High or U.S. Government DoD environments.
+>This article is part of a set of articles that address Microsoft 365 optimization for remote users.
> >- For an overview of using VPN split tunneling to optimize Microsoft 365 connectivity for remote users, see [Overview: VPN split tunneling for Microsoft 365](microsoft-365-vpn-split-tunnel.md). >- For detailed guidance on implementing VPN split tunneling, see [Implementing VPN split tunneling for Microsoft 365](microsoft-365-vpn-implement-split-tunnel.md).
description: "Special considerations for Stream and Teams events in VPN environm
>- For guidance on securing Teams media traffic in VPN split tunneling environments, see [Securing Teams media traffic for VPN split tunneling](microsoft-365-vpn-securing-teams.md). >- For information about optimizing Microsoft 365 worldwide tenant performance for users in China, see [Microsoft 365 performance optimization for China users](microsoft-365-networking-china.md).
-Microsoft 365 Live Events attendee traffic (this includes attendees to Teams-produced live events and those produced with an external encoder via Teams, Stream, or Viva Engage), Microsoft Teams Town hall attendee traffic and on-demand Stream attendee traffic is currently categorized as **Default** versus **Optimize** in the [URL/IP list for the service](urls-and-ip-address-ranges.md). These endpoints are categorized as **Default** because they're hosted on CDNs that might also be used by other services. Customers generally prefer to proxy this type of traffic and apply any security elements normally done on endpoints such as these.
+Microsoft Teams Live events attendee traffic (this includes attendees to Teams-produced live events and those produced with an external encoder via Teams or Viva Engage) and Microsoft Teams Town hall attendee traffic is currently categorized as **Default** versus **Optimize** in the [URL/IP list for the service](urls-and-ip-address-ranges.md). These endpoints are categorized as **Default** because they're hosted on CDNs that might also be used by other services. Customers generally prefer to proxy this type of traffic and apply any security elements normally done on endpoints such as these.
-Many customers have asked for URL/IP data needed to connect their attendees to Stream or Teams events directly from their local internet connection, rather than route the high-volume and latency-sensitive traffic via the VPN infrastructure. Typically, this isn't possible without both dedicated namespaces and accurate IP information for the endpoints, which isn't provided for Microsoft 365 endpoints categorized as **Default**.
+Many customers have asked for URL/IP data needed to connect their attendees in Teams events directly from their local internet connection, rather than route the high-volume and latency-sensitive traffic via the VPN infrastructure. Typically, this isn't possible without both dedicated namespaces and accurate IP information for the endpoints, which isn't provided for Microsoft 365 endpoints categorized as **Default**.
-Use the following steps to enable direct connectivity for the Stream or Teams events services from clients using a forced tunnel VPN. This solution is intended to provide customers with an option to avoid routing Events attendee traffic over VPN while there's high network traffic due to work-from-home scenarios. If possible, we recommend accessing the service through an inspecting proxy.
+Use the following steps to identify and enable direct connectivity for attendee traffic for Teams Events from clients that are using a forced tunnel VPN. This solution is intended to provide customers with an option to avoid routing attendee traffic over VPN while there's high network traffic due to work-from-home scenarios. If possible, we recommend accessing the service through an inspecting proxy.
> [!NOTE] > Using this solution, there might be service elements that do not resolve to the IP addresses provided and thus traverse the VPN, but the bulk of high-volume traffic like streaming data should. There might be other elements outside the scope of Live Events/Stream which get caught by this offload, but these should be limited as they must meet both the FQDN _and_ the IP match before going direct. > [!IMPORTANT]
->We recommend you weigh the risk of sending more traffic that bypasses the VPN over the performance gain for Live Events.
+>We recommend you weigh the risk of sending more traffic that bypasses the VPN over the performance gain for Teams Events.
-To implement the forced tunnel exception for Teams Events and Stream, the following steps should be applied:
+To implement the forced tunnel exception for Teams Events, the following steps should be applied:
## 1. Configure external DNS resolution Clients need external, recursive DNS resolution to be available so that the following host names can be resolved to IP addresses. -- \*.azureedge.net
+For the **Commercial** cloud:
- \*.media.azure.net - \*.bmc.cdn.office.net - \*.ml.cdn.office.net
-**\*.azureedge.net** is used for Stream events ([Configure encoders for live streaming in Microsoft Stream - Microsoft Stream | Microsoft Docs](/stream/live-encoder-setup)).
- **\*.media.azure.net** and **\*.bmc.cdn.office.net** are used for Teams-produced Live Events (Quick Start events and RTMP-In supported events) scheduled from the Teams client. **\*.media.azure.net**, **\*.bmc.cdn.office.net** and **\*.ml.cdn.office.net** are used for Teams Town hall events.
-Some of these endpoints are shared with other elements outside of Stream or Teams events. We don't recommend just using these FQDNs to configure VPN offload even if technically possible in your VPN solution (for example, if it works at the FQDN rather than IP).
+> [!NOTE]
+> Some of these endpoints are shared with other elements outside of Teams events. We don't recommend just using these namespaces to configure VPN offload even if technically possible in your VPN solution (for example, if it works with the namespace rather than IP).
+
+For the **Government** clouds **(GCC, GCC High, DoD)**:
+- \*.cdn.ml.gcc.teams.microsoft.com
+- \*.cdn.ml.gov.teams.microsoft.us
+- \*.cdn.ml.dod.teams.microsoft.us
+
+**\*.cdn.ml.gcc.teams.microsoft.com** is used for Teams Town hall events in the Microsoft 365 U.S. Government Community Cloud (GCC).
+
+**\*.cdn.ml.gov.teams.microsoft.us** is used for Teams Town hall events in the Microsoft 365 U.S. Government GCC High Cloud (GCC High).
+
+**\*.cdn.ml.dod.teams.microsoft.us** is used for Teams Town hall events in the Microsoft 365 U.S. Government DoD Cloud (DoD).
FQDNs aren't required in the VPN configuration, they're purely for use in PAC files in combination with the IPs to send the relevant traffic direct. ## 2. Implement PAC file changes (where required)
-For organizations that utilize a PAC file to route traffic through a proxy while on VPN, this is normally achieved using FQDNs. However, with Stream/Live Events/Town hall, the host names provided contain wildcards such as **\*.azureedge.net**, which also encompasses other elements for which it isn't possible to provide full IP listings. Thus, if the request is sent direct based on DNS wildcard match alone, traffic to these endpoints will be blocked as there's no route via the direct path for it in [Step 3](#3-configure-routing-on-the-vpn-to-enable-direct-egress) later in this article.
+For organizations that utilize a PAC file to route traffic through a proxy while on VPN, this is normally achieved using FQDNs. However, with Teams events, the host names provided contain wildcards that resolve to IP addresses used by Content Delivery Networks (CDNs) which aren't utilized exclusively for Teams events traffic. Thus, if the request is sent direct based on DNS wildcard match alone, traffic to these endpoints will be blocked as there's no route via the direct path for it in [Step 3](#3-configure-routing-on-the-vpn-to-enable-direct-egress) later in this article.
-To solve this, we can provide the following IPs and use them in combination with the host names in an example PAC file as described in [Step 1](#1-configure-external-dns-resolution). The PAC file checks if the URL matches those used for Stream/Live Events/Town hall and then if it does, it then also checks to see if the IP returned from a DNS lookup matches those provided for the service. If _both_ match, then the traffic is routed direct. If either element (FQDN/IP) doesn't match, then the traffic is sent to the proxy. As a result, the configuration ensures that anything that resolves to an IP outside of the scope of both the IP and defined namespaces traverses the proxy via the VPN as normal.
+To solve this, we can provide the following IPs and use them in combination with the host names in an example PAC file as described in [Step 1](#1-configure-external-dns-resolution). The PAC file checks if the URL matches those used for Teams events and if it does, it then also checks to see if the IP returned from a DNS lookup matches those provided for the service. If _both_ match, then the traffic is routed direct. If either element (FQDN/IP) doesn't match, then the traffic is sent to the proxy. As a result, the configuration ensures that anything that resolves to an IP outside of the scope of both the IP and defined namespaces traverses the proxy via the VPN as normal.
### Gathering the current lists of CDN Endpoints
-Teams events use multiple CDN providers to stream to customers, to provide the best coverage, quality, and resiliency. Currently, both Azure CDN from Microsoft and from Verizon are used. Over time this could be changed due to situations such as regional availability. This article is a source to enable you to keep up to date on IP ranges.
+For the Commercial cloud, Teams events use multiple CDN providers to stream to customers, to provide the best coverage, quality, and resiliency. Currently, both Azure CDN from Microsoft and Azure CDN from Verizon are used. Over time this could be changed due to situations such as regional availability. This article is a source to enable you to keep up to date on IP ranges. For the Microsoft 365 U.S. Government clouds (GCC, GCC High and DoD) only Azure CDN from Microsoft is used.
-For Azure CDN from Microsoft, you can download the list from [Download Azure IP Ranges and Service Tags ΓÇô Public Cloud from Official Microsoft Download Center](https://www.microsoft.com/download/details.aspx?id=56519) - you'll need to look specifically for the service tag _AzureFrontdoor.Frontend_ in the JSON; _addressPrefixes_ will show the IPv4/IPv6 subnets. Over time the IPs can change, but the service tag list is always updated before they're put in use.
+For the **Commercial** cloud:
-For Azure CDN from Verizon (Edgecast) you can find an exhaustive list using [Edge Nodes - List](/rest/api/cdn/edge-nodes/list) (select **Try It** ) - you'll need to look specifically for the **Premium\_Verizon** section. Note that this API shows all Edgecast IPs (origin and Anycast). Currently there isn't a mechanism for the API to distinguish between origin and Anycast.
+- For Azure CDN from Microsoft, you can download the list from [Download Azure IP Ranges and Service Tags ΓÇô Public Cloud from Official Microsoft Download Center](https://www.microsoft.com/download/details.aspx?id=56519) - you'll need to look specifically for the service tag `AzureFrontdoor.Frontend` in the JSON; _addressPrefixes_ will show the IPv4/IPv6 subnets. Over time the IPs can change, but the service tag list is always updated before they're put in use.
-To implement this in a PAC file, you can use the following example that sends the Microsoft 365 Optimize traffic direct (which is recommended best practice) via FQDN, and the critical Stream/Live Events traffic direct via a combination of the FQDN and the returned IP address. The placeholder name _Contoso_ would need to be edited to your specific tenant's name where _contoso_ is from contoso.onmicrosoft.com
+- For Azure CDN from Verizon (Edgecast) you can find an exhaustive list using [Edge Nodes - List](/rest/api/cdn/edge-nodes/list) (select **Try It** ) - you'll need to look specifically for the **Premium\_Verizon** section. Note that this API shows all Edgecast IPs (origin and Anycast). Currently there isn't a mechanism for the API to distinguish between origin and Anycast.
-#### Example PAC file
+For the **Government** clouds **(GCC, GCC High and DoD)**:
-Here's an example of how to generate the PAC files:
+- For Azure CDN from Microsoft, you can download the list from [Download Azure IP Ranges and Service Tags ΓÇô US Government Cloud from Official Microsoft Download Center](https://www.microsoft.com/download/details.aspx?id=57063) - you'll need to look specifically for the service tag `AzureFrontdoor.Frontend` in the JSON; _addressPrefixes_ will show the IPv4/IPv6 subnets. Over time the IPs can change, but the service tag list is always updated before they're put in use.
-1. Save the script below to your local hard disk as _Get-TLEPacFile.ps1_.
-1. Go to the [Verizon URL](/rest/api/cdn/edge-nodes/list#code-try-0) and download the resulting JSON (copy paste it into a file like cdnedgenodes.json)
+The following script can generate a PAC file that will include the namespaces and IP listings for the Teams Events attendee traffic. The **-Instance** parameter determines the specified environment - the supported values are [Worldwide, USGov, USGovGCCHigh and UsGovDoD]. Optionally, the script can also include the Optimize and Allow domains as well using the **-Type** parameter.
+
+#### Example PAC file generation for the Commercial cloud
+
+Here's an example of how to generate the PAC file for the Commercial cloud:
+
+1. Save the script to your local hard disk as _Get-EventsPacFile.ps1_.
+1. Go to the [Verizon URL](/rest/api/cdn/edge-nodes/list#code-try-0) and download the resulting JSON (copy paste it into a file named cdnedgenodes.json)
1. Put the file into the same folder as the script.
-1. In a PowerShell window, run the following command. Change out the tenant name for something else if you want the SPO URLs. This is Type 2, so **Optimize** and **Allow** (Type 1 is Optimize only).
+1. In a PowerShell window, run the following command. If you only desire the Optimize names (and not Optimize and Allow) change the -Type parameter to Optimize.
```powershell
- .\Get-TLEPacFile.ps1 -Instance Worldwide -Type 2 -TenantName <contoso> -CdnEdgeNodesFilePath .\cdnedgenodes.json -FilePath TLE.pac
+ .\Get-EventsPacFile.ps1 -Instance Worldwide -CdnEdgeNodesFilePath .\cdnedgenodes.json -Type OptimizeAndAllow -FilePath .\Commercial.pac
```
-1. The TLE.pac file will contain all the namespaces and IPs (IPv4/IPv6).
+1. The Commercial.pac file will contain all the namespaces and IPs (IPv4/IPv6) for Teams Events attendee traffic.
-##### Get-TLEPacFile.ps1
+#### Example PAC file generation for the Microsoft 365 U.S. Government Community Cloud (GCC)
+
+Here's an example of how to generate the PAC file for the GCC environment:
+
+1. Save the script to your local hard disk as _Get-EventsPacFile.ps1_.
+1. In a PowerShell window, run the following command. If you only desire the Optimize names (and not Optimize and Allow) change the -Type parameter to Optimize.
+
+ ```powershell
+ .\Get-EventsPacFile.ps1 -Instance UsGov -Type OptimizeAndAllow -FilePath .\USGov.pac
+ ```
+
+1. The USGov.pac file will contain all the namespaces and IPs (IPv4/IPv6) specific to the GCC cloud for Teams Town hall attendee traffic.
+
+##### Get-EventsPacFile.ps1
```powershell # Copyright (c) Microsoft Corporation. All rights reserved.
Here's an example of how to generate the PAC files:
<#PSScriptInfo
-.VERSION 1.0.5
+.VERSION 1.0.6
.AUTHOR Microsoft Corporation
Licensed under the MIT License.
.SYNOPSIS
-Create a PAC file for Microsoft 365 prioritized connectivity
+Create a PAC file for Microsoft 365 prioritized connectivity for Teams Events (Live Events, Town hall)
.DESCRIPTION
on how traffic needs to be prioritized.
.PARAMETER Instance
-The service instance inside Microsoft 365.
+The service instance inside Microsoft 365. The default is Worldwide. To specify GCC use the USGov value.
.PARAMETER ClientRequestId
The default proxy settings for non priority traffic.
.PARAMETER Type
-The type of prioritization to give. Valid values are 1 and 2, which are 2 different modes of operation.
-Type 1 will send Optimize traffic to the direct route. Type 2 will send Optimize and Allow traffic to
-the direct route.
+The type of prioritization to give. Valid values are Optimize and OptimizeAndAllow, which are 2 different modes of operation.
+These values align to the categories defined in our Principles of Network Connectivity at https://aka.ms/pnc
.PARAMETER Lowercase
The file to print the content to.
.EXAMPLE
-Get-TLEPacFile.ps1 -ClientRequestId b10c5ed1-bad1-445f-b386-b919946339a7 -DefaultProxySettings "PROXY 4.4.4.4:70" -FilePath type1.pac
+Get-EventsPacFile.ps1 -Instance Worldwide -CdnEdgeNodesFilePath .\cdnedgenodes.json -Type OptimizeAndAllow -FilePath .\Commercial.pac
.EXAMPLE
-Get-TLEPacFile.ps1 -ClientRequestId b10c5ed1-bad1-445f-b386-b919946339a7 -Instance China -Type 2 -DefaultProxySettings "PROXY 4.4.4.4:70" -FilePath type2.pac
-
-.EXAMPLE
+Get-EventsPacFile.ps1 -Instance USGov -FilePath .\USGov.pac -Type OptimizeAndAllow
-Get-TLEPacFile.ps1 -ClientRequestId b10c5ed1-bad1-445f-b386-b919946339a7 -Instance WorldWide -Lowercase -TenantName tenantName -ServiceAreas Sharepoint
#> #Requires -Version 2
-[CmdletBinding(SupportsShouldProcess=$True)]
+[CmdletBinding(SupportsShouldProcess = $True)]
Param (
- [Parameter(Mandatory = $false)]
- [ValidateSet('Worldwide', 'Germany', 'China', 'USGovDoD', 'USGovGCCHigh')]
+ [Parameter()]
+ [ValidateSet('Worldwide', 'Germany', 'China', 'USGovDoD', 'USGovGCCHigh', 'USGov')]
[String] $Instance = "Worldwide",
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateNotNullOrEmpty()]
- [guid] $ClientRequestId = [Guid]::NewGuid().Guid,
+ [guid] $ClientRequestId = [Guid]::NewGuid(),
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateNotNullOrEmpty()] [String] $DirectProxySettings = 'DIRECT',
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateNotNullOrEmpty()] [String] $DefaultProxySettings = 'PROXY 10.10.10.10:8080',
- [Parameter(Mandatory = $false)]
- [ValidateRange(1, 2)]
- [int] $Type = 1,
+ [Parameter()]
+ [ValidateSet('OptimizeOnly','OptimizeAndAllow')]
+ [string]
+ $Type = 'OptimizeOnly',
- [Parameter(Mandatory = $false)]
- [switch] $Lowercase = $false,
+ [Parameter()]
+ [switch] $Lowercase,
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateNotNullOrEmpty()] [string] $TenantName,
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateSet('Exchange', 'SharePoint', 'Common', 'Skype')] [string[]] $ServiceAreas,
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateNotNullOrEmpty()] [string] $FilePath,
- [Parameter(Mandatory = $false)]
+ [Parameter()]
[ValidateNotNullOrEmpty()] [string] $CdnEdgeNodesFilePath )
Param (
### Global constants ##################################################################################################################
-$baseServiceUrl = "https://endpoints.office.com/endpoints/$Instance/?ClientRequestId={$ClientRequestId}"
+$baseServiceUrl = if ($Instance -eq 'USGov') {
+ "https://endpoints.office.com/endpoints/Worldwide/?ClientRequestId=$ClientRequestId"
+} else {
+ "https://endpoints.office.com/endpoints/$Instance/?ClientRequestId=$ClientRequestId"
+}
$directProxyVarName = "direct" $defaultProxyVarName = "proxyServer"
-$bl = "`r`n"
################################################################################################################## ### Functions to create PAC files ##################################################################################################################
-function Get-PacClauses
-{
+function Get-PacString {
param(
- [Parameter(Mandatory = $false)]
- [string[]] $Urls,
-
- [Parameter(Mandatory = $true)]
- [ValidateNotNullOrEmpty()]
- [String] $ReturnVarName
- )
-
- if (!$Urls)
- {
- return ""
- }
+ [Parameter(ValueFromPipelineByPropertyName)]
+ [string[]]
+ $NonDirectOverrideFqdns,
- $clauses = (($Urls | ForEach-Object { "shExpMatch(host, `"$_`")" }) -Join "$bl || ")
-
-@"
- if($clauses)
- {
- return $ReturnVarName;
- }
-"@
-}
-
-function Get-PacString
-{
- param(
- [Parameter(Mandatory = $true)]
- [ValidateNotNullOrEmpty()]
- [array[]] $MapVarUrls
+ [Parameter(ValueFromPipelineByPropertyName)]
+ [string[]]
+ $DirectFqdns
)
-@"
-// This PAC file will provide proxy config to Microsoft 365 services
-// using data from the public web service for all endpoints
-function FindProxyForURL(url, host)
-{
- var $directProxyVarName = "$DirectProxySettings";
- var $defaultProxyVarName = "$DefaultProxySettings";
+ $PACSb = New-Object 'System.Text.StringBuilder'
+ $null = & {
+ $PACSb.AppendLine('// This PAC file will provide proxy config to Microsoft 365 services')
+ $PACSb.AppendLine('// using data from the public web service for all endpoints')
+ $PACSb.AppendLine('function FindProxyForURL(url, host)')
+ $PACSb.AppendLine('{')
+ $PACSb.Append(' var ').Append($directProxyVarName).Append(' = "').Append($DirectProxySettings).AppendLine('";')
+ $PACSb.Append(' var ').Append($defaultProxyVarName).Append(' = "').Append($DefaultProxySettings).AppendLine('";')
+ if ($Lowercase) {
+ $PACSb.AppendLine(' host = host.toLowerCase();')
+ }
+ $first = $true
+ foreach ($fqdn in $NonDirectOverrideFqdns) {
+ if ($first) {
+ $PACSb.AppendLine()
+ $PACSb.AppendLine(' // Force proxy for subdomains of bypassed hosts')
+ $PACSb.AppendLine()
+ $PACSb.Append(' if(')
+ }
+ else {
+ $PACSb.AppendLine().Append(' || ')
+ }
+ $first = $false
+ $PACSb.Append('shExpMatch(host, "').Append($fqdn).Append('")')
+ }
+ if (!$first) {
+ $PACSb.AppendLine(')')
+ $PACSb.AppendLine(' {')
+ $PACSb.Append(' return ').Append($directProxyVarName).AppendLine(';')
+ $PACSb.AppendLine(' }')
+ }
-$( if ($Lowercase) { " host = host.toLowerCase();" })
+ $first = $true
+ foreach ($fqdn in $DirectFqdns) {
+ if ($first) {
+ $PACSb.AppendLine()
+ $PACSb.AppendLine(' // Bypassed hosts')
+ $PACSb.AppendLine()
+ $PACSb.Append(' if(')
+ }
+ else {
+ $PACSb.AppendLine().Append(' || ')
+ }
+ $first = $false
+ $PACSb.Append('shExpMatch(host, "').Append($fqdn).Append('")')
+ }
+ if (!$first) {
+ $PACSb.AppendLine(')')
+ $PACSb.AppendLine(' {')
+ $PACSb.Append(' return ').Append($directProxyVarName).AppendLine(';')
+ $PACSb.AppendLine(' }')
+ }
-$( ($MapVarUrls | ForEach-Object { Get-PACClauses -ReturnVarName $_.Item1 -Urls $_.Item2 }) -Join "$bl$bl" )
+ if (!$ServiceAreas -or $ServiceAreas.Contains('Skype')) {
+ $EventsConfig = Get-TeamsEventsConfiguration
+ if ($EventsConfig.EventsAddressRanges.Count -gt 0) {
+ $EventsBlock = $EventsConfig | Get-TLEPacConfiguration
+ $PACSb.AppendLine()
+ $PACSb.AppendLine($EventsBlock)
+ }
+ }
-$( if (!$ServiceAreas -or $ServiceAreas.Contains('Skype')) { Get-TLEPacConfiguration })
+ $PACSb.Append(' return ').Append($defaultProxyVarName).AppendLine(';').Append('}')
+ }
- return $defaultProxyVarName;
-}
-"@ -replace "($bl){3,}","$bl$bl" # Collapse more than one blank line in the PAC file so it looks better.
+ return $PACSb.ToString()
} ################################################################################################################## ### Functions to get and filter endpoints ##################################################################################################################-
-function Get-TLEPacConfiguration {
- param ()
- $PreBlock = @"
- // Don't Proxy Teams Live Events traffic
-
- if(shExpMatch(host, "*.azureedge.net")
- || shExpMatch(host, "*.bmc.cdn.office.net")
- || shExpMatch(host, "*.ml.cdn.office.net")
- || shExpMatch(host, "*.media.azure.net"))
- {
- var resolved_ip = dnsResolveEx(host);
-
-"@
- $TLESb = New-Object 'System.Text.StringBuilder'
- $TLESb.Append($PreBlock) | Out-Null
-
- if (![string]::IsNullOrEmpty($CdnEdgeNodesFilePath) -and (Test-Path -Path $CdnEdgeNodesFilePath)) {
- $CdnData = Get-Content -Path $CdnEdgeNodesFilePath -Raw -ErrorAction SilentlyContinue | ConvertFrom-Json | Select-Object -ExpandProperty value |
- Where-Object { $_.name -eq 'Premium_Verizon'} | Select-Object -First 1 -ExpandProperty properties |
- Select-Object -ExpandProperty ipAddressGroups
- $CdnData | Select-Object -ExpandProperty ipv4Addresses | ForEach-Object {
- if ($TLESb.Length -eq $PreBlock.Length) {
- $TLESb.Append(" if(") | Out-Null
- }
- else {
- $TLESb.AppendLine() | Out-Null
- $TLESb.Append(" || ") | Out-Null
- }
- $TLESb.Append("isInNetEx(resolved_ip, `"$($_.BaseIpAddress)/$($_.prefixLength)`")") | Out-Null
+function Get-TeamsEventsConfiguration {
+ param()
+ $IncludedHosts = switch ($Instance) {
+ 'USGov' {
+ @('*.cdn.ml.gcc.teams.microsoft.com')
+ break
}
- $CdnData | Select-Object -ExpandProperty ipv6Addresses | ForEach-Object {
- if ($TLESb.Length -eq $PreBlock.Length) {
- $TLESb.Append(" if(") | Out-Null
- }
- else {
- $TLESb.AppendLine() | Out-Null
- $TLESb.Append(" || ") | Out-Null
- }
- $TLESb.Append("isInNetEx(resolved_ip, `"$($_.BaseIpAddress)/$($_.prefixLength)`")") | Out-Null
+ 'USGovDoD' {
+ @('*.cdn.ml.dod.teams.microsoft.us')
+ break
+ }
+ 'USGovGCCHigh' {
+ @('*.cdn.ml.gov.teams.microsoft.us')
+ break
+ }
+ default {
+ @('*.bmc.cdn.office.net', '*.ml.cdn.office.net', '*.media.azure.net')
+ break
} }
- $AzureIPsUrl = Invoke-WebRequest -Uri "https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519" -UseBasicParsing -ErrorAction SilentlyContinue |
- Select-Object -ExpandProperty Links | Select-Object -ExpandProperty href |
+ $IncludedAddressRanges = & {
+ if (!$Instance.StartsWith('USGov') -and ![string]::IsNullOrEmpty($CdnEdgeNodesFilePath) -and (Test-Path -Path $CdnEdgeNodesFilePath)) {
+ Get-Content -Path $CdnEdgeNodesFilePath -Raw -ErrorAction SilentlyContinue | ConvertFrom-Json | Select-Object -ExpandProperty value |
+ Where-Object { $_.name -eq 'Premium_Verizon' } | Select-Object -First 1 -ExpandProperty properties |
+ Select-Object -ExpandProperty ipAddressGroups |
+ ForEach-Object {
+ $_.ipv4Addresses
+ $_.ipv6Addresses
+ } |
+ Where-Object { $_.BaseIpAddress } |
+ ForEach-Object { $_.BaseIpAddress + '/' + $_.prefixLength }
+ }
+
+ $ServiceTagsDownloadId = '56519'
+ if ($Instance.StartsWith('USGov')) {
+ $ServiceTagsDownloadId = '57063'
+ }
+ $AzureIPsUrl = Invoke-WebRequest -Uri "https://www.microsoft.com/en-us/download/confirmation.aspx?id=$ServiceTagsDownloadId" -UseBasicParsing -ErrorAction SilentlyContinue |
+ Select-Object -ExpandProperty Links | Select-Object -ExpandProperty href |
Where-Object { $_.EndsWith('.json') -and $_ -match 'ServiceTags' } | Select-Object -First 1
- if ($AzureIPsUrl) {
- Invoke-RestMethod -Uri $AzureIPsUrl -ErrorAction SilentlyContinue | Select-Object -ExpandProperty values |
- Where-Object { $_.name -eq 'AzureFrontDoor.Frontend' } | Select-Object -First 1 -ExpandProperty properties |
- Select-Object -ExpandProperty addressPrefixes | ForEach-Object {
- if ($TLESb.Length -eq $PreBlock.Length) {
- $TLESb.Append(" if(") | Out-Null
- }
- else {
- $TLESb.AppendLine() | Out-Null
- $TLESb.Append(" || ") | Out-Null
- }
- $TLESb.Append("isInNetEx(resolved_ip, `"$_`")") | Out-Null
- }
- }
- if ($TLESb.Length -gt $PreBlock.Length) {
- $TLESb.AppendLine(")") | Out-Null
- $TLESb.AppendLine(" {") | Out-Null
- $TLESb.AppendLine(" return $directProxyVarName;") | Out-Null
- $TLESb.AppendLine(" }") | Out-Null
+ if ($AzureIPsUrl) {
+ Invoke-RestMethod -Uri $AzureIPsUrl -ErrorAction SilentlyContinue | Select-Object -ExpandProperty values |
+ Where-Object { $_.name -eq 'AzureFrontDoor.Frontend' } | Select-Object -First 1 -ExpandProperty properties |
+ Select-Object -ExpandProperty addressPrefixes
+ }
}
- else {
- $TLESb.AppendLine(" // no addresses found for service via script") | Out-Null
+ [PSCustomObject]@{
+ EventsHostNames = $IncludedHosts
+ EventsAddressRanges = $IncludedAddressRanges
}
- $TLESb.AppendLine(" }") | Out-Null
- return $TLESb.ToString()
}
-function Get-Regex
-{
- param(
- [Parameter(Mandatory = $true)]
- [ValidateNotNullOrEmpty()]
- [string] $Fqdn
- )
-
- return "^" + $Fqdn.Replace(".", "\.").Replace("*", ".*").Replace("?", ".?") + "$"
-}
-
-function Match-RegexList
-{
- param(
- [Parameter(Mandatory = $true)]
- [ValidateNotNullOrEmpty()]
- [string] $ToMatch,
-
- [Parameter(Mandatory = $false)]
- [string[]] $MatchList
+function Get-TLEPacConfiguration {
+ [CmdletBinding()]
+ param (
+ [Parameter(ValueFromPipelineByPropertyName)]
+ [string[]]
+ $EventsHostNames,
+
+ [Parameter(ValueFromPipelineByPropertyName)]
+ [string[]]
+ $EventsAddressRanges
)-
- if (!$MatchList)
- {
- return $false
+ if ($EventsAddressRanges.Count -eq 0) {
+ return ''
+ }
+ $TLESb = New-Object 'System.Text.StringBuilder'
+ $Spaces = ' '
+ $null = $TLESb.Append($Spaces).AppendLine('// Bypass Teams Events attendee traffic')
+ $first = $true
+ $null = foreach ($hostName in $EventsHostNames) {
+ if ($first) {
+ $TLESb.AppendLine().Append($Spaces).Append('if(')
+ }
+ else {
+ $TLESb.AppendLine().Append($Spaces).Append(' || ')
+ }
+ $first = $false
+ $TLESb.Append('shExpMatch(host, "').Append($hostName).Append('")')
}
- foreach ($regex in $MatchList)
- {
- if ($regex -ne $ToMatch -and $ToMatch -match (Get-Regex $regex))
- {
- return $true
+ $null = $TLESb.AppendLine(')').Append($Spaces).AppendLine('{')
+ $Spaces = $Spaces + $Spaces
+ $null = $TLESb.Append($Spaces).AppendLine('var resolved_ip = dnsResolveEx(host);')
+
+ $first = $true
+ $null = foreach ($addressRange in $EventsAddressRanges) {
+ if ($first) {
+ $TLESb.AppendLine().Append($Spaces).Append('if(')
+ } else {
+ $TLESb.AppendLine().Append($Spaces).Append(' || ')
}
+ $first = $false
+ $TLESb.Append('isInNetEx(resolved_ip, "').Append($addressRange).Append('")')
+ }
+ if (!$first) {
+ $null = $TLESb.AppendLine(')').
+ Append($Spaces).AppendLine('{').
+ Append($Spaces).Append(' return ').Append($directProxyVarName).AppendLine(';').
+ Append($Spaces).AppendLine('}')
}
- return $false
+ else {
+ $null = $TLESb.Append($Spaces).AppendLine('// no addresses found for service via script')
+ }
+ return $TLESb.AppendLine(' }').ToString()
}
-function Get-Endpoints
-{
+function Get-Endpoints {
$url = $baseServiceUrl
- if ($TenantName)
- {
+ if ($TenantName) {
$url += "&TenantName=$TenantName" }
- if ($ServiceAreas)
- {
+ if ($ServiceAreas) {
$url += "&ServiceAreas=" + ($ServiceAreas -Join ",") } return Invoke-RestMethod -Uri $url }
-function Get-Urls
-{
- param(
- [Parameter(Mandatory = $false)]
- [psobject[]] $Endpoints
- )
-
- if ($Endpoints)
- {
- return $Endpoints | Where-Object { $_.urls } | ForEach-Object { $_.urls } | Sort-Object -Unique
- }
- return @()
-}
-
-function Get-UrlVarTuple
-{
- param(
- [Parameter(Mandatory = $true)]
- [ValidateNotNullOrEmpty()]
- [string] $VarName,
-
- [Parameter(Mandatory = $false)]
- [string[]] $Urls
- )
- return New-Object 'Tuple[string,string[]]'($VarName, $Urls)
-}
-
-function Get-MapVarUrls
-{
+function Get-MapVarUrls {
Write-Verbose "Retrieving all endpoints for instance $Instance from web service." $Endpoints = Get-Endpoints
- if ($Type -eq 1)
- {
- $directUrls = Get-Urls ($Endpoints | Where-Object { $_.category -eq "Optimize" })
- $nonDirectPriorityUrls = Get-Urls ($Endpoints | Where-Object { $_.category -ne "Optimize" }) | Where-Object { Match-RegexList $_ $directUrls }
- return @(
- Get-UrlVarTuple -VarName $defaultProxyVarName -Urls $nonDirectPriorityUrls
- Get-UrlVarTuple -VarName $directProxyVarName -Urls $directUrls
- )
- }
- elseif ($Type -eq 2)
- {
- $directUrls = Get-Urls ($Endpoints | Where-Object { $_.category -in @("Optimize", "Allow")})
- $nonDirectPriorityUrls = Get-Urls ($Endpoints | Where-Object { $_.category -notin @("Optimize", "Allow") }) | Where-Object { Match-RegexList $_ $directUrls }
- return @(
- Get-UrlVarTuple -VarName $defaultProxyVarName -Urls $nonDirectPriorityUrls
- Get-UrlVarTuple -VarName $directProxyVarName -Urls $directUrls
- )
+ $Include = if ($Type -eq 'OptimizeOnly') { @('Optimize') } else { @('Optimize', 'Allow') }
+
+ $directUrls = $endpoints |
+ Where-Object { $_.category -in $Include } |
+ Where-Object { $_.urls } |
+ ForEach-Object { $_.urls } |
+ Sort-Object -Unique
+
+ $MatchList = [Collections.Generic.Dictionary[string,Regex]]@{}
+ $directUrls |
+ Where-Object { $_.Contains('*') -or $_.Contains('?') } |
+ ForEach-Object { $MatchList[$_] = [Regex]::new('^{0}$' -f $_.Replace('.','\.').Replace('*','.*').Replace('?','.?'),[Text.RegularExpressions.RegexOptions]::IgnoreCase) }
+
+ $nonDirectPriorityUrls = $endpoints |
+ Where-Object { $_.category -notin $Include } |
+ Where-Object { $_.urls } |
+ ForEach-Object { $_.urls } |
+ Sort-Object -Unique |
+ Where-Object { [Linq.Enumerable]::Any($MatchList,[Func[System.Collections.Generic.KeyValuePair[string,Regex],bool]]{$args[0].Key -ne $_ -and $args[0].Value.IsMatch($_)}) }
+
+ return [PSCustomObject]@{
+ NonDirectOverrideFqdns = $nonDirectPriorityUrls
+ DirectFqdns = $directUrls
} }
function Get-MapVarUrls
### Main script ##################################################################################################################
-$content = Get-PacString (Get-MapVarUrls)
+$content = Get-MapVarUrls | Get-PacString
-if ($FilePath)
-{
+if ($FilePath) {
$content | Out-File -FilePath $FilePath -Encoding ascii }
-else
-{
+else {
$content } ```
-The script will automatically parse the Azure list based on the [download URL](https://www.microsoft.com/download/details.aspx?id=56519) and keys off of **AzureFrontDoor.Frontend**, so there's no need to get that manually.
+The script will automatically parse the appropriate Azure CDN list based on the **Instance** parameter value and keys off of **AzureFrontDoor.Frontend**, so there's no need to get that manually.
-Again, we don't recommend performing VPN offload using just the FQDNs; utilizing **both** the FQDNs and the IP addresses in the function helps scope the use of this offload to a limited set of endpoints including Live Events/Stream. The way the function is structured will result in a DNS lookup being done for the FQDN that matches those listed by the client directly, i.e. DNS resolution of the remaining namespaces remains unchanged.
+Again, we don't recommend performing VPN offload using just the FQDNs; utilizing **both** the FQDNs and the IP addresses in the function helps scope the use of this offload to a limited set of endpoints including Teams Events. The way the function is structured will result in a DNS lookup being done for the FQDN that matches those listed by the client directly, i.e. DNS resolution of the remaining namespaces remains unchanged.
-If you wish to limit the risk of offloading endpoints not related to Teams events and Stream, you can remove the **\*.azureedge.net** domain from the configuration which is where most of this risk lies as this is a shared domain used for all Azure CDN customers. The downside of this is that any event using an external encoder powered by Stream won't be optimized, but events produced/organized within Teams will be.
## 3. Configure routing on the VPN to enable direct egress
-The final step is to add a direct route for the Teams event IPs described in **Gathering the current lists of CDN Endpoints** into the VPN configuration to ensure the traffic isn't sent via the forced tunnel into the VPN. Detailed information on how to do this for Microsoft 365 Optimize endpoints can be found in the [Implement VPN split tunneling](microsoft-365-vpn-implement-split-tunnel.md#implement-vpn-split-tunneling) section of [Implementing VPN split tunneling for Microsoft 365](microsoft-365-vpn-implement-split-tunnel.md). The process is exactly the same for the Stream or Teams events IPs listed in this document.
+The final step is to add a direct route for the Teams event IPs described in **Gathering the current lists of CDN Endpoints** into the VPN configuration to ensure the traffic isn't sent via the forced tunnel into the VPN. Detailed information on how to do this for Microsoft 365 Optimize endpoints can be found in the [Implement VPN split tunneling](microsoft-365-vpn-implement-split-tunnel.md#implement-vpn-split-tunneling) section of [Implementing VPN split tunneling for Microsoft 365](microsoft-365-vpn-implement-split-tunnel.md). The process is exactly the same for the Teams events IPs listed in this document.
-Note that only the IPs (not FQDNs) from [Gathering the current lists of CDN Endpoints](#gathering-the-current-lists-of-cdn-endpoints) should be used for VPN configuration.
+> [!NOTE]
+> Only the IPs (not FQDNs) from [Gathering the current lists of CDN Endpoints](#gathering-the-current-lists-of-cdn-endpoints) should be used for VPN configuration.
## FAQ ### Will this send all my traffic to the service direct?
-No, this will send the latency-sensitive streaming traffic for a Teams Event or Stream video direct, any other traffic will continue to use the VPN tunnel if they don't resolve to the IPs published.
+No, this will send the latency-sensitive streaming traffic for a Teams Event attendee direct, any other traffic will continue to use the VPN tunnel if they don't resolve to the IPs published.
### Do I need to use the IPv6 Addresses?
Microsoft has strict controls around the format and type of information that is
The **Default** endpoint category has no IP information provided for numerous reasons (Default endpoints might be outside of the control of Microsoft, might change too frequently, or might be in blocks shared with other elements). For this reason, Default endpoints are designed to be sent via FQDN to an inspecting proxy, like normal web traffic.
-In this case, the above endpoints are CDNs that might be used by non-Microsoft controlled elements other than Live Events or Stream, and thus sending the traffic direct will also mean anything else which resolves to these IPs will also be sent direct from the client. Due to the unique nature of the current global crisis and to meet the short-term needs of our customers, Microsoft has provided the information above for customers to use as they see fit.
+In this case, the above endpoints are CDNs that might be used by non-Microsoft controlled elements other than Teams Events, and thus sending the traffic direct will also mean anything else which resolves to these IPs will also be sent direct from the client. Due to the unique nature of the current global crisis and to meet the short-term needs of our customers, Microsoft has provided the information above for customers to use as they see fit.
Microsoft is working to reconfigure the Teams events endpoints to allow them to be included in the Allow/Optimize endpoint categories in the future. ### Do I only need to allow access to these IPs?
-No, access to all of the **Required** marked endpoints in [the URL/IP service](urls-and-ip-address-ranges.md) is essential for the service to operate. In addition, any Optional endpoint marked for Stream (ID 41-45) is required.
+No, access to all of the **Required** marked endpoints for the appropriate environment is essential for the service to operate.
+- Worldwide including GCC: [Endpoints for Worldwide](urls-and-ip-address-ranges.md)
+- Microsoft 365 U.S. Government GCC High: [Endpoints for GCC High](microsoft-365-u-s-government-gcc-high-endpoints.md)
+- Microsoft 365 U.S. Government DoD: [Endpoints for DoD](microsoft-365-u-s-government-dod-endpoints.md)
### What scenarios will this advice cover? 1. Live events produced within the Teams App
-2. Viewing Stream hosted content
-3. External device (encoder) produced events
-4. Teams Town hall
+2. External device (encoder) produced events
+3. Teams Town hall
### Does this advice cover presenter traffic?
-It doesn't; the advice above is purely for those consuming the service. Presenting from within Teams will see the presenter's traffic flowing to the Optimize marked UDP endpoints listed in URL/IP service row 11 with detailed VPN offload advice outlined in the [Implement VPN split tunneling](microsoft-365-vpn-implement-split-tunnel.md#implement-vpn-split-tunneling) section of [Implementing VPN split tunneling for Microsoft 365](microsoft-365-vpn-implement-split-tunnel.md).
-
-### Does this configuration risk traffic other than Town hall, Live Events &amp; Stream being sent direct?
+It doesn't; the advice above is purely for those attending the event. Presenting from within Teams will see the presenter's traffic flowing to the Optimize marked UDP endpoints listed in URL/IP service row 11 with detailed VPN offload advice outlined in the [Implement VPN split tunneling](microsoft-365-vpn-implement-split-tunnel.md#implement-vpn-split-tunneling) section of [Implementing VPN split tunneling for Microsoft 365](microsoft-365-vpn-implement-split-tunnel.md).
-Yes, due to shared FQDNs used for some elements of the service, this is unavoidable. This traffic is normally sent via a corporate proxy which can apply inspection. In a VPN split tunnel scenario, using both the FQDNs and IPs will scope this risk down to a minimum, but it will still exist. Customers can remove the **\*.azureedge.net** domain from the offload configuration and reduce this risk to a bare minimum but this will remove the offload of Stream-supported Live Events (Teams-scheduled, Stream encoder events, Viva Engage events produced in Teams, Viva Engage-scheduled Stream encoder events, and Stream scheduled events or on-demand viewing from Stream). Events scheduled and produced in Teams (including Town hall) are unaffected.
## Related articles
enterprise Multi Geo User Experience https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/enterprise/multi-geo-user-experience.md
Title: "User experience in a multi-geo environment" Previously updated : 09/25/2024 Last updated : 10/29/2024
There are two constituents of the Microsoft 365 Person data:
- My Microsoft 365 People dataset ([contact resource type](/graph/api/resources/contact?view=graph-rest-1.0&preserve-view=true)), which represents the list of the user's Microsoft 365 contacts along with the userΓÇÖs version of their contacts' Microsoft 365 profile. This edited or unedited version of another userΓÇÖs profile will always remain private in the current userΓÇÖs mailbox and won't be replicated anywhere.
-To enable discovery, rich people search, and full fidelity collaboration experiences, the Microsoft 365 profile of users in the tenant is replicated across geos when a Multi-Geo tenant is first set up (for instance, to provide the Global Address List) and in response to user actions. Examples of user actions include direct and indirect interactions with one or more users in the tenant via activities like joining the Organization, creating and\or joining Teams meetings, sharing and\or co-editing files, profile card lookup, and adding of contacts as described in [Add, find, edit, or delete a contact in Outlook](https://support.microsoft.com/office/add-find-edit-or-delete-a-contact-in-outlook-e1dc4548-3bd6-4644-aecd-47b5728f7b0d#:~:text=information%20any%20time.-,Select%20the%20contact%20from%20the%20list%2C%20then%20select%20Edit%20contact,and%20begin%20adding%20more%20information.&text=someone's%20profile%20card-,In%20Mail%2C%20open%20an%20email%20message%20in%20the%20reading%20pane,card%2C%20select%20Add%20to%20contacts.). The replicated Microsoft 365 profiles of other users from an interaction\collaboration are stored in the Microsoft 365 People dataset of the target user shard.
+To enable discovery, organizational structure exploration, rich people search, and full fidelity collaboration experiences, the Global Address List (GAL) and the Microsoft 365 Profile of users in the tenant is replicated and kept in sync across geos both when a Multi-Geo tenant is first set up and in response to certain user actions. Examples of user actions include direct and indirect interactions with one or more users in the tenant via activities like becoming part of the Organization, creating and/or joining Teams meetings, sharing and/or co-editing files, profile card lookup, and adding of contacts as described in [Add, find, edit, or delete a contact in Outlook](https://support.microsoft.com/office/add-find-edit-or-delete-a-contact-in-outlook-e1dc4548-3bd6-4644-aecd-47b5728f7b0d#:~:text=information%20any%20time.-,Select%20the%20contact%20from%20the%20list%2C%20then%20select%20Edit%20contact,and%20begin%20adding%20more%20information.&text=someone's%20profile%20card-,In%20Mail%2C%20open%20an%20email%20message%20in%20the%20reading%20pane,card%2C%20select%20Add%20to%20contacts.).
+
+In addition to the central GAL, replicated Microsoft 365 Profiles of other users from an interaction or collaboration are stored in the Microsoft 365 People dataset of the target user's mailbox.
includes Office 365 Operated By 21Vianet Endpoints https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/includes/office-365-operated-by-21vianet-endpoints.md
<!--THIS FILE IS AUTOMATICALLY GENERATED. MANUAL CHANGES WILL BE OVERWRITTEN.--> <!--Please contact the Office 365 Endpoints team with any questions.-->
-<!--China endpoints version 2024093000-->
-<!--File generated 2024-09-30 06:04:21.0424-->
+<!--China endpoints version 2024103100-->
+<!--File generated 2024-11-01 00:13:29.0098-->
## Exchange Online
ID | Category | ER | Addresses | Ports
12 | Default<BR>Required | No | `*.partner.outlook.cn, attachments.office365-net.cn` | **TCP:** 443, 80 20 | Allow<BR>Required | No | `*.partner.outlook.cn`<BR>`40.73.132.0/24, 40.73.164.128/25, 40.73.165.0/26, 42.159.40.0/24, 42.159.44.0/22, 42.159.163.128/25, 42.159.165.0/24, 42.159.172.0/22, 2406:e500:4010::/48, 2406:e500:4030::/53, 2406:e500:4030:800::/54, 2406:e500:4040::/53, 2406:e500:4040:800::/54, 2406:e500:4040:1000::/54, 2406:e500:4040:1400::/54, 2406:e500:4110::/48, 2406:e500:4210::/48, 2406:e500:4310::/48` | **TCP:** 587, 993, 995
-## SharePoint Online and OneDrive for Business
+## SharePoint and OneDrive
ID | Category | ER | Addresses | Ports -- | - | -- | | -
ID | Category | ER | Addresses | Ports
18 | Default<BR>Optional<BR>**Notes:** If using Exchange Online, follow Allow category guidance for *.protection.partner.outlook.cn | No | `*.aadrm.cn, *.protection.partner.outlook.cn` | **TCP:** 443 22 | Default<BR>Required | No | `*.partner.office365.cn` | **TCP:** 443, 80 23 | Default<BR>Required | No | `*.microsoftonline.cn` | **TCP:** 443, 80
-25 | Default<BR>Required | No | `purview.microsoftonline.cn` | **TCP:** 443
includes Office 365 Worldwide Endpoints https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/includes/office-365-worldwide-endpoints.md
<!--THIS FILE IS AUTOMATICALLY GENERATED. MANUAL CHANGES WILL BE OVERWRITTEN.--> <!--Please contact the Office 365 Endpoints team with any questions.-->
-<!--Worldwide endpoints version 2024093000-->
-<!--File generated 2024-09-30 06:04:22.0404-->
+<!--Worldwide endpoints version 2024103100-->
+<!--File generated 2024-11-01 00:13:30.6133-->
## Exchange Online
ID | Category | ER | Addresses | Ports
9 | Allow<BR>Required | Yes | `*.protection.outlook.com`<BR>`40.92.0.0/15, 40.107.0.0/16, 52.100.0.0/14, 52.238.78.88/32, 104.47.0.0/17, 2a01:111:f400::/48, 2a01:111:f403::/48` | **TCP:** 443 10 | Allow<BR>Required | Yes | `*.mail.protection.outlook.com, *.mx.microsoft`<BR>`40.92.0.0/15, 40.107.0.0/16, 52.100.0.0/14, 104.47.0.0/17, 2a01:111:f400::/48, 2a01:111:f403::/48` | **TCP:** 25
-## SharePoint Online and OneDrive for Business
+## SharePoint and OneDrive
ID | Category | ER | Addresses | Ports | -- | | -- | -
-31 | Optimize<BR>Required | Yes | `*.sharepoint.com`<BR>`13.107.136.0/22, 40.108.128.0/17, 52.104.0.0/14, 104.146.128.0/17, 150.171.40.0/22, 2603:1061:1300::/40, 2620:1ec:8f8::/46, 2620:1ec:908::/46, 2a01:111:f402::/48` | **TCP:** 443, 80
+-- | -- | | -- | -
+31 | Optimize<BR>Required | Yes | `*.sharepoint.com`<BR>`13.107.136.0/22, 40.108.128.0/17, 52.104.0.0/14, 104.146.128.0/17, 150.171.40.0/22, 2603:1061:1300::/40, 2603:1063:6000::/35, 2620:1ec:8f8::/46, 2620:1ec:908::/46, 2a01:111:f402::/48` | **TCP:** 443, 80
32 | Default<BR>Optional<BR>**Notes:** OneDrive for Business: supportability, telemetry, APIs, and embedded email links | No | `ssw.live.com, storage.live.com` | **TCP:** 443 33 | Default<BR>Optional<BR>**Notes:** SharePoint Hybrid Search - Endpoint to SearchContentService where the hybrid crawler feeds documents | No | `*.search.production.apac.trafficmanager.net, *.search.production.emea.trafficmanager.net, *.search.production.us.trafficmanager.net` | **TCP:** 443 35 | Default<BR>Required | No | `*.wns.windows.com, admin.onedrive.com, officeclient.microsoft.com` | **TCP:** 443, 80
ID | Category | ER | Addresses | Ports
## Microsoft 365 Common and Office Online ID | Category | ER | Addresses | Ports
- | | | -- | -
+ | | | -- | --
46 | Allow<BR>Required | Yes | `*.officeapps.live.com, *.online.office.com, office.live.com`<BR>`13.107.6.171/32, 13.107.18.15/32, 13.107.140.6/32, 52.108.0.0/14, 52.244.37.168/32, 2603:1006:1400::/40, 2603:1016:2400::/40, 2603:1026:2400::/40, 2603:1036:2400::/40, 2603:1046:1400::/40, 2603:1056:1400::/40, 2603:1063:2000::/38, 2620:1ec:c::15/128, 2620:1ec:8fc::6/128, 2620:1ec:a92::171/128, 2a01:111:f100:2000::a83e:3019/128, 2a01:111:f100:2002::8975:2d79/128, 2a01:111:f100:2002::8975:2da8/128, 2a01:111:f100:7000::6fdd:6cd5/128, 2a01:111:f100:a004::bfeb:88cf/128` | **TCP:** 443, 80
-47 | Default<BR>Required | No | `*.office.net` | **TCP:** 443, 80
+47 | Default<BR>Required | No | `*.office.net` | **TCP:** 443, 80<BR>**UDP:** 443
49 | Default<BR>Required | No | `*.onenote.com` | **TCP:** 443 50 | Default<BR>Optional<BR>**Notes:** OneNote notebooks (wildcards) | No | `*.microsoft.com` | **TCP:** 443 51 | Default<BR>Required | No | `*cdn.onenote.net` | **TCP:** 443
ID | Category | ER | Addresses | Ports
158 | Default<BR>Required | No | `*.cortana.ai` | **TCP:** 443 159 | Default<BR>Required | No | `admin.microsoft.com` | **TCP:** 443, 80 160 | Default<BR>Required | No | `cdn.odc.officeapps.live.com, cdn.uci.officeapps.live.com` | **TCP:** 443, 80
-184 | Default<BR>Required | No | `*.cloud.microsoft, *.static.microsoft, *.usercontent.microsoft` | **TCP:** 443, 80
+184 | Default<BR>Required | No | `*.cloud.microsoft, *.static.microsoft, *.usercontent.microsoft` | **TCP:** 443, 80<BR>**UDP:** 443
lighthouse M365 Lighthouse Manage Lighthouse Rbac Permissions https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/lighthouse/m365-lighthouse-manage-lighthouse-rbac-permissions.md
Title: "Manage Lighthouse RBAC permissions in Microsoft 365 Lighthouse"
+ Title: "Manage Lighthouse role-based access control (RBAC) permissions in Microsoft 365 Lighthouse"
f1.keywords: NOCSH Previously updated : 04/24/2024 Last updated : 10/31/2024 audience: Admin
search.appverid: MET150
description: "For Managed Service Providers (MSPs) using Microsoft 365 Lighthouse, learn how to manage Lighthouse role-based access control (RBAC) permissions in Microsoft 365 Lighthouse."
-# Manage Lighthouse RBAC permissions in Microsoft 365 Lighthouse
+# Manage Lighthouse role-based access control (RBAC) permissions in Microsoft 365 Lighthouse
-The Lighthouse permissions page allows administrators in Microsoft 365 Lighthouse to manage user role-based access control (RBAC) permissions in the partner tenant. Administrators can view and manage membership for each Lighthouse RBAC role to ensure that users in the partner tenant have right-sized permissions. Each Lighthouse RBAC role is associated with a security group instead of an Entra ID role, so when users are assigned a Lighthouse RBAC role, they're automatically associated with a specific Lighthouse RBAC security group.
+The **Lighthouse permissions** page allows Administrators in Microsoft 365 Lighthouse to manage user role-based access control (RBAC) permissions in the partner tenant. Lighthouse Administrators can view and manage membership for each Lighthouse RBAC role to ensure that users in the partner tenant have right-sized permissions. Each Lighthouse RBAC role is associated with a security group instead of a Microsoft Entra role, so when users are assigned a Lighthouse RBAC role, they're automatically associated with a specific Lighthouse RBAC security group.
-When administrators assign a Lighthouse RBAC role to a user in the partner tenant for the first time, a security group is automatically created. Administrators can view the associated security group for each Lighthouse RBAC role on the Lighthouse permissions page and in the Microsoft Entra admin center. All security group membership changes are reflected in both Lighthouse and the Microsoft Entra admin center.
+> [!NOTE]
+> Lighthouse RBAC roles don't provide access to customer data. Access to customer data is governed by a Lighthouse user's GDAP permissions. To learn more, see [Manage GDAP in the customer tenant](m365-lighthouse-overview-of-permissions.md#manage-gdap-in-the-customer-tenant).
+
+When administrators assign a Lighthouse RBAC role to a user in the partner tenant for the first time, a security group is automatically created. Lighthouse Administrators can view the associated security group for each Lighthouse RBAC role on the **Lighthouse permissions** page and in the Microsoft Entra admin center. All security group membership changes are reflected in both Lighthouse and the Microsoft Entra admin center.
## Before you begin
-To access the Lighthouse permissions page and manage permissions, you must be a Global Administrator in Microsoft Entra ID.
+To access the **Lighthouse permissions** page and manage permissions, you must be an Administrator in Lighthouse or a Privileged Role Administrator in Microsoft Entra ID.
## View Lighthouse RBAC role membership and associated security group
To access the Lighthouse permissions page and manage permissions, you must be a
3. View users in the partner tenant who are assigned the Lighthouse RBAC role and the associated security group.
+> [!NOTE]
+> To view security group membership for Lighthouse users with the Lighthouse Operator role, go to the **Delegated access** page in Lighthouse. The **Delegated access** page provides security group membership details for all delegated access relationships.
+ ## Assign Lighthouse RBAC roles to users in the partner tenant 1. In the left navigation pane in <a href="https://go.microsoft.com/fwlink/p/?linkid=2168110" target="_blank">Lighthouse</a>, select **Permissions** > **Lighthouse permissions**.
To access the Lighthouse permissions page and manage permissions, you must be a
5. Select **Assign users**. > [!NOTE]
-> The Lighthouse Operator role is viewable but not assignable from the Lighthouse permissions page. The Lighthouse Operator role is automatically assigned to users with GDAP permissions.
+> The Lighthouse Operator role is viewable but not assignable from the **Lighthouse permissions** page. The Lighthouse Operator role is automatically assigned to Lighthouse users who hold at least one Microsoft Entra role.
## Remove users in the partner tenant from a Lighthouse RBAC role
To access the Lighthouse permissions page and manage permissions, you must be a
- Select **Create a new security group**, enter a name for the new group, optionally enter a description and add users, and then select **Save**. > [!NOTE]
-> You must assign the Lighthouse RBAC Administrator role to a role-assignable security group. In addition, to be able to assign roles to a role-assignable security group and/or create role-assignable security groups, you must have a Microsoft Entra ID P1 license. To enable Just-in-Time (JIT) roles, Microsoft Entra IDE Governance or a Microsoft Entra ID P2 license is required.
+> You must assign the Lighthouse Administrator role to a role-assignable security group. In addition, to be able to assign roles to a role-assignable security group and/or create role-assignable security groups, you must have a Microsoft Entra ID P1 license. To enable Just-in-Time (JIT) roles, Microsoft Entra IDE Governance or a Microsoft Entra ID P2 license is required.
> > You can assign all other Lighthouse RBAC roles to any security group, whether it's role-assignable or not, but keep the P1 license requirement in mind for role-assignable security groups. >
To access the Lighthouse permissions page and manage permissions, you must be a
## Next steps
-After you've added users to, or removed users from, the available Lighthouse RBAC roles, go to the Lighthouse permissions page to view the latest group membership for each role.
+After you add users to, or remove users from, the available Lighthouse RBAC roles, go to the **Lighthouse permissions** page to view the latest group membership for each role.
> [!NOTE]
-> Once you've added a user to, or removed a user from, a Lighthouse RBAC role, it may take up to an hour for group membership changes to appear in Lighthouse.
+> Once you add a user to, or remove a user from, a Lighthouse RBAC role, it could take up to an hour for group membership changes to appear in Lighthouse.
To learn more about each Lighthouse RBAC role to determine which roles users in your partner tenant should have, see [Overview of permissions in Microsoft 365 Lighthouse](m365-lighthouse-overview-of-permissions.md). ## Related content [Overview of permissions in Microsoft 365 Lighthouse](m365-lighthouse-overview-of-permissions.md) (article)\
-[Set up GDAP for your customers](m365-lighthouse-setup-gdap.md) (article)\
-[Overview of Delegated Access in Microsoft 365 Lighthouse](m365-lighthouse-delegated-access-overview.md) (article)\
-[Use Microsoft Entra groups to manage role assignments](/entra/identity/role-based-access-control/groups-concept)
+[Manage Lighthouse RBAC permissions in Microsoft 365 Lighthouse](m365-lighthouse-manage-lighthouse-rbac-permissions.md) (article)\
+[View your Microsoft Entra roles in Microsoft 365 Lighthouse](m365-lighthouse-view-your-roles.md) (article)\
+[Use Microsoft Entra groups to manage role assignments](/entra/identity/role-based-access-control/groups-concept) (article)\
+[Microsoft 365 Lighthouse frequently asked questions (FAQs)](m365-lighthouse-faq.yml) (article)
lighthouse M365 Lighthouse Overview Of Permissions https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/lighthouse/m365-lighthouse-overview-of-permissions.md
Previously updated : 06/10/2024 Last updated : 10/31/2024 audience: Admin
- AdminSurgePortfolib - M365-Lighthouse search.appverid: MET150
-description: "For Managed Service Providers (MSPs) using Microsoft 365 Lighthouse, learn more about Lighthouse permission requirements."
+description: "For Managed Service Providers (MSPs) using Microsoft 365 Lighthouse, learn more about how permissions work in Lighthouse."
# Overview of permissions in Microsoft 365 Lighthouse
Microsoft 365 Lighthouse permissions are primarily managed by the following:
To use Lighthouse, you need a combination of roles assigned via RBAC and GDAP.
-## Global Administrator permissions in the partner tenant
+## Manage Lighthouse RBAC permissions in the partner tenant
-Partner tenant users assigned the Global Administrator role in Microsoft Entra ID can do the following:
+Lighthouse permissions in the partner tenant are managed by assigning RBAC roles in Lighthouse. Each role has a set of permissions that determines which data users can access and change within the partner tenant. Lighthouse RBAC roles don't provide access to customer data. Access to customer data is governed by a Lighthouse user's GDAP permissions (see [Manage GDAP in the customer tenant](#manage-gdap-in-the-customer-tenant)).
-- Sign up for Lighthouse in the Microsoft 365 admin center. -- Activate and inactive a tenant. -- Create, update, and delete tags.-- Assign tags to and remove tags from a customer tenant. -- Review audit logs. -- Create, edit, and view alert rules.
+RBAC roles are managed from the **Lighthouse permissions** page in Lighthouse. To access the **Lighthouse permissions** page and manage permissions, you must hold one of the following roles:
-## Managing Lighthouse RBAC permissions in the partner tenant
+- Privileged Role Administrator in Microsoft Entra ID
+- Administrator in Lighthouse
-Lighthouse permissions in the partner tenant are managed by assigning RBAC roles. Each role has a set of permissions that determines which data users can access and change within the partner tenant.
+To learn more, see [Manage Lighthouse RBAC permissions in Microsoft 365 Lighthouse](m365-lighthouse-manage-lighthouse-rbac-permissions.md).
-RBAC roles are managed from the Lighthouse permissions page in Lighthouse. To access the Lighthouse permissions page and manage permissions, you must be a Global Administrator in Microsoft Entra ID. To learn more, see [Manage Lighthouse RBAC permissions in Microsoft 365 Lighthouse](m365-lighthouse-manage-lighthouse-rbac-permissions.md).
+The following table provides an overview of each Lighthouse RBAC role. For a list of actions each role can perform in the partner tenant, see [Lighthouse RBAC roles and capabilities](#lighthouse-rbac-roles-and-capabilities).
-There's currently only one Lighthouse RBAC role: Lighthouse Account Manager. The following table describes the Lighthouse Account Manager role.
-
-| Lighthouse&nbsp;RBAC&nbsp;role | Description |
+| Lighthouse&nbsp;RBAC&nbsp;role | Overview |
|||
-| Lighthouse Account Manager | Provides full access to Sales Advisor pages and data across the entire partner tenant. Lighthouse Account Managers can export Sales Advisor data. |
+| Account Manager | Account Managers have full access to Sales Advisor pages and data across the entire partner tenant.<br><br>Account Managers can export Sales Advisor data. |
+| Administrator | Administrators have full administrative permissions in Lighthouse. <br><br>Administrators can manage RBAC and GDAP permissions and can create baselines, tags, and alerts.<br><br>Administrators are automatically assigned the Privileged Role Administrator, User Administrator, and Group Administrator roles in Microsoft Entra ID and the Admin Agent role in Partner Center. |
+| Operator | Operators manage customer tenants in Lighthouse based on the GDAP permissions assigned to them for each customer tenant that they manage.<br><br>Operators can view high-level customer tenant status and manage alerts.<br><br>Lighthouse users who hold at least one Microsoft Entra role are automatically assigned the Operator role.<br><br>**Note:** Lighthouse Administrators can use templates on the **Delegated access** page to assign GDAP permissions to Lighthouse users. |
+| Reader | Readers have read-only access to data in Lighthouse.<br><br>Lighthouse Readers can view high-level customer tenant status and alerts. |
## Lighthouse RBAC roles and capabilities
-The following table describes the actions that Lighthouse Account Managers can perform in Lighthouse.
-
-| Area | Actions | Lighthouse&nbsp;Account&nbsp;Manager |
-|||::|
-| **Tenants** | View the Tenants page | &check; |
-| | Manage tags | |
-| | Activate and inactivate a tenant | |
-| | View delegated status | &check; |
-| | View baseline assignment | |
-| | View deployment status | &check; |
-| | View and edit customer contact information and website | &check; |
-| **Baselines** | View baselines (default, custom) | |
-| | Create, edit, and assign baselines | |
-| **Alerts** | View alerts | &check; |
-| | Manage alerts (change severity, status, or assignment) | |
-| | Create, edit, and delete alert rules | |
-| **Permissions** | Set up and manage Lighthouse permissions | |
-| | Set up and manage GDAP | |
-| | View GDAP status detail | |
-| **Audit logs** | View audit logs | |
-| **Sales Advisor** | View Sales Advisor reports and manage data | &check; |
-| **Support** | Open and manage service requests | |
-| **Service&nbsp;health** | Monitor service health | |
-
-## Managing GDAP in the customer tenant
-
-GDAP gives you a high level of control and flexibility by providing access to customer tenants throughΓÇ»[Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference). Assigning the least-privileged roles by task through GDAP to MSP technicians reduces security risk for both MSPs and customers.
-
-For more information about setting up a GDAP relationship with a customer tenant in Lighthouse, see [Obtain granular admin permissions to manage a customer's service - Partner Center](/partner-center/gdap-obtain-admin-permissions-to-manage-customer).ΓÇ»
-
-For more information about least-privileged roles by task, seeΓÇ»[Least-privileged roles - Partner Center](/partner-center/gdap-least-privileged-roles-by-task) and [Least privileged roles by task in Microsoft Entra ID](/azure/active-directory/roles/delegate-by-task).
-
-For more information about GDAP or delegated administrative privileges (DAP) deprecation, see [GDAP frequently asked questions - Partner Center](/partner-center/gdap-faq), or search the [Partner Center announcements](/partner-center/announcements/) for dates and timelines.
-
-The following tasks in Lighthouse have specific Microsoft Entra role requirements:
--- To create and manage service requests, Lighthouse users must have at least one Microsoft Entra role assigned to them with the following property set: **microsoft.office365.supportTickets/allEntities/allTasks**. --- To monitor service health, Lighthouse users must have at least one Microsoft Entra role assigned to them with the following property set: **microsoft.office365.serviceHealth/allEntities/allTasks**. -
-For a complete list of Microsoft Entra roles, see [Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference). For information on how to assign roles, see [Assign Microsoft Entra roles to users](/azure/active-directory/roles/manage-roles-portal).
+The following table describes the actions that each Lighthouse RBAC role can perform in Lighthouse. For some actions, you need to hold a Microsoft Entra role in addition to a Lighthouse RBAC role. For other actions, only a Microsoft Entra role is required. Microsoft Entra role requirements are indicated in the last column of the table. For a complete list of Microsoft Entra roles and the actions they can perform, see [Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference).
+
+| Area | Actions | Account&nbsp;Manager | Administrator | Operator | Reader | Need Microsoft Entra&nbsp;role? |
+|||::|::|::|::|::|
+| **Home page** | View data on cards | | | | | Yes |
+| | Add users | | | | | Yes |
+| | Reset password | | | | | Yes |
+| | Offboard users | | | | | Yes |
+| **Alerts** | View alerts and alert rules | &check; | &check; | | &check; | No |
+| | Manage alerts (change severity, status, or assignment) | | &check; | | | No |
+| | Create, edit, and delete alert rules | | &check; | | | No |
+| **Copilot insights** | View opportunities and adoption data | | | | | Yes|
+| **Tenants** | View the **Tenants** page | &check; | &check; | &check; | &check; | No |
+| | View tenant details | | | | | Yes |
+| | Export data | &check; | &check; | &check; | &check; | No |
+| | View tags | &check; | &check; | &check; | &check; | No |
+| | Create, update, and delete tags in Lighthouse | | &check; | | | No |
+| | Assign and remove tags from tenants | | &check; | | | No |
+| | Activate and inactivate a tenant | | &check; | | | No |
+| | View delegated access status | &check; | &check; | &check; | &check; | No |
+| | View Microsoft Secure Score | | | | | Yes |
+| | View baseline assignments | &check; | &check; | &check; | &check; | No |
+| | View deployment status | | | &check; | | Yes |
+| | View apps and services usage | | | &check; | | Yes |
+| | View and edit customer contact and website info | &check; | &check; | &check; | &check; | No |
+| **Users** | Search for users | | | | | Yes |
+| | View user metrics | | | | | Yes |
+| | Onboard new users | | | | | Yes |
+| | Offboard users | | | | | Yes |
+| | View inactive users | | | | | Yes |
+| | View shared mailboxes | | | | | Yes |
+| | View and manage risky users | | | | | Yes |
+| | View and manage multifactor authentication | | | | | Yes |
+| | View and manage self-service password reset | | | | | Yes |
+| **Devices** | View device security data | | | | | Yes |
+| | View vulnerability management data | | | | | Yes |
+| | View device compliance data | | | | | Yes |
+| | View threat management data | | | | | Yes |
+| | View device health data | | | | | Yes |
+| | View Windows 365 data | | | | | Yes |
+| | View Windows event logs | | | | | Yes |
+| **Apps** | View app performance and app management data | | | | | Yes |
+| **Quarantined messages** | View and manage quarantined messages | | | | | Yes |
+| **Baselines** | View baselines (default, custom) and task details | | &check; | &check; | &check; | No|
+| | Create, clone, edit, and assign baselines | | &check; | | | No |
+| | View deployment insights | | | | | Yes |
+| **Service&nbsp;health** | Monitor service health<sup>1</sup> | | | | | No |
+| **Support** | Create and manage service requests<sup>2</sup> | | | | | No |
+| **Audit logs** | View audit logs | | &check; | | | Yes
+| **Permissions** | View the **Lighthouse Permissions** page | | &check; | | | No|
+| | Set up and manage Lighthouse permissions | | &check; | | | No |
+| | View, set up, and manage GDAP on the **Delegated access** page | | &check; | | | No |
+| **Sales Advisor** | View opportunities | &check; | &check; | | | No |
+| | View subscription renewals | &check; | &check; | | | No |
+| | View license requests | &check; | &check; | | | No |
+
+<sup>1</sup> To monitor service health, Lighthouse users must hold at least one Microsoft Entra role in the partner tenant with the following property set: **microsoft.office365.serviceHealth/allEntities/allTasks**. The users must also have at least the Admin Agent role or Helpdesk Agent role assigned to them in Partner Center.
+
+<sup>2</sup> To create and manage service requests, Lighthouse users must hold at least one Microsoft Entra role in the partner tenant with the following property set: **microsoft.office365.supportTickets/allEntities/allTasks**.
+
+## Manage GDAP in the customer tenant
+
+Just as Lighthouse RBAC roles manage permissions in the partner tenant, GDAP manages permissions in the customer tenants. GDAP gives you a high level of control and flexibility by providing access to customer tenants through [Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference). Assigning the least-privileged roles by task to MSP technicians through GDAP reduces security risk for both MSPs and customers. We recommend that you use GDAP reader roles across customer tenants to give Lighthouse users an aggregate view across all customer tenants.
+
+For more information about setting up a GDAP relationship with a customer tenant in Lighthouse, see [Obtain granular admin permissions to manage a customer's service - Partner Center](/partner-center/gdap-obtain-admin-permissions-to-manage-customer).
+
+For more information about least-privileged roles by task, see [Least-privileged roles - Partner Center](/partner-center/gdap-least-privileged-roles-by-task) and [Least privileged roles by task in Microsoft Entra ID](/azure/active-directory/roles/delegate-by-task).
+
+For more information about GDAP or delegated administrative privileges (DAP) deprecation, see [GDAP frequently asked questions - Partner Center](/partner-center/gdap-faq), or search the [Partner Center announcements](/partner-center/announcements/) for dates and timelines.
+
+For a complete list of Microsoft Entra roles and the actions they can perform, see [Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference). For information on how to assign roles, see [Assign Microsoft Entra roles to users](/azure/active-directory/roles/manage-roles-portal).
## Related content
-[Requirements for Microsoft 365 Lighthouse](m365-lighthouse-requirements.md) (article)
[View your Microsoft Entra roles in Microsoft 365 Lighthouse](m365-lighthouse-view-your-roles.md) (article)
+[Manage Lighthouse RBAC permissions in Microsoft 365 Lighthouse](m365-lighthouse-manage-lighthouse-rbac-permissions.md) (article)
+[Set up GDAP in Microsoft 365 Lighthouse](m365-lighthouse-setup-gdap.md) (article)
+[Overview of the Delegated access page in Microsoft 365 Lighthouse](m365-lighthouse-delegated-access-overview.md) (article)
[Assign roles and permissions to users - Partner Center](/partner-center/permissions-overview) (article)
-[Overview of Microsoft 365 Lighthouse](m365-lighthouse-overview.md) (article)
-[Sign up for Microsoft 365 Lighthouse](m365-lighthouse-sign-up.md) (article)
-[Microsoft 365 Lighthouse FAQ](m365-lighthouse-faq.yml) (article)
+[GDAP frequently asked questions - Partner Center](/partner-center/gdap-faq) (article)
+[Microsoft 365 Lighthouse frequently asked questions (FAQs)](m365-lighthouse-faq.yml) (article)
lighthouse M365 Lighthouse Quarantine Messages Overview https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/lighthouse/m365-lighthouse-quarantine-messages-overview.md
description: "For Managed Service Providers (MSPs) using Microsoft 365 Lighthous
Microsoft 365 Lighthouse lets you see insights and information about quarantined email messages across all your customer tenants. From a single view, you can triage quarantined email messages and take the appropriate actions. The data is available if the tenant has implemented Exchange Online Protection (EOP) and Microsoft Defender for Office365 Plan 1 (MDO).
-You can access the information in Lighthouse by selecting **Home** in the left navigation pane, or by selecting **Data protection** in the left navigation pane to open the Quarantined messages page.
+You can access the information in Lighthouse by selecting **Home** in the left navigation pane, or by selecting **Quarantined messages** in the left navigation pane to open the **Quarantined messages** page.
> [!NOTE] > This page provides the number of tenants for which data is unavailable because they do not have the required licenses.
lighthouse M365 Lighthouse View Service Health https://github.com/MicrosoftDocs/microsoft-365-docs/commits/public/microsoft-365/lighthouse/m365-lighthouse-view-service-health.md
If you can't sign in to Lighthouse, you can use the [Microsoft Service Health St
## Before you begin
-To view service health, you need a Microsoft Entra role in the partner tenant with the following property set: **microsoft.office365.serviceHealth/allEntities/allTasks**. For a list of Microsoft Entra roles, see [Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference).
+To view service health, you must have at least one Microsoft Entra role in the partner tenant with the following property set: **microsoft.office365.serviceHealth/allEntities/allTasks**. For a list of Microsoft Entra roles, see [Microsoft Entra built-in roles](/azure/active-directory/roles/permissions-reference).
## View service health status and issue details