Tailscaleロゴ

構成監査ログ

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

構成監査ログを使用すると、tailnet内で誰が、何を、いつ行ったかを特定できます。
構成監査ログは、tailnetの構成を変更するアクションを記録します。
これには、アクションの種類、実行者(アクター)、対象リソース(ターゲット)、および時刻が含まれます。

ログをエクスポートして、長期保存やセキュリティ分析、脅威検出、インシデント調査に活用できます。
また、ログをセキュリティ情報・イベント管理(SIEM)システムにストリーミングすることも可能です。

tailnetポリシーファイルの変更については、変更前と変更後のファイルの完全なdiff(差分)がログに含まれます。

構成監査ログは、すべてのプランでご利用いただけます。

管理コンソールにアクセスできるすべてのユーザは、管理コンソールのログページで構成監査ログを確認でき、フィルタリングして特定のイベントを検索できます。

構成監査ログはすべてのtailnetでデフォルトで有効化されており、直近90日間のログが利用可能です。

ログの構造

ログには以下のコンポーネントが含まれます。

タイムスタンプ(Timestamp)
イベントが発生した時刻。
ブラウザのローカルタイムで表示されます。
アクション(Action)
実行されたアクション。
例: デバイスの承認、tailnetポリシーファイルの変更。
アクター(Actor)
アクションを実行したユーザまたはプロセス。
ユーザによるアクションの場合、この値はユーザの名前になります。
APIから返されるイベントでは、ユーザのメールアドレスまたはGitHubユーザ名、および名前が利用可能です。
Tailscaleコントロールプレーンによるアクションの場合、この値は「Tailscale service」となります。
コントロールプレーンによるアクションの一覧については、後述の「サービスイベント」をご参照ください。
ターゲット(Target)
アクションが適用されたリソース。
例: ユーザのロールを変更するアクションの場合、ターゲットはそのユーザです。
デバイスを承認するアクションの場合、ターゲットはそのデバイスです。
tailnet全体の構成変更の場合、ターゲットはtailnetです。
差分(Diff)
変更前と変更後の値(該当する場合)。
例: ノードのマシン名を変更した場合や、タグのリストを更新した場合、変更前と変更後の両方の値が表示されます。
アクセス制御ポリシーの変更では、コメントなどの実質的でない変更も含めた、変更前と変更後のバージョンの完全なdiffが表示されます。
ノードの再認証では、古いノードキーの有効期限と新しいキーの有効期限が表示されます。

構成監査ログの有効化

構成監査ログはすべてのtailnetで常に有効化されており、無効にすることはできません。

構成監査ログは、Tailscaleがプライバシーポリシーに基づいてサービスを提供するために使用するログのサブセットです。

構成監査ログへのアクセス

構成監査ログには、管理コンソールのログページ、またはAPIを使用してアクセスできます。

管理コンソールでの構成監査ログの表示

管理コンソールにアクセスできるすべてのユーザは、管理コンソールのログページで構成監査ログにアクセスし、フィルタリングして特定のイベントを検索できます。

ログは、イベントが発生した順序で表示され、最新のものが先頭になります。

構成監査ログのフィルタリング

管理コンソールのログページでは、特定の条件に一致するイベントをより簡単に見つけるためにフィルタリングできます。

フィルタは、時間、アクション、アクターに対して使用できます。
複数のフィルタを同時に適用して、すべてのフィルタ条件に一致するイベントを検索できます。

時間

「Timeframe」フィルタを使用して、指定した2つの日付の間のログのみを表示します。

アクションの種類

「Action」フィルタを使用して、選択したアクションに一致するログのみを表示します。
例えば、tailnetポリシーファイルの更新を含むすべてのイベントを確認できます。

アクター

「Actor」フィルタを使用して、選択したユーザによるアクションのみを表示します。

Tailscale APIによる構成監査ログへのアクセス

構成監査ログは、Tailscale APIからエクスポートできます。
構成監査ログにアクセスするには、logs:configuration:readスコープを持つAPIアクセストークンが必要です。

ログAPIコールのレスポンスは、TailnetLogsResponse構造体の形式です。


type TailnetLogsResponse struct {
	Version string        `json:"version"`
	Tailnet dbx.TailnetID `json:"tailnetId"`

	Logs []Log `json:"logs"` // 時系列順
}

APIでは、以下のクエリパラメータを使用できます。

start
必須。
取得するログの期間の開始日時。
RFC3339タイムスタンプ形式。
例: 2022-07-20T00:00:00Z
end
必須。
取得するログの期間の終了日時。
RFC3339タイムスタンプ形式。
例: 2022-07-21T00:00:00Z

startendの時刻は、ナノ秒精度で包含的(inclusive)です。

以下の例では、APIコールに使用する以下の変数が設定されていることを前提としています。

$ACCESS_TOKEN
Tailscale APIを呼び出す際に使用するAPIアクセストークン。
管理コンソールのKeysページでAPIアクセストークンを作成できます。
$TAILNET_ID
tailnet ID。
管理コンソールのGeneralページで確認できます。
$START
取得するログの期間の開始日時。
$END
取得するログの期間の終了日時。

export ACCESS_TOKEN=tskey-api-k123456CNTRL-0123456789abcdef
export TAILNET_ID=example.com
export START=2022-07-20T00:00:00Z
export END=2022-07-21T00:00:00Z

curl -u  $ACCESS_TOKEN:  -X GET \
  "https://api.tailscale.com/api/v2/tailnet/{$TAILNET_ID}/logging/configuration?start={$START}&end={$END}"

オプションとして、json_ppを使用してJSON出力を整形できます。


curl -u  $ACCESS_TOKEN: -X GET \
  "https://api.tailscale.com/api/v2/tailnet/{$TAILNET_ID}/logging/configuration?start={$START}&end={$END}" \
  | json_pp

出力は以下のようになります。


{
	"logs": [
		{
			"action": "UPDATE",
			"actor": {
				"displayName": "Alice Architect",
				"id": "123456CNTRL",
				"loginName": "alice@example.com",
				"type": "USER"
			},
			"deferredAt": "0001-01-01T00:00:00Z",
			"eventGroupID": "12345",
			"eventTime": "2022-07-20T20:13:30.136022207Z",
			"new": "2023-01-14T20:13:30.134350003Z",
			"old": "0001-01-01T00:00:00Z",
			"origin": "NODE",
			"target": {
				"id": "654321CNTRL",
				"name": "node1.yak-bebop.ts.net",
				"property": "KEY_EXPIRY_TIME",
				"type": "NODE"
			},
			"type": "CONFIG"
		},
		{
			"action": "CREATE",
			"actor": {
				"displayName": "Alice Architect",
				"id": "123456CNTRL",
				"loginName": "alice@example.com",
				"type": "USER"
			},
			"deferredAt": "0001-01-01T00:00:00Z",
			"eventGroupID": "23456",
			"eventTime": "2022-07-20T18:40:58.838529518Z",
			"new": {
				"capabilities": ["CONTROL_API_SCOPE_ALL_READ", "CONTROL_API_SCOPE_ALL"],
				"expires": "2022-10-18 18:40:58.653877012 +0000 UTC"
			},
			"origin": "ADMIN_UI",
			"target": {
				"id": "789123CNTRL",
				"name": "Control API key",
				"type": "API_KEY"
			},
			"type": "CONFIG"
		},
		{
			"action": "UPDATE",
			"actor": {
				"displayName": "Bob Builder",
				"id": "987654CNTRL",
				"loginName": "bob@example.com",
				"type": "USER"
			},
			"deferredAt": "0001-01-01T00:00:00Z",
			"eventGroupID": "34567",
			"eventTime": "2022-07-20T22:35:19.590021877Z",
			"new": ["...", "...", "10.0.0.0/24", "10.0.1.0/24"],
			"old": ["...", "..."],
			"origin": "ADMIN_UI",
			"target": {
				"id": "876543CNTRL",
				"name": "bob-workstation.yak-bebop.ts.net",
				"property": "ALLOWED_IPS",
				"type": "NODE"
			},
			"type": "CONFIG"
		}
	],
	"tailnetId": "example.com",
	"version": "1.1"
}

現在、APIにはページネーションのサポートはなく、最大ページサイズもありません。指定された期間内のすべてのイベントが返されます。

単一の操作で複数のイベントが発生した場合、それらのアクションは同じeventGroupIDの値を持ちます。

監査ログからのアクセス制御ポリシーの復元

このオプションは、GitOps for Tailscaleを使用している場合はご利用いただけません。

監査ログからtailnetポリシーファイルを復元するには、tailnetのOwner、Admin、またはIT adminである必要があります。

過去の日時のtailnetポリシーファイルに復元できます。

  1. 管理コンソールの構成ログページを開きます。
  2. 復元したいポリシーファイルの変更を含むログエントリを見つけて展開し、「Revert to previous version」を選択します。確認ダイアログで「Revert」を選択します。
  3. 管理コンソールのAccess controlsページを開き、ポリシーファイルが期待通りの変更で復元されたことを確認します。

イベント

構成監査ログには、管理コンソールまたはTailscale APIを使用してユーザが行うことができる、tailnetの構成を変更する書き込みアクションが含まれます。

正常に完了したイベントは、対応するログエントリを生成します。

構成監査ログに含まれるイベントは以下の通りです。

Tailnet

アクション説明
tailnetの作成tailnetが作成されました。
tailnetのポリシーファイルの更新tailnetポリシーファイルが変更されました。tests、tagOwners、autoApprovers、Tailscale SSH設定への変更を含みます。
tailnetの最大キー有効期間の更新キーの有効期限が変更されました。
tailnetのDNS設定の更新DNS設定が更新されました。グローバルネームサーバや制限付きネームサーバ(Split DNS)の追加、MagicDNSの変更を含みます。
tailnetのデバイス承認の有効化デバイス承認が有効化されました。
tailnetのデバイス承認の無効化デバイス承認が無効化されました。
tailnetのユーザ承認の有効化ユーザ承認が有効化されました。
tailnetのユーザ承認の無効化ユーザ承認が無効化されました。
ユーザが外部tailnetに参加お客様のtailnetのユーザが別のtailnetに参加しました。
ユーザが外部tailnetから離脱お客様のtailnetのユーザが別のtailnetから離脱しました。
tailnetのMagicDNSの有効化MagicDNSが有効化されました。
tailnetのMagicDNSの無効化MagicDNSが無効化されました。
tailnetのMullvad VPNの有効化MullvadExit Nodeが有効化されました。
tailnetのMullvad VPNの無効化MullvadExit Nodeが無効化されました。
tailnetのTaildropの有効化Taildropが有効化されました。
tailnetのTaildropの無効化Taildropが無効化されました。
tailnetのサービス収集の有効化サービス収集が有効化されました。
tailnetのサービス収集の無効化サービス収集が無効化されました。
tailnetのHTTPSドメインの有効化HTTPSが有効化されました。
tailnetのHTTPSドメインの無効化HTTPSが無効化されました。
tailnet DNS名の更新tailnet DNS名が変更されました。
tailnetのユーザ・グループプロビジョニングの有効化ユーザ・グループプロビジョニングが有効化されました。
tailnetのユーザ・グループプロビジョニングの無効化ユーザ・グループプロビジョニングが無効化されました。
tailnetのアカウントメールの更新アカウントメールが更新されました。
tailnetのアカウントメールの確認アカウントメールが確認されました。
tailnetの構成メールの更新構成メールが更新されました。
tailnetの構成メールの確認構成メールが確認されました。
tailnetのセキュリティメールの更新セキュリティメールが更新されました。
tailnetのセキュリティメールの確認セキュリティメールが確認されました。
機能のウェイトリストへの参加招待制機能のウェイトリストに参加しました。
機能の招待の承諾招待制機能への招待が承諾されました。
tailnetのログストリームエンドポイントの作成ログストリーミングエンドポイントが作成されました。
tailnetのログストリームエンドポイントの更新ログストリーミングエンドポイントの送信先が更新されました。
tailnetのログストリームエンドポイントの削除ログストリーミングエンドポイントが削除されました。
tailnetのネットワークフローロギングの有効化ネットワークフローログが有効化されました。
tailnetのネットワークフローロギングの無効化ネットワークフローログが無効化されました。
tailnetロックの有効化Tailnet Lockが有効化されました。
tailnetロックの無効化Tailnet Lockが無効化されました。
tailnetロックのノードキーの署名信頼されたTailnet Lockキーによりノードのキーが署名されました。
tailnetロックへの信頼キーの追加信頼キーがTailnet Lockに追加されました。
tailnetロックからの信頼キーの削除信頼キーがTailnet Lockから削除されました。
tailnetロックの信頼キーの更新信頼されたTailnet Lockキーが更新されました。
Webhookエンドポイントの作成Webhookが作成されました。
Webhookエンドポイントの削除Webhookが削除されました。
Webhookエンドポイントのシークレットの更新Webhookのシークレットが更新されました。
Webhookエンドポイントの購読イベントの更新Webhookの購読イベントセットが更新されました。
ポスチャID収集の有効化デバイスポスチャ識別子(例: シリアル番号)の収集が有効化されました。
ポスチャID収集の無効化デバイスポスチャ識別子の収集が無効化されました。
ポスチャ連携の作成新しいデバイスポスチャ連携が追加されました。
ポスチャ連携の更新デバイスポスチャ連携が更新されました。
ポスチャ連携の削除デバイスポスチャ連携が削除されました。

課金

アクション説明
tailnetの課金サブスクリプションの作成サブスクリプションが作成されました。
tailnetの課金サブスクリプションの更新サブスクリプションが変更されました。選択プランや制限の変更を含みます。ログにはサブスクリプションのdiffは含まれません。現在のサブスクリプション情報は管理コンソールの課金ページで確認できます。
tailnetの課金サブスクリプションのキャンセルサブスクリプションがキャンセルされました。
tailnetの課金先住所の更新課金先住所が変更されました。物理的住所と名前を含みます。
tailnetの課金メールの更新課金メールが変更されました。
tailnetの課金支払い情報の更新課金支払い情報が変更されました。支払い方法や税IDを含みます。

ユーザ

アクション説明
ユーザの作成ユーザがtailnetに参加しました。
ユーザのtailnetへの招待ユーザにtailnetへの招待が送信または再送信されました。
ユーザの承認ユーザが承認されました。
ユーザのロールの更新ユーザのロールが変更されました。
ユーザの停止ユーザがtailnetから停止されました。
ユーザの復元ユーザがtailnetに復元されました。
ユーザの削除ユーザがtailnetから削除されました。
ユーザのプッシュSCIM連携IDプロバイダでプロビジョニングされたユーザの属性が更新されました。

グループ

アクション説明
グループのプッシュSCIM連携IDプロバイダでグループがプロビジョニングされました。

ノード

アクション説明
ノードの作成ノードが追加されました。デバイス承認が有効なtailnetでは、まだ承認されていない場合があります。
ノードへのログインユーザがノードにログインまたは再認証しました。Tailscale SSHチェックモードの一部としての再認証を含みます。
ノードの承認ノードが承認されました。
ノード名の更新ノード名が更新されました。
ノードのキー有効期限の有効化ノードキーの有効期限が有効化されました。
ノードのキー有効期限の無効化ノードキーの有効期限が無効化されました。
ノードのキー有効期限の更新ユーザがノードを再認証し、ノードキーの有効期間が延長されたか、ノードキーの有効期限が一時的に延長されました。
ノードキーの期限切れノードキーが期限切れになりました。
ノードの承認済みルートの更新このノードのルートが手動で更新されました。
ノードの自動承認ルートの更新自動承認者に基づいて、このノードのルートが自動的に更新されました。
ノードのエグジット設定の更新ノードがアドバタイズするExit Nodeが更新されました。
ノードのタグの更新ノードタグが更新されました。
ノード属性の更新ノードのデバイスポスチャ属性が変更されました。
ノードのポスチャIDの更新ノードのデバイスポスチャIDが変更されました。
ノードからのログアウトユーザがノードからログアウトしました。
ノードの削除ノードが削除されました。

管理コンソール

アクション説明
管理コンソールへのログイン認可されたユーザが管理コンソールにログインしました。
管理コンソールからのログアウト認可されたユーザが管理コンソールからログアウトしました。

login.tailscale.com

アクション説明
WebインターフェースでのログインメンバーユーザがWebインターフェースにログインしました。
WebインターフェースでのログアウトメンバーユーザがWebインターフェースからログアウトしました。

招待

アクション説明
ノード共有の招待の作成ノード共有の招待が共有元tailnetにより作成されました。招待のターゲットは、招待作成時に入力されたラベルです。
ノード共有の招待の承諾ノード共有の招待が共有先tailnetにより承諾されました。
ノード共有の招待の削除ノード共有の招待が共有元tailnetにより取り消されました。

共有

アクション説明
ノード共有の作成共有ノードが共有先のtailnetに追加されました。
ノード共有の更新共有ノードが更新されました。既に共有ノードを持つ共有先に再度共有された場合に発生します。
ノード共有の削除共有ノードが共有先のtailnetから削除されました。共有元(共有ノードへのアクセスを取り消す)または共有先(共有ノードをtailnetから削除する)のいずれかのアクションです。

API

アクション説明
失敗したリクエスト権限不足でAPIコールが試行されました。

APIキー

アクション説明
APIキーの作成APIアクセストークンが生成されました。
APIキーの取り消しAPIアクセストークンが取り消されました。
APIキーの期限切れAPIアクセストークンが期限切れになりました。

認証キー

アクション説明
認証キーの作成認証キーが生成されました。タグ、キーが再利用可能か、一時的か、事前承認済みかの情報を含みます。
認証キーの取り消し認証キーが取り消されました。
認証キーの期限切れ認証キーが期限切れになりました。

ログインの失敗はTailscaleのイベントに含まれません。
これらはTailscaleのログではなく、お使いのIDプロバイダのログで確認してください。

単一操作に対する複数イベント

同一の操作の一部として発生する複数のイベントは、個別にログに記録されます。
例えば、ユーザが削除された場合、そのユーザの各ノードの削除、各APIアクセストークンの削除、およびユーザ自体の削除のログエントリが生成されます。
ノードがtailnetに追加された場合、ノード名の更新、ノードの作成、ノードのキー有効期限の更新、ノードへのログイン、および該当する場合はノードの承認のログエントリが生成されます。

操作とイベントの対応

操作イベント
ユーザがtailnetに追加される (ユーザに招待が送信された場合)ユーザのtailnetへの招待
ユーザの作成
(ユーザ承認が有効な場合)ユーザの承認
ユーザが削除される 各ノードに対してノードの削除
ユーザの削除
ノードがtailnetに追加される ノード名の更新(名前が空からノード名に設定)
ノードの作成
ノードのキー有効期限の更新(キー有効期限が現在時刻 + 有効期間に設定)
ノードへのログイン

その直後、デバイス承認が有効な場合:
ノードの承認
ノードがログアウトされる ノードのキー有効期限の有効化(キー有効期限が有効化される)
ノードのキー有効期限の更新(キー有効期限が現在時刻に設定)
ノードからのログアウト
ノードが再認証される ノードのキー有効期限の更新
ノードへのログイン
MagicDNSが有効化される tailnetのMagicDNSの有効化
tailnetのDNS設定の更新
MagicDNSが無効化される tailnetのMagicDNSの無効化
tailnetのDNS設定の更新

共有ノードのイベント

共有ノードを使用する場合、一部のイベントは共有元と共有先の両方のtailnetでログに記録されます。
招待に関連するイベントは共有元tailnetのみでログに記録され、共有ノードに関連するイベントは共有元と共有先の両方でログに記録されます。

ターゲットアクションアクター共有元共有先
招待ノード共有の招待の作成共有元管理者
招待ノード共有の招待の承諾共有先管理者
招待ノード共有の招待の削除共有元管理者
共有ノード共有の作成共有先管理者
共有ノード共有の更新共有先管理者
共有ノード共有の削除共有元または共有先管理者

サービスイベント

ログには、ユーザが直接実行したのではなく、Tailscaleサービスによって実行されたアクションであるサービスイベントが含まれます。 サービスイベントには以下が含まれます。

ターゲットアクションアクター説明
Tailnetユーザの停止Tailscale service: user and group provisioningユーザ・グループプロビジョニングを使用するtailnetで、ユーザが無効化されたかTailscaleアプリから割り当て解除された。
Tailnetユーザの復元Tailscale service: user and group provisioningユーザ・グループプロビジョニングを使用するtailnetで、ユーザが再有効化されたかTailscaleアプリに割り当てられた。
ノードノードの削除Tailscale service: remove ephemeral node非アクティブな一時ノードを削除。
APIキー/認証キーAPIキーの期限切れTailscale service: expire API key90日後にキーを期限切れにする。

含まれないイベント

Tailscaleのサポートチームへのリクエストにより開始されたtailnetの変更は、現在含まれていません。これには以下が含まれます。

ユーザが実行していれば含まれていたはずの変更で、サポートリクエストにより開始されたものも含まれません。

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

ログストリーミングを使用すると、ネットワークフローログをセキュリティ情報・イベント管理(SIEM)システムにストリーミングできます。 詳細については、ログストリーミングをご参照ください。

制限事項