こんにちは、SWX3人目の熊谷(悠)です。
Datadog Synthetic の Private Location についての連載です。
本稿では概要を記します。
対象読者
- Datadog Syntheticの概要を理解している。
- Dockerの概要を理解している。
プライベートロケーションとは?
内部用アプリケーションの監視や、パブリックインターネットから接続できないプライベート URL の監視が行えます。
例えば、インターネットへ公開されているサービスであれば、Datadogが用意しているマネージドロケーションからSyntheticで特に問題無く監視できます。
ただ、IP制限のかけられているサービスや......
内部でのみアクセスされるAPIやVPNへ接続してアクセスするサイト等はDatadogから監視ができません。
そこで、内部にDatadogのワーカーコンテナを作成し、内側から監視を行うのがプライベートロケーションです。
料金
プライベートロケーション機能自体は無料なので、通常のSynthetic使用とDatadogからの請求額は同じです。
※プライベートロケーションを自身で構築して管理するので、インフラ運用維持費は必要です。
プライベートロケーションの使用に追加料金はかかりますか?
いいえ。プライベートロケーションを設定するための追加費用はありません。 プライベートロケーションへのすべてのテスト実行は、管理ロケーションへの場合と同じように請求されます。
SyntheticのIPについて
Datadogの使用している各サービスのIPリストはAPIで取得できます。
Syntheticで選択できるDatadogマネージドロケーションの現在のIPリストは以下のURLにて取得できます。
https://ip-ranges.datadoghq.com/synthetics.json
- すべてのロケーションのIPリストは
prefixes_ipv4
の配列に格納されています。 - 各ロケーション毎のIPリストは
prefixes_ipv4_by_location
ハッシュの中でロケーション別に格納されています。- 例えば、Tokyo (AWS)ロケーションの場合は、
aws:ap-northeast-1
配列に格納されています。
- 例えば、Tokyo (AWS)ロケーションの場合は、
- 最終更新日時は
modified
に表示されています。
Datadog Synthetic マネージドロケーション IPリスト※2022/02/24時点
{ "version": 47, "modified": "2022-01-25-20-00-00", "synthetics": { "prefixes_ipv4": [ "13.114.211.96/32", "13.115.46.213/32", "13.126.169.175/32", "13.209.118.42/32", "13.209.230.111/32", "13.234.54.8/32", "13.236.246.161/32", "13.238.14.57/32", "13.48.150.244/32", "13.48.239.118/32", "13.48.254.37/32", "13.54.169.48/32", "15.188.202.64/32", "15.188.240.172/32", "15.188.243.248/32", "18.130.113.168/32", "18.139.52.173/32", "18.195.155.52/32", "18.200.120.237/32", "18.229.28.50/32", "18.229.36.120/32", "20.62.248.141/32", "20.83.144.189/32", "3.1.219.207/32", "3.1.36.99/32", "3.120.223.25/32", "3.121.24.234/32", "3.18.172.189/32", "3.18.188.104/32", "3.18.197.0/32", "3.36.177.119/32", "3.96.7.126/32", "34.208.32.189/32", "35.154.93.182/32", "35.176.195.46/32", "35.177.43.250/32", "40.76.107.170/32", "52.192.175.207/32", "52.35.61.232/32", "52.60.189.53/32", "52.67.95.251/32", "52.89.221.151/32", "52.9.13.199/32", "52.9.139.134/32", "54.177.155.33/32", "63.34.100.178/32", "63.35.33.198/32", "99.79.87.237/32" ], "prefixes_ipv6": [], "prefixes_ipv4_by_location": { "aws:ap-northeast-1": [ "13.114.211.96/32", "52.192.175.207/32", "13.115.46.213/32" ], "aws:ap-northeast-2": [ "13.209.118.42/32", "3.36.177.119/32", "13.209.230.111/32" ], "aws:ap-south-1": [ "35.154.93.182/32", "13.126.169.175/32", "13.234.54.8/32" ], "aws:ap-southeast-1": [ "3.1.36.99/32", "18.139.52.173/32", "3.1.219.207/32" ], "aws:ap-southeast-2": [ "13.236.246.161/32", "13.54.169.48/32", "13.238.14.57/32" ], "aws:ca-central-1": [ "3.96.7.126/32", "52.60.189.53/32", "99.79.87.237/32" ], "aws:eu-central-1": [ "3.120.223.25/32", "18.195.155.52/32", "3.121.24.234/32" ], "aws:eu-north-1": [ "13.48.150.244/32", "13.48.254.37/32", "13.48.239.118/32" ], "aws:eu-west-1": [ "63.35.33.198/32", "18.200.120.237/32", "63.34.100.178/32" ], "aws:eu-west-2": [ "18.130.113.168/32", "35.177.43.250/32", "35.176.195.46/32" ], "aws:eu-west-3": [ "15.188.243.248/32", "15.188.202.64/32", "15.188.240.172/32" ], "aws:sa-east-1": [ "18.229.36.120/32", "52.67.95.251/32", "18.229.28.50/32" ], "aws:us-east-2": [ "3.18.188.104/32", "3.18.197.0/32", "3.18.172.189/32" ], "aws:us-west-1": [ "54.177.155.33/32", "52.9.13.199/32", "52.9.139.134/32" ], "aws:us-west-2": [ "52.35.61.232/32", "34.208.32.189/32", "52.89.221.151/32" ], "azure:eastus": [ "40.76.107.170/32", "20.62.248.141/32", "20.83.144.189/32" ] }, "prefixes_ipv6_by_location": {} } }
IP制限で使用できる?
アクセス元IPリストが公開されているならIP制限のホワイトリストに追加すれば、プライベートロケーションを作らなくても良いのでは?と思われるかもしれません。
ですが、以下の通りIPリストは突然変更されてしまうので、APIを監視して変更に追従し続ける必要があります。
IPアドレスのレンジは不定期に予告なく変更される事がございます。
2020/01/22 Datadogサポート回答より
APIの結果から動的にIPリストを取得し、更新日や内容の差分からIP制限のリストを修正するようなスクリプトを作成しても良いのですが、プライベートロケーションを作成する方が簡単なので個人的にはプライベートロケーションをお勧めします。
注意点
機能の有効化
プライベートロケーション機能はデフォルトでは使えないので、Datadogに有効化して貰う必要があります。
※Organization毎に申請が必要です。
プライベートロケーション画面にアクセスしても、最初は以下画像のように表示されて機能が使用できません。
Datadog 営業担当
宛でsales@datadoghq.comへメールで有効化したいOrganization名と有効化したい旨を連絡すれば、通常3営業日以内には有効化されます。
有効化された後は、プライベートロケーション画面が以下画像のように表示されます。
気になった事
問い合わせ先について
問い合わせ先についてはそれぞれ下記の通り記載されています。
この機能へのアクセスは制限されています。アクセス権をお持ちではない場合、Datadog サポートチームにお問い合わせください。
現在のプランには、プライベートロケーションへのアクセスは含まれていません。
お問い合わせください sales@datadoghq.com.
ドキュメントではDatadog サポートチーム
に、メール(support@datadoghq.com)で問い合わせしてね、と記載されておりDatadogサイト上の表示と異なるので問い合わせてみました。
Q.有効化依頼は「sales@datadoghq.com」へのメールとDatadogサポートチームへのリクエストとどちらの方が早く対応頂けるでしょうか?
A.正式な手続きとしてはsales@datadoghq.comへのご連絡よりリクエストいただくという形になっており、サポートチケットでリクエストを上げていただいた場合でも、営業側に確認するためのお時間が必要となりますため、直接 sales にご連絡いただく方がスムーズかと存じます。
2021/08/02 Datadogサポート回答より
既定の有効化可否
機能自体は無料なので、何故機能を制限しているのか謎なのでサポートに問い合わせました。
Q.Organization作成時にデフォルトで有効化されるようには出来ないでしょうか?
A.申し訳ございませんが、既定での変更はできません。個別具体的な契約状況により変化いたします。
2021/08/02 Datadogサポート回答より
残念ながら私が契約しているのProプランでは出来ないようでした。 もしかしたらEnterpriseプランや個別の契約によっては出来るのかもしれないです。
昔に作成したOrganizationは有効化されている?
Datadog 営業担当へリクエストしていないにも関わらず、昔に作成したOrganizationは何故か機能が有効化されていました。
確認してみたら、Organizationの作成時期が2020/08頃を境にデフォルトで機能が無効になっているようでした。
※全てではありません、作成時期が早くても無効なOrganizationもありました。
有効化されていて困ることは無いのでこちらについては詳細には問い合わせていません。
Docker Only
プライベートロケーションのワーカーはパッケージやバイナリでの配布が無く、Dockerコンテナイメージとしてのみ配布されている為、Dockerコンテナとして起動する必要があります。
逆に言えば、Dockerがホストできる環境であればどこでも良いです。
インターネットへ通信できる
プライベートロケーションワーカーが①Syntheticテスト設定をDatadogサーバーから取得し、②テストした結果をDatadogサーバーへ送信する為にアウトバウンドの443ポートでインターネットへ出られる環境である必要があります。
もう少し要件が厳しい場合はintake.synthetics.datadoghq.com
とintake-v2.synthetics.datadoghq.com
への送信を許可してください。
詳しくは、前提条件を参照してください。
プライベートロケーションワーカーをホストする環境の通信がインターネットには絶対出られない場合、2022/02/24現在本機能を使用できません。
DatadogのVPCエンドポイントがSyntheticに対応すれば、以下のドキュメント等を参考に、AWS us-east-1リージョンにあるDatadogのVPCエンドポイントへデータを送信する事で完全プライベート化できる可能性はあります。
AWS PrivateLink を介して Datadog に接続する - Datadog Docs
おまけ
ドキュメントには特に記載がありませんが、
Datadogマネージドロケーションとプライベートロケーションのデフォルトのリクエストヘッダーは同じです。
# マネージドロケーション sec-datadog: Request sent by a Datadog Synthetics API Test (https://docs.datadoghq.com/synthetics/) - test_id: 123456|xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx connection: close x-datadog-sampling-priority: 1 accept: */* user-agent: Datadog/Synthetics x-datadog-origin: synthetics host: example.com x-datadog-parent-id: 0 # プライベートロケーション sec-datadog: Request sent by a Datadog Synthetics API Test (https://docs.datadoghq.com/synthetics/) - test_id: 123456|xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx x-datadog-sampling-priority: 1 accept: */* x-datadog-parent-id: 0 x-datadog-origin: synthetics connection: close host: example.com user-agent: Datadog/Synthetics
特にロケーションによってuser-agentが変わることは無いようです。
恐らくDatadogマネージドロケーションも、内部ではプライベートロケーションと同じコンテナをホストしているのだと思われます。
参考
プライベートロケーションの概要 - Datadog Docs
Synthetic テストをプライベートロケーションから実行する - Datadog Docs
Synthetic ボットの特定 - Datadog Docs
API リファレンス > IP 範囲 - Datadog Docs