Help us understand the problem. What is going on with this article?

GSuite 管理下アカウントの接続アプリ情報を確認する方法

More than 3 years have passed since last update.

急速に広まったGmail/Google Docsのフィッシング詐欺に対してGoogleが公式声明を発表 | TechCrunch Japan
こんな記事がありまして、不用意に Gmail へのアクセスを許可してしまうと大変なことになるというのが周知されればそれはそれで今後のためにはなるかなという感じですが、良くわかんないけど便利そうだからと許可しちゃうってのはありそうです。GSuite において Google Drive へのアクセスはドメイン(組織)内からのみに限定可能ですが Gmail ではそれができません。

自分自身のアカウントについてはアカウントに接続されているアプリで確認できますが、あなたが GSuite の管理者で、誰かが不用意にアクセスを許可していないか調べなければならないとしたらどうすれば良いでしょうか。

GSuite 管理者は誰がどんなアプリ、サイトにアクセスを許可しているかを Google Apps Admin SDK Directory API の Tokens で確認することができます。

list で次のようなレスポンスが得られます。get では clientId を指定することで当該 clientId に限定した情報が得られますが、list より得られる情報が増えたりはしません。利用者に確認するまでもなく削除が必要な場合は delete で当該アクセス権を削除できます。

{
    "etag": "\"eqO3c9wtJJ4wVWz2xe0E9HiU_D0/2MNtXFuDDgEQvKBqfbFtTDmReGI\"",
    "items": [
        {
            "anonymous": false,
            "clientId": "292824132082.apps.googleusercontent.com",
            "displayText": "Google APIs Explorer",
            "etag": "\"eqO3c9wtJJ4wVWz2xe0E9HiU_D0/ZWXyg2w4w1l-_X9W1wX_vSO76fs\"",
            "kind": "admin#directory#token",
            "nativeApp": false,
            "scopes": [
                "https://www.googleapis.com/auth/apps.licensing"
            ],
            "userKey": "123456789012345678901"
        },
        {
            "anonymous": false,
            "clientId": "123456123456-abcdefghijklmnopqrstuvwxyz123456.apps.googleusercontent.com",
            "displayText": "Zendesk",
            "etag": "\"eqO3c9wtJJ4wVWz2xe0E9HiU_D0/QXKjHjHAD9x50uNksx_wmy4kVLQ\"",
            "kind": "admin#directory#token",
            "nativeApp": false,
            "scopes": [
                "https://www.googleapis.com/auth/userinfo.email",
                "https://www.googleapis.com/auth/plus.me"
            ],
            "userKey": "123456789012345678901"
        },
        {
            "anonymous": false,
            "clientId": "Google Chrome",
            "displayText": "Google Chrome",
            "etag": "\"eqO3c9wtJJ4wVWz2xe0E9HiU_D0/sIMeSUCOeG2Jl1L5wIOh2MTQpgQ\"",
            "kind": "admin#directory#token",
            "nativeApp": true,
            "scopes": [
                "https://www.google.com/accounts/OAuthLogin"
            ],
            "userKey": "123456789012345678901"
        },
        {
            "anonymous": false,
            "clientId": "123123123123-123456abcdefghijklmnopqrstuvwxyz.apps.googleusercontent.com",
            "displayText": "Grafana",
            "etag": "\"eqO3c9wtJJ4wVWz2xe0E9HiU_D0/K6LTcWi4y797iMujMH9jeHFXQ-U\"",
            "kind": "admin#directory#token",
            "nativeApp": false,
            "scopes": [
                "https://www.googleapis.com/auth/userinfo.profile",
                "https://www.googleapis.com/auth/userinfo.email"
            ],
            "userKey": "123456789012345678901"
        }
    ],
    "kind": "admin#directory#tokenList"
}

それぞれに、どの権限を許可しているのかは scopes に入っています。
https://developers.google.com/identity/protocols/googlescopes#scriptv1 などにあります。

scope の一例

scope
https://mail.google.com/ Read, send, delete, and manage your email
https://www.googleapis.com/auth/userinfo.profile View your basic profile info
https://www.googleapis.com/auth/userinfo.email View your email address
https://www.googleapis.com/auth/plus.me Know who you are on Google
https://www.googleapis.com/auth/drive View and manage the files in your Google Drive
https://www.googleapis.com/auth/drive.readonly View the files in your Google Drive
https://www.googleapis.com/auth/spreadsheets View and manage your spreadsheets in Google Drive
https://www.googleapis.com/auth/spreadsheets.readonly View your Google Spreadsheets
https://www.google.com/m8/feeds Manage your contacts
https://www.google.com/calendar/feeds Manage your calendars

などなど沢山あります

https://mail.google.com/ とか https://www.googleapis.com/auth/drive なんて怖すぎてとてもじゃないけど許可したくないですよね?でも意外と簡単に許可しちゃうんですよ...

OAuth 2.0 Playground を見ると Gmail には個別の権限もあるっぽい

一括で調査する

https://github.com/yteraoka/googleapps-directory-tools に GSuite のアカウントを操作するスクリプト群があります。

tokens.pyTokens API にアクセスできます。

$ ./tokens.py
usage: tokens.py [-h] [--auth_host_name AUTH_HOST_NAME]
                 [--noauth_local_webserver]
                 [--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]]
                 [--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
                 {list,get,delete} ...
tokens.py: error: too few arguments

$ ./tokens.py list
usage: tokens.py list [-h] [--scopes SCOPES] [--whitelist WHITELIST] [--json]
                      [--jsonPretty]
                      userKey
tokens.py list: error: too few arguments

user.py でアカウント一覧が取得できるので

$ user.py list -d example.com \
    | awk '{print $1}' \
    | xargs -n 1 tokens.py list

で example.com の全アカウントの接続アプリ情報が取得できます。
が、ノイズが多くても困るので --scopes で重要な scope だけ指定すればそれが含まれるアプリだけが表示されます。

$ tokens.py list \
  --scopes https://mail.google.com/ \
  --scopes https://www.googleapis.com/auth/drive \
  user@example.com

これでも全員が OAuth でログインするようなアプリがあったりすると邪魔なのでホワイトリストファイルとして clientId リストのファイルを作成し --whitelist でファイルを指定すると表示から除外できます。

$ ./user.py list -d example.com \
  | awk '{print $1}' \
  | xargs -n 1 ./tokens.py list \
      --scopes https://mail.google.com/ \
      --scopes https://www.googleapis.com/auth/drive \
      --whitelist whitelist.txt

こんな感じで怪しげなアプリに許可してないかチェックできますね。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away