Servizio Web URL e indirizzo IP di Microsoft 365

Il servizio Web Url e indirizzo IP di Microsoft 365 consente di identificare e differenziare meglio il traffico di rete di Microsoft 365, semplificando la valutazione, la configurazione e l'aggiornamento delle modifiche. Questo servizio Web basato su REST sostituisce i file XML scaricabili precedenti, che sono stati eliminati il 2 ottobre 2018.

In qualità di cliente o fornitore di dispositivi perimetrali di rete, è possibile eseguire la compilazione in base al servizio Web per l'indirizzo IP e le voci fqdn di Microsoft 365. È possibile accedere ai dati direttamente in un Web browser usando questi URL:

Un cliente può utilizzare questo servizio Web per le operazioni seguenti:

  • Aggiornare gli script di PowerShell per ottenere i dati degli endpoint di Microsoft 365 e modificare qualsiasi formattazione per i dispositivi di rete.
  • Usare queste informazioni per aggiornare i file PAC distribuiti ai computer client.

Un fornitore di dispositivi di rete perimetrale può utilizzare questo servizio Web per le operazioni seguenti:

  • Creare e testare il software dei dispositivi per scaricare l'elenco per la configurazione automatizzata.
  • Verificare la versione corrente.
  • Conoscere le modifiche apportate.

Nota

Se si usa Azure ExpressRoute per connettersi a Microsoft 365, vedere Azure ExpressRoute per Microsoft 365 per acquisire familiarità con i servizi di Microsoft 365 supportati in Azure ExpressRoute. Esaminare anche l'articolo URL e intervalli di indirizzi IP di Microsoft 365 per comprendere quali richieste di rete per le applicazioni Microsoft 365 richiedono la connettività Internet. Queste precauzioni consentiranno di migliorare la configurazione dei dispositivi di protezione perimetrale.

Per ulteriori informazioni, vedere:

Parametri comuni

Questi parametri sono comuni a tutti i metodi di servizio Web:

  • format=<JSON | CSV> : per impostazione predefinita, il formato dei dati restituito è JSON. Questo parametro facoltativo consente di restituire i dati con valori delimitati da virgole (CSV).

  • ClientRequestId=<guid> : GUID obbligatorio generato per l'associazione client. Generare un GUID univoco per ogni computer che chiama il servizio Web, ossia gli script inclusi in questa pagina generano un GUID. Non usare i GUID illustrati negli esempi seguenti perché potrebbero essere bloccati dal servizio Web in futuro. Il formato GUID è xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, dove x rappresenta un numero esadecimale.

    Per generare un GUID, è possibile usare il comando di PowerShell New-Guid oppure usare un servizio online come generatore di GUID online.

Metodo per la versione web

Microsoft aggiorna l'indirizzo IP e le voci FQDN di Microsoft 365 all'inizio di ogni mese. Gli aggiornamenti out-of-band sono talvolta pubblicati a causa di problemi di supporto, aggiornamenti della sicurezza o altri requisiti operativi.

Ai dati per ogni istanza pubblicata viene assegnato un numero di versione e il metodo Web della versione consente di verificare la versione più recente di ogni istanza del servizio Microsoft 365. È consigliabile controllare la versione non più di una volta all'ora.

I parametri per il metodo per la versione web sono:

  • AllVersions=<true | false> : per impostazione predefinita, la versione restituita è la più recente. Includere questo parametro facoltativo per richiedere tutte le versioni pubblicate dopo il primo rilascio del servizio Web.
  • Format=<JSON | CSV | RSS> : oltre ai formati JSON e CSV, il metodo Web della versione supporta anche RSS. È possibile usare questo parametro facoltativo con AllVersions=true per richiedere un feed RSS che può essere usato con Outlook o altri lettori RSS.
  • Instance=<Tutto il mondo | Cina | USGovDoD | USGovGCCHigh> : questo parametro facoltativo specifica l'istanza per cui restituire la versione. Se omesso, vengono restituite tutte le istanze. Le istanze valide sono: Worldwide, China, USGovDoD, USGovGCCHigh.

Il metodo Web della versione non è limitato e non restituisce mai codici di risposta HTTP 429. La risposta al metodo Web per la versione include un'intestazione cache-controllo che consiglia la memorizzazione nella cache dei dati per 1 ora. Il risultato ottenuto dal metodo Web per la versione potrebbe essere un singolo record o una matrice di record. Gli elementi di ogni record sono:

  • instance: nome breve dell'istanza del servizio Microsoft 365.
  • latest: la versione più recente degli endpoint dell'istanza specificata.
  • versioni: l’elenco di tutte le versioni precedenti dell'istanza specificata. Questo elemento è incluso solo se il parametro allversions è vero.

Esempi del metodo per la versione Web

URI della richiesta di esempio 1: https://endpoints.office.com/version?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questo URI restituisce la versione più recente di ogni istanza del servizio Microsoft 365. Risultato di esempio:

[
 {
  "instance": "Worldwide",
  "latest": "2018063000"
 },
 {
  "instance": "USGovDoD",
  "latest": "2018063000"
 },
 {
  "instance": "USGovGCCHigh",
  "latest": "2018063000"
 },
 {
  "instance": "China",
  "latest": "2018063000"
 }
]

Importante

Il GUID per il parametro ClientRequestID in questi URI è solo un esempio. Per provare gli URI del servizio Web, generare un GUID personalizzato. I GUID visualizzati in questi esempi potrebbero essere bloccati dal servizio Web in futuro.

URI della richiesta di esempio 2: https://endpoints.office.com/version/Worldwide?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questo URI restituisce la versione più recente dell'istanza del servizio Microsoft 365 specificata. Risultato di esempio:

{
 "instance": "Worldwide",
 "latest": "2018063000"
}

URI della richiesta di esempio 3: https://endpoints.office.com/version/Worldwide?Format=CSV&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questo URI mostra l'output in formato CSV. Risultato di esempio:

instance,latest
Worldwide,2018063000

URI della richiesta di esempio 4: https://endpoints.office.com/version/Worldwide?AllVersions=true&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questo URI mostra tutte le versioni precedenti pubblicate per l'istanza del servizio Microsoft 365 in tutto il mondo. Risultato di esempio:

{
  "instance": "Worldwide",
  "latest": "2018063000",
  "versions": [
    "2018063000",
    "2018062000"
  ]
}

Esempio 5 URI del feed RSS: https://endpoints.office.com/version/worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7& allVersions=true&format=RSS

Questo URI mostra un feed RSS delle versioni pubblicate che include collegamenti all'elenco delle modifiche per ogni versione. Risultato di esempio:

<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0" xmlns:a10="https://www.w3.org/2005/Atom">
<channel>
<link>https://aka.ms/o365ip</link>
<description/>
<language>en-us</language>
<lastBuildDate>Thu, 02 Aug 2018 00:00:00 Z</lastBuildDate>
<item>
<guid isPermaLink="false">2018080200</guid>
<link>https://endpoints.office.com/changes/Worldwide/2018080200?singleVersion&clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7</link> <description>Version 2018080200 includes 2 changes. IPs: 2 added and 0 removed.</description>
<pubDate>Thu, 02 Aug 2018 00:00:00 Z</pubDate>
</item>

Metodo Web per gli endpoint

Il metodo Web endpoint restituisce tutti i record per gli intervalli di indirizzi IP e gli URL che costituiscono il servizio Microsoft 365. Per la configurazione dei dispositivi di rete, è consigliabile usare sempre i dati più recenti del metodo Web endpoint. Microsoft fornisce un preavviso 30 giorni prima di pubblicare nuove aggiunte per fornire il tempo necessario per aggiornare gli elenchi di controllo di accesso e gli elenchi di esclusioni del server proxy. È consigliabile chiamare il metodo web per gli endpoint solo quando la versione metodo web indica che è disponibile una nuova versione dei dati.

I parametri per il metodo web per gli endpoint sono:

  • ServiceAreas=<Common | Exchange | SharePoint | Skype> : elenco delimitato da virgole di aree di servizio. Sono validi Common, Exchange, SharePoint e Skype. Poiché gli elementi dell’area di servizio di Common sono un prerequisito per tutte le altre aree di servizio, il servizio web li includerà sempre. Se non si include questo parametro, vengono restituite tutte le aree di servizio.
  • TenantName=<tenant_name> : nome del tenant di Microsoft 365. Il servizio web prende il nome specificato e lo inserisce in parti dell'URL che includono il nome del tenant. Se non si specifica un nome tenant, tali parti di URL hanno il carattere jolly (*).
  • NoIPv6=<true | false : impostare il valore su>true per escludere gli indirizzi IPv6 dall'output se non si usa IPv6 nella rete.
  • Instance=<Tutto il mondo | Cina | USGovDoD | USGovGCCHigh> : questo parametro obbligatorio specifica l'istanza da cui restituire gli endpoint. Le istanze valide sono: worldwide, China, USGovDoDe USGovGCCHigh.

Se si chiama il metodo Web per gli endpoint troppe volte dallo stesso indirizzo IP client, si potrebbe ricevere il codice di risposta HTTP 429 (Troppe richieste). Se viene visualizzato questo codice di risposta, attendere un'ora prima di ripetere la richiesta o generare un nuovo GUID per la richiesta. Come procedura consigliata, pianificare la chiamata del metodo Web per gli endpoint solo quando la versione metodo Web indica che è disponibile una nuova versione dei dati.

Il risultato ottenuto dal metodo Web per gli endpoint è una matrice di record in cui ogni record rappresenta uno specifico set di endpoint. Gli elementi per ogni record sono:

  • id: il numero ID non modificabile del set di endpoint.
  • serviceArea: l'area del servizio di cui fa parte: Common, Exchange, SharePointo Skype.
  • URL: URL per il set di endpoint. Una matrice JSON di record DNS. Questo elemento viene omesso se non specificato.
  • tcpPorts: porte TCP per il set di endpoint. Tutti gli elementi Ports sono formattati come un elenco con valori delimitati da virgole (-). Le porte sono valide per tutti gli indirizzi IP e per tutti gli URL del set di endpoint di una specifica categoria. Questo elemento viene omesso se non specificato.
  • udpPorts: le porte UDP degli intervalli di indirizzi IP in questo set di endpoint. Questo elemento viene omesso se non specificato.
  • ips: gli intervalli di indirizzi IP associati a questo set di endpoint così come alle porte UDP o TCP elencate. Una matrice JSON di intervalli di indirizzi IP. Questo elemento viene omesso se non specificato.
  • Categoria: categoria di connettività per il set di endpoint. I valori validi sono Ottimizza, Consenti ePredefinito. Se si cerca nell'output del metodo Web degli endpoint la categoria di un indirizzo IP o di un URL specifico, è possibile che la query restituisca più categorie. In tal caso, seguire le indicazioni della categoria priorità più alta. Se ad esempio il punto finale compare sia in Ottimizza che in Consenti, seguire i requisiti per Ottimizza. Obbligatorio.
  • expressRoute: True se il set di endpoint sfrutta la connessione ExpressRoute, False in caso contrario.
  • required: true se questo set di endpoint è necessario per supportare la connettività per Microsoft 365. False se il set di endpoint è facoltativo.
  • note: per gli endpoint facoltativi, questo testo descrive la funzionalità di Microsoft 365 che non sarebbe disponibile se non è possibile accedere a indirizzi IP o URL in questo set di endpoint a livello di rete. Questo elemento viene omesso se non specificato.

Esempi del metodo Web per gli endpoint

URI della richiesta di esempio 1: https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questo URI ottiene tutti gli endpoint per l'istanza di Microsoft 365 in tutto il mondo per tutti i carichi di lavoro. Risultato dell'esempio che mostra un estratto dell'output:

[
 {
  "id": 1,
  "serviceArea": "Exchange",
  "serviceAreaDisplayName": "Exchange Online",
  "urls":
   [
    "*.protection.outlook.com"
   ],
  "ips":
   [
    "2a01:111:f403::/48", "23.103.132.0/22", "23.103.136.0/21", "23.103.198.0/23", "23.103.212.0/22", "40.92.0.0/14", "40.107.0.0/17", "40.107.128.0/18", "52.100.0.0/14", "213.199.154.0/24", "213.199.180.128/26", "94.245.120.64/26", "207.46.163.0/24", "65.55.88.0/24", "216.32.180.0/23", "23.103.144.0/20", "65.55.169.0/24", "207.46.100.0/24", "2a01:111:f400:7c00::/54", "157.56.110.0/23", "23.103.200.0/22", "104.47.0.0/17", "2a01:111:f400:fc00::/54", "157.55.234.0/24", "157.56.112.0/24", "52.238.78.88/32"
   ],
  "tcpPorts": "443",
  "expressRoute": true,
  "category": "Allow"
 },
 {
  "id": 2,
  "serviceArea": "Exchange",
  "serviceAreaDisplayName": "Exchange Online",
  "urls":
   [
    "*.mail.protection.outlook.com"
   ],

L'output completo della richiesta in questo esempio dovrebbe contenere altri set di endpoint.

URI della richiesta di esempio 2: https://endpoints.office.com/endpoints/Worldwide?ServiceAreas=Exchange&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questo esempio ottiene gli endpoint per l'istanza di Microsoft 365 Worldwide per Exchange Online e solo per le dipendenze.

L'output, ad esempio, 2 è simile all'esempio 1, ad eccezione del fatto che i risultati non includerebbero endpoint per SharePoint o Skype for Business Online.

Metodo Web per le modifiche

Il metodo Web per le modifiche restituisce gli aggiornamenti più recenti che sono stati pubblicati, in genere le modifiche apportate al mese precedente agli intervalli di indirizzi IP e degli URL.

Le modifiche più importanti ai dati degli endpoint sono nuovi URL e indirizzi IP. La mancata aggiunta di un indirizzo IP a un elenco di controllo di accesso del firewall o a un URL a un elenco di bypass del server proxy può causare un'interruzione per gli utenti di Microsoft 365 dietro tale dispositivo di rete. In deroga ai requisiti operativi, i nuovi endpoint vengono pubblicati nel servizio Web 30 giorni prima della data di provisioning degli endpoint da usare per fornire il tempo necessario per aggiornare gli elenchi di controllo di accesso e gli elenchi di esclusioni del server proxy.

Il parametro obbligatorio del metodo Web per le modifiche è il seguente:

  • Version=<AAAAMMGGNN> - Parametro di route URL obbligatorio. Questo valore deve corrispondere alla versione attualmente implementata. Il servizio Web restituisce le modifiche apportate dopo tale versione. Il formato è AAAAMMGGNN, dove NN è un numero naturale incrementabile se è necessario pubblicare più versioni nello stesso giorno, con 00 che rappresenta il primo aggiornamento del giorno. Il servizio Web richiede che il parametro della versione contenga esattamente 10 cifre.

Il metodo Web per le modifiche ha frequenza limitata, allo stesso modo del metodo Web per gli endpoint. Se viene visualizzato il codice di risposta 429 HTTP, attendere un'ora prima di ripetere la richiesta o generare un nuovo GUID per la richiesta.

Il risultato ottenuto dal metodo Web per le modifiche è una matrice di record in cui ogni record rappresenta una modifica in una specifica versione di endpoint. Gli elementi per ogni record sono:

  • id: l'ID non modificabile del record di modifica.
  • endpointSetId: l'ID del record del set di endpoint modificato.
  • disposizione: descrive la modifica apportata al record del set di endpoint. I valori sonocambia, aggiungi orimuovi.
  • impatto: non tutte le modifiche saranno ugualmente importanti per ogni ambiente. Questo elemento descrive l'impatto atteso di un ambiente perimetrale della rete aziendale in seguito a questa modifica. Questo elemento è incluso solo in Change Records della versione 2018112800 e versioni successive. Le opzioni per l'impatto sono:
    • AddedIp: è stato aggiunto un indirizzo IP a Microsoft 365 e sarà presto disponibile nel servizio. Rappresenta una modifica da eseguire in un firewall o un dispositivo di rete perimetrale di livello 3. Se non si aggiunge questo elemento prima di iniziare a usarlo, è possibile che si verifichi un'interruzione.
    • AddedUrl: è stato aggiunto un URL a Microsoft 365 e sarà presto disponibile nel servizio. Rappresenta una modifica da eseguire in un server proxy o in un dispositivo di rete perimetrale per analisi URL. Se non si aggiunge questo URL prima di iniziare a usarlo, è possibile che si verifichi un'interruzione.
    • AddedIpAndUrl: sono stati aggiunti un indirizzo IP e un URL. Rappresenta una modifica da eseguire in un dispositivo firewall di livello 3 o un server proxy o in un dispositivo per analisi URL. Se non si aggiunge questa coppia IP/URL prima di iniziare a usarla, è possibile che si verifichi un'interruzione.
    • AddedSubstituteUrl: un FQDN precedentemente non pubblicato a causa di un carattere jolly viene ora pubblicato perché l'URL con caratteri jolly è stato rimosso. Questa modifica è immediata.
    • RemovedIpOrUrl: almeno un indirizzo IP o un URL è stato rimosso da Microsoft 365. Rimuovere gli endpoint di rete dai dispositivi perimetrali, ma non è prevista alcuna scadenza per eseguire questa operazione.
    • ChangedIsExpressRoute: l'attributo di supporto di ExpressRoute è stato modificato. Se si usa ExpressRoute, potrebbe essere necessario eseguire un'azione in base alla configurazione.
    • MovedIpOrUrl: è stato spostato un indirizzo IP o un URL tra questo set di endpoint e un altro. In genere, non è necessario alcun intervento.
    • RemovedDuplicateIpOrUrl: è stato rimosso un url o un indirizzo IP duplicato, ma è ancora pubblicato per Microsoft 365. In genere, non è necessario alcun intervento.
    • OtherNonPriorityChanges: è stato modificato un elemento meno critico rispetto a tutte le altre opzioni, ad esempio il contenuto di un campo nota.
  • Versione: versione del set di endpoint pubblicato in cui è stata introdotta la modifica. I numeri delle versioni sono in formato AAAAMMGGNN, dove NN è un numero naturale incrementabile se è necessario pubblicare più versioni in un singolo giorno.
  • previous: una sottostruttura che descrive nel dettaglio i valori precedenti degli elementi modificati nel set di endpoint. Questa opzione non verrà inclusa per i set di endpoint appena aggiunti. Include ExpressRoute, serviceArea, category, required, tcpPorts, udpPorts e notes.
  • current: una sottostruttura che descrive nel dettaglio i valori aggiornati degli elementi delle modifiche nel set di endpoint. Include ExpressRoute, serviceArea, category, required, tcpPorts, udpPorts e notes.
  • add: una sottostruttura che descrive nel dettaglio gli elementi da aggiungere alle raccolte dei set di endpoint. Questo elemento viene omesso se non ci sono aggiunte. effectiveDate: definisce la data in cui le aggiunte saranno effettive nel servizio. ips: gli elementi da aggiungere alla matrice di indirizzi IP. urls: gli elementi da aggiungere alla matrice di urls.
  • remove: una sottostruttura che descrive nel dettaglio gli elementi da rimuovere dal set di endpoint. Questo elemento viene omesso se non ci sono rimozioni. ips: gli elementi da rimuovere dalla matrice di indirizzi IP. urls: gli elementi da rimuovere dalla matrice di URL.

Esempi del metodo Web per le modifiche

URI della richiesta di esempio 1: https://endpoints.office.com/changes/worldwide/0000000000?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

In questo modo vengono richieste tutte le modifiche precedenti all'istanza del servizio Microsoft 365 in tutto il mondo. Risultato di esempio:

[
 {
  "id": 424,
  "endpointSetId": 32,
  "disposition": "Change",
  "version": "2018062700",
  "remove":
   {
    "urls":
     [
      "*.api.skype.com", "skypegraph.skype.com"
     ]
   }
 },
 {
  "id": 426,
  "endpointSetId": 31,
  "disposition": "Change",
  "version": "2018062700",
  "add":
   {
    "effectiveDate": "20180609",
    "ips":
     [
      "51.140.203.190/32"
     ]
   },
  "remove":
   {
    "ips":
     [

URI della richiesta di esempio 2: https://endpoints.office.com/changes/worldwide/2018062700?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Questa operazione richiede modifiche dalla versione specificata all'istanza di Microsoft 365 Worldwide. In questo caso, la versione specificata è la più recente. Risultato di esempio:

[
  {
    "id":3,
    "endpointSetId":33,
    "changeDescription":"Removing old IP prefixes",
    "disposition":"Change",
    "version":"2018031301",
    "remove":{
      "ips":["65.55.127.0/24","66.119.157.192/26","66.119.158.0/25",
      "111.221.76.128/25","111.221.77.0/26","207.46.5.0/24"]
    }
  },
  {
    "id":4,
    "endpointSetId":45,
    "changeDescription":"Removing old IP prefixes",
    "disposition":"Change",
    "version":"2018031301",
    "remove":{
      "ips":["13.78.93.8/32","40.113.87.220/32","40.114.149.220/32",
      "40.117.100.83/32","40.118.214.164/32","104.208.31.113/32"]
    }
  }
]

Script di PowerShell di esempio

È possibile eseguire questo script di PowerShell per verificare se esistono attività da eseguire per ottenere dati aggiornati. È possibile eseguire lo script come attività programmata per verificare la necessità di un aggiornamento della versione. Per evitare un carico eccessivo nel servizio Web, provare a non eseguire lo script più di una volta all'ora.

Questo script consente di:

  • Controlla il numero di versione degli endpoint dell'istanza di Microsoft 365 Worldwide correnti chiamando l'API REST del servizio Web.

  • Verifica la presenza di un file di versione corrente$Env:TEMP\O365_endpoints_latestversion.txt. Il percorso della variabile globale $Env:TEMP è in genere C:\Users\<username>\AppData\Local\Temp.

  • Se è la prima volta che si esegue lo script, lo script restituirà la versione corrente e tutti gli URL e gli indirizzi IP correnti, scriverà la versione di endpoint nel file $Env:TEMP\O365_endpoints_latestversion.txt e gli endpoint l'output dei dati nel file $Env:TEMP\O365_endpoints_data.txt.. È possibile modificare il percorso e/o il nome del file di output modificando le righe seguenti:

    $versionpath = $Env:TEMP + "\O365_endpoints_latestversion.txt"
    $datapath = $Env:TEMP + "\O365_endpoints_data.txt"
    
  • In ogni successiva esecuzione dello script, se la versione più recente del servizio Web è identica alla versione del file O365_endpoints_latestversion. txt, lo script esce senza apportare modifiche.

  • Se la versione più recente del servizio Web è più recente della versioneO365_endpoints_latestversion.txt, lo script restituirà gli endpoint e i filtri per la versione Consenti e Ottimizzaendpoint di categoria, aggiorna la versione nel file O365_endpoints_latestversion.txt e scrive i dati aggiornati nel fileO365_endpoints_data.txt.

Lo script genera un ClientRequestId univoco per il computer in cui viene eseguito e riutilizza questo ID in più chiamate. Questo ID viene archiviato nel fileO365_endpoints_latestversion. txt.

Per eseguire lo script di PowerShell

  1. Copiare lo script e salvarlo nel disco rigido locale o nel percorso dello script comeGet-O365WebServiceUpdates.ps1.

  2. Eseguire lo script nell'editor di script preferito, ad esempio il codice di PowerShell ISE o VS, o da una console di PowerShell con il comando seguente:

    powershell.exe -file <path>\Get-O365WebServiceUpdates.ps1
    

    Non sono disponibili parametri per passare allo script.

<# Get-O365WebServiceUpdates.ps1
From https://aka.ms/ipurlws
v1.1 8/6/2019

DESCRIPTION
This script calls the REST API of the Microsoft 365 IP and URL Web Service (Worldwide instance)
and checks to see if there has been a new update since the version stored in an existing
$Env:TEMP\O365_endpoints_latestversion.txt file in your user directory's temp folder
(usually C:\Users\<username>\AppData\Local\Temp).
If the file doesn't exist, or the latest version is newer than the current version in the
file, the script returns IPs and/or URLs that have been changed, added or removed in the latest
update and writes the new version and data to the output file $Env:TEMP\O365_endpoints_data.txt.

USAGE
Run as a scheduled task every 60 minutes.

PARAMETERS
n/a

PREREQUISITES
PS script execution policy: Bypass
PowerShell 3.0 or later
Does not require elevation
#>

#Requires -Version 3.0

# web service root URL
$ws = "https://endpoints.office.com"
# path where output files will be stored
$versionpath = $Env:TEMP + "\O365_endpoints_latestversion.txt"
$datapath = $Env:TEMP + "\O365_endpoints_data.txt"

# fetch client ID and version if version file exists; otherwise create new file and client ID
if (Test-Path $versionpath) {
    $content = Get-Content $versionpath
    $clientRequestId = $content[0]
    $lastVersion = $content[1]
    Write-Output ("Version file exists! Current version: " + $lastVersion)
}
else {
    Write-Output ("First run! Creating version file at " + $versionpath + ".")
    $clientRequestId = [GUID]::NewGuid().Guid
    $lastVersion = "0000000000"
    @($clientRequestId, $lastVersion) | Out-File $versionpath
}

# call version method to check the latest version, and pull new data if version number is different
$version = Invoke-RestMethod -Uri ($ws + "/version/Worldwide?clientRequestId=" + $clientRequestId)
if ($version.latest -gt $lastVersion) {
    Write-Host "New version of Microsoft 365 worldwide commercial service instance endpoints detected"
    # write the new version number to the version file
    @($clientRequestId, $version.latest) | Out-File $versionpath
    # invoke endpoints method to get the new data
    $endpointSets = Invoke-RestMethod -Uri ($ws + "/endpoints/Worldwide?clientRequestId=" + $clientRequestId)
    # filter results for Allow and Optimize endpoints, and transform these into custom objects with port and category
    # URL results
    $flatUrls = $endpointSets | ForEach-Object {
        $endpointSet = $_
        $urls = $(if ($endpointSet.urls.Count -gt 0) { $endpointSet.urls } else { @() })
        $urlCustomObjects = @()
        if ($endpointSet.category -in ("Allow", "Optimize")) {
            $urlCustomObjects = $urls | ForEach-Object {
                [PSCustomObject]@{
                    category = $endpointSet.category;
                    url      = $_;
                    tcpPorts = $endpointSet.tcpPorts;
                    udpPorts = $endpointSet.udpPorts;
                }
            }
        }
        $urlCustomObjects
    }
    # IPv4 results
    $flatIp4s = $endpointSets | ForEach-Object {
        $endpointSet = $_
        $ips = $(if ($endpointSet.ips.Count -gt 0) { $endpointSet.ips } else { @() })
        # IPv4 strings contain dots
        $ip4s = $ips | Where-Object { $_ -like '*.*' }
        $ip4CustomObjects = @()
        if ($endpointSet.category -in ("Allow", "Optimize")) {
            $ip4CustomObjects = $ip4s | ForEach-Object {
                [PSCustomObject]@{
                    category = $endpointSet.category;
                    ip = $_;
                    tcpPorts = $endpointSet.tcpPorts;
                    udpPorts = $endpointSet.udpPorts;
                }
            }
        }
        $ip4CustomObjects
    }
    # IPv6 results
    $flatIp6s = $endpointSets | ForEach-Object {
        $endpointSet = $_
        $ips = $(if ($endpointSet.ips.Count -gt 0) { $endpointSet.ips } else { @() })
        # IPv6 strings contain colons
        $ip6s = $ips | Where-Object { $_ -like '*:*' }
        $ip6CustomObjects = @()
        if ($endpointSet.category -in ("Optimize")) {
            $ip6CustomObjects = $ip6s | ForEach-Object {
                [PSCustomObject]@{
                    category = $endpointSet.category;
                    ip = $_;
                    tcpPorts = $endpointSet.tcpPorts;
                    udpPorts = $endpointSet.udpPorts;
                }
            }
        }
        $ip6CustomObjects
    }

    # write output to screen
    Write-Output ("Client Request ID: " + $clientRequestId)
    Write-Output ("Last Version: " + $lastVersion)
    Write-Output ("New Version: " + $version.latest)
    Write-Output ""
    Write-Output "IPv4 Firewall IP Address Ranges"
    ($flatIp4s.ip | Sort-Object -Unique) -join "," | Out-String
    Write-Output "IPv6 Firewall IP Address Ranges"
    ($flatIp6s.ip | Sort-Object -Unique) -join "," | Out-String
    Write-Output "URLs for Proxy Server"
    ($flatUrls.url | Sort-Object -Unique) -join "," | Out-String
    Write-Output ("IP and URL data written to " + $datapath)

    # write output to data file
    Write-Output "Microsoft 365 IP and UL Web Service data" | Out-File $datapath
    Write-Output "Worldwide instance" | Out-File $datapath -Append
    Write-Output "" | Out-File $datapath -Append
    Write-Output ("Version: " + $version.latest) | Out-File $datapath -Append
    Write-Output "" | Out-File $datapath -Append
    Write-Output "IPv4 Firewall IP Address Ranges" | Out-File $datapath -Append
    ($flatIp4s.ip | Sort-Object -Unique) -join "," | Out-File $datapath -Append
    Write-Output "" | Out-File $datapath -Append
    Write-Output "IPv6 Firewall IP Address Ranges" | Out-File $datapath -Append
    ($flatIp6s.ip | Sort-Object -Unique) -join "," | Out-File $datapath -Append
    Write-Output "" | Out-File $datapath -Append
    Write-Output "URLs for Proxy Server" | Out-File $datapath -Append
    ($flatUrls.url | Sort-Object -Unique) -join "," | Out-File $datapath -Append
}
else {
    Write-Host "Microsoft 365 worldwide commercial service instance endpoints are up-to-date."
}

Script di Python di esempio

Ecco uno script Python, testato con Python 3.6.3 in Windows 10, che è possibile eseguire per verificare se sono necessarie azioni per i dati aggiornati. Questo script controlla il numero di versione per gli endpoint dell'istanza di Microsoft 365 Worldwide. Quando viene apportata una modifica, vengono scaricati gli endpoint e i filtri per gli endpoint della categoria Consenti e Ottimizza . Si utilizza anche un unicoClientRequestId per più chiamate e consente di salvare la versione più recente disponibile in un file temporaneo. Per eseguire l’aggiornamento della versione, è necessario chiamare questo script una volta all'ora.

import json
import tempfile
from pathlib import Path
import urllib.request
import uuid
# helper to call the webservice and parse the response
def webApiGet(methodName, instanceName, clientRequestId):
    ws = "https://endpoints.office.com"
    requestPath = ws + '/' + methodName + '/' + instanceName + '?clientRequestId=' + clientRequestId
    request = urllib.request.Request(requestPath)
    with urllib.request.urlopen(request) as response:
        return json.loads(response.read().decode())
# path where client ID and latest version number will be stored
datapath = Path(tempfile.gettempdir() + '/endpoints_clientid_latestversion.txt')
# fetch client ID and version if data exists; otherwise create new file
if datapath.exists():
    with open(datapath, 'r') as fin:
        clientRequestId = fin.readline().strip()
        latestVersion = fin.readline().strip()
else:
    clientRequestId = str(uuid.uuid4())
    latestVersion = '0000000000'
    with open(datapath, 'w') as fout:
        fout.write(clientRequestId + '\n' + latestVersion)
# call version method to check the latest version, and pull new data if version number is different
version = webApiGet('version', 'Worldwide', clientRequestId)
if version['latest'] > latestVersion:
    print('New version of Microsoft 365 worldwide commercial service instance endpoints detected')
    # write the new version number to the data file
    with open(datapath, 'w') as fout:
        fout.write(clientRequestId + '\n' + version['latest'])
    # invoke endpoints method to get the new data
    endpointSets = webApiGet('endpoints', 'Worldwide', clientRequestId)
    # filter results for Allow and Optimize endpoints, and transform these into tuples with port and category
    flatUrls = []
    for endpointSet in endpointSets:
        if endpointSet['category'] in ('Optimize', 'Allow'):
            category = endpointSet['category']
            urls = endpointSet['urls'] if 'urls' in endpointSet else []
            tcpPorts = endpointSet['tcpPorts'] if 'tcpPorts' in endpointSet else ''
            udpPorts = endpointSet['udpPorts'] if 'udpPorts' in endpointSet else ''
            flatUrls.extend([(category, url, tcpPorts, udpPorts) for url in urls])
    flatIps = []
    for endpointSet in endpointSets:
        if endpointSet['category'] in ('Optimize', 'Allow'):
            ips = endpointSet['ips'] if 'ips' in endpointSet else []
            category = endpointSet['category']
            # IPv4 strings have dots while IPv6 strings have colons
            ip4s = [ip for ip in ips if '.' in ip]
            tcpPorts = endpointSet['tcpPorts'] if 'tcpPorts' in endpointSet else ''
            udpPorts = endpointSet['udpPorts'] if 'udpPorts' in endpointSet else ''
            flatIps.extend([(category, ip, tcpPorts, udpPorts) for ip in ip4s])
    print('IPv4 Firewall IP Address Ranges')
    print(','.join(sorted(set([ip for (category, ip, tcpPorts, udpPorts) in flatIps]))))
    print('URLs for Proxy Server')
    print(','.join(sorted(set([url for (category, url, tcpPorts, udpPorts) in flatUrls]))))

    # TODO send mail (e.g. with smtplib/email modules) with new endpoints data
else:
    print('Microsoft 365 worldwide commercial service instance endpoints are up-to-date')

Controllo delle versioni dell'interfaccia del servizio Web

In futuro potrebbero essere necessari aggiornamenti ai parametri o ai risultati di questi metodi di servizio Web. Dopo la pubblicazione della versione della disponibilità generale di tali servizi Web, Microsoft adotterà misure ragionevoli per fornire un avviso anticipato agli aggiornamenti del materiale al servizio Web. Se Microsoft ritiene che un aggiornamento richiederà modifiche ai client che usano il servizio Web, Microsoft manterrà la versione precedente, ossia una versione posteriore, del servizio Web, disponibile per almeno 12 mesi dopo il rilascio della nuova versione. I clienti che non esecedono l'aggiornamento durante tale periodo potrebbero non essere in grado di accedere al servizio Web e ai relativi metodi. I clienti devono accertarsi che i client del servizio Web continuino a funzionare senza errori se sono state apportate le modifiche seguenti alla firma dell'interfaccia del servizio Web:

  • L'aggiunta di un nuovo parametro opzionale a un metodo Web esistente che non deve essere fornito dai client precedenti e che non influisce sul risultato ottenuto da un client precedente.
  • L’aggiunta di un nuovo attributo denominato in uno degli elementi REST della risposta o di altre colonne al csv della risposta.
  • Aggiunta di un nuovo metodo Web con un nuovo nome che non viene chiamato dai client meno recenti.

Notifiche sugli aggiornamenti

Per ricevere notifiche tramite posta elettronica, è possibile usare diversi metodi, quando le modifiche apportate agli indirizzi IP e agli URL vengono pubblicate nel servizio Web.

Esportare un file PAC Proxy

Get-PacFile è uno script di PowerShell che legge gli endpoint di rete più recenti dal servizio Web URL e indirizzo IP di Microsoft 365 e crea un file PAC di esempio. Per informazioni sull'uso di Get-PacFile, vedere Usare un file PAC per il routing diretto del traffico Microsoft 365 vitale.

URL e intervalli di indirizzi IP per Microsoft 365

Gestione degli endpoint di Microsoft 365

Principi della connettività di rete di Microsoft 365

Ottimizzazione della rete e delle prestazioni di Microsoft 365

Valutazione della connettività di rete di Microsoft 365

Qualità multimediale e prestazioni della connettività di rete in Skype for Business Online

Ottimizzazione della rete per Skype for Business Online

Ottimizzazione delle prestazioni di Microsoft 365 con baseline e cronologia delle prestazioni

Piano di risoluzione dei problemi di prestazioni per Microsoft 365