Веб-служба IP-адресов и URL-адресов Microsoft 365

Веб-служба IP-адресов и URL-адресов Microsoft 365 помогает лучше определять и дифференцировать сетевой трафик Microsoft 365, упрощая оценку, настройку и актуальность изменений. Эта веб-служба на основе REST заменяет собой ранее доступные скачиваемые XML-файлы, поддержка которых была прекращена 2 октября 2018 г.

Как клиент или поставщик устройства периметра сети, вы можете выполнить сборку на основе веб-службы для записей IP-адреса и полного доменного имени Microsoft 365. Доступ к данным можно получить непосредственно в браузере с помощью этих URL-адресов:

Как клиент вы можете использовать эту веб-службу, чтобы:

  • Обновите скрипты PowerShell, чтобы получить данные конечной точки Microsoft 365 и изменить форматирование для сетевых устройств.
  • применять эту информацию для обновления PAC-файлов, развернутых на клиентских компьютерах.

Как поставщик устройств сети периметра вы можете использовать эту веб-службу, чтобы:

  • создавать и тестировать программное обеспечение устройств для скачивания списка с целью автоматической настройки;
  • проверять текущую версию;
  • получать текущие изменения.

Примечание.

Если вы используете Azure ExpressRoute для подключения к Microsoft 365, ознакомьтесь со статьей Azure ExpressRoute для Microsoft 365, чтобы ознакомиться со службами Microsoft 365, поддерживаемыми через Azure ExpressRoute. Кроме того, ознакомьтесь со статьей URL-адреса и диапазоны IP-адресов Microsoft 365 , чтобы понять, какие сетевые запросы для приложений Microsoft 365 требуют подключения к Интернету. Это поможет вам лучше настроить устройства периметра безопасности.

Подробнее:

Общие параметры

Эти параметры являются общими для всех методов веб-службы:

  • format=<JSON | CSV> — по умолчанию возвращается формат данных JSON. Используйте этот необязательный параметр для возврата данных в формате данных с разделителями-запятыми (CSV).

  • ClientRequestId=<guid> — обязательный GUID, создаваемый для сопоставления клиентов. Создайте уникальный GUID для каждого компьютера, который вызывает веб-службу (скрипты, указанные на этой странице, позволяют создать GUID). Не используйте идентификаторы GUID, показанные в следующих примерах, так как в будущем они могут быть заблокированы веб-службой. Формат GUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Здесь "x" означает шестнадцатеричное число.

    Чтобы создать GUID, можно использовать команду PowerShell New-Guid или веб-службу, например Online GUID Generator.

Веб-метод версии

Корпорация Майкрософт обновляет IP-адрес и записи полного доменного имени Microsoft 365 в начале каждого месяца. Иногда обновления публикуются вне цикла для устранения инцидентов, поддержки обновлений для системы безопасности или выполнения других операционных требований.

Данным для каждого опубликованного экземпляра назначается номер версии, а веб-метод версии позволяет проверка для последней версии каждого экземпляра службы Microsoft 365. Рекомендуем проверять версию не чаще, чем раз в час.

Параметры для веб-метода версии:

  • AllVersions=<true | false> — по умолчанию возвращается последняя версия. Включите этот необязательный параметр, чтобы запросить все версии, опубликованные с момента первого выпуска веб-службы.
  • Format=<JSON | CSV | RSS> — помимо форматов JSON и CSV, веб-метод версии также поддерживает RSS. Вы можете использовать этот необязательный параметр вместе с параметром AllVersions=true для запрашивания RSS-канала, который можно применять в Outlook или других средствах чтения RSS.
  • Instance=<По всему миру | Китай | USGovDoD | USGovGCCHigh> — этот необязательный параметр указывает экземпляр, для для который будет возвращена версия. Если его опустить, будут возвращены все экземпляры. Допустимые экземпляры: Worldwide, China, USGovDoD, USGovGCCHigh.

Веб-метод версии не ограничен по скорости и никогда не возвращает коды ответа HTTP 429. Отклик для веб-метода версии включает заголовок с контролем кэша, рекомендующий кэширование данных в течение 1 часа. Результатом веб-метода версии может быть отдельная запись или массив записей. Ниже перечислены элементы каждой записи.

  • instance — короткое имя экземпляра службы Microsoft 365.
  • latest — последняя версия для конечных точек указанного экземпляра.
  • versions — список всех предыдущих версий для указанного экземпляра. Этот элемент включается, только если параметр AllVersions имеет значение true.

Примеры веб-метода версии

Пример 1. Запрос URI: https://endpoints.office.com/version?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Этот URI возвращает последнюю версию каждого экземпляра службы Microsoft 365. Пример результата:

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

Важно!

Guid для параметра ClientRequestID в этих URI является только примером. Чтобы опробовать URI веб-службы, создайте собственный GUID. Идентификаторы GUID, показанные в этих примерах, могут быть заблокированы веб-службой в будущем.

Пример 2. Запрос URI: https://endpoints.office.com/version/Worldwide?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Этот URI возвращает последнюю версию указанного экземпляра службы Microsoft 365. Пример результата:

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

Пример 3. Запрос URI: https://endpoints.office.com/version/Worldwide?Format=CSV&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Этот универсальный код ресурса (URI) отображает выходные данные в формате CSV. Пример результата:

instance,latest
Worldwide,2018063000

Пример 4. Запрос URI: https://endpoints.office.com/version/Worldwide?AllVersions=true&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Этот URI показывает все предыдущие версии, опубликованные для экземпляра службы Microsoft 365 по всему миру. Пример результата:

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

Пример 5 URI RSS-канала: https://endpoints.office.com/version/worldwide?clientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7& allVersions=true&format=RSS

Этот URI показывает RSS-канал опубликованных версий, который содержит ссылки на список изменений для каждой версии. Пример результата:

<?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>

Веб-метод конечных точек

Веб-метод конечных точек возвращает все записи для диапазонов IP-адресов и URL-адресов, составляющих службу Microsoft 365. Для настройки сетевого устройства всегда следует использовать новейшие данные от веб-метода конечных точек. Корпорация Майкрософт отправляет уведомление за 30 дней до публикации новых дополнений, чтобы вы успели обновить списки управления доступом и списки обхода прокси-сервера. Рекомендуем вызывать веб-метод конечных точек еще раз, только когда веб-метод версии указывает на доступность новой версии данных.

Параметры веб-метода конечных точек представлены ниже.

  • ServiceAreas=<Общие | Exchange | SharePoint | Skype> — разделенный запятыми список областей обслуживания. Допустимые элементы: Common, Exchange, SharePoint и Skype. Так как элементы области обслуживания Common обязательны для всех других областей обслуживания, веб-служба всегда включает их. Если этот параметр не включен, возвращаются все области обслуживания.
  • TenantName=<tenant_name> — имя клиента Microsoft 365. Веб-служба получает предоставленное вами имя и вставляет его в части URL-адресов, которые включают имя клиента. Если не указать имя клиента, эти части URL-адресов будут иметь подстановочный знак (*).
  • NoIPv6=<true | false> — задайте значение true , чтобы исключить IPv6-адреса из выходных данных, если iPv6 не используется в сети.
  • Instance=<По всему миру | Китай | USGovDoD | USGovGCCHigh> — этот обязательный параметр указывает экземпляр, из которого возвращаются конечные точки. Допустимые экземпляры: Worldwide, China, USGovDoD и USGovGCCHigh.

Если вы вызываете веб-метод конечных точек слишком часто с одного клиентского IP-адреса, то можете получить код HTTP-отклика 429 (слишком большое количество запросов). Если вы получили этот код отклика, подождите 1 час перед повтором своего запроса или сгенерируйте новый GUID для запроса. Рекомендуется запланировать вызов веб-метода конечных точек, только если веб-метод версии указывает, что доступна новая версия.

Результат веб-метода конечных точек — массив записей, в котором каждая запись представляет собой определенный набор конечных точек. Элементы каждой записи:

  • id — неизменяемый идентификатор набора конечных точек.
  • serviceArea — область обслуживания, которая является частью Common, Exchange, SharePoint или Skype.
  • urls — URL-адреса для набора конечных точек. Массив JSON записей DNS. Если значение не указано, опускается.
  • tcpPorts — TCP-порты для набора конечных точек. Все элементы портов отформатированы в виде списка портов с разделителями-запятыми или диапазонов портов, разделенных символами дефиса (-). Порты применяются ко всем IP-адресам и URL-адресам в наборе конечных точек для данной категории. Если значение не указано, опускается.
  • udpPorts — порты UDP для диапазонов IP-адресов в этом наборе конечных точек. Если значение не указано, опускается.
  • ips — диапазоны IP-адресов, связанные с этим набором конечных точек (с перечисленными портами TCP или UDP). Массив JSON, включающий диапазоны IP-адресов. Если значение не указано, опускается.
  • category — категория возможности подключения к набору конечных точек. Допустимые значения: Optimize, Allow и Default. Если в выходных данных веб-метода конечных точек найти категорию определенного IP-адреса или URL-адреса, возможно, запрос вернет несколько категорий. В таком случае необходимо следовать рекомендациям для категории с наивысшим приоритетом. Например, если для конечной точки выводятся значения Optimize и Allow, следует выполнять требования для значения Optimize. Обязательный элемент.
  • expressRoute имеет значение True, если для этого набора конечных точек выполняется маршрутизация через ExpressRoute. В противном случае он получает значение False.
  • обязательный — значение True , если этот набор конечных точек требуется для поддержки подключения к Microsoft 365. Имеет значение False, если этот набор конечных точек необязателен.
  • Примечания. Для необязательных конечных точек в этом тексте описаны функции Microsoft 365, которые будут недоступны, если IP-адреса или URL-адреса в этом наборе конечных точек не удается получить доступ на сетевом уровне. Если значение не указано, опускается.

Примеры веб-метода конечных точек

Пример 1. Запрос URI: https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Этот URI получает все конечные точки для экземпляра Microsoft 365 по всему миру для всех рабочих нагрузок. В примере результата показан фрагмент выходных данных:

[
 {
  "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"
   ],

Полные выходные данные запроса в этом примере будут содержать другие наборы конечных точек.

Пример 2. Запрос URI: https://endpoints.office.com/endpoints/Worldwide?ServiceAreas=Exchange&ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

В этом примере конечные точки для экземпляра Microsoft 365 Worldwide получаются только для Exchange Online и зависимостей.

Выходные данные, например 2, похожи на пример 1, за исключением того, что результаты не будут включать конечные точки для SharePoint или Skype для бизнеса Online.

Веб-метод изменений

Веб-метод изменений возвращает самые последние опубликованные обновления. Как правило, это изменения диапазонов IP- и URL-адресов за предыдущий месяц.

Наиболее критические изменения в данных конечных точек — это новые URL- и IP-адреса. Сбой при добавлении IP-адреса в список управления доступом брандмауэра или URL-адреса в список обхода прокси-сервера может привести к сбою пользователей Microsoft 365 за этим сетевым устройством. Несмотря на операционные требования, новые конечные точки публикуются в веб-службе за 30 дней до даты подготовки конечных точек к использованию, чтобы вы успели обновить списки управления доступом и списки обхода прокси-сервера.

Обязательный параметр веб-метода изменений:

  • Version=<ГГГГМММДДНН> — обязательный параметр маршрута URL-адреса. Этим значением является используемая в настоящий момент версия. Веб-служба возвращает изменения, внесенные с момента этой версии. Формат: ГГГГММДДЧЧ, где ЧЧ — натуральное число, увеличивающееся, если в один день нужно опубликовать больше одной версии, при этом значение 00 представляет первое обновление дня. Веб-служба требует, чтобы параметр version содержал ровно 10 цифр.

Веб-метод изменений ограничен по частоте аналогично веб-методу конечных точек. Если вы получили код отклика HTTP 429, подождите 1 час перед повтором своего запроса или сгенерируйте новый GUID для запроса.

Результат веб-метода изменений — массив записей, в котором каждая запись представляет собой изменение в определенной версии конечных точек. Элементы каждой записи:

  • id — неизменяемый идентификатор записи изменения.
  • endpointSetId — идентификатор записи набора конечных точек, который был изменен.
  • disposition — описание того, как именно изменена запись набора конечных точек. Значения: change, add или remove.
  • impact — не все изменения будут одинаково важны для каждой среды. Данный элемент описывает ожидаемое влияние на среду периметра корпоративной сети в результате этого изменения. Этот элемент включается только в записи изменений версии 2018112800 и более поздних. Возможные варианты влияния: — AddedIp — IP-адрес был добавлен в Microsoft 365 и скоро будет использоваться в службе. Этот элемент представляет изменения, которые вам необходимо внести для брандмауэра или другого устройства периметра 3 уровня сети. Если вы не добавите его до того, как мы начнем использовать его, вы можете столкнуться с сбоем. — AddedUrl — URL-адрес был добавлен в Microsoft 365 и скоро будет использоваться в службе. Этот элемент представляет изменения, которые вам необходимо внести для прокси-сервера или устройства периметра сети, анализирующего URL-адреса. Если вы не добавите этот URL-адрес, прежде чем мы начнем использовать его, вы можете столкнуться с сбоем. AddedIpAndUrl — добавлены IP- и URL-адрес. Этот элемент представляет изменение, которое вам необходимо внести на устройстве 3 уровня брандмауэра, прокси-сервере или устройстве анализа URL-адреса. Если вы не добавите эту пару IP/URL-адрес, прежде чем мы начнем ее использовать, может возникнуть сбой. — RemovedIpOrUrl — из Microsoft 365 удален по крайней мере один IP-адрес или URL-адрес. Удалите конечные точки сети с устройств периметра, но для этого не существует крайнего срока. ChangedIsExpressRoute: изменен атрибут поддержки ExpressRoute. Если вы используете ExpressRoute, может потребоваться выполнить определенные действия в зависимости от вашей конфигурации. MovedIpOrUrl: мы перенесли IP-адрес или URL-адрес в другой набор конечных точек. Как правило, никаких дополнительных действий не требуется. — RemovedDuplicateIpOrUrl — мы удалили повторяющийся IP-адрес или URL-адрес, но он по-прежнему опубликован для Microsoft 365. Как правило, никаких дополнительных действий не требуется. OtherNonPriorityChanges: мы изменили что-то менее критическое, чем все прочие параметры (например, содержимое поля заметки).
  • version — версия опубликованного набора конечных точек, в который внесено изменение. Формат номеров версий: ГГГГММДДЧЧ, где ЧЧ — натуральное число, увеличивающееся, если в один день нужно опубликовать больше одной версии.
  • previous — подструктура с подробным указанием предыдущих значений измененных элементов в наборе конечных точек. Это не будет включено для новых наборов конечных точек. Включает ExpressRoute, serviceArea, category, required, tcpPorts, udpPorts и notes.
  • current — подструктура с подробным указанием обновленных значений измененных элементов в наборе конечных точек. Включает ExpressRoute, serviceArea, category, required, tcpPorts, udpPorts и notes.
  • add — подструктура с подробным указанием элементов, добавляемых в коллекции наборов конечных точек. Опускается, если добавлений нет. effectiveDate определяет дату начала использования добавлений в службе. ips — элементы, добавляемые в массив ips. urls — элементы, добавляемые в массив urls.
  • remove — подструктура с подробным указанием элементов, удаляемых из набора конечных точек. Опускается, если удаленных элементов нет. ips — элементы, удаляемые из массива ips. urls — элементы, удаляемые из массива urls.

Примеры веб-метода изменений

Пример 1. Запрос URI: https://endpoints.office.com/changes/worldwide/0000000000?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

Это запросит все предыдущие изменения в экземпляре службы Microsoft 365 по всему миру. Пример результата:

[
 {
  "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":
     [

Пример 2. Запрос URI: https://endpoints.office.com/changes/worldwide/2018062700?ClientRequestId=b10c5ed1-bad1-445f-b386-b919946339a7

При этом запрашиваются изменения с указанной версии экземпляра Microsoft 365 Worldwide. В этом случае указана последняя версия. Пример результата:

[
  {
    "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"]
    }
  }
]

Пример скрипта PowerShell

Этот скрипт PowerShell позволяет узнать, нужно ли выполнить действия для обновленных данных. Этот скрипт можно запустить в качестве запланированной задачи, чтобы проверить наличие обновления версии. Чтобы избежать чрезмерной нагрузки на веб-службу, не запускайте этот скрипт чаще одного раза в час.

Этот скрипт выполняет следующее:

  • Проверяет номер версии текущих конечных точек экземпляра Microsoft 365 Worldwide путем вызова REST API веб-службы.

  • Проверяет наличие текущего файла версии по адресу $Env:TEMP\O365_endpoints_latestversion.txt. Путь к глобальной переменной $Env:TEMP обычно имеет значение C:\Users\<username>\AppData\Local\Temp.

  • Если этот скрипт выполняется впервые, он возвращает текущую версию и все текущие IP- и URL-адреса, записывает версию конечных точек в файл $Env:TEMP\O365_endpoints_latestversion.txt, а выходные данные конечных точек — в файл $Env:TEMP\O365_endpoints_data.txt. Вы можете изменить путь и/или имя выходного файла, изменив следующие строки:

    $versionpath = $Env:TEMP + "\O365_endpoints_latestversion.txt"
    $datapath = $Env:TEMP + "\O365_endpoints_data.txt"
    
  • Если при каждом последующем выполнении скрипта последняя версия веб-службы идентична версии в файле O365_endpoints_latestversion.txt, скрипт завершает работу, не внося каких-либо изменений.

  • Если последняя версия веб-службы новее версии в файле O365_endpoints_latestversion.txt, скрипт возвращает конечные точки и фильтры для конечных точек категорий Allow и Optimize, обновляет версию в файле O365_endpoints_latestversion.txt и записывает обновленные данные в файл O365_endpoints_data.txt.

Скрипт создает уникальный ClientRequestId для компьютера, на который он выполняется, и повторно использует этот идентификатор при нескольких вызовах. Этот идентификатор хранится в файле O365_endpoints_latestversion.txt.

Запуск скрипта PowerShell

  1. Скопируйте скрипт и сохраните его на локальном жестком диске или в папке со скриптами под именем Get-O365WebServiceUpdates.ps1.

  2. Выполните скрипт в предпочитаемом редакторе скриптов, например VS Code или интегрированной среде сценариев PowerShell, или из консоли PowerShell с помощью следующей команды:

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

    Отсутствуют параметры для передачи в скрипт.

<# 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."
}

Пример скрипта на Python

Ниже приведен скрипт Python, протестированный с помощью Python 3.6.3 на Windows 10, который можно запустить, чтобы узнать, есть ли действия, необходимые для обновленных данных. Этот скрипт проверяет номер версии конечных точек экземпляра Microsoft 365 Worldwide. При изменении он скачивает конечные точки и фильтры для конечных точек категорий "Разрешить " и "Оптимизировать ". Он также использует уникальный ClientRequestId для нескольких вызовов и сохраняет последнюю версию, обнаруженную во временном файле. Вызывайте этот скрипт раз в час для проверки наличия обновления версии.

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')

Управление версиями интерфейса веб-службы

В будущем могут понадобиться обновления параметров или результатов для этих методов веб-служб. После публикации общедоступной версии веб-служб корпорация Майкрософт примет разумные меры для заблаговременного уведомления о существенных обновлениях веб-службы. Если корпорация Майкрософт сочтет, что обновление потребует изменений клиентов, использующих веб-службы, она сохранит доступ к предыдущей версии веб-службы в течение как минимум 12 месяцев после выпуска новой версии. Клиенты, которые не выполняют обновление в течение этого времени, могут не иметь доступа к веб-службе и ее методам. Пользователи должны убедиться, что клиенты веб-службы продолжат работать без ошибок, если такие изменения будут внесены в подпись интерфейса веб-службы:

  • Добавление нового необязательного параметра к существующему веб-методу, который необязательно должны предоставлять старые клиенты и который не влияет на результат, получаемый старым клиентом.
  • Добавление нового именованного атрибута в один из элементов REST отклика или других столбцов в файл CSV отклика.
  • Добавление нового веб-метода с новым именем, которое не вызывается более старыми клиентами.

Уведомления об обновлениях

Вы можете использовать несколько различных методов, чтобы получать по электронной почте уведомления о публикации изменений IP- и URL-адресов в веб-службе.

Экспорт PAC-файла прокси-сервера

Get-PacFile — это скрипт PowerShell, который считывает последние конечные точки сети из веб-службы IP-адресов и URL-адресов Microsoft 365 и создает пример PAC-файла. Сведения об использовании Get-PacFile см. в статье Использование PAC-файла для прямой маршрутизации жизненно важного трафика Microsoft 365.

URL-адреса и диапазоны IP-адресов Microsoft 365

Управление конечными точками Microsoft 365

Принципы сетевого подключения к Microsoft 365

Настройка сети и производительности Microsoft 365

Оценка сетевого подключения Microsoft 365

Качество мультимедиа и характеристики сетевого подключения в случае Skype для бизнеса Online

Оптимизация сети для Skype для бизнеса Online

Настройка производительности Microsoft 365 с помощью базовых показателей и журнала производительности

План устранения неполадок с производительностью для Microsoft 365