Google drive Domain wide delegation

GoogleDriveにbotが人のふりをしてファイルをアップロードする(Google Workspace限定)

Googleのサービスアカウントでドメイン全体の権限委譲をする

毎日Google DriveにファイルをアップロードするBotを書いていて、 ある、ファイル容量でもうあげれないよ?って警告がでて動かなくなってきた。 そこで、ドメイン全体の権限委譲が必要となって解決した話。

権限委譲をすることによって、委譲した人となってGoogle Driveにアクセスできるようになる。 つまり、ファイル容量の制限がサービスアカウントではなく、workspaceのユーザーのものになる。

ドメイン全体の権限委譲が必要

もろもろ調べていると、サービスアカウントはgoogleから見るとDummyアカウントとしてみなされていて

  • 特定のドメインに追加することもダメ
  • owner権限をbotからユーザーにすることもダメ

な模様。Google Workspaceから設定が必要なので、まずはWorkspaceの特権権限をもらい、 ドメイン全体の権限委譲 の手順に従って設定をします。

ドメイン移譲をコードに反映する

通常のサービスアカウントの認証部分にdelegateを。追加します。 create_delegateをしておくことによって、このbotにメールアドレスの人の権限が委譲され、Driveの履歴もメールアドレスの人のものになる。

from googleapiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

scope =['https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('creds.json', scope)

#この行を追加
delegated_credentials = creds.create_delegated('your-email@gmail.com')

service = build('drive', 'v3', credentials=delegated_credentials)

まとめ

多分同様の問題に当たる人がそんなに多くないのか、結構調べるのに時間がかかってしまった。 これでファイル容量を気にせずdriveにアップロードできるようになった。よかったよかった

参考リンク:stackoverflow

connvoi's Picture

About connvoi

肉とビールと料理と写真とゲーム たまに技術 python / Solr / PHP / ansible

アマゾンセール情報サイト アマセール管理人

Jp, Tokyo https://connvoi.com