Microsoft 365では、Exchange Online、SharePoint Online、Teamsなどのサービスを利用するために、さまざまなURLやIPアドレスへの通信が発生します。
ファイアウォールやプロキシなどを利用している場合、通信先を制限している場合があるため、Microsoft 365で使用されるURLやIPアドレスを確認する必要があります。
Microsoftでは、Microsoft 365で利用されるURLやIPアドレスの情報を公開しています。

また、これらのURLやIPアドレス範囲の情報は以下の公式ドキュメント内でJSONファイルで公開されていますが、約1か月ごとに更新されることで知られています。
この記事では、Microsoft 365のURL・IPアドレス情報を確認する方法と、PowerShellを使って取得する方法を紹介します。
1.Microsoft 365のURL・IPアドレス一覧を確認する方法
1-1. URLやIPアドレス範囲が掲載されている場所
上記、Microsoft公式ドキュメントのリンク先ページ内の「JSON形式」というリンクの先にJSON形式で情報が公開されています。
URLやIPの確認という意味ではこのページを確認すればよいのですが、Powershellを活用すると必要なサービスのURL/IPをピンポイントで確認ができるのでPowershellを利用して情報を取り出してみます。

また、「JSON形式」をクリックした後に開かれるページは個別のURLになっており、今回はこのURLからpowershellで情報を取得していきます。
2.Microsoft 365のURL・IPアドレス情報をPowerShellで取得する
2-1. JSON形式のデータを取得する
Microsoft365のURL/IPアドレス範囲をPowershellで取得します。
$date = Get-Date -Format "yyyyMMdd"
$dir = "C:\hogehoge"
$path = Join-Path $dir ("m365_" + $date + ".txt")
# ディレクトリが無ければ作成
if (-not (Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir | Out-Null
}
# 指定したディレクトリにMicrosoft365のURL/IPの情報をDL
Invoke-WebRequest "https://endpoints.office.com/endpoints/worldwide?clientrequestid=b10c5ed1-bad1-445f-b386-b919946339a7" -OutFile $path2-1-1. コマンドの解説
1~3行目で、変数を定義します。
6行目以降で、指定したディレクトリがない場合にはディレクトリを作成します。
11行目で、[Invoke-WebRequest] を利用してURLを読み込み、その内容を [$path] に定義したファイルに書き込みます。
2-1-2. [参考] URLの変更も考慮したコマンド
更新履歴を見てみると、2022年からずっと同じURLが利用されているので問題はないかと思いますが、上記で紹介したURLが変更された場合にも対応できるように以下のコマンドも紹介しておきます。
※特にURL内の「clientrequestid」は変更の可能性がありそうと感じたためです。
$date = Get-Date -Format "yyyyMMdd"
$dir = "C:\hogehoge"
$path = Join-Path $dir ("m365_" + $date + ".txt")
# ディレクトリが無ければ作成
if (-not (Test-Path $dir)) {
New-Item -ItemType Directory -Path $dir | Out-Null
}
# JSON形式のURL/IP一覧のコンテンツのURLを確認してDL
$response =Invoke-WebRequest "https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide" -UseBasicParsing
$links = $response.Links | Where-Object {$_.href -like "*endpoints.office.com/endpoints/worldwide?clientrequestid*"} |Select-Object -ExpandProperty href
Invoke-WebRequest $links -OutFile $path上記と異なる点だけ解説をしていきます。
- 11行目で「Microsoft 365 の URL と IP アドレスの範囲」のページを読み込みます。
- 12行目でその中にある「*endpoints.office.com/endpoints/worldwide?clientrequestid*」と一致するURLを取得します。
- 13行目で、12行目で取得したURLの情報を取得しています。
しかし、このコマンドも「Microsoft 365 の URL と IP アドレスの範囲」のページ自体のURLが変わった場合には対応できなくなってしまうので、その部分は注意が必要です。
ただ、直接取得する URL が変わったときにはこういった手段もあるんだ という形で覚えておいてもらえればと思います。
2-2. 取得したJSONをPowerShellで読み込む
上記でJSON形式のテキストファイルに書き込んだので、次にそのファイルをPowershell で読み込みます。
$json = Get-Content $path | ConvertFrom-Json
$jsonこれで、ブラウザで確認した時と同じ内容がPowershell でも確認することができます。
また、Select-Object を利用して特定の項目だけを出力させることも可能です。
PS C:\> $json | Select-Object id, serviceArea, serviceAreaDisplayName
id serviceArea serviceAreaDisplayName
-- ----------- ----------------------
1 Exchange Exchange Online
2 Exchange Exchange Online
8 Exchange Exchange Online
9 Exchange Exchange Online
10 Exchange Exchange Online
11 Skype Microsoft Teams
12 Skype Microsoft Teams
16 Skype Microsoft Teams
17 Skype Microsoft Teams
19 Skype Microsoft Teams
27 Skype Microsoft Teams
31 SharePoint SharePoint Online and OneDrive for Business
32 SharePoint SharePoint Online and OneDrive for Business
35 SharePoint SharePoint Online and OneDrive for Business
36 SharePoint SharePoint Online and OneDrive for Business
37 SharePoint SharePoint Online and OneDrive for Business
39 SharePoint SharePoint Online and OneDrive for Business
46 Common Microsoft 365 Common and Office Online
47 Common Microsoft 365 Common and Office Online
49 Common Microsoft 365 Common and Office Online
50 Common Microsoft 365 Common and Office Online
51 Common Microsoft 365 Common and Office Online
53 Common Microsoft 365 Common and Office Online
56 Common Microsoft 365 Common and Office Online
59 Common Microsoft 365 Common and Office Online
64 Common Microsoft 365 Common and Office Online
66 Common Microsoft 365 Common and Office Online
69 Common Microsoft 365 Common and Office Online
70 Common Microsoft 365 Common and Office Online
71 Common Microsoft 365 Common and Office Online
73 Common Microsoft 365 Common and Office Online
75 Common Microsoft 365 Common and Office Online
78 Common Microsoft 365 Common and Office Online
79 Common Microsoft 365 Common and Office Online
83 Common Microsoft 365 Common and Office Online
84 Common Microsoft 365 Common and Office Online
86 Common Microsoft 365 Common and Office Online
89 Common Microsoft 365 Common and Office Online
91 Common Microsoft 365 Common and Office Online
92 Common Microsoft 365 Common and Office Online
93 Common Microsoft 365 Common and Office Online
95 Common Microsoft 365 Common and Office Online
96 Common Microsoft 365 Common and Office Online
97 Common Microsoft 365 Common and Office Online
114 Common Microsoft 365 Common and Office Online
116 Common Microsoft 365 Common and Office Online
117 Common Microsoft 365 Common and Office Online
118 Common Microsoft 365 Common and Office Online
121 Common Microsoft 365 Common and Office Online
122 Common Microsoft 365 Common and Office Online
124 Common Microsoft 365 Common and Office Online
125 Common Microsoft 365 Common and Office Online
126 Common Microsoft 365 Common and Office Online
127 Skype Microsoft Teams
147 Common Microsoft 365 Common and Office Online
152 Common Microsoft 365 Common and Office Online
153 Common Microsoft 365 Common and Office Online
156 Common Microsoft 365 Common and Office Online
158 Common Microsoft 365 Common and Office Online
159 Common Microsoft 365 Common and Office Online
160 Common Microsoft 365 Common and Office Online
184 Common Microsoft 365 Common and Office Online
193 Common Microsoft 365 Common and Office Online
2-3. URLだけを取得する
以下でURLの情報だけ出力できます。
$json.urls実行すると以下のようなURLの一覧が出力されます。
*.office.com
*.office365.com
*.microsoft.com特定のサービスに関連するURLだけを確認したい場合は、serviceAreaやidなどの情報を利用して絞り込むこともできます。
2-3. IPアドレスだけを取得する
同じようにIPアドレスの情報だけ出力することも可能です。
$json.ips2-3-1.「80」「443」「80,443」に一致するIPを抜き出す
web系のポート(80、443、80と443)に関するIPのみを取得することも可能です。
ここではIPv4のみを出力します。
$json = Get-Content $path | ConvertFrom-Json
$url_web = $json | where { $_.tcpPorts -eq "80" -or $_.tcpPorts -eq "443" -or $_.tcpPorts -eq "80,443" }
$ipv4_web = @();
for ($j=0; $j -lt $url_web.ips.length; $j++){
if( $url_web.ips[$j] -match "::" ){
continue
}
$ipv4_web += $url_web.ips[$j]
}
$ipv4_web・実行結果
PS C:\> $json = Get-Content $path | ConvertFrom-Json
PS C:\> $url_web = $json | where { $_.tcpPorts -eq "80" -or $_.tcpPorts -eq "443" -or $_.tcpPorts -eq "80,443" }
PS C:\> $ipv4_web = @();
PS C:\> for ($j=0; $j -lt $url_web.ips.length; $j++){
>> if( $url_web.ips[$j] -match "::" ){
>> continue
>> }
>> $ipv4_web += $url_web.ips[$j]
>> }
PS C:\> $ipv4_web
13.107.6.152/31
13.107.18.10/31
13.107.128.0/22
23.103.160.0/20
40.96.0.0/13
40.104.0.0/15
52.96.0.0/14
131.253.33.215/32
132.245.0.0/16
150.171.32.0/22
204.79.197.215/32
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
13.107.64.0/18
52.112.0.0/14
52.120.0.0/14
52.238.119.141/32
52.244.160.207/32
13.107.64.0/18
52.112.0.0/14
52.120.0.0/14
52.238.119.141/32
52.244.160.207/32
13.107.64.0/18
52.112.0.0/14
52.120.0.0/14
52.238.119.141/32
52.244.160.207/32
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
13.107.6.171/32
13.107.18.15/32
13.107.140.6/32
52.108.0.0/14
52.238.106.116/32
52.244.37.168/32
52.244.203.72/32
52.244.207.172/32
52.244.223.198/32
52.247.150.191/32
20.190.128.0/18
40.126.0.0/18
52.108.0.0/14
52.108.0.0/14
PS C:\>2-3. IDごとの情報を取得する
Microsoft 365のURL・IPアドレス情報には、各エンドポイントを識別するためのidが設定されています。
取得したデータをそのまま表示すると情報量が多くなるため、id、サービス名、表示名などの必要な項目だけを指定して確認すると分かりやすくなります。
PS C:\> $json | Select-Object id, serviceArea, serviceAreaDisplayName
id serviceArea serviceAreaDisplayName
-- ----------- ----------------------
1 Exchange Exchange Online
2 Exchange Exchange Online
8 Exchange Exchange Online
9 Exchange Exchange Online
10 Exchange Exchange Online
11 Skype Microsoft Teams
12 Skype Microsoft Teams
・
・
・idは、Microsoft 365のURL・IPアドレス情報がどのエンドポイントに属しているのかを識別するために利用できます。
例えば、特定のidの情報だけを確認したい場合は、Where-Objectを使用します。
PS C:\> $json | Where-Object {$_.id -eq 1}
id : 1
serviceArea : Exchange
serviceAreaDisplayName : Exchange Online
urls : {outlook.cloud.microsoft, outlook.office.com, outlook.office365.com}
ips : {13.107.6.152/31, 13.107.18.10/31, 13.107.128.0/22, 23.103.160.0/20...}
tcpPorts : 80,443
udpPorts : 443
expressRoute : True
category : Optimize
required : Trueこれによって、指定したidに該当するエンドポイントの情報を確認できます。
3.Microsoft 365のURL・IPアドレス情報は更新される
Microsoft 365のURL・IPアドレス情報は、一度取得したら終わりではありません。
Microsoft 365では新しいサービスの追加やサービス構成の変更などによって、必要なURLやIPアドレスが追加・変更・削除される場合があります。
上述した通り、だいたい約1か月ごとに更新されます。
そのため、ネットワーク機器の設定などでMicrosoft 365のURL・IPアドレスを利用している場合は、最新の情報を定期的に確認することが重要です。
例えば、過去に取得した情報と現在の情報を比較することで、
- 新しく追加されたURL
- 削除されたURL
- 新しく追加されたIPアドレス
- 削除されたIPアドレス
- 変更されたエンドポイント
などを確認できます。
3-1. URL・IPアドレスの変更差分を確認する
Microsoft 365のURL・IPアドレスは更新されるため、単純に現在の一覧を確認するだけではなく、前回取得した情報から何が変更されたのかを確認したい場合があります。
例えば、以下の流れで確認できます。
前回取得した情報
↓
今回取得した情報
↓
比較
↓
追加されたURL/IP
削除されたURL/IP
変更されたエンドポイント
PowerShellのCompare-Objectなどを利用すると、前回取得したデータと今回取得したデータを比較できます。
特に、Microsoft 365の通信先をファイアウォールやプロキシなどで管理している場合、変更されたURLやIPアドレスだけを確認できると、設定変更が必要な箇所を把握しやすくなります。
実際にPowerShellを使って、Microsoft 365のURL・IPアドレスの追加・削除などの変更差分を確認する方法については、以下の記事で詳しく解説しています。

4.さいごに
Microsoft 365では、Exchange OnlineやSharePoint Online、Teamsなどのサービスを利用するために、さまざまなURLやIPアドレスが使用されています。
Microsoft 365のURL・IPアドレス情報は変更される可能性があるため、ネットワーク設定などで利用する場合は最新情報を確認することが重要です。
PowerShellを利用すると、Microsoft 365のエンドポイント情報を簡単に取得できます。
また、idやserviceAreaなどの情報を確認することで、取得したURL・IPアドレスがどのMicrosoft 365サービスに関連するものなのかを確認できます。
Microsoft 365のURL・IPアドレスに変更があったか確認したい場合は、前回取得したデータと今回取得したデータを比較する方法が便利です。
Microsoft 365のURL・IPアドレスをPowerShellで取得する方法と、変更差分を確認する方法を組み合わせることで、ネットワーク設定のメンテナンスにも活用できます。

