📑

GASでGoogleドライブ監査ログを自動抽出調査メモ

5 min read

事前準備

1日ごとに取得するようにする

Admin SDKのReportsを使うためにはサービスを追加しておく必要がある。

サービス > Admin SDK API の順に選択
バージョンは「reports_v1」、IDに「AdminReports」を入力して追加

https://qiita.com/ranmatsu/items/54467af10478d2ce4c17#事前準備

調査メモ

全体(pageTokenが取得ができなくなるまでアクティビティのリストを取得する)

  do {
    let page;
    page = AdminReports.Activities.list("all", "drive", { 
      pageToken:pageToken,
      startTime:startTime,
      endTime:endTime,
      maxResults:1000
    });
    pageToken = page.nextPageToken;

    if (!page.items) return;

    page.items.forEach(function (item) {
      // events(レポート内のアクティビティイベント)をレコード取得して連想配列で回す
      item.events.forEach(function (event) {
        //console.log(event);
        let prm = _reformParameters(event.parameters);
        events.push([
          event.name,event.type,
          prm.doc_id,prm.doc_type,prm.doc_title,prm.visibility,prm.actor_is_collaborator_account,
          prm.owner,prm.owner_is_shared_drive,prm.owner_is_team_drive
        ]);
      });
    });
  } while (pageToken);

アクティビティのリストを取得

    page = AdminReports.Activities.list("all", "drive", { 
      pageToken:pageToken,
      startTime:startTime,
      endTime:endTime,
      maxResults:1000
    });
    pageToken = page.nextPageToken;

    if (!page.items) return;

Admin SDK: Reports API

AdminReports
Google Appsの利用状況を取得するAPI(レポート API)

activities = 利用状況?

メソッド(RESTリソース: activities)

Activities.list

list

管理コンソールアプリケーションやGoogleドライブアプリケーションなど、特定の顧客のアカウントとアプリケーションのアクティビティのリストを取得します。

使い方

list("all", "drive", { 
      pageToken:pageToken,
      startTime:startTime,
      endTime:endTime,
      maxResults:1000
    });

パスパラメータ

第1引数

userKey or all
データをフィルタリングするためのプロファイルIDまたはユーザーの電子メールを表します。

  • すべての情報を表示するにはall
  • ユーザの固有のGoogle WorkspaceプロファイルIDまたはプライマリ・メール・アドレスを表示するにはuserKey

を指定します。

第2引数

applicationName
イベントを取得したいアプリケーション名

今回はdrive
Google ドライブ アプリケーションのアクティビティ レポートは、さまざまな Google ドライブ アクティビティ イベントに関する情報を返します。ドライブのアクティビティ レポートは、Google Workspace Business および Enterprise のお客様のみご利用いただけます。
参照:

https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list#ApplicationName

クエリパラメータ

これらが何かわかってない
pageToken

  • 次のページを指定する(pageToken:)トークン
  • 複数のページを持つレポート(?)では、レスポンスにnextPageTokenプロパティがある。
  • レポートの次のページを取得するフォローオン(追加)のリクエストでは、pageToken クエリ文字列に nextPageToken の値を入力(pageToken = page.nextPageToken;)します。

startTime

  • レポートに表示される時間の範囲の始まり

endTime

  • レポートに表示される時間の範囲の終わり

maxResults

  • 各レスポンスページに表示されるアクティビティレコードの数を決定します。例えば、リクエストがmaxResults=1を設定し、レポートに2つのアクティビティがある場合、レポートには2つのページがあります。レスポンスのnextPageTokenプロパティには、2ページ目へのトークンがあります。maxResults クエリ文字列は、リクエストではオプションです。既定値は 1000 です。

セット・抽出

    page.items.forEach(function (item) {
      item.events.forEach(function (event) {
        //console.log(event);
        let prm = _reformParameters(event.parameters);
        events.push([
          event.name,event.type,
          prm.doc_id,prm.doc_type,prm.doc_title,prm.visibility,prm.actor_is_collaborator_account,
          prm.owner,prm.owner_is_shared_drive,prm.owner_is_team_drive
        ]);
      });
    });
  } 

Response body

items

レスポンスの各アクティビティレコード(オブジェクト)

  "items": [
    {
      object (Activity)
    }

https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list#ApplicationName

Activity

アクティビティとは:アクティビティリソースのJSONテンプレート?
object (Activity)

{
  "kind": string,
  "etag": string,
  "ownerDomain": string,
  "ipAddress": string,
  "events": [
    {
      "type": string,
      "name": string,
      "parameters": [
        {
          "messageValue": {
            "parameter": [
              {
                object (NestedParameter)
              }
            ]
          },
          "name": string,
          "value": string,
          "multiValue": [
            string
          ],
          "intValue": string,
          "multiIntValue": [
            string
          ],
          "boolValue": boolean,
          "multiMessageValue": [
            {
              "parameter": [
                {
                  object (NestedParameter)
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "id": {
    "time": string,
    "uniqueQualifier": string,
    "applicationName": string,
    "customerId": string
  },
  "actor": {
    "profileId": string,
    "email": string,
    "callerType": string,
    "key": string
  }
}

https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list#activity

Fields

events

参考

https://developers.google.com/admin-sdk/reports/reference/rest#rest-resource:-activities

アクセストークン

https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be
Google apps scriptを無料で機能拡張出来る29個のAPIまとめ
https://お役立ち.xyz/google-apps-script/muryou-api/3904/