Tailscaleロゴ

ログストリーミング

最終検証日:
翻訳: 竹洞 陽一郎

構成監査ログのストリーミングは、PersonalPersonal Plus、およびEnterpriseプランでご利用いただけます。
ネットワークフローログのストリーミングは、Enterpriseプランでご利用いただけます。

ログストリーミングを使用すると、Tailscaleネットワーク(tailnetと呼ばれる)に関する構成監査ログまたはネットワークフローログを収集し、さまざまなシステムに送信して収集・分析を行うことができます。

Tailscaleのトラフィックを識別するには、User-Agent: TailscaleLogStreamPublisherを使用できます。

サポートされている連携先

Tailscaleは、ログストリーミングのさまざまな連携方法をサポートしています。

SIEM連携

セキュリティ情報・イベント管理(SIEM)システムにログをストリーミングすることで、セキュリティ脅威の検出と対応、アラートやモニタリングルールの設定などに役立てることができます。

以下のSIEMシステムとのログストリーミング連携をサポートしています。

Axiom
オブザーバビリティプラットフォーム。
Cribl
データパイプラインプラットフォーム。
Datadog
クラウドモニタリング・セキュリティプラットフォーム。
Elasticsearch Logstash
データストリーム経由で連携。
Panther
クラウドネイティブSIEMプラットフォーム。
Splunk
HTTP Event Collector経由で連携。

Amazon S3およびS3互換サービス

Amazon S3およびS3互換サービスにログをストリーミングして、さまざまなクラウドストレージプロバイダに保存できます。

以下のS3バケットタイプへのログ送信をサポートしています。

Amazon S3
AWSのオブジェクトストレージサービス。
S3互換サービス
以下を含みます。

Google Cloudサービス

Google Cloud Storage(GCS)
Googleのオブジェクトストレージサービス。

その他の連携タイプ

ログストリーミングに使用できるその他の連携先は以下の通りです。

プライベートエンドポイント
Tailscaleネットワーク内のノードに直接ログを送信。詳細は後述の「プライベートエンドポイント」セクションをご参照ください。
Vector
オープンソースの高性能オブザーバビリティデータパイプライン。詳細は後述の「追加SIEMシステム」セクションをご参照ください。

前提条件

エンドポイントと認証情報
SIEM連携先またはS3クラウドストレージプロバイダのエンドポイントと認証情報が必要です。エンドポイントとAPI認証情報の取得方法については、各ベンダーのドキュメントをご参照ください。
管理者権限
ストリーミング先の追加、編集、削除を行うには、Owner、Admin、Network admin、またはIT adminである必要があります。

構成ログのストリーミング

構成監査ログのストリーミングは、PersonalPersonal Plus、およびEnterpriseプランでご利用いただけます。

構成ログストリーミングの追加

SIEM連携の場合

  1. 管理コンソールの構成ログページを開きます。
  2. 「Start streaming」を選択します。
  3. 「Start streaming configuration logs」ダイアログで以下を設定します。
    SIEM送信先
    連携先のSIEMシステムを選択します。
    URL
    SIEMエンドポイントを入力します。
    エンドポイントURLはHTTPSプロトコルを使用する必要があり、ポートに制限はありません。
    SplunkのHTTP Endpoint Connectorの場合は、/services/collector/eventで終わるエンドポイントが必要です。
    Elasticsearchのデータストリームの場合は、<stream_id>/_bulk?prettyで終わるエンドポイントが必要です。
    Username
    SIEMシステムがユーザ名の値を必要とする場合、SIEMユーザ名を入力します。
    Token
    SIEM APIトークンを入力します。
  4. 「Start streaming」を選択します。

SIEMシステムを確認して、tailnetからのストリーミングが正常に行われていることを検証してください。

ネットワークの状態によっては、サードパーティツールでログストリーミングが表示されるまでに遅延が生じる場合があります。

Amazon S3の場合

管理コンソールの構成ログページから「Start streaming」を選択し、Amazon S3を送信先として設定します。 必要な情報(バケット名、リージョン、Role ARN等)を入力してストリーミングを開始します。

S3互換サービスの場合

Amazon S3と同様の手順で、S3互換サービス(Storj、Wasabi等)を送信先として設定します。 S3互換のエンドポイントURL、アクセスキー、シークレットキーを入力します。

Google Cloud Storageの場合

管理コンソールの構成ログページから「Start streaming」を選択し、Google Cloud Storageを送信先として設定します。 必要な認証情報とバケット情報を入力してストリーミングを開始します。

構成ログストリーミング先の編集

ログの送信先の情報を変更できます。

  1. 管理コンソールの構成ログページを開きます。
  2. 更新したいシステムの「Action」ドロップダウンを選択し、「Edit」を選択します。
  3. 必要に応じて値を更新します。
  4. 「Save changes」を選択します。

Amazon S3バケットのログストリーミング先を編集する場合、Role ARNフィールド(Amazonリソース名)は、そのリソース名が指定されたAWSアカウントに既に属している場合にのみ更新できます。
ロールがAWSアカウントに属していない場合は、管理コンソールでログストリーミング先を削除し、新しいものを作成する必要があります。

構成ログストリーミング先の削除

  1. 管理コンソールの構成ログページを開きます。
  2. 削除したい連携先の「Action」ドロップダウンを選択し、「Delete」を選択します。
  3. 確認ダイアログで「Delete」を選択します。

ネットワークログのストリーミング

ネットワークフローログのストリーミングは、Enterpriseプランでご利用いただけます。

ネットワークログストリーミング先の追加

SIEM連携の場合

  1. まだ有効にしていない場合は、tailnetのネットワークフローログを有効にします。
  2. 管理コンソールのネットワークフローログページを開きます。
  3. 「Start streaming」を選択します。
  4. 「Start streaming network logs」ダイアログで以下を設定します。
    SIEM送信先
    連携先のSIEMシステムを選択します。
    URL
    SIEMエンドポイントを入力します。
    エンドポイントURLはHTTPSプロトコルを使用する必要があり、ポートに制限はありません。
    SplunkのHTTP Endpoint Connectorの場合は、/services/collector/eventで終わるエンドポイントが必要です。
    Elasticsearchのデータストリームの場合は、<stream_id>/_bulk?prettyで終わるエンドポイントが必要です。
    Username
    SIEMシステムがユーザ名の値を必要とする場合、SIEMユーザ名を入力します。
    Token
    SIEM APIトークンを入力します。
  5. 「Start streaming」を選択します。

SIEMシステムを確認して、tailnetからのストリーミングが正常に行われていることを検証してください。

ネットワークの状態によっては、サードパーティツールでログストリーミングが表示されるまでに遅延が生じる場合があります。

Amazon S3 / S3互換サービス / Google Cloud Storageの場合

構成ログストリーミングと同様の手順で、ネットワークフローログページからそれぞれのストレージサービスを送信先として設定します。

ネットワークログストリーミング先の編集

ログの送信先の情報を変更できます。

  1. 管理コンソールのネットワークフローログページを開きます。
  2. 更新したいシステムの「Action」ドロップダウンを選択し、「Edit」を選択します。
  3. 必要に応じて値を更新します。
  4. 「Save changes」を選択します。

Amazon S3バケットのログストリーミング先を編集する場合、Role ARNフィールド(Amazonリソース名)は、そのリソース名が指定されたAWSアカウントに既に属している場合にのみ更新できます。
ロールがAWSアカウントに属していない場合は、管理コンソールでログストリーミング先を削除し、新しいものを作成する必要があります。

ネットワークログストリーミング先の削除

  1. 管理コンソールのネットワークフローログページを開きます。
  2. 削除したい連携先の「Action」ドロップダウンを選択し、「Delete」を選択します。
  3. 確認ダイアログで「Delete」を選択します。

プライベートエンドポイント

ログストリーミングは、パブリックインターネット上で直接到達可能なホストにログを公開(パブリッシュ)できます。この場合、エンドポイントはセキュリティのためにHTTPSを使用する必要があります。

あるいは、パブリックインターネット上で直接到達できないプライベートホストに対して、Tailscaleを接続手段として使用してログを公開することもできます。 基盤となるトランスポートはTailscaleによりWireGuardで保護されるため、プレーンHTTPを使用できます。

プライベートホストへのログストリーミングの使用は、エンドポイントURLで指定されたホストに基づいて自動的に検出されます。

ホストはtailnet内のノードを参照する必要があり、以下のいずれかを使用できます。

Tailscaleノード名
例: splunk
Tailscaleノードの完全修飾ドメイン名
例: splunk.yak-bebop.ts.net
TailscaleノードのIPv6アドレス
例: fd7a:115c:a1e0:ab12:0123:4567:89ab:cdef

ログストリーミングではIPv6アドレスのみがサポートされています。
IPv4アドレスはサポートされていません。
これは、Tailscaleが単一のtailnet内のノードに割り当てるIPv4アドレスにCGNATを使用しているためです。IPv4アドレスはtailnet間で再利用される可能性があるため問題となり得ますが、IPv6アドレスは再利用されず、ホスト名は常に正しいノードにルーティングされます。

【訳注】CGNAT(Carrier-Grade NAT)とは、大規模なネットワークアドレス変換の仕組みです。
Tailscaleは各ノードに100.x.y.z形式のIPv4アドレス(CGNAT範囲: 100.64.0.0/10)を割り当てますが、このアドレス空間はtailnetごとに独立しているため、異なるtailnetで同じIPv4アドレスが使われる可能性があります。
一方、IPv6アドレスはグローバルに一意であるため、ログストリーミングではIPv6アドレスのみをサポートすることで、ノードの一意な識別を保証しています。

プライベートエンドポイントの仕組み

プライベートエンドポイントへのログストリーミングは、お客様のノードをTailscaleが管理するtailnetに共有(シェア)することで動作します。 Tailscaleが管理するノードが、お客様のノードに直接ログを公開します。

これには以下の2つの操作が必要です。

  1. お客様のノードをTailscaleのlogstream tailnetに共有(シェアアウト)する。
  2. tailnetポリシーファイルを変更して、logstream@tailscaleユーザからお客様のノードへの着信トラフィックをサポートする。

プライベートホストを指すエンドポイントを追加または更新する際、コントロールプレーンはお客様に代わってノードの共有やtailnetポリシーファイルの更新を行う必要がある場合があります。 追加の設定変更が必要な場合は、フォローアップのダイアログボックスが表示され、必要なアクションの実行許可を求めます。 これらの操作に対して監査ログイベントが生成され、アクションはお客様に帰属します。

エンドポイントの追加または更新後、ノードは管理コンソールの「Machines」ページに、logstream@tailscaleユーザに共有されたものとして表示されます。 また、tailnetポリシーファイルは以下のようなルールで変更されます。


{
  // プライベートログストリーミングにより、監査ログとネットワークログを
  // パブリックインターネットに公開することなく、tailnet内のノードに
  // 直接アップロードできます。
  // このアクセスルールは、Tailscaleが管理するノードが
  // 指定されたノードにログを直接アップロードするためのアクセスを提供します。
  // 参照: https://tailscale.com/docs/features/logging/log-streaming#private-endpoints
  "action": "accept",
  "src":    ["logstream@tailscale"],
  "dst":    ["[nodeAddressV6]:port"],
}

tailnetポリシーファイルの管理には、ビジュアルポリシーエディタを使用できます。 ビジュアルエディタの使用方法については、ビジュアルエディタリファレンスをご参照ください。

上記の設定で使用される値は以下の通りです。

nodeAddressV6
TailscaleノードのIPv6アドレス。
port
ログストリーミングシステムのサービスポート。

IPv6アドレスは、Internet ProtocolのIPv6経由でお客様のノードと通信できるログストリームパブリッシャーとして指定されます。

プライベートエンドポイントの権限要件

プライベートホストへのログストリーミングには、ノードの共有機能とtailnetポリシーファイルの更新機能の両方が必要になる場合があるため、AdminおよびNetwork adminロールのみが、プライベートエンドポイントを単独で使用するのに十分な権限を持ちます。

IT adminはノードの共有機能を持ちますが、tailnetポリシーファイルの更新機能はありません。 IT adminはプライベートエンドポイントを使用できますが、ログのストリーミングを開始する前に、AdminまたはNetwork adminがtailnetポリシーファイルを手動で更新する必要があります。

tailnetがTailscaleの管理にGitOpsを使用するように設定されている場合、TailscaleがtailnetポリシーファイルをIPv6更新しようとするとエラーが発生します。
このエラーを回避するには、まずGitOpsを使用してlogstream@tailscaleユーザからの着信トラフィックがプライベートエンドポイントに使用するノードに到達できるアクセスルールを追加し、その後にプライベートエンドポイントをログストリーミングURLとして追加してください。

追加SIEMシステム

Tailscaleはお客様が使用する多くの一般的なSIEMシステムのサポートに努めていますが、市場に存在するすべての商用・オープンソースのSIEMおよびロギングツールをサポートすることはできません。

一部のSIEMシステムは、SentinelOneのDataSetのように、Splunk HTTP Event Collector(Splunk HEC)互換のエンドポイントを持っています。 お使いのSIEMがSplunk HECをサポートしている場合は、上記の手順に従って構成監査ログのストリーミングおよびネットワークフローログのストリーミングを設定し、Splunkであるかのように直接SIEMにログをストリーミングできます。

Tailscaleがお使いのSIEMシステムをサポートしていない場合は、Vector(オープンソースの高性能オブザーバビリティデータパイプライン)を使用して、VectorのSplunk HECサポートによりTailscaleからログデータを取り込み、Vectorがサポートする多数のSIEMシステム(Vectorの用語で「シンク」と呼ばれる)に配信できます。 Vectorは、オブジェクトストレージシステム、メッセージキューイングシステム、Grafana Loki、New Relicなど、多数のシンクをサポートしています。

Vectorのデプロイ

TailscaleからのログストリーミングでVectorを使用するには、以下の手順を実行します。

  1. Vectorのデプロイガイドに従って、インフラストラクチャにVectorを実行するマシンをデプロイします。
  2. VectorのSplunk HTTP Event Collector(HEC)ソースを設定し、TailscaleがVectorにログデータを送信できるようにします。
  3. お使いのSIEM用のVectorシンクを、ログストリーミングデータの送信先として設定します。
  4. 上記の手順に従って構成監査ログのストリーミングおよびネットワークフローログのストリーミングを設定し、Vectorインスタンスにログをストリーミングします。理想的にはプライベートエンドポイントを使用してください。

Vectorの設定例

以下のVector設定は、splunk_hecソースからデータを受信し、fileシンクにデータを出力します。


# /etc/vector/vector.yaml

sources:
  splunk_hec:
    type: "splunk_hec"
    address: "100.x.y.z:8088" # VectorのTailscaleデバイスのIPまたはホスト名
    valid_tokens:
      - "YOUR TOKEN"

sinks:
  file_sink:
    type: "file"
    inputs:
      - "splunk_hec"
    path: "/vector-data-dir/tailscale-%Y-%m-%d.log"
    encoding:
      codec: "json"