Parsec for teamsで監査ログをダウンロードして中身を確認してみる

2021.10.28

先月になりますが、Parsec for teamsで監査ログがダウンロードできるようになりました。

Team内のすべてのParsecユーザー接続とすべての管理アクションがログイベントとして記録されるようになっています。

ダウンロード方法

ダッシュボードから

Parsecのダッシュボードにログインし、Audit Logsのページのダウンロードボタンから実行できます。

JSON形式で提供されていて、7日間の履歴と最大5000のイベントに制限されています

APIを使う

Enterpriseアドオンを購入している場合、APIを使って履歴に制限を設けることなくダウンロードが可能です。

アクセス例

curl https://api.parsec.app/v1/teams/{teamID}/events?limit=10 \
     -H 'Authorization: Bearer {apiKey}'

必須パラメーター

  • teamID
    • parsec for teamsのID
  • apiKey
    • Parsec for Teamsのダッシュボードから作成する
  • limit
    • 取得したいイベントの件数(1 ~ 1000まで)

オプションパラメーター

  • start_at
    • この日付時間以降に発生したイベントのみを対象とする (date-time)
  • end_at
    • この日付時間以前に発生したイベントのみを対象とする (date-time)
  • user_id
    • このuser_idを持つイベントのみを対象とする (integer)
  • event_names
    • これらの名前(コンマで区切られている)を持つイベントのみを対象とする(array of string)
  • cursor
    • ページングを開始する最初のイベントのID(含)
  • after
    • ページングを開始する最初のイベントのID(排)

レスポンス例 

{
  "data": [
    {
      "id": "1sn61hB1dYM1IWxTuJynYdzbwNs",
      "name": "team_create",
      "timestamp": "2021-05-20T07:29:52.049Z",
      "user_id": 6181803,
      "team_id": "1sn61992rNstjlDoJWnFXRRkxPZ",
      "data": {
        "app_version": "",
        "client_peer_id": "1rjwCb437qXsFaHsR49UNnYJQYt",
        "client_type": "",
        "host_peer_id": "1rjwCVNMenFvGDzavBH8rnym2h6",
        "ip": "150.249.249.19",
        "os": "macos",
        "team_id": "1sn61992rNstjlDoJWnFXRRkxPZ",
        "team_name": "cm",
        "team_seats": 5
      },
      "user_email": "mori.ryosuke@classmethod.jp"
    },

ログの形式

{
  data* [{
    id*: string
    name*: string
    timestamp*: date-time
    user_id*: integer
    team_id*: string
    data* {
      Event data
    }
    user_email: string
  }]
  next_cursor*: string
}

メインデータ

項目 説明
id イベントID
name 実行されたアクションの名前
timestamp イベントが記録された時間
user_id イベントを記録したアクションを実行したユーザーのID
team_id チームのID
user_email イベントを記録したアクションを実行したユーザーの電子メール
data 各イベントに固有のプロパティ
next_cursor イベントの次のページのカーソルです。空の場合:取得できるイベントはもうありません。

接続イベント

クライアントがホストに接続すると、いくつかのイベントが記録されます。 該当する場合は常に、クライアントの観点とホストの観点の両方から接続イベントが記録されます

いくつか例をあげると

name 説明
conn_client_offer クライアントがホストへの接続を要求しました。
conn_signal_offer_relayed バックエンドは、ホストに接続するというクライアントの提案を承認して中継しました。
p2p_client_complete 接続の試行が完了しました(成功または失敗)。ステータスについては、データ列のexit_codeを参照してください。
p2p_host_complete 接続の試行が完了しました(成功または失敗)。ステータスについては、データ列のexit_codeを参照してください。
client_disconnect クライアントの接続は終了しました。ステータスについては、データ列のexit_codeを参照してください。
client_disconnect ホストの接続は終了しました。ステータスについては、データ列のexit_codeを参照してください。

このようなものがname に記載されているはずです

終了コードに関してはここを参照。

データプロパティ

dataキーの中には以下のような情報が含まれます。

name 説明
attempt_id 試行IDは、各Parsecピアツーピア接続の期間中永続する一意のIDです。
host_user_id 接続イベントにおけるホストのユーザーID。共有チームコンピュータの場合、これは0になります。
host_peer_id ホストピアIDは、ユーザーがデバイスにログインしている限り永続的ですが、ユーザーがログアウトしてから同じデバイスに再度ログインすると変更される可能性があります。
client_user_id 接続イベントにおけるクライアントのユーザーID。
client_peer_id クライアントピアIDは、ピアツーピア接続間で永続性を維持するために信頼されるべきではありません。

ipやos,platformなどの情報も含まれていました。

例)

"app_version": "150-78",
"attempt_id": "000e7777-576639b2-a60ec436-e4736baa-84546301-027ac414",
"client_computer_name": "",
"client_peer_id": "1vvpHWInaJ8yjxgqeH8N2gOJFoW",
"client_user_id": 6181803,
"connecting_to_self": false,
"duration": 4,
"exit_code": 0,
"host_computer_name": "ec2-parsec-host",
"host_is_shared_team_computer": true,
"host_is_team_computer": true,
"host_peer_id": "2053mKvtaKDpVtdOAjic8oasiXu",
"host_user_id": 0,
"ip": "1.2.3.4",
"os": "Windows",
"os_version": "10",
"platform": "windows"

トラブルシューティングや可視化などに使えるので、チーム管理者にとってはありがたい機能だと思います。

現状ではダウンロードだけですが、外部に保存して解析などを行うには、 APIで定期的に取得してどこかのストレージサービスやログ解析サービスに保存する といったやり方が現状だと現実的でしょうか。

ログビューワーが実装されたり、他のサービス(AWSやGoole Cloudなど)とのインテグレーションが提供されるともっと使い勝手が良くなるかもしれませんね。