Datadog プライベートロケーションとは?

記事タイトルとURLをコピーする

こんにちは、SWX3人目の熊谷(悠)です。
Datadog Synthetic の Private Location についての連載です。
本稿では概要を記します。

対象読者

  • Datadog Syntheticの概要を理解している。
  • Dockerの概要を理解している。

プライベートロケーションとは?

内部用アプリケーションの監視や、パブリックインターネットから接続できないプライベート URL の監視が行えます。

例えば、インターネットへ公開されているサービスであれば、Datadogが用意しているマネージドロケーションからSyntheticで特に問題無く監視できます。 インターネットへ公開されているサービスのDatadogによる監視.png

ただ、IP制限のかけられているサービスや......

IP制限のかかっているサービス.png

内部でのみアクセスされるAPIやVPNへ接続してアクセスするサイト等はDatadogから監視ができません。

非公開のサービス.png

そこで、内部にDatadogのワーカーコンテナを作成し、内側から監視を行うのがプライベートロケーションです。

プライベートロケーション.png

料金

プライベートロケーション機能自体は無料なので、通常のSynthetic使用と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配列に格納されています。
  • 最終更新日時は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毎に申請が必要です。

プライベートロケーション画面にアクセスしても、最初は以下画像のように表示されて機能が使用できません。 2021-07-27_21h16_43.png

Datadog 営業担当宛でsales@datadoghq.comへメールで有効化したいOrganization名と有効化したい旨を連絡すれば、通常3営業日以内には有効化されます。

有効化された後は、プライベートロケーション画面が以下画像のように表示されます。 2021-07-28_14h01_54.png

気になった事

問い合わせ先について

問い合わせ先についてはそれぞれ下記の通り記載されています。

ドキュメント

この機能へのアクセスは制限されています。アクセス権をお持ちではない場合、Datadog サポートチームにお問い合わせください。

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.comintake-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

AWS PrivateLink を介して Datadog に接続する - Datadog Docs

料金#Synthetic-モニタリング | Datadog